6 ms·
The fun used to be that you needed to figure out the object dropping thing and then the thing that you need to think about the rooms as an abstract graph instea
by rsaarelm 10y ago
The fun used to be that you needed to figure out the object dropping thing and then the thing that you need to think about the rooms as an abstract graph instead of something that makes spatial sense. (Zork started off as a mainframe game whose audience was pretty much all computer scientists, so they would've been expected to know about graph data structures.)
Once you know the trick, the rest is annoying busywork, and adding a maze has been considered bad design in most text adventures made after the Zork era.
The generally annoying thing about text adventures is that if you hit a puzzle you don't get, your progress can grind into total halt. There's no alternative strategies or just getting lucky like there is in roguelikes. And there are plenty of badly designed games where after having the puzzle explained, you'll go "how was I supposed to figure out THAT?" (Zork 2 has a couple infamous puzzles like this.) If you want to get text adventures, you might want to just use hints when needed to get through a few so you'll get a sense of what the games consider appropriate hints and puzzles.
- chongli 10y agoYeah, I'm aware of graph data structures. I tried creating a map like that too. It ended up a big mess of nodes with all of these edges intersecting each other and looping back around. I might have made a mistake or two and that screwed up the graph even more! It drove me crazy with how tedious it was. I guess I reached a point where I said "this is just too complex, it can't be the right solution, there's got to be a smarter way to do this". So to find out that there isn't a smarter way just makes me think it's a terrible puzzle design.
- rsaarelm 10y agoIt is terrible puzzle design. Zork is old.
- CPLX 10y agoI solved it with a pencil and paper when I was 12 years old or so, and I'm pretty sure lots of other people did too. I agree it's a little tedious by modern standards but it's really not that complicated. If I recall correctly you can represent the entire thing with about 5-10 boxes connected by a couple lines between them plus a bunch of little loops where the player remains in the same place. It's a succinct area of the map. Perhaps you should try again with a fresh perspective.
- pimlottc 10y agoHere's an example of a map like that [0] I made a while ago for an online game. Each room, uniquely identified by an arbitrary item (bagel, lantern, longsword, loaf of bread, etc), is drawn separately with lines in each of the four cardinal indicating where those exits end up. Some are indicated as one-way passages, while others are bent to indicate some sort of spatial relationship when it's reasonable to show (though the entire maze has no coherent planar form). Rooms are in rough order of distance from the end of the maze, which starts at "RED" (through the one-way passage from "FT") and ends at "BREAD" with the east exit back to "FT". Of course, this is a cleaned up version once I had discovered all the connections; while mapping, each passage would be drawns as a straight one-way connection until bi-directional relationships were discovered. The chart on the bottom shows the same maze in the form of an adjacency matrix, showing which rooms are connected to which, and by which direction. Again, the rooms are banded by number of steps from the exit. Note that pairs of rooms with bi-directional connections can be discovered by noticing filled cells whose positions are symmetrical about the diagonal of the chart. The 3 x 3 square in the upper corner is a sort of simple compass I came up with for navigating the maze; it tells you which way to go based on the "shape" (i.e. which directions have exists) of the room. Even though not all room shapes are unique, if you follow those directions you are guaranteed to get out relatively quickly. 0: http://imgur.com/a/2SE8A http://imgur.com/a/2SE8A
- DonHopkins 10y agoThe 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/be079a4ed234071222e991d0da0f9e8c7f96d125/act1.mud#L1060 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/be079a4ed234071222e991d0da0f9e8c7f96d125/dung.mud#L6204 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/be079a4ed234071222e991d0da0f9e8c7f96d125/act3.mud#L592 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/be079a4ed234071222e991d0da0f9e8c7f96d125/act3.mud#L641 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/be079a4ed234071222e991d0da0f9e8c7f96d125/dung.mud#L649 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.">
- derekp7 10y ago"how was I supposed to figure out THAT?" The worst one of this type, is the official solution to getting money from the slot machine in Leisure Suit Larry. You have to save the game state, play the slot machine, and if you win you save game state again. If you lose, you restore form the last save point, and repeat as necessary (until you get enough money). So there is no way to get past that puzzle without "breaking the 4th wall", so to speak.