| !------------------------------------------------------------------------------ | |
| ! demonstration of 'scenery description' implementation | |
| ! | |
| ! change log | |
| ! | |
| ! 950118 r1 first version | |
| ! 960215 r2 second version; after examining a scenery object, `it' now | |
| ! appears to refer to the object; also the `that's just | |
| ! scenery' message (RDB_SCENERY_PE) has the same priority as | |
| ! `that's not something you need to refer to ...' (SCENERY_PE) | |
| ! when complaining. | |
| !------------------------------------------------------------------------------ | |
| Switches dexv5; | |
| Constant Story "A SCENIC VIEW"; | |
| Constant Headline "^A demo of object-less `scenery descriptions'^\ | |
| by Richard Barnett.^"; | |
| Release 2; | |
| Global specWord; | |
| Replace CantSee; | |
| Constant RDB_SCENERY_PE 100; ! to indicate reference to a scenery non-obj | |
| #include "Parser"; | |
| #include "VerbLib"; | |
| Property sceneDesc $ffff; | |
| !============================================================================== | |
| ! action routines | |
| !============================================================================== | |
| Object ScDescDummyObj "scDescDummy", | |
| with description | |
| [; ! print description of the scenery | |
| print (string) self.number; new_line; rtrue; | |
| ], | |
| short_name | |
| [; ! print correct name for the rare cases (pronouns, (taking the | |
| ! ... first)) when we need the short name | |
| if (self.n_to ~= 0) { print (address) self.n_to; rtrue; } | |
| ], | |
| before | |
| [; ! allow Examine actions to pass, but stop all other actions & | |
| ! print an appropriate message | |
| Examine: rfalse; | |
| default: "That's just scenery."; | |
| ], | |
| n_to 0, ! stores addr of dict word naming scenery last examined | |
| number 0, ! stores addr of string describing scenery last examined | |
| found_in | |
| [; rtrue; ], ! found everywhere so always in scope (if it's light) | |
| has concealed; | |
| [ GetScDescAddr loc spWord addr len i; | |
| addr = loc.&sceneDesc; | |
| len = loc.#sceneDesc; | |
| if (addr-->0 == $ffff) | |
| ! no sceneDesc property, so return 0 | |
| return 0; | |
| for (i = 0 : i < (len / 2) : i = i + 2) | |
| if (spWord == addr-->i) | |
| ! found spWord, so return addr of its description string | |
| return addr-->(i + 1); | |
| ! not found; return 0 | |
| return 0; | |
| ]; | |
| [ AnyWord w; | |
| w = NextWord(); | |
| if (w ~= -1) | |
| { | |
| specWord = w; | |
| return 0; | |
| } | |
| return -1; | |
| ]; | |
| [ SceneDescSub addr; | |
| addr = GetScDescAddr(location, specWord); | |
| if (addr == 0) | |
| { | |
| if ((location has visited) | |
| && Refers(location, specWord)==1) | |
| "That's not something you need to refer to in the course of \ | |
| this game."; | |
| "You can't see any such thing."; | |
| } | |
| ! set itobj so that `x it' or `get it' etc now work | |
| itobj = ScDescDummyObj; | |
| ! store addrs of dict word naming scenery & string describing it in | |
| ! ScDescDummyObj | |
| itobj.number = addr; | |
| itobj.n_to = specWord; | |
| ! print the description | |
| print (string) addr; | |
| new_line; | |
| return 0; | |
| ]; | |
| [ CantSee i w e; | |
| saved_oops=oops_from; | |
| if (scope_token~=0) { scope_error = scope_token; return ASKSCOPE_PE; } | |
| wn--; w=NextWord(); | |
| e=CANTSEE_PE; | |
| if (w==vague_word) e=ITGONE_PE; | |
| i=parent(actor); | |
| if (i has visited && Refers(i,w)==1) e=SCENERY_PE; | |
| ! is it an attempt to refer to a scenery non-obj? | |
| if (GetScDescAddr(i,w) ~= 0) e=RDB_SCENERY_PE; | |
| if (etype>e) return etype; | |
| ! RDB_SCENERY_PE should have the same priority as SCENERY_PE; since | |
| ! it's numerically greater, use this test. | |
| if ((e == RDB_SCENERY_PE) && (etype > SCENERY_PE)) return etype; | |
| return e; | |
| ]; | |
| [ ParserError eType; | |
| if (eType == RDB_SCENERY_PE) | |
| "That's just scenery."; | |
| return 0; | |
| ]; | |
| !============================================================================== | |
| ! objects | |
| !============================================================================== | |
| Object outerSwamp "Swamp" | |
| with description "Swathes of rushes grow at the edge of the swamp; behind \ | |
| them rise the tall trees which form the verdant canopy \ | |
| over the marsh's mud.", | |
| name "swamp" "bog" "marsh", | |
| found_in sRockOutcrop nRockOutcrop, | |
| has scenery; | |
| !============================================================================== | |
| Object sRockOutcrop "South end of rock outcrop" | |
| with description "You stand at the lower end of a bare rock outcrop \ | |
| situated where a dismal region of swamp meets the sea; \ | |
| it rises to a flat peak to the northeast. The stone \ | |
| underfoot is pale and unweathered, supporting no plant \ | |
| life, but there's a dark shape some way up the slope. \ | |
| The ocean and a small beach are to the south, while the \ | |
| swamp thins a bit at the north end of the crag.", | |
| n_to nRockOutcrop, | |
| s_to rockBeach, | |
| ne_to caveMouth, | |
| u_to caveMouth, | |
| sceneDesc 'tree' "Straight-trunked and inaccessible." | |
| 'mud' "It's slimy, dark and malodorous." | |
| 'rushes' "They're home to insects and swamp birds.", | |
| name "peak", | |
| has light; | |
| !============================================================================== | |
| Object rockBeach "Rock beach" | |
| with description "The ridge to the north forms a rock beach here as it \ | |
| slopes gently down into the peaceful ocean.", | |
| n_to sRockOutcrop, | |
| sceneDesc 'ocean' "Currently calm, it reflects the overcast sky." | |
| 'water' "It's clear, except where the gentle waves stir up \ | |
| some silt.", | |
| has light; | |
| !============================================================================== | |
| Object nRockOutcrop "North end of rock outcrop" | |
| with description "The rock ridge thrusts out of the vaporous swamp, with \ | |
| sheer drops of several meters down to the semi-solid \ | |
| surface. To the northwest, the swamp is somewhat \ | |
| thinner and there appears to be some solid ground: a \ | |
| path winds into the trees, and you could climb down to \ | |
| it without much difficulty. You can still see the dark \ | |
| shape upslope and to the southeast, and wonder whether \ | |
| it's a cave.", | |
| s_to sRockOutcrop, | |
| se_to caveMouth, | |
| u_to caveMouth, | |
| nw_to "The humidity and heat in the swamp would play havoc with your \ | |
| chest condition.", | |
| d_to "The humidity and heat in the swamp would play havoc with your \ | |
| chest condition.", | |
| has light; | |
| !============================================================================== | |
| Object caveMouth "Near a cave mouth" | |
| with description "The ridge rises another ten metres or so above you, but \ | |
| there are no obvious foot- or handholds for the first \ | |
| five; you can't really get much higher. Nevertheless, \ | |
| the view is expansive if not very impressive: a dark \ | |
| spire pokes out of the swamp to the north; a wide river \ | |
| flows through the swamps and joins the sea to the east, \ | |
| and there are a few rocky islands to be seen in the \ | |
| ocean. The dark shape you saw earlier is, as has been \ | |
| evident for some time, a small cave mouth. The best \ | |
| routes back down are to the north- and southwest.", | |
| nw_to nRockOutcrop, | |
| d_to nRockOutcrop, | |
| sw_to sRockOutcrop, | |
| in_to "Claustrophobia is a cruel affliction; perhaps someday a cure \ | |
| will come to light.", | |
| sceneDesc 'spire' "Tall and slender; at its tip is something which \ | |
| catches the sunlight." | |
| 'river' "Its waters are a bilious yellow." | |
| 'ocean' "The yellow taint of the river's flow extends out \ | |
| towards one of the islands: evidence of a strong \ | |
| current." | |
| 'islands' "Wind and wave have carved them into uncanny \ | |
| configurations.", | |
| has light; | |
| !============================================================================== | |
| [ Initialise; | |
| location = sRockOutcrop; | |
| print "^^You awaken, and find yourself somewhere scenic...^^"; | |
| ]; | |
| !============================================================================== | |
| #include "Grammar"; | |
| Extend "examine" last | |
| * AnyWord -> SceneDesc; | |
| Extend "look" last | |
| * "at" AnyWord -> SceneDesc; | |
| end; | |
Xet Storage Details
- Size:
- 8.8 kB
- Xet hash:
- 40b4c3607b58f70d25a89b3e7e85e92261c2fd456b6724813aad39ae222eb897
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.