ref: 61b0c12165407dc030491d2ca2cfb5066262e1f7
parent: aafbc2f602154694a86dd743315d75f41ad1b1dc
author: YamaArashi <shadow962@live.com>
date: Sat Feb 11 10:30:13 EST 2012
disasm of trainer info function hg-commit-id: b062770b0a2d
--- a/main.asm
+++ b/main.asm
@@ -5751,7 +5751,7 @@
cp a,2
jp z,DisplayItemMenu ; ITEM
cp a,3
- jp z,$7460 ; Trainer Info
+ jp z,DisplayTrainerInfo ; Trainer Info
cp a,4
jp z,$75e3 ; SAVE / RESET
cp a,5
@@ -17159,7 +17159,208 @@
db SUPER_ROD
db $ff
-INCBIN "baserom.gbc",$13460,$13773 - $13460
+DisplayTrainerInfo: ; 7460
+ call GBPalWhiteOut
+ call ClearScreen
+ call $2429 ; move sprites
+ ld a,[$ffd7]
+ push af
+ xor a
+ ld [$ffd7],a
+ call DrawTrainerInfo
+ ld a,$2e
+ call Predef ; draw badges
+ ld b,$0d
+ call GoPAL_SET
+ call GBPalNormal
+ call $3865 ; wait for button press
+ call GBPalWhiteOut
+ call LoadFontTilePatterns
+ call $3701 ; restore saved screen
+ call GoPAL_SET_CF1C
+ call ReloadMapData
+ call LoadGBPal
+ pop af
+ ld [$ffd7],a
+ jp RedisplayStartMenu
+
+; loads tile patterns and draws everything except for gym leader faces / badges
+DrawTrainerInfo: ; 749A
+ ld de,RedPicFront
+ ld bc,$0401
+ ld a,$3b
+ call Predef
+ call DisableLCD
+ FuncCoord 0,2
+ ld hl,Coord
+ ld a,$7f ; blank tile ID
+ call TrainerInfo_DrawVerticalLine
+ FuncCoord 1,2
+ ld hl,Coord
+ call TrainerInfo_DrawVerticalLine
+ ld hl,$9070
+ ld de,$9000
+ ld bc,$01c0
+ call CopyData
+ ld hl,$7b98 ; trainer info text box tile patterns
+ ld de,$9770
+ ld bc,$0080
+ push bc
+ call TrainerInfo_FarCopyData
+ ld hl,$7c28
+ ld de,$9600
+ ld bc,$0170
+ call TrainerInfo_FarCopyData
+ pop bc
+ ld hl,$7d98 ; badge number tile patterns
+ ld de,$8d80
+ call TrainerInfo_FarCopyData
+ ld hl,$6a9e ; gym leader face and badge tile patterns
+ ld de,$9200
+ ld bc,$0400
+ ld a,$03
+ call FarCopyData2
+ ld hl,$6288
+ ld de,$00d0
+ add hl,de ; hl = colon tile pattern
+ ld de,$8d60
+ ld bc,$0010
+ ld a,$04
+ push bc
+ call FarCopyData2
+ pop bc
+ ld hl,$7c18 ; background tile pattern
+ ld de,$8d70
+ call TrainerInfo_FarCopyData
+ call EnableLCD
+ ld hl,$cd3d
+ ld a,18 + 1
+ ld [hli],a
+ dec a
+ ld [hli],a
+ ld [hl],1
+ FuncCoord 0,0
+ ld hl,Coord
+ call TrainerInfo_DrawTextBox
+ ld hl,$cd3d
+ ld a,16 + 1
+ ld [hli],a
+ dec a
+ ld [hli],a
+ ld [hl],3
+ FuncCoord 1,10
+ ld hl,Coord
+ call TrainerInfo_DrawTextBox
+ FuncCoord 0,10
+ ld hl,Coord
+ ld a,$d7
+ call TrainerInfo_DrawVerticalLine
+ FuncCoord 19,10
+ ld hl,Coord
+ call TrainerInfo_DrawVerticalLine
+ FuncCoord 6,9
+ ld hl,Coord
+ ld de,TrainerInfo_BadgesText
+ call PlaceString
+ FuncCoord 2,2
+ ld hl,Coord
+ ld de,TrainerInfo_NameMoneyTimeText
+ call PlaceString
+ FuncCoord 7,2
+ ld hl,Coord
+ ld de,W_PLAYERNAME
+ call PlaceString
+ FuncCoord 8,4
+ ld hl,Coord
+ ld de,W_PLAYERMONEY3
+ ld c,$e3
+ call PrintBCDNumber
+ FuncCoord 9,6
+ ld hl,Coord
+ ld de,$da41 ; hours
+ ld bc,$4103
+ call PrintNumber
+ ld [hl],$d6 ; colon tile ID
+ inc hl
+ ld de,$da43 ; minutes
+ ld bc,$8102
+ jp PrintNumber
+
+TrainerInfo_FarCopyData: ; 757F
+ ld a,$0b
+ jp FarCopyData2
+
+TrainerInfo_NameMoneyTimeText: ; 7584
+ db "NAME/",$4E
+ db "MONEY/",$4E
+ db "TIME/@"
+
+; $76 is a circle tile
+TrainerInfo_BadgesText: ; 7597
+ db $76,"BADGES",$76,"@"
+
+; draws a text box on the trainer info screen
+; height is always 6
+; INPUT:
+; hl = destination address
+; [$cd3d] = width + 1
+; [$cd3e] = width
+; [$cd3f] = distance from the end of a text box row to the start of the next
+TrainerInfo_DrawTextBox: ; 75A0
+ ld a,$79 ; upper left corner tile ID
+ ld de,$7a7b ; top edge and upper right corner tile ID's
+ call TrainerInfo_DrawHorizontalEdge ; draw top edge
+ call TrainerInfo_NextTextBoxRow
+ ld a,[$cd3d] ; width of the text box plus one
+ ld e,a
+ ld d,0
+ ld c,6 ; height of the text box
+.loop\@
+ ld [hl],$7c ; left edge tile ID
+ add hl,de
+ ld [hl],$78 ; right edge tile ID
+ call TrainerInfo_NextTextBoxRow
+ dec c
+ jr nz,.loop\@
+ ld a,$7d ; lower left corner tile ID
+ ld de,$777e ; bottom edge and lower right corner tile ID's
+
+TrainerInfo_DrawHorizontalEdge: ; 75C3
+ ld [hli],a ; place left corner tile
+ ld a,[$cd3e] ; width of the text box
+ ld c,a
+ ld a,d
+.loop\@
+ ld [hli],a ; place edge tile
+ dec c
+ jr nz,.loop\@
+ ld a,e
+ ld [hl],a ; place right corner tile
+ ret
+
+TrainerInfo_NextTextBoxRow: ; 75D0
+ ld a,[$cd3f] ; distance to the start of the next row
+.loop\@
+ inc hl
+ dec a
+ jr nz,.loop\@
+ ret
+
+; draws a vertical line
+; INPUT:
+; hl = address of top tile in the line
+; a = tile ID
+TrainerInfo_DrawVerticalLine: ; 75D8
+ ld de,20
+ ld c,8
+.loop\@
+ ld [hl],a
+ add hl,de
+ dec c
+ jr nz,.loop\@
+ ret
+
+INCBIN "baserom.gbc",$135e3,$13773 - $135e3
TechnicalMachines: ; 0x13773
db MEGA_PUNCH