shithub: pokered

Download patch

ref: 17e8f21f466731fcb75218255ee8f886b511830d
parent: 66d70b92957e6b472b66390107372a94c23bd099
author: Sanky <gsanky@gmail.com>
date: Thu Dec 20 16:04:47 EST 2012

Disasm a large part of the in-battle menu routines.

--- a/main.asm
+++ b/main.asm
@@ -40344,12 +40344,274 @@
 	db $50
 ; 0x3cba1 + 5 bytes
 
-INCBIN "baserom.gbc",$3cba6,$3d0c5 - $3cba6
+INCBIN "baserom.gbc",$3cba6,$3ceb3 - $3cba6
 
-UnnamedText_3d0c5: ; 0x3d0c5
-	TX_FAR _UnnamedText_3d0c5
+InitBattleMenu: ; 0x3ceb3 F:4EB3
+	call $3725 ; restore saved screen
+	ld a, [W_BATTLETYPE]
+	and a
+	jr nz, .nonstandardbattle ; 0x3ceba $9
+	call $4d5a ; redraw names and HP bars?
+	call $6e94
+	call $3719 ; save screen
+.nonstandardbattle
+	ld a, [W_BATTLETYPE]
+	cp $2 ; safari
+	ld a, $b ; safari menu id
+	jr nz, .menuselected ; 0x3cecc $2
+	ld a, $1b ; regular menu id
+.menuselected
+	ld [$d125], a
+	call DisplayTextBoxID
+	ld a, [$d05a]
+	dec a
+	jp nz, RegularBattleMenu ; regular battle
+	; the following happens for the old man tutorial
+	ld hl, W_PLAYERNAME
+	ld de, W_GRASSRATE
+	ld bc, $000b
+	call CopyData ; temporary save the player name in unused space,
+	              ; which is supposed to get overwritten when entering a map
+	              ; with wild pokémon.  due to an oversight, the data may not
+	              ; get overwritten (cinnabar) and the infamous missingno.
+	              ; glitch can show up.
+	ld hl, OldManName
+	ld de, W_PLAYERNAME
+	ld bc, $000b
+	call CopyData
+	; the following probably sets the keystrokes
+	ld hl, $c4c1
+	ld [hl], $ed
+	ld c, $50
+	call DelayFrames
+	ld [hl], $7f
+	ld hl, $c4e9
+	ld [hl], $ed
+	ld c, $32
+	call DelayFrames
+	ld [hl], $ec
+	ld a, $2
+	jp $4fe8
+
+OldManName: ; 0x3cf12
+    db "OLD MAN@"
+
+RegularBattleMenu: ; 0x3cf1a
+	ld a, [$cc2d]
+	ld [W_CURMENUITEMID], a
+	ld [W_OLDMENUITEMID], a
+	sub $2
+	jr c, .leftcolumn ; 0x3cf25 $8
+	ld [W_CURMENUITEMID], a
+	ld [W_OLDMENUITEMID], a
+	jr .rightcolumn ; 0x3cf2d $3f
+.leftcolumn
+	ld a, [W_BATTLETYPE]
+	cp $2
+	ld a, $7f
+	jr z, .safaribattle ; 0x3cf36 $a
+	ld [$c4c7], a
+	ld [$c4ef], a
+	ld b, $9
+	jr .notsafari ; 0x3cf40 $14
+.safaribattle ; 3cf42
+	ld [$c4c5], a
+	ld [$c4ed], a
+	FuncCoord 7,14
+	ld hl, Coord
+	ld de, W_NUMSAFARIBALLS
+	ld bc, $0102
+	call PrintNumber
+	ld b, $1
+.notsafari ; 3cf56
+	ld hl, W_TOPMENUITEMY
+	ld a, $e
+	ld [hli], a
+	ld a, b
+	ld [hli], a
+	inc hl
+	inc hl
+	ld a, $1
+	ld [hli], a
+	ld [hl], $11
+	call HandleMenuInput
+	bit 4, a
+	jr nz, .rightcolumn ; 0x3cf6a $2
+	jr .selection ; 0x3cf6c $46
+.rightcolumn ;3cf6e
+	ld a, [W_BATTLETYPE]
+	cp $2
+	ld a, $7f
+	jr z, .safarirightcolumn ; 0x3cf75 $a
+	ld [$c4c1], a
+	ld [$c4e9], a
+	ld b, $f
+	jr .notsafarirightcolumn ; 0x3cf7f $14
+.safarirightcolumn ; 3cf81
+	ld [$c4b9], a
+	ld [$c4e1], a
+	FuncCoord 7,14
+	ld hl, Coord
+	ld de, W_NUMSAFARIBALLS
+	ld bc, $0102
+	call PrintNumber ; redraw
+	ld b, $d
+.notsafarirightcolumn
+	ld hl, W_TOPMENUITEMY
+	ld a, $e
+	ld [hli], a
+	ld a, b
+	ld [hli], a
+	inc hl
+	inc hl
+	ld a, $1
+	ld [hli], a
+	ld a, $21
+	ld [hli], a
+	call HandleMenuInput
+	bit 5, a
+	jr nz, .leftcolumn ; 0x3cfaa $83
+	ld a, [W_CURMENUITEMID]
+	add $2 ; if we're in the right column, the actual id is +2
+	ld [W_CURMENUITEMID], a
+.selection ; 3cfb4
+	call PlaceUnfilledArrowMenuCursor
+	ld a, [W_BATTLETYPE]
+	cp $2
+	ld a, [W_CURMENUITEMID]
+	ld [$cc2d], a
+	jr z, .asm_3cfd0 ; 0x3cfc2 $c
+	cp $1
+	jr nz, .asm_3cfcb ; 0x3cfc6 $3
+	inc a
+	jr .asm_3cfd0 ; 0x3cfc9 $5
+.asm_3cfcb
+	cp $2 ; what
+	jr nz, .asm_3cfd0 ; 0x3cfcd $1
+	dec a
+.asm_3cfd0
+	and a
+	jr nz, .asm_3cfe8 ; 0x3cfd1 $15
+	; first option was selected...
+	ld a, [W_BATTLETYPE]
+	cp $2
+	jr z, .safari1
+	xor a
+	ld [$d120], a
+	jp $3725 ; restore saved screen and return???
+.safari1 ; safari first option??
+	ld a, $8
+	ld [$cf91], a
+	jr .asm_3d05f ; 0x3cfe6 $77
+.asm_3cfe8
+	cp $2
+	jp nz, $50ca
+	ld a, [W_ISLINKBATTLE]
+	cp $4
+	jr nz, .asm_3cffd ; 0x3cff2 $9
+	ld hl, ItemsCantBeUsedHere
+	call PrintText
+	jp $4eb3
+.asm_3cffd ; bag?
+	call $36f4 ; copy bg?
+	ld a, [W_BATTLETYPE]
+	cp $2
+	jr nz, .asm_3d00e ; 0x3d005 $7
+	ld a, $15
+	ld [$cf91], a
+	jr .asm_3d05f ; 0x3d00c $51
+.asm_3d00e
+	call $3725
+	ld a, [W_BATTLETYPE]
+	and a
+	jr nz, .asm_3d01a ; 0x3d015 $3
+	call $4d5a
+.asm_3d01a
+	ld a, [W_BATTLETYPE]
+	dec a
+	jr nz, .asm_3d031 ; 0x3d01e $11
+	ld hl, .list
+	ld a, l
+	ld [$cf8b], a
+	ld a, h
+	ld [$cf8c], a
+	jr .asm_3d03c ; 0x3d02b $f
+.list
+	db $01, $04, $32, $ff
+.asm_3d031
+	ld hl, W_NUMBAGITEMS
+	ld a, l
+	ld [$cf8b], a
+	ld a, h
+	ld [$cf8c], a
+.asm_3d03c
+	xor a
+	ld [$cf93], a
+	ld a, $3
+	ld [$cf94], a
+	ld a, [$cc2c]
+	ld [W_CURMENUITEMID], a
+	call DisplayListMenuID
+	ld a, [$cc26]
+	ld [$cc2c], a
+	ld a, $0
+	ld [$cc37], a
+	ld [$cc35], a
+	jp c, $4eb3
+.asm_3d05f
+	ld a, [$cf91]
+	ld [$d11e], a
+	call GetItemName
+	call $3826 ; copy name
+	xor a
+	ld [$d152], a
+	call UseItem
+	call $6e5b
+	call CleanLCD_OAM
+	xor a
+	ld [W_CURMENUITEMID], a
+	ld a, [W_BATTLETYPE]
+	cp $2 ; safari
+	jr z, .asm_3d09c ; 0x3d081 $19
+	ld a, [$cd6a]
+	and a
+	jp z, $500e
+	ld a, [W_PLAYERBATTSTATUS1]
+	bit 5, a
+	jr z, .asm_3d09c ; 0x3d08f $b
+	ld hl, $d06a
+	dec [hl]
+	jr nz, .asm_3d09c ; 0x3d095 $5
+	ld hl, W_PLAYERBATTSTATUS1
+	res 5, [hl]
+.asm_3d09c
+	ld a, [$d11c]
+	and a
+	jr nz, .asm_3d0b7 ; 0x3d0a0 $15
+	ld a, [W_BATTLETYPE]
+	cp $2
+	jr z, .asm_3d0b2 ; 0x3d0a7 $9
+	call $3725
+	call $4d5a ; redraw name and hp bar?
+	call Delay3
+.asm_3d0b2
+	call GBPalNormal
+	and a
+	ret
+.asm_3d0b7
+	call GBPalNormal
+	xor a
+	ld [$d11c], a
+	ld a, $2
+	ld [$cf0b], a
+	scf
+	ret
+; 0x3d0c5
+
+ItemsCantBeUsedHere: ; 0x3d0c5
+	TX_FAR ItemsCantBeUsedHere_ ; 0x89831
 	db $50
-; 0x3d0c5 + 5 bytes
+; 0x3d0c5 + 5 bytes = 0x3d0ca
 
 INCBIN "baserom.gbc",$3d0ca,$3d1f5 - $3d0ca
 
@@ -80330,7 +80592,7 @@
 	db $0, "Got away safely!", $58
 ; 0x8981f + 18 bytes
 
-_UnnamedText_3d0c5: ; 0x89831
+ItemsCantBeUsedHere_: ; 0x89831
 	db $0, "Items can't be", $4f
 	db "used here.", $58
 ; 0x89831 + 26 bytes