forked from historicalsource/total-carnage
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRACKUP.ASM
5110 lines (4253 loc) · 90.7 KB
/
RACKUP.ASM
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
**************************************************************
*
* Software: Shawn Liptak
* Initiated: June 6,1991
*
* Modified: !
*
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 1/7/92 14:02
**************************************************************
.FILE "RACKUP.ASM"
.TITLE "TOTAL CARNAGE GAME PROGRAM"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
.include "mproc.equ"
.include "disp.equ"
.include "sys.inc"
.include "game.equ"
.include "imgtbl.glo"
.include "audit.equ"
.include "shawn.hdr" ;My macros
.include "rackup.tbl"
;sound headers used
.ref GLSEXP,NOWAY,SETDWN,TUNE3,TUNE2,STATSND
CVSDOFF .word 0F0F0H,10,0807DH,0 ;SPEECH OFF
TUNE4 .word 0f3feH,10,08007H,0 ;Rackup tune
racksup .word 0f280H,1,080b3H,0 ;Rackup bonus sweep up
rackoff .word 0fa81H,1,080a7H,0 ;Rackup bonus off
kilfgnd .word 0f000H,1,0807fH,0 ;Kill foregnd snds
rackp1p .word 0fa80H,1,080b4H,0 ;Rackup P1 gets 1000 pts
rackp2p .word 0fa80H,1,080b5H,0 ;^ P2
stats1 .word 0f280H,1,08100H,0 ;Rackup stat line snd
stats2 .word 0f280H,1,08101H,0 ;^
stats3 .word 0f280H,1,08102H,0 ;^
stats4 .word 0f280H,1,08103H,0 ;^
stats5 .word 0f280H,1,08104H,0 ;^
stats6 .word 0f280H,1,08105H,0 ;^
stats7 .word 0f280H,1,08106H,0 ;^
stats8 .word 0f280H,1,08107H,0 ;^
stats9 .word 0f280H,1,08108H,0 ;^
stats10 .word 0f280H,1,08109H,0 ;^
stats11 .word 0f280H,1,0810aH,0 ;^
stats12 .word 0f280H,1,0810bH,0 ;^
txtssnd .word 0f3f7H,8,080b1H,0 ;Text shrink
shout .word 0f1a0H,60,080feH,0 ;Rackup victory shout
rackgun .word 0fca0H,4,08030H,0 ;Player shoots gun
gigle1 .word 0f9a0H,60,080f3H,0 ;Rackup winner laughs
ahkb1 .word 0f9a0H,10,080ebH,0 ;Akhboob speech
ahkb2 .word 0f9a0H,10,080ecH,0 ;^
ahkb3 .word 0f9a0H,10,080edH,0 ;^
ahkbsta .word 0f9a0H,10,080eeH,0 ;^ start angry
ahkbang .word 0f9a0H,10,080efH,0 ;^ angry
DOLLAR .WORD 0F9F7H,050H,0814EH,0 ;BUY 4 DOLLAR
;CITIZEN .WORD 0F9F7H,050H,08155H,0 ;PEACEFUL CITIZEN
yousuck .word 0f9a0H,10,080c5H,0 ;You suck at this game!
fisthit .word 0fca0H,10,0803cH,0 ;Ahkboob hits desk
ermtune .word 0f3f0H,10,08004H,0 ;Electrocution tune
fshock .word 0f540H,20,080bbH,0 ;Electric chair shocks
fburn .word 0f048H,30,080d7H,0 ;^ burn
fpain1 .word 0f965H,20,080f6H,0 ;Player in pain
fpain2 .word 0f160H,20,080f7H,0 ;^
fpain3 .word 0f160H,20,080fdH,0 ;^
fskullb .word 0f460H,20,08040H,0 ;Skull bounce
fryexp .word 0fc50H,6,0803eH,0 ;Fry explosion
fryexp2 .word 0fd50H,8,080d9H,0 ;^
totcarn .word 0f980H,30,080cfH,0 ;Total carnage!
gluck .word 0f1f7H,040H,080e5H,0 ;"Good luck"
;TURMELL
TXTSND1 .WORD 0F3F7H,08H,080AEH,0
;symbols externally defined
.ref anim_script,anim_kilslp,animscnt,anim_killall,anim_wait
.ref COLTAB,CYCLE_TABLE,STATIC_COVER,PLYRPRCS,INTRO,AIRSCRM
.ref RACKBMOD,RANDOM,GPALOBJ,PALSET,FINDPAL,GETFPAL,PCNT,WAVE
.ref IRQSKYE,ERASE_TXT,HEXTOASC,FRANIM,HSTGLST,HALT,PLYROBJS
.ref CRMP,BCDBIN,BINBCD
.ref WSPEED,STRT_S,STATUS2,STOPPLYR
.ref COLCYC,BGND_UD1,BAKMODS,WNDWON,WNDWOFF,NO_START,WRLD
.ref KILBGND
.ref STRCNRMO,STRCNRMO_1,STRCNRM,LOWZ
.ref RD15FONT,RD7FONT,RD8FONT
.ref P1DATA,P2DATA,HSTGS_LOST
.IF DEBUG
.ref SLDEBUG
.ENDIF
.ref timerp1,timerp2
.ref PCOUNT,TAUNTOUT
.ref RNDRNG,RNDRNG0
.ref ELECRM1BMOD,CHAIR2BMOD
.ref BLUEEXP,FIREEXP,XBOOM2,BOOM3
.ref FRANIMQ
.ref TNT_TYPE,SHAKER
.ref STRT_CRM,CYCSPECT
.ref NOCAN2,START,YESPWRD
.ref GET_ADJ,aud_addnumplyrs,AUD
.ref DELAYALL,DELOFFBOTL,ZERO_BITS
;symbols defined in this file
.def frypbg_t,DEATHS
;uninitialized ram definitions
.bss cycmem ,5*16*2 ;Allocate 2 x color area in ram
.bss statspal ,31*16 ;Statistics palette
.bss boanimdeath1 ,16 ;CntDn for bonus anim procs to die
.bss boanimdeath2 ,16 ;^
.bss scoredie ,16 ;00H=Score processes die
.bss hitpercent1 ,16 ;Player1 %
.bss hitpercent2 ,16 ;Player2 %
.bss hitsmin1 ,16 ;Player1 hits per minute
.bss hitsmin2 ,16 ;Player2 ^
.bss score1old ,32 ;P1 score before bonuses
.bss score2old ,32 ;P2 ^
.bss bonusstat ,16 ;Status of bonus
.bss fryp1palmem ,65*16 ;P1 mem for pallette pulse
.bss fryp2palmem ,65*16 ;P2 ^
.bss DEATHS ,16 ;DEATH STATUS 0,1,2, OR 3 WHEN DONE
.text
********************************
* Do dictator taunt 1
SUBR DO_MAN
SLEEPK 10
clr a11 ;1st taunt
jruc dictt
********************************
* Print incoming trans text
SUBR INCOM_TRAN ;A1=Rackup # (0-2)
PUSH a1
move a1,a2
movi incom_st,a0 ;*Text
subk 1,a2
jrlt it20 ;0?
jreq it10 ;1?
movi [0,0fcbdH],a1 ;Fix X for purple guy eating
jruc it20
it10 movi [0,-40],a1 ;Fix X
it20 clr a2
move a2,@WRLD ;Do world adj
callr prt_xy
PULL A1
move a1,a2
movi incom_st2,a0 ;*Text
subk 1,a2
jrlt Mit20 ;0?
jreq Mit10 ;1?
movi [0,0fcbdH],a1 ;Fix X for purple guy eating
jruc Mit20
Mit10 movi [0,-40],a1 ;Fix X
Mit20 clr a2
move a2,@WRLD ;Do world adj
callr prt_xy
RETS
incom_st
XYTXT PRTF15,652,55,1,"INCOMING TRANSMISSION"
.word -1
;TURMELL
incom_st2
XYTXT 0,652,45,1,"UNITED NATIONS"
.word -1
********************************
* Rack it up!
SUBR DO_RACKUP
calla STOPOBJS ;Keep all objs still
movk 1,a0 ;Delay start of a 2nd plyr flag
move a0,@NO_START
move a0,@INTRO
clr a0
move a0,@IRQSKYE
movi TUNE4,a0
calla ONESND
SLEEP 96
move @PLYROBJS,a9,L
jrz rp10
calla STOPPLYR
rp10 move @PLYROBJS+32,a9,L
jrz rp12
calla STOPPLYR
rp12
clr a0
move a0,@HALT
;>Make tiles
movk 8*4,a1 ;# Panels
movi -4*025800H+012c00H,a2 ;Velocity
movk 10,a3
movi 200,a5
rp20 movi panel_t,a14
calla GPALOBJ ;Get palette & obj
calla STFOBJ ;Stuff object data
move a2,*a0(OXVEL),L ;Set XVEL
move a3,*a0(OYPOS) ;New Y
addi 46,a3
move a5,*a0(OZPOS)
movk 3,a4
and a1,a4
subk 1,a4
jrne rp30
addi 025800H,a2
movk 10,a3
movk 1,a4
xor a4,a5 ;Toggle 0 Bit
rp30 calla ADJSTWTL ;Adjust into world
calla INSOBJ ;Insert obj
dsj a1,rp20
SLEEPK 20
calla STOPOBJS ;Stop tiles
callr scores_bcdbin
move @P1DATA+THITS,a1 ;0CaHlc P1 % & hitsmin
move a1,a3
movi 100,a0
mpyu a0,a1
move @P1DATA+TSHOTS,a2
divu a2,a1
move a1,@hitpercent1
movi 60,a0
mpyu a0,a3
move @timerp1,a2
divu a2,a3
move a3,@hitsmin1
move @P2DATA+THITS,a1 ;0CaHlc P2 % & hitsmin
move a1,a3
movi 100,a0
mpyu a0,a1
move @P2DATA+TSHOTS,a2
divu a2,a1
move a1,@hitpercent2
movi 60,a0
mpyu a0,a3
move @timerp2,a2
divu a2,a3
move a3,@hitsmin2
movi [2,30],a8 ;Color 2, 30 colors
movi SCOREPAL,a9
movi COLTAB,a10 ;Color table
movk 7,a11 ;Rate of cycle
CREATE CYCPID,CYCLE_TABLE
movi [1,1],a8
movi SCOREPAL,a9
movi statscolor_t,a10
movk 3,a11
CREATE CYCPID,CYCLE_TABLE
movi [32,2],a8
movi SCOREPAL,a9
movi statscolor_t,a10
movk 5,a11
CREATE CYCPID,CYCLE_TABLE
CREATE0 score_prt
SLEEPK 1
CREATE0 scorebonus_prt
JSRP bonus_main
JSRP player_showstats
movk 1,a0
move a0,@scoredie ;Kill score processes
SLEEPK 8
movk 5,a11
JSRP text_shrink
JSRP player_bonuswin ;Show bonus winner!
movi 60*7,a0 ;8
callr sleep_var
callr scores_binbcd
movi CYCPID,a0
calla KIL1C
debug movk 1,a11
CREATE0 STATIC_COVER
movi TUNE3,a0 ;Turn on dictator taunt music
calla ONESND
SLEEPK 25
movi SCOREPAL,a0 ;*Color
clr a1 ;Palette 0, Color 0
move *a0+,a2 ;# Colors
calla PALSET
movi DESRTPL,a0 ;*Color
move *a0,a2 ;# Colors
calla GETFPAL
srl 8,a0
sll 8,a0
move a0,a1
movi DESRTPL+16,a0 ;*Color
calla PALSET
movi 2*32*32+2*32+2,a0
move a0,@IRQSKYE ;Dark grey background behind dictator
calla ERASE_TXT
calla anim_killall
move @WAVE,a0
cmpi 33,a0
jrge dictx
calla STRT_CRM ;Start headquarters cycle
movk 1,a11 ;2nd taunt
dictt movi engtran_s,a8
movi 40,a9
CREATE MADPID,prt_inrackwin
move a11,a0
JSRP dictator_taunt
dictx movk 3,a0
move a0,@TAUNTOUT ;Taunt over
DIE
panel_t .long [177,0],[0,0],RACKBLK ;x,y,img name
.word 200,DMAWNZ+M_NOCOLL,CLSDEAD ;zpos,oflags,oid
.long 0,0 ;xvel,yvel
statscolor_t
COLORW 16,0,0
COLORW 20,00,08, 24,00,12, 28,00,16, 31,00,20
COLORW 28,00,24, 24,00,28, 20,00,31, 16,00,28
COLORW 08,20,00, 16,24,00, 24,28,00, 31,31,00
COLORW 20,28,00, 12,24,00, 08,20,00, 02,16,00
COLORW 00,08,20, 00,16,24, 00,24,28, 00,31,31
COLORW 00,20,28, 00,10,24, 00,00,20, 00,00,16
COLORW 16,0,0
.word -1
engtran_s
.byte "ENGLISH TRANSLATION",0
.even
********************************
* Print XY sting set if player in game
* Trashes A2-A6
SUBRP printifp_xy ;A0=*Plyr1 string, A1=*Plyr2 string
PUSH a8
move a1,a8
move @STATUS2,a1
btst 0,a1
jrz pipx10
calla prt0_xy ;P1
pipx10 move @STATUS2,a1
btst 1,a1
jrz pipx20
move a8,a0
calla prt0_xy ;P2
pipx20 PULL a8
rets
********************************
* Print an XY string set
* A0=*XY text
* A1=Y:X offset
* Trashes A1-A5
* Rets: A0=*Next XY or End
SUBR prt0_xy
clr a1 ;No offset
SUBRP prt_xy
PUSH a6,a7,a8,a9,a10,a11
move a0,a8 ;A8=*Txt data
move a1,a3 ;A3=Y:X offset
prtxy5 move *a8+,a1 ;Mode word
move *a8+,a9,L ;Scrn Y:X
addxy a3,a9 ;+Offset
btst PRTOBJB,a1
jrnz pxy300
movk [0,1],a10 ;Char Y:X spacing
movi RD7FONT,a11 ;*Font
btst PRTF15B,a1
jrz prtxy10
movi RD15FONT,a11 ;*Font
prtxy10 move *a8+,a6 ;Color
move a6,a0
sll 8,a6
or a0,a6
btst PRTDECB,a1
jrz prtxy30
move *a8+,a2,L ;Binary mode
PUSH a8
move *a2,a8 ;Get word
btst PRTLB,a1
jrz prtxy20
move *a2,a8,L ;Get long
prtxy20 calla HEXTOASC
jruc prtxy40
prtxy30 btst PRTBCDB,a1
jruc prtxy70
; jrz prtxy70
; move *a8+,a0,L ;BCD mode
; move *a0,a0,L
; callr bcdtoasc
; PUSH a8
; move a0,a8
prtxy40 clr a0
JSRP STRCNRMO
PULL a8
jruc pxy80
prtxy70 ;>String mode
btst PRTF8B,a1
jrz prtxy74
movi BLLNP5,a0
calla FINDPAL
move a0,a6
movi RD8FONT,a11
clr a0
JSRP STRCNRMO_1 ;Full color font
jruc prtxy77
prtxy74 clr a0 ;Sleep time
JSRP STRCNRMO ;Print string, objects
prtxy77 addk 8,a8 ;Round up
srl 4,a8
sll 4,a8
pxy80 move *a8,a0 ;-=End
jrge prtxy5
move a8,a0
PULL a6,a7,a8,a9,a10,a11
rets
pxy300 move a3,a10 ;>Print obj
move *a8+,a3 ;Z
move *a8+,a2,L ;*Img
move *a2,a1 ;Get ISIZEX
srl 1,a1 ;/2
move a9,a0
sub a1,a0 ;Center
sll 16,a0 ;X
clr a1
movy a9,a1 ;Y
movi DMAWNZ+M_NOCOLL,a4
movi CLSNEUT|TYPTEXT|SUBTXT,a5
clr a6
clr a7
move a8,a9
calla BEGINOBJ
move a9,a8
move a10,a3
jruc pxy80
********************************
* Print an XY string set number with no objects
* Trashes A2-A7
NOTINUSE
SUBRP prtnobj_xy ;A0=*XY Text
PUSH a8,a9,a10,a11
move a0,a8
pdnox5 movk [0,1],a10 ;Char y,x spacing
movi RD7FONT,a11 ;*Font
move *a8+,a1 ;Mode word
btst PRTF15B,a1
jrz pdnox10
movi RD15FONT,a11 ;*Font
pdnox10 move *a8+,a9,L ;Scrn y/x
move *a8+,a6 ;Color
move a6,a2
sll 8,a6
or a2,a6
btst PRTDECB,a1
jrz pdnoxx
move *a8+,a2,L ;Binary mode
move *a2,a0 ;Get word
btst PRTLB,a1
jrz pdnox20
move *a2,a0,L ;Get long
pdnox20 PUSH a8
move a0,a8
calla HEXTOASC
clr a0
JSRP STRCNRM
PULL a8
move *a8,a0 ;-=End
jrge pdnox5
pdnoxx PULL a8,a9,a10,a11
rets
.endif
********************************
* Vertically shrink text
* Trashes A0-A10
SUBRP text_shrink ;A11=Sleep time
movi txtssnd,a0
calla ONESND
movk 8,a10 ;Size for x2 shrinkage
txs20 move a11,a0
calla PRCSLP
clr a8
move @OBJLST,a9,L ;0FHind and shrink
txs40 move *a9(OID),a0
cmpi CLSNEUT|TYPTEXT|SUBTXT,a0
jrne txs70
move *a9(OSIZEY),a0
subk 1,a0 ;Shrink
jrz txs70 ;Min of 1
cmp a10,a0
jrlt txs50
subk 1,a0 ;Shrink again
cmpi 15,a0
jrlt txs50
subk 5,a0 ;Shrink x7
txs50 move a0,*a9(OSIZEY)
movk 1,a8
txs70 move *a9,a9,L
jrnz txs40
subk 1,a10 ;Lower x2 min
move a8,a8
jrnz txs20
calla ERASE_TXT
RETP
********************************
* Delete text at a ZPOS
* Trashes A0-A3
SUBRP text_delz ;A0=ZPOS
move a0,a2
move @OBJLST,a0,L
tdz40 move *a0(OID),a1
cmpi CLSNEUT|TYPTEXT|SUBTXT,a1
jrne tdz70
move *a0(OZPOS),a1
cmp a2,a1
jrne tdz70
move *a0,a3,L ;Get * next
calla DELOBJ
move a3,a0
jruc tdz80
tdz70 move *a0,a0,L
tdz80 jrnz tdz40 ;Continue?
rets
********************************
* Delete text in a Y range
* Trashes A0-A3
SUBRP text_delyrng ;A0=Lower Y, A1=Upper Y
move @WORLDTLY+16,a2
add a2,a1 ;A1=World adjusted upper Y
add a0,a2 ;A2=^ lower Y
move @OBJLST,a0,L
tdy40 move *a0(OID),a3
cmpi CLSNEUT|TYPTEXT|SUBTXT,a3
jrne tdy70
move *a0(OYPOS),a3
cmp a2,a3
jrlt tdy70
cmp a1,a3
jrgt tdy70
move *a0,a3,L ;Get * next
calla DELOBJ
move a3,a0
jruc tdy80
tdy70 move *a0,a0,L
tdy80 jrnz tdy40 ;Continue?
rets
********************************
* Print text in rackup window (Process)
SUBR prt_inrackwin ;A8=*Text, A9=#Loops
move a9,*a13(PDATA)
SLEEPK 30
movk 1,a10 ;Y:X spacing
movi RD7FONT,a11 ;font table
pirw10 SLEEPK 10
movi -210,a0
move a0,@LOWZ
movi [187,198],a9 ;Y:X
movi 02525H,a6
clr a0
PUSH a8
JSRP STRCNRMO
PULL a8
SLEEPK 10
movi 20000-210,a0
callr text_delz
move *a13(PDATA),a0
subk 1,a0
move a0,*a13(PDATA)
jrgt pirw10
DIE
********************************
* Convert scores to binary
SUBRP scores_bcdbin
move @P1DATA+PSCORE,a0,L
calla BCDBIN
move a0,@P1DATA+PSCORE,L
move a0,@score1old,L
move @P2DATA+PSCORE,a0,L
calla BCDBIN
move a0,@P2DATA+PSCORE,L
move a0,@score2old,L
rets
********************************
* Convert scores to BCD
SUBRP scores_binbcd
move @P1DATA+PSCORE,a0,L
calla BINBCD
move a0,@P1DATA+PSCORE,L
move @P2DATA+PSCORE,a0,L
calla BINBCD
move a0,@P2DATA+PSCORE,L
rets
********************************
* Print players score (Process)
LONGPD scorecopy1 ,0 ;Last P1 score
LONGPD scorecopy2 ,2 ;^ P2
SUBRP score_prt
clr a0
move a0,@scoredie
subk 1,a0
move a0,*a13(scorecopy1),L ;-1
move a0,*a13(scorecopy2),L
scp20 move @STATUS2,a8
btst 0,a8
jrz scp50
move *a13(scorecopy1),a0,L
move @P1DATA+PSCORE,a1,L
cmp a0,a1
jreq scp50
move a1,*a13(scorecopy1),L
movi 305,a0
callr text_delz
movi 305-20000,a0
move a0,@LOWZ
movi score1_st,a0
calla prt0_xy ;P1
scp50 SLEEPK 3
btst 1,a8
jrz scp80
move *a13(scorecopy2),a0,L
move @P2DATA+PSCORE,a1,L
cmp a0,a1
jreq scp80
move a1,*a13(scorecopy2),L
movi 306,a0
callr text_delz
movi 306-20000,a0
move a0,@LOWZ
movi score2_st,a0
calla prt0_xy ;P2
scp80 SLEEPK 3
move @scoredie,a0
jrle scp20
DIE
score1_st
XYNUM PRTDEC+PRTL+PRTF15,85,16,32,P1DATA+PSCORE
.word -1
score2_st
XYNUM PRTDEC+PRTL+PRTF15,315,16,33,P2DATA+PSCORE
.word -1
********************************
* Print players bonus score (Process)
SUBRP scorebonus_prt
movi -1,a0
move a0,*a13(scorecopy1),L
move a0,*a13(scorecopy2),L
movk [0,1],a10 ;Spacing
movi RD7FONT,a11
scbp20 move @STATUS2,a2
btst 0,a2
jrz scbp50
move @P1DATA+PSCORE,a8,L ;0CaHlc bonus score
move *a13(scorecopy1),a0,L
cmp a0,a8
jreq scbp50
move a8,*a13(scorecopy1),L
movi 300,a0
callr text_delz
move @score1old,a0,L
movi 300-20000,a1
movi 02020H,a6
movi [35,85],a9 ;Scrn y/x
callr scoreb_prt2
scbp50 SLEEPK 3
move @STATUS2,a2
btst 1,a2
jrz scbp80
move @P2DATA+PSCORE,a8,L ;0CaHlc bonus score
move *a13(scorecopy2),a0,L
cmp a0,a8
jreq scbp80
move a8,*a13(scorecopy2),L
movi 301,a0
callr text_delz
move @score2old,a0,L
movi 301-20000,a1
movi 02121H,a6
movi [35,315],a9 ;Scrn y/x
callr scoreb_prt2
scbp80 SLEEPK 3
move @scoredie,a0
jrle scbp20
DIE
scoreb_prt2
move a1,@LOWZ
sub a0,a8
calla HEXTOASC
clr a0 ;No sleep
JSRP STRCNRMO ;Print
rets
********************************
* Variable sleep (call it)
;TURMELL MADE PUBLIC
SUBR sleep_var ;A0=Sleep time
PUSHP a8,a9
PULL a8
move a0,a9
sv20 SLEEPK 1
move @SWITCH+16,a1 ;Chk for impatience
not a1
andi 024H,a1
jrnz sv50
dsj a9,sv20
sv50 move a8,a0
PULLP a8,a9
jump a0
********************************
* Give collection bonus
.bss bonuscnt ,32 ;P1/P2 item cnt (word*2)
SUBRP bonus_main
; movk 3,a0
; move a0,@STATUS ;DEBUG
;
; movi 200,a0 ;0DEBHUG
; calla RNDRNG0
; move a0,@P1DATA+TFLAGS
; movi 200,a0
; calla RNDRNG0
; move a0,@P2DATA+TFLAGS
;
; movi 200,a0
; calla RNDRNG0
; move a0,@P1DATA+CASHCNT
; movi 200,a0
; calla RNDRNG0
; move a0,@P2DATA+CASHCNT
;
; movi 200,a0
; calla RNDRNG0
; move a0,@P1DATA+THSTGS
; movi 200,a0
; calla RNDRNG0
; move a0,@P2DATA+THSTGS
movi collectb_s,a8
movi 100,a9
CREATE0 prt_inrackwin
move a0,-*a12,L
movi -1,a0
move a0,@bonusstat
movi bonus_st,a0
calla prt0_xy
move @STATUS2,a6
cmpi 3,a6
jreq bm15 ;Two plyrs?
movi 115,a1
btst 0,a6
jrz bm10 ;P1 off?
movi 285,a1
bm10 movi joinin_st,a0
calla prt_xy
bm15 btst 0,a6
jrz bm20
movi bonusp1_as,a8
CREATE ANIMPID,anim_script ;P1
bm20 btst 1,a6
jrz bm40
movi bonusp2_as,a8
CREATE ANIMPID2,anim_script ;P2
bm40
movi bonus1p1_st,a0
movi bonus1p2_st,a1
movi 210,a2
movi [70,116],a9 ;YX
movi 60,a10
movi TFLAGS,a11
JSRP bonus_cntup ;Flags
clr a0
move a0,@bonusstat
movi bonus2p1_st,a0
movi bonus2p2_st,a1
movi 211,a2
movi [108,116],a9 ;YX
movi 40,a10
movi CASHCNT,a11
JSRP bonus_cntup ;Crystals
movk 1,a0
move a0,@bonusstat
movi bonus3p1_st,a0
movi bonus3p2_st,a1
movi 212,a2
movi [146,116],a9 ;YX
movi 100,a10
movi THSTGS,a11
JSRP bonus_cntup ;Hostages
movi 60*2,a0 ;4
callr sleep_var
move *a12+,a0,L
clr a1
move a1,*a0(PDATA) ;Stop window text
movk 2,a0
move a0,@bonusstat
movi 55,a0
movi 200,a1
callr text_delyrng
SLEEPK 30
RETP
collectb_s
.byte "COLLECTION BONUS",0
.even
joinin_st
XYTXT PRTF15,0,104,3,"HELP!"
XYTXT PRTF15,0,86,3,"JOIN IN!"
; XYTXT PRTF15,0,86,3,"JOIN IN"
; XYTXT PRTF15,0,104,3,"SCUM!"
.word -1
SUBRP bonus_cntup ;A0=*P1_st, A1=*P2_st, A2=Z
;A9=Base YX, A10=Pts each, A11=Plyr data offset
move @STATUS2,a3
subk 3,a3
jrnz bcu10
sll 1,a10 ;*2 pts for two players
bcu10 PUSH a2
callr printifp_xy
movi bonuscnt,a8
CREATE0 bonus_prtitem ;Display
move a0,-*a12,L
PULL a2
move a2,*a0(bonusz)
clr a0
move a0,*a8,L ;Cnt=0
movi racksup,a0
calla ONESND
bcu20 move @SWITCH+16,a1 ;Chk for impatience
not a1
andi 024H,a1
jrnz bcu25
SLEEPK 1
bcu25 move @STATUS2,a2
clr a3
btst 0,a2
jrz bcu30
move *a8,a0
movi P1DATA,a1
add a11,a1
move *a1,a1
cmp a1,a0
jrge bcu30 ;Count maxed?
addk 1,a0
move a0,*a8
movk 1,a3
move @P1DATA+PSCORE,a0,L