Update to serial 210605
[snowed-in.git] / src / snowed-in.inf
1 ! Copyright (C) 2021 Jason Self <j@jxself.org>
2 !
3 ! This file is free software: you may copy, redistribute and/or
4 ! modify it under the terms of the GNU Affero General Public License
5 ! as published by the Free Software Foundation, either version 3 of
6 ! the License, or (at your option) any later version.
7 !
8 ! This file is distributed in the hope that it will be useful, but
9 ! WITHOUT ANY WARRANTY; without even the implied warranty of
10 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 ! Affero General Public License for more details.
12 !
13 ! You should have received a copy of the GNU Affero General Public
14 ! License along with this file. If not, see https://gnu.org/licenses/
15 Global lantern_fuel_left = 20;
16 Global body_temperature = 20;
17 Global cabin_has_electricity = 1;
18 Constant DEATH_MENTION_UNDO;
19 Constant Story "Snowed In";
20 Constant Headline 
21     "^A work of interactive fiction.
22     ^If you get stuck try typing HELP.
23     ^Ongoing development: https://jxself.org/git/?p=snowed-in.git
24     ^Send bugs and feedback by email to j@@64jxself.org.
25     ^IFID DE9FA2E5-4EC7-4166-9218-E56EFA1DF40F
26     ^Copyright (C) 2021 Jason Self <j@@64jxself.org>
27     ^You can change and share this game under the terms of the GNU 
28     Affero General Public License as published by the Free Software 
29     Foundation (FSF), either version 3 of the License, or (at your 
30     option) any later version published by the FSF. See the GNU Affero 
31     General Public License for more details.^^You should have received 
32     a copy of this game's source code along with a copy of the GNU 
33     Affero General Public License so that you can know your rights. 
34     If not, contact the place you got it from.^^";
35 Include "parser";
36 Include "verblib";
37 Release 0;
38 Serial "210605";
39
40 Include "src/forest.inf";
41
42 Object  mainroom "Main Room"
43   with  description 
44             "This room is a total wreck - it looks like a major fight 
45             happened in here. There's a ripped up sofa and a broken 
46             old coffee table in the middle of the room. A flat-screen 
47             TV is mounted against the wall, with the screen dangling 
48             out. This cabin has three other rooms. There's an office 
49             area to the east, and a bedroom to the north. A 
50             kitchenette can be found to the west. There's a doorway 
51             in the south wall leading outside.",
52         n_to bedroom,
53         s_to frontdoor,
54         e_to office,
55         w_to kitchenette,
56   has   light;
57
58 Object  frontdoor "front door" mainroom
59   with  name 'door' 'front',
60         description 
61             "The wooden door is made of thick oak wood with the shape 
62             of a bear claw engraved in it.",
63         short_name [;
64             if (location == mainroom)
65                 print "door to the outside";
66             else
67                 print "door to the cabin";
68             return true;
69         ],
70         found_in mainroom southofcabin,
71         door_dir [;
72             if (location == mainroom)
73                 return s_to;
74             else
75                 return n_to;
76         ],
77         door_to [;
78             if (location == mainroom)
79                 return southofcabin;
80             else
81                 return mainroom;
82         ],
83   has   scenery door openable;
84
85 Object  bearclaw "bear claw" mainroom
86   with  name 'bear' 'claw',
87   with  description 
88             "It's in the shape of a thin, sharp claw with three jagged 
89             points at the top of it.",
90   has   scenery;
91
92 Object  sofa "sofa" mainroom
93   with  name 'sofa' 'couch',
94   with  description 
95             "The sofa is in poor shape. The upholstery is ripped and 
96             there are several holes in it.",
97         before [;
98           Take, Pull, Push, PushDir, Turn:
99             print_ret (The) self, " is too heavy for that.";
100         ],
101   has   scenery supporter enterable;
102
103 Object  coffeetable "coffee table" mainroom
104   with  name 'coffee' 'table',
105   with  description 
106             "The old coffee table looks as if it's had quite a bit of 
107             use. There are burn marks covering it and the paint is 
108             worn off in most places.",
109         before [;
110           Take, Pull, Push, PushDir, Turn:
111             print_ret (The) self, " is too heavy for that.";
112         ],
113   has   scenery supporter enterable;
114
115 Object  lantern "copper lantern" coffeetable
116   with  name 'lantern' 'copper' 'lamp',
117         description 
118             "This is an exceptionally beautiful lantern. About eleven 
119             inches high, with a base of about 5 inches or so in 
120             diameter and a large, brass-closed hook at the top. A 
121             rainbow of unique colors run through the copper. The 
122             glass in the lamp has a fresnel type of design, which is 
123             used to distribute light widely.",
124         time_left,
125         time_out [;
126             if (lantern has on) {
127                 lantern_fuel_left = 0;
128                 give lantern ~on;
129                 give lantern ~light;
130                 StopDaemon(lantern);
131                 print_ret 
132                     "Suddenly, the lantern's flame begins to flicker 
133                     violently within its glass prison and then 
134                     extinguishes itself.";
135             }
136         ],
137         before [;
138           SwitchOn:
139             if (lantern_fuel_left > 0) {
140                 give lantern light;
141                 StartTimer(lantern, lantern_fuel_left);
142             }
143             else {
144                 print_ret 
145                     "You snap the switch a few times, but nothing 
146                     happens.";
147             }
148           SwitchOff:
149             StopTimer(lantern);
150             give lantern ~light;
151         ],
152         daemon [;
153             if (lantern has on)
154                 lantern_fuel_left = lantern.time_left;
155             if (lantern has on && lantern_fuel_left <= 5)
156                 print_ret "The lantern's fuel runs low.";
157         ],
158   has   switchable;
159
160 Object  television "flat-screen TV" mainroom
161   with  name 'TV' 'television' 'flat' 'screen' 'flat-screen',
162   with  description 
163              "The flat-screen TV looks fairly modern but it's been 
164              broken in a fight and the screen is dangling out.",
165         before [;
166           Take, Pull, Push, PushDir, Turn:
167             print_ret (The) self, " is firmly mounted to the wall.";
168           SwitchOn:
169             if (television hasnt visited) {
170                 print 
171                     "Despite the significant damage, the television 
172                     comes to life in one last valiant attempt to be 
173                     useful. Your favorite news program is on: U.S. 
174                     News And Grue Report. The news anchor is giving a 
175                     warning of Grue sightings in the area of the 
176                     forest before the television finally dies.^";
177                 give television visited;
178             }
179             else {
180                 print 
181                     "The flat-screen TV is broken and can't be 
182                     turned on.^";
183             }
184             return true;
185         ],
186   has   scenery switchable;
187
188 Object  lightsocket "light socket" mainroom
189   with  name 'socket' 'lightsocket',
190         before [;
191           Take, Pull, Push, PushDir, Turn:
192             print_ret 
193                 "You don't have the tools to remove a light 
194                 socket.";
195           Receive:
196             if (noun ~= lightbulb) {
197                 print "Put ";
198                 print (a) noun;
199                 print_ret 
200                     " into the light socket? Maybe you should come 
201                     with a warning label because you contain more than 
202                     a trace amount of nut.";
203             }
204             if (noun == lightbulb && light has on) {
205                 give mainroom light;
206                 give office light;
207                 give kitchenette light;
208                 give bedroom light;
209                 give eastofcabin light;
210             }
211         ],
212   has   scenery container transparent open;
213
214 Object  lightbulb "light bulb" lightsocket
215   with  name 'light' 'bulb' 'lightbulb',
216         before [;
217           SwitchOn:
218             if (lightbulb in lightsocket) {
219                 if (cabin_has_electricity == 1) {
220                     give mainroom light;
221                     give office light;
222                     give kitchenette light;
223                     give bedroom light;
224                     give eastofcabin light;
225                 }
226                 else {
227                     print_ret 
228                         "You flip the switch a few times, but nothing 
229                         happens.";
230                 }
231             }
232             else {
233                 print_ret 
234                     "Turn on a lightbulb when it's not in the 
235                     socket? What a strange idea.";
236             }
237         ],
238         after [;
239           Take, Pull, Push, PushDir, Turn, SwitchOff:
240             give lightbulb ~on;
241             give mainroom ~light;
242             give office ~light;
243             give kitchenette ~light;
244             give bedroom ~light;
245             give eastofcabin ~light;
246         ],
247   has   switchable on;
248
249 Object  office "Office"
250   with  description 
251             "There seems to have been quite a fight in here. The room 
252             is a wreck. Holes are in the walls and the windows are 
253             broken, letting in the cold air from outside. Chunks of 
254             drywall and insulation cover the floor. The desk has a 
255             bullet hole through the middle.",
256         w_to mainroom,
257         e_to window,
258   has   light;
259
260 Object  desk "solid oak desk" office
261   with  name 'solid' 'oak' 'desk',
262   with  description 
263             "The desk is old and made of solid oak. The right side of 
264             it has been smashed and all of the drawers have been 
265             removed. A bullet hole goes straight through the middle of 
266             the desk.",
267         before [;
268           Take, Pull, Push, PushDir, Turn:
269             print_ret (The) self, " is too heavy for that.";
270         ],
271   has   scenery supporter enterable;
272
273 Object  businesscard "business card" desk
274   with  name 'business' 'card',
275   with  description 
276             "The business card is white and has blacked edges. It 
277             bears the name ~Lasting Solutions~, a local data recovery 
278             company, in bold letters on the top. The company's 
279             website URL is printed in blue at the bottom.";
280
281 Object  salesreceipt "sales receipt" desk
282   with  name 'sales' 'receipt',
283   with  description 
284             "The sales receipt is for $200, dated three years ago. 
285             It's printed on old tractor feed printer paper and bears 
286             the name ~Lasting Solutions~, a local data recovery 
287             company. A handwritten note is scrawled on the bottom: 
288             ~Start working on these hard drives soon.~";
289
290 Object  computer "computer" desk
291   with  name 'computer' 'PC',
292   with  description 
293             "It's a heavy older model that appears to have been 
294             seriously damaged in a fight. It's clearly on its last 
295             legs but is perhaps still useful.",
296         before [;
297           Take, Pull, Push, PushDir, Turn:
298             print_ret (The) self, " is too heavy for that.";
299           SwitchOn:
300             if (computer hasnt visited) {
301                 print 
302                     "The computer makes some concerning noises while 
303                     lights on the front also illuminate. The last 
304                     file is quickly displayed. ~If anyone else reads 
305                     this, you're in serious danger. I've been fighting 
306                     a ferocious grue for the last three days. I'm 
307                     almost out of supplies and can't last much 
308                     longer. I'm going to take the last of the supplies 
309                     and escape through the office window in a 
310                     last-ditch effort to get away and get back into 
311                     town. I hope I can make it.~ The computer then 
312                     makes a sickly sound and finally dies as some 
313                     smoke comes out of it.^";
314                 give computer visited;
315             }
316             else {
317                 print 
318                     "The display briefly flickers but nothing 
319                     else happens.^";
320             }
321             return true;
322         ],
323   has   switchable;
324
325 Object  drywall "drywall" office
326   with  name 'drywall' 'dry' 'wall',
327         before [;
328           Take, Pull, Push, PushDir, Turn:
329             print_ret "Taking that would achieve little.";
330         ],
331   has   scenery;
332
333 Object  insulation "insulation" office
334   with  name 'insulation',
335         before [;
336           Take, Pull, Push, PushDir, Turn:
337             print_ret "Taking that would achieve little.";
338         ],
339   has   scenery;
340
341 Object  bullethole "bullet hole" desk
342   with  name 'bullet' 'hole' 'holes',
343   with  description 
344             "Looks to have come from something that's capable of 
345             doing a lot of damage.",
346         found_in desk bedroom,
347   has   scenery;
348
349 Object  window "window" office
350   with  name 'window' 'windows',
351         description 
352             "The window faces the east side of the cabin. It's broken, 
353             letting in the cold air from outside.",
354         short_name [;
355             if (location == office)
356                 print "window";
357             else
358                 print "window into the cabin";
359             return true;
360         ],
361         found_in office eastofcabin,
362         door_dir [;
363             if (location == office)
364                 return e_to;
365             else
366                 return w_to;
367         ],
368         door_to [;
369             if (location == office)
370                 return eastofcabin;
371             else
372                 return office;
373         ],
374         before [;
375           Search:
376             print_ret "The window faces the east side of the cabin.";
377           Open, Close:
378             print_ret 
379                 "The window's broken so it's not clear how 
380                 you'd do that.";
381         ],
382   has   scenery door openable open;
383
384 Object  kitchenette "Kitchenette"
385   with  description 
386             "The kitchenette is empty. A sink, you think, though it's 
387             hard to tell what's a pipe and what's a faucet. A 
388             refrigerator, standing open and empty. The door has been 
389             ripped off. There's no indication as to where it 
390             went. There's no food anywhere in here.",
391         e_to mainroom,
392   has   light;
393
394 Object  refrigerator "refrigerator" kitchenette
395   with  name 'fridge' 'refrigerator',
396   with  description 
397             "An old rusty refrigerator, standing open and empty. The 
398             door has been ripped off. There's no indication as to 
399             where it went.",
400         before [;
401           Take, Pull, Push, PushDir, Turn:
402             print_ret (The) self, " is too heavy for that.";
403           Open, Close:
404             print_ret (The) self, " door is missing.";
405         ],
406   has   scenery enterable container openable open;
407
408 Object  sink "sink" kitchenette
409   with  name 'sink' 'pipe' 'faucet',
410   with  description 
411             "A sink, you think, though it's hard to tell what's a 
412             pipe and what's a faucet.",
413         after [;
414           SwitchOn:
415             print_ret 
416                 "Pipes from in the walls make a groaning sound, 
417                 almost like pain and despair. No water comes out.";
418         ],
419   has   scenery container switchable;
420
421 Object  bedroom "Bedroom"
422   with  description 
423             "This bedroom is small and cramped, and looks like a 
424             major fight happened as the exterior wall has bullet 
425             holes. The bed is lying on the floor, torn to shreds. It 
426             has no sheets, just a bare mattress.",
427         s_to mainroom,
428   has   light;
429
430 Object  bed "bed" bedroom
431   with  name 'bed' 'mattress',
432   with  description "The mattress is bare and empty.",
433         before [;
434           Take, Pull, Push, PushDir, Turn:
435             print_ret (The) self, " is too heavy for that.";
436         ],
437   has   scenery supporter;
438
439 Object  suitcase "suitcase" bedroom
440   with  name 'suitcase',
441   with  description 
442             "The suitcase is made of a light metallic material that 
443             you can't quite make out. The color of it is somewhere 
444             between silver and grey.",
445   has   container open openable;
446
447 Object  snowsuit "snowsuit" suitcase
448   with  name 'snowsuit' 'snow' 'suit',
449   with  description 
450             "The snowsuit is blue, decorated with white and purple 
451             designs. On the chest is a large emblem with the letters 
452             ~CE~ in purple.",
453         before [;
454           Wear:
455             if (snowshoes in player && snowshoes has worn) {
456                 print_ret "The snowsuit can't fit over the snowshoes.";
457             }
458           Disrobe, Remove:
459             if (snowshoes in player && snowshoes has worn) {
460                 print_ret "The snowsuit can't be taken off over the snowshoes.";
461             }
462         ],
463         daemon [;
464             if (location ~= mainroom && location ~= office && location ~=
465             kitchenette && location ~= bedroom && location ~= thedark &&
466             snowsuit hasnt worn) {
467                 body_temperature = --body_temperature;
468             }
469             if (location == mainroom || location == office || location ==
470             kitchenette || location == bedroom || location ~= thedark ||
471             snowsuit has worn && body_temperature < 20) {
472                 body_temperature = ++body_temperature;
473             }
474             if (body_temperature == 0) {
475                 deadflag = 4;
476             }
477             if (body_temperature <= 5)
478                 print_ret 
479                     "You're shivering uncontrollably, and it's hard 
480                     to move. You feel very exhausted and drowsy. It's 
481                     all you can do to keep from falling over.";
482             if (body_temperature > 5 && location ~= mainroom && location
483             ~= office && location ~= kitchenette && location ~= bedroom
484             && location ~= thedark && snowsuit hasnt worn) {
485                 switch (body_temperature) {
486                   19:
487                     "The feeling of cold overwhelms you. Surely the cold will get to 
488                     you before anything else does. Right?";
489                   18:
490                     "You can feel yourself getting colder and colder.";
491                   17:
492                     "You can see your own breath freezing in the air, forming little 
493                     clouds.";
494                   16:
495                     "You shiver in the cold.";
496                   15:
497                     "You continue to shiver in the cold.";
498                   14:
499                     "Your hands grow numb from the cold.";
500                   13:
501                     "You continue shivering in order to keep warm.";
502                   12:
503                     "Your shivering grows worse as your body becomes colder by the
504                     minute.";
505                   11:
506                     "Your teeth begin to chatter as you desperately try to warm 
507                     yourself up.";
508                   10:
509                     "Your shivering intensifies as your body begins to freeze over 
510                     from the cold.";
511                   9:
512                     "Your fingers become stiff and you feel sharp pains all over your
513                     body.";
514                   8:
515                     "The cold has gotten to a point where it is too much for you. You 
516                     begin to shiver uncontrollably.";
517                   7:
518                     "Your eyesight begins to fade and you can't even feel yourself 
519                     shivering anymore.";
520                   6:
521                     "You can feel your body shutting down from the cold as you slowly 
522                     begin to lose consciousness.";
523                 }
524             }
525         ],
526   has   clothing;
527
528 Object  snowshoes "snowshoes" bedroom
529   with  name 'snowshoe' 'snowshoes' 'snow' 'boot' 'boots' 'shoe' 'shoes'
530         'metal' 'frame',
531   with  description 
532             "They're light blue in color and have a thick, hard 
533             rubber bottom that's attached to a metal frame that keeps 
534             you from sinking into the snow. They look to be warm and 
535             comfortable.",
536         after [;
537           Wear:
538             print_ret (The) self, 
539                 " fit perfectly and go up to your 
540                 knees.";
541         ],
542         daemon [;
543             if (location ~= mainroom && location ~= office && location ~=
544             kitchenette && location ~= bedroom && location ~= thedark &&
545             snowshoes hasnt worn) {
546                 deadflag = 3;
547             }
548         ],
549   has   pluralname clothing;
550
551 Forest  southofcabin "South Of Cabin"
552   with  description [;
553             print "The wind is howling, and there's snow flying everywhere.";
554             if (snowsuit hasnt worn)
555                 print 
556                     " It's really cold and 
557                     you're not dressed for this weather.";
558             print 
559                 " The snow stings your face and you 
560                 can barely see three feet in front of you.^";
561         ],
562         n_to frontdoor,
563         e_to eastofcabin,
564         w_to westofcabin,
565   has   light;
566
567 Forest  eastofcabin "East Of Cabin"
568   with  description [;
569             print "It's dark outside. ";
570             if (lightbulb has on) {
571                 print 
572                     "The light from inside the cabin only penetrates 
573                     a few feet from the building. ";
574             }
575             else
576                 if (lantern in player && lantern has on) {
577                     print 
578                         "The lantern provides the only source of 
579                         light. ";
580                 }
581             if (snowshoes in player && snowshoes has worn) {
582                 print 
583                     "The snowshoes are doing their job by making sure 
584                     you don't sink into the snow.^";
585             }
586         ],
587         w_to window,
588         s_to southofcabin,
589   has   light;
590
591 Forest  westofcabin "Westh Of Cabin"
592   with  description
593             "The snow is falling so fast that you can barely see 
594             anything. You can't even be sure you're going in the right 
595             direction.",
596         s_to southofcabin,
597   has   light;
598
599
600 [ Initialise;
601     Location = mainroom;
602     thedark.description = 
603         "It is pitch black. You are likely to be eaten 
604         by a grue.";
605     print 
606         "You're trapped in a snowstorm while visiting the forest 
607         during your vacation to a small rural town. This is the worst 
608         snowstorm in more than 40 years. If only you has listened to 
609         the news. Well, it's too late for that. The snow has been 
610         falling for the past seven hours and shows no signs of 
611         stopping anytime soon. You need to get back to your hotel in 
612         the town. You finally manage to find an old cabin in the 
613         woods and get inside but have no idea where you are. You're 
614         not dressed for this weather.^";
615     StartDaemon(lantern);
616     StartDaemon(snowshoes);
617     StartDaemon(snowsuit);
618     StartDaemon(grue);
619 ];
620
621 [ DeathMessage;
622     if (deadflag == 3)
623         print "You sink into the deep snow and are unable to move.";
624     if (deadflag == 4)
625         print 
626             "Finally, you succumb to the cold. Your mind goes blank as 
627             you slip away into the endless darkness and the deep sleep 
628             of death.";
629 ];
630
631 ! Don't have 'take all' take the lightbulb in the mainroom of the 
632 ! cabin
633
634 [ ChooseObjects obj code;
635     if (code < 2) {
636         if (obj has scenery)
637             return 2;
638         rfalse;
639     }
640     if (obj == lightbulb)
641         return 0;
642 ];
643
644 [ InScope;
645     if (location == thedark && real_location == mainroom) {
646         PlaceInScope(lightsocket);
647         PlaceInScope(lightbulb);
648     }
649     return false;
650 ];
651
652 Object  grue "grue" thedark
653   with  article "the",
654         name 'grue' 'monster',
655         grue_active_around_cabin,
656         grue_active_in_the_dark,
657         daemon [;
658             if (location == thedark) {
659                 switch (++(self.grue_active_in_the_dark)) {
660                   1:
661                     "^You hear horrible gurgling sounds in the dark.";
662                   2:
663                     "^You hear the clink of razor-sharp claws nearby.";
664                   3:
665                     deadflag = 1;
666                     "^Your last memory is of the slavering fangs of the 
667                     horrible Grue as it claims you for a meal.";
668                 }
669             }
670             if (location == mainroom || location == office || location ==
671             kitchenette || location == bedroom) {
672                 switch (++(self.grue_active_around_cabin)) {
673                   1:
674                     "^You hear the wind howling outside, if it is the wind.";
675                   2:
676                     "^You hear horrible gurgling sounds outside.";
677                   3:
678                     "^The noise outside gets louder.";
679                   4:
680                     "^You hear the sound of shuffling feet outside.";
681                   5:
682                     "^You hear something sniffing around the cabin.";
683                   6:
684                     "^You hear a deep guttural sound from outside that sends a chill down your spine.";
685                   7:
686                     "^You hear something scratching on the cabin walls from outside.";
687                   8:
688                     "^You hear something howl outside. It's a chilling, mournful wail that sends a chill down your spine.";
689                   9:
690                     "^A thunderous CRACK can be heard coming from outside.";
691                   10:
692                     "^There's a sudden crashing sound as something is thrown against the cabin walls.";
693                   11:
694                     "^Something begins to beat against the walls of the cabin, as if trying to to break in. It makes a loud, thunderous noise.";
695                   12:
696                     "^The wind is howling and the walls are being beaten so hard it feels like the cabin is shaking.";
697                   13:
698                     "^Suddenly, there's ominous silence from outside the cabin.";
699                 }
700             }
701             if (location == mainroom || location == office || location ==
702             kitchenette || location == bedroom && self.grue_active_around_cabin
703             == 15) {
704                 print "^The lights flicker and suddenly go out.";
705                 cabin_has_electricity = 0;
706                 give lightbulb ~on;
707                 give mainroom ~light;
708                 give office ~light;
709                 give kitchenette ~light;
710                 give bedroom ~light;
711                 give eastofcabin ~light;
712             }
713             return true;
714         ],
715   has   scenery;
716
717 [ DarkToDark;
718     deadflag = 1;
719     "Oh, no! You have walked into the slavering fangs of a lurking 
720     grue!";
721 ];
722
723 [ URL;
724     print 
725         "^If you need help try some of the commands from: 
726         ^http://pr-if.org/doc/play-if-card/^";
727 ];
728
729 [ XyzzySub;
730     print "Nothing obvious happens.^";
731     return true;
732 ];
733
734 [ HelpSub;
735     URL();
736     return true;
737 ];
738
739 Include "grammar";
740
741 Verb 'About'
742     * -> Version;
743
744 Verb 'Info'
745     * -> Version;
746
747 Verb 'Help'
748     * -> Help;
749
750 Verb 'Clue'
751     * -> Help;
752
753 Verb 'Hint'
754     * -> Help;
755
756 Verb 'xyzzy'
757     * -> Xyzzy;
758
759 Verb 'crawl'
760     * 'through' / 'out' / 'via' noun -> Go;
761
762 Verb 'escape'
763     * 'through' / 'out' / 'via' noun -> Go;
764
765 Extend 'jump'
766     * 'through' / 'out' / 'via' noun -> Go;
767
768 Extend 'climb'
769     * 'through' / 'out' / 'via' noun -> Go;
770
771 Extend 'go'
772     * 'through' / 'out' / 'via' noun -> Go;