diff options
author | Zumi Daxuya <daxuya.zumi+code@protonmail.com> | 2020-12-11 17:05:58 +0700 |
---|---|---|
committer | Zumi Daxuya <daxuya.zumi+code@protonmail.com> | 2020-12-11 17:05:58 +0700 |
commit | 87ae0e358884f4156f9e5afd2e836c9b19041364 (patch) | |
tree | fd2277876d5539db729f8407c5dde21fa15b97d9 | |
parent | a5cc084ca33932b902369bbe477b58ae07f4506f (diff) |
Start labelling Pikachu minigame
-rwxr-xr-x | constants/sprite_anim_constants.asm | 3 | ||||
-rw-r--r-- | engine/games/pikachu_minigame.asm | 477 | ||||
-rw-r--r-- | ram/wram.asm | 63 |
3 files changed, 322 insertions, 221 deletions
diff --git a/constants/sprite_anim_constants.asm b/constants/sprite_anim_constants.asm index b9ade3a..53ad260 100755 --- a/constants/sprite_anim_constants.asm +++ b/constants/sprite_anim_constants.asm @@ -30,6 +30,9 @@ SPRITE_ANIM_INDEX_GS_INTRO_VENUSAUR EQU $2d SPRITE_ANIM_INDEX_GS_TITLE_FLAME_NOTE EQU $2e +SPRITE_ANIM_INDEX_2F EQU $2f +SPRITE_ANIM_INDEX_30 EQU $30 + SPRITE_ANIM_INDEX_39 EQU $39 SPRITE_ANIM_INDEX_GAMEFREAK_LOGO EQU $3a SPRITE_ANIM_INDEX_GS_INTRO_STAR EQU $3b diff --git a/engine/games/pikachu_minigame.asm b/engine/games/pikachu_minigame.asm index c186320..d90af87 100644 --- a/engine/games/pikachu_minigame.asm +++ b/engine/games/pikachu_minigame.asm @@ -26,52 +26,57 @@ PikachuMiniGame:: callab InitEffectObject call PikachuMiniGame_ClearBothTilemaps - ld hl, $5def + + ld hl, IntroForestGFX ld de, vChars2 - ld bc, $0800 - ld a, $39 + ld bc, $80 tiles + ld a, BANK(IntroForestGFX) call FarCopyData - ld hl, $626f - ld de, vChars0 -Jump_038_4041: - ld bc, $0900 - ld a, $39 + ld hl, IntroJigglypuffPikachuGFX + ld de, vChars0 + ld bc, $90 tiles + ld a, BANK(IntroJigglypuffPikachuGFX) call FarCopyData - ld a, $42 + + ld a, LOW($4842) ld [$c625], a - ld a, $48 - ld [$c626], a + ld a, HIGH($4842) ; XXX + ld [$c626], a ; subroutine pointer? + ld hl, vBGMap0 ld a, l - ld [$c621], a + ld [wPikachuMinigameBGMapPointer], a ld a, h - ld [$c622], a - ld de, $47b2 + ld [wPikachuMinigameBGMapPointer + 1], a ; bgmap pointer? + + ld de, $47b2 ; XXX ld a, e ld [$c623], a ld a, d ld [$c624], a call Call_038_4197 + ld hl, wSpriteAnimDict - ld a, $22 + ld a, $22 ; anim dict values? ld [hli], a - ld a, $00 + ld a, SPRITE_ANIM_DICT_DEFAULT ld [hli], a - call Call_038_4126 + call PikachuMiniGame_LoadFont + xor a ldh [hSCY], a ld [wc4c7], a ldh [hSCX], a ld [wc4c8], a - ld [$c620], a - ld [$c617], a - ld [$c609], a - ld [$c60a], a + ld [wPikachuMinigameJumptableIndex], a + ld [wPikachuMinigameScrollSpeed], a + ld [wPikachuMinigameScore], a + ld [wPikachuMinigameScore + 1], a ld [$c60b], a ld [$c60c], a - ld [$c611], a - ld [$c612], a + ld [wPikachuMinigameTimeFrames], a + ld [wPikachuMinigameTimeSeconds], a ld [$c613], a ld [$c614], a ld [$c608], a @@ -83,40 +88,48 @@ Jump_038_4041: ld [$c61a], a ld [$c61d], a ld [$c61e], a - ld a, $9e + + ld a, LOW($479e) ; XXX ld [$c61b], a - ld a, $47 + ld a, HIGH($479e) ; XXX ld [$c61c], a + ld a, $7c ldh [hWY], a + ld a, $e3 ldh [rLCDC], a + ld a, [wSGB] and a - jr nz, jr_038_40de + jr nz, .not_sgb - ld a, $94 + ld a, %10010100 ldh [rBGP], a - ld a, $e4 + ld a, %11100100 ldh [rOBP0], a - jr jr_038_40e4 + jr .next -jr_038_40de: - ld a, $e4 +.not_sgb +; Normal palette if on GB / GBC + ld a, %11100100 ldh [rBGP], a ldh [rOBP0], a -jr_038_40e4: +.next ld de, $7058 - ld a, $2f + ld a, SPRITE_ANIM_INDEX_2F call InitSpriteAnimStruct + ld a, c ld [wLYOverrides], a ld a, b ld [$c601], a + ld de, $7058 - ld a, $30 + ld a, SPRITE_ANIM_INDEX_30 call InitSpriteAnimStruct + ld a, c ld [$c602], a ld a, b @@ -127,97 +140,103 @@ jr_038_40e4: PikachuMiniGame_ClearBothTilemaps: ld hl, vBGMap1 ld bc, $0280 - -jr_038_410b: - ld [hl], $00 +.clear_bgmap + ld [hl], 0 inc hl dec bc ld a, b or c - jr nz, jr_038_410b - - ld hl, wVirtualOAMEnd - ld bc, VBlank.return + jr nz, .clear_bgmap -jr_038_4119: - ld [hl], $00 + ld hl, wTileMap + ld bc, $0168 +.clear_tilemap + ld [hl], 0 inc hl dec bc ld a, b or c - jr nz, jr_038_4119 + jr nz, .clear_tilemap - ld a, $07 + ld a, 7 ldh [hWX], a ret -Call_038_4126: - ld hl, $4362 - ld de, $8900 - ld bc, $0380 - ld a, $3e +PikachuMiniGame_LoadFont: + ld hl, FontGFX + ld de, vFont tile $10 + ld bc, (112 / 2) tiles + ld a, BANK(FontGFX) call FarCopyDataDouble - ld hl, $46f2 - ld de, $9320 - ld bc, $0080 - ld a, $3e + + ld hl, FontGFX tile $39 + ld de, vChars2 tile $32 + ld bc, ( (14 / 2) + 1) tiles + ld a, BANK(FontGFX) call FarCopyDataDouble ret -Call_038_4143: +PikachuMiniGame_BlinkText: +; Blink the window text according to the current X scroll position. +; 00 - 7f = hide text +; 80 - ff = show text + ldh a, [hSCX] ld d, a and $7f ret nz - bit 7, d - jr nz, jr_038_4160 + jr nz, .DisplayText +; clear dakutens xor a - ld hl, $c2a5 + hlcoord 5, 0 ld [hl], a - ld hl, $c2ad + hlcoord 13, 0 ld [hl], a - ld hl, $c2b5 - ld c, $0f -jr_038_415b: +; clear text + hlcoord 1, 1 + ld c, 15 +.text_clear ld [hli], a dec c - jr nz, jr_038_415b - + jr nz, .text_clear ret - -jr_038_4160: - ld de, $c2b5 - ld hl, $417b - -jr_038_4166: +.DisplayText: + decoord 1, 1 + ld hl, .text +.render_text ld a, [hli] and a - jr z, jr_038_4170 + jr z, .render_dakutens - add $10 + add $10 ; tiles are shifted ld [de], a inc de - jr jr_038_4166 + jr .render_text + +.render_dakutens +; Render dakuten marks separately + ld a, "゙" + $10 -jr_038_4170: - ld a, $f5 - ld hl, $c2a5 + hlcoord 5, 0 ld [hl], a - ld hl, $c2ad + + hlcoord 13, 0 ld [hl], a ret +.text + db "スタートホタン▶タイトルかめん" + ; "スタートボタン▶タイトルがめん" + db 0 ; terminator - db $8c, $8f, $e3, $93, $9c, $8f, $ab, $ed, $8f, $81, $93, $a6, $b6, $d2, $de, $00 - +Func418b: ld bc, $0800 - jr_038_418e: ld a, [de] inc de @@ -300,89 +319,90 @@ PikachuMiniGame_RunFrame: call GetJoypad ld hl, hJoyState ld a, [hl] - and $08 - jr nz, jr_038_4224 + and %00001000 ; Start button + jr nz, .Done - ld a, [$c620] + ld a, [wPikachuMinigameJumptableIndex] bit 7, a - jr nz, jr_038_4224 + jr nz, .Done - ld a, [$c610] + ld a, [wPikachuMinigameNoteCaught] and a - jr z, jr_038_41fe + jr z, .skip_playing_sfx xor a - ld [$c610], a - ld de, $0030 + ld [wPikachuMinigameNoteCaught], a + ld de, $30 ; PAY_DAY call PlaySFX -jr_038_41fe: - call Call_038_42ee +.skip_playing_sfx + call PikachuMiniGame_PerformGameFunction + callba EffectObjectJumpNoDelay -Jump_038_4201: - ld a, $23 - ld hl, $4d13 - call FarCall_hl - ld a, $01 + ld a, 1 ldh [hBGMapMode], a - call Call_038_4616 - call Call_038_4262 - ld de, $c2c6 - ld hl, $c609 - call Call_038_4293 - call Call_038_4143 + + call PikachuMiniGame_ScrollScene + call PikachuMiniGame_ReloadCollisions + + decoord 18, 1 ; last digit + ld hl, wPikachuMinigameScore + call PikachuMiniGame_PrintBCD + + call PikachuMiniGame_BlinkText + call DelayFrame and a ret +.Done: + callab InitEffectObject -jr_038_4224: - ld hl, $4cfd - ld a, $23 - call FarCall_hl ld hl, wVirtualOAM ld c, $a0 xor a - -jr_038_4232: +.clear_oam ld [hli], a dec c - jr nz, jr_038_4232 + jr nz, .clear_oam call DelayFrame + xor a ldh [hSCX], a ldh [hSCY], a - ld a, $90 + + ld a, 144 ldh [hWY], a scf ret -Call_038_4244: - ld hl, $c611 +PikachuMiniGame_RunTimer: + ld hl, wPikachuMinigameTimeFrames ld a, [hl] - add $01 + add 1 daa ld [hl], a - cp $60 + cp $60 ; 1 second = 60 frames ret c - ld [hl], $00 - ld hl, $c612 + ld [hl], 0 ; reset frame counter + ld hl, wPikachuMinigameTimeSeconds ld a, [hl] - add $01 + add 1 daa ld [hl], a - cp $60 + cp $60 ; 1 minute ret c +; end game here ld a, $02 - ld [$c620], a + ld [wPikachuMinigameJumptableIndex], a ret -Call_038_4262: +PikachuMiniGame_ReloadCollisions: ldh a, [hSCX] ld e, a and $07 @@ -412,194 +432,214 @@ Call_038_4262: ret -Call_038_4293: +PikachuMiniGame_PrintBCD: +; Print the BCD number in HL to DE, least-significant +; digit first. + push hl push de push bc + ld c, [hl] inc hl ld b, [hl] + ld l, e ld h, d + ld a, b swap a - and $0f - jr nz, jr_038_42d0 + and %00001111 ; in the thousandths range? + jr nz, .four_digits ld a, b - and $0f - jr nz, jr_038_42c0 + and %00001111 ; in the hundreds range? + jr nz, .three_digits ld a, c swap a - and $0f - jr nz, jr_038_42b4 + and %00001111 ; in the tens range? + jr nz, .two_digits +; got one digit ld a, c - call Call_038_42e8 - jr jr_038_42e4 + call .PlaceDigit + jr .finished -jr_038_42b4: +.two_digits ld a, c - call Call_038_42e8 + call .PlaceDigit ld a, c swap a - call Call_038_42e8 - jr jr_038_42e4 + call .PlaceDigit + jr .finished -jr_038_42c0: +.three_digits ld a, c - call Call_038_42e8 + call .PlaceDigit ld a, c swap a - call Call_038_42e8 + call .PlaceDigit ld a, b - call Call_038_42e8 - jr jr_038_42e4 + call .PlaceDigit + jr .finished -jr_038_42d0: +.four_digits ld a, c - call Call_038_42e8 + call .PlaceDigit ld a, c swap a - call Call_038_42e8 + call .PlaceDigit ld a, b - call Call_038_42e8 + call .PlaceDigit ld a, b swap a - call Call_038_42e8 + call .PlaceDigit -jr_038_42e4: +.finished pop bc pop de pop hl ret -Call_038_42e8: +.PlaceDigit: and $0f add $36 ld [hld], a ret -Call_038_42ee: - ld a, [$c620] - ld e, a - ld d, $00 - ld hl, $42fd - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - - - db $09, $43, $89, $43, $18, $43, $21, $43 +PikachuMiniGame_PerformGameFunction: + jumptable .jumptable, wPikachuMinigameJumptableIndex - ld l, $43 +.jumptable +; jumptable here + dw Func4309 + dw Func4389 + dw PikachuMiniGame_SetNextSceneTimer + dw PikachuMiniGame_WaitAndGotoNextScene + dw PikachuMiniGame_ShowJigglypuff + dw PikachuMiniGame_FadeOut - db $3e, $43 - - ld a, $04 - ld [$c617], a +Func4309: +; Set scroll speed here + ld a, 4 + ld [wPikachuMinigameScrollSpeed], a ld a, $31 - ld [$c605], a - ld hl, $c620 + ld [wc605], a + ld hl, wPikachuMinigameJumptableIndex inc [hl] ret - +PikachuMiniGame_SetNextSceneTimer: ld a, $40 - ld [$c61f], a - ld hl, $c620 + ld [wPikachuMinigameSceneTimer], a + ld hl, wPikachuMinigameJumptableIndex inc [hl] - ld hl, $c61f + +PikachuMiniGame_WaitAndGotoNextScene: + ld hl, wPikachuMinigameSceneTimer ld a, [hl] and a - jr z, jr_038_432a - + jr z, .next_scene dec [hl] ret - -jr_038_432a: - ld hl, $c620 +.next_scene + ld hl, wPikachuMinigameJumptableIndex inc [hl] + +PikachuMiniGame_ShowJigglypuff: ld de, $70c0 ld a, $32 call InitSpriteAnimStruct + xor a - ld [$c61f], a - ld hl, $c620 + ld [wPikachuMinigameSceneTimer], a + ld hl, wPikachuMinigameJumptableIndex inc [hl] - ld a, [$c617] + +PikachuMiniGame_FadeOut: + ld a, [wPikachuMinigameScrollSpeed] and a ret nz - ld a, [$c61f] + ld a, [wPikachuMinigameSceneTimer] srl a srl a srl a srl a + ld e, a - ld d, $00 - ld hl, $4377 + ld d, 0 + ld hl, .DMGPals add hl, de + ld a, [hl] - cp $ff - jr z, jr_038_4371 + cp -1 + jr z, .end_minigame ldh [rBGP], a - ld hl, $4380 + + ld hl, .Obj_SGBPals add hl, de + ld a, [wSGB] and a - jr z, jr_038_4369 + jr z, .not_sgb ld a, [hl] ldh [rBGP], a -jr_038_4369: +.not_sgb ld a, [hl] ldh [rOBP0], a - ld hl, $c61f + +; from this point, the timer *increments* instead + ld hl, wPikachuMinigameSceneTimer inc [hl] ret -jr_038_4371: - ld hl, $c620 +.end_minigame +; once everything fades out, the minigame ends here +; leading to the title screen + + ld hl, wPikachuMinigameJumptableIndex set 7, [hl] ret - - db $94, $94, $94, $94, $94, $50, $40, $00, $ff, $e4, $e4, $e4, $e4, $e4, $90, $40 - db $00 - - rst $38 - - call Call_038_4244 +.DMGPals: + db $94, $94 + db $94, $94 + db $94, $50 + db $40, $00 + db -1 + +.Obj_SGBPals: + db $e4, $e4 + db $e4, $e4 + db $e4, $90 + db $40, $00 + db -1 + +Func4389: + call PikachuMiniGame_RunTimer ldh a, [hSCX] and $20 ld hl, $c608 cp [hl] - jr nz, jr_038_4397 - + jr nz, .jump4397 ret - - -jr_038_4397: +.jump4397 ld a, [hl] xor $20 ld [hl], a call Call_038_43d0 - jr c, jr_038_43cb - + jr c, .next_scene call Call_038_43f4 ret c - ldh a, [hSCX] and $1f ld e, a @@ -626,10 +666,8 @@ jr_038_4397: dec hl ld [hl], e ret - - -jr_038_43cb: - ld hl, $c620 +.next_scene + ld hl, wPikachuMinigameJumptableIndex inc [hl] ret @@ -638,20 +676,17 @@ Call_038_43d0: ld a, [$c60d] ld l, a ld h, $00 - ld de, $43e5 + ld de, .data43e5 add hl, de ld a, [hl] cp $ff - jr nz, jr_038_43e3 - + jr nz, .jr_038_43e3 xor a ld [$c60d], a - -jr_038_43e3: +.jr_038_43e3 and a ret - - +.data43e5 db $00, $01, $02, $03, $04, $05, $06, $00, $01, $02, $03, $04, $05, $06, $ff Call_038_43f4: @@ -727,13 +762,13 @@ jr_038_441d: ldh a, [hJoyState] - ld hl, $c605 + ld hl, wc605 and [hl] ld d, a and $01 jr nz, jr_038_449f - ld a, [$c617] + ld a, [wPikachuMinigameScrollSpeed] and a ret nz @@ -862,7 +897,7 @@ Call_038_451f: ret c ld a, $01 - ld [$c610], a + ld [wPikachuMinigameNoteCaught], a ld hl, $000b add hl, bc inc [hl] @@ -872,7 +907,7 @@ Call_038_451f: Call_038_4544: - ld hl, $c609 + ld hl, wPikachuMinigameScore ld e, [hl] inc hl ld d, [hl] @@ -1032,8 +1067,8 @@ jr_038_4609: ret -Call_038_4616: - ld hl, $c617 +PikachuMiniGame_ScrollScene: + ld hl, wPikachuMinigameScrollSpeed ldh a, [hSCX] sub [hl] ldh [hSCX], a @@ -1332,3 +1367,5 @@ Call_038_478e: pop de pop hl ret + +; Map 479e diff --git a/ram/wram.asm b/ram/wram.asm index 5c07810..6e8b4e6 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -168,8 +168,69 @@ wLYOverrides2:: ds SCREEN_HEIGHT_PX wLYOverrides2End:: NEXTU -; Battle-related +; Pikachu minigame + +wc600:: ds 1 +wc601:: ds 1 +wc602:: ds 1 +wc603:: ds 1 +wc604:: ds 1 +wc605:: ds 1 +wc606:: ds 1 +wc607:: ds 1 +wc608:: ds 1 +wPikachuMinigameScore:: ds 2 +wc60b:: ds 1 +wc60c:: ds 1 +wc60d:: ds 1 +wc60e:: ds 1 +wc60f:: ds 1 +wPikachuMinigameNoteCaught:: ds 1 + +; Time keeping +wPikachuMinigameTimeFrames:: ds 1 +wPikachuMinigameTimeSeconds:: ds 1 + +wc613:: ds 1 +wc614:: ds 1 +wc615:: ds 1 +wc616:: ds 1 +wPikachuMinigameScrollSpeed:: ds 1 +wc618:: ds 1 +wc619:: ds 1 +wc61a:: ds 1 +wc61b:: ds 1 +wc61c:: ds 1 +wc61d:: ds 1 +wc61e:: ds 1 +wPikachuMinigameSceneTimer:: ds 1 +wPikachuMinigameJumptableIndex:: ds 1 +wPikachuMinigameBGMapPointer:: ds 2 +wc622:: ds 2 +wc623:: ds 2 +wc624:: ds 1 +wc625:: ds 1 +wc626:: ds 1 +wc627:: ds 1 +wc628:: ds 1 +wc629:: ds 1 +wc62a:: ds 1 +wc62b:: ds 1 +wc62c:: ds 1 +wc62d:: ds 1 +wc62e:: ds 1 +wc62f:: ds 1 +wc630:: ds 1 +wc631:: ds 1 +wc632:: ds 1 +wc633:: ds 1 +wc634:: ds 1 +wc635:: ds 1 +wc636:: ds 1 + +NEXTU +; Battle-related ds $1ea wActiveBGEffects:: |