summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTauwasser <Tauwasser@tauwasser.eu>2018-06-12 22:11:39 +0200
committerTauwasser <Tauwasser@tauwasser.eu>2018-06-12 22:12:54 +0200
commit6ab74f98847a211d81683d55548235fcb776b9c9 (patch)
treee75546774d10736e7ad2bd97247866e38045e36a
parent4ff0c9d5de5c504d5069f2ddc75c2b82241c1d6d (diff)
home, wram, gfx: split toolgear functions from unknown, rename gfx functions, add wram variables
Signed-off-by: Tauwasser <Tauwasser@tauwasser.eu>
-rw-r--r--engine/gfx.asm10
-rw-r--r--home/copy2.asm4
-rw-r--r--home/map.asm8
-rw-r--r--home/toolgear.asm188
-rw-r--r--home/unknown.asm139
-rw-r--r--home/vcopy.asm12
-rw-r--r--home/window.asm2
-rw-r--r--wram.asm19
8 files changed, 221 insertions, 161 deletions
diff --git a/engine/gfx.asm b/engine/gfx.asm
index 66b3f90..b97d2f5 100644
--- a/engine/gfx.asm
+++ b/engine/gfx.asm
@@ -23,11 +23,11 @@ LoadPokemonMenuGraphics:: ; f8026 (3e:4026)
lb bc, BANK(BattleHPBarGFX), ((LevelUpGFXEnd - BattleHPBarGFX) / LEN_2BPP_TILE)
call Get2bpp
jr LoadActiveFrameGraphics
-LoadHexadecimalFontOrHUDGraphics:: ; f8034 (3e:4034)
+LoadToolgearGraphicsDebug:: ; f8034 (3e:4034)
call LoadActiveFrameGraphics
ld hl, $d153
bit 0, [hl]
- jr z, LoadHudGraphics
+ jr z, .loadToolgearGraphics
ld hl, $9660
ld de, FontGFX + (("0" - "ア") * $08)
lb bc, BANK(FontGFX), ("9" - "0" + 1)
@@ -37,14 +37,14 @@ LoadHexadecimalFontOrHUDGraphics:: ; f8034 (3e:4034)
lb bc, BANK(FontExtraAB_GFX), ("F" - "A" + 1)
call Get2bpp
ret
-LoadHudGraphics:: ; f8057 (3e:4057)
+.loadToolgearGraphics:: ; f8057 (3e:4057)
ld hl, $9660
ld de, FontGFX + (("0" - "ア") * $08)
lb bc, BANK(FontGFX), ("9" - "0" + 1)
call Get1bpp
ld hl, $9700
- ld de, $7381
- ld bc, $0401
+ ld de, TrainerCardColonGFX
+ lb bc, BANK(TrainerCardColonGFX), 1 ; tile
call Get2bpp
ld hl, $9710
ld de, HUD_GFX
diff --git a/home/copy2.asm b/home/copy2.asm
index 7cc4696..9baad62 100644
--- a/home/copy2.asm
+++ b/home/copy2.asm
@@ -14,8 +14,8 @@ LoadFontsBattleExtra::
LoadFontExtra:: ; 00:0d1a
jpab LoadFontExtraGraphicsWithCursor
-LoadFontExtra2::
- jpab LoadHexadecimalFontOrHUDGraphics
+LoadToolgearGraphics::
+ jpab LoadToolgearGraphicsDebug
FarCopyData: ; d2a (0:d2a)
; Identical to FarCopyBytes except for tail call optimization
diff --git a/home/map.asm b/home/map.asm
index 9078f64..d17cae3 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -437,7 +437,7 @@ InitializeVisibleSprites:: ; 23dc
ret
FadeIn:: ; 23e5 ; This is not OverworldFadeIn, but I don't know what it is
- call Function202c ; TODO
+ call InitToolgearBuffer
call RefreshTiles
ld hl, wVramState
set 0, [hl]
@@ -1699,9 +1699,9 @@ Function2ba8:: ; 00:2ba8
call Bankswitch
call _UpdateSprites
call DelayFrame
- call Function2075
- ld hl, wd14f
- set 2, [hl]
+ call UpdateToolgear
+ ld hl, wToolgearFlags
+ set 2, [hl] ; transfer toolgear to window
call DelayFrame
pop af
call Bankswitch
diff --git a/home/toolgear.asm b/home/toolgear.asm
new file mode 100644
index 0000000..2dfdee7
--- /dev/null
+++ b/home/toolgear.asm
@@ -0,0 +1,188 @@
+INCLUDE "constants.asm"
+
+SECTION "Toolgear drawing functions", ROM0[$2018]
+
+; local charmap, global charmap won't apply
+; see https://github.com/rednex/rgbds/issues/265#issuecomment-395229694
+ charmap "0", $66
+ charmap "1", $67
+ charmap "2", $68
+ charmap "3", $69
+ charmap "4", $6a
+ charmap "5", $6b
+ charmap "6", $6c
+ charmap "7", $6d
+ charmap "8", $6e
+ charmap "9", $6f
+ ; if debug coords shown
+ charmap "A", $70
+ charmap "B", $71
+ charmap "C", $72
+ charmap "D", $73
+ charmap "E", $74
+ charmap "F", $75
+ ; small kana aren't actively loaded
+
+ ; if clock shown
+ charmap ":", $70
+ charmap "日", $71
+ charmap "月", $72
+ charmap "火", $73
+ charmap "水", $74
+ charmap "木", $75
+ charmap "金", $76
+ charmap "土", $77
+ charmap "⚡", $78 ; power
+ charmap "☎", $79 ; mobile
+
+ ; active frame
+ charmap "┌", $79 ; only if debug coords shown
+ charmap "─", $7a
+ charmap "┐", $7b
+ charmap "│", $7c
+ charmap "└", $7d
+ charmap "┘", $7e
+ charmap " ", $7f
+
+EnableToolgear:: ; 00:2018
+ ld hl, wd153
+ res 0, [hl]
+ ld hl, wToolgearFlags
+ set 0, [hl]
+ ret
+
+DisableToolgear:: ; 00:2023
+ ld hl, wToolgearFlags
+ res 0, [hl]
+ xor a
+ ldh [hLCDCPointer], a
+ ret
+
+InitToolgearBuffer:: ; 00:202c
+ xor a
+ ldh [hBGMapMode], a
+ ld hl, wToolgearFlags
+ bit 0, [hl]
+ jr z, .hide_window
+
+ res 7, [hl]
+ call LoadToolgearGraphics
+
+ bgcoord hl, 0, 0, wToolgearBuffer
+ ld a, "─"
+ ld bc, SCREEN_WIDTH
+ call ByteFill
+
+ bgcoord hl, 0, 1, wToolgearBuffer
+ ld a, " "
+ ld bc, SCREEN_WIDTH
+ call ByteFill
+
+ call UpdateToolgear
+
+ ld hl, vBGMap1
+ ld bc, $0004 ; 4 tiles = 2 rows
+ bgcoord de, 0, 0, wToolgearBuffer
+ call Get2bpp
+
+ ld a, $80
+ ldh [hLCDCPointer], a
+ ld a, $80
+ ldh [rWY], a
+ ldh [hWY], a
+ ret
+
+.hide_window: ; 00:206b
+ xor a
+ ldh [hLCDCPointer], a
+ ld a, $90
+ ldh [rWY], a
+ ldh [hWY], a
+ ret
+
+UpdateToolgear:: ; 2075
+; Prepares a buffer for the clock display, which in the Debug ROM is displayed on the bottom of the screen.
+; This function is called every frame, and loads special tiles into the $66-$7a space.
+ bgcoord hl, 0, 1, wToolgearBuffer
+ ld bc, SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+
+if DEBUG
+ ld hl, wd153
+ bit 0, [hl]
+ jr z, .debug_show_time
+ ld hl, wXCoord
+ bgcoord de, 4, 1, wToolgearBuffer
+ ld c, $01
+ call .printHex
+ ld hl, wYCoord
+ bgcoord de, 8, 1, wToolgearBuffer
+ ld c, $01
+ call .printHex
+ ret
+.debug_show_time:
+endc
+
+ ld hl, hRTCHours
+ bgcoord de, 0, 1, wToolgearBuffer
+ call .printDec
+ ld hl, hRTCMinutes
+ bgcoord de, 3, 1, wToolgearBuffer
+ call .printDec
+ ldh a, [hRTCDays]
+ and 7
+ add "日" ; Sunday
+ ldbgcoord_a 6, 1, wToolgearBuffer
+ ld a, "⚡" ; power
+ ldbgcoord_a 9, 1, wToolgearBuffer
+ inc a ; mobile
+ ldbgcoord_a 11, 1, wToolgearBuffer
+ ldh a, [hRTCSeconds]
+ and 1
+ ret z
+ ld a, $70 ; :
+ ldbgcoord_a 2, 1, wToolgearBuffer
+ ret
+
+.printHex:: ; 20cd
+; .printHex
+; print c hexadecimal digits from hl to de
+; clobbers: a, b
+ ld a, [hli]
+ ld b, a
+ swap a
+ call .printDigit
+ ld a, b
+ call .printDigit
+ dec c
+ jr nz, .printHex
+ ret
+
+.printDec:: ; 20dc
+; .printDec
+; print c decimal digits from hl to de
+; clobbers: a, b
+ ld a, [hli]
+ ld b, 0
+.mod10:
+ inc b
+ sub 10
+ jr nc, .mod10
+ dec b
+ add 10
+ push af
+ ld a, b
+ call .printDigit
+ pop af
+ call .printDigit
+ ret
+
+.printDigit:: ; 20f1
+; .printDigit
+; print a hexadecimal digit for value in a to de
+ and $0f
+ add "0"
+ ld [de], a
+ inc de
+ ret \ No newline at end of file
diff --git a/home/unknown.asm b/home/unknown.asm
index cc181e0..6568b5d 100644
--- a/home/unknown.asm
+++ b/home/unknown.asm
@@ -39,149 +39,14 @@ _2007:: ; 2007
call CloseSRAM
ret
-Function2018::
- ld hl, wd153
- res 0, [hl]
- ld hl, wd14f
- set 0, [hl]
- ret
-
-Function2023::
- ld hl, wd14f
- res 0, [hl]
- xor a
- ldh [hLCDCPointer], a
- ret
-
-Function202c:: ; 00:202c
- xor a
- ldh [hBGMapMode], a
- ld hl, wd14f
- bit 0, [hl]
- jr z, .asm_206b
-
- res 7, [hl]
- call LoadFontExtra2
-
- ld hl, wcbb2
- ld a, "─"
- ld bc, SCREEN_WIDTH
- call ByteFill
-
- ld hl, wcbd2
- ld a, " "
- ld bc, SCREEN_WIDTH
- call ByteFill
-
- call Function2075
-
- ld hl, vBGMap1
- ld bc, $4
- ld de, wcbb2
- call Get2bpp
-
- ld a, $80
- ldh [hLCDCPointer], a
- ld a, $80
- ldh [rWY], a
- ldh [hWY], a
- ret
-
-.asm_206b: ; 00:206b
- xor a
- ldh [hLCDCPointer], a
- ld a, $90
- ldh [rWY], a
- ldh [hWY], a
- ret
-
-UpdateToolgear:: ; 2075
-; Prepares a buffer for the clock display, which in the Debug ROM is displayed on the bottom of the screen.
-; This function is called every frame, and loads special tiles into the $66-$7a space.
- ld hl, wcbd2
- ld bc, SCREEN_WIDTH
- ld a, " "
- call ByteFill
-
-if DEBUG
- ld hl, wd153
- bit 0, [hl]
- jr z, ._209e
- ld hl, $d65b
- ld de, wcbd2 + 4
- ld c, $01
- call _20CD
- ld hl, $d65a
- ld de, wcbd2 + 8
- ld c, $01
- call _20CD
- ret
-._209e:
-endc
-
- ld hl, hRTCHours
- ld de, wcbd2
- call _20DC
- ld hl, hRTCMinutes
- ld de, wcbd2 + 3
- call _20DC
- ldh a, [hRTCDays]
- and 7
- add $71 ; Sunday
- ld [wcbd2 + 6], a
- ld a, $78 ; power
- ld [wcbd2 + 9], a
- inc a ; mobile
- ld [wcbd2 + 11], a
- ldh a, [hRTCSeconds]
- and 1
- ret z
- ld a, $70 ; :
- ld [wcbd2 + 2], a
- ret
-
-_20CD:: ; 20cd
-; PrintAsHex
- ld a, [hli]
- ld b, a
- swap a
- call _20F1
- ld a, b
- call _20F1
- dec c
- jr nz, _20CD
- ret
-
-_20DC:: ; 20dc
-; PrintAsDec
- ld a, [hli]
- ld b, 0
-._20df:
- inc b
- sub 10
- jr nc, ._20df
- dec b
- add 10
- push af
- ld a, b
- call _20F1
- pop af
- call _20F1
- ret
-
-_20F1:: ; 20f1
- and %1111
- add $66 ; digit 0
- ld [de], a
- inc de
- ret
+SECTION "Unknown_20f8", ROM0[$20F8]
Function20f8::
call Function1848
call Function18cc
ret
-SECTION "Unknown_094c", ROM0 [$094C]
+SECTION "Unknown_094c", ROM0[$094C]
Function094c::
ldh a, [hROMBank]
diff --git a/home/vcopy.asm b/home/vcopy.asm
index 72fe062..91c2395 100644
--- a/home/vcopy.asm
+++ b/home/vcopy.asm
@@ -544,8 +544,10 @@ EnableSprites:: ; 1531 (0:1531)
ret
; 0x1538
-Function1538: ; 1538 (0:1538)
- ld a, [$d14f]
+TransferToolgearRow: ; 1538 (0:1538)
+; TransferToolgearRow
+; Copy second line of toolgear to window
+ ld a, [wToolgearFlags]
bit 0, a
ret z
bit 7, a
@@ -553,11 +555,11 @@ Function1538: ; 1538 (0:1538)
bit 2, a
res 2, a
ret z
- ld [$d14f], a
+ ld [wToolgearFlags], a
ld [hSPTemp], sp
- ld hl, $cbd2
+ bgcoord hl, 0, 1, wToolgearBuffer
ld sp, hl
- ld hl, $9c20
+ bgcoord hl, 0, 1, vBGMap1
ld a, $01
jp TransferBgRows
diff --git a/home/window.asm b/home/window.asm
index 1815e89..c2dc212 100644
--- a/home/window.asm
+++ b/home/window.asm
@@ -19,5 +19,5 @@ RefreshScreen::
Function1fea::
call Function3171
call ClearWindowData
- call Function202c
+ call InitToolgearBuffer
ret
diff --git a/wram.asm b/wram.asm
index 9ce471f..132a833 100644
--- a/wram.asm
+++ b/wram.asm
@@ -264,11 +264,9 @@ wScreenSave:: ; cb94
ds 6 * 5
SECTION "CBB2", WRAM0[$CBB2]
-wcbb2:: ; cbb2
- ds $20
-wcbd2:: ; cbd2
- ds $20
-; cbe6
+wToolgearBuffer:: ; cbb2
+ ds $40
+ ; cbe2
SECTION "CBF2", WRAM0[$CBF2]
@@ -640,14 +638,21 @@ wMap14Object:: map_object wMap14
wMap15Object:: map_object wMap15
wMapObjectsEnd:: ; d14f
-wd14f::
- ds 3 ; TODO
+wToolgearFlags:: db ; d14f
+; 76543210
+; | | \- show toolgear
+; | |
+; | \--- transfer toolgear to window
+; \-------- hide toolgear
+
+ ds 2 ; TODO
wTimeOfDayPal:: db ; d152
; Applied according to wCurTimeOfDay from wTimeOfDayPalset
wd153:: db ; d153
; 76543210
+; | \- show player coords in toolgear instead of time
; \-------- switch overworld palettes according to seconds not hours
ds 3 ; TODO