Fix up some line breaks
[snowed-in.git] / src / snowed-in.inf
index 30b804332afbb11607492f09a7e612c2ae4ac2dc..d8feda3e65c935275f36c70288a00a8b47897ab6 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (C) 2021 Jason Self <j@jxself.org>
+! Copyright (C) 2021, 2022 Jason Self <j@jxself.org>
 !
 ! This file is free software: you may copy, redistribute and/or
 ! modify it under the terms of the GNU Affero General Public License
 !
 ! 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 lantern_fuel_left = 10;
 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 
@@ -23,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, 2022 Jason Self <j@@64jxself.org>
     ^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 
@@ -34,8 +36,8 @@ Constant Headline
     If not, contact the place you got it from.^^";
 Include "parser";
 Include "verblib";
-Release 0;
-Serial "210501";
+Release 1;
+Serial "220529";
 
 Object  mainroom "Main Room"
   with  description 
@@ -113,7 +115,8 @@ Object  coffeetable "coffee table" mainroom
 Object  lantern "copper lantern" coffeetable
   with  name 'lantern' 'copper' 'lamp',
         description 
-            "This is an exceptionally beautiful lantern. 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. A 
             rainbow of unique colors run through the copper. The 
@@ -158,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.";
@@ -170,7 +173,7 @@ Object  television "flat-screen TV" mainroom
                     comes to life in one last valiant attempt to be 
                     useful. Your favorite news program is on: U.S. 
                     News And Grue Report. The news anchor is giving a 
-                    warning of Grue sightings in the area of the 
+                    warning of grue sightings in the area of the 
                     forest before the television finally dies.^";
                 give television visited;
             }
@@ -199,12 +202,13 @@ Object  lightsocket "light socket" mainroom
                     with a warning label because you contain more than 
                     a trace amount of nut.";
             }
-            if (noun == lightbulb && light has on) {
+            if (noun == lightbulb && lightbulb has on) {
                 give mainroom light;
                 give office light;
                 give kitchenette light;
                 give bedroom light;
                 give eastofcabin light;
+                give southofcabin light;
             }
         ],
   has   scenery container transparent open;
@@ -220,6 +224,7 @@ Object  lightbulb "light bulb" lightsocket
                     give kitchenette light;
                     give bedroom light;
                     give eastofcabin light;
+                    give southofcabin light;
                 }
                 else {
                     print_ret 
@@ -241,6 +246,7 @@ Object  lightbulb "light bulb" lightsocket
             give kitchenette ~light;
             give bedroom ~light;
             give eastofcabin ~light;
+            give southofcabin ~light;
         ],
   has   switchable on;
 
@@ -251,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;
@@ -435,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 
@@ -446,8 +461,7 @@ 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.",
+            designs. On the chest are the letters ~CE~ in purple.",
         before [;
           Wear:
             if (snowshoes in player && snowshoes has worn) {
@@ -463,11 +477,10 @@ Object  snowsuit "snowsuit" suitcase
             kitchenette && location ~= bedroom && location ~= thedark &&
             snowsuit hasnt worn) {
                 body_temperature = --body_temperature;
-                print body_temperature;
             }
             if (location == mainroom || location == office || location ==
-            kitchenette || location == bedroom || location ~= thedark ||
-            snowsuit has worn && body_temperature < 20) {
+            kitchenette || location == bedroom || snowsuit has worn && body_temperature
+            < 20) {
                 body_temperature = ++body_temperature;
             }
             if (body_temperature == 0) {
@@ -541,7 +554,7 @@ Object  snowshoes "snowshoes" bedroom
         daemon [;
             if (location ~= mainroom && location ~= office && location ~=
             kitchenette && location ~= bedroom && location ~= thedark &&
-            snowshoes hasnt worn) {
+            location ~= eastofcabin && snowshoes hasnt worn) {
                 deadflag = 3;
             }
         ],
@@ -549,43 +562,331 @@ Object  snowshoes "snowshoes" bedroom
 
 Object  southofcabin "South Of Cabin"
   with  description [;
-            print "The wind is howling, and there's snow flying everywhere.";
+            print 
+                "The wind is howling, and there's snow flying 
+                everywhere. ";
             if (snowsuit hasnt worn)
                 print 
-                    " It's really cold and 
-                    you're not dressed for this weather.";
-            print 
-                " The snow stings your face and you 
-                can barely see three feet in front of you.^";
+                    "It's really cold and you're not dressed for 
+                    this weather. ";
+            ! if (frontdoor has open) {
+            check_for_cabin_lighting();
+            ! }
+            if (snowshoes has worn && lantern in player && eastofcabin hasnt
+            visited && lantern_fuel_left > 0) {
+                throw_rock();
+            }
+            print "^";
         ],
         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:
+            forest_location = forest_location++;
+            PlayerTo(forest, 1);
+        ];
+
+Object  truck "blue and white pickup truck" truckspot
+  with  name 'pickup' 'truck' 'door' 'doors',
+  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;
+
+Object  backpacklocation "Forest"
+  with  description 
+            "You keep walking and walking. The snowfall is still as 
+            heavy as ever. As you continue trudging through the snow, 
+            you wonder if you're actually moving in the right 
+            direction. You can't see anything through the blizzard. 
+            You wonder if you might be going in circles and end up 
+            wandering around forever, never finding your way out of 
+            this white void. You're unsure of which way to go. The 
+            snowfall is so thick that you can barely see your hand if 
+            you hold it right in front of your face. You have no idea 
+            how far you've come or in what direction.",
+        before [;
+          Go:
+            forest_location = forest_location++;
+            PlayerTo(forest, 1);
+        ];
+
+Object  backpack "backpack" backpacklocation
+  with  name 'backpack' 'back' 'pack' 'blood',
+  with  description 
+            "The backpack is of medium size, black, with three white 
+            stripes running vertically on the back. The middle stripe 
+            is broken up by a red line running down the center of it 
+            toward the bottom of the backpack. On the side are the 
+            letters ~CE~ in purple. The backpack is covered in blood, 
+            as if the owner met with an untimely demise.",
+  has   clothing container openable;
+
+Object  flashlight "flashlight" backpack
+  with  name 'flashlight' 'flash' 'light' 'torch',
+        description 
+            "It looks like a cheap red plastic model, about eight 
+            inches long.",
+        before [;
+          SwitchOn:
+            give flashlight light;
+          SwitchOff:
+            give lantern ~light;
+        ],
+  has   switchable;
+
+[ print_forest_description;
+    if (location ~= thedark) {
+        switch (forest_location) {
+          1:
+            print_ret 
+                "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 involves a hill to the south. The 
+                other way is continuing through the woods to the 
+                north.";
+          2:
+            print_ret 
+                "The wind is bitterly cold. You plow through the 
+                snowfall, which is still as heavy as ever. You can 
+                barely see where you are going, making it hard to 
+                tell which direction is which. 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 continue 
+                walking. The wind is howling louder than ever. The 
+                endless snowfall makes it difficult to see where 
+                you're going. You can't tell where the white sky and 
+                white ground begin and end.";
+          3:
+            PlayerTo(truckspot);
+          4:
+            print_ret 
+                "You trudge through the snow. The wind is really 
+                strong and howling like a banshee. 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. The whole 
+                world is white. You can barely see five feet ahead of 
+                you. You hope you're going the right way. This place 
+                is so desolate and barren.";
+          5:
+            print_ret 
+                "You think you might can see a large figure stepping 
+                out of the trees and moving in the distance but the 
+                wind is blowing hard and whipping up massive amounts 
+                of snow, making it hard to tell for sure. Your breath 
+                billows out in huge clouds. If it keeps blowing like 
+                this, you're not sure if you'll ever be able to get 
+                back. Snow whirls through the air as a gust of wind 
+                picks up speed. The howling gets louder and more 
+                intense. There's no left, right, backward or forward. 
+                There's nothing but endless, unchanging whiteness.";
+          6:
+            PlayerTo(backpacklocation);
+          7:
+            print_ret 
+                "It feels like you're lost in a maze of snow without 
+                a map. You keep trudging through the heavy snowfall, 
+                not knowing if you're even going in any particular 
+                direction anymore. The wind is really picking up now 
+                and the snowfall is getting heavier. You have to keep 
+                going. You can't let the snowstorm get the best of 
+                you. You can't give up. You must find a way out of 
+                this frozen wasteland. The snowstorm has made it 
+                impossible to see anything more than a few feet in 
+                front of you.";
+          8:
+            print_ret 
+                "The wind is now a shrieking banshee, freezing and 
+                relentless, as it throws the snow into your face, 
+                blinding you. It's hard to walk against the brutal 
+                winds. You can't see anything, but you must keep 
+                going. There is no choice. You continue your way 
+                through the snowy white void, what with the snow 
+                piling up around you. The wind screams in your ears 
+                and you can't see anything. Can't go back. Can't go 
+                forward. You can't even see where you are. You hope 
+                that, as long as you keep moving, you'll eventually 
+                find a way out of this frozen wasteland.";
+          9:
+            print_ret 
+                "The blizzard rages, but you continue to press on. 
+                There's nothing here but you, the snowfall, and the 
+                fierce wind howling through this frozen landscape. 
+                This isn't just a place of cold and ice - it's 
+                other-worldly. You trudge on and try to keep your 
+                spirits up and not let the snowstorm get to you. Every 
+                step is an effort. You wish you had the powers of a 
+                superhero right now. You can barely see where you are 
+                going. The wind knocks you down on your hands and 
+                knees. You get back up, but you're slipping and 
+                sliding all over the place.";
+          10:
+            print_ret 
+                "You wander around in the impenetrable white void. 
+                The wind is howling louder than ever. You try to 
+                persevere. 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. You can't see your hand in front of your face. 
+                You can barely keep moving. Every step you take is 
+                hard-fought. You just want this awful nightmare to 
+                end. You begin to feel sleepy but you're in danger 
+                here. You have to keep moving. Sleep is not an option 
+                when you're in a place like this.";
+          11:
+            print_ret 
+                "You try to remember the survival tips you've read 
+                on the internet, but frankly, you don't remember most 
+                of them right now. As you walk you try to keep your 
+                mind occupied with anything other than the storm. 
+                Nothing makes any sense and you feel like you're 
+                starting to go in circles. The wind starts starts to 
+                pick up as it begins howling louder than ever. You're 
+                determined to live but the blizzard doesn't seem to 
+                care whether you live or die. It just keeps howling 
+                and shrieking. It's not getting any easier to move in 
+                this blizzard.";
+          12:
+            print_ret 
+                "You keep walking. The snow is drifting and piling 
+                up around you, making movement almost impossible. You 
+                look around the barren landscape, but there's nothing 
+                nearby except snow. It's almost as if you're lost in 
+                a white, endless void. You start to get disoriented. 
+                You don't even know if you're walking in a circle or 
+                not. The situation is looking very grim. Your life 
+                feels as if it is slowly ebbing away in the 
+                relentless grip of the snowstorm. It feels like 
+                you've been wandering for hours, but that's probably 
+                just your perception of time slipping away.";
+          13:
+            print_ret 
+                "You can barely see anything, and you stumble 
+                forward. You could be wandering aimlessly in any 
+                direction right now and you wouldn't know the 
+                difference. It's as if you're in a sea of white. 
+                You're not sure that you're going in the right 
+                direction but you can't stop now. There has to be 
+                something here besides endless snow. You know that 
+                staying here is a death sentence. You have to escape. 
+                You're cold, tired, miserable, and desperate to get 
+                out of this mess. You have no idea where you are. You 
+                keep wandering through endless whiteness. You won't 
+                give up.";
+          14:
+            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;
+
+[ throw_rock;
+    if (television has visited || computer has visited) {
+        print 
+            "The grue is waiting behind a snowbank in
+            the distance, away from the light. ";
+    }
+    print 
+        "From somewhere off in the dark distance, far away from the 
+        light, a rock is hurled in your direction. It hits the 
+        lantern, breaking it, and putting it out of commission. ";
+    give lantern ~on;
+    give lantern ~light;
+    lantern_fuel_left = 0;
+    StopDaemon(lantern);
+];
+
+[ 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. ";
+    }
+    !    print "^";
+];
+
 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.^";
+            check_for_cabin_lighting();
+            if (cabin_has_electricity == 1 && lantern in player && lantern_fuel_left
+            > 0) {
+                throw_rock();
             }
+            print "^";
         ],
         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;
     Location = mainroom;
     thedark.description = 
@@ -594,13 +895,13 @@ Object  eastofcabin "East Of Cabin"
     print 
         "You're trapped in a snowstorm while visiting the forest 
         during your vacation to a small rural town. This is the worst 
-        snowstorm in more than 40 years. If only you has listened to 
+        snowstorm in more than 40 years. If only you had listened to 
         the news. Well, it's too late for that. The snow has been 
         falling for the past seven hours and shows no signs of 
         stopping anytime soon. You need to get back to your hotel in 
         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.^";
+        not dressed for this weather, and it's getting dark outside.^";
     StartDaemon(lantern);
     StartDaemon(snowshoes);
     StartDaemon(snowsuit);
@@ -668,9 +969,9 @@ Object  grue "grue" thedark
                   4:
                     "^You hear the sound of shuffling feet outside.";
                   5:
-                    "^You hear a deep guttural sound from outside that sends a chill down your spine.";
-                  6:
                     "^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:
@@ -690,7 +991,7 @@ Object  grue "grue" thedark
             if (location == mainroom || location == office || location ==
             kitchenette || location == bedroom && self.grue_active_around_cabin
             == 15) {
-                print "^The lights flicker and suddenly go out.";
+                print "^The lights flicker and suddenly go out.^";
                 cabin_has_electricity = 0;
                 give lightbulb ~on;
                 give mainroom ~light;
@@ -698,6 +999,7 @@ Object  grue "grue" thedark
                 give kitchenette ~light;
                 give bedroom ~light;
                 give eastofcabin ~light;
+                give southofcabin ~light;
             }
             return true;
         ],