-
Notifications
You must be signed in to change notification settings - Fork 1
/
Stale Tales Slate Common.i7x
940 lines (650 loc) · 38.5 KB
/
Stale Tales Slate Common.i7x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
Version 1/190507 of Stale Tales Slate Common by Andrew Schultz begins here.
[this is a collection of functions common to A Roiling Original and Shuffling Around, two games from the Stale Tales Slate with common code.]
include Stale Tales Slate Universal by Andrew Schultz.
part trivial stubs
to say now-once of (ts - a truth state): say "[if ts is true]now[else]once[end if]"
to say now-once-num of (nu - a number): say "[if nu > 0]now[else]once[end if]"
to say past-tense of (th - a thing): say "[if noun is plural-named]They've[else if noun is a male person]He's[else if noun is a female person]She's[else]That's[end if]".
to say that-those-is-are of (x - a thing):
if x is a person:
say "[if x is plural-named]They are[else if x is male]He is[else if x is female]She is[else]It is[end if]";
else:
say "[if x is plural-named]Those are[else]That is[end if]";
chapter Q and Z stuff
to decide whether no-q-u:
unless the player's command matches the regular expression "qu", yes;
no;
to say also-q: say "[if no-q-u]. Also, even if you could do anything, you'd need the u right after the q, probably. You'll need to do odd stuff, but nothing too odd[end if]"
z-warn is a truth state that varies.
to decide whether z-in-command:
[if the player's command matches the text "z", yes]
[the above is a bit slower but more readable. If the below ever has a problem, I'll go back to the above.]
if i6cmdrough >= 33554432, yes;
no;
to check-z-warn:
if z-warn is false and z-in-command:
ital-say-lb "also, as a trivial point, no point-gaining commands in [this-game] contain the letter Z. I'm a bit bummed by this, what with my last name ending in Z and all, but that may mean less confusion for you.";
now z-warn is true;
part game-dependent variables and super-stubs
orig-region is a region that varies. [ordeal loader/ (means manse or ordeal reload)]
hub-region is a region that varies. [stores in each case]
hub-room is a room that varies. [trips strip/strip of profits]
to moot (th - a thing): move th to Emerita Emirate; [ it's meatier emerita emirate in roiling, but the namespace works out ok, so we don't need to specify moot-room.]
to mootl (lt - a list of things): [used in particular for getting rid of fruits in Rustic Citrus.]
repeat with Q running through lt:
moot Q;
definition: a thing (called th) is moot:
if th is in Emerita Emirate, yes;
no;
definition: a thing (called th) is dislodged: [useful for fruits checking especially in ARO]
if th is moot, yes;
if th is carried by the player, yes;
no;
definition: a thing (called ht) is spayshul:
if ht is an xtrhelp listed in spechelp of mrlp, decide yes;
decide no.
the file of debuggery is called "debug". [deprecated slightly but still useful for manual runthroughs]
to decide whether the action is talkative:
if talking to, yes;
if objasking generically, yes;
if objasking about, yes;
if asking about, yes;
no;
chapter notepad stuff
to decide whether (tx - text) is padded:
repeat through table of notepad entries:
if short entry is tx:
if known entry is true, yes;
no;
say "BUG: [tx] should have a notepad entry but doesn't! This isn't critical, but I'd like to know about it.";
no;
to verbsplain (t - text):
repeat through table of notepad entries:
if t is short entry:
if known entry is true:
if t is padded, say "[2da][blurb entry][line break]";
continue the action;
say "BUG: unknown verb-to-explain [t].";
chapter default rules to ignore
procedural rule: ignore the print final score rule.
the can't eat unless edible rule is not listed in any rulebook.
the can't push what's fixed in place rule is not listed in any rulebook.
the can't pull what's fixed in place rule is not listed in any rulebook.
the can't push people rule is not listed in any rulebook.
the can't push scenery rule is not listed in any rulebook.
the can't pull people rule is not listed in any rulebook.
the can't pull scenery rule is not listed in any rulebook.
chapter backdrop basics
a backdrop has a truth state called touched-yet.
a backdrop has a region called drop-region.
every turn (this is the tag backdrops for hinting rule):
repeat with BD running through fungible backdrops:
now touched-yet of BD is true;
chapter portal basics
a portal is a kind of thing. a portal is usually fixed in place. the specification of portal is "A thing that allows you access to vulnerable areas of Yorpwald."
a portal can be fake-enterable. a portal is usually fake-enterable.
a portal can be enter-clued. a portal is usually not enter-clued.
a portal has a region called go-region. a portal has text called solved-text.
a portal has a rule called entry-rule. entry-rule of a portal is usually the debug-fill-in-here rule.
a portal can be ever-entered or never-entered. a portal is usually never-entered.
default-portal is a portal that varies.
report entering a portal: process the move dumbdrops rule;
this is the debug-fill-in-here rule:
if debug-state is true, say "We need to fill this in.";
section actions on portals
check opening a portal: say "You can just enter." instead;
check closing a portal: say "You can't close [the noun], but there's no need to." instead;
check taking a portal:
say "I'll assume you meant 'take' as in entering [the noun]. If not, you can undo.";
try entering the noun instead;
section region-solved munging
to notify-portal-gone (rg - a region):
if rg is not orig-region:
let old-portal be go-portal of rg;
say "You notice that [the old-portal] you created from [the go-store of rg] [if old-portal is plural-named]have[else]has[end if] vanished.";
to decide which portal is go-portal of (rg - a region):
repeat with MYP running through portals:
if go-region of MYP is rg, decide on MYP;
decide on default-portal;
to decide which thing is go-store of (rg - a region):
repeat through regana of hub-region:
if the-to entry is a portal and go-region of the-to entry is rg, decide on the-from entry;
say "(BUG choosing store) ";
decide on Store A;
chapter region stuff
to decide what region is mrlp: decide on map region of location of player.
a region can be solved, unsolvable, unsolved, shortcircuited, bypassed or frivolous. a region is usually unsolved.
a region has a number called max-score. the max-score of a region is usually zero.
a region has a number called min-score. the min-score of a region is usually zero.
a region has a number called poss-score. the poss-score of a region is usually zero.
a region has a number called cur-score. the cur-score of a region is usually zero.
a region has a table name called regnud. a region has a table name called regana.
a region has a table name called spechelp.
a region has a room called last-loc.
a region has a rule called reg-hint-rule.
a region has a rule called goto-check.
a region has a rule called misses-rule.
a region has a list of things called item-list.
a region has a list of things called worn-list.
definition: a region (called rg) is explored:
if last-loc of rg is visited, yes;
no;
section room stuff
a room has a table name called roomnud. roomnud of a room is usually the Table of No Nudges.
Table of No Nudges
this-cmd hashval this-item this-rule (rule) this-clue
text a number a thing a rule text
to say here-there of (rm - a room): say "[if player is in rm]here[else][rm][end if]"
to say in-here-there of (rm - a room): say "[if player is in rm]here[else]in [rm][end if]"
section region scoring
to poss-d:
decrement poss-score of mrlp;
d "Taking away a max point. Max-score now [poss-score of mrlp].";
to min-up:
increment min-score of mrlp;
d "min-up codepath--point likely added in carry out fliptoing rule on LLPish item. Min-score now [min-score of mrlp].";
to min-and:
increment min-score of mrlp;
reg-inc;
d "min-and codepath -- forcing point and min point adding. This should be used for odd non-flip points. Current=[cur-score of mrlp] min=[min-score of mrlp].";
to min-and-q:
increment min-score of mrlp;
reg-inc-q;
d "min-and-q codepath: maybe adding an additional point for especially neat actions";
to reg-inc:
increment the turn count;
reg-inc-q;
score-notify;
to reg-inc-q:
increment the score;
if mrlp is nothing:
say "BUG NOTE: This location needs a map region!";
else:
increment the cur-score of mrlp;
last-solved-region is a region that varies.
chapter person/animal stuff
definition: a person (called pe) is npcish:
if pe is the player, no;
if pe is fungible, yes;
decide no;
chapter hint variables
first-hint-check is a truth state that varies.
scams is a truth state that varies. [can we do hints every turn like the saltine or snoop spoon?]
section debug variables that need to be in release
hintfull is a truth state that varies. hintfull is usually false.
part thingdefs
a thing can be examined or unexamined. a thing is usually unexamined.
a thing can be LLPish. a thing is usually not LLPish.
a thing can be universal, useless, amusing, cluey, unimportant, abstract, bounding or practical. a thing is usually practical.
a thing can be unscannable. a thing is usually not unscannable.
a thing can be read-yet. a thing is usually not read-yet.
to say re-read of (th - a thing): say "[if th is not read-yet]re-[end if]read"
volume when play begins
when play begins:
repeat through table of notepad entries:
if there is no verify entry, now verify entry is true;
repeat with Q running through regions:
now poss-score of Q is max-score of Q;
volume verbs
chapter score (first time)
check requesting the score for the first time (this is the cheesy points piston joke rule) : if mrlp is not frivolous, say "You hear a points postin['] piston rev up. It quickly drifts into background noise, fortunately not followed by the sound of combusting Pintos.[paragraph break]";
chapter diagonal movements
check going when noun is not planar (this is the reject diagonals and up/down rule):
if noun is diagonal:
say "[one of]Intermediate? Terminate! Die![or]Diagonals?! A sad lingo.[or]Diagonals?! So anal. Dig?[in random order][one of][line break][i][bracket]Note: [this-game]'s taxing enough without diagonal directions. If you can't find a way to go, type [b]EXITS[r].[close bracket][r][or][stopping][line break]" instead;
if the noun is vertical:
if the room noun of the location of player is nowhere:
say "if there is a way [noun], it should be clear in the description. Hopefully. If not, try [b]EXITS[r]." instead;
chapter minor verbs and blocking rules
the block burning rule is not listed in any rulebook.
the block buying rule is not listed in any rulebook.
the block drinking rule is not listed in any rulebook.
the block jumping rule is not listed in any rulebook.
the block kissing rule is not listed in any rulebook.
the block listening rule is not listed in any rulebook.
the block saying no rule is not listed in any rulebook.
the block saying sorry rule is not listed in any rulebook.
the block saying yes rule is not listed in any rulebook.
the block smelling rule is not listed in any rulebook.
the block sleeping rule is not listed in any rulebook.
the block swearing mildly rule is not listed in any rulebook.
the block swearing obscenely rule is not listed in any rulebook.
the block waving hands rule is not listed in any rulebook.
the block waking up rule is not listed in any rulebook.
the block tasting rule is not listed in any rulebook.
the block thinking rule is not listed in any rulebook.
the block throwing at rule is not listed in any rulebook.
section saying sorry
check saying sorry: say "I can't do anything with that apology." instead;
section waking (generic to both games)
check waking up: say "Wake? Weak!" instead;
section showing block
the block showing rule is not listed in any rulebook.
check showing it to (this is the new block showing rule) : say "You can't think why that would impress or help or scare the present company, so, maybe not." instead.
part gotoing framework
gotoing is an action applying to one visible thing.
understand the command "go [any reasonable-goto room]" as something new.
understand the command "go to [any reasonable-goto room]" as something new.
understand the command "gt [any reasonable-goto room]" as something new.
understand "go [any reasonable-goto room]" as gotoing.
understand "go to [any reasonable-goto room]" as gotoing.
understand "gt [any reasonable-goto room]" as gotoing.
definition: a room (called rm) is reasonable-goto:
if rm is hub-room and hub-room is visited, yes; [just to let the player RETRY]
if map region of rm is mrlp, yes;
if rm is visited, yes;
no;
a room can be shunned. a room is usually not shunned. [Force GO TO ROOM to fail even if you've been there and its priority *seems* OK. The two biggest cases so far: Dourest Detours and End Den are blocked off in Oyster once you solve the puzzles to get by them.]
a room has a number called progval. progval of a room is usually 0. [again for GO TO ROOM, from progval of 2 to 1 is not valid]
a room has text called outside-text. [ this is a nongeneric reject for OUT ]
a room has text called exits-text. [ this is status when the player types EXITS ]
definition: a room (called myr) is really-nearby:
if myr is in mrlp and myr is visited and myr is not shunned, yes;
no;
does the player mean going to a really-nearby room: it is very likely.
check gotoing (this is the reject trivial goto rule): if noun is location of player, say "You're already here. Or there. The precise grammar's neither here nor there." instead;
Rule for supplying a missing noun while gotoing:
say "You need to specify somewhere to go.";
reject the player's command;
part gotothinging framework
gotothinging is an action applying to one visible thing.
does the player mean gotothinging a thing carried by the player: it is unlikely.
does the player mean gotothinging a thing in location of the player: it is unlikely.
does the player mean gotothinging a sameregion thing: it is likely.
definition: a thing (called th) is sameregion:
if th is a backdrop, no;
if th is off-stage, no;
if th is fungible, no;
if mrlp is map region of location of th, yes;
no;
understand "go to [any thing-goable thing]" as gotothinging.
understand "goto [any thing-goable thing]" as gotothinging.
understand "gt [any thing-goable thing]" as gotothinging.
understand "gi [any thing-goable thing]" as gotothinging.
understand "go [any thing-goable thing]" as gotothinging.
definition: a thing (called th) is thing-goable: [note: this is trivially defined now, as if something is in an unvisitable room, "carry out gotoing" rejects it]
if th is off-stage, no;
yes;
carry out gotothinging:
if noun is a backdrop, say "Unfortunately, since [the noun] can be seen from or in more than one place, I can't go there." instead;
if location of noun is Adorb Bardo, say "Since [the noun] is sort of in an in-between state, I can't go to it. But you can probably recall it." instead;
if location of noun is Emerita Emirate, say "You don't need to do anything further with [the noun]. If you want to go where you last saw [the noun], you'll need to specify the place." instead;
d "Going to [location of noun], where [the noun] is.";
try gotoing location of noun instead;
Rule for supplying a missing noun while gotothinging:
say "You need to specify somewhere to go.";
reject the player's command;
part xrooming
room-look-warn is a truth state that varies.
xrooming is an action applying to one visible thing.
understand "x [any room]" as xrooming.
understand "examine [any room]" as xrooming.
check xrooming:
if noun is location of player:
say "[b]X[r]/[b]EXAMINE[r] ([b]ROOM[r]) is equivalent to [b]LOOK[r] in [this-game]. Sometimes this will describe scenery for you, but it doesn't have critical information.";
try examining location of player instead; [shouldn't happen but just in case]
say "[if noun is visited]You've been there, but you can't see that far[x-room-n][else]Sorry, I understood the verb, but I didn't understand the noun[end if].";
if room-look-warn is false:
say "[line break]";
ital-say "[b]X[i]/[b]EXAMINE[i] ([b]ROOM[i]) is usually equivalent to [b]LOOK[i] in [this-game].";
now room-look-warn is true;
the rule succeeds;
to say x-room-n: say "[one of]. [b]X ROOM[r] is really just the same as [b]LOOK[r] for the room you're in, and you don't need to look ahead or behind[or][stopping]"
part sitesing
to say email: say "[email protected]".
to say ghsite: say "http://github.com/andrewschultz/stale-tales-slate/[gm-short]"
sitesing is an action out of world.
understand the command "sites" as something new.
understand "sites" as sitesing.
carry out sitesing:
if cur-score of orig-region is 0:
say "Last chance spoiler warning. Sure you want to look?";
if the player yes-consents:
do nothing;
else:
say "Ok. Back to the game." instead;
say "http://wordsmith.org/anagram/ -- Anu Garg's Rearrangement Server at wordsmith.org was invaluable to me. Hard to believe I've known about it for fifteen years. You've probably seen it before, too, but it's the big one for the main game mechanic. The sayings that go with each anagram have also helped me in many other ways. It's still fun after all these years.[line break]http://www.anagrammy.com/anagrams/faq6.html[line break]http://www.english-for-students.com/One-Word-Anagrams.html[line break]http://www.enchantedlearning.com/english/anagram/ was quite nice for common anagrams by subject.[line break]http://www2.vo.lu/homepages/phahn/anagrams/oneword.htm[line break]http://www.ssynth.co.uk/~gay/anagram.html[line break]http://www.wellho.net/resources/ex.php4?item=p669/anagram (basic succinct Perl anagram finder)[line break]http://boards.straightdope.com/sdmb/archive/index.php/t-291149.html for specific words and also ideas how to script more complex stuff[line break]http://www.rinkworks.com/words/oddities.shtml[line break]http://www.sporcle.com/ had many puzzles that helped me determine what was fair and what wasn't[line break]http://jamesgart.com/anagram/[line break]PERL and Python for letting me parse through word-to-word anagrams and also helping me break one promising word into two.[paragraph break]I'd be interested if someone from France can ref these sites to make a similar game, someone from Spain could take pains, or a German manager could do so too. It'd be interesting to see.";
say "And it's already mentioned in the credits, but [ghsite] is where the project is hosted. I recommend using source control if at all possible. Even if you just use it to keep a backup, or be sure of what you changed, it can save a lot of trouble.";
the rule succeeds; [forgot where I found the names from]
part possing
possing is an action out of world.
understand the command "poss" as something new.
understand "poss" as possing.
possibles is a truth state that varies.
min-alert is a truth state that varies.
carry out possing:
now possibles is whether or not possibles is false;
say "Switching [on-off of possibles] minimum/maximum available point notification in the status line.";
if min-alert is false:
say "[line break]";
ital-say "this is a quasi-spoiler of sorts, since watching the maximum possible score drop means your most recent move precluded getting an easter egg. Or watching the minimum score increase may mean you found one.";
now min-alert is true;
pad-rec-q "poss";
the rule succeeds;
report requesting the score for the first time: poss-display.
to poss-display:
if possibles is false and min-alert is false and max-score of mrlp > 0:
ital-say "you can toggle seeing the minimum points to pass an area, or maximum achievable points, by typing [b]POSS[i]. This is a potential spoiler, since the minimum score increasing indicates you found a Last Lousy Point, and the maximum score decreasing indicates one is no longer available. But maybe you'd like that sort of hint, too.";
now min-alert is true;
pad-rec "poss";
to say poss-range: say "[if poss-score of mrlp is not min-score of mrlp][min-score of mrlp]-[poss-score of mrlp][else]*[poss-score of mrlp]*[end if]";
part bugtracking
to say bug-report:
abort-if-bugfind;
say "Oops! You've found a small bug, which is nothing critical, but I forgot to organize everything perfectly.[paragraph break]It's likely you're scanning something for hints, and it probably just means that I forgot to assign a property to a non-game-critical item when I revamped the code.";
say "[line break]Contact me at [email] with a transcript or description of where you are/what you did, or report a bug at [ghsite], because this is something I want to fix, though it is not critical to the game. Use up arrow to see previous commands. Or use [b]UNDO[r] several times and hit [b]TRANSCRIPT[r] to show me how you got here, what your inventory was, etc.[paragraph break]You can also report reproducible bugs at [ghsite]. Thanks so much for taking the time!"
bugsquash is a truth state that varies.
to abort-if-bugfind:
say "Attempting to cut off testing bugsquash = [bugsquash].";
if bugsquash is true:
say "[word number 1 in the player's command] = word in player's command, [noun] = noun, [second noun] = second noun, [current action] = current action.";
say "Turn off bailing behavior with [b]SQ[r].";
if word number 1 in the player's command is not "showme":
say "Cutting off testing now.";
end the story finally;
follow the shutdown rules;
chapter bsing - not for release
[* SQ turns bugsquash on ]
sqing is an action out of world.
understand the command "sq" as something new.
understand "sq" as sqing.
carry out sqing:
now bugsquash is whether or not bugsquash is false;
say "Now bugsquash (end game on <BUG> text) is [on-off of bugsquash].";
the rule succeeds;
volume multiple items
the first time takeall notify rule is listed first in the instead rules.
the don't allow dropping all rule is listed before the first time takeall notify rule in the instead rules.
getall-warn is a truth state that varies.
instead of taking when number of entries in multiple object list > 1 (this is the first time takeall notify rule): [no-irp] [??]
if getall-warn is false:
say "Multiple item-pull!";
now getall-warn is true;
continue the action;
instead of dropping when number of entries in multiple object list > 1 (this is the don't allow dropping all rule): [no-irp] [??]
let Q be the noun;
say "[game-specific-drop-msg].";
alter the multiple object list to { Q };
continue the action;
volume boring things
part rooms are sort of boring
instead of doing something with the location of the player (this is the location is too general rule): [no-irp]
if current action is gotoing, continue the action;
if current action is examining or current action is xrooming or current action is scaning or current action is gotothinging, continue the action;
say "You may need to change your location at some time, but you never need to do anything with it in a command."
part boring things
a thing can be boring. a thing has text called bore-text. a thing has a rule called the bore-check. bore-check of a thing is usually bore-pass rule.
boring-exception is a truth state that varies.
instead of doing something with a boring thing: [no-irp]
if debug-state is true, say "DEBUG note: [current action] with [noun] is under scrutiny, with [bore-check of noun].";
abide by the bore-check of noun;
if action is procedural or boring-exception is true:
if debug-state is true and boring-exception is true, say "DEBUG note: [current action] with [noun] slips general boring-thing rules.";
now boring-exception is false;
continue the action;
abide by the bore-exam rule;
say "[bore-text of noun][line break]" instead;
this is the bore-pass rule: do nothing; [probably not necessary, but just in case...]
this is the bore-exam rule: [note: I caused bugs by saying PROCESS THE BORE-EXAM RULE instead of ABIDE BY. Enough that I'll write this note in.]
if current action is examining:
if description of noun is empty:
if debug-state is true, say "(DEBUG: pulling bore-text) ";
say "[bore-text of noun][line break]";
the rule succeeds;
else if bore-text of noun is empty:
say "There's not much to do with [the noun] besides examining. So you do.";
try examining the noun;
the rule succeeds;
part dumbdrops
a dumbdrop is a kind of thing. a dumbdrop is always scenery. a dumbdrop is usually boring. a dumbdrop has a rule called drop-rule. drop-rule of a dumbdrop is usually the degen-false rule.
report going (this is the move dumbdrops rule):
repeat with Q running through dumbdrops:
process the drop-rule of Q;
if the rule succeeded, move Q to location of player;
volume hinting stuff
part nudges for good/great guesses
pass-good-guess-note is a truth state that varies.
good-guesses-noted is a truth state that varies.
great-guesses-noted is a truth state that varies.
to say skip-guess-note: now pass-good-guess-note is true;
may-plural-nag is a truth state that varies.
already-plural-nag is a truth state that varies.
to say seed-plural-nag: now may-plural-nag is true;
to say note-good-guesses:
if pass-good-guess-note is true:
now pass-good-guess-note is false;
continue the action;
if good-guesses-noted is true, continue the action;
say "[line break]";
ital-say "this was the right idea, though what you tried to switch can't be anagrammed. Trying stuff is encouraged, though generally, you'll get a response saying nothing meaningful happens if you try to change scenery that doesn't need it.";
now good-guesses-noted is true;
to say note-great-guesses:
if great-guesses-noted is true, continue the action;
say "[paragraph break]";
ital-say "you found a great guess, but such a change wouldn't push the story forward. Still, if you find one, the responses are meant to either be amusing or provide a small clue.";
say "[run paragraph on]";
now great-guesses-noted is true;
to say plural-nag:
if may-plural-nag is false, continue the action;
if already-plural-nag is true, continue the action;
say "[line break]";
ital-say "you are on the right track, but the intended anagram has an extra S. This is a one-time nag, though the nudge messages should always implicitly state when things['] or people's plurality, or an apostrophe-s, is important.";
say "[run paragraph on]";
now already-plural-nag is true;
part hints
plus-noted is a truth state that varies.
plus-after is a truth state that varies.
minus-noted is a truth state that varies.
minus-after is a truth state that varies.
check objhinting:
now plus-after is false;
now minus-after is false;
to say plus:
say "[run paragraph on] (+)[paragraph break]";
now plus-after is true;
to say minus:
if prevent-thruhint-flag is false, now cur-item is thruhinted;
say "[run paragraph on] (-)[paragraph break]";
now minus-after is true;
report objhinting:
if minus-after is true and minus-noted is false:
ital-say "a minus sign means you've reached the end of a hint loop. You can cycle through them again, though.";
now minus-noted is true;
report objhinting:
if plus-after is true and plus-noted is false:
ital-say "the plus sign means you can [b]HINT[i] again for something more spoilery. (-) means the end of a list of hints.";
now plus-noted is true;
prevent-thruhint-flag is a truth state that varies. [a test variable for ignoring random hints that fall through]
this is the reject unknowable objects if not testing rule:
if in-hint-testing is true, continue the action;
if location of noun is nothing and noun is not a backdrop, say "You probably shouldn't know about [the noun], yet. And if you do, try asking about objects you can see." instead;
if noun is not a backdrop and noun is not scenery:
if noun is off-stage or mrlp is not map region of location of noun, say "That doesn't seem to be in this region." instead;
if noun is moot, say "[noun]: [past-tense of noun] been dealt with. I'm pretty sure." instead;
this is the generic hint state rejects rule:
if noun is location, say "Occasionally you can [b]SCAN[r] or [b]SMELL[r] or [b]LISTEN[r] for clues, and [this-game] will pick up something worth looking at." instead;
if noun is a room, say "You need to hint things in a location, not a location. Also, you can just type [b]HINT[r] for the current puzzle to look at." instead;
if noun is bounding, say "[that-those-is-are of noun] there just to provide barriers in various directions, and for local flavor. Screeny scenery, if you will. Or even if you won't." instead;
if noun is realized, say "[that-those-is-are of noun] no longer part of a puzzle." instead;
if noun is amusing, say "[that-those-is-are of noun] in there for general silliness." instead;
if noun is useless, say "[that-those-is-are of noun] in there for local flavor and scenery." instead;
chapter ptfing - not for release
ptfing is an action applying to one number.
understand the command "ptf" as something new.
understand "ptf [number]" as ptfing.
carry out ptfing:
let was-already be prevent-thruhint-flag;
if the number understood is 1:
now prevent-thruhint-flag is whether or not prevent-thruhint-flag is false;
else if the number understood is 2:
if prevent-thruhint-flag is true, now was-already is true;
now prevent-thruhint-flag is true;
else if the number understood is 0:
if prevent-thruhint-flag is false, now was-already is true;
now prevent-thruhint-flag is false;
say "Ignoring hint completion [if was-already is prevent-thruhint-flag]was already[else]is now[end if] [on-off of prevent-thruhint-flag].";
the rule succeeds;
ptf1ing is an action out of world.
understand "ptf" as ptf1ing.
carry out ptf1ing:
try ptfing 1;
part disambiguation
include Bypass Disambiguation by Climbing Stars.
rule for asking which do you mean (this is the bypass disambiguation rule):
if current action is objhinting or current action is gotothinging or current action is objasking or current action is objasking generically:
say "Sorry, [one of]but you may not have been specific enough with the [if current action is gotothinging]going[else if current action is objhinting]hint[else]asking[end if] request. I'm going to err on the side of caution instead of possibly disambiguating something you haven't seen. This is a possible coding bug (and I'd like to know,) but it may also prevent spoilers. For best results, you should try to visit the location of whatever you want hinted or be more detailed in your request[or]this request seems too vague. If it's a bug, let me know[stopping].";
bypass disambiguation;
the rule succeeds;
continue the action;
after asking which do you mean (this is the bypass disambiguation 2 rule):
if current action is objhinting or current action is gotothinging or current action is objasking or current action is objasking generically:
bypass disambiguation;
the rule succeeds;
continue the action;
volume trivial rules
this is the degen-false rule: the rule fails.
this is the degen-true rule: the rule succeeds.
volume transcript stuff
check quitting the game when currently transcripting:
say "Thanks for taking a transcript. Please send it to [email] and I'll be grateful. Thanks!";
report switching the story transcript on:
say "Thanks for taking this transcript! If you've never made a transcript before, it's not hard. Type [b]TRANSCRIPT[r] and save to a text file and start any comments with ; or * or ?. Then locate the file and mail it to me at [email]. Don't worry if you don't make many comments--I can often see ways I didn't mean for the player to get stuck.[paragraph break]While [this-game]'s puzzles are rather stable, I'm interested in anything from 'this is broken' or 'this was hinted poorly' to 'you missed this joke.' Authors enjoy getting transcripts--I mean, after we realize what we did wrong, we can learn a lot.[paragraph break]You can also report and see issues at [ghsite].[paragraph break]Again, my email address is [email]. Thanks!";
continue the action;
volume post-game stubs
a region can be tickedoff. a region is usually not tickedoff.
to say eqls: if screenread is false, say "====";
to say eq2: if screenread is false, say "[eqls][eqls]";
to say 2da: if screenread is false, say "--";
to say 2dg of (rg - a region):
if rg is not tickedoff:
say "[eqls][b][printed name of rg in upper case]:[r][line break]";
now rg is tickedoff;
to say 2dmiss of (cr2 - a region):
say "[2dg of cr2]";
now anything-missed is true;
say "[2da]";
miss-room is a room that varies.
to say 2drm of (rr - a room):
say "[2dg of map region of rr]";
now anything-missed is true;
unless miss-room is rr, say "[eqls][b][rr][r][eqls][line break]";
now miss-room is rr;
say "[2da]";
anything-missed is a truth state that varies.
volume glulx stuff
Table of Common Color Values (continued)
glulx color value assigned number
g-pure-blue 255 [== $0000FF]
g-pure-green 40960 [== $00A000]
g-pure-red 16719904 [== $FF2020]
Table of User Styles (continued)
style name justification obliquity indentation first-line indentation boldness fixed width relative size glulx color
header-style -- -- -- -- bold-weight -- 2 g-black
special-style-1 -- -- -- -- regular-weight proportional-font 0 g-pure-red
special-style-2 -- -- -- -- regular-weight proportional-font 0 g-pure-green
italic-style -- -- -- -- -- -- 0 g-black
fixed-letter-spacing-style -- -- -- -- -- -- 0 g-black
bold-style -- -- -- -- -- -- 0 g-black
alert-style -- -- -- -- -- -- 0 g-black
note-style -- -- -- -- -- -- 0 g-black
input-style -- -- -- -- -- -- 0 g-black
blockquote-style left-justified no-obliquity 0 0 regular-weight proportional-font 0 g-pure-blue
[normal-style -- -- -- -- -- -- 0 g-black]
The back-colour of the main-window is g-white.
to say bluetext:
(- glk_set_style(style_BlockQuote); -)
volume resave/averse
chapter variables
autosave is a truth state that varies. autosave is true.
autosave-known is a truth state that varies.
a region can be autosavable. a region is usually autosavable.
chapter rules
this is the autosave on region complete rule:
if autosave is true and mrlp is autosavable:
if autosave-known is false and mrlp is orig-region:
say "[line break]";
ital-say "[this-game][i] is configured to create an auto-save dialogue after each region you solve. This can be switched off with [b]AVERSE[i] or switched back on with [b]RESAVE[i]. You can also abort saving with no penalty. This nag will not reappear.";
wfak;
if debug-state is false:
try saving the game;
else:
say "<debug mode skips game-saving dialogue so test runs are continued>[line break]";
now autosave-known is true;
chapter resaveing
resaveing is an action out of world.
understand the command "resave" as something new.
understand "resave" as resaveing.
carry out resaveing:
say "The auto-saving flag is [if autosave is true]already[else]now[end if] set to [b]RESAVE[r], or on.";
now autosave is true;
the rule succeeds;
chapter averseing
averseing is an action out of world.
understand the command "averse" as something new.
understand "averse" as averseing.
carry out averseing:
say "The auto-saving flag is [if autosave is false]already[else]now[end if] set to [b]AVERSE[r], or off.";
now autosave is false;
the rule succeeds;
volume debug variables that must be in common file / release code since they appear in release functions and cannot be moved
in-hint-testing is a truth state that varies.
end-menu-testing is a truth state that varies.
this is the avoid keypress in menu testing rule: if end-menu-testing is true, say "Skipping the end-menu-testing options so automated testing doesn't get stuck." instead;
book end menu testing - not for release
chapter emying
emying is an action out of world.
understand the command "emy" as something new.
understand "emy" as emying.
carry out emying:
say "End menu testing (skip wait-for-key) is [if end-menu-testing is true]already[else]now[end if] on.";
now end-menu-testing is true;
the rule succeeds;
chapter emning
emning is an action out of world.
understand the command "emn" as something new.
understand "emn" as emning.
carry out emning:
the rule succeeds;
volume exits metaverb
exitsing is an action out of world.
understand the command "exits" as something new.
understand "exits" as exitsing.
carry out exitsing:
if exits-text of location of player is not empty, say "[exits-text of location of player][line break]" instead;
if number of viable directions is 0:
d "This is the generic no-exits message, so you'll want to add exits-text for [location of player] in story.ni.";
say "There are no directional exits here, but that doesn't mean you're stuck. Maybe you can figure a way to create one[if number of fungible enterable things > 0], and it looks like there's something to [b]ENTER[r][end if]." instead;
if number of viable directions is 1, say "The only way you seem to be able to go is [list of viable directions]." instead;
say "There are [number of viable directions in words] unblocked exits: [list of viable directions].";
the rule succeeds;
after printing the name of a direction (called dir) when exitsing:
let RDLP be the room dir of location of player;
unless RDLP is nothing:
if RDLP is visited, say " to [RDLP]";
continue the action;
volume ending stuff
[ I'd rather not include a RANKS line of the table of final ending questions, as I'd like it last, since it is the least important/detailed of the endgame options ]
this is the show ranks rule:
say "Here is a list of ranks achievable throughout [this-game].";
let my-row be 0;
repeat through table of ranks:
increment my-row;
if there is a show-at-end-rule entry:
process the show-at-end-rule entry;
if the rule failed, next;
say "[my-row]: [b][rank-name entry][r]: [to-achieve entry].";
volume specific items
part hubs bush popup
[must be after boring thing descriptions]
the hubs bush is boring scenery. the hubs bush is bounding. description is "The hubs bush encircles the entire [location of player], and it's too thorny and thick to get through. You're stuck here, unless you warp through a[if any-store-visited]nother[end if] store.". bore-text is "The hubs bush that sprung up has pinned you by the stores. Hooray for focus, I guess."
to decide whether any-store-visited:
repeat with myr running through regions:
if myr is hub-region or myr is orig-region, next;
if last-loc of myr is visited, yes;
no;
check going nowhere in hub-room:
say "[if hubs bush is in location of player]The hubs bush forces you back to the center of the [location of player][else]As you try to flee the [location of player], a voice booms 'Run off for fun? Urff, no!'[paragraph break]Up pops a bush--a hubs bush! It's too thick to walk through. You move to the side, but the bush expands.[paragraph break]Defeated, you turn back to the center--and when you look around, you notice the hubs bush encircles the whole [location of player][end if]. Guess you'll need to explore the stores, or what you [if number of moot stos > 0]made[else]can make[end if] of them.";
move hubs bush to hub-room;
the rule fails;
to say if-bush: say "[if hubs bush is in location of player]. The hubs bush that sprang up when you tried to escape still blocks your way out[end if]"
Stale Tales Slate Common ends here.