-
Notifications
You must be signed in to change notification settings - Fork 0
/
main-en.strand
2275 lines (2022 loc) · 51.7 KB
/
main-en.strand
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
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
::start
// some info for if you want to mod it:
//
// basic syntax examples:
// ::passage title
// [[basic link]]
// [[link with different label>passage title]]
// [[link with different action|this.something=true;this.goto('passage title');]]
// <<if this.something>><<elseif this.somethingElse>><<endif>>
// <<do this.something=true;>>
// <<print this.something>>
// >passage break
//
// js examples:
// this.goto('passage')
// this.showL('texture', { duration, x, y, scale, animate, freq })
// this.showR('texture', { duration, x, y, scale, animate, freq })
// this.scrim(amount, duration)
// this.tween(object, 'property', to, duration, from, ease)
// this.gameObject - npc/interrupt that triggered the dialog
// this.scene - game scene
// this.voice - audio to play as letters tick in
// this.ease - easing functions
//
// game object stuff:
// this.Area(name, [objects])
// this.Prop({ texture, x, y, alpha, scale, flip, blur, animate, offset })
// this.PropParallax({ texture, alpha, scale, flip, blur, mult, animate, offset }),
<<if !this.started>>
<<do
// middle mouse click to go back in debug
if (this.debug && !window.debugBack) {
window.debugBack = true;
window.addEventListener('pointerdown', (event) => {
if (event.button === 1) {
window.scene.strand.back();
}
});
}
this.Area('empty', []);
// start
this.started=true;
this.tween(this.scene.dialogue.sprBg, 'alpha', 1, 500);
this.tween(this.scene.border.display.container, 'alpha', 1, 500);
// add syntax sugar for passages like `Guy angry: Blah blah.`
this.portrait = '';
const check = /(\w+|".*?")(\s+\w*)?:\s*/;
this.scene.dialogue.sayo = this.scene.dialogue.say;
this.scene.dialogue.say = (text, actions) => {
const match = check.exec(text);
if (match) {
this.portrait = ['portrait', match[1], match[2] ].filter(i => i).map(i => i.trim()).join(' ').replace('"','').replace('"','');
this[match[1] === 'Songbird' ? 'showL' : 'showR'](this.portrait);
requestAnimationFrame(() => this.scene.dialogue.pos = match[1].length+2);
this.scene.dialogue.voice = (match[1] || '').replace('"','').replace('"','');
this.scene.dialogue.sayo(`${match[1].toUpperCase()}:\n${text.substring(match[0].length)}`, actions);
} else {
this.scene.dialogue.sayo(text, actions);
}
};
this.titleCard = async (texts) => {
for (let i = 0; i < texts.length; ++i) {
this.scene.bigTextPop(texts[i], this.size.x/2, this.size.y/2+(i-1)*50);
await this.delay(1000);
}
await this.delay(1000);
};
// blinking and lip flaps
// this.blinking = false;
// this.timeoutBlinking;
this.scene.dialogue.scripts.push({
gameObject: this.scene.dialogue,
update: () => {
if (!this.portrait) return;
// if (!this.timeoutBlinking) {
// this.timeoutBlinking = setTimeout(() => {
// this.blinking = !this.blinking;
// this.timeoutBlinking = null;
// }, this.blinking ? 100 : 2000+Math.random()*4000);
// };
const letter = this.scene.dialogue.strText[scene.dialogue.pos];
const isLetter = letter && letter.replace(/[^\w]/, '');
const toggler = this.portrait.includes('Songbird') ? this.scene.dialogue.togglerL : this.scene.dialogue.togglerR;
if (isLetter) {
toggler.active.setAnimation(`${this.portrait} open`);
} else {
toggler.active.setAnimation(this.portrait);
}
},
});
>>
<<endif>>
<<do
this.scene.dialogue.voice = 'voiceDefault';
this.sfx('voiceDefault');
this.showL('black', { scale: 540, x: -160 });
this.showR('title', { x: -this.size.x/2+this.scene.dialogue.togglerL.container.x });
this.portrait='';
>>
[[START]]
[[HOW TO PLAY]]
[[ABOUT]]
::HOW TO PLAY
<<do
this.sfx('voiceDefault');
this.showL('help1');
this.showR('help2');
this.portrait='';
>>
[[BUILD CONTROLS]]
[[COMBAT CONTROLS]]
[[ABOUT MODULES]]
[[ABOUT COMBAT]]
[[BACK>start]]
::BUILD CONTROLS
Select LMB
Deselect RMB
Rotate Module SCROLL / Q / D
Flip Module MMB / F / V / H
Duplicate Module Hold CTRL / SHIFT
[[ABOUT MODULES]]
[[BACK>HOW TO PLAY]]
::ABOUT MODULES
Modules add abilities used in battle.
Every mech needs a cockpit.
If this is destroyed, you lose.
Weapons are used to attack the enemy.
[[MORE ABOUT MODULES]]
[[BACK>HOW TO PLAY]]
::MORE ABOUT MODULES
Radars allow you to scan the enemy mech. They tell you what module occupies a cell.
Shields block attacks next turn.
Heatsinks allow you to take more actions in a single turn.
[[EVEN MORE ABOUT MODULES]]
[[BACK>HOW TO PLAY]]
::EVEN MORE ABOUT MODULES
Overheating has dire consequences!
Joint extenders will add extra protection to your mech's limbs.
Different mech parts and modules will cost different amounts. Make sure to optimize and not go over budget!
[[BACK>HOW TO PLAY]]
::COMBAT CONTROLS
Select - LMB
Back - RMB
Repeat Action - SHIFT + LMB
[[ABOUT COMBAT]]
[[BACK>HOW TO PLAY]]
::ABOUT COMBAT
The aim of the game is to find your enemy's cockpit and destroy it.
Each round you will be able to take aim, scan, and toggle shields based on your available modules.
[[MORE ABOUT COMBAT]]
[[BACK>HOW TO PLAY]]
::MORE ABOUT COMBAT
Severing a mech's joints will cut off communications between the limb and the enemy's cockpit. This renders all modules in the limb unusable.
Modules will be revealed after all of its cells are destroyed and it is no longer operational.
[[BACK>HOW TO PLAY]]
::ABOUT
<<do
this.sfx('voiceDefault');
this.showL('black', { scale: 540, x: -160 });
this.showR('sweetheart squad');
this.portrait='';
>>
MADE BY
SEAN
MICHAEL
IAN
OF "SWEETHEART SQUAD"
FOR "MECH JAM V"
[[MORE MECH JAM ENTRIES|window.open('https://itch.io/jam/mechjam5/entries', '_blank')]]
[[MORE SWEETHEART SQUAD GAMES|window.open('https://sweetheartsquad.itch.io', '_blank')]]
[[BACK|this.back()]]
::START
<<do
this.showL('black', { scale: 540, x: -160 });
this.showR('');
this.portrait = '';
this.music('bgm');
this.goto('main');
>>
::close
this should never render
::choiceDefault
::debug menu
[[passage select>passage select]]
[[language select]]
[[close]]
[[back|this.back()]]
::main
<<do
this.goto('close');
this.next = 'diplomat';
this.scene.start({
"head": "Bunted Snow",
"chest": "Scrubbed Wren",
"arms": "Maggoty Pie",
"legs": "Warbled Marsh",
"modules": [],
});
// initial locks
[].concat(this.scene.pieces.heads, this.scene.pieces.chests, this.scene.pieces.arms, this.scene.pieces.legs).forEach(i => {
if (this.scene.locked[i] === undefined) {
this.scene.locked[i] = true;
}
});
// unlock Songbird
this.scene.locked['head Bunted Snow'] = false;
this.scene.locked['chest Scrubbed Wren'] = false;
this.scene.locked['arm Maggoty Pie'] = false;
this.scene.locked['leg Warbled Marsh'] = false;
this.scene.saveLocks();
>>
::scenes
actual written scenes below
::diplomat prebuild
<<do this.titleCard(['SORTIE BEGIN:', '"DIPLOMAT"']).then(() => this.goto('diplomat prebuild2'))>>
::diplomat prebuild2
Diane: Songbird, good to see you. Doing some afternoon training?
>
Songbird: Oh, Diane! Hey. Yeah, I was just practicing some moves.
>
Diane: Perhaps you'd like a sparring partner?
>
Songbird: Sure. Just give me a sec to adjust my loadout.
[[>close]]
::diplomat prefight
Songbird: Alright, I'm ready to go.
>
Diane: Standard match rules. I'll pull my punches a little, but I won't just let you win.
>
Songbird: Understood.
>
<<do
this.scene.loadMech('enemy', {
"head": "Year 0001",
"chest": "Year 0080",
"arms": "Year 0717",
"legs": "Year 0999",
"modules": [
{"name": "Comfortable Cockpit","x": 8,"y": 5,"flipH": false,"flipV": false,"turns": 0 },
],
});
this.sfx('sfx_scan', { rate: .4, volume: .4 });
this.delay(1000).then(() => this.sfx('sfx_scan', { rate: .4, volume: .4 }));
this.delay(2000).then(() => this.sfx('sfx_scan', { rate: 1, volume: .4 }));
this.scene.screenFilter.flash(0.25, 400, this.ease.circOut);
this.titleCard(['"SONGBIRD"','VS','"WOMAN OF 1000 YEARS"']).then(() => this.goto('close'));
>>
::diplomat postfight
<<if this.won>>
<<do this.goto('diplomat won')>>
<<else>>
<<do this.goto('diplomat lost')>>
<<endif>>
::diplomat lost
Songbird: Ah, I messed that up.
>
Diane: Not every fight is a win, Songbird. But you pick yourself back up and try again.
>
Diane: Hmm, although not with me. I'm late for something. See you around, Songbird.
<<do this.goto('diplomat next')>>
::diplomat won
Diane: Impressive, Songbird. You've really been working on your skills.
>
Songbird: Thanks. Of course, I wouldn't be here without your training.
>
Diane: I just put you on the right path. The hard work has been yours.
>
Diane: Hmm, I have to go take care of something. See you around, Songbird.
<<do this.goto('diplomat next')>>
::diplomat next
Songbird: Bye, Diane.
<<do this.showR('');this.portrait=''>>
>
Songbird: Whew. That match was intense.
>
Songbird: It reminds me of a match I had with Madge last week...
<<do this.next = 'time travel'>>
[[>close]]
::time travel prebuild
<<do this.showL('');this.portrait=''>>
<<do this.showR('');this.portrait=''>>
<<do this.titleCard(['SORTIE BEGIN:', '"TIME TRAVEL"']).then(() => this.goto('time travel prebuild2'))>>
::time travel prebuild2
Madge: Alright, Songbird. We doing this or not?
>
Songbird: Give me a sec, Madge. Jeez. I'm still tuning my mech.
>
Songbird: Where's Danny today?
>
Madge: What am I, his keeper? He's probably at home.
>
Songbird: Okay. I didn't mean anything by it.
>
Madge: I'll worry about my boyfriend. You worry about how I'm about to kick your ass.
>
Songbird: We'll see about that.
>
<<do
this.scene.locked['head Year 0001'] = false;
this.scene.locked['chest Year 0080'] = false;
this.scene.locked['arm Year 0717'] = false;
this.scene.locked['leg Year 0999'] = false;
this.scene.saveLocks();
this.goto('close').then(() => this.scene.alert('New mech parts:\n"WOMAN OF 1000 YEARS"', undefined, 0x00ff00));
>>
::time travel prefight
Songbird: Alright, I'm ready to go.
>
Madge: Ready to lose, you mean.
>
<<do
// GOLD DUST WOMAN
this.scene.loadMech('enemy', {
"head": "Masque D'Or",
"chest": "Golden Casket",
"arms": "Sone ka Sparsh",
"legs": "Aurum Calcibus",
"modules": [
{ "name": "Sweet Omega", "x": 7, "y": 2,"flipH": false,"flipV": false,"turns": 3 },
{ "name": "D.MOD-MKI", "x": 2, "y": 9,"flipH": false,"flipV": true,"turns": 1 },
{ "name": "Standard Plating", "x": 13, "y": 9,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "HSNK-V", "x": 7, "y": 10,"flipH": false,"flipV": false,"turns": 1 },
{ "name": "Comfortable Cockpit", "x": 3, "y": 17,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "Standard Plating", "x": 12, "y": 17,"flipH": false,"flipV": false,"turns": 0 },
],
});
this.sfx('sfx_scan', { rate: .4, volume: .4 });
this.delay(1000).then(() => this.sfx('sfx_scan', { rate: .4, volume: .4 }));
this.delay(2000).then(() => this.sfx('sfx_scan', { rate: 1, volume: .4 }));
this.scene.screenFilter.flash(0.25, 400, this.ease.circOut);
this.titleCard(['"SONGBIRD"','VS','"GOLD DUST WOMAN"']).then(() => this.goto('close'));
>>
::time travel postfight
<<if this.won>>
<<do this.goto('time travel won')>>
<<else>>
<<do this.goto('time travel lost')>>
<<endif>>
::time travel lost
Songbird: Whoof. Is it over now?
>
Madge: Hah! Did I break you down, Songbird? Shatter your illusions?
>
Madge: Better pick up the pieces and go home.
>
Songbird: Damn, Madge. You're ruthless.
>
Madge: Winner's privilege. You can trash talk me next time you win. If that ever happens.
>
Songbird: Okay, okay. Next time.
<<do this.goto('time travel next')>>
::time travel won
Madge: Argh! You got me, Songbird.
>
Songbird: Better take that silver spoon and dig your grave.
>
Madge: Laugh it up, buddy. I'll get you next time. I'll make you cry.
>
Songbird: Can't wait.
<<do this.goto('time travel next')>>
::time travel next
Songbird: Alright, I'm gonna hit the showers. See you later.
<<do this.next = 'weird fiction'>>
[[>close]]
::weird fiction prebuild
<<do this.showL('');this.portrait=''>>
<<do this.showR('');this.portrait=''>>
<<do this.titleCard(['SORTIE BEGIN:', '"WEIRD FICTION"']).then(() => this.goto('weird fiction prebuild2'))>>
::weird fiction prebuild2
Danny: Songbird! I have a bone to pick with you.
>
Songbird: Danny? What's wrong?
>
Danny: You've been making time with my girl.
>
Songbird: What? Madge?
>
Danny: Everyone keeps telling me she's been seeing someone behind my back.
>
Danny: And I know you and she were here last week... canoodling, I assume!!
>
Songbird: Canoodling? We had one match in our mechs and then I went home.
>
Songbird: Danny, I'm not sleeping with Madge.
>
Danny: Don't play dumb with me, Songbird! I challenge you to a duel!
>
Danny: A duel of honour!!
>
Songbird: Danny, I seriously don't know what you're talking about.
>
Danny: Prepare yourself, knave!
>
Songbird: ...Fine.
>
<<do
this.scene.locked['head Masque D\'Or'] = false;
this.scene.locked['chest Golden Casket'] = false;
this.scene.locked['arm Sone ka Sparsh'] = false;
this.scene.locked['leg Aurum Calcibus'] = false;
this.scene.saveLocks();
this.goto('close').then(() => this.scene.alert('New mech parts:\n"GOLD DUST WOMAN"', undefined, 0x00ff00));
>>
::weird fiction prefight
Songbird: Okay, Danny. I'm ready. But I-
>
Danny: Homewrecker! You will taste defeat this day!!
>
<<do
this.scene.loadMech('enemy', {
"head": "Compound Carapace",
"chest": "Thoracic Trunk",
"arms": "Predatory Pincers",
"legs": "Beetle Boots",
"modules": [
{ "name": "Radial Array","x": 9,"y": 0,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "HSNK-J","x": 0,"y": 2,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "HSNK-L","x": 6,"y": 2,"flipH": false,"flipV": false,"turns": 1 },
{ "name": "D.MOD-MKI","x": 5,"y": 7,"flipH": true,"flipV": false,"turns": 1 },
{ "name": "Comfortable Cockpit","x": 4,"y": 15,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "Standard Plating","x": 7,"y": 15,"flipH": false,"flipV": false,"turns": 0 },
],
});
this.sfx('sfx_scan', { rate: .4, volume: .4 });
this.delay(1000).then(() => this.sfx('sfx_scan', { rate: .4, volume: .4 }));
this.delay(2000).then(() => this.sfx('sfx_scan', { rate: 1, volume: .4 }));
this.scene.screenFilter.flash(0.25, 400, this.ease.circOut);
this.titleCard(['"SONGBIRD"','VS','"STATION MAN"']).then(() => this.goto('close'));
>>
::weird fiction postfight
<<if this.won>>
<<do this.goto('weird fiction won')>>
<<else>>
<<do this.goto('weird fiction lost')>>
<<endif>>
::weird fiction won
Danny: You... bastard.
>
Danny: First you steal my girl... then my dignity.
>
Songbird: Danny! Madge and I are just friends.
>
Songbird: If she's seeing someone, it's not me.
>
Danny: I... fine.
>
Danny: Maybe it's someone else.
>
Danny: You win this round, Songbird. But if you're lying to me, so help me...
<<do this.goto('weird fiction next')>>
::weird fiction lost
Danny: Hah! Take that, you toad.
>
Danny: Madge is mine now.
>
Songbird: Danny! Madge and I are just friends.
>
Songbird: If she's seeing someone, it's not me.
>
Danny: I don't care. Stay away from her.
>
Danny: If i so much as see you near her, so help me...
<<do this.goto('weird fiction next')>>
::weird fiction next
<<do this.showR('');this.portrait=''>>
Songbird: ...
>
Songbird: That was... something.
>
Songbird: I wonder if it's true. Is Madge seeing someone else?
<<do this.next = 'arena'>>
[[>close]]
::arena prebuild
<<do this.showL('');this.portrait=''>>
<<do this.showR('');this.portrait=''>>
<<do this.titleCard(['SORTIE BEGIN:', '"ARENA"']).then(() => this.goto('arena prebuild2'))>>
::arena prebuild2
Songbird: Oh hey, Rhiannon. You here to train?
>
Rhiannon: Did you tell Danny about me and Madge?!
>
Songbird: I- what? He came in here yelling about Madge and-
>
Rhiannon: So you did?
>
Songbird: No! He thought I was with Madge.
>
Rhiannon: And you ratted me out to save yourself.
>
Songbird: Wait, you're the one who's been with Madge?
>
Rhiannon: That act isn't going to work, Songbird. I know it was you.
>
Rhiannon: You just couldn't let me have this.
>
Rhiannon: We were friends. Equals. We came up through all this together.
>
Rhiannon: You were the one person I could trust, in and out of the ring.
>
Rhiannon: But now, I'm going to destroy you.
>
Rhiannon: Get in your mech.
>
<<do
this.scene.locked['head Compound Carapace'] = false;
this.scene.locked['chest Thoracic Trunk'] = false;
this.scene.locked['arm Predatory Pincers'] = false;
this.scene.locked['leg Beetle Boots'] = false;
this.scene.saveLocks();
this.goto('close').then(() => this.scene.alert('New mech parts:\n"STATION MAN"', undefined, 0x00ff00));
>>
::arena prefight
Songbird: Rhiannon, I swear I didn't say anything about you.
>
Rhiannon: You will take a bullet for every lie you've told.
>
<<do
this.scene.loadMech('enemy', {
"head": "Peckish Lump",
"chest": "Whet Appetite",
"arms": "Tarless Feather",
"legs": "Hollowed Leap",
"modules": [
{ "name": "Compact Cockpit","x": 3,"y": 2,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "Standard Plating","x": 7,"y": 2,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "D.MOD-MKI","x": 4,"y": 4,"flipH": false,"flipV": true,"turns": 0 },
{ "name": "OverSight","x": 6,"y": 10,"flipH": false,"flipV": false,"turns": 3 },
{ "name": "Cheap Plating","x": 9,"y": 10,"flipH": false,"flipV": false,"turns": 3 },
{ "name": "Standard Plating","x": 3,"y": 11,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "HSNK-J","x": 4,"y": 18,"flipH": false,"flipV": false,"turns": 3 },
{ "name": "Sweet Omega","x": 9,"y": 18,"flipH": false,"flipV": false,"turns": 1 },
],
});
this.sfx('sfx_scan', { rate: .4, volume: .4 });
this.delay(1000).then(() => this.sfx('sfx_scan', { rate: .4, volume: .4 }));
this.delay(2000).then(() => this.sfx('sfx_scan', { rate: 1, volume: .4 }));
this.scene.screenFilter.flash(0.25, 400, this.ease.circOut);
this.titleCard(['"SONGBIRD"','VS','"ROAD RUNNER"']).then(() => this.goto('close'));
>>
::arena postfight
<<if this.won>>
<<do this.goto('arena won')>>
<<else>>
<<do this.goto('arena lost')>>
<<endif>>
::arena won
Rhiannon: ...
>
Songbird: You wouldn't listen. I told you I had nothing to do with this.
>
Rhiannon: ...
>
Rhiannon: That may be true.
<<do this.goto('arena next')>>
::arena lost
Rhiannon: This is what happens to rats.
>
Songbird: Rhiannon! I have nothing to do with this. I didn't even know...
>
Rhiannon: Enough lies.
>
Rhiannon: And even if you didn't...
<<do this.goto('arena next')>>
::arena next
Rhiannon: Danny found out. So it's over. My life is over.
>
Madge: No it's not.
>
Songbird: Madge!
>
Rhiannon: Baby!
>
Madge: Screw Danny. He's a drip. I told him to get lost.
>
Rhiannon: So you mean...
>
Madge: Yes. I chose you.
>
Rhiannon: And I accept.
>
Songbird: ...
>
Songbird: Are we done here?
>
Rhiannon: Yes. Madge? Let's go.
>
Madge: Okay, baby. Bye, Songbird.
>
Songbird: ...
<<do this.showR('');this.portrait=''>>
>
Songbird: What the hell is happening around here?
>
Songbird: Wasn't Rhiannon dating Murrow?
>
Songbird: Wait... don't tell me.
<<do this.next = 'shifting sands'>>
[[>close]]
::shifting sands prebuild
<<do this.showL('');this.portrait=''>>
<<do this.showR('');this.portrait=''>>
<<do this.titleCard(['SORTIE BEGIN:', '"SHIFTING SANDS"']).then(() => this.goto('shifting sands prebuild2'))>>
::shifting sands prebuild2
Murrow: SONGBIRD!!!
>
Songbird: I don't have anything to do with this, Murrow.
>
Murrow: LIAR!!!
>
Songbird: Rhiannon just left with Madge. Go talk to them about it.
>
Murrow: Everything was fine until YOU talked to Danny!
>
Murrow: We lived in blissful ignorance! You ruined that! You ruined everything!!
>
Songbird: Okay, I don't have time for this. Are you going to fight me?
>
Murrow: I'M GOING TO KILL YOU!!
>
Songbird: Alright, just get in the arena.
>
<<do
this.scene.locked['head Peckish Lump'] = false;
this.scene.locked['chest Whet Appetite'] = false;
this.scene.locked['arm Tarless Feather'] = false;
this.scene.locked['leg Hollowed Leap'] = false;
this.scene.saveLocks();
this.goto('close').then(() => this.scene.alert('New mech parts:\n"ROAD RUNNER"', undefined, 0x00ff00));
>>
::shifting sands prefight
Songbird: Right. Let's do this.
>
Murrow: DIE!!!
>
<<do
this.scene.loadMech('enemy', {
"head": "Hot of Head",
"chest": "Brisk of Body",
"arms": "Swift of Swipe",
"legs": "Fleet of Foot",
"modules": [
{"name": "Cheap Plating","x": 8,"y": 0,"flipH": false,"flipV": false,"turns": 3 },
{"name": "Comfortable Cockpit","x": 7,"y": 1,"flipH": false,"flipV": false,"turns": 0 },
{"name": "Flexible Brace","x": 6,"y": 4,"flipH": false,"flipV": false,"turns": 2 },
{"name": "HSNK-L","x": 13,"y": 4,"flipH": false,"flipV": false,"turns": 0 },
{"name": "DoubleSight","x": 1,"y": 5,"flipH": false,"flipV": false,"turns": 0 },
{"name": "Standard Plating","x": 9,"y": 5,"flipH": false,"flipV": false,"turns": 0 },
{"name": "Enchanter","x": 7,"y": 8,"flipH": false,"flipV": false,"turns": 0 },
],
});
this.sfx('sfx_scan', { rate: .4, volume: .4 });
this.delay(1000).then(() => this.sfx('sfx_scan', { rate: .4, volume: .4 }));
this.delay(2000).then(() => this.sfx('sfx_scan', { rate: 1, volume: .4 }));
this.scene.screenFilter.flash(0.25, 400, this.ease.circOut);
this.titleCard(['"SONGBIRD"','VS','"FAMILY MAN"']).then(() => this.goto('close'));
>>
::shifting sands postfight
<<if this.won>>
<<do this.goto('shifting sands won')>>
<<else>>
<<do this.goto('shifting sands lost')>>
<<endif>>
::shifting sands won
Murrow: NO!!!
>
Songbird: Murrow, just go. This is between you and Rhiannon, not me.
>
Murrow: NO! YOU WILL PERISH!!
<<do this.goto('shifting sands next')>>
::shifting sands lost
<<do this.sfx('sfx_hit', { volume: 0.2, rate: 0.75 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)>>
Murrow: I'LL DESTROY YOU!!
>
Songbird: Murrow, the fight is over. You win.
>
Murrow: THAT'S NOT ENOUGH!!
<<do this.goto('shifting sands next')>>
::shifting sands next
<<do this.sfx('sfx_hit', { volume: 0.2, rate: 0.75 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)>>
Songbird: Murrow-
>
<<do this.sfx('sfx_hit', { volume: 0.3, rate: 0.8 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)>>
Songbird: MURROW!! STOP!!
>
<<do this.sfx('sfx_hit', { volume: 0.4, rate: 0.75 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)>>
<<do this.delay(1300).then(() => {this.sfx('sfx_hit', { volume: 0.3, rate: 0.9 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)})>>
<<do this.delay(1500).then(() => {this.sfx('sfx_hit', { volume: 0.5, rate: 0.8 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)})>>
<<do this.delay(1700).then(() => {this.sfx('sfx_hit', { volume: 0.6, rate: 1.2 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)})>>
Murrow: IF I DON'T GET RHIANNON, YOU DON'T GET A MECH!!
>
<<do this.sfx('sfx_hit', { volume: 0.6, rate: 0.9 }); this.scene.screenFilter.flash(0.25, 400, this.ease.circOut)>>
Songbird: YOU'RE DESTROYING IT!
>
<<do this.sfx('sfx_hit', { volume: 1, rate: 0.8 }); this.scene.screenFilter.flash(0.75, 2000, this.ease.circOut);>>
<<do this.sfx('sfx_hit', { volume: 0.5, rate: 0.5 });>>
Murrow: GOOD! You don't deserve it!
>
Songbird: Oh my god.
>
Murrow: GOODBYE, SONGBIRD! FOREVER!!
>
Songbird: Get out of here, you dick!
<<do this.showR('');this.portrait=''>>
>
Songbird: He totalled it! What am I supposed to do now?
>
Songbird: Hmm...
>
Songbird: I guess there's that old model in the workshop.
>
Songbird: That'll have to do until I can get this thing fixed.
>
Songbird: Jeez, it's going to cost a fortune to replace some of this.
>
Songbird: I didn't even do anything to him!
<<do this.next = 'cosmonaut'>>
[[>close]]
::cosmonaut prebuild
<<do this.showL('');this.portrait=''>>
<<do this.showR('');this.portrait=''>>
<<do this.titleCard(['SORTIE BEGIN:', '"COSMONAUT"']).then(() => this.goto('cosmonaut prebuild2'))>>
::cosmonaut prebuild2
Songbird: Ugh, this mech is terrible.
>
Songbird: I don't know who in their right mind would use this.
>
Judy: I'd recognize that crappy mech anywhere.
>
Judy: Garcia, you dog! I told you this was my turf now.
>
Songbird: What? I'm not Garcia! I'm Songbird!
>
Judy: Don't be stupid. Who else would pilot that piece of garbage?
>
Songbird: I don't even know how to use this thing!
>
Judy: You always were a coward, Garcia! You're not getting out of this one.
>
<<do
this.scene.locked['head Hot of Head'] = false;
this.scene.locked['chest Brisk of Body'] = false;
this.scene.locked['arm Swift of Swipe'] = false;
this.scene.locked['leg Fleet of Foot'] = false;
this.scene.locked['head Broken Away'] = false;
this.scene.locked['chest Crashed Out'] = false;
this.scene.locked['arm Made Escape'] = false;
this.scene.locked['leg Devilled Run'] = false;
this.scene.saveLocks();
this.oldLocked = this.scene.locked;
this.scene.locked = {};
[].concat(this.scene.pieces.heads, this.scene.pieces.chests, this.scene.pieces.arms, this.scene.pieces.legs).forEach(i => {
this.scene.locked[i] = true;
});
this.scene.locked['head Broken Away'] = false;
this.scene.locked['chest Crashed Out'] = false;
this.scene.locked['arm Made Escape'] = false;
this.scene.locked['leg Devilled Run'] = false;
this.scene.loadMech('player', {
"head": "Broken Away",
"chest": "Crashed Out",
"arms": "Made Escape",
"legs": "Devilled Run",
"modules": [],
});
this.goto('close').then(() => this.scene.alert('Mech parts locked:\n"TEMPORARY ONE"', undefined, 0xff0000));
>>
::cosmonaut prefight
Songbird: Okay, I guess I don't have a choice. Time to fight.
>
Judy: I'm going to crush you, Garcia!
>
<<do
this.scene.loadMech('enemy', {
"head": "The Crooked",
"chest": "The Beaten",
"arms": "The Spoken",
"legs": "The Put Down",
"modules": [
{ "name": "Enchanter","x": 8,"y": 3,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "Cheap Plating","x": 11,"y": 8,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "Comfortable Cockpit","x": 6,"y": 9,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "HSNK-G","x": 8,"y": 12,"flipH": false,"flipV": false,"turns": 1 },
{ "name": "Enchanter","x": 5,"y": 17,"flipH": false,"flipV": false,"turns": 2 },
{ "name": "D.MOD-MKII","x": 12,"y": 17,"flipH": false,"flipV": false,"turns": 3 },
],
});
this.sfx('sfx_scan', { rate: .4, volume: .4 });
this.delay(1000).then(() => this.sfx('sfx_scan', { rate: .4, volume: .4 }));
this.delay(2000).then(() => this.sfx('sfx_scan', { rate: 1, volume: .4 }));
this.scene.screenFilter.flash(0.25, 400, this.ease.circOut);
this.titleCard(['"TEMPORARY ONE"','VS','"PURPLE DANCER"']).then(() => this.goto('close'));
>>
::cosmonaut postfight
<<if this.won>>
<<do this.goto('cosmonaut won')>>
<<else>>
<<do this.goto('cosmonaut lost')>>
<<endif>>
::cosmonaut won
Judy: I lost? There's no way! You've never won against me before!
>
Songbird: That's because I'm NOT GARCIA!
>
Songbird: I'm Songbird! My mech got destroyed, I just pulled this out of storage to try it.
>
Judy: I... guess that makes sense.
>
Judy: Sorry. She must have left it here here when she skipped town.
>
Judy: I guess Garcia wouldn't be stupid enough to come back after... well. What she did.
>
Judy: She's my ex. It's a long story.
<<do this.goto('cosmonaut next')>>
::cosmonaut lost
Judy: You'd better run now, Garcia, before you lose more than your dignity.
>
Songbird: Hold on! I'm coming out of the cockpit. I'm not Garcia!
>
Songbird: See?
>
Judy: ...Oh. Uh, sorry. That was Garcia's mech, I just figured...
>
Songbird: My mech just got totalled, and this is the only mech we have in storage. I just thought I'd try it out.
>
Judy: Well, that used to be my ex's mech. She was a real piece of work.
>
Judy: I guess she left it here when she skipped town.
<<do this.goto('cosmonaut next')>>
::cosmonaut next
Judy: I'm Judy, by the way.
>
Songbird: I'm Songbird.
>
Judy: Sorry about all of this.
>
Songbird: It's fine. You're not the first person to fight me over a misunderstanding today.
>
Judy: Really? What happened?
>
Songbird: Well, I was just training, when-
>
Sara: Who the hell are you? And what are you doing to my sister?!
<<do this.next = 'relax'>>
[[>close]]
::relax prebuild
<<do this.titleCard(['SORTIE BEGIN:', '"RELAX"']).then(() => this.goto('relax prebuild2'))>>
::relax prebuild2
Judy: Sara! Chill! It's not Garcia.
>
Sara: I don't care who you are. Stop picking on my little sister.
>
Songbird: We just had a short duel! It's no big deal.
>
Sara: That's what they all say.
>
Judy: Sara, it's not like that.
>
Sara: You gotta stop letting these losers take advantage of you, Judy!
>
Sara: But until you do, I'll pulverize every last one of them!!
>
Sara: Get ready, loser! You just picked a fight with the Sisters of the Moon!!
>
Songbird: Ugh, here we go again...
>
<<do
this.scene.locked = this.oldLocked;
this.scene.locked['head The Crooked'] = false;
this.scene.locked['chest The Beaten'] = false;
this.scene.locked['arm The Spoken'] = false;
this.scene.locked['leg The Put Down'] = false;
this.scene.saveLocks();
this.goto('close').then(() => this.scene.alert('Mech parts restored.\nNew mech parts:\n"FAMILY MAN", "PURPLE DANCER"', undefined, 0x00ff00));
>>
::relax prefight
Songbird: Alright, let's just get this over with.
>
Sara: I'll get YOU over with!!
>
<<do
this.scene.loadMech('enemy', {
"head": "The Blue Face",
"chest": "The Blackboiled Heart",
"arms": "The White Knuckles",
"legs": "The Dipped Toes",
"modules": [
{ "name": "Superior Plating","x": 7,"y": 1,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "Aerial Array","x": 7,"y": 4,"flipH": false,"flipV": false,"turns": 0 },
{ "name": "HSNK-L","x": 14,"y": 10,"flipH": false,"flipV": false,"turns": 2 },
{ "name": "Compact Cockpit","x": 8,"y": 15,"flipH": false,"flipV": false,"turns": 0 },