X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsnowed-in.inf;h=c0b9f000f845bd373a258c54eb01405cddf1ad9a;hb=3a7e5fe18b87c2374bc7ea8ea96f58df26c94025;hp=5f5f70787ab6dc49a241b1982d324219e9e4582f;hpb=351fcad42efbe4b60fee09fe598c6061890f7c8d;p=snowed-in.git diff --git a/src/snowed-in.inf b/src/snowed-in.inf index 5f5f707..c0b9f00 100644 --- a/src/snowed-in.inf +++ b/src/snowed-in.inf @@ -13,6 +13,10 @@ ! 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; +Global body_temperature = 20; +Global cabin_has_electricity = 1; +Global forest_location = 1; +Constant NO_SCORE; Constant DEATH_MENTION_UNDO; Constant Story "Snowed In"; Constant Headline @@ -21,7 +25,7 @@ Constant Headline ^Ongoing development: https://jxself.org/git/?p=snowed-in.git ^Send bugs and feedback by email to j@@64jxself.org. ^IFID DE9FA2E5-4EC7-4166-9218-E56EFA1DF40F - ^Copyright (C) 2021 Jason Self + ^Copyright (C) 2021 Jason Self ^You can change and share this game under the terms of the GNU Affero General Public License as published by the Free Software Foundation (FSF), either version 3 of the License, or (at your @@ -33,7 +37,7 @@ Constant Headline Include "parser"; Include "verblib"; Release 0; -Serial "210405"; +Serial "210823"; Object mainroom "Main Room" with description @@ -46,10 +50,45 @@ Object mainroom "Main Room" kitchenette can be found to the west. There's a doorway in the south wall leading outside.", n_to bedroom, + s_to frontdoor, e_to office, w_to kitchenette, has light; +Object frontdoor "front door" mainroom + with name 'door' 'front', + description + "The wooden door is made of thick oak wood with the shape + of a bear claw engraved in it.", + short_name [; + if (location == mainroom) + print "door to the outside"; + else + print "door to the cabin"; + return true; + ], + found_in mainroom southofcabin, + door_dir [; + if (location == mainroom) + return s_to; + else + return n_to; + ], + door_to [; + if (location == mainroom) + return southofcabin; + else + return mainroom; + ], + has scenery door openable; + +Object bearclaw "bear claw" mainroom + with name 'bear' 'claw', + with description + "It's in the shape of a thin, sharp claw with three jagged + points at the top of it.", + has scenery; + Object sofa "sofa" mainroom with name 'sofa' 'couch', with description @@ -64,8 +103,8 @@ Object sofa "sofa" mainroom Object coffeetable "coffee table" mainroom with name 'coffee' 'table', with description - "The old coffee table looks as if it's had quite a bit - of use. There are burn marks covering it and the paint is + "The old coffee table looks as if it's had quite a bit of + use. There are burn marks covering it and the paint is worn off in most places.", before [; Take, Pull, Push, PushDir, Turn: @@ -76,9 +115,11 @@ Object coffeetable "coffee table" mainroom Object lantern "copper lantern" coffeetable with name 'lantern' 'copper' 'lamp', description - "This is an exceptionally beautiful lamp. About eleven + "This is an exceptionally beautiful lantern, made of + fired copper, and polished until it shines. 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 + diameter and a large, brass-closed hook at the top. A + rainbow of unique colors run through the copper. The glass in the lamp has a fresnel type of design, which is used to distribute light widely.", time_left, @@ -89,8 +130,9 @@ Object lantern "copper lantern" coffeetable give lantern ~light; StopDaemon(lantern); print_ret - "The lantern has run out of fuel and is now - off."; + "Suddenly, the lantern's flame begins to flicker + violently within its glass prison and then + extinguishes itself."; } ], before [; @@ -101,8 +143,8 @@ Object lantern "copper lantern" coffeetable } else { print_ret - "The lantern is out of fuel and cannot be turned - on."; + "You snap the switch a few times, but nothing + happens."; } SwitchOff: StopTimer(lantern); @@ -119,8 +161,8 @@ Object lantern "copper lantern" coffeetable Object television "flat-screen TV" mainroom with name 'TV' 'television' 'flat' 'screen' 'flat-screen', with description - "The flat-screen TV looks fairly modern but it's - been broken in a fight and the screen is dangling out.", + "The flat-screen TV looks fairly modern but it's been + broken in a fight and the screen is dangling out.", before [; Take, Pull, Push, PushDir, Turn: print_ret (The) self, " is firmly mounted to the wall."; @@ -156,9 +198,9 @@ Object lightsocket "light socket" mainroom print "Put "; print (a) noun; print_ret - " into the light socket? Maybe you should come with a - warning label because you contain more than a trace - amount of nut."; + " into the light socket? Maybe you should come + with a warning label because you contain more than + a trace amount of nut."; } if (noun == lightbulb && light has on) { give mainroom light; @@ -166,6 +208,7 @@ Object lightsocket "light socket" mainroom give kitchenette light; give bedroom light; give eastofcabin light; + give southofcabin light; } ], has scenery container transparent open; @@ -175,11 +218,19 @@ Object lightbulb "light bulb" lightsocket before [; SwitchOn: if (lightbulb in lightsocket) { - give mainroom light; - give office light; - give kitchenette light; - give bedroom light; - give eastofcabin light; + if (cabin_has_electricity == 1) { + give mainroom light; + give office light; + give kitchenette light; + give bedroom light; + give eastofcabin light; + give southofcabin light; + } + else { + print_ret + "You flip the switch a few times, but nothing + happens."; + } } else { print_ret @@ -195,6 +246,7 @@ Object lightbulb "light bulb" lightsocket give kitchenette ~light; give bedroom ~light; give eastofcabin ~light; + give southofcabin ~light; ], has switchable on; @@ -205,6 +257,15 @@ Object office "Office" broken, letting in the cold air from outside. Chunks of drywall and insulation cover the floor. The desk has a bullet hole through the middle.", + before [; + Go: + if (noun == e_obj) { + if (snowshoes has worn) + print_ret + "You can't fit through the window while wearing the snow + shoes."; + } + ], w_to mainroom, e_to window, has light; @@ -389,7 +450,7 @@ Object bed "bed" bedroom has scenery supporter; Object suitcase "suitcase" bedroom - with name 'suitcase', + with name 'suitcase' 'case', with description "The suitcase is made of a light metallic material that you can't quite make out. The color of it is somewhere @@ -407,15 +468,79 @@ Object snowsuit "snowsuit" suitcase if (snowshoes in player && snowshoes has worn) { print_ret "The snowsuit can't fit over the snowshoes."; } - Remove: + Disrobe, Remove: if (snowshoes in player && snowshoes has worn) { print_ret "The snowsuit can't be taken off over the snowshoes."; } ], + daemon [; + if (location ~= mainroom && location ~= office && location ~= + kitchenette && location ~= bedroom && location ~= thedark && + snowsuit hasnt worn) { + body_temperature = --body_temperature; + } + if (location == mainroom || location == office || location == + kitchenette || location == bedroom || snowsuit has worn && body_temperature + < 20) { + body_temperature = ++body_temperature; + } + if (body_temperature == 0) { + deadflag = 4; + } + if (body_temperature <= 5) + print_ret + "You're shivering uncontrollably, and it's hard + to move. You feel very exhausted and drowsy. It's + all you can do to keep from falling over."; + if (body_temperature > 5 && location ~= mainroom && location + ~= office && location ~= kitchenette && location ~= bedroom + && location ~= thedark && snowsuit hasnt worn) { + switch (body_temperature) { + 19: + "The feeling of cold overwhelms you. Surely the cold will get to + you before anything else does. Right?"; + 18: + "You can feel yourself getting colder and colder."; + 17: + "You can see your own breath freezing in the air, forming little + clouds."; + 16: + "You shiver in the cold."; + 15: + "You continue to shiver in the cold."; + 14: + "Your hands grow numb from the cold."; + 13: + "You continue shivering in order to keep warm."; + 12: + "Your shivering grows worse as your body becomes colder by the + minute."; + 11: + "Your teeth begin to chatter as you desperately try to warm + yourself up."; + 10: + "Your shivering intensifies as your body begins to freeze over + from the cold."; + 9: + "Your fingers become stiff and you feel sharp pains all over your + body."; + 8: + "The cold has gotten to a point where it is too much for you. You + begin to shiver uncontrollably."; + 7: + "Your eyesight begins to fade and you can't even feel yourself + shivering anymore."; + 6: + "You can feel your body shutting down from the cold as you slowly + begin to lose consciousness."; + } + } + ], has clothing; Object snowshoes "snowshoes" bedroom - with name 'snowshoe' 'snowshoes' 'snow' 'boot' 'boots' 'shoe' 'shoes' 'metal' 'frame', + 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 @@ -428,34 +553,292 @@ Object snowshoes "snowshoes" bedroom knees."; ], daemon [; - if (location ~= mainroom && location ~= office && location ~= kitchenette - && location ~= bedroom && snowshoes hasnt worn) { + if (location ~= mainroom && location ~= office && location ~= + kitchenette && location ~= bedroom && location ~= thedark && + location ~= eastofcabin && snowshoes hasnt worn) { deadflag = 3; } ], has pluralname clothing; -Object eastofcabin "East Of Cabin" +Object southofcabin "South Of Cabin" with description [; - print "It's dark outside. "; - if (lightbulb has on) { + print + "The wind is howling, and there's snow flying + everywhere.^"; + if (snowsuit hasnt worn) print - "The light from inside the cabin only penetrates - a few feet from the building. "; + "^It's really cold and you're not dressed for + this weather.^"; + if (frontdoor has open) { + check_for_cabin_lighting(); } - 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."; + ], + n_to frontdoor, + s_to forest, + e_to eastofcabin, + w_to westofcabin, + has light; + +Object truckspot "Forest" + with description + "The blizzard is still going on. You don't think it's + letting up anytime soon. There is a blue and white + pickup truck here. It looks like it got stuck in the snow + and is slowly being covered by it. The windows are iced + up and you can't see inside.", + before [; + Go: + PlayerTo(forest); + ]; + +Object truck "blue and white pickup truck" truckspot + with name 'pickup' 'truck' 'door', + with description + "The blue and white pickup truck looks old and battered. + The paint has chipped and faded. The windows are iced up + and you can't see inside.", + before [; + Take, Pull, Push, PushDir, Turn: + print_ret (The) self, " is too heavy for that."; + Search: + print_ret + "The windows are iced up and you can't see + inside."; + Enter, Open, GoIn: + print_ret (The) self, " is frozen shut."; + ], + has scenery supporter enterable openable; + +[ print_forest_description; + if (location ~= thedark) { + switch (forest_location) { + 1: + print_ret + "It's not getting any easier to move in this + blizzard. You can barely see five feet ahead of you. + The wind is really strong. You try to remember the + survival tips you've read on the internet, but + frankly, you don't remember most of them right now. + You just want this awful nightmare to end."; + 2: + print_ret + "You can't see anything through the blizzard. The + snow is drifting and piling up around you, making + movement almost impossible. You can't see your hand + in front of your face. The wind is bitterly cold. The + situation is looking very grim. Your life feels as if + it is slowly ebbing away in the relentless grip of + the snowstorm."; + 3: + print_ret + "You plow through the heavy snowfall. You're cold, + tired, miserable, and desperate to get out of this + mess. The wind is howling like a banshee. You can + barely keep moving. You wish you had the powers of a + superhero right now. You try to persevere. You push + on despite the bitter cold and the heavy snowfall as + you come to a fork. There are two ways to go here, + one is going up a hill to the south. The other way is + continuing through the woods to the north."; + 4: + print_ret + "You trudge through the snow. The wind is howling + louder than ever. It's almost as if you're lost in a + white, endless void."; + 5: + print_ret + "You continue your way through the snowy white void, + what with the snow piling up around you. This is + getting really old, really fast. It's hard to tell + which direction is which. You wonder if you might be + going in circles and end up wandering around forever, + never finding your way out of this white void."; + 6: + print_ret + "You wander around in the impenetrable white void. + The snowfall is still as heavy as ever. You're unsure + of which way to go. There's no left, right, backward + or forward. There's nothing but endless, unchanging + whiteness. You could be wandering aimlessly in any + direction right now and you wouldn't know the + difference."; + 7: + PlayerTo(truckspot); + 8: + print_ret + "You keep wandering through endless whiteness. It + feels like you've been wandering for hours, but + that's probably just your perception of time slipping + away. You keep trudging through the heavy snowfall, + not knowing if you're even going in any particular + direction anymore. You hope that, as long as you keep + moving, you'll eventually find a way out of this + frozen wasteland."; + 9: + print_ret + "You wander around through the white void. There's + nothing here but you, the snowfall, and the fierce + wind howling through this frozen landscape. You start + to get disoriented. You don't know if you're going in + circles or what, but you start to feel that this + frozen, lifeless landscape is sucking away your very + life force."; + 10: + print_ret + "This isn't just a place of cold and ice - it's + other-worldly. You're in danger here. You have to + keep moving. Sleep is not an option when you're in a + place like this. You have to escape. Somehow, you + know that staying here is a death sentence."; + 11: + print_ret + "The wind starts starts to pick up as it begins + howling louder than ever. You look around the barren + landscape, but there's nothing nearby except snow. + You don't even see any trees to break the force of + this terrible wind. The snowfall is still as heavy as + ever. You can barely see where you are going."; + 12: + print_ret + "The snowfall is still as heavy as ever. The wind is + howling louder than ever. You can barely see where + you are going. This place is so desolate and barren. + As you continue trudging through the snow, you wonder + if you're actually moving in the right direction."; + 13: + print_ret + "The endless snowfall makes it difficult to see where + you're going. It feels like you're lost in a maze of + snow without a map. Out of the corner of your eye, + you spot a tall, shadowy figure lingering at the edge + of your vision. When you turn to look at it directly, + however, it disappears. You think you're going mad."; + 14: + print_ret + "You continue walking. You're not sure that you're + going in the right direction but you can't stop now. + You must find a way out of this frozen wasteland. + There has to be something here besides endless snow. + You won't give up. You can't give up."; + 15: + print_ret + "You hear a horrible howl in the distance or is it + the wind? Looking around you see nothing in this + barren landscape but snow. You're not sure what to + make of it, but you don't want to stick around to + find out. You keep walking. The wind is really + picking up now and the snowfall is getting heavier."; + 16: + print_ret + "The wind is now a shrieking banshee, freezing and + relentless, as it throws the snow into your face, + blinding you. Every step you take is hard-fought. The + whole world is white. You can't see anything, but you + must keep going. There is no choice. You have no idea + where you are."; + 17: + print_ret + "The blizzard rages, but you continue to press on. + It's hard to walk against the brutal winds. Every + step is an effort. You can barely see anything, and + you stumble forward. You're determined to live but + the blizzard doesn't seem to care whether you live or + die. It just keeps howling and shrieking."; + 18: + print_ret + "The wind screams in your ears and you can't see + anything. It's as if you're in a sea of white. You + trudge on and try to keep your spirits up and not let + the snowstorm get to you. The wind knocks you down on + your hands and knees. You get back up, but you're + slipping and sliding all over the place."; + 19: + print_ret + "Can't go back. Can't go forward. You can't even see + where you are. The snowstorm has made it impossible + to see anything more than a few feet in front of you. + Nothing makes any sense and you feel like you're + starting to go in circles."; + 20: + print_ret + "You hope you're going the right way. You can't let + the snowstorm get the best of you. You have to keep + going. As you walk you try to keep your mind occupied + with anything other than the storm. You really have + no idea how far you've come or in what direction."; + 21: + print_ret + "You keep walking and walking. You can't tell where + the white sky and white ground begin and end. You + don't even know if you're walking in a circle or not. + The snowfall is so thick that you can barely see your + hand if you hold it right in front of your face."; + 22: + deadflag = 2; + print_ret + "You see something in the distance but can't make it + out. You walk toward it to find out that it's the + hotel. You collapse in the lobby as the hotel staff + rush over to you."; + } + } +]; + +Object forest "Forest" + with description [; + print_forest_description(); + ], + before [; + Go: + if (location == thedark) { + DarkToDark(); + } + if (noun == d_obj || noun == u_obj) { + print_ret "You can't go that way."; } + forest_location = forest_location++; + ], + cant_go print_forest_description; + +[ check_for_cabin_lighting; + 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 (location has light) + print + "The snow stings your face and you can barely see three feet in + front of you. "; + if (snowshoes in player && snowshoes has worn) { + print + "The snowshoes are doing their job by making sure + you don't sink into the snow.^"; + } +]; + +Object eastofcabin "East Of Cabin" + with description [; + print "It's dark outside. "; + check_for_cabin_lighting(); ], w_to window, + s_to southofcabin, + has light; + +Object westofcabin "West Of Cabin" + with description + "The snow is falling so fast that you can barely see + anything. You can't even be sure you're going in the right + direction.", + s_to southofcabin, has light; [ Initialise; @@ -475,15 +858,31 @@ Object eastofcabin "East Of Cabin" not dressed for this weather.^"; StartDaemon(lantern); StartDaemon(snowshoes); + StartDaemon(snowsuit); + StartDaemon(grue); ]; [ DeathMessage; if (deadflag == 3) + print "You sink into the deep snow and are unable to move."; + if (deadflag == 4) 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."; + "Finally, you succumb to the cold. Your mind goes blank as + you slip away into the endless darkness and the deep sleep + of death."; +]; + +! Don't have 'take all' take the lightbulb in the mainroom of the +! cabin + +[ ChooseObjects obj code; + if (code < 2) { + if (obj has scenery) + return 2; + rfalse; + } + if (obj == lightbulb) + return 0; ]; [ InScope; @@ -497,26 +896,66 @@ Object eastofcabin "East Of Cabin" Object grue "grue" thedark with article "the", name 'grue' 'monster', - each_turn [; - StartDaemon(self); - ], - turns_active, + grue_active_around_cabin, + grue_active_in_the_dark, daemon [; - if (location ~= thedark) { - self.turns_active = 0; - StopDaemon(self); - return true; + if (location == thedark) { + switch (++(self.grue_active_in_the_dark)) { + 1: + "^You hear horrible gurgling sounds in the dark."; + 2: + "^You hear the clink of razor-sharp claws nearby."; + 3: + deadflag = 1; + "^Your last memory is of the slavering fangs of the + horrible Grue as it claims you for a meal."; + } } - switch (++(self.turns_active)) { - 1: - "^You hear horrible gurgling sounds in the dark."; - 2: - "^You hear the clink of razor-sharp claws nearby."; - 3: - deadflag = 1; - "^Your last memory is of the slavering fangs of the - horrible Grue as it claims you for a meal."; + if (location == mainroom || location == office || location == + kitchenette || location == bedroom) { + switch (++(self.grue_active_around_cabin)) { + 1: + "^You hear the wind howling outside, if it is the wind."; + 2: + "^You hear horrible gurgling sounds outside."; + 3: + "^The noise outside gets louder."; + 4: + "^You hear the sound of shuffling feet outside."; + 5: + "^You hear something sniffing around the cabin."; + 6: + "^You hear a deep guttural sound from outside that sends a chill down your spine."; + 7: + "^You hear something scratching on the cabin walls from outside."; + 8: + "^You hear something howl outside. It's a chilling, mournful wail that sends a chill down your spine."; + 9: + "^A thunderous CRACK can be heard coming from outside."; + 10: + "^There's a sudden crashing sound as something is thrown against the cabin walls."; + 11: + "^Something begins to beat against the walls of the cabin, as if trying to to break in. It makes a loud, thunderous noise."; + 12: + "^The wind is howling and the walls are being beaten so hard it feels like the cabin is shaking."; + 13: + "^Suddenly, there's ominous silence from outside the cabin."; + } + } + if (location == mainroom || location == office || location == + kitchenette || location == bedroom && self.grue_active_around_cabin + == 15) { + print "^The lights flicker and suddenly go out.^"; + cabin_has_electricity = 0; + give lightbulb ~on; + give mainroom ~light; + give office ~light; + give kitchenette ~light; + give bedroom ~light; + give eastofcabin ~light; + give southofcabin ~light; } + return true; ], has scenery;