diff options
author | libjet <libj3t@gmail.com> | 2020-02-19 16:23:56 +0000 |
---|---|---|
committer | libjet <libj3t@gmail.com> | 2020-02-19 16:23:56 +0000 |
commit | 4f1d434564bf3b6c1c469ebb3e33e1475d7e2136 (patch) | |
tree | 9dd335ebacb66ca3254aff468f3a951bbebec8c9 /home/tilemap.asm | |
parent | b1a35aa1770c7972fdb6e7af50ad529118b972d2 (diff) |
Add home/tilemap.asm and update home/menu.asm
Diffstat (limited to 'home/tilemap.asm')
-rwxr-xr-x | home/tilemap.asm | 415 |
1 files changed, 178 insertions, 237 deletions
diff --git a/home/tilemap.asm b/home/tilemap.asm index ecced960..cac86189 100755 --- a/home/tilemap.asm +++ b/home/tilemap.asm @@ -1,260 +1,201 @@ -SetMenuAttributes:: ; 1a4e - push hl - push bc - ld hl, w2DMenuCursorInitY - ld b, $8 -.asm_1a55 - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_1a55 - ld a, $1 - ld [hli], a - ld [hli], a +ClearBGPalettes:: + call ClearPalettes +WaitBGMap:: +; Tell VBlank to update BG Map + ld a, 1 ; BG Map 0 tiles + ldh [hBGMapMode], a +; Wait for it to do its magic + ld c, 4 + call DelayFrames + ret + +WaitBGMap2:: + ldh a, [hCGB] + and a + jr z, .bg0 + + ld a, 2 + ldh [hBGMapMode], a + ld c, 4 + call DelayFrames + +.bg0 + ld a, 1 + ldh [hBGMapMode], a + ld c, 4 + call DelayFrames + ret + +IsCGB:: + ldh a, [hCGB] + and a + ret + +ApplyTilemap:: + ldh a, [hCGB] + and a + jr z, .dmg + + ld a, [wSpriteUpdatesEnabled] + cp 0 + jr z, .dmg + + ld a, 1 + ldh [hBGMapMode], a + jr CopyTilemapAtOnce + +.dmg +; WaitBGMap + ld a, 1 + ldh [hBGMapMode], a + ld c, 4 + call DelayFrames + ret + +CGBOnly_CopyTilemapAtOnce:: + ldh a, [hCGB] + and a + jr z, WaitBGMap + +CopyTilemapAtOnce:: + ldh a, [hBGMapMode] + push af xor a - ld [hli], a - ld [hli], a - ld [hli], a - pop bc - pop hl - ret - -StaticMenuJoypad:: ; 1a66 (0:1a66) - callfar StaticMenuJoypad_ - call GetMenuJoypad - ret - -ScrollingMenuJoypad:: ; 1a70 (0:1a70) - callfar ScrollingMenuJoypad_ - call GetMenuJoypad - ret + ldh [hBGMapMode], a -GetMenuJoypad:: ; 1a7a (0:1a7a) - push bc + ldh a, [hMapAnims] push af - ldh a, [hJoyLast] - and D_PAD - ld b, a - ldh a, [hJoyPressed] - and BUTTONS - or b - ld b, a - pop af - ld a, b - pop bc - ret - -PlaceHollowCursor:: - ld hl, wCursorCurrentTile - ld a, [hli] - ld h, [hl] - ld l, a - ld [hl], "▷" - ret - -HideCursor:: - ld hl, wCursorCurrentTile - ld a, [hli] - ld h, [hl] - ld l, a - ld [hl], " " - ret - -PushWindow:: ; 1a9d (0:1a9d) - callfar PushWindow_ - ret + xor a + ldh [hMapAnims], a + +.wait + ldh a, [rLY] + cp $7f + jr c, .wait + + di + ld a, BANK(vTiles3) + ldh [rVBK], a + hlcoord 0, 0, wAttrMap + call .StackPointerMagic + ld a, BANK(vTiles0) + ldh [rVBK], a + hlcoord 0, 0 + call .StackPointerMagic + +.wait2 + ldh a, [rLY] + cp $7f + jr c, .wait2 + ei -ExitMenu:: ; 1aa4 (0:1aa4) - push af - callfar ExitMenu_ pop af - ret - -InitVerticalMenuCursor:: ; 1aad (0:1aad) - callfar InitVerticalMenuCursor_ - ret - -CloseWindow:: ; 1ab4 (0:1ab4) - push af - call ExitMenu - call ApplyTilemap - call UpdateSprites + ldh [hMapAnims], a pop af + ldh [hBGMapMode], a ret -RestoreTileBackup:: - call MenuBoxCoord2Tile - call GetMenuBoxDims - inc b - inc c -.asm_1ac8 - push bc - push hl -.asm_1aca - ld a, [de] - ld [hli], a - dec de - dec c - jr nz, .asm_1aca - pop hl - ld bc, $14 - add hl, bc - pop bc - dec b - jr nz, .asm_1ac8 - ret - -PopWindow:: - ld b, wMenuDataHeaderEnd - wMenuDataHeader - ld de, wMenuDataHeader -.asm_1adf - ld a, [hld] - ld [de], a - inc de - dec b - jr nz, .asm_1adf +.StackPointerMagic: +; Copy all tiles to vBGMap + ld [hSPBuffer], sp + ld sp, hl + ldh a, [hBGMapAddress + 1] + ld h, a + ld l, 0 + ld a, SCREEN_HEIGHT + ldh [hTilesPerCycle], a + ld b, 1 << 1 ; not in v/hblank + ld c, LOW(rSTAT) + +.loop +rept SCREEN_WIDTH / 2 + pop de +; if in v/hblank, wait until not in v/hblank +.loop\@ + ldh a, [c] + and b + jr nz, .loop\@ +; load BGMap0 + ld [hl], e + inc l + ld [hl], d + inc l +endr + + ld de, BG_MAP_WIDTH - SCREEN_WIDTH + add hl, de + ldh a, [hTilesPerCycle] + dec a + ldh [hTilesPerCycle], a + jr nz, .loop + + ldh a, [hSPBuffer] + ld l, a + ldh a, [hSPBuffer + 1] + ld h, a + ld sp, hl ret -GetMenuBoxDims:: ; 1ae6 (0:1ae6) - ld a, [wMenuBorderTopCoord] - ld b, a - ld a, [wMenuBorderBottomCoord] - sub b - ld b, a - ld a, [wMenuBorderLeftCoord] - ld c, a - ld a, [wMenuBorderRightCoord] - sub c - ld c, a +SetPalettes:: +; Inits the Palettes +; depending on the system the monochromes palettes or color palettes + ldh a, [hCGB] + and a + jr nz, .SetPalettesForGameBoyColor + ld a, %11100100 + ldh [rBGP], a + ld a, %11010000 + ldh [rOBP0], a + ldh [rOBP1], a ret -CopyMenuData2:: ; 1af9 (0:1af9) - push hl +.SetPalettesForGameBoyColor: push de - push bc - push af - ld hl, wMenuData2Pointer - ld a, [hli] - ld h, [hl] - ld l, a - ld de, wMenuData2 - ld bc, wMenuData2End - wMenuData2 - call CopyBytes - pop af - pop bc + ld a, %11100100 + call DmgToCgbBGPals + lb de, %11100100, %11100100 + call DmgToCgbObjPals pop de - pop hl ret -GetWindowStackTop:: - ld hl, wWindowStackPointer - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - ret +ClearPalettes:: +; Make all palettes white -PlaceVerticalMenuItems:: ; 1b1c (0:1b1c) - call CopyMenuData2 - ld hl, wMenuData2Pointer - ld e, [hl] - inc hl - ld d, [hl] - call GetMenuTextStartCoord - call Coord2Tile - inc de - ld a, [de] - inc de - ld b, a -.asm_1b2f - push bc - call PlaceString - inc de - ld bc, 2 * SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .asm_1b2f - ld a, [wMenuData2Flags] - bit 4, a - ret z - call MenuBoxCoord2Tile - ld a, [de] - ld c, a - inc de - ld b, $0 - add hl, bc - jp PlaceString - -MenuBox:: ; 1b4e (0:1b4e) - call MenuBoxCoord2Tile - call GetMenuBoxDims - dec b - dec c - jp Textbox +; CGB: make all the palette colors white + ldh a, [hCGB] + and a + jr nz, .cgb -GetMenuTextStartCoord:: ; 1b59 (0:1b59) - ld a, [wMenuBorderTopCoord] - ld b, a - inc b - ld a, [wMenuBorderLeftCoord] - ld c, a - inc c - ld a, [wMenuData2Flags] - bit 6, a - jr nz, .asm_1b6b - inc b -.asm_1b6b - ld a, [wMenuData2Flags] - bit 7, a - jr z, .asm_1b73 - inc c -.asm_1b73 +; DMG: just change palettes to 0 (white) + xor a + ldh [rBGP], a + ldh [rOBP0], a + ldh [rOBP1], a ret -ClearMenuBoxInterior:: - call MenuBoxCoord2Tile - ld bc, SCREEN_WIDTH + 1 - add hl, bc - call GetMenuBoxDims - dec b - dec c - call ClearBox +.cgb +; Fill wBGPals and wOBPals with $ffff (white) + ld hl, wBGPals + ld bc, 16 palettes + ld a, $ff + call ByteFill +; Request palette update + ld a, 1 + ldh [hCGBPalUpdate], a ret -ClearWholeMenuBox:: - call MenuBoxCoord2Tile - call GetMenuBoxDims - inc c - inc b - call ClearBox - ret +GetMemSGBLayout:: + ld b, SCGB_RAM +GetSGBLayout:: +; load sgb packets unless dmg -MenuBoxCoord2Tile:: ; 1b90 (0:1b90) - ld a, [wMenuBorderLeftCoord] - ld c, a - ld a, [wMenuBorderTopCoord] - ld b, a -Coord2Tile:: ; 1b98 (0:1b98) - xor a - ld h, a - ld l, b - ld a, c - ld b, h - ld c, l - add hl, hl - add hl, hl - add hl, bc - add hl, hl - add hl, hl - ld c, a - xor a - ld b, a - add hl, bc - ld bc, wTileMap - add hl, bc - ret + ldh a, [hCGB] + and a + jr nz, .sgb + + ldh a, [hSGB] + and a + ret z + +.sgb + predef_jump LoadSGBLayout
\ No newline at end of file |