shithub: pokecrystal

Download patch

ref: 24daef7afb9f64ae4df3608c3163457a4a515fd2
parent: dca6fd37cd16d12b1f35174bcf278d41138903d5
author: yenatch <yenatch@gmail.com>
date: Tue Jul 2 19:01:34 EDT 2013

SelectMenu

--- a/main.asm
+++ b/main.asm
@@ -2927,9 +2927,25 @@
 ; 0x2ad4
 
 
-INCBIN "baserom.gbc", $2ad4, $2b74 - $2ad4
+INCBIN "baserom.gbc", $2ad4, $2b29 - $2ad4
 
 
+FadeToMenu: ; 2b29
+	xor a
+	ld [hBGMapMode], a
+	call $1d6e
+	ld a, $23
+	ld hl, $4084
+	rst FarCall
+	call ClearSprites
+	call Function2ed3
+	ret
+; 2b3c
+
+
+INCBIN "baserom.gbc", $2b3c, $2b74 - $2b3c
+
+
 Function2b74: ; 0x2b74
 	push af
 	ld a, $1
@@ -3201,8 +3217,28 @@
 	ret
 ; 2dba
 
-INCBIN "baserom.gbc", $2dba, $2e6f-$2dba
 
+ResetWindow: ; 2dba
+
+	call $1fbf
+	ld a, [hROMBank]
+	push af
+	ld a, $1
+	rst Bankswitch
+
+	call $6454
+	call $2e20
+	call $64bf
+
+	pop af
+	rst Bankswitch
+	ret
+; 2dcf
+
+
+INCBIN "baserom.gbc", $2dcf, $2e6f-$2dcf
+
+
 BitTable1Func: ; 0x2e6f
 	ld hl, $da72
 	call BitTableFunc
@@ -3323,8 +3359,31 @@
 	ret
 ; 0x2f17
 
-INCBIN "baserom.gbc", $2f17, $2f8c - $2f17
 
+INCBIN "baserom.gbc", $2f17, $2f3f - $2f17
+
+
+DoItemEffect: ; 2f3f
+	callba _DoItemEffect
+	ret
+; 2f46
+
+
+CheckTossableItem: ; 2f46
+	push hl
+	push de
+	push bc
+	callba _CheckTossableItem
+	pop bc
+	pop de
+	pop hl
+	ret
+; 2f53
+
+
+INCBIN "baserom.gbc", $2f53, $2f8c - $2f53
+
+
 RNG: ; 2f8c
 ; Two random numbers are generated by adding and subtracting
 ; the divider to the respective values every time it's called.
@@ -6763,7 +6822,7 @@
 ; d427
 
 
-CheckTossableItem: ; d427
+_CheckTossableItem: ; d427
 ; Return 1 in $d142 and carry if CurItem can't be removed from the bag.
 	ld a, 4
 	call GetItemAttr
@@ -6872,7 +6931,7 @@
 INCBIN "baserom.gbc", $e5bb, $e722 - $e5bb
 
 
-DoItemEffect: ; e722
+_DoItemEffect: ; e722
 	ld a, [CurItem]
 	ld [$d265], a
 	call GetItemName
@@ -7663,7 +7722,7 @@
 StartMenu_Option: ; 1291c
 ; Game options.
 
-	call $2b29
+	call FadeToMenu
 	ld a, $1
 	ld hl, $5b64
 	rst FarCall
@@ -7675,7 +7734,7 @@
 StartMenu_Status: ; 12928
 ; Player status.
 
-	call $2b29
+	call FadeToMenu
 	ld a, $9
 	ld hl, $5105
 	rst FarCall
@@ -7691,7 +7750,7 @@
 	and a
 	jr z, .asm_12949
 
-	call $2b29
+	call FadeToMenu
 	ld a, $10
 	ld hl, $4000
 	rst FarCall
@@ -7705,7 +7764,7 @@
 
 StartMenu_Pokegear: ; 1294c
 
-	call $2b29
+	call FadeToMenu
 	ld a, $24
 	ld hl, $4b8d
 	rst FarCall
@@ -7717,7 +7776,7 @@
 
 StartMenu_Pack: ; 1295b
 
-	call $2b29
+	call FadeToMenu
 	ld a, $4
 	ld hl, $4000
 	rst FarCall
@@ -7740,7 +7799,7 @@
 	and a
 	jr z, .return
 
-	call $2b29 ; fade in?
+	call FadeToMenu
 
 .choosemenu
 	xor a
@@ -7791,9 +7850,21 @@
 ; 129d5
 
 
-INCBIN "baserom.gbc", $129d5, $12a6c - $129d5
+INCBIN "baserom.gbc", $129d5, $12a60 - $129d5
 
 
+CantUseItem: ; 12a60
+	ld hl, CantUseItemText
+	call $2012
+	ret
+; 12a67
+
+CantUseItemText: ; 12a67
+	text_jump UnknownText_0x1c1b03, BANK(UnknownText_0x1c1b03)
+	db "@"
+; 12a6c
+
+
 PartyMonItemName: ; 12a6c
 	ld a, [CurItem]
 	ld [$d265], a
@@ -7989,7 +8060,7 @@
 	cp 2
 	jr z, .next
 
-	call $2f46
+	call CheckTossableItem
 	ld a, [$d142]
 	and a
 	jr nz, .next
@@ -8213,9 +8284,203 @@
 ; 12e1b
 
 
-INCBIN "baserom.gbc", $12e1b, $13b87 - $12e1b
+INCBIN "baserom.gbc", $12e1b, $13327 - $12e1b
 
 
+SelectMenu: ; 13327
+
+	call CheckRegisteredItem
+	jr c, .NotRegistered
+	jp UseRegisteredItem
+
+.NotRegistered
+	call $2e08
+	ld b, BANK(ItemMayBeRegisteredText)
+	ld hl, ItemMayBeRegisteredText
+	call $269a
+	call $0a46
+	jp $2dcf
+; 13340
+
+
+ItemMayBeRegisteredText: ; 13340
+	text_jump UnknownText_0x1c1cf3, BANK(UnknownText_0x1c1cf3)
+	db "@"
+; 13345
+
+
+CheckRegisteredItem: ; 13345
+
+	ld a, [WhichRegisteredItem]
+	and a
+	jr z, .NoRegisteredItem
+	and REGISTERED_POCKET
+	rlca
+	rlca
+	ld hl, .Pockets
+	rst $28
+	ret
+
+.Pockets
+	dw .CheckItem
+	dw .CheckBall
+	dw .CheckKeyItem
+	dw .CheckTMHM
+
+.CheckItem
+	ld hl, NumItems
+	call .CheckRegisteredNo
+	jr c, .NoRegisteredItem
+	inc hl
+	ld e, a
+	ld d, 0
+	add hl, de
+	add hl, de
+	call .IsSameItem
+	jr c, .NoRegisteredItem
+	and a
+	ret
+
+.CheckKeyItem
+	ld a, [RegisteredItem]
+	ld hl, KeyItems
+	ld de, 1
+	call IsInArray
+	jr nc, .NoRegisteredItem
+	ld a, [RegisteredItem]
+	ld [CurItem], a
+	and a
+	ret
+
+.CheckBall
+	ld hl, NumBalls
+	call .CheckRegisteredNo
+	jr nc, .NoRegisteredItem
+	inc hl
+	ld e, a
+	ld d, 0
+	add hl, de
+	add hl, de
+	call .IsSameItem
+	jr c, .NoRegisteredItem
+	ret
+
+.CheckTMHM
+	jr .NoRegisteredItem
+
+.NoRegisteredItem
+	xor a
+	ld [WhichRegisteredItem], a
+	ld [RegisteredItem], a
+	scf
+	ret
+; 133a6
+
+
+.CheckRegisteredNo ; 133a6
+	ld a, [WhichRegisteredItem]
+	and REGISTERED_NUMBER
+	dec a
+	cp [hl]
+	jr nc, .NotEnoughItems
+	ld [$d107], a
+	and a
+	ret
+
+.NotEnoughItems
+	scf
+	ret
+; 133b6
+
+
+.IsSameItem ; 133b6
+	ld a, [RegisteredItem]
+	cp [hl]
+	jr nz, .NotSameItem
+	ld [CurItem], a
+	and a
+	ret
+
+.NotSameItem
+	scf
+	ret
+; 133c3
+
+
+UseRegisteredItem: ; 133c3
+
+	callba CheckItemMenu
+	ld a, [$d142]
+	ld hl, .SwitchTo
+	rst $28
+	ret
+
+.SwitchTo
+	dw .CantUse
+	dw .NoFunction
+	dw .NoFunction
+	dw .NoFunction
+	dw .Current
+	dw .Party
+	dw .Overworld
+; 133df
+
+.NoFunction ; 133df
+	call $2e08
+	call CantUseItem
+	call $2dcf
+	and a
+	ret
+; 133ea
+
+.Current ; 133ea
+	call $2e08
+	call DoItemEffect
+	call $2dcf
+	and a
+	ret
+; 133f5
+
+.Party ; 133f5
+	call ResetWindow
+	call FadeToMenu
+	call DoItemEffect
+	call $2b3c
+	call $2dcf
+	and a
+	ret
+; 13406
+
+.Overworld ; 13406
+	call ResetWindow
+	ld a, 1
+	ld [$d0ef], a
+	call DoItemEffect
+	xor a
+	ld [$d0ef], a
+	ld a, [$d0ec]
+	cp 1
+	jr nz, .asm_13425
+	scf
+	ld a, $80
+	ld [$ffa0], a
+	ret
+; 13422
+
+.CantUse ; 13422
+	call ResetWindow
+
+.asm_13425
+	call CantUseItem
+	call $2dcf
+	and a
+	ret
+; 1342d
+
+
+INCBIN "baserom.gbc", $1342d, $13b87 - $1342d
+
+
 GetSquareRoot: ; 13b87
 ; Return the square root of de in b.
 
@@ -8401,8 +8666,8 @@
 
 Function157e9: ; 0x157e9
 	; check if the item has a quantity
-	ld a, BANK(CheckTossableItem)
-	ld hl, CheckTossableItem
+	ld a, BANK(_CheckTossableItem)
+	ld hl, _CheckTossableItem
 	rst $8
 	ld a, [$d142]
 	and a
@@ -8525,7 +8790,7 @@
 	jr z, .asm_158b3
 	call Function158cc
 	ld a, $4
-	ld hl, $7345
+	ld hl, CheckRegisteredItem
 	rst $8
 	jr .asm_1589c
 
@@ -9105,8 +9370,8 @@
 	push de
 	ld a, [MenuSelection]
 	ld [CurItem], a
-	ld a, BANK(CheckTossableItem)
-	ld hl, CheckTossableItem
+	ld a, BANK(_CheckTossableItem)
+	ld hl, _CheckTossableItem
 	rst $8
 	ld a, [$d142]
 	pop hl
@@ -11803,7 +12068,7 @@
 	dw .Cancel
 
 .ReadMail ; 0x44869
-	call $2b29
+	call FadeToMenu
 	ld a, [MenuSelection]
 	dec a
 	ld b, a
@@ -11863,7 +12128,7 @@
 ; 0x448d2
 
 .AttachMail ; 0x448d2
-	call $2b29
+	call FadeToMenu
 	xor a
 	ld [$d141], a
 	call $31f3
@@ -16956,26 +17221,27 @@
 
 StartMenuScript: ; 96b58
 	3callasm BANK(StartMenu), StartMenu
-	2jump UnknownScript_0x96b66
+	2jump StartMenuCallback
 ; 96b5f
 
 SelectMenuScript: ; 96b5f
-	3callasm $04, $7327 ; SelectMenu
-	2jump UnknownScript_0x96b66
+	3callasm BANK(SelectMenu), SelectMenu
+	2jump SelectMenuCallback
 ; 96b66
 
-UnknownScript_0x96b66: ; 96b66
+StartMenuCallback:
+SelectMenuCallback: ; 96b66
 	copybytetovar $ffa0
-	if_equal $80, UnknownScript_0x96b72
-	if_equal $ff, UnknownScript_0x96b75
+	if_equal $80, .Script
+	if_equal $ff, .Asm
 	end
 ; 96b72
 
-UnknownScript_0x96b72: ; 96b72
+.Script ; 96b72
 	2ptjump $d0e8
 ; 96b75
 
-UnknownScript_0x96b75: ; 96b75
+.Asm ; 96b75
 	2ptcallasm $d0e8
 	end
 ; 96b79
--- a/wram.asm
+++ b/wram.asm
@@ -1665,19 +1665,26 @@
 NumItems: ; d892
 	ds 1
 Items: ; d893
-	ds 69
+	ds 41
 
 NumKeyItems: ; d8bc
 	ds 1
 KeyItems: ; d8bd
-	ds 13
-	
+	ds 26
+
 NumBalls: ; d8d7
 	ds 1
 Balls: ; d8d8
 	ds 25
 	
-SECTION "overworld",BSS[$d95d]
+SECTION "overworld",BSS[$d95b]
+WhichRegisteredItem: ; d95b
+REGISTERED_POCKET EQU %11000000
+REGISTERED_NUMBER EQU %00111111
+	ds 1
+RegisteredItem: ; d95c
+	ds 1
+
 PlayerState: ; d95d
 PLAYER_NORMAL    EQU 0
 PLAYER_BIKE      EQU 1
--