Make this be Release 4
[snowed-in.git] / src / snowed-in.inf
index 012d7d6c5f8877752dd18292ca96d55081ce7b2a..a75e04222304908670c40af1b843c7a69e8dc99d 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/
+!
+! SPDX-License-Identifier: AGPL-3.0-or-later
+Array UUID_ARRAY string "UUID://DE9FA2E5-4EC7-4166-9218-E56EFA1DF40F//";
+#Ifdef UUID_ARRAY;
+#Endif;
 Global lantern_fuel_left = 20;
 Global body_temperature = 20;
 Global cabin_has_electricity = 1;
 Global forest_location = 1;
-Constant NO_SCORE;
+Global snowmobile_location = 0;
+Constant MAX_SCORE = 7;
 Constant DEATH_MENTION_UNDO;
 Constant Story "Snowed In";
 Constant Headline 
@@ -25,7 +31,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 <j@@64jxself.org>
+    ^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 
@@ -36,8 +42,8 @@ Constant Headline
     If not, contact the place you got it from.^^";
 Include "parser";
 Include "verblib";
-Release 0;
-Serial "210823";
+Release 4;
+Serial "220809";
 
 Object  mainroom "Main Room"
   with  description 
@@ -50,7 +56,9 @@ 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,
+        s_to 
+            "The weight of the snow against the door is such that it 
+            won't budge.",
         e_to office,
         w_to kitchenette,
   has   light;
@@ -80,6 +88,12 @@ Object  frontdoor "front door" mainroom
             else
                 return mainroom;
         ],
+        before [;
+          Open:
+            print_ret 
+                "The weight of the snow against the door is such that 
+                it won't budge.";
+        ],
   has   scenery door openable;
 
 Object  bearclaw "bear claw" mainroom
@@ -94,9 +108,17 @@ Object  sofa "sofa" mainroom
   with  description 
             "The sofa is in poor shape. The upholstery is ripped and 
             there are several holes in it.",
+        before_implicit [;
+          Take:
+            if (action_to_be == ##Eat)
+                return 2;
+        ],
         before [;
           Take, Pull, Push, PushDir, Turn:
             print_ret (The) self, " is too heavy for that.";
+          Open:
+            TearSub();
+            return true;
         ],
   has   scenery supporter enterable;
 
@@ -106,6 +128,11 @@ Object  coffeetable "coffee table" mainroom
             "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_implicit [;
+          Take:
+            if (action_to_be == ##Eat)
+                return 2;
+        ],
         before [;
           Take, Pull, Push, PushDir, Turn:
             print_ret (The) self, " is too heavy for that.";
@@ -164,16 +191,20 @@ Object  television "flat-screen TV" mainroom
             "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.";
+          Take, Pull, Push, PushDir, Turn, Remove:
+            print_ret 
+                "The damaged electronics throw some sparks, 
+                and you get a mild shock. Perhaps it's best left 
+                where it is.";
           SwitchOn:
             if (television hasnt visited) {
+                score = score + 1;
                 print 
                     "Despite the significant damage, the television 
                     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;
             }
@@ -202,7 +233,7 @@ 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;
@@ -253,17 +284,22 @@ Object  lightbulb "light bulb" lightsocket
 Object  office "Office"
   with  description 
             "There seems to have been quite a fight in here. The room 
-            is a wreck. Holes are in the walls and the windows are 
+            is a wreck. Holes are in the walls and the window is 
             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.",
+            bullet hole through the middle. The main room is to the 
+            west.",
         before [;
           Go:
             if (noun == e_obj) {
                 if (snowshoes has worn)
                     print_ret 
-                        "You can't fit through the window while wearing the snow 
-                        shoes.";
+                        "You can't fit through the window while 
+                        wearing the snow shoes.";
+                if (eastofcabin hasnt visited) {
+                    score = score + 1;
+                    give office visited;
+                }
             }
         ],
         w_to mainroom,
@@ -311,6 +347,7 @@ Object  computer "computer" desk
             print_ret (The) self, " is too heavy for that.";
           SwitchOn:
             if (computer hasnt visited) {
+                score = score + 1;
                 print 
                     "The computer makes some concerning noises while 
                     lights on the front also illuminate. The last 
@@ -400,7 +437,8 @@ Object  kitchenette "Kitchenette"
             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.",
+            went. There's no food anywhere in here. The main room is 
+            to the east.",
         e_to mainroom,
   has   light;
 
@@ -435,8 +473,8 @@ 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.",
+            holes. There's a bare mattress, torn to shreds. The main 
+            room is to the south.",
         s_to mainroom,
   has   light;
 
@@ -461,16 +499,24 @@ 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 [;
+          Examine:
+            if (snowsuit hasnt visited) {
+                score = score + 1;
+                give snowsuit visited;
+            }
           Wear:
             if (snowshoes in player && snowshoes has worn) {
-                print_ret "The snowsuit can't fit over the snowshoes.";
+                print_ret 
+                    "The snowsuit can't fit over the 
+                    snowshoes.";
             }
           Disrobe, Remove:
             if (snowshoes in player && snowshoes has worn) {
-                print_ret "The snowsuit can't be taken off over the snowshoes.";
+                print_ret 
+                    "The snowsuit can't be taken off over the 
+                    snowshoes.";
             }
         ],
         daemon [;
@@ -497,13 +543,15 @@ Object  snowsuit "snowsuit" suitcase
             && 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?";
+                    "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.";
+                    "You can feel yourself getting colder and 
+                    colder.";
                   17:
-                    "You can see your own breath freezing in the air, forming little 
-                    clouds.";
+                    "You can see your own breath freezing in the air, 
+                    forming little clouds.";
                   16:
                     "You shiver in the cold.";
                   15:
@@ -513,26 +561,27 @@ Object  snowsuit "snowsuit" suitcase
                   13:
                     "You continue shivering in order to keep warm.";
                   12:
-                    "Your shivering grows worse as your body becomes colder by the
-                    minute.";
+                    "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.";
+                    "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.";
+                    "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.";
+                    "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.";
+                    "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.";
+                    "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.";
+                    "You can feel your body shutting down from the 
+                    cold as you slowly begin to lose consciousness.";
                 }
             }
         ],
@@ -565,14 +614,20 @@ Object  southofcabin "South Of Cabin"
   with  description [;
             print 
                 "The wind is howling, and there's snow flying 
-                everywhere.^";
+                everywhere. The snow buildup seems to get higher to 
+                the west. ";
             if (snowsuit hasnt worn)
                 print 
-                    "^It's really cold and you're not dressed for 
-                    this weather.^";
+                    "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,
@@ -583,14 +638,14 @@ Object  southofcabin "South Of Cabin"
 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 
+            letting up any time 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);
+            PlayerTo(forest, 1);
         ];
 
 Object  truck "blue and white pickup truck" truckspot
@@ -611,171 +666,207 @@ Object  truck "blue and white pickup truck" truckspot
         ],
   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.",
+        before [;
+          Examine:
+            if (backpack hasnt visited) {
+                score = score + 1;
+                give backpack visited;
+            }
+        ],
+  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:
+            if (flashlight hasnt visited) {
+                score = score + 1;
+                give flashlight visited;
+            }
+            give flashlight light;
+          SwitchOff:
+            give lantern ~light;
+        ],
+  has   switchable;
+
 [ 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.";
+                "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 
-                "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.";
+                "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:
-            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.";
+            PlayerTo(truckspot);
           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.";
+                "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 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.";
+                "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:
-            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.";
+            PlayerTo(backpacklocation);
           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, 
+                "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. You hope that, as long as you keep 
-                moving, you'll eventually find a way out of this 
-                frozen wasteland.";
+                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 
-                "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.";
+                "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 
-                "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.";
+                "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 
-                "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.";
+                "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 
-                "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.";
+                "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 
-                "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.";
+                "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:
             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.";
+                "You're so cold that you begin to hallucinate, first 
+                seeing the words ~Ventilation Control Room~ and then 
+                yourself at a console. The hallucination quickly 
+                fades.";
           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 
@@ -802,6 +893,23 @@ Object  forest "Forest"
         ],
         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);
+    score = score - 1;
+];
+
 [ check_for_cabin_lighting;
     if (lightbulb has on) {
         print 
@@ -816,12 +924,12 @@ Object  forest "Forest"
         }
     if (location has light)
         print 
-            "The snow stings your face and you can barely see three feet in 
-            front of you. ";
+            "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.^";
+            you don't sink into the snow. ";
     }
 ];
 
@@ -829,18 +937,90 @@ Object  eastofcabin "East Of Cabin"
   with  description [;
             print "It's dark outside. ";
             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,
+        cant_go 
+            "The snow buildup is is too great to continue in that 
+            direction.",
   has   light;
 
+Object  roof "Roof"
+  with  description [;
+            print 
+                "You're on the roof of the cabin, although it's hard 
+                to tell where the snow buildup ends and the roof 
+                begins. You can make out the trees around the cabin, 
+                but you can't see very far out into the snowfield 
+                beyond them.";
+            if (roof hasnt visited)
+                print 
+                    " You hear a snowmobile approaching in the 
+                    distance. Is it your salvation? The snowmobile 
+                    quickly zooms by in front of the cabin and 
+                    disappears into the forest.";
+            StartDaemon(snowmobile);
+            if (roof has visited)
+                print 
+                    " There seems to be no movement, no sound, no 
+                    sign of anything.";
+            new_line;
+        ],
+        n_to northofcabin,
+        cant_go "Walking off the edge of a roof seems unwise.";
+
+Object  northofcabin "North Of Cabin"
+  with  description [;
+            print 
+                "You're on the north side of the cabin. The wind is 
+                howling and the snow is coming down; falling too fast 
+                to see well.";
+            if (northofcabin hasnt visited)
+                print 
+                    " That might be a tree in the distance or a 
+                    shadowy figure - It's hard to tell in this 
+                    storm.";
+            print_ret 
+                " The snow buildup here is so great that it's 
+                almost level with the cabin's roof, which is to the 
+                south.";
+        ],
+        n_to westofcabin,
+        s_to roof,
+        w_to westofcabin,
+        cant_go "It's too steep to go in that direction safely.",
+        before [;
+          Go:
+            if (noun == s_obj) {
+                if (roof hasnt visited) {
+                    score = score + 1;
+                }
+            }
+        ];
+
 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.",
+  with  description [;
+            print 
+                "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.";
+            if (westofcabin hasnt visited)
+                print 
+                    " Then you hear a shuffling noise in the snow. 
+                    There was something there and now it's gone. Or 
+                    was it always there and you just never saw it?";
+            print_ret " The snow buildup gets taller to the north.";
+        ],
         s_to southofcabin,
-  has   light;
+        n_to northofcabin,
+        cant_go 
+            "The snow buildup is is too great to continue in that 
+            direction.";
 
 [ Initialise;
     Location = mainroom;
@@ -850,13 +1030,14 @@ Object  westofcabin "West 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 
+        stopping any time 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);
@@ -894,6 +1075,33 @@ Object  westofcabin "West Of Cabin"
     return false;
 ];
 
+Object  cabin "cabin" mainroom
+  with  name 'cabin',
+        found_in mainroom bedroom office kitchenette southofcabin eastofcabin
+        northofcabin westofcabin,
+        before [;
+          Enter, Exit:
+            print_ret 
+                "You'll have to say which compass direction to go 
+                in.";
+        ],
+  has   scenery;
+
+Object  snowmobile "snowmobile" thedark
+  with  name 'snowmobile',
+        daemon [;
+            snowmobile_location = random(14);
+            if (location == forest && forest_location == snowmobile_location)
+            {
+                deadflag = 2;
+                print_ret 
+                    "A snowmobile approaches. The person says they 
+                    saw your light and came to rescue you.";
+            }
+            return true;
+        ],
+  has   scenery;
+
 Object  grue "grue" thedark
   with  article "the",
         name 'grue' 'monster',
@@ -903,20 +1111,23 @@ Object  grue "grue" thedark
             if (location == thedark) {
                 switch (++(self.grue_active_in_the_dark)) {
                   1:
-                    "^You hear horrible gurgling sounds in the dark.";
+                    "^You hear horrible gurgling sounds in the 
+                    dark.";
                   2:
-                    "^You hear the clink of razor-sharp claws nearby.";
+                    "^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.";
+                    "^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.";
+                    "^You hear the wind howling outside, if it is the 
+                    wind.";
                   2:
                     "^You hear horrible gurgling sounds outside.";
                   3:
@@ -926,21 +1137,32 @@ Object  grue "grue" thedark
                   5:
                     "^You hear something sniffing around the cabin.";
                   6:
-                    "^You hear a deep guttural sound from outside that sends a chill down your spine.";
+                    "^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.";
+                    "^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.";
+                    "^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.";
+                    "^A thunderous CRACK can be heard coming from 
+                    outside.";
                   10:
-                    "^There's a sudden crashing sound as something is thrown against the cabin walls.";
+                    "^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.";
+                    "^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.";
+                    "^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.";
+                    "^Suddenly, there's ominous silence from outside 
+                    the cabin.";
                 }
             }
             if (location == mainroom || location == office || location ==
@@ -966,10 +1188,30 @@ Object  grue "grue" thedark
     grue!";
 ];
 
+[ PrintRank;
+    print ", earning you the rank of ";
+    if (score == 0)
+        "Novice.";
+    if (score == 1)
+        "Trained.";
+    if (score == 2)
+        "Skilled.";
+    if (score == 3)
+        "Talented.";
+    if (score == 4)
+        "Capable.";
+    if (score == 5)
+        "Adept.";
+    if (score == 6)
+        "Proficient.";
+    if (score >= 7)
+        print "Versed.";
+];
+
 [ URL;
     print 
         "^If you need help try some of the commands from: 
-        ^http://pr-if.org/doc/play-if-card/^";
+        ^https://pr-if.org/doc/play-if-card/^";
 ];
 
 [ XyzzySub;
@@ -982,6 +1224,10 @@ Object  grue "grue" thedark
     return true;
 ];
 
+[ TearSub;
+    print_ret "Doing that would achieve little.";
+];
+
 Include "grammar";
 
 Verb 'About'
@@ -1002,17 +1248,47 @@ Verb 'Hint'
 Verb 'xyzzy'
     * -> Xyzzy;
 
+Verb 'tear'
+    * noun -> Tear;
+
+Extend 'tear'
+    * 'up' / 'open' noun -> Tear;
+
+Verb 'rip'
+    * noun -> Tear;
+
+Extend 'rip'
+    * 'up' / 'open' noun -> Tear;
+
 Verb 'crawl'
-    * 'through' / 'out' / 'via' noun -> Go;
+    * 'through' / 'out' / 'via' noun -> Enter;
 
 Verb 'escape'
-    * 'through' / 'out' / 'via' noun -> Go;
+    * 'through' / 'out' / 'via' noun -> Enter;
 
 Extend 'jump'
-    * 'through' / 'out' / 'via' noun -> Go;
+    * 'through' / 'out' / 'via' noun -> Enter;
 
 Extend 'climb'
-    * 'through' / 'out' / 'via' noun -> Go;
+    * 'through' / 'out' / 'via' noun -> Climb;
 
 Extend 'go'
-    * 'through' / 'out' / 'via' noun -> Go;
\ No newline at end of file
+    * 'through' / 'out' / 'via' noun -> Enter;
+
+Extend 'go' first
+    * 'out' / 'outside' -> VagueGo;
+
+Extend 'go' first
+    * 'out' / 'outside' / 'outside' 'of' noun -> VagueGo;
+
+Extend 'go' first
+    * 'in' / 'into' / 'inside' -> VagueGo;
+
+Extend 'go' first
+    * 'in' / 'into' / 'inside' / 'inside' 'of' noun -> VagueGo;
+
+Extend 'exit' first
+    * noun -> VagueGo;
+
+Extend 'leave' first
+    * noun -> VagueGo;
\ No newline at end of file