The problem with trying to map Zork by dropping objects around, is that the damn thief comes along and picks them up. (Think of the thief as an incremental garbage collector, but not conservative because he also steals objects from your inventory that are still in use!)

https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...

; "SUBTITLE A SEEDY LOOKING GENTLEMAN..."

So if you want to make a map by dropping objects, be sure to kill the thief first, otherwise he will rob you blind and take all the objects you dropped.

(<NOT .DEAD?>
<COND (<MEMQ .STILL <HOBJS .HACK>>
<PUT .HACK ,HOBJS <SPLICE-OUT .STILL <HOBJS .HACK>>>
<PUT .HOBJ ,OCONTENTS (.STILL)>
<PUT .STILL ,OCAN .HOBJ>)>
<PUT .HACK ,HOBJS <SET HH <ROB-ROOM .RM .HH 100>>>
<PUT .HACK ,HOBJS <SET HH <ROB-ADV .WIN .HH>>>
<PUT .HACK ,HFLAG T>
<COND (<AND <N==? .OBJT .HH> <NOT .HERE?>>
<TELL
"A seedy-looking individual with a large bag just wandered through
the room. On the way through, he quietly abstracted all valuables
from the room and from your possession, mumbling something about
\"Doing unto others before..\"" ,LONG-TELL1>)
(.HERE?
<SNARF-OBJECT .HOBJ .STILL>
<COND (<N==? .OBJT .HH>
<TELL
"The other occupant just left, still carrying his large bag. You may
not have noticed that he robbed you blind first.">)
(<TELL
"The other occupant (he of the large bag), finding nothing of value,
left disgusted.">)>
<REMOVE-OBJECT .HOBJ>
<SET HERE? <>>)

But first be sure to hand him (or let him steal) the jewel encrusted egg before you kill him, since he's the only one with nimble enough fingers to open the egg without breaking it, to get to the clockwork canary inside. Once you retrieve the opened egg from his lair, take the canary to the tree and wind it, and you will receive a beautiful brass bauble!

<SET EGG <SFIND-OBJ "EGG">>
<MAPF <>
<FUNCTION (X)
#DECL ((X) OBJECT)
<COND (<G? <OTVAL .X> 0>
<PUT .HACK ,HOBJS <SET HH <SPLICE-OUT .X .HH>>>
<INSERT-OBJECT .X .RM>
<COND (<==? .X .EGG>
<SETG EGG-SOLVE!-FLAG T>
<TRO .X ,OPENBIT>)>)>>

https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...

<OBJECT ["EGG"]
["BIRDS" "ENCRU"]
"jewel-encrusted egg"
<+ ,OVISON ,TAKEBIT ,CONTBIT>
EGG-OBJECT
(<GET-OBJ "GCANA">)
(OFVAL 5
OTVAL 5
ODESC1 "There is a jewel-encrusted egg here."
OCAPAC 6
ODESCO
"In the bird's nest is a large egg encrusted with precious jewels,
apparently scavenged somewhere by a childless songbird. The egg is
covered with fine gold inlay, and ornamented in lapis lazuli and
mother-of-pearl. Unlike most eggs, this one is hinged and has a
delicate looking clasp holding it closed. The egg appears extremely
fragile.")>

<OBJECT ["BEGG" "EGG"]
["BROKE" "BIRDS" "ENCRU"]
"broken jewel-encrusted egg"
<+ ,OVISON ,TAKEBIT ,CONTBIT ,OPENBIT>
<>
(<GET-OBJ "BCANA">)
(OCAPAC 6
ODESC1 "There is a somewhat ruined egg here.")>

<OBJECT ["GCANA" "CANAR"]
["CLOCK" "MECHA" "GOLD" "GOLDE"]
"clockwork canary"
<+ ,OVISON ,TAKEBIT>
CANARY-OBJECT
()
(OFVAL 6
OTVAL 2
ODESC1 "There is golden clockwork canary here."
ODESCO
"There is a golden clockwork canary nestled in the egg. It has ruby
eyes and a silver beak. Through a crystal window below its left
wing you can see intricate machinery inside. It appears to have
wound down.")>

<OBJECT ["BCANA" "CANAR"]
["BROKE" "CLOCK" "MECHA" "GOLD" "GOLDE"]
"broken clockwork canary"
<+ ,OVISON ,TAKEBIT>
CANARY-OBJECT
()
(ODESC1 "There is a non-functional canary here."
ODESCO

https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...

<DEFINE EGG-OBJECT ("AUX" (BEGG <SFIND-OBJ "BEGG">) (EGG <SFIND-OBJ "EGG">))
#DECL ((BEGG) OBJECT)
<COND (<AND <VERB? "OPEN">
<==? <PRSO> .EGG>>
<COND (<TRNN <PRSO> ,OPENBIT> <TELL "The egg is already open.">)
(<EMPTY? <PRSI>>
<TELL "There is no obvious way to open the egg.">)
(<==? <PRSI> <SFIND-OBJ "HANDS">>
<TELL "I doubt you could do that without damaging it.">)
(<TRNN <PRSI> <+ ,WEAPONBIT ,TOOLBIT>>
<TELL
"The egg is now open, but the clumsiness of your attempt has seriously
compromised its esthetic appeal.">
<BAD-EGG .BEGG>)
(<TRNN <PRSO> ,FIGHTBIT>
<TELL "Not to say that using the "
1
<ODESC2 <PRSI>>
" isn't original too...">)
(<TELL "The concept of using a "
1
<ODESC2 <PRSI>>
" is certainly original.">
<TRO <PRSO> ,FIGHTBIT>)>)
(<VERB? "OPEN" "POKE" "MUNG">
<TELL
"Your rather indelicate handling of the egg has caused it some damage.
The egg is now open.">
<BAD-EGG .BEGG>)>>

https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...

<DEFINE CANARY-OBJECT ("AUX" (HERE ,HERE) (TREE <SFIND-ROOM "TREE">))
#DECL ((HERE TREE) ROOM)
<COND (<VERB? "WIND">
<COND (<==? <PRSO> <SFIND-OBJ "CANAR">>
<COND (<AND <NOT ,SING-SONG!-FLAG>
<OR <MEMBER "FORE" <STRINGP <RID .HERE>>>
<==? .HERE .TREE>>>
<TELL ,OPERA>
<SETG SING-SONG!-FLAG T>
<INSERT-OBJECT <SFIND-OBJ "BAUBL">
<COND (<==? .HERE .TREE>
<SFIND-ROOM "FORE3">)
(.HERE)>>)
(<TELL
"The canary chirps blithely, if somewhat tinnily, for a short time.">)>)
(<TELL
"There is an unpleasant grinding noise from inside the canary.">)>)>>

https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...

<PSETG OPERA
"The canary chirps, slightly off-key, an aria from a forgotten opera.
From out of the greenery flies a lovely songbird. It perches on a
limb just over your head and opens its beak to sing. As it does so
a beautiful brass bauble drops from its mouth, bounces off the top of
your head, and lands glimmering in the grass. As the canary winds
down, the songbird flies away.">