-
Notifications
You must be signed in to change notification settings - Fork 1
/
pastebin.inc
1950 lines (1811 loc) · 43.7 KB
/
pastebin.inc
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
;2018-01-03:
update_game_object:
; Move and draw (add here...) game object. Only if active.
; IX = Pointer to game object.
; IY = Pointer to parameter string.
;
ld a,(ix+game_object.state)
cp GAME_OBJECT_ACTIVE
ret nz
;
ld a,(iy+0) ; Make const for offset!
cp TRUE ; TODO: DRY-fix vertical/horiz. handlers
call z,handle_active_game_objects_in_horizontal_zone
;
ld a,(iy+5)
cp TRUE ; TODO: DRY-fix vertical/horiz. handlers
call z,handle_active_game_objects_in_vertical_zone
;
call move_game_object
call draw_game_object
call add_game_object_to_collision_table
ret
; 2017-12-19
subtract_from_score_old:
; Subtract a number passed in B from the digit specified in A. Update the
; other digits in the score struct as necessary. Prevents score from going
; below zero.
; Entry: A = Digit to subtract from.
; B = Number to subtract (non-ascii!).
; HL = Pointer to score struct.
; Exit:
; Uses: AF, BC, DE, HL, IX
;
push hl
pop ix ; Save score pointer in IX
ld d,0
ld e,score_struct.ten_thousands
add hl,de ; HL now points to ten thousands.
ld c,(hl) ; Store this (for underflow test).
push ix ; Retrieve original pointer.
pop hl
ld d,0
add a,score_struct.ten_thousands
ld e,a
add hl,de ; Point HL to digit to subtract from.
ld a,(hl) ; Get current value of digit.
sub b ; Subtract the required number.
ld (hl),a ; Store it back into the digit.
cp ASCII_ZERO ; Is this digit now below zero?
jp nc,+ ;
add a,10 ; Yes? - 'borrow' from next digit.
ld (hl),a ; Save in this digit.
-:
; Out of bounds test: ; Are we pointing outside the score struct now?
;push ix ; Get the original pointer.
;pop de ; Store in DE.
;push hl ; Save pointer to current digit.
;inc hl ; Increment pointer.
;sbc hl,de ; Are we at the first digit now?
;pop hl ; Retrieve pointer to digit.
;jp z,+ ; Skip forward if HL = DE.
; ; 'Borrow' from next digit (1>10>100>1.000>10.000).
dec hl ; Point to this digit.
dec (hl) ; Decrement it (perform the borrow).
ld a,(hl) ; Is this digit now below zero?
cp ASCII_ZERO
jp nc,+ ; If not, then proceed to finish.
add a,10 ; Else, perform another borrow...
ld (hl),a
jp -
+:
push ix
pop hl
; Underflow test - prevent score from going below zero to 9????.
ld d,0
ld e,score_struct.ten_thousands
add hl,de
ld a,(hl)
; ; Test 1: Is the ten thousands
cp ASCII_ZERO+9 ; digit now "9"?
ret nz ; Yes? - proceed to test 2.
ld a,ASCII_ZERO ; Test 2: Was this digit "0"
cp c ; before subtraction?
ret nz ; Yes? - reset score.
ex de,hl ; Switch to destination (DE).
ld hl,reset_score_data ; Point to reset data.
ld bc,SCORE_DIGITS_TOTAL ; Number of digits to reset.
ldir ; Do it.
ret
;2017-12-10
;
; Preset peak score for testing.
;.ifdef DEVELOPER_MODE
; ld hl,peak_score_test_data
; ld de,peak_score
; call copy_score_and_increment_pointers
; jp +
; peak_score_test_data:
; .asc "01900"
; .asc " "
; +:
;.endif
;2017-10-20
test_rebuild_hiscore_table_against_fine_score:
ld hl,fine_score_init
ld de,player_score
call copy_score_and_increment_pointers
;
ld hl,hiscore_init
ld de,hiscore_item.1
call copy_hiscore_table
;
ld hl,player_score
call rebuild_hiscore_table
;
ld ix,hiscore_item.3
ld a,(ix+score_struct.ones)
assertEqualsA ASCII_ZERO+3,"Rebuild table (Fine) failed (1)"
ld ix,hiscore_item.1
ld a,(ix+score_struct.ones)
assertEqualsA ASCII_ZERO+5,"Rebuild table (Fine) failed (2)"
ret
call test_copy_score
call test_init_hiscore
call test_compare_scores
call test_rebuild_hiscore_table_against_multe_score
call test_rebuild_hiscore_table_against_felix_score
test_copy_score:
ld hl,score_1_init
ld de,score_1
call copy_score_and_increment_pointers
ld ix,score_1
ld a,(ix+score_struct.ones)
assertEqualsA ASCII_ONE,"copy_score failed"
ret
test_init_hiscore:
ld hl,hiscore_init
ld de,hiscore_item
call copy_hiscore_table
;
ld ix,hiscore_item.1
ld a,(ix+score_struct.ones)
assertEqualsA ASCII_ZERO+4,"init_hiscore failed (1)"
;
ld ix,hiscore_item.3
ld a,(ix+score_struct.ones)
assertEqualsA ASCII_ZERO+2,"init_hiscore failed (2)"
ret
;
test_compare_scores:
ld hl,felix_score_init
ld de,score_1
call copy_score_and_increment_pointers
;
ld hl,hiscore_init
ld de,hiscore_item
call copy_hiscore_table
;
ld iy,score_1
ld ix,hiscore_item.3
call compare_scores
assertCarrySet "Compare scores failed"
ret
;
test_rebuild_hiscore_table_against_multe_score:
ld hl,multe_score_init
ld de,player_score
call copy_score_and_increment_pointers
;
ld hl,hiscore_init
ld de,hiscore_item
call copy_hiscore_table
;
ld hl,player_score
call rebuild_hiscore_table
;
ld ix,hiscore_item.3
ld a,(ix+score_struct.ones)
assertEqualsA ASCII_ZERO+2,"Rebuild table (Multe) failed"
ret
;
.equ ASCII_F 38
test_rebuild_hiscore_table_against_felix_score:
ld hl,felix_score_init
ld de,player_score
call copy_score_and_increment_pointers
;
ld hl,hiscore_init
ld de,hiscore_item
call copy_hiscore_table
;
ld hl,player_score
call rebuild_hiscore_table
;
ld ix,hiscore_item.3
ld a,(ix+score_struct.initials)
assertEqualsA ASCII_F,"Rebuild table (Felix) failed"
ret
test_increment_pointers:
ld hl,hiscore_item.1
ld (hiscore_table_pointer),hl
;
INCREMENT_SCORE_TABLE_POINTER hiscore_table_pointer
ld hl,(hiscore_table_pointer)
assertEqualsHL hiscore_item.2,"Increment pointers failed"
ret
.macro INCREMENT_SCORE_TABLE_POINTER
; Entry: \1 = Score table pointer.
; Exit: Pointer at \1 is incremented by the size of one score struct.
; Uses: None
push de
push hl
ld hl,(\1)
ld de,_sizeof_score_struct
add hl,de
ld (\1),hl
pop hl
pop de
.endm
;2017-10-19
test_compare_hiscore_table_and_player_score:
ld a,21
ld b,4
call set_cursor
; Init hiscore table
ld a,NUMBER_OF_HISCORE_ITEMS
ld ix,hi_score
ld hl,hi_score_init_table
call init_score_array
; Init player score
ld de,player_score
ld hl,luna_score
call init_score
;
; compare scores
ld iy,player_score
ld ix,hi_score ; should be hi_score_table
ld a,NUMBER_OF_HISCORE_ITEMS
call calculate_address_and_rank_in_score_table
jp c,+
call insert_score_into_score_table
+:
;
; Print hiscore table
ld a,NUMBER_OF_HISCORE_ITEMS
ld ix,hi_score
call print_score_array
; print player score
ld a,INCLUDE_INITIALS
ld hl,player_score
call print_score
ret
;
insert_score_into_score_table:
; IN: IY, IX
ld bc,_sizeof_score_struct
push ix
pop de
push iy
pop hl
ldir
ret
;
calculate_address_and_rank_in_score_table:
; IN IY, IX, A = number of hisscore item
; Out: Return in IX position of score IY in table that starts at ix.
; Carry set IY is not strong enough to be in table.
ld b,a
-:
push bc
call compare_scores
jp nc,+
ld a,(ix+score_struct.name_table_address)
ld (iy+score_struct.name_table_address),a
ld a,(ix+score_struct.name_table_address+1)
ld (iy+score_struct.name_table_address+1),a
pop bc
or a
ret
+:
ld de,_sizeof_score_struct
add ix,de
pop bc
djnz -
scf
ret
;
compare_scores:
; if score in iy is equal or higher, then set carry. Else reset.
; IY and IX
ld a,(ix+score_struct.ten_thousands)
cp (iy+score_struct.ten_thousands)
jp c,iy_is_higher
jp z,+
jp ix_is_higher
;
+:
ld a,(ix+score_struct.thousands)
cp (iy+score_struct.thousands)
jp c,iy_is_higher
jp z,+
jp ix_is_higher
+:
ld a,(ix+score_struct.hundreds)
cp (iy+score_struct.hundreds)
jp c,iy_is_higher
jp z,+
jp ix_is_higher
+:
ld a,(ix+score_struct.tens)
cp (iy+score_struct.tens)
jp c,iy_is_higher
jp z,+
jp ix_is_higher
;
+:
ld a,(ix+score_struct.ones)
cp (iy+score_struct.ones)
jp c,iy_is_higher
jp z,iy_is_higher
jp ix_is_higher
;
iy_is_higher: ; iy higher or equal.
scf
ret
ix_is_higher:
or a
ret
ret
;
print_score_array:
ld b,a
-:
push bc
push ix
pop hl
ld a,INCLUDE_INITIALS
call print_score
;
ld de,_sizeof_score_struct
add ix,de
pop bc
djnz -
ret
;
;
;
.equ INCLUDE_INITIALS %00000001
.equ EXCLUDE_INITIALS %00000000
.equ INCLUDE_INITIALS_BIT 0
print_score:
; Totally unsafe printing of the score digits.
; Entry: A = Include initials (bit set/reset)
; HL = Pointer to score struct.
; Uses: A, B, DE, HL.
push af
;
ld d,0
ld e,score_struct.name_table_address
add hl,de
ld a,(hl)
out (CONTROL_PORT),a
inc hl
ld a,(hl)
or VRAM_WRITE_COMMAND
out (CONTROL_PORT),a
;
ld b,SCORE_DIGITS_TOTAL
-:
inc hl
ld a,(hl)
out (DATA_PORT),a ; Write digit.
push ix
pop ix
ld a,%00000000
out (DATA_PORT),a ; Write 2nd byte to name table.
djnz -
pop af
bit INCLUDE_INITIALS_BIT,a
ret z
; OK - we should also print the initials associated with this score.
ld a,ASCII_SPACE
out (DATA_PORT),a ; Print space as separator.
push ix
pop ix
ld a,%00000000
out (DATA_PORT),a ; Write 2nd byte to name table.
ld b,LETTERS_IN_INITIALS ; Print the letters in the initials.
-:
inc hl
ld a,(hl)
out (DATA_PORT),a
push ix
pop ix
ld a,%00000000
out (DATA_PORT),a
djnz -
;
ret
;
init_score:
; Initialize score struct.
; Entry: DE = Pointer to struct.
; HL = Pointer to init data, se example below.
; Uses: AF, BC, DE, HL.
ld bc,_sizeof_score_struct
ldir
ret
score_init_example:
.db 0 ; Id.
.db 1 ; Rank.
.dw $3800 ; Name table address for fast printing.
.asc "00000" ; Init value.
.asc "FAR" ; Initials
;
init_score_array:
; Initialize score items in an array.
; IN: A = Number of score items, IX = Pointer to first score item[0].,
; HL = Init data.
; Uses:....
ld b,a
-:
push bc
push ix
pop de
call init_score
ld de,_sizeof_score_struct
add ix,de
pop bc
djnz -
ret
;
return_score_digit:
; Return in A the value (ASCII) of a specified digit in the score struct.
; Entry: A = Digit to return.
; HL = Pointer to score struct.
; Exit: A = Value of digit.
; Uses: AF, DE, HL
add a,score_struct.ten_thousands
ld d,0
ld e,a
add hl,de
ld a,(hl)
ret
;
add_to_score:
; Add a number passed in B to the digit specified in A. Update the other
; digits in the score struct as necessary. Credit to Jonathan Cauldwell.
; Entry: A = Digit to add to
; B = Number to add (non-ascii!)
; HL = Pointer to score struct.
; Uses: AF, DE, HL
ld d,0
add a,score_struct.ten_thousands
ld e,a
add hl,de
ld a,b
add a,(hl)
ld (hl),a
cp ASCII_ZERO+10
ret c
sub 10
ld (hl),a
-:
dec hl
inc (hl)
ld a,(hl)
cp ASCII_ZERO+10
ret c
sub 10
ld (hl),a
jp -
;
ret
;
subtract_from_score:
; Subtract a number passed in B from the digit specified in A. Update the
; other digits in the score struct as necessary.
; Entry: A = Digit to subtract from.
; B = Number to subtract (non-ascii!).
; HL = Pointer to score struct.
ld d,0
add a,score_struct.ten_thousands
ld e,a
add hl,de
ld a,(hl)
sub b
ld (hl),a
cp ASCII_ZERO
ret nc
add a,10
ld (hl),a
-:
dec hl
dec (hl)
ld a,(hl)
cp ASCII_ZERO
ret nc
add a,10
ld (hl),a
jp -
;
ret
;2017-10-18
set_score_name_table_addresses_from_table:
ld b,a
-:
push bc
ld a,(hl)
ld (ix+score_struct.name_table_address),a
inc hl
ld a,(hl)
ld (ix+score_struct.name_table_address+1),a
inc hl
;
ld de,_sizeof_score_struct
add ix,de
pop bc
djnz -
ret
find_score_item_by_rank:
; IN: IX=Base struct array, A, Number of items, B = rank
push bc
push de
ld c,b
ld b,a
ld de,_sizeof_score_struct
-:
ld a,(ix+score_struct.rank)
cp c
jp z,+
add ix,de
djnz -
+:
pop de
pop bc
ret
;
set_score_name_table_addresses_from_table_sort_by_rank:
; Assign the first address in the table pointed to by HL to the score item
; with rank 1. Then assign the next address to item ranked #2, and so on...
; IN: A = number of score items, B= highest position (usually 1)
; HL = name table address table (source), ix = first item in array (destination).
ld c,b
ld b,a
ld d,a
-:
push bc
push ix
push de
ld a,d
ld b,c
call find_score_item_by_rank ; Rank should be assumed from position in table!
ld a,(hl)
ld (ix+score_struct.name_table_address),a
inc hl
ld a,(hl)
ld (ix+score_struct.name_table_address+1),a
inc hl
;
ld de,_sizeof_score_struct
add ix,de
pop de
pop ix
pop bc
inc c
djnz -
ret
; Reposition and sort. (kind of like 'build hiscore table')
;ld a,NUMBER_OF_HISCORE_ITEMS
;ld b,HISCORE_TABLE_TOP_POSITION
;ld hl,hi_score_name_table_address_table
;ld ix,hi_score
;call set_score_name_table_addresses_from_table_sort_by_rank
test_print_sorted_and_repositioned_score_array:
; Init
ld a,NUMBER_OF_HISCORE_ITEMS
ld ix,hi_score
ld hl,hi_score_init_table
call init_score_array
; TODO
;
; Reposition and sort.
ld a,NUMBER_OF_HISCORE_ITEMS
ld b,HISCORE_TABLE_TOP_POSITION
ld hl,hi_score_name_table_address_table
ld ix,hi_score
call set_score_name_table_addresses_from_table_sort_by_rank
; Print
ld a,NUMBER_OF_HISCORE_ITEMS
ld ix,hi_score
call print_score_array
ret
;2017-10-17
test_print_score_w_initials:
;
ld a,INCLUDE_INITIALS
ld hl,score_init_data_example
call print_score
ret
test_print_unsorted_score_table:
;
ld a,NUMBER_OF_SCORE_ITEMS
ld ix,score
ld hl,score_init_table
call init_score_array
;
ld b,NUMBER_OF_SCORE_ITEMS
ld ix,score
-:
push bc
push ix
pop hl
ld a,INCLUDE_INITIALS
call print_score
;
ld de,_sizeof_score_struct
add ix,de
pop bc
djnz -
ret
test_sub_1_from_10:
ld hl,test_data_1
ld de,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call subtract_from_score
;
ld hl,player_score
ld a,SCORE_ONES
call return_score_digit
assertEqualsA ASCII_NINE,"test_sub_1_from_10 failed"
ret
test_data_1:
.db 0 ; Id.
.dw $3aa0 ; Name table address for fast printing.
.asc "00010" ; Init value.
;
test_add_2_then_sub_1:
ld hl,score_init_data_example
ld de,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,2
call add_to_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call subtract_from_score
;
ld hl,player_score
ld a,SCORE_ONES
call return_score_digit
assertEqualsA ASCII_ONE,"test_add_2_then_sub_1 failed"
ret
;
test_add_1_then_sub_1:
ld hl,score_init_data_example
ld de,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call add_to_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call subtract_from_score
;
ld hl,player_score
ld a,SCORE_ONES
call return_score_digit
assertEqualsA ASCII_ZERO,"test_add_1_then_sub_1 failed"
ret
;2017-10-16
test_shoot_one_asteroid:
ld hl,score_init_data_example
ld de,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_TENS
ld b,1
call add_to_score
;
ld hl,player_score
call print_score
ret
; 2017-10-15
test_add_1_visual:
ld hl,score_init_data_example
ld de,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call add_to_score
;
ld hl,player_score
call print_score
ret
test_add_1_then_9_visual:
ld hl,score_init_data_example
ld de,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call add_to_score
ld hl,player_score
ld a,SCORE_ONES
ld b,9
call add_to_score
;
ld hl,player_score
call print_score
ret
;
test_add_1_then_9:
ld hl,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call add_to_score
ld hl,player_score
ld a,SCORE_ONES
ld b,9
call add_to_score
;
ld a,SCORE_ONES
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"test_add_1_then_9 failed"
ld a,SCORE_TENS
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ONE,"test_add_1_then_9 failed"
ret
test_add_1:
ld hl,player_score
call init_score
;
ld hl,player_score
ld a,SCORE_ONES
ld b,1
call add_to_score
;
ld a,SCORE_ONES
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ONE,"test_add_1_failed"
ret
;
test_all_digits_reset:
ld hl,player_score
call init_score
ld a,SCORE_ONES
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"! test_all_digits_reset"
ld a,SCORE_TENS
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"! test_all_digits_reset"
ld a,SCORE_HUNDREDS
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"! test_all_digits_reset"
ld a,SCORE_THOUSANDS
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"! test_all_digits_reset"
ld a,SCORE_TEN_THOUANDS
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"! test_all_digits_reset"
ret
test_resetted_ones:
ld hl,player_score
call init_score
ld a,SCORE_ONES
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"! test_resetted_ones"
ret
;
test_resetted_tens:
ld hl,player_score
call init_score
ld a,SCORE_TENS
ld hl,player_score
call return_score_digit
assertEqualsA ASCII_ZERO,"! test_resetted_tens"
ret
; 2017-09-10
test_10:
ld a,3
ld b,4
ld hl,converter_test_table
call convert_byte
assertEqualsA 30, "Test 10 failed"
ld a,2
ld b,4
ld hl,converter_test_table
call convert_byte
assertCarryReset "Test 10.2 failed"
;assertEqualsA 20, "Test 10 failed"
ld a,5
ld b,4
ld hl,converter_test_table
call convert_byte
;assertEqualsA 5, "Test 10 failed"
assertCarrySet "Test 10.1 failed"
ret
; 2017-09-08
test_1:
ld ix,sandbox_trigger
ld a,(ix+trigger.state)
cp ENABLED
jp nz,++
call process_trigger
jp nc,+
;
push ix
ld ix,asteroid
call explode_asteroid_into_shards
pop ix
ld a,DISABLED
ld (ix+trigger.state),a
+:
++:
;
ld b,2
ld ix,shard
-:
push bc
ld a,(ix+game_object.state)
cp GAME_OBJECT_ACTIVE
jp nz,+
call move_game_object ; Move shard.
ld a,SHARD_DEACTIVATE_ZONE_START
ld b,SHARD_DEACTIVATE_ZONE_END
call horizontal_zone_deactivate_game_object
ld a,VERTICAL_DEACTIVATE_ZONE_START
ld b,VERTICAL_DEACTIVATE_ZONE_END
call vertical_zone_deactivate_game_object
;
call draw_game_object ; Put it in the SAT.
;
+:
ld de,_sizeof_game_object
add ix,de
pop bc
djnz -
ld ix,asteroid
ld a,(ix+game_object.state)
cp GAME_OBJECT_ACTIVE
jp nz,+
call move_game_object
call draw_game_object
+:
call is_reset_pressed
jp nc,+
ld a,GS_PREPARE_SANDBOX
ld (game_state),a
+:
ret
sandbox_game_object_init_table:
.dw shard, sandbox_shard_init_table, SHARD_MAX
.dw asteroid, sandbox_asteroid_init_table, 1
sandbox_shard_init_table:
.db SPRITE_45, 0, 0, GAME_OBJECT_SHAPE_SMALL
.db 2, 0, GAME_OBJECT_INACTIVE
.db %00010001, 7, 7, SHARD
sandbox_asteroid_init_table:
.db SPRITE_8, 1, NOT_MOVING, GAME_OBJECT_SHAPE_REGULAR
.db 0, 200, GAME_OBJECT_ACTIVE
.db %00000000, 15, 15, ASTEROID
sandbox_shard_position_table:
.db 35, 70, 45, 80
sandbox_trigger_init_table:
.db 255, 40
ld hl,sandbox_game_object_init_table
ld a,2
call batch_initialize_game_objects
ld a,2
ld ix, shard
ld hl,sandbox_shard_position_table
call position_multiple_game_object_instances
ld hl,sandbox_trigger_init_table
ld ix,sandbox_trigger
call initialize_trigger
ld a,ENABLED
ld (ix+trigger.state),a
apply_offset_to_game_object:
; IX = Pointer, B=Y, C= X
ld a,(ix+game_object.y)
add a,b
ld (ix+game_object.y),a
;
ld a,(ix+game_object.x)
add a,c
ld (ix+game_object.x),a
ret
; 2017-09-06
get_trigger_state:
; Entry: IX = Pointer to trigger struct.
; Exit: Trigger state (ENABLED/DISABLED bluelib constants) in A.
ld a,(ix+trigger.state)
ret
;
;2017-09-05
test_1:
ld ix,bee
ld hl,bee_init_table
call initialize_game_object
;
ld a,COLLISION_TABLE_DIVIDER
call wait_for_scanline
in a,(V_COUNTER_PORT)
assertEqualsA COLLISION_TABLE_DIVIDER, "Test 1 failed"
;
ld ix,bee