Make this Release 1
[snowed-in.git] / src / snowed-in.inf
index 5f5f70787ab6dc49a241b1982d324219e9e4582f..7c79275979803f598d5b4bfb795657533bd36ccf 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 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, 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 
@@ -32,8 +36,8 @@ Constant Headline
     If not, contact the place you got it from.^^";
 Include "parser";
 Include "verblib";
-Release 0;
-Serial "210405";
+Release 1;
+Serial "220205";
 
 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.";
@@ -131,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;
             }
@@ -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 
@@ -400,22 +461,85 @@ 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) {
                 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 +552,326 @@ 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. ";
-            }
-            else
-                if (lantern in player && lantern has on) {
-                    print 
-                        "The lantern provides the only source of 
-                        light. ";
+                    "It's really cold and you're not dressed for 
+                    this weather. ";
+            ! if (frontdoor has open) {
+            check_for_cabin_lighting();
+            ! }
+            if (cabin_has_electricity == 1) {
+                if (television has visited || computer has visited) {
+                    print "The grue set a trap for you to come outside. ";
                 }
-            if (snowshoes in player && snowshoes has worn) {
                 print 
-                    "The snowshoes are doing their job by making sure 
-                    you don't sink into the snow.";
+                    "Your last memory is of a large log attached to ropes on 
+                    neighboring trees as it collides with your face.";
+                deadflag = 1;
+            }
+            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 '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 '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 is going up 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 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. 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;
+
+[ 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.";
+    }
+    if (location == eastofcabin) {
+        print "^";
+    }
+];
+
+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 +891,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 +929,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;