@@ -19,6 +19,16 @@ Player_AnimPointer:: dw ; pointer to current animation sequence
1919Player_AnimTimer:: db ; time until next animation frame is displayed (if -1, frame will be displayed indefinitely)
2020Player_CurrentFrame:: db ; current animation frame being displayed
2121
22+ StageClear_Offset1:: db
23+ StageClear_Offset2:: db
24+ StageClear_Offset3:: db
25+ StageClear_Offset4:: db
26+ StageClear_Offset5:: db
27+ StageClear_Delay2:: db
28+ StageClear_Delay3:: db
29+ StageClear_Delay4:: db
30+ StageClear_Delay5:: db
31+
2232PlayerRAM_End:
2333; the following are part of the player RAM but are not to be cleared after each level
2434Player_CoinCount:: dw
@@ -363,9 +373,9 @@ ProcessPlayer:
363373 jp c , .xMoveDone
364374 or b
365375 ld [ Engine_CurrentScreen ], a
366- jr .xMoveDone
376+ jp .xMoveDone
367377:
368- jr nc , .xMoveDone
378+ jp nc , .xMoveDone
369379 ; Right edge crosses, increment current screen
370380 ld a ,[ Engine_CurrentScreen ]
371381 and $ 30
@@ -384,17 +394,283 @@ ProcessPlayer:
384394 ld e , a
385395 pop af
386396 ld a , e
387- jr nz , .notvictory
397+ jp nz , .notvictory
388398 ld hl , Player_MovementFlags
389399 set bPlayerVictory ,[ hl ]
390400 ld a , 1
391401 ld [ Engine_LockCamera ], a
392402 ld a , MUS_STAGE_CLEAR
393403 farcall DS_Init
404+ call EndSprites
405+
406+ ldfar hl , StageClearTiles
407+ ld a , $ 20
394408 ld b , 0
395- : halt
409+ call LoadSpriteTiles
410+ xor a
411+ ld [ StageClear_Offset1 ], a
412+ ld [ StageClear_Offset2 ], a
413+ ld [ StageClear_Offset3 ], a
414+ ld [ StageClear_Offset4 ], a
415+ ld [ StageClear_Offset5 ], a
416+ ld b , a
417+ ld a , 6
418+ ld [ StageClear_Delay2 ], a
419+ add 6
420+ ld [ StageClear_Delay3 ], a
421+ add 6
422+ ld [ StageClear_Delay4 ], a
423+ add 6
424+ ld [ StageClear_Delay5 ], a
425+ .stageclearloop
426+ halt
427+ push bc
428+
429+ ; process "STAGE CLEAR" card
430+ call BeginSprites
431+
432+
433+ ld a ,[ sys_CurrentFrame ]
434+ call .getYSine
435+ ldfar hl , StageClear_Scroll1
436+ ld b , $ 20 ; S
437+ ld c , % 00001000
438+ ld a ,[ StageClear_Offset1 ]
439+ add l
440+ ld l , a
441+ ld a ,[ hl ]
442+ ld e , a
443+ call AddSprite
444+
445+
446+ ld a ,[ sys_CurrentFrame ]
447+ add 8
448+ call .getYSine
449+ ld hl , StageClear_Scroll2
450+ ld b , $ 22 ; T
451+ ld c , % 00001000
452+ ld a ,[ StageClear_Offset2 ]
453+ add l
454+ ld l , a
455+ ld a ,[ hl ]
456+ ld e , a
457+ call AddSprite
458+
459+ ld a ,[ sys_CurrentFrame ]
460+ add 16
461+ call .getYSine
462+ ld hl , StageClear_Scroll3
463+ ld b , $ 24 ; A
464+ ld c , % 00001000
465+ ld a ,[ StageClear_Offset3 ]
466+ add l
467+ ld l , a
468+ ld a ,[ hl ]
469+ ld e , a
470+ call AddSprite
471+
472+ ld a ,[ sys_CurrentFrame ]
473+ add 24
474+ call .getYSine
475+ ld hl , StageClear_Scroll4
476+ ld b , $ 26 ; G
477+ ld c , % 00001000
478+ ld a ,[ StageClear_Offset4 ]
479+ add l
480+ ld l , a
481+ jr nc , : +
482+ inc h
483+ : ld a ,[ hl ]
484+ ld e , a
485+ call AddSprite
486+
487+ ld a ,[ sys_CurrentFrame ]
488+ add 32
489+ call .getYSine
490+ ld hl , StageClear_Scroll5
491+ ld b , $ 28 ; E
492+ ld c , % 00001000
493+ ld a ,[ StageClear_Offset5 ]
494+ add l
495+ ld l , a
496+ ld a ,[ hl ]
497+ ld e , a
498+ call AddSprite
499+
500+ ld a ,[ sys_CurrentFrame ]
501+ add 32
502+ call .getYSine2
503+ ldfar hl , StageClear_Scroll1
504+ ld b , $ 2e ; R
505+ ld c , % 00001000
506+ ld a ,[ StageClear_Offset1 ]
507+ add l
508+ ld l , a
509+ ld a ,[ hl ]
510+ ld e , a
511+ ld a , SCRN_X + 6
512+ sub e
513+ ld e , a
514+ call AddSprite
515+
516+
517+ ld a ,[ sys_CurrentFrame ]
518+ add 24
519+ call .getYSine2
520+ ld hl , StageClear_Scroll2
521+ ld b , $ 24 ; A
522+ ld c , % 00001000
523+ ld a ,[ StageClear_Offset2 ]
524+ add l
525+ ld l , a
526+ ld a ,[ hl ]
527+ ld e , a
528+ ld a , SCRN_X + 6
529+ sub e
530+ ld e , a
531+ call AddSprite
532+
533+ ld a ,[ sys_CurrentFrame ]
534+ add 16
535+ call .getYSine2
536+ ld hl , StageClear_Scroll3
537+ ld b , $ 28 ; E
538+ ld c , % 00001000
539+ ld a ,[ StageClear_Offset3 ]
540+ add l
541+ ld l , a
542+ ld a ,[ hl ]
543+ ld e , a
544+ ld a , SCRN_X + 6
545+ sub e
546+ ld e , a
547+ call AddSprite
548+
549+ ld a ,[ sys_CurrentFrame ]
550+ add 8
551+ call .getYSine2
552+ ld hl , StageClear_Scroll4
553+ ld b , $ 2c ; L
554+ ld c , % 00001000
555+ ld a ,[ StageClear_Offset4 ]
556+ add l
557+ ld l , a
558+ jr nc , : +
559+ inc h
560+ : ld a ,[ hl ]
561+ ld e , a
562+ ld a , SCRN_X + 6
563+ sub e
564+ ld e , a
565+ call AddSprite
566+
567+ ld a ,[ sys_CurrentFrame ]
568+ call .getYSine2
569+ ld hl , StageClear_Scroll5
570+ ld b , $ 2a ; C
571+ ld c , % 00001000
572+ ld a ,[ StageClear_Offset5 ]
573+ add l
574+ ld l , a
575+ ld a ,[ hl ]
576+ ld e , a
577+ ld a , SCRN_X + 6
578+ sub e
579+ ld e , a
580+ call AddSprite
581+ jr : +
582+
583+ .getYSine:
584+ add a
585+ add a
586+ call GetSine
587+ resbank
588+ ld a , d
589+ sra a ; /2
590+ sra a ; /4
591+ sra a ; /8
592+ sra a ; /16
593+ sra a ; /32
594+ sra a ; /64
595+ add 56 + 16
596+ ld d , a
597+ ret
598+
599+ .getYSine2:
600+ add a
601+ add a
602+ call GetSine
603+ resbank
604+ ld a , e
605+ sra a ; /2
606+ sra a ; /4
607+ sra a ; /8
608+ sra a ; /16
609+ sra a ; /32
610+ sra a ; /64
611+ add 72 + 16
612+ ld d , a
613+ ret
614+
615+ ; ========
616+
617+ ; update offsets + delays
618+ :
619+ ld a ,[ StageClear_Offset1 ]
620+ inc a
621+ cp 64
622+ jr nc , : +
623+ ld [ StageClear_Offset1 ], a
624+ :
625+ ld a ,[ StageClear_Delay2 ]
626+ dec a
627+ jr nz , : +
628+ ld [ StageClear_Delay2 ], a
629+ ld a ,[ StageClear_Offset2 ]
630+ inc a
631+ cp 64
632+ jr nc , : +
633+ ld [ StageClear_Offset2 ], a
634+ ld a , 1
635+ : ld [ StageClear_Delay2 ], a
636+ ld a ,[ StageClear_Delay3 ]
637+ dec a
638+ jr nz , : +
639+ ld [ StageClear_Delay3 ], a
640+ ld a ,[ StageClear_Offset3 ]
641+ inc a
642+ cp 64
643+ jr nc , : +
644+ ld [ StageClear_Offset3 ], a
645+ ld a , 1
646+ : ld [ StageClear_Delay3 ], a
647+ ld a ,[ StageClear_Delay4 ]
648+ dec a
649+ jr nz , : +
650+ ld [ StageClear_Delay4 ], a
651+ ld a ,[ StageClear_Offset4 ]
652+ inc a
653+ cp 64
654+ jr nc , : +
655+ ld [ StageClear_Offset4 ], a
656+ ld a , 1
657+ : ld [ StageClear_Delay4 ], a
658+ ld a ,[ StageClear_Delay5 ]
659+ dec a
660+ jr nz , : +
661+ ld [ StageClear_Delay5 ], a
662+ ld a ,[ StageClear_Offset5 ]
663+ inc a
664+ cp 64
665+ jr nc , : +
666+ ld [ StageClear_Offset5 ], a
667+ ld a , 1
668+ : ld [ StageClear_Delay5 ], a
669+
670+ pop bc
671+
396672 dec b
397- jr nz , : -
673+ jp nz , .stageclearloop
398674 call PalFadeOutWhite
399675 ; wait for fade to finish
400676: halt
@@ -404,6 +680,7 @@ ProcessPlayer:
404680
405681 xor a
406682 ldh [ rLCDC ], a
683+ call ClearScreen
407684 ld a ,[ Engine_LevelID ]
408685 inc a
409686 cp NUM_LEVELS
@@ -1465,3 +1742,12 @@ AnimatePlayer:
14651742section "Player tiles" , romx , align [ 8 ]
14661743PlayerTiles:
14671744 incbin "GFX/PlayerTiles.2bpp"
1745+
1746+ ; ================================
1747+
1748+ section "Stage clear sequence - Scroll data" , romx , align [ 6 ]
1749+ StageClear_Scroll1: db 0 , 1 , 3 , 5 , 6 , 8 , 9 , 11 , 13 , 14 , 16 , 18 , 19 , 21 , 22 , 24 , 26 , 27 , 29 , 30 , 32 , 33 , 34 , 36 , 37 , 39 , 40 , 41 , 43 , 44 , 45 , 46 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 59 , 60 , 61 , 62 , 62 , 63 , 64 , 64 , 65 , 65 , 65 , 66 , 66 , 66 , 67 , 67 , 67 , 67 , 67 , 67 , 68
1750+ StageClear_Scroll2: db 0 , 1 , 3 , 5 , 7 , 9 , 11 , 12 , 14 , 16 , 18 , 20 , 22 , 23 , 25 , 27 , 29 , 30 , 32 , 34 , 35 , 37 , 39 , 40 , 42 , 43 , 45 , 46 , 48 , 49 , 51 , 52 , 53 , 55 , 56 , 57 , 58 , 59 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 67 , 68 , 69 , 70 , 70 , 71 , 72 , 72 , 73 , 73 , 74 , 74 , 74 , 75 , 75 , 75 , 75 , 75 , 75 , 76
1751+ StageClear_Scroll3: db 0 , 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , 22 , 24 , 26 , 28 , 30 , 32 , 34 , 35 , 37 , 39 , 41 , 43 , 44 , 46 , 48 , 50 , 51 , 53 , 54 , 56 , 57 , 59 , 60 , 62 , 63 , 64 , 66 , 67 , 68 , 69 , 70 , 72 , 73 , 74 , 75 , 75 , 76 , 77 , 78 , 79 , 79 , 80 , 80 , 81 , 81 , 82 , 82 , 83 , 83 , 83 , 83 , 83 , 83 , 84
1752+ StageClear_Scroll4: db 0 , 2 , 4 , 6 , 9 , 11 , 13 , 15 , 17 , 20 , 22 , 24 , 26 , 28 , 30 , 33 , 35 , 37 , 39 , 41 , 43 , 45 , 47 , 49 , 51 , 52 , 54 , 56 , 58 , 60 , 61 , 63 , 65 , 66 , 68 , 69 , 71 , 72 , 73 , 75 , 76 , 77 , 78 , 80 , 81 , 82 , 83 , 84 , 84 , 85 , 86 , 87 , 88 , 88 , 89 , 89 , 90 , 90 , 91 , 91 , 91 , 91 , 91 , 91 , 92
1753+ StageClear_Scroll5: db 0 , 2 , 4 , 7 , 9 , 12 , 14 , 17 , 19 , 21 , 24 , 26 , 29 , 31 , 33 , 35 , 38 , 40 , 42 , 44 , 47 , 49 , 51 , 53 , 55 , 57 , 59 , 61 , 63 , 65 , 67 , 68 , 70 , 72 , 74 , 75 , 77 , 78 , 80 , 81 , 83 , 84 , 85 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 94 , 95 , 96 , 97 , 97 , 98 , 98 , 98 , 99 , 99 , 99 , 99 , 99 , 100
0 commit comments