diff options
author | Marcus Huderle <huderlem@gmail.com> | 2015-03-25 21:57:48 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2015-03-25 21:57:48 -0700 |
commit | 6dcb19f093048f3bb0ca8165270585d618e4963e (patch) | |
tree | 4e71740cce560481069e9777dd65c40ba19b8363 | |
parent | cdb764e220019ec5137e7d25f57babaa7f852975 (diff) |
Dump lots of main loop routines.
-rwxr-xr-x | main.asm | 1339 |
1 files changed, 1330 insertions, 9 deletions
@@ -1344,7 +1344,25 @@ Func_b2e: ; 0xb2e ld [hl], a ret -INCBIN "baserom.gbc",$b36,$b4c - $b36 +Func_b36: ; 0xb36 + ld a, [hJoypadState] + and [hl] + jr z, .asm_b3e + cp [hl] + jr z, .asm_b48 +.asm_b3e + inc hl + ld a, [hJoypadState] + and [hl] + ret z + cp [hl] + jr z, .asm_b48 + xor a + ret +.asm_b48 + ld a, $1 + and a + ret IsKeyPressed: ; 0xb4c ; Checks if a key for the specified key config is pressed. @@ -3802,9 +3820,13 @@ Func_208c: ; 0x208c scf ret -INCBIN "baserom.gbc",$20ab,$216d - $20ab +INCBIN "baserom.gbc",$20ab,$2168 - $20ab -Func_216d: ; 0x216d +ApplyGravityToBall: ; 0x2168 +; Adds a constant to the pinball's y velocity. + ld a, [$d549] + and a + ret z ld de, $000b ; gravity added to y velocity every frame ld hl, wBallYVelocity ld a, [hli] @@ -3817,7 +3839,26 @@ Func_216d: ; 0x216d ld [$d4be], a ret -INCBIN "baserom.gbc",$2180,$219c - $2180 +Func_2180: ; 0x2180 + ld hl, $d4bc + call Func_2189 + ld hl, $d4be + ; fall through +Func_2189: ; 0x2189 + ld a, [hl] + bit 7, a + jr nz, .asm_2195 + cp $8 + ret c + ld a, $7 + ld [hl], a + ret +.asm_2195 + cp $f9 + ret nc + ld a, $f9 + ld [hl], a + ret MoveBallPosition: ; 0x219c ; Updates the ball's position according to its velocity @@ -3863,7 +3904,524 @@ AddVelocityToPosition: ; 0x21c3 ld [hl], a ret -INCBIN "baserom.gbc",$21e5,$28a0 - $21e5 +INCBIN "baserom.gbc",$21e5,$22b5 - $21e5 + +Func_22b5: ; 0x22b5 + ld a, [$d4b4] + sub $4 + push af + and $7 + ld [$d7c3], a + pop af + and $f8 + ld c, a + ld a, [$d4b6] + sub $4 + push af + and $7 + ld [$d7c4], a + pop af + and $f8 + ld b, a + ld l, b + ld h, $0 + sla l + rl h + sla l + rl h + srl c + srl c + srl c + ld b, $0 + add hl, bc + ld a, l + ld [$d7f3], a + ld a, h + ld [$d7f4], a + ld a, [$d7ec] + ld c, a + ld a, [$d7ed] + ld b, a + add hl, bc + ld a, [hLoadedROMBank] + push af + ld a, [$d7ee] + ld [hLoadedROMBank], a + ld [$2000], a + ld bc, $001f + ld a, [hli] + ld [$d7c5], a + ld a, [hl] + ld [$d7c7], a + add hl, bc + ld a, [hli] + ld [$d7c6], a + ld a, [hl] + ld [$d7c8], a + pop af + ld [hLoadedROMBank], a + ld [$2000], a + ld a, [hLoadedROMBank] + push af + ld a, [$d7f1] + ld [hLoadedROMBank], a + ld [$2000], a + ld a, [$d7c3] + sla a + ld c, a + ld b, $0 + ld hl, $252e ; todo + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld a, [$d7c4] + ld c, a + ld b, $10 +.asm_233d + push bc + ld a, [de] + inc de + add c + push af + srl a + srl a + srl a + ld c, a + ld b, $0 + ld hl, $d7c5 + add hl, bc + ld a, [hl] + call Func_248a + jr nc, .asm_235e + pop af + and $7 + ld c, a + ld b, $0 + add hl, bc + jr .asm_237b +.asm_235e + ld c, a + ld b, $0 + sla c + rl b + sla c + rl b + sla c + rl b + ld hl, $d7ef + ld a, [hli] + ld h, [hl] + ld l, a + add hl, bc + pop af + and $7 + ld c, a + ld b, $0 + add hl, bc +.asm_237b + ld a, [de] + inc de + and [hl] + push af + ld a, [de] + inc de + ld c, a + ld hl, $d7c9 + add hl, bc + pop af + ld [hl], a + pop bc + dec b + jr nz, .asm_233d + pop af + ld [hLoadedROMBank], a + ld [$2000], a + ld hl, $d7c9 + ld de, $d7d9 + ld b, $4 +.asm_239a + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_239a + ld hl, $d7c9 + ld de, $0000 + ld b, $0 + ld a, [hl] + and a + jr z, .asm_23c1 +.asm_23b5 + ld a, [hli] + inc b + and a + jr z, .asm_23c1 + ld a, b + cp $11 + jr nc, .asm_23ee + jr .asm_23b5 +.asm_23c1 + ld a, [hli] + inc b + and a + jr nz, .asm_23cd + ld a, b + cp $11 + jr nc, .asm_23ee + jr .asm_23c1 +.asm_23cd + push de + ld d, $1 + ld c, b + dec c +.asm_23d2 + ld a, [hli] + inc b + inc d + and a + jr nz, .asm_23d2 + dec d + ld a, b + dec a + dec a + and $f + swap c + or c + ld c, a + ld a, d + cp e + pop de + jr c, .asm_23e9 + ld e, a + ld d, c +.asm_23e9 + ld a, b + cp $10 + jr c, .asm_23c1 +.asm_23ee + ld a, e + ld [$d7e9], a + and a + ret z + ld a, [hLoadedROMBank] + push af + ld a, $2 + ld [hLoadedROMBank], a + ld [$2000], a + push de + ld e, d + ld d, $0 + ld hl, $4817 ; todo + add hl, de + ld a, [hl] + ld [$d7ea], a + sla e + rl d + ld hl, $4917 ; todo + add hl, de + ld a, [wBallYPos] + add [hl] + ld [wBallYPos], a + inc hl + ld a, [$d4b6] + adc [hl] + ld [$d4b6], a + ld hl, $4b17 + add hl, de + ld a, [wBallXPos] + add [hl] + ld [wBallXPos], a + inc hl + ld a, [$d4b4] + adc [hl] + ld [$d4b4], a + pop de + pop af + ld [hLoadedROMBank], a + ld [$2000], a + ld a, d + swap a + and $f + ld e, a + ld a, d + and $f + sub e + jr nc, .asm_2449 + add $10 +.asm_2449 + add e + add e + inc a + and $1e + ld c, a + ld b, $0 + ld hl, $250e ; todo + add hl, bc + ld a, [$d7c3] + add $4 + add [hl] + bit 3, a + ld c, b + jr z, .asm_2462 + ld c, $2 +.asm_2462 + ld a, [$d7c4] + add $4 + inc hl + add [hl] + bit 3, a + jr z, .asm_246e + inc c +.asm_246e + ld hl, $d7c5 + add hl, bc + ld a, [hl] + ld [$d7f5], a + ld hl, $250a ; todo + add hl, bc + ld a, [$d7f3] + add [hl] + ld [$d7f6], a + ld a, [$d7f4] + adc $0 + ld [$d7f7], a + ret + +Func_248a: ; 0x248a + push af + ld a, [wCurrentStage] + bit 0, a + jr nz, .asm_2495 + pop af + and a + ret +.asm_2495 + pop af + cp $d0 + ccf + ret nc + cp $e0 + jr nc, .asm_24ab + sub $d0 + sla a + sla a + sla a + ld l, a + ld h, $c4 + scf + ret +.asm_24ab + push de + sub $e0 + ld b, a + ld a, [wCurrentStage] + cp $6 ; gengar stage buggy? + jr nc, .asm_24e0 + bit 4, b + ld hl, $3800 + ld a, [$d7af] + jr z, .asm_24c8 + res 4, b + ld hl, $3980 + ld a, [$d7b3] +.asm_24c8 + ld de, $0080 + cp $7 + jr c, .asm_24d5 + add hl, de + cp $e + jr c, .asm_24d5 + add hl, de +.asm_24d5 + ld e, b + sla e + sla e + sla e + add hl, de + pop de + scf + ret +.asm_24e0 + bit 4, b + ld hl, $3b00 + ld a, [$d7af] + jr z, .asm_24f2 + res 4, b + ld hl, $3c80 + ld a, [$d7b3] +.asm_24f2 + ld de, $0080 + cp $7 + jr c, .asm_24ff + add hl, de + cp $e + jr c, .asm_24ff + add hl, de +.asm_24ff + ld e, b + sla e + sla e + sla e + add hl, de + pop de + scf + ret + +INCBIN "baserom.gbc",$250a,$2720 - $250a + +Func_2720: ; 0x2720 + ld a, $ff + ld [$d4ea], a + call Func_272f + ld a, [$d4ea] + ld [$d4ec], a + ret + +Func_272f: ; 0x272f + ld a, [wCurrentStage] + call CallInFollowingTable +CallTable_2735: ; 0x2735 + ; STAGE_RED_FIELD_TOP + dw $43E1 + db $05, $00 + + ; STAGE_RED_FIELD_BOTTOM + dw $43F9 + db $05, $00 + + dw $4061 + db $06, $00 + + dw $4062 + db $06, $00 + + ; STAGE_BLUE_FIELD_TOP + dw $4520 + db $07, $00 + + ; STAGE_BLUE_FIELD_BOTTOM + dw $4536 + db $07, $00 + + ; STAGE_GENGAR_BONUS + dw $41B1 + db $06, $00 + + ; STAGE_GENGAR_BONUS + dw $41B1 + db $06, $00 + + ; STAGE_MEWTWO_BONUS + dw $5330 + db $06, $00 + + ; STAGE_MEWTWO_BONUS + dw $5330 + db $06, $00 + + ; STAGE_MEOWTH_BONUS + dw $414D + db $09, $00 + + ; STAGE_MEOWTH_BONUS + dw $414D + db $09, $00 + + ; STAGE_DIGLETT_BONUS + dw $5AB3 + db $06, $00 + + ; STAGE_DIGLETT_BONUS + dw $5AB3 + db $06, $00 + + ; STAGE_SEEL_BONUS + dw $5BBC + db $09, $00 + + ; STAGE_SEEL_BONUS + dw $5BBC + db $09, $00 + +INCBIN "baserom.gbc",$2775,$281c - $2775 + +Func_281c: ; 0x281c + ld a, [wCurrentStage] + call CallInFollowingTable +CallTable_2822: ; 0x2822 + ; STAGE_RED_FIELD_TOP + dw $460E + db $05, $00 + + ; STAGE_RED_FIELD_BOTTOM + dw $4652 + db $05, $00 + + dw $406D + db $06, $00 + + dw $406E + db $06, $00 + + ; STAGE_BLUE_FIELD_TOP + dw $4715 + db $07, $00 + + ; STAGE_BLUE_FIELD_BOTTOM + dw $4769 + db $07, $00 + + ; STAGE_GENGAR_BONUS + dw $4377 + db $06, $00 + + ; STAGE_GENGAR_BONUS + dw $4377 + db $06, $00 + + ; STAGE_MEWTWO_BONUS + dw $5451 + db $06, $00 + + ; STAGE_MEWTWO_BONUS + dw $5451 + db $06, $00 + + ; STAGE_MEOWTH_BONUS + dw $442A + db $09, $00 + + ; STAGE_MEOWTH_BONUS + dw $442A + db $09, $00 + + ; STAGE_DIGLETT_BONUS + dw $5B88 + db $06, $00 + + ; STAGE_DIGLETT_BONUS + dw $5B88 + db $06, $00 + + ; STAGE_SEEL_BONUS + dw $5C5A + db $09, $00 + + ; STAGE_SEEL_BONUS + dw $5C5A + db $09, $00 + +INCBIN "baserom.gbc",$2862,$28a0 - $2862 Func_28a0: ; 0x28a0 ld a, [hli] @@ -3984,7 +4542,175 @@ Func_3579: ; 0x3579 ld [hli], a ret -INCBIN "baserom.gbc",$3582,$4000 - $3582 +Func_3582: ; 0x3582 + call Func_358c + call Func_35f3 + call Func_365a + ret + +Func_358c: ; 0x358c + ld a, [$d7a2] + and a + jr nz, .asm_35d1 + ld hl, wKeyConfigLeftTilt + call Func_b36 + jr z, .asm_35d1 + ld a, [$d7a1] + cp $3 + jr z, .asm_35cc + inc a + ld [$d7a1], a + cp $1 + jr nz, .asm_35af + ld de, $003f + call PlaySoundEffect +.asm_35af + ld a, [$d548] + ld hl, $d549 + and [hl] + jr z, .asm_35bf + ld a, [wBallXPos + 1] + dec a + ld [wBallXPos + 1], a +.asm_35bf + ld a, [$d79f] + inc a + ld [$d79f], a + ld a, $1 + ld [$d7a7], a + ret +.asm_35cc + ld a, $1 + ld [$d7a2], a +.asm_35d1 + xor a + ld [$d7a7], a + ld a, [$d7a1] + and a + jr z, .asm_35e7 + dec a + ld [$d7a1], a + ld a, [$d79f] + dec a + ld [$d79f], a + ret +.asm_35e7 + ld hl, wKeyConfigLeftTilt + call Func_b36 + ret nz + xor a + ld [$d7a2], a + ret + +Func_35f3: ; 0x35f3 + ld a, [$d7a4] + and a + jr nz, .asm_3638 + ld hl, wKeyConfigRightTilt + call Func_b36 + jr z, .asm_3638 + ld a, [$d7a3] + cp $3 + jr z, .asm_3633 + inc a + ld [$d7a3], a + cp $1 + jr nz, .asm_3616 + ld de, $003f + call PlaySoundEffect +.asm_3616 + ld a, [$d548] + ld hl, $d549 + and [hl] + jr z, .asm_3626 + ld a, [wBallXPos + 1] + inc a + ld [wBallXPos + 1], a +.asm_3626 + ld a, [$d79f] + dec a + ld [$d79f], a + ld a, $1 + ld [$d7a8], a + ret +.asm_3633 + ld a, $1 + ld [$d7a4], a +.asm_3638 + xor a + ld [$d7a8], a + ld a, [$d7a3] + and a + jr z, .asm_364e + dec a + ld [$d7a3], a + ld a, [$d79f] + inc a + ld [$d79f], a + ret +.asm_364e + ld hl, wKeyConfigRightTilt + call Func_b36 + ret nz + xor a + ld [$d7a4], a + ret + +Func_365a: ; 0x365a + ld a, [$d7a6] + and a + jr nz, .asm_369f + ld hl, wKeyConfigUpperTilt + call Func_b36 + jr z, .asm_369f + ld a, [$d7a5] + cp $4 + jr z, .asm_369a + inc a + ld [$d7a5], a + cp $1 + jr nz, .asm_367d + ld de, $003f + call PlaySoundEffect +.asm_367d + ld a, [$d548] + ld hl, $d549 + and [hl] + jr z, .asm_368d + ld a, [wBallYPos + 1] + inc a + ld [wBallYPos + 1], a +.asm_368d + ld a, [$d7a0] + dec a + ld [$d7a0], a + ld a, $1 + ld [$d7a9], a + ret +.asm_369a + ld a, $1 + ld [$d7a6], a +.asm_369f + xor a + ld [$d7a9], a + ld a, [$d7a5] + and a + jr z, .asm_36b5 + dec a + ld [$d7a5], a + ld a, [$d7a0] + inc a + ld [$d7a0], a + ret +.asm_36b5 + ld hl, wKeyConfigUpperTilt + call Func_b36 + ret nz + xor a + ld [$d7a6], a + ret + +INCBIN "baserom.gbc",$36c1,$4000 - $36c1 SECTION "bank1", ROMX, BANK[$1] @@ -10232,7 +10958,7 @@ HandlePinballGame: ; 0xd853 PointerTable_d857: ; 0xd857 dw Func_d861 dw Func_d87f - dw $5909 + dw Func_d909 dw $5A36 dw $5AB2 @@ -10312,7 +11038,130 @@ Func_d87f: ; 0xd87f inc [hl] ret -INCBIN "baserom.gbc",$d909,$dbba - $d909 +Func_d909: ; 0xd909 +; main loop for stage logic + xor a + ld [$d7b9], a + ld [$d7eb], a + call ApplyGravityToBall + call Func_2180 + xor a + ld [$d7e9], a + call Func_3582 ; handle tilts + ld a, [wCurrentStage] + bit 0, a + ld [$ff8a], a + ld a, Bank(Func_e0fe) + ld hl, Func_e0fe + call nz, BankSwitch + ld a, [$d7b9] + and a + ld a, [$d7ea] + push af + call Func_22b5 + pop af + jr z, .asm_d93d + ld [$d7ea], a +.asm_d93d + call Func_2720 + call Func_281c + ld hl, wKeyConfigMenu + call IsKeyPressed + jr z, .asm_d95e + ld de, $034c + call PlaySoundEffect + ld [$ff8a], a + ld a, $2 + ld hl, $46d7 + call BankSwitch + jp z, $5a05 +.asm_d95e + ld a, [$d7e9] + and a + jr z, .asm_d9a2 + call $36c1 + call $2299 + ld a, [$d7ea] + call $21e7 + call $222b + ld a, [$d7b9] + and a + jr z, .asm_d993 + ld hl, $d7bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, e + sub l + ld e, a + ld a, d + sbc h + ld d, a + ld hl, $d7ba + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + add l + ld c, a + ld a, b + adc h + ld b, a + jr .asm_d999 +.asm_d993 + ld a, [$d7f8] + and a + jr nz, .asm_d9a2 +.asm_d999 + ld a, [$d7ea] + call $21e5 + call $22a7 +.asm_d9a2 + call $219c + ld [$ff8a], a + ld a, $3 + ld hl, $6ce9 + call BankSwitch + ld [$ff8a], a + ld a, $2 + ld hl, $44b7 + call BankSwitch + call $33e3 + ld a, [$d5cb] + and a + jr nz, .asm_d9e9 + ld [$ff8a], a + ld a, $2 + ld hl, $45c7 + call BankSwitch + ld [$ff8a], a + ld a, $2 + ld hl, $4650 + call BankSwitch + ld [$ff8a], a + ld a, $2 + ld hl, $4645 + call BankSwitch + call $5ba9 + call $5c7c + call $5cb4 +.asm_d9e9 + ld a, [$d57d] + and a + ld [$ff8a], a + ld a, $2 + ld hl, $46a4 + call nz, BankSwitch + ld a, [$d4ae] + and a + ret z + xor a + ld [$d4ae], a + ld hl, wScreenState + inc [hl] + ret + +INCBIN "baserom.gbc",$da05,$dbba - $da05 Func_dbba: ; 0xdbba ld a, $1 @@ -10346,7 +11195,479 @@ Func_dbd4: ; 0xdbd4 ld [$d4a5], a ret -INCBIN "baserom.gbc",$dc00,$e578 - $dc00 +INCBIN "baserom.gbc",$dc00,$e0fe - $dc00 + +Func_e0fe: ; 0xe0fe + xor a + ld [$d7b9], a + ld [$ffbf], a + ld [$d7ba], a + ld [$d7bb], a + call Func_e118 + call Func_e1f0 + ld a, [$d7b9] + and a + call nz, Func_e442 + ret + +Func_e118: ; 0xe118 + call PlayFlipperSoundIfPressed + ld a, [$d7af] + ld [$d7b6], a + ld a, [$d7b3] + ld [$d7b7], a + ld hl, wKeyConfigLeftFlipper + call Func_b36 + ld hl, $fccd + jr z, .asm_e13b + ld a, [$d7be] + and a + jr nz, .asm_e13b + ld hl, $0333 +.asm_e13b + ld a, [$d7af] + and a + jr nz, .asm_e145 + bit 7, h + jr nz, .asm_e14d +.asm_e145 + cp $f + jr nz, .asm_e150 + bit 7, h + jr nz, .asm_e150 +.asm_e14d + ld hl, $0000 +.asm_e150 + ld a, l + ld [$d7b0], a + ld a, h + ld [$d7b1], a + ld a, [$d7ae] + ld c, a + ld a, [$d7af] + ld b, a + add hl, bc + bit 7, h + jr nz, .asm_e16f + ld a, h + cp $10 + jr c, .asm_e172 + ld hl, $0f00 + jr .asm_e172 +.asm_e16f + ld hl, $0000 +.asm_e172 + ld a, l + ld [$d7ae], a + ld a, h + ld [$d7af], a + ld hl, wKeyConfigRightFlipper + call Func_b36 + ld hl, $fccd + jr z, .asm_e18e + ld a, [$d7be] + and a + jr nz, .asm_e18e + ld hl, $0333 +.asm_e18e + ld a, [$d7b3] + and a + jr nz, .asm_e198 + bit 7, h + jr nz, .asm_e1a0 +.asm_e198 + cp $f + jr nz, .asm_e1a3 + bit 7, h + jr nz, .asm_e1a3 +.asm_e1a0 + ld hl, $0000 +.asm_e1a3 + ld a, l + ld [$d7b4], a + ld a, h + ld [$d7b5], a + ld a, [$d7b2] + ld c, a + ld a, [$d7b3] + ld b, a + add hl, bc + bit 7, h + jr nz, .asm_e1c2 + ld a, h + cp $10 + jr c, .asm_e1c5 + ld hl, $0f00 + jr .asm_e1c5 +.asm_e1c2 + ld hl, $0000 +.asm_e1c5 + ld a, l + ld [$d7b2], a + ld a, h + ld [$d7b3], a + ret + +PlayFlipperSoundIfPressed: ; 0xe1ce + ld a, [$d7be] + and a + ret nz + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed + jr z, .asm_e1e2 + ld de, $000c + call PlaySoundEffect + ret +.asm_e1e2 + ld hl, wKeyConfigRightFlipper + call IsKeyPressed + ret z + ld de, $000c + call PlaySoundEffect + ret + +Func_e1f0: ; 0xe1f0 + ld a, [wBallXPos + 1] + cp $50 + jp nc, Func_e226 + ld hl, wBallXPos + ld c, $ba + ld a, [hli] + ld [$ff00+c], a + inc c + ld a, [hli] + ld [$ff00+c], a + inc c + ld a, [hli] + ld [$ff00+c], a + inc c + ld a, [hli] + ld [$ff00+c], a + inc c + ld a, [$d7b6] + ld [$ffc2], a + ld a, [$d7af] + ld [$ffc3], a + call Func_e25a + ld a, [$d7b9] + and a + ret z + ld a, [$d7b0] + ld [$ffc0], a + ld a, [$d7b1] + ld [$ffc1], a + ret + +Func_e226: ; 0xe226 + ld hl, wBallXPos + ld c, $ba + ld a, [hli] + sub $1 + cpl + ld [$ff00+c], a + inc c + ld a, [hli] + sbc $a0 + cpl + ld [$ff00+c], a + inc c + ld a, [hli] + ld [$ff00+c], a + inc c + ld a, [hli] + ld [$ff00+c], a + inc c + ld a, [$d7b7] + ld [$ffc2], a + ld a, [$d7b3] + ld [$ffc3], a + call Func_e25a + ld a, [$d7b9] + and a + ret z + ld a, [$d7b4] + ld [$ffc0], a + ld a, [$d7b5] + ld [$ffc1], a + ret + +Func_e25a: ; 0xe25a + ld a, [$ffbb] + sub $2b + ret c + cp $30 + ret nc + ld [$ffbb], a + ld a, [$ffbd] + sub $7b + ret c + cp $20 + ret nc + ld [$ffbd], a + ld a, [$ffc2] +.asm_e270 + push af + ld l, $0 + ld h, a + sla a + sla h + sla h + add h + ld h, a + ld a, [$ffbb] + ld c, a + ld b, $0 + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b + add hl, bc + ld a, [$ffbd] + ld c, a + ld b, $0 + add hl, bc + ld d, h + ld e, l + ld a, h + cp $40 + jr nc, .asm_e2aa + add $40 + ld h, a + ld a, $3d + jr .asm_e2ac +.asm_e2aa + ld a, $3e +.asm_e2ac + call Func_68f + ld b, a + and a + jr nz, .asm_e2c1 + pop af + ld hl, $ffc3 + cp [hl] + ret z + jr c, .asm_e2be + dec a + jr .asm_e270 +.asm_e2be + inc a + jr .asm_e270 +.asm_e2c1 + pop af + ld a, b + ld [$ffbf], a + ld h, d + ld l, e + ld a, h + cp $20 + jr nc, .asm_e2d3 + add $60 + ld h, a + ld a, $3e + jr .asm_e2d8 +.asm_e2d3 + add $20 + ld h, a + ld a, $3f +.asm_e2d8 + call Func_68f + ld [$d7b8], a + ld a, $1 + ld [$d7b9], a + ret + +INCBIN "baserom.gbc",$e2e4,$e379 - $e2e4 + +Func_e379: ; 0xe379 + ld a, b + xor d + ld [$ffbe], a + bit 7, b + jr z, .asm_e388 + ld a, c + cpl + ld c, a + ld a, b + cpl + ld b, a + inc bc +.asm_e388 + bit 7, d + jr z, .asm_e393 + ld a, e + cpl + ld e, a + ld a, d + cpl + ld d, a + inc de +.asm_e393 + push bc + push de + ld c, d + call Func_e410 + pop de + pop bc + push hl + push bc + push de + ld c, e + call Func_e410 + pop de + pop bc + push hl + push bc + push de + ld b, d + call Func_e410 + pop de + pop bc + push hl + ld b, e + call Func_e410 + ld c, l + ld l, h + xor a + ld h, a + pop de + add hl, de + rl a + pop de + add hl, de + jr nc, .asm_e3bf + inc a +.asm_e3bf + ld b, l + ld l, h + ld h, a + pop de + add hl, de + ld a, [$ffbe] + bit 7, a + ret z + ld a, c + sub $1 + cpl + ld c, a + ld a, b + sbc $0 + cpl + ld b, a + ld a, l + sbc $0 + cpl + ld l, a + ld a, h + sbc $0 + cpl + ld h, a + ret + +INCBIN "baserom.gbc",$e3de,$e410 - $e3de + +Func_e410: ; 0xe410 + ld a, b + cp c + jr nc, .asm_e416 + ld b, c + ld c, a +.asm_e416 + ld h, $3e + ld l, c + ld e, [hl] + inc h + ld d, [hl] + ld l, b + ld a, [hl] + dec h + ld l, [hl] + ld h, a + add hl, de + push af + ld d, $3e + ld a, b + sub c + ld e, a + ld a, [de] + ld c, a + inc d + ld a, [de] + ld b, a + ld a, l + sub c + ld l, a + ld a, h + sbc b + ld h, a + jr nc, .asm_e43c + pop af + ccf + rr h + rr l + ret +.asm_e43c + pop af + rr h + rr l + ret + +Func_e442: ; 0xe442 + ld a, $1 + ld [$d7e9], a + xor a + ld [$d7f3], a + ld [$d7f4], a + ld [$d7f5], a + ld [$d7f6], a + ld [$d7f7], a + ld a, [$ffbf] + sla a + ld c, a + ld b, $0 + ld hl, $6538 ; todo + add hl, bc + ld a, [hli] + ld c, a + ld a, [hl] + ld b, a + ld a, [$ffc0] + ld e, a + ld a, [$ffc1] + ld d, a + sla e + rl d + sla e + rl d + call Func_e379 + ld a, b + ld [$d7bc], a + ld a, l + ld [$d7bd], a + ld a, [$d4b4] + cp $50 + ld a, [$d7b8] + jr c, .asm_e48b + cpl + inc a +.asm_e48b + ld [$d7ea], a + ld a, $1 + ld [$d7eb], a + ld a, [$d7bd] + bit 7, a + ret z + xor a + ld [$d7bc], a + ld [$d7bd], a + ret + +INCBIN "baserom.gbc",$e4a1,$e578 - $e4a1 Func_e578: ; 0xe578 ld a, [wCurrentStage] |