diff options
Diffstat (limited to 'misc/gfx_41.asm')
-rwxr-xr-x | misc/gfx_41.asm | 602 |
1 files changed, 602 insertions, 0 deletions
diff --git a/misc/gfx_41.asm b/misc/gfx_41.asm new file mode 100755 index 000000000..bc49bca11 --- /dev/null +++ b/misc/gfx_41.asm @@ -0,0 +1,602 @@ +Function104000:: ; 104000 + ld hl, Function104006 + jp Function104177 +; 104006 + +Function104006: ; 104006 + decoord 0, 0, AttrMap + ld hl, wBackupAttrMap + call Function104263 + decoord 0, 0 + ld hl, wBackupTilemap + call Function10425f + ld a, $0 + ld [rVBK], a + ld hl, wBackupTilemap + call Function10419d + ld a, $1 + ld [rVBK], a + ld hl, wBackupAttrMap + call Function10419d + ret +; 10402d + +Function10402d:: ; 10402d + ld hl, Function104033 + jp Function104177 +; 104033 + +Function104033: ; 104033 + decoord 0, 0 + ld hl, wBackupTilemap + call Function10425f + ld a, $0 + ld [rVBK], a + ld hl, wBackupTilemap + call Function10419d + ret +; 104047 + +Function104047: ; 104047 + ld hl, Function10404d + jp Function104177 +; 10404d + +Function10404d: ; 10404d + decoord 0, 0, AttrMap + ld hl, wBackupAttrMap + call Function104263 + ld a, $1 + ld [rVBK], a + ld hl, wBackupAttrMap + call Function10419d + ret +; 104061 + +ReloadMapPart:: ; 104061 + ld hl, Function104067 + jp Function104177 +; 104067 + +Function104067: ; 104067 + decoord 0, 0, AttrMap + ld hl, wBackupAttrMap + call Function104263 + decoord 0, 0 + ld hl, wBackupTilemap + call Function10425f + call DelayFrame + di + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, wBackupAttrMap + call Function1041ad + ld a, $0 + ld [rVBK], a + ld hl, wBackupTilemap + call Function1041ad + pop af + ld [rVBK], a + ei + ret + +Function104099: ; 104099 + ld hl, ReloadMapPart ; useless + ld hl, Function1040a2 + jp Function104177 +; 1040a2 + +Function1040a2: ; 1040a2 + decoord 0, 0, AttrMap + ld hl, wBackupAttrMap + call Function104263 + decoord 0, 0 + ld hl, wBackupTilemap + call Function10425f + call DelayFrame + di + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, wBackupAttrMap + call Function1041c1 + ld a, $0 + ld [rVBK], a + ld hl, wBackupTilemap + call Function1041c1 + pop af + ld [rVBK], a + ei + ret +; 1040d4 + +Function1040d4: ; 1040d4 + ld hl, Function1040da + jp Function104177 +; 1040da + +Function1040da: ; 1040da + ld a, $1 + ld [rVBK], a + ld a, $3 + ld [rSVBK], a + ld de, w3_d800 + ld a, [hBGMapAddress + 1] + ld [rHDMA1], a + ld a, [hBGMapAddress] + ld [rHDMA2], a + ld a, d + ld [rHDMA3], a + ld a, e + ld [rHDMA4], a + ld a, $23 + ld [hDMATransfer], a + call Function1041a4 + ret +; 1040fb + +Function1040fb: ; 1040fb + ld hl, Function104101 + jp Function104177 +; 104101 + +Function104101: ; 104101 + ld a, $1 + ld [rVBK], a + ld a, $3 + ld [rSVBK], a + ld hl, w3_d800 + call Function10419d + ret +; 104110 + +Function104110:: ; 104110 + ld hl, Function104116 + jp Function104177 +; 104116 + +Function104116: ; 104116 + decoord 0, 0, AttrMap + ld hl, wBackupAttrMap + call Function104263 + decoord 0, 0 + ld hl, wBackupTilemap + call Function10425f + call DelayFrame + di + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, wBackupAttrMap + call Function1041b7 + ld a, $0 + ld [rVBK], a + ld hl, wBackupTilemap + call Function1041b7 + pop af + ld [rVBK], a + ei + ret +; 104148 + +Function104148: ; 104148 (41:4148) + ld hl, Function10414e + jp Function104177 +; 10414e (41:414e) + +Function10414e: ; 10414e + decoord 0, 0, AttrMap + ld hl, wBackupAttrMap + call Function104263 + ld c, $ff + decoord 0, 0 + ld hl, wBackupTilemap + call Function104265 + ld a, $1 + ld [rVBK], a + ld hl, wBackupAttrMap + call Function1041ad + ld a, $0 + ld [rVBK], a + ld hl, wBackupTilemap + call Function1041ad + ret +; 104177 + +Function104177: ; 104177 + ld a, [hBGMapMode] + push af + ld a, [hMapAnims] + push af + xor a + ld [hBGMapMode], a + ld [hMapAnims], a + ld a, [rSVBK] + push af + ld a, 6 + ld [rSVBK], a + ld a, [rVBK] + push af + call ._hl_ + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + pop af + ld [hMapAnims], a + pop af + ld [hBGMapMode], a + ret +; 10419c + +._hl_: ; 10419c + jp [hl] +; 10419d + + +Function10419d: ; 10419d (41:419d) + call Function10424e + ld a, $23 + ld [hDMATransfer], a + +Function1041a4: ; 104a14 +.asm_1041a4 + call DelayFrame + ld a, [hDMATransfer] + and a + jr nz, .asm_1041a4 + ret + +Function1041ad: ; 1041ad (41:41ad) + ld a, [hBGMapAddress + 1] + ld d, a + ld a, [hBGMapAddress] + ld e, a + ld c, $24 + jr Function104209 + +Function1041b7: ; 1041b7 (41:41b7) + ld a, [hBGMapAddress + 1] + ld d, a + ld a, [hBGMapAddress] + ld e, a + ld c, $24 + jr asm_104205 +; 1041c1 (41:41c1) + +Function1041c1: ; 1041c1 + ld a, [hBGMapAddress + 1] + ld d, a + ld a, [hBGMapAddress] + ld e, a + ld c, $24 + ld a, h + ld [rHDMA1], a + ld a, l + and $f0 + ld [rHDMA2], a + ld a, d + and $1f + ld [rHDMA3], a + ld a, e + and $f0 + ld [rHDMA4], a + ld a, c + dec c + or $80 + ld b, a + ld a, $7f + sub c + ld d, a +.loop1 + ld a, [rLY] + cp d + jr nc, .loop1 +.loop2 + ld a, [rSTAT] + and $3 + jr z, .loop2 + ld a, b + ld [rHDMA5], a + ld a, [rLY] + inc c + ld hl, rLY +.loop3 + cp [hl] + jr z, .loop3 + ld a, [hl] + dec c + jr nz, .loop3 + ld hl, rHDMA5 + res 7, [hl] + ret +; 104205 + +asm_104205: + ld b, $7b + jr asm_10420b + + +Function104209: +; LY magic + ld b, $7f +asm_10420b: + ld a, h + ld [rHDMA1], a + ld a, l + and $f0 ; high nybble + ld [rHDMA2], a + ld a, d + and $1f ; lower 5 bits + ld [rHDMA3], a + ld a, e + and $f0 ; high nybble + ld [rHDMA4], a + ld a, c + dec c + or $80 ; set 7, a + ld e, a + ld a, b + sub c + ld d, a +.ly_loop + ld a, [rLY] + cp d + jr nc, .ly_loop + + di +.rstat_loop_1 + ld a, [rSTAT] + and $3 + jr nz, .rstat_loop_1 +.rstat_loop_2 + ld a, [rSTAT] + and $3 + jr z, .rstat_loop_2 + ld a, e + ld [rHDMA5], a + ld a, [rLY] + inc c + ld hl, rLY +.final_ly_loop + cp [hl] + jr z, .final_ly_loop + ld a, [hl] + dec c + jr nz, .final_ly_loop + ld hl, rHDMA5 + res 7, [hl] + ei + + ret +; 10424e + + +Function10424e: ; 10424e (41:424e) + ld a, h + ld [rHDMA1], a + ld a, l + ld [rHDMA2], a + ld a, [hBGMapAddress + 1] + and $1f + ld [rHDMA3], a + ld a, [hBGMapAddress] + ld [rHDMA4], a + ret + +Function10425f: ; 10425f (41:425f) + ld c, " " + jr Function104265 + +Function104263: ; 104263 (41:4263) + ld c, $0 + +Function104265: ; 104265 (41:4265) +; back up the value of c to hMapObjectIndexBuffer + ld a, [hMapObjectIndexBuffer] + push af + ld a, c + ld [hMapObjectIndexBuffer], a + +; for each row on the screen + ld c, SCREEN_HEIGHT +.loop1 +; for each tile in the row + ld b, SCREEN_WIDTH +.loop2 +; copy from de to hl + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .loop2 + +; load the original value of c into hl 12 times + ld a, [hMapObjectIndexBuffer] + ld b, 12 +.loop3 + ld [hli], a + dec b + jr nz, .loop3 + + dec c + jr nz, .loop1 + +; restore the original value of hMapObjectIndexBuffer + pop af + ld [hMapObjectIndexBuffer], a + ret + + +_Get2bpp:: ; 104284 + ; 2bpp when [rLCDC] & $80 + ; switch to WRAM bank 6 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + + push bc + push hl + + ; Copy c tiles of the 2bpp from b:de to wBackupTilemap + ld a, b ; bank + ld l, c ; number of tiles + ld h, $0 +rept 4 + add hl, hl ; multiply by 16 (16 bytes of a 2bpp = 8 x 8 tile) +endr + ld b, h + ld c, l + ld h, d ; address + ld l, e + ld de, wBackupTilemap + call FarCopyBytes + + pop hl + pop bc + + push bc + call DelayFrame + pop bc + + ld d, h + ld e, l + ld hl, wBackupTilemap + call Function104209 + + ; restore the previous bank + pop af + ld [rSVBK], a + ret +; 1042b2 + +_Get1bpp:: ; 1042b2 + ; 1bpp when [rLCDC] & $80 +.loop + ld a, c + cp $10 + jp c, .bankswitch + jp z, .bankswitch + push bc + push hl + push de + ld c, $10 + call .bankswitch + pop de + ld hl, $80 + add hl, de + ld d, h + ld e, l + pop hl + lb bc, 1, 0 + add hl, bc + pop bc + ld a, c + sub $10 + ld c, a + jr .loop +; 1042d6 + +.bankswitch: ; 1042d6 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + + push bc + push hl + + ld a, b + ld l, c + ld h, $0 +rept 3 + add hl, hl ; multiply by 8 +endr + ld c, l + ld b, h + ld h, d + ld l, e + ld de, wBackupTilemap + call FarCopyBytesDouble_DoubleBankSwitch + + pop hl + pop bc + + push bc + call DelayFrame + pop bc + + ld d, h + ld e, l + ld hl, wBackupTilemap + call Function104209 + + pop af + ld [rSVBK], a + ret +; 104303 + +Function104303: ; 104303 + ld hl, Function104309 + jp Function104177 +; 104309 + +Function104309: + ld hl, wBackupTilemap + decoord 0, 0 + call Function10433a + ld hl, wBackupTilemap + $80 + decoord 0, 0, AttrMap + call Function10433a + ld a, $1 + ld [rVBK], a + ld c, $8 + ld hl, wBackupTilemap + $80 + debgcoord 0, 0, VBGMap1 + call Function104209 + ld a, $0 + ld [rVBK], a + ld c, $8 + ld hl, wBackupTilemap + debgcoord 0, 0, VBGMap1 + call Function104209 + ret + +Function10433a: ; 10433a (41:433a) + ld b, 4 +.outer_loop + ld c, SCREEN_WIDTH +.inner_loop + ld a, [de] + ld [hli], a + inc de + dec c + jr nz, .inner_loop + ld a, l + add $20 - SCREEN_WIDTH + ld l, a + ld a, h + adc $0 + ld h, a + dec b + jr nz, .outer_loop + ret +; 104350 + +ShockEmote: INCBIN "gfx/emotes/shock.2bpp" +QuestionEmote: INCBIN "gfx/emotes/question.2bpp" +HappyEmote: INCBIN "gfx/emotes/happy.2bpp" +SadEmote: INCBIN "gfx/emotes/sad.2bpp" +HeartEmote: INCBIN "gfx/emotes/heart.2bpp" +BoltEmote: INCBIN "gfx/emotes/bolt.2bpp" +SleepEmote: INCBIN "gfx/emotes/sleep.2bpp" +FishEmote: INCBIN "gfx/emotes/fish.2bpp" +JumpShadowGFX: INCBIN "gfx/misc/shadow.2bpp" +FishingRodGFX2: INCBIN "gfx/misc/fishing2.2bpp" +BoulderDustGFX: INCBIN "gfx/misc/boulderdust.2bpp" +FishingRodGFX4: INCBIN "gfx/misc/fishing4.2bpp" |