Up to Main Index                          Up to Journal for December, 2018

                   JOURNAL FOR SUNDAY 16TH DECEMBER, 2018
______________________________________________________________________________

SUBJECT: Pesky nil panics during resets finally fixed + maps!
   DATE: Sun 16 Dec 19:59:43 GMT 2018

While working on improving, and fixing, veto processing I accidentally left
the server running for an extended period of time. It threw a nil panic
processing a reset event again :(

I’d already tried to fix the problem twice, and was sure I’d nailed it.
Obviously not. So I laid aside my work on vetoes and started pulling the code
apart again. It took over a week pouring over many gigabytes of log files,
with additional logging and PrintStack all over the place, until I finally
realised what had gone so horribly wrong. More than once I thought it was
something really fundamental in the design, accompanied by horrible visions of
starting all over again :s

Back in September last year I introduced disabled items in inventories to
simplify bookkeeping and solve a locking problem. In doing so there was a
subtle change in the mechanics of respawning and resetting. Previously the
original item was given to the acquiring player and a copy of the original was
made and scheduled for a reset. With the changes the copy was given to the
acquiring player, and the original reset.

As the copy was being reset the origins of the item and any content had to be
corrected by calling SetOrigins. With the new mechanics doing so caused some
very strange and subtle issues — for example the random nil panics caused when
some of the copied inventories no longer existed for the reset.

To fix the problem I’ve added a new ClearOrigins which is called on the copied
item given to the acquiring player or mobile. Along the way I’ve also fixed a
few other minor bugs and nits. A quick list:


  - attr: Clear, not set, origins on reset (Fixes nil panics)
  - attr,has: Add ClearOrigins to Thing
  - cmd: Correct order of imports in $ACTION
  - attr: Make Origin check in Thing.Collectable more thorough
  - attr: Drop redundant FindLocate and SetWhere in Disable
  - cmd: Use Inventory.Everything() in MOVE command
  - zone: Use Inventory.Everything() in zone loader
  - attr: Use Inventory.Everything() in Thing
  - attr,has: Add Everything method to Inventory
  - cmd: Fix get when actor has no Inventory
  - docs: Add maps for main, stock zones.
  - data: Fix pen mouse in alley + stop other creatures entering


Worthy of note, a mobile without an inventory no longer panics if they get or
take items. The mouse is now really penned into the alley — I missed out an
additional barrier. Finally, I’ve added maps!

For a while now people have been asking for maps of the three stock zones. I
have now had some time to create them. You’ll find them in zone-maps.txt in
the docs directory. A preview!


  CITY OF ZINARA

  This map is for the city of Zinara as provided in the zinara.wrj zone file.
  When referenced in zone-links it has the mnemonic Z.


                                        L70-L57        MAP KEY
                                             |           # = door
                                            L56          ± = up & down
                                             |           § = zone link
                        L29     L41-L40     L55 L49      S = starting location
                         |       ±   |       |   |
                L34-L33-L30     L42 L39     L46-L48
                     |   |           |       |
                    L32-L31         L38 L18 L45 L16
                     |   |           |   |   |   |
                    L35 L28-L27-L26-L25-L17-L14-L15-L19-S20
                     |           |           |       |
                    L36     L66 L58 S01-L03#L05-L06 L43
                     #       |   |   | X |   |       |
                    L37     L65 L59 L02-L04 L07-L08 L44
                             |   |           |       |
                L64-L63-L62-L61-L60-L24-L10-L09-L12-L21-S22
                 |                   |   |   |   |
                L72                 L23 L11 L50 L13
                                             |
                                            L51-L67
                                             |
                                    L54-L53-L52
                                             |
                                            L68
                                             |
                                            L69-L71
                                             §
                                           SZ:L1


  SOUTH OF ZINARA

  This map is for the zone south of Zinara as provided in the zinara_south.wrj
  zone file. When referenced in zone-links it has the mnemonic SZ.


                                       Z:L69           MAP KEY
                                        §                ℓ = loop back to self
                                       L01               § = zone link
                                        |
                                       L02
                                        |
                                       L03
                                        |
                                       L04
                                        |
                                   L09-L05-L07
                                    |   |   |
                               L13-L10-L06-L08
                                |   |   |
                                §  L11 L12
                              ZC:L1     ℓ


  CAVES NEAR ZINARA

  This map is for the caves near Zinara as provided in the zinara_caves.wrj
  zone file. When referenced in zone-links it has the mnemonic ZC.


                            SZ:L13                       MAP KEY
                              §                     nsewud = one way exit in
                             L01                             direction given
                              |                          * = location appears
                             L02                             multiple times
                              |                          ± = up & down
                     !26-L05-L03-L06                     ℓ = loops to self
                              |   ±                      § = zone link
                             L04 L07 *25     !12         ! = doesn't exist
                              |   |d  n       |
                              |   +-wL08-L09-*10-!11
                              |       s±      |
                              |      *25      |  *28
                              |               sℓ  n
                              |             ℓL24-*27e*24
                              |               s   ℓ
                              |              *10
                              |
                             L13-L14         *21
                                  ±           n   ℓ
                                 L15        ℓ*23-*28e*27
                                  ±           nℓ  ℓ
                                 L16-L17-L19-*21
                                      |   |   |
                                     L18-L20-L22
                                          ±
                                         L29


I still haven’t finished with the vetoes yet, but should have some time this
week. For now all of the above changes, including the maps, are on the public
dev branch.

--
Diddymus


  Up to Main Index                          Up to Journal for December, 2018