ref: 823441c59127174d564cb8abc0152e0336f04cec
parent: 74e8183fa8729239f252426c386cd0f5a87b5683
author: YamaArashi <shadow962@live.com>
date: Thu Feb 2 18:10:50 EST 2012
disasm of some menu code hg-commit-id: ba5a3b3a7877
--- a/main.asm
+++ b/main.asm
@@ -7674,7 +7674,285 @@
db $50
; 0x72d2 + 5 bytes
-INCBIN "baserom.gbc",$72d7,$4b6
+INCBIN "baserom.gbc",$72d7,$72ea - $72d7
+
+; function to draw various text boxes
+; INPUT:
+; [$D125] = text box ID
+DisplayTextBoxID_: ; 72EA
+ ld a,[$d125] ; a = text box ID
+ cp a,$14
+ jp z,$7559
+ ld c,a
+ ld hl,TextBoxFunctionTable
+ ld de,3
+ call SearchTextBoxTable
+ jr c,.functionTableMatch\@
+ ld hl,TextBoxCoordTable
+ ld de,5
+ call SearchTextBoxTable
+ jr c,.coordTableMatch\@
+ ld hl,TextBoxTextAndCoordTable
+ ld de,9
+ call SearchTextBoxTable
+ jr c,.textAndCoordTableMatch\@
+.done\@
+ ret
+.functionTableMatch\@
+ ld a,[hli]
+ ld h,[hl]
+ ld l,a ; hl = address of function
+ ld de,.done\@
+ push de
+ jp [hl] ; jump to the function
+.coordTableMatch\@
+ call GetTextBoxIDCoords
+ call GetAddressOfScreenCoords
+ call TextBoxBorder
+ ret
+.textAndCoordTableMatch\@
+ call GetTextBoxIDCoords
+ push hl
+ call GetAddressOfScreenCoords
+ call TextBoxBorder
+ pop hl
+ call GetTextBoxIDText
+ ld a,[$d730]
+ push af
+ ld a,[$d730]
+ set 6,a ; no pauses between printing each letter
+ ld [$d730],a
+ call PlaceString
+ pop af
+ ld [$d730],a
+ call $2429 ; move sprites
+ ret
+
+; function to search a table terminated with $ff for a byte matching c in increments of de
+; sets carry flag if a match is found and clears carry flag if not
+SearchTextBoxTable: ; 734C
+ dec de
+.loop\@
+ ld a,[hli]
+ cp a,$ff
+ jr z,.notFound\@
+ cp c
+ jr z,.found\@
+ add hl,de
+ jr .loop\@
+.found\@
+ scf
+.notFound\@
+ ret
+
+; function to load coordinates from the TextBoxCoordTable or the TextBoxTextAndCoordTable
+; INPUT:
+; hl = address of coordinates
+; OUTPUT:
+; b = height
+; c = width
+; d = row of upper left corner
+; e = column of upper left corner
+GetTextBoxIDCoords: ; 735A
+ ld a,[hli] ; column of upper left corner
+ ld e,a
+ ld a,[hli] ; row of upper left corner
+ ld d,a
+ ld a,[hli] ; column of lower right corner
+ sub e
+ dec a
+ ld c,a ; c = width
+ ld a,[hli] ; row of lower right corner
+ sub d
+ dec a
+ ld b,a ; b = height
+ ret
+
+; function to load a text address and text coordinates from the TextBoxTextAndCoordTable
+GetTextBoxIDText: ; 7367
+ ld a,[hli]
+ ld e,a
+ ld a,[hli]
+ ld d,a ; de = address of text
+ push de ; save text address
+ ld a,[hli]
+ ld e,a ; column of upper left corner of text
+ ld a,[hl]
+ ld d,a ; row of upper left corner of text
+ call GetAddressOfScreenCoords
+ pop de ; restore text address
+ ret
+
+; function to point hl to the screen coordinates
+; INPUT:
+; d = row
+; e = column
+; OUTPUT:
+; hl = address of upper left corner of text box
+GetAddressOfScreenCoords: ; 7375
+ push bc
+ ld hl,$c3a0
+ ld bc,20
+.loop\@ ; loop to add d rows to the base address
+ ld a,d
+ and a
+ jr z,.addedRows\@
+ add hl,bc
+ dec d
+ jr .loop\@
+.addedRows\@
+ pop bc
+ add hl,de
+ ret
+
+; Format:
+; 00: text box ID
+; 01-02: function address
+TextBoxFunctionTable: ; 7387
+ db $13
+ dw $74ba
+
+ db $15
+ dw $74ea
+
+ db $04
+ dw $76e1
+
+ db $ff ; terminator
+
+; Format:
+; 00: text box ID
+; 01: column of upper left corner
+; 02: row of upper left corner
+; 03: column of lower right corner
+; 04: row of lower right corner
+TextBoxCoordTable: ; 7391
+ db $01, 0, 12, 19, 17
+ db $03, 0, 0, 19, 14
+ db $07, 0, 0, 11, 6
+ db $0d, 4, 2, 19, 12
+ db $10, 7, 0, 19, 17
+ db $11, 6, 4, 14, 13
+ db $ff ; terminator
+
+; Format:
+; 00: text box ID
+; 01: column of upper left corner
+; 02: row of upper left corner
+; 03: column of lower right corner
+; 04: row of lower right corner
+; 05-06: address of text
+; 07: column of beginning of text
+; 08: row of beginning of text
+; table of window positions and corresponding text [key, start column, start row, end column, end row, text pointer [2 bytes], text column, text row]
+TextBoxTextAndCoordTable: ; 73B0
+ db $05 ; text box ID
+ db 0,0,14,17 ; text box coordinates
+ dw JapaneseMochimonoText
+ db 3,0 ; text coordinates
+
+ db $06 ; text box ID
+ db 13,10,19,14 ; text box coordinates
+ dw UseTossText
+ db 15,11 ; text coordinates
+
+ db $08 ; text box ID
+ db 0,0,7,5 ; text box coordinates
+ dw JapaneseSaveMessageText
+ db 2,2 ; text coordinates
+
+ db $09 ; text box ID
+ db 0,6,5,10 ; text box coordinates
+ dw JapaneseSpeedOptionsText
+ db 2,7 ; text coordinates
+
+ db $0b ; text box ID
+ db 8,12,19,17 ; text box coordinates
+ dw BattleMenuText
+ db 10,14 ; text coordinates
+
+ db $1b ; text box ID
+ db 0,12,19,17 ; text box coordinates
+ dw SafariZoneBattleMenuText
+ db 2,14 ; text coordinates
+
+ db $0c ; text box ID
+ db 11,11,19,17 ; text box coordinates
+ dw SwitchStatsCancelText
+ db 13,12 ; text coordinates
+
+ db $0e ; text box ID
+ db 0,0,10,6 ; text box coordinates
+ dw BuySellQuitText
+ db 2,1 ; text coordinates
+
+ db $0f ; text box ID
+ db 11,0,19,2 ; text box coordinates
+ dw MoneyText
+ db 13,0 ; text coordinates
+
+ db $12 ; text box ID
+ db 7,6,11,10 ; text box coordinates
+ dw JapaneseAhText
+ db 8,8 ; text coordinates
+
+ db $1a ; text box ID
+ db 11,8,19,17 ; text box coordinates
+ dw JapanesePokedexMenu
+ db 12,10 ; text coordinates
+
+; note that there is no terminator
+
+BuySellQuitText: ; 7413
+ db "BUY",$4E
+ db "SELL",$4E
+ db "QUIT@@"
+
+UseTossText: ; 7422
+ db "USE",$4E
+ db "TOSS@"
+
+JapaneseSaveMessageText: ; 742B
+ db "きろく",$4E
+ db "メッセージ@"
+
+JapaneseSpeedOptionsText: ; 7435
+ db "はやい",$4E
+ db "おそい@"
+
+MoneyText: ; 743D
+ db "MONEY@"
+
+JapaneseMochimonoText: ; 7443
+ db "もちもの@"
+
+JapaneseMainMenuText: ; 7448
+ db "つづきから",$4E
+ db "さいしょから@"
+
+BattleMenuText: ; 7455
+ db "FIGHT ",$E1,$E2,$4E
+ db "ITEM RUN@"
+
+SafariZoneBattleMenuText: ; 7468
+ db "BALL",$F1," BAIT",$4E
+ db "THROW ROCK RUN@"
+
+SwitchStatsCancelText: ; 7489
+ db "SWITCH",$4E
+ db "STATS",$4E
+ db "CANCEL@"
+
+JapaneseAhText: ; 749D
+ db "アッ!@"
+
+JapanesePokedexMenu: ; 74A1
+ db "データをみる",$4E
+ db "なきごえ",$4E
+ db "ぶんぷをみる",$4E
+ db "キャンセル@"
+
+INCBIN "baserom.gbc",$74ba,$778d - $74ba
FieldMoveNames: ; 778D
db "CUT@"