shithub: pokecrystal

Download patch

ref: 0600437b71b3d3e334487e52707f95ab1b936f9a
parent: 7b3e7a8de0579a90a4aabb0a0a1bfa00adc04de9
author: Sanky <[email protected]>
date: Mon Jan 14 12:02:11 EST 2013

Disasm more party menu-related functions.

--- a/constants.asm
+++ b/constants.asm
@@ -5,6 +5,11 @@
 	db \2
 	ENDM
 
+dbw: MACRO
+	db \1
+	dw \2
+	ENDM
+
 dn: MACRO
 	db \1 << 4 + \2
 	ENDM
@@ -3335,4 +3340,4 @@
 Unkn1Pals EQU $d000 ; 8 4-color palettes little endian)
 Unkn2Pals EQU $d040 ; 8 4-color palettes little endian)
 BGPals    EQU $d080 ; 8 4-color palettes little endian)
-OBPals    EQU $d0c0 ; 8 4-color palettes little endian)
\ No newline at end of file
+OBPals    EQU $d0c0 ; 8 4-color palettes little endian)
--- a/main.asm
+++ b/main.asm
@@ -3174,9 +3174,113 @@
 	db "- ? ! ♂ ♀ / . , &"
 	db "lower  DEL   END "
 
+INCBIN "baserom.gbc",$11e5d,$12976 - $11e5d
 
-INCBIN "baserom.gbc",$11e5d,$14000 - $11e5d
+OpenPartyMenu: ; $12976
+	ld a, [PartyCount]
+	and a
+	jr z, .return ; no pokémon in party
+	call $2b29 ; fade in?
+.choosemenu ; 1297f
+	xor a
+	ld [PartyMenuActionText], a ; Choose a POKéMON.
+	call $31f3 ; this is also a predef/special, something with delayframe
+.menu ; 12986
+	ld a, $14
+	ld hl, $404f
+	rst $8 ; load gfx
+	ld a, $14
+	ld hl, $4405
+	rst $8 ; setup menu?
+	ld a, $14
+	ld hl, $43e0
+	rst $8 ; load menu pokémon sprites
+.menunoreload ; 12998
+	ld a, BANK(WritePartyMenuTilemap)
+	ld hl, WritePartyMenuTilemap
+	rst $8
+	ld a, BANK(PrintPartyMenuText)
+	ld hl, PrintPartyMenuText
+	rst $8
+	call $31f6
+	call $32f9 ; load regular palettes?
+	call DelayFrame
+	ld a, BANK(PartyMenuSelect)
+	ld hl, PartyMenuSelect
+	rst $8
+	jr c, .return ; if cancelled or pressed B
+	call PokemonActionSubmenu
+	cp $3
+	jr z, .menu
+	cp $0
+	jr z, .choosemenu
+	cp $1
+	jr z, .menunoreload
+	cp $2
+	jr z, .quit
+.return ; 129c8
+	call $2b3c
+	ld a, $0
+	ret
+.quit ; 129ce
+	ld a, b
+	push af
+	call $2b4d
+	pop af
+	ret
+; 0x129d5
 
+INCBIN "baserom.gbc",$129d5,$12a88 - $129d5
+
+PokemonActionSubmenu ; 0x12a88
+	ld hl, $c5cd ; coord
+	ld bc, $0212 ; box size
+	call $0fb6 ; draw box
+	ld a, $9
+	ld hl, $4d19
+	rst $8
+	call $389c
+	ld a, [$cf74] ; menu selection?
+	ld hl, PokemonSubmenuActionPointerTable
+	ld de, $0003 ; skip 3 bytes each time
+	call IsInArray
+	jr nc, .nothing
+	inc hl
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+.nothing
+	ld a, $0
+	ret
+; 0x12ab0
+
+PokemonSubmenuActionPointerTable: ; 0x12ab0
+    dbw $01, $6e1b
+    dbw $02, $6e30
+    dbw $03, $6ebd
+    dbw $04, $6e6a
+    dbw $06, $6e55
+    dbw $07, $6e7f
+    dbw $08, $6ed1
+    dbw $09, $6ea9
+    dbw $0a, $6ee6
+    dbw $0d, $6ee6
+    dbw $0b, $6f26
+    dbw $05, $6e94
+    dbw $0c, $6f3b
+    dbw $0e, $6f50
+    dbw $0f, $6e00 ; stats
+    dbw $10, $6aec ; switch
+    dbw $11, $6b60 ; item
+    dbw $12, $6a79
+    dbw $13, $6fba ; move
+    dbw $14, $6d45 ; mail
+; no terminator?
+; 0x12aec
+
+INCBIN "baserom.gbc",$12aec,$14000 - $12aec
+
 SECTION "bank5",DATA,BANK[$5]
 
 INCBIN "baserom.gbc",$14000,$14032 - $14000
@@ -18509,7 +18613,74 @@
 
 SECTION "bank14",DATA,BANK[$14]
 
-INCBIN "baserom.gbc",$50000,$5049a-$50000
+INCBIN "baserom.gbc",$50000,$5005f-$50000
+
+WritePartyMenuTilemap: ; 0x5005f
+	ld hl, Options
+	ld a, [hl]
+	push af
+	set 4, [hl] ; Disable text delay
+	xor a
+	ld [$ffd4], a
+	ld hl, TileMap
+	ld bc, $0168
+	ld a, " "
+	call $3041 ; blank the tilemap
+	call $4396 ; This reads from a pointer table???
+.asm_50077
+	ld a, [hli]
+	cp $ff
+	jr z, .asm_50084 ; 0x5007a $8
+	push hl
+	ld hl, $4089
+	rst $28
+	pop hl
+	jr .asm_50077 ; 0x50082 $f3
+.asm_50084
+	pop af
+	ld [Options], a
+	ret
+; 0x50089
+
+INCBIN "baserom.gbc",$50089,$50457-$50089
+
+PartyMenuSelect: ; 0x50457
+; sets carry if exitted menu.
+	call $1bc9
+	call $1bee
+	ld a, [PartyCount]
+	inc a
+	ld b, a
+	ld a, [$cfa9] ; menu selection?
+	cp b
+	jr z, .exitmenu ; CANCEL
+	ld [$d0d8], a
+	ld a, [$ffa9]
+	ld b, a
+	bit 1, b
+	jr nz, .exitmenu ; B button?
+	ld a, [$cfa9]
+	dec a
+	ld [CurPartyMon], a
+	ld c, a
+	ld b, $0
+	ld hl, PartySpecies
+	add hl, bc
+	ld a, [hl]
+	ld [CurPartySpecies], a
+	ld de, $0008
+	call StartSFX
+	call WaitSFX
+	and a
+	ret
+.exitmenu
+	ld de, $0008
+	call StartSFX
+	call WaitSFX
+	scf
+	ret
+; 0x5049a
+
 
 PrintPartyMenuText: ; 5049a
 	ld hl, $c5b8