!
! You should have received a copy of the GNU Affero General Public
! License along with this file. If not, see https://gnu.org/licenses/
+Global lantern_fuel_left = 20;
Constant DEATH_MENTION_UNDO;
Constant Story "Snowed In";
Constant Headline
Include "parser";
Include "verblib";
Release 0;
-Serial "210401";
+Serial "210405";
Object mainroom "Main Room"
with description
happened in here. There's a ripped up sofa and a broken
old coffee table in the middle of the room. A flat-screen
TV is mounted against the wall, with the screen dangling
- out. Tis cabin has three other rooms. There's an office
- area with a desk and computer to the east. There's a
- bedroom to the north and a kitchenette to the west.
- There's a doorway in the south wall leading outside.",
+ out. This cabin has three other rooms. There's an office
+ area to the east, and a bedroom to the north. A
+ kitchenette can be found to the west. There's a doorway
+ in the south wall leading outside.",
+ n_to bedroom,
e_to office,
+ w_to kitchenette,
has light;
Object sofa "sofa" mainroom
],
has scenery supporter enterable;
+Object lantern "copper lantern" coffeetable
+ with name 'lantern' 'copper' 'lamp',
+ description
+ "This is an exceptionally beautiful lamp. About eleven
+ inches high, with a base of about 5 inches or so in
+ diameter and a large, brass-closed hook at the top. The
+ glass in the lamp has a fresnel type of design, which is
+ used to distribute light widely.",
+ time_left,
+ time_out [;
+ if (lantern has on) {
+ lantern_fuel_left = 0;
+ give lantern ~on;
+ give lantern ~light;
+ StopDaemon(lantern);
+ print_ret
+ "The lantern has run out of fuel and is now
+ off.";
+ }
+ ],
+ before [;
+ SwitchOn:
+ if (lantern_fuel_left > 0) {
+ give lantern light;
+ StartTimer(lantern, lantern_fuel_left);
+ }
+ else {
+ print_ret
+ "The lantern is out of fuel and cannot be turned
+ on.";
+ }
+ SwitchOff:
+ StopTimer(lantern);
+ give lantern ~light;
+ ],
+ daemon [;
+ if (lantern has on)
+ lantern_fuel_left = lantern.time_left;
+ if (lantern has on && lantern_fuel_left <= 5)
+ print_ret "The lantern's fuel runs low.";
+ ],
+ has switchable;
+
Object television "flat-screen TV" mainroom
with name 'TV' 'television' 'flat' 'screen' 'flat-screen',
with description
has scenery switchable;
Object lightsocket "light socket" mainroom
- with name 'light' 'socket' 'lightsocket',
+ with name 'socket' 'lightsocket',
before [;
Take, Pull, Push, PushDir, Turn:
print_ret
warning label because you contain more than a trace
amount of nut.";
}
- if (noun == lightbulb) {
+ if (noun == lightbulb && light has on) {
give mainroom light;
give office light;
+ give kitchenette light;
+ give bedroom light;
+ give eastofcabin light;
}
],
has scenery container transparent open;
Object lightbulb "light bulb" lightsocket
with name 'light' 'bulb' 'lightbulb',
+ before [;
+ SwitchOn:
+ if (lightbulb in lightsocket) {
+ give mainroom light;
+ give office light;
+ give kitchenette light;
+ give bedroom light;
+ give eastofcabin light;
+ }
+ else {
+ print_ret
+ "Turn on a lightbulb when it's not in the
+ socket? What a strange idea.";
+ }
+ ],
after [;
- Take, Pull, Push, PushDir, Turn:
+ Take, Pull, Push, PushDir, Turn, SwitchOff:
+ give lightbulb ~on;
give mainroom ~light;
give office ~light;
- ];
+ give kitchenette ~light;
+ give bedroom ~light;
+ give eastofcabin ~light;
+ ],
+ has switchable on;
Object office "Office"
with description
drywall and insulation cover the floor. The desk has a
bullet hole through the middle.",
w_to mainroom,
+ e_to window,
has light;
Object desk "solid oak desk" office
],
has switchable;
+Object drywall "drywall" office
+ with name 'drywall' 'dry' 'wall',
+ before [;
+ Take, Pull, Push, PushDir, Turn:
+ print_ret "Taking that would achieve little.";
+ ],
+ has scenery;
+
+Object insulation "insulation" office
+ with name 'insulation',
+ before [;
+ Take, Pull, Push, PushDir, Turn:
+ print_ret "Taking that would achieve little.";
+ ],
+ has scenery;
+
+Object bullethole "bullet hole" desk
+ with name 'bullet' 'hole' 'holes',
+ with description
+ "Looks to have come from something that's capable of
+ doing a lot of damage.",
+ found_in desk bedroom,
+ has scenery;
+
+Object window "window" office
+ with name 'window' 'windows',
+ description
+ "The window faces the east side of the cabin. It's broken,
+ letting in the cold air from outside.",
+ short_name [;
+ if (location == office)
+ print "window";
+ else
+ print "window into the cabin";
+ return true;
+ ],
+ found_in office eastofcabin,
+ door_dir [;
+ if (location == office)
+ return e_to;
+ else
+ return w_to;
+ ],
+ door_to [;
+ if (location == office)
+ return eastofcabin;
+ else
+ return office;
+ ],
+ before [;
+ Search:
+ print_ret "The window faces the east side of the cabin.";
+ Open, Close:
+ print_ret
+ "The window's broken so it's not clear how
+ you'd do that.";
+ ],
+ has scenery door openable open;
+
+Object kitchenette "Kitchenette"
+ with description
+ "The kitchenette is empty. A sink, you think, though it's
+ hard to tell what's a pipe and what's a faucet. A
+ refrigerator, standing open and empty. The door has been
+ ripped off. There's no indication as to where it
+ went. There's no food anywhere in here.",
+ e_to mainroom,
+ has light;
+
+Object refrigerator "refrigerator" kitchenette
+ with name 'fridge' 'refrigerator',
+ with description
+ "An old rusty refrigerator, standing open and empty. The
+ door has been ripped off. There's no indication as to
+ where it went.",
+ before [;
+ Take, Pull, Push, PushDir, Turn:
+ print_ret (The) self, " is too heavy for that.";
+ Open, Close:
+ print_ret (The) self, " door is missing.";
+ ],
+ has scenery enterable container openable open;
+
+Object sink "sink" kitchenette
+ with name 'sink' 'pipe' 'faucet',
+ with description
+ "A sink, you think, though it's hard to tell what's a
+ pipe and what's a faucet.",
+ after [;
+ SwitchOn:
+ print_ret
+ "Pipes from in the walls make a groaning sound,
+ almost like pain and despair. No water comes out.";
+ ],
+ has scenery container switchable;
+
+Object bedroom "Bedroom"
+ with description
+ "This bedroom is small and cramped, and looks like a
+ major fight happened as the exterior wall has bullet
+ holes. The bed is lying on the floor, torn to shreds. It
+ has no sheets, just a bare mattress.",
+ s_to mainroom,
+ has light;
+
+Object bed "bed" bedroom
+ with name 'bed' 'mattress',
+ with description "The mattress is bare and empty.",
+ before [;
+ Take, Pull, Push, PushDir, Turn:
+ print_ret (The) self, " is too heavy for that.";
+ ],
+ has scenery supporter;
+
+Object suitcase "suitcase" bedroom
+ with name 'suitcase',
+ with description
+ "The suitcase is made of a light metallic material that
+ you can't quite make out. The color of it is somewhere
+ between silver and grey.",
+ has container open openable;
+
+Object snowsuit "snowsuit" suitcase
+ with name 'snowsuit' 'snow' 'suit',
+ with description
+ "The snowsuit is blue, decorated with white and purple
+ designs. On the chest is a large emblem with the letters
+ ~CE~ in purple.",
+ before [;
+ Wear:
+ if (snowshoes in player && snowshoes has worn) {
+ print_ret "The snowsuit can't fit over the snowshoes.";
+ }
+ Remove:
+ if (snowshoes in player && snowshoes has worn) {
+ print_ret "The snowsuit can't be taken off over the snowshoes.";
+ }
+ ],
+ has clothing;
+
+Object snowshoes "snowshoes" bedroom
+ with name 'snowshoe' 'snowshoes' 'snow' 'boot' 'boots' 'shoe' 'shoes' 'metal' 'frame',
+ with description
+ "They're light blue in color and have a thick, hard
+ rubber bottom that's attached to a metal frame that keeps
+ you from sinking into the snow. They look to be warm and
+ comfortable.",
+ after [;
+ Wear:
+ print_ret (The) self,
+ " fit perfectly and go up to your
+ knees.";
+ ],
+ daemon [;
+ if (location ~= mainroom && location ~= office && location ~= kitchenette
+ && location ~= bedroom && snowshoes hasnt worn) {
+ deadflag = 3;
+ }
+ ],
+ has pluralname clothing;
+
+Object eastofcabin "East Of Cabin"
+ with description [;
+ print "It's dark outside. ";
+ if (lightbulb has on) {
+ print
+ "The light from inside the cabin only penetrates
+ a few feet from the building. ";
+ }
+ else
+ if (lantern in player && lantern has on) {
+ print
+ "The lantern provides the only source of
+ light. ";
+ }
+ if (snowshoes in player && snowshoes has worn) {
+ print
+ "The snowshoes are doing their job by making sure
+ you don't sink into the snow.";
+ }
+ ],
+ w_to window,
+ has light;
+
[ Initialise;
Location = mainroom;
thedark.description =
the town. You finally manage to find an old cabin in the
woods and get inside but have no idea where you are. You're
not dressed for this weather.^";
+ StartDaemon(lantern);
+ StartDaemon(snowshoes);
+];
+
+[ DeathMessage;
+ if (deadflag == 3)
+ print
+ "You sink into the deep snow and are unable to move.
+ It's only a matter of time until your light source dies and the grue
+ comes. Or until you freeze to death. Or both. I wonder if the grue
+ likes a popsicle.";
];
[ InScope;
if (location == thedark && real_location == mainroom) {
PlaceInScope(lightsocket);
+ PlaceInScope(lightbulb);
}
return false;
];
if (location ~= thedark) {
self.turns_active = 0;
StopDaemon(self);
- rtrue;
+ return true;
}
switch (++(self.turns_active)) {
1:
2:
"^You hear the clink of razor-sharp claws nearby.";
3:
- deadflag = true;
+ deadflag = 1;
"^Your last memory is of the slavering fangs of the
horrible Grue as it claims you for a meal.";
}
* -> Help;
Verb 'xyzzy'
- * -> Xyzzy;
\ No newline at end of file
+ * -> Xyzzy;
+
+Verb 'crawl'
+ * 'through' / 'out' / 'via' noun -> Go;
+
+Verb 'escape'
+ * 'through' / 'out' / 'via' noun -> Go;
+
+Extend 'jump'
+ * 'through' / 'out' / 'via' noun -> Go;
+
+Extend 'climb'
+ * 'through' / 'out' / 'via' noun -> Go;
+
+Extend 'go'
+ * 'through' / 'out' / 'via' noun -> Go;
\ No newline at end of file