Merge pull request #71 from pret/item_use

item_use and item
This commit is contained in:
PikalaxALT
2019-06-21 13:12:56 -04:00
committed by GitHub
70 changed files with 33153 additions and 4848 deletions
+4
View File
@@ -46,6 +46,7 @@ PREPROC := tools/preproc/preproc
RAMSCRGEN := tools/ramscrgen/ramscrgen
FIX := tools/gbafix/gbafix
MAPJSON := tools/mapjson/mapjson
JSONPROC := tools/jsonproc/jsonproc
# Clear the default suffixes
.SUFFIXES:
@@ -103,6 +104,7 @@ tools:
@$(MAKE) -C tools/mid2agb
@$(MAKE) -C tools/gbafix
@$(MAKE) -C tools/mapjson
@$(MAKE) -C tools/jsonproc
# For contributors to make sure a change didn't affect the contents of the ROM.
compare: rom
@@ -126,6 +128,7 @@ clean: tidy
@$(MAKE) clean -C tools/mid2agb
@$(MAKE) clean -C tools/gbafix
@$(MAKE) clean -C tools/mapjson
@$(MAKE) clean -C tools/jsonproc
tidy:
rm -f $(ROM) $(ELF) $(MAP)
@@ -135,6 +138,7 @@ tidy:
include graphics_file_rules.mk
include tileset_rules.mk
include map_data_rules.mk
include json_data_rules.mk
%.s: ;
%.png: ;
+1 -1
View File
@@ -265,7 +265,7 @@ sub_814B8F0: @ 814B8F0
ldr r1, _0814B910 @ =sub_814B860
movs r0, 0x5
movs r2, 0
bl sub_813CD50
bl InitBerryPouch
pop {r0}
bx r0
.align 2, 0
+2 -2
View File
@@ -2758,7 +2758,7 @@ _0814D03C:
movs r3, 0x6
bl ConvertIntToDecimalStringN
ldr r4, _0814D080 @ =gStringVar2
bl sub_815EFA0
bl GetBerryPowder
adds r1, r0, 0
adds r0, r4, 0
movs r2, 0
@@ -2963,7 +2963,7 @@ _0814D1D0:
bl memset
cmp r4, 0
bne _0814D202
bl sub_8099FAC
bl CheckHasAtLeastOneBerry
lsls r0, 24
cmp r0, 0
beq _0814D1FE
+27 -27
View File
@@ -5,8 +5,8 @@
.text
thumb_func_start sub_813CD50
sub_813CD50: @ 813CD50
thumb_func_start InitBerryPouch
InitBerryPouch: @ 813CD50
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -92,7 +92,7 @@ _0813CDF0: .4byte gTextFlags
_0813CDF4: .4byte gSpecialVar_ItemId
_0813CDF8: .4byte sub_813CE30
_0813CDFC: .4byte 0x0000080c
thumb_func_end sub_813CD50
thumb_func_end InitBerryPouch
thumb_func_start sub_813CE00
sub_813CE00: @ 813CE00
@@ -1358,8 +1358,8 @@ _0813D800: .4byte gUnknown_203F37C
_0813D804: .4byte gUnknown_203F380
thumb_func_end sub_813D7CC
thumb_func_start sub_813D808
sub_813D808: @ 813D808
thumb_func_start BerryPouch_StartFadeToExitCallback
BerryPouch_StartFadeToExitCallback: @ 813D808
push {r4,lr}
sub sp, 0x4
adds r4, r0, 0
@@ -1387,7 +1387,7 @@ sub_813D808: @ 813D808
.align 2, 0
_0813D83C: .4byte gTasks
_0813D840: .4byte sub_813D844
thumb_func_end sub_813D808
thumb_func_end BerryPouch_StartFadeToExitCallback
thumb_func_start sub_813D844
sub_813D844: @ 813D844
@@ -1443,7 +1443,7 @@ sub_813D8AC: @ 813D8AC
push {r4,lr}
ldr r4, _0813D904 @ =gBagPockets + 0x20
adds r0, r4, 0
bl sub_809A720
bl SortAndCompactBagPocket
ldr r3, _0813D908 @ =gUnknown_203F36C
ldr r1, [r3]
movs r0, 0
@@ -1510,15 +1510,15 @@ _0813D92C:
bx r0
thumb_func_end sub_813D8AC
thumb_func_start sub_813D934
sub_813D934: @ 813D934
thumb_func_start BerryPouch_SetExitCallback
BerryPouch_SetExitCallback: @ 813D934
ldr r1, _0813D93C @ =gUnknown_203F36C
ldr r1, [r1]
str r0, [r1]
bx lr
.align 2, 0
_0813D93C: .4byte gUnknown_203F36C
thumb_func_end sub_813D934
thumb_func_end BerryPouch_SetExitCallback
thumb_func_start sub_813D940
sub_813D940: @ 813D940
@@ -1767,7 +1767,7 @@ _0813DB46:
strh r0, [r1]
_0813DB48:
adds r0, r6, 0
bl sub_813D808
bl BerryPouch_StartFadeToExitCallback
b _0813DB9E
.align 2, 0
_0813DB50: .4byte gUnknown_203F36C
@@ -2124,7 +2124,7 @@ sub_813DE0C: @ 813DE0C
cmp r0, 0
bne _0813DE68
adds r0, r5, 0
bl sub_80A2238
bl FieldUseFunc_OakStopsYou
b _0813DEB0
.align 2, 0
_0813DE5C: .4byte gUnknown_203F388
@@ -2577,7 +2577,7 @@ _0813E248:
adds r0, r4
lsls r0, 3
adds r0, r1
ldr r1, _0813E270 @ =sub_813D808
ldr r1, _0813E270 @ =BerryPouch_StartFadeToExitCallback
str r1, [r0]
_0813E25E:
pop {r4}
@@ -2587,7 +2587,7 @@ _0813E25E:
_0813E264: .4byte gUnknown_203F36C
_0813E268: .4byte sub_8126EDC
_0813E26C: .4byte gTasks
_0813E270: .4byte sub_813D808
_0813E270: .4byte BerryPouch_StartFadeToExitCallback
thumb_func_end sub_813E200
thumb_func_start sub_813E274
@@ -2598,7 +2598,7 @@ sub_813E274: @ 813E274
ldr r2, _0813E288 @ =gText_ThereIsNoPokemon
ldr r3, _0813E28C @ =sub_813E290
movs r1, 0x2
bl sub_813EB20
bl DisplayItemMessageInBerryPouch
pop {r0}
bx r0
.align 2, 0
@@ -2745,7 +2745,7 @@ sub_813E37C: @ 813E37C
adds r0, r5, 0
movs r1, 0x2
adds r2, r4, 0
bl sub_813EB20
bl DisplayItemMessageInBerryPouch
b _0813E3EA
.align 2, 0
_0813E3C4: .4byte gTasks+0x8
@@ -2761,7 +2761,7 @@ _0813E3D8:
adds r0, r7, 0
subs r0, 0x8
adds r0, r6, r0
ldr r1, _0813E3F8 @ =sub_813D808
ldr r1, _0813E3F8 @ =BerryPouch_StartFadeToExitCallback
str r1, [r0]
_0813E3EA:
pop {r4-r7}
@@ -2770,7 +2770,7 @@ _0813E3EA:
.align 2, 0
_0813E3F0: .4byte gUnknown_203F36C
_0813E3F4: .4byte c2_8123744
_0813E3F8: .4byte sub_813D808
_0813E3F8: .4byte BerryPouch_StartFadeToExitCallback
thumb_func_end sub_813E37C
thumb_func_start sub_813E3FC
@@ -2786,14 +2786,14 @@ sub_813E3FC: @ 813E3FC
adds r1, r0
lsls r1, 3
adds r1, r2
ldr r0, _0813E424 @ =sub_813D808
ldr r0, _0813E424 @ =BerryPouch_StartFadeToExitCallback
str r0, [r1]
bx lr
.align 2, 0
_0813E418: .4byte gUnknown_203F36C
_0813E41C: .4byte sub_808CE60
_0813E420: .4byte gTasks
_0813E424: .4byte sub_813D808
_0813E424: .4byte BerryPouch_StartFadeToExitCallback
thumb_func_end sub_813E3FC
thumb_func_start sub_813E428
@@ -2827,7 +2827,7 @@ sub_813E428: @ 813E428
ldr r3, _0813E484 @ =sub_813E2B8
adds r0, r5, 0
adds r2, r4, 0
bl sub_813EB20
bl DisplayItemMessageInBerryPouch
b _0813E4CE
.align 2, 0
_0813E470: .4byte gTasks+0x8
@@ -2867,7 +2867,7 @@ _0813E4A8:
ldr r3, _0813E4E0 @ =sub_813E5B8
adds r0, r7, 0
adds r2, r4, 0
bl sub_813EB20
bl DisplayItemMessageInBerryPouch
_0813E4CE:
pop {r4-r7}
pop {r0}
@@ -2917,7 +2917,7 @@ sub_813E4E4: @ 813E4E4
ldr r3, _0813E550 @ =sub_813E554
adds r0, r5, 0
adds r2, r4, 0
bl sub_813EB20
bl DisplayItemMessageInBerryPouch
pop {r4-r6}
pop {r0}
bx r0
@@ -3213,7 +3213,7 @@ sub_813E768: @ 813E768
adds r0, r5, 0
movs r1, 0x2
adds r2, r4, 0
bl sub_813EB20
bl DisplayItemMessageInBerryPouch
pop {r4-r6}
pop {r0}
bx r0
@@ -3622,8 +3622,8 @@ sub_813EB10: @ 813EB10
_0813EB1C: .4byte gUnknown_203F38C
thumb_func_end sub_813EB10
thumb_func_start sub_813EB20
sub_813EB20: @ 813EB20
thumb_func_start DisplayItemMessageInBerryPouch
DisplayItemMessageInBerryPouch: @ 813EB20
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -3666,7 +3666,7 @@ _0813EB44:
.align 2, 0
_0813EB74: .4byte gUnknown_203F38C
_0813EB78: .4byte gUnknown_8464400
thumb_func_end sub_813EB20
thumb_func_end DisplayItemMessageInBerryPouch
thumb_func_start sub_813EB7C
sub_813EB7C: @ 813EB7C
+5 -5
View File
@@ -713,8 +713,8 @@ _080BD5C2:
bx r1
thumb_func_end player_should_look_direction_be_enforced_upon_movement
thumb_func_start sub_80BD5C8
sub_80BD5C8: @ 80BD5C8
thumb_func_start StartTransitionToFlipBikeState
StartTransitionToFlipBikeState: @ 80BD5C8
push {r4,lr}
lsls r0, 24
lsrs r2, r0, 24
@@ -738,8 +738,8 @@ _080BD5F4: .4byte gPlayerAvatar
_080BD5F8:
adds r0, r2, 0
bl SetPlayerAvatarTransitionFlags
movs r4, 0x8D
lsls r4, 1
movs r4, 0x8D @ BGM_FRLG_BICYCLE
lsls r4, 1 @ BGM_FRLG_BICYCLE
adds r0, r4, 0
bl sub_8056124
cmp r0, 0
@@ -752,7 +752,7 @@ _080BD618:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80BD5C8
thumb_func_end StartTransitionToFlipBikeState
thumb_func_start sub_80BD620
sub_80BD620: @ 80BD620
-1853
View File
File diff suppressed because it is too large Load Diff
+43 -43
View File
@@ -138,8 +138,8 @@ _08107EB0: .4byte gUnknown_203AD10
_08107EB4: .4byte gUnknown_203ACFC
thumb_func_end sub_8107DB4
thumb_func_start UseFameCheckerFromMenu
UseFameCheckerFromMenu: @ 8107EB8
thumb_func_start ReturnToBagFromKeyItem
ReturnToBagFromKeyItem: @ 8107EB8
push {lr}
ldr r2, _08107EC8 @ =sub_80568A8
movs r0, 0
@@ -149,7 +149,7 @@ UseFameCheckerFromMenu: @ 8107EB8
bx r0
.align 2, 0
_08107EC8: .4byte sub_80568A8
thumb_func_end UseFameCheckerFromMenu
thumb_func_end ReturnToBagFromKeyItem
thumb_func_start sub_8107ECC
sub_8107ECC: @ 8107ECC
@@ -1739,8 +1739,8 @@ _08108B48: .4byte gUnknown_203AD18
_08108B4C: .4byte gUnknown_203AD1C
thumb_func_end sub_8108B04
thumb_func_start sub_8108B50
sub_8108B50: @ 8108B50
thumb_func_start ItemMenu_StartFadeToExitCallback
ItemMenu_StartFadeToExitCallback: @ 8108B50
push {r4,lr}
sub sp, 0x4
adds r4, r0, 0
@@ -1768,7 +1768,7 @@ sub_8108B50: @ 8108B50
.align 2, 0
_08108B84: .4byte gTasks
_08108B88: .4byte sub_8108B8C
thumb_func_end sub_8108B50
thumb_func_end ItemMenu_StartFadeToExitCallback
thumb_func_start sub_8108B8C
sub_8108B8C: @ 8108B8C
@@ -2069,7 +2069,7 @@ sub_8108DC8: @ 8108DC8
adds r4, r1, r0
ldr r0, [r4]
ldrb r1, [r4, 0x4]
bl sub_809A584
bl BagPocketCompaction
ldr r3, _08108E40 @ =gUnknown_203AD10
ldr r0, [r3]
adds r0, 0xA
@@ -2150,8 +2150,8 @@ _08108E58:
bx r0
thumb_func_end sub_8108E54
thumb_func_start sub_8108E70
sub_8108E70: @ 8108E70
thumb_func_start DisplayItemMessageInBag
DisplayItemMessageInBag: @ 8108E70
push {r4-r6,lr}
mov r6, r9
mov r5, r8
@@ -2202,17 +2202,17 @@ sub_8108E70: @ 8108E70
bx r0
.align 2, 0
_08108EDC: .4byte gTasks+0x8
thumb_func_end sub_8108E70
thumb_func_end DisplayItemMessageInBag
thumb_func_start sub_8108EE0
sub_8108EE0: @ 8108EE0
thumb_func_start ItemMenu_SetExitCallback
ItemMenu_SetExitCallback: @ 8108EE0
ldr r1, _08108EE8 @ =gUnknown_203AD10
ldr r1, [r1]
str r0, [r1]
bx lr
.align 2, 0
_08108EE8: .4byte gUnknown_203AD10
thumb_func_end sub_8108EE0
thumb_func_end ItemMenu_SetExitCallback
thumb_func_start sub_8108EEC
sub_8108EEC: @ 8108EEC
@@ -2376,12 +2376,12 @@ _08109018:
adds r0, r6
lsls r0, 3
adds r0, r1
ldr r1, _08109040 @ =sub_8108B50
ldr r1, _08109040 @ =ItemMenu_StartFadeToExitCallback
b _081090C4
.align 2, 0
_08109038: .4byte gSpecialVar_ItemId
_0810903C: .4byte gTasks
_08109040: .4byte sub_8108B50
_08109040: .4byte ItemMenu_StartFadeToExitCallback
_08109044:
movs r0, 0x5
bl PlaySE
@@ -2402,13 +2402,13 @@ _08109044:
adds r0, r6
lsls r0, 3
adds r0, r1
ldr r1, _08109080 @ =sub_8108B50
ldr r1, _08109080 @ =ItemMenu_StartFadeToExitCallback
b _081090C4
.align 2, 0
_08109074: .4byte gUnknown_203AD10
_08109078: .4byte gSpecialVar_ItemId
_0810907C: .4byte gTasks
_08109080: .4byte sub_8108B50
_08109080: .4byte ItemMenu_StartFadeToExitCallback
_08109084:
bl sub_8108978
ldrb r0, [r7]
@@ -4376,7 +4376,7 @@ sub_810A0A8: @ 810A0A8
ldr r3, _0810A11C @ =sub_810A1D0
adds r0, r4, 0
movs r1, 0x2
bl sub_8108E70
bl DisplayItemMessageInBag
b _0810A166
.align 2, 0
_0810A110: .4byte gTasks+0x8
@@ -4404,13 +4404,13 @@ _0810A13E:
mov r0, r8
subs r0, 0x8
adds r0, r6, r0
ldr r1, _0810A15C @ =sub_8108B50
ldr r1, _0810A15C @ =ItemMenu_StartFadeToExitCallback
str r1, [r0]
b _0810A166
.align 2, 0
_0810A154: .4byte gUnknown_203AD10
_0810A158: .4byte sub_8126EDC
_0810A15C: .4byte sub_8108B50
_0810A15C: .4byte ItemMenu_StartFadeToExitCallback
_0810A160:
adds r0, r7, 0
bl sub_810A18C
@@ -4430,7 +4430,7 @@ sub_810A170: @ 810A170
ldr r2, _0810A184 @ =gText_ThereIsNoPokemon
ldr r3, _0810A188 @ =sub_810A1D0
movs r1, 0x2
bl sub_8108E70
bl DisplayItemMessageInBag
pop {r0}
bx r0
.align 2, 0
@@ -4456,7 +4456,7 @@ sub_810A18C: @ 810A18C
adds r0, r4, 0
movs r1, 0x2
adds r2, r5, 0
bl sub_8108E70
bl DisplayItemMessageInBag
pop {r4,r5}
pop {r0}
bx r0
@@ -4697,7 +4697,7 @@ sub_810A370: @ 810A370
ldr r3, _0810A3C8 @ =sub_810A1D0
adds r0, r5, 0
movs r1, 0x2
bl sub_8108E70
bl DisplayItemMessageInBag
b _0810A426
.align 2, 0
_0810A3BC: .4byte gTasks+0x8
@@ -4719,9 +4719,9 @@ _0810A3DC:
bne _0810A3F8
ldr r0, _0810A3F4 @ =sub_810A448
_0810A3E4:
bl sub_8108EE0
bl ItemMenu_SetExitCallback
adds r0, r5, 0
bl sub_8108B50
bl ItemMenu_StartFadeToExitCallback
b _0810A426
.align 2, 0
_0810A3F0: .4byte 0x0000016d
@@ -4740,11 +4740,11 @@ _0810A3F8:
mov r0, r9
subs r0, 0x8
adds r0, r7, r0
ldr r1, _0810A41C @ =sub_8108B50
ldr r1, _0810A41C @ =ItemMenu_StartFadeToExitCallback
str r1, [r0]
b _0810A426
.align 2, 0
_0810A41C: .4byte sub_8108B50
_0810A41C: .4byte ItemMenu_StartFadeToExitCallback
_0810A420:
adds r0, r5, 0
bl sub_810A18C
@@ -4776,7 +4776,7 @@ sub_810A448: @ 810A448
ldr r1, _0810A458 @ =sub_810A45C
movs r0, 0x1
movs r2, 0
bl sub_813CD50
bl InitBerryPouch
pop {r0}
bx r0
.align 2, 0
@@ -4826,7 +4826,7 @@ sub_810A468: @ 810A468
ldr r3, _0810A4C0 @ =sub_810A1D0
adds r0, r5, 0
movs r1, 0x2
bl sub_8108E70
bl DisplayItemMessageInBag
b _0810A51E
.align 2, 0
_0810A4B4: .4byte gTasks+0x8
@@ -4848,9 +4848,9 @@ _0810A4D4:
bne _0810A4F0
ldr r0, _0810A4EC @ =sub_810A540
_0810A4DC:
bl sub_8108EE0
bl ItemMenu_SetExitCallback
adds r0, r5, 0
bl sub_8108B50
bl ItemMenu_StartFadeToExitCallback
b _0810A51E
.align 2, 0
_0810A4E8: .4byte 0x0000016d
@@ -4869,11 +4869,11 @@ _0810A4F0:
mov r0, r9
subs r0, 0x8
adds r0, r7, r0
ldr r1, _0810A514 @ =sub_8108B50
ldr r1, _0810A514 @ =ItemMenu_StartFadeToExitCallback
str r1, [r0]
b _0810A51E
.align 2, 0
_0810A514: .4byte sub_8108B50
_0810A514: .4byte ItemMenu_StartFadeToExitCallback
_0810A518:
adds r0, r5, 0
bl sub_810A18C
@@ -4905,7 +4905,7 @@ sub_810A540: @ 810A540
ldr r1, _0810A550 @ =sub_810A554
movs r0, 0x3
movs r2, 0
bl sub_813CD50
bl InitBerryPouch
pop {r0}
bx r0
.align 2, 0
@@ -4954,9 +4954,9 @@ _0810A598:
bne _0810A5B4
ldr r0, _0810A5B0 @ =sub_810A668
_0810A5A0:
bl sub_8108EE0
bl ItemMenu_SetExitCallback
adds r0, r5, 0
bl sub_8108B50
bl ItemMenu_StartFadeToExitCallback
b _0810A63E
.align 2, 0
_0810A5AC: .4byte 0x0000016d
@@ -4981,7 +4981,7 @@ _0810A5B4:
ldr r3, _0810A5F4 @ =sub_810A1F8
adds r0, r5, 0
adds r2, r4, 0
bl sub_8108E70
bl DisplayItemMessageInBag
b _0810A63E
.align 2, 0
_0810A5E8: .4byte gStringVar1
@@ -5019,7 +5019,7 @@ _0810A618:
ldr r3, _0810A650 @ =sub_810A770
adds r0, r7, 0
adds r2, r4, 0
bl sub_8108E70
bl DisplayItemMessageInBag
_0810A63E:
pop {r4-r7}
pop {r0}
@@ -5050,7 +5050,7 @@ sub_810A668: @ 810A668
ldr r1, _0810A678 @ =sub_810A67C
movs r0, 0x2
movs r2, 0
bl sub_813CD50
bl InitBerryPouch
pop {r0}
bx r0
.align 2, 0
@@ -5112,7 +5112,7 @@ sub_810A690: @ 810A690
ldr r3, _0810A708 @ =sub_810A70C
adds r0, r5, 0
adds r2, r4, 0
bl sub_8108E70
bl DisplayItemMessageInBag
pop {r4-r6}
pop {r0}
bx r0
@@ -5426,7 +5426,7 @@ sub_810A940: @ 810A940
adds r0, r5, 0
movs r1, 0x2
adds r2, r4, 0
bl sub_8108E70
bl DisplayItemMessageInBag
pop {r4-r6}
pop {r0}
bx r0
@@ -5803,7 +5803,7 @@ _0810ACEC:
ldr r3, _0810AD0C @ =sub_810A1D0
adds r0, r4, 0
movs r1, 0x2
bl sub_8108E70
bl DisplayItemMessageInBag
_0810ACF8:
add sp, 0x14
pop {r3,r4}
@@ -6860,7 +6860,7 @@ _0810B564:
ldr r0, _0810B5B4 @ =ItemUseCB_Medicine
str r0, [r1]
ldr r0, _0810B5B8 @ =sub_81279A4
bl sub_8108EE0
bl ItemMenu_SetExitCallback
mov r0, r9
subs r0, 0x8
add r0, r8
-2410
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -262,7 +262,7 @@ sub_8054A60: @ 8054A60
ldr r1, _08054B68 @ =0x00000296
adds r0, r1
strh r5, [r0]
bl sub_809A2DC
bl ClearItemSlotsInAllBagPockets
bl sub_80EB658
bl sub_809C794
bl sub_80BDD34
+2 -2
View File
@@ -2441,7 +2441,7 @@ _08055E40:
lsls r0, 24
cmp r0, 0
beq _08055E5A
ldr r5, _08055E74 @ =0x00000131
ldr r5, _08055E74 @ =0x00000131 @ BGM_FRLG_SURF
adds r0, r5, 0
bl sub_8056124
cmp r0, 0
@@ -2511,7 +2511,7 @@ _08055EA8:
bl GetCurrentMapMusic
lsls r0, 16
lsrs r6, r0, 16
ldr r5, _08055F08 @ =0x00000131
ldr r5, _08055F08 @ =0x00000131 @ BGM_FRLG_SURF
cmp r6, r5
beq _08055F14
movs r0, 0x8
+6 -6
View File
@@ -1274,7 +1274,7 @@ _0811F47C:
cmp r0, 0x3
bne _0811F492
adds r0, r4, 0
bl sub_80A1150
bl GetItemCompatibilityRule
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -12617,7 +12617,7 @@ sub_8124DB0: @ 8124DB0
movs r0, 0x6
movs r1, 0
movs r2, 0xFF
bl sub_813CD50
bl InitBerryPouch
pop {r0}
bx r0
thumb_func_end sub_8124DB0
@@ -12644,7 +12644,7 @@ sub_8124DE0: @ 8124DE0
push {r4,lr}
ldr r4, _08124E0C @ =gSpecialVar_ItemId
ldrh r0, [r4]
bl sub_80A1150
bl GetItemCompatibilityRule
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
@@ -13730,8 +13730,8 @@ _081256F2:
bx r0
thumb_func_end sub_81256C0
thumb_func_start sub_81256F8
sub_81256F8: @ 81256F8
thumb_func_start ItemUseCB_PpRestore
ItemUseCB_PpRestore: @ 81256F8
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -13802,7 +13802,7 @@ _0812577E:
_08125784: .4byte gUnknown_203B0A0
_08125788: .4byte gTasks
_0812578C: .4byte sub_81256C0
thumb_func_end sub_81256F8
thumb_func_end ItemUseCB_PpRestore
thumb_func_start sub_8125790
sub_8125790: @ 8125790
+2 -2
View File
@@ -9,7 +9,7 @@
sub_80EB658: @ 80EB658
push {r4-r6,lr}
movs r4, 0
bl sub_809A2A4
bl ClearPCItemSlots
ldr r1, _080EB6A8 @ =gUnknown_8402220
ldrh r0, [r1]
cmp r0, 0
@@ -727,7 +727,7 @@ sub_80EBC38: @ 80EBC38
lsls r6, r0, 3
ldr r7, _080EBC6C @ =gTasks+0x8
adds r4, r6, r7
bl sub_809A33C
bl CountItemsInPC
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x4]
+1 -1
View File
@@ -558,7 +558,7 @@ _0811C9AA:
adds r0, r4, 0
adds r0, 0x96
ldrh r0, [r0]
bl sub_80A1150
bl GetItemCompatibilityRule
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
+1 -1
View File
@@ -2259,7 +2259,7 @@ sub_809BCA0: @ 809BCA0
ldr r0, _0809BD40 @ =gTasks+0x8
adds r5, r0
ldrh r0, [r5, 0xA]
bl sub_809A7DC
bl BagGetQuantityByItemId
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
+2 -2
View File
@@ -911,14 +911,14 @@ _0806F498:
bl PlayRainStoppingSoundEffect
bl sub_806EF18
bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0806F4B0 @ =UseFameCheckerFromMenu
ldr r0, _0806F4B0 @ =ReturnToBagFromKeyItem
bl SetMainCallback2
movs r0, 0x1
_0806F4AC:
pop {r1}
bx r1
.align 2, 0
_0806F4B0: .4byte UseFameCheckerFromMenu
_0806F4B0: .4byte ReturnToBagFromKeyItem
thumb_func_end sub_806F480
thumb_func_start sub_806F4B4
+8 -8
View File
@@ -544,13 +544,7 @@ gUnknown_83D414C:: @ 83D414C
gUnknown_83D4164:: @ 83D4164
.incbin "baserom.gba", 0x3D4164, 0x8
.section .rodata.83D4E4C
gUnknown_83D4E4C::
.incbin "baserom.gba", 0x3D4E54, 0x61D4
gItems:: @ 83DB028
.incbin "baserom.gba", 0x3DB028, 0x4074
.section .rodata.83DF09C
gUnknown_83DF09C:: @ 83DF09C
.incbin "baserom.gba", 0x3DF09C, 0x18
@@ -780,7 +774,13 @@ gUnknown_83E27AC:: @ 83E27AC
.incbin "baserom.gba", 0x3E27AC, 0x1A8
gUnknown_83E2954:: @ 83E2954
.incbin "baserom.gba", 0x3E2954, 0x134
.4byte sub_8124C8C
.4byte CB2_ReturnToField
.4byte NULL
.4byte NULL
gUnknown_83E2964:: @ 83E2964
.incbin "baserom.gba", 0x3E2964, 0x124
gUnknown_83E2A88:: @ 83E2A88
.incbin "baserom.gba", 0x3E2A88, 0x4F0
+355 -1
View File
@@ -341,5 +341,359 @@ gUnknown_84827B4:: @ 84827B4
.include "data/text/move_descriptions.inc"
.align 2, 0
gUnknown_84886E8:: @ 84886E8
.incbin "baserom.gba", 0x4886E8, 0x588
.4byte gMoveDescription_Pound
.4byte gMoveDescription_KarateChop
.4byte gMoveDescription_DoubleSlap
.4byte gMoveDescription_CometPunch
.4byte gMoveDescription_MegaPunch
.4byte gMoveDescription_PayDay
.4byte gMoveDescription_FirePunch
.4byte gMoveDescription_IcePunch
.4byte gMoveDescription_ThunderPunch
.4byte gMoveDescription_Scratch
.4byte gMoveDescription_ViceGrip
.4byte gMoveDescription_Guillotine
.4byte gMoveDescription_RazorWind
.4byte gMoveDescription_SwordsDance
.4byte gMoveDescription_Cut
.4byte gMoveDescription_Gust
.4byte gMoveDescription_WingAttack
.4byte gMoveDescription_Whirlwind
.4byte gMoveDescription_Fly
.4byte gMoveDescription_Bind
.4byte gMoveDescription_Slam
.4byte gMoveDescription_VineWhip
.4byte gMoveDescription_Stomp
.4byte gMoveDescription_DoubleKick
.4byte gMoveDescription_MegaKick
.4byte gMoveDescription_JumpKick
.4byte gMoveDescription_RollingKick
.4byte gMoveDescription_SandAttack
.4byte gMoveDescription_Headbutt
.4byte gMoveDescription_HornAttack
.4byte gMoveDescription_FuryAttack
.4byte gMoveDescription_HornDrill
.4byte gMoveDescription_Tackle
.4byte gMoveDescription_BodySlam
.4byte gMoveDescription_Wrap
.4byte gMoveDescription_TakeDown
.4byte gMoveDescription_Thrash
.4byte gMoveDescription_DoubleEdge
.4byte gMoveDescription_TailWhip
.4byte gMoveDescription_PoisonSting
.4byte gMoveDescription_Twineedle
.4byte gMoveDescription_PinMissile
.4byte gMoveDescription_Leer
.4byte gMoveDescription_Bite
.4byte gMoveDescription_Growl
.4byte gMoveDescription_Roar
.4byte gMoveDescription_Sing
.4byte gMoveDescription_Supersonic
.4byte gMoveDescription_SonicBoom
.4byte gMoveDescription_Disable
.4byte gMoveDescription_Acid
.4byte gMoveDescription_Ember
.4byte gMoveDescription_Flamethrower
.4byte gMoveDescription_Mist
.4byte gMoveDescription_WaterGun
.4byte gMoveDescription_HydroPump
.4byte gMoveDescription_Surf
.4byte gMoveDescription_IceBeam
.4byte gMoveDescription_Blizzard
.4byte gMoveDescription_Psybeam
.4byte gMoveDescription_BubbleBeam
.4byte gMoveDescription_AuroraBeam
.4byte gMoveDescription_HyperBeam
.4byte gMoveDescription_Peck
.4byte gMoveDescription_DrillPeck
.4byte gMoveDescription_Submission
.4byte gMoveDescription_LowKick
.4byte gMoveDescription_Counter
.4byte gMoveDescription_SeismicToss
.4byte gMoveDescription_Strength
.4byte gMoveDescription_Absorb
.4byte gMoveDescription_MegaDrain
.4byte gMoveDescription_LeechSeed
.4byte gMoveDescription_Growth
.4byte gMoveDescription_RazorLeaf
.4byte gMoveDescription_SolarBeam
.4byte gMoveDescription_PoisonPowder
.4byte gMoveDescription_StunSpore
.4byte gMoveDescription_SleepPowder
.4byte gMoveDescription_PetalDance
.4byte gMoveDescription_StringShot
.4byte gMoveDescription_DragonRage
.4byte gMoveDescription_FireSpin
.4byte gMoveDescription_ThunderShock
.4byte gMoveDescription_Thunderbolt
.4byte gMoveDescription_ThunderWave
.4byte gMoveDescription_Thunder
.4byte gMoveDescription_RockThrow
.4byte gMoveDescription_Earthquake
.4byte gMoveDescription_Fissure
.4byte gMoveDescription_Dig
.4byte gMoveDescription_Toxic
.4byte gMoveDescription_Confusion
.4byte gMoveDescription_Psychic
.4byte gMoveDescription_Hypnosis
.4byte gMoveDescription_Meditate
.4byte gMoveDescription_Agility
.4byte gMoveDescription_QuickAttack
.4byte gMoveDescription_Rage
.4byte gMoveDescription_Teleport
.4byte gMoveDescription_NightShade
.4byte gMoveDescription_Mimic
.4byte gMoveDescription_Screech
.4byte gMoveDescription_DoubleTeam
.4byte gMoveDescription_Recover
.4byte gMoveDescription_Harden
.4byte gMoveDescription_Minimize
.4byte gMoveDescription_Smokescreen
.4byte gMoveDescription_ConfuseRay
.4byte gMoveDescription_Withdraw
.4byte gMoveDescription_DefenseCurl
.4byte gMoveDescription_Barrier
.4byte gMoveDescription_LightScreen
.4byte gMoveDescription_Haze
.4byte gMoveDescription_Reflect
.4byte gMoveDescription_FocusEnergy
.4byte gMoveDescription_Bide
.4byte gMoveDescription_Metronome
.4byte gMoveDescription_MirrorMove
.4byte gMoveDescription_SelfDestruct
.4byte gMoveDescription_EggBomb
.4byte gMoveDescription_Lick
.4byte gMoveDescription_Smog
.4byte gMoveDescription_Sludge
.4byte gMoveDescription_BoneClub
.4byte gMoveDescription_FireBlast
.4byte gMoveDescription_Waterfall
.4byte gMoveDescription_Clamp
.4byte gMoveDescription_Swift
.4byte gMoveDescription_SkullBash
.4byte gMoveDescription_SpikeCannon
.4byte gMoveDescription_Constrict
.4byte gMoveDescription_Amnesia
.4byte gMoveDescription_Kinesis
.4byte gMoveDescription_SoftBoiled
.4byte gMoveDescription_HiJumpKick
.4byte gMoveDescription_Glare
.4byte gMoveDescription_DreamEater
.4byte gMoveDescription_PoisonGas
.4byte gMoveDescription_Barrage
.4byte gMoveDescription_LeechLife
.4byte gMoveDescription_LovelyKiss
.4byte gMoveDescription_SkyAttack
.4byte gMoveDescription_Transform
.4byte gMoveDescription_Bubble
.4byte gMoveDescription_DizzyPunch
.4byte gMoveDescription_Spore
.4byte gMoveDescription_Flash
.4byte gMoveDescription_Psywave
.4byte gMoveDescription_Splash
.4byte gMoveDescription_AcidArmor
.4byte gMoveDescription_Crabhammer
.4byte gMoveDescription_Explosion
.4byte gMoveDescription_FurySwipes
.4byte gMoveDescription_Bonemerang
.4byte gMoveDescription_Rest
.4byte gMoveDescription_RockSlide
.4byte gMoveDescription_HyperFang
.4byte gMoveDescription_Sharpen
.4byte gMoveDescription_Conversion
.4byte gMoveDescription_TriAttack
.4byte gMoveDescription_SuperFang
.4byte gMoveDescription_Slash
.4byte gMoveDescription_Substitute
.4byte gMoveDescription_Struggle
.4byte gMoveDescription_Sketch
.4byte gMoveDescription_TripleKick
.4byte gMoveDescription_Thief
.4byte gMoveDescription_SpiderWeb
.4byte gMoveDescription_MindReader
.4byte gMoveDescription_Nightmare
.4byte gMoveDescription_FlameWheel
.4byte gMoveDescription_Snore
.4byte gMoveDescription_Curse
.4byte gMoveDescription_Flail
.4byte gMoveDescription_Conversion2
.4byte gMoveDescription_Aeroblast
.4byte gMoveDescription_CottonSpore
.4byte gMoveDescription_Reversal
.4byte gMoveDescription_Spite
.4byte gMoveDescription_PowderSnow
.4byte gMoveDescription_Protect
.4byte gMoveDescription_MachPunch
.4byte gMoveDescription_ScaryFace
.4byte gMoveDescription_FaintAttack
.4byte gMoveDescription_SweetKiss
.4byte gMoveDescription_BellyDrum
.4byte gMoveDescription_SludgeBomb
.4byte gMoveDescription_MudSlap
.4byte gMoveDescription_Octazooka
.4byte gMoveDescription_Spikes
.4byte gMoveDescription_ZapCannon
.4byte gMoveDescription_Foresight
.4byte gMoveDescription_DestinyBond
.4byte gMoveDescription_PerishSong
.4byte gMoveDescription_IcyWind
.4byte gMoveDescription_Detect
.4byte gMoveDescription_BoneRush
.4byte gMoveDescription_LockOn
.4byte gMoveDescription_Outrage
.4byte gMoveDescription_Sandstorm
.4byte gMoveDescription_GigaDrain
.4byte gMoveDescription_Endure
.4byte gMoveDescription_Charm
.4byte gMoveDescription_Rollout
.4byte gMoveDescription_FalseSwipe
.4byte gMoveDescription_Swagger
.4byte gMoveDescription_MilkDrink
.4byte gMoveDescription_Spark
.4byte gMoveDescription_FuryCutter
.4byte gMoveDescription_SteelWing
.4byte gMoveDescription_MeanLook
.4byte gMoveDescription_Attract
.4byte gMoveDescription_SleepTalk
.4byte gMoveDescription_HealBell
.4byte gMoveDescription_Return
.4byte gMoveDescription_Present
.4byte gMoveDescription_Frustration
.4byte gMoveDescription_Safeguard
.4byte gMoveDescription_PainSplit
.4byte gMoveDescription_SacredFire
.4byte gMoveDescription_Magnitude
.4byte gMoveDescription_DynamicPunch
.4byte gMoveDescription_Megahorn
.4byte gMoveDescription_DragonBreath
.4byte gMoveDescription_BatonPass
.4byte gMoveDescription_Encore
.4byte gMoveDescription_Pursuit
.4byte gMoveDescription_RapidSpin
.4byte gMoveDescription_SweetScent
.4byte gMoveDescription_IronTail
.4byte gMoveDescription_MetalClaw
.4byte gMoveDescription_VitalThrow
.4byte gMoveDescription_MorningSun
.4byte gMoveDescription_Synthesis
.4byte gMoveDescription_Moonlight
.4byte gMoveDescription_HiddenPower
.4byte gMoveDescription_CrossChop
.4byte gMoveDescription_Twister
.4byte gMoveDescription_RainDance
.4byte gMoveDescription_SunnyDay
.4byte gMoveDescription_Crunch
.4byte gMoveDescription_MirrorCoat
.4byte gMoveDescription_PsychUp
.4byte gMoveDescription_ExtremeSpeed
.4byte gMoveDescription_AncientPower
.4byte gMoveDescription_ShadowBall
.4byte gMoveDescription_FutureSight
.4byte gMoveDescription_RockSmash
.4byte gMoveDescription_Whirlpool
.4byte gMoveDescription_BeatUp
.4byte gMoveDescription_FakeOut
.4byte gMoveDescription_Uproar
.4byte gMoveDescription_Stockpile
.4byte gMoveDescription_SpitUp
.4byte gMoveDescription_Swallow
.4byte gMoveDescription_HeatWave
.4byte gMoveDescription_Hail
.4byte gMoveDescription_Torment
.4byte gMoveDescription_Flatter
.4byte gMoveDescription_WillOWisp
.4byte gMoveDescription_Memento
.4byte gMoveDescription_Facade
.4byte gMoveDescription_FocusPunch
.4byte gMoveDescription_SmellingSalt
.4byte gMoveDescription_FollowMe
.4byte gMoveDescription_NaturePower
.4byte gMoveDescription_Charge
.4byte gMoveDescription_Taunt
.4byte gMoveDescription_HelpingHand
.4byte gMoveDescription_Trick
.4byte gMoveDescription_RolePlay
.4byte gMoveDescription_Wish
.4byte gMoveDescription_Assist
.4byte gMoveDescription_Ingrain
.4byte gMoveDescription_Superpower
.4byte gMoveDescription_MagicCoat
.4byte gMoveDescription_Recycle
.4byte gMoveDescription_Revenge
.4byte gMoveDescription_BrickBreak
.4byte gMoveDescription_Yawn
.4byte gMoveDescription_KnockOff
.4byte gMoveDescription_Endeavor
.4byte gMoveDescription_Eruption
.4byte gMoveDescription_SkillSwap
.4byte gMoveDescription_Imprison
.4byte gMoveDescription_Refresh
.4byte gMoveDescription_Grudge
.4byte gMoveDescription_Snatch
.4byte gMoveDescription_SecretPower
.4byte gMoveDescription_Dive
.4byte gMoveDescription_ArmThrust
.4byte gMoveDescription_Camouflage
.4byte gMoveDescription_TailGlow
.4byte gMoveDescription_LusterPurge
.4byte gMoveDescription_MistBall
.4byte gMoveDescription_FeatherDance
.4byte gMoveDescription_TeeterDance
.4byte gMoveDescription_BlazeKick
.4byte gMoveDescription_MudSport
.4byte gMoveDescription_IceBall
.4byte gMoveDescription_NeedleArm
.4byte gMoveDescription_SlackOff
.4byte gMoveDescription_HyperVoice
.4byte gMoveDescription_PoisonFang
.4byte gMoveDescription_CrushClaw
.4byte gMoveDescription_BlastBurn
.4byte gMoveDescription_HydroCannon
.4byte gMoveDescription_MeteorMash
.4byte gMoveDescription_Astonish
.4byte gMoveDescription_WeatherBall
.4byte gMoveDescription_Aromatherapy
.4byte gMoveDescription_FakeTears
.4byte gMoveDescription_AirCutter
.4byte gMoveDescription_Overheat
.4byte gMoveDescription_OdorSleuth
.4byte gMoveDescription_RockTomb
.4byte gMoveDescription_SilverWind
.4byte gMoveDescription_MetalSound
.4byte gMoveDescription_GrassWhistle
.4byte gMoveDescription_Tickle
.4byte gMoveDescription_CosmicPower
.4byte gMoveDescription_WaterSpout
.4byte gMoveDescription_SignalBeam
.4byte gMoveDescription_ShadowPunch
.4byte gMoveDescription_Extrasensory
.4byte gMoveDescription_SkyUppercut
.4byte gMoveDescription_SandTomb
.4byte gMoveDescription_SheerCold
.4byte gMoveDescription_MuddyWater
.4byte gMoveDescription_BulletSeed
.4byte gMoveDescription_AerialAce
.4byte gMoveDescription_IcicleSpear
.4byte gMoveDescription_IronDefense
.4byte gMoveDescription_Block
.4byte gMoveDescription_Howl
.4byte gMoveDescription_DragonClaw
.4byte gMoveDescription_FrenzyPlant
.4byte gMoveDescription_BulkUp
.4byte gMoveDescription_Bounce
.4byte gMoveDescription_MudShot
.4byte gMoveDescription_PoisonTail
.4byte gMoveDescription_Covet
.4byte gMoveDescription_VoltTackle
.4byte gMoveDescription_MagicalLeaf
.4byte gMoveDescription_WaterSport
.4byte gMoveDescription_CalmMind
.4byte gMoveDescription_LeafBlade
.4byte gMoveDescription_DragonDance
.4byte gMoveDescription_RockBlast
.4byte gMoveDescription_ShockWave
.4byte gMoveDescription_WaterPulse
.4byte gMoveDescription_DoomDesire
.4byte gMoveDescription_PsychoBoost
+2 -2
View File
@@ -139,7 +139,7 @@ gSpecials:: @ 815FD60
def_special nullsub_75
def_special sub_80BDB1C
def_special nullsub_75
def_special sub_809A540
def_special RegisteredItemHandleBikeSwap
def_special CalculatePlayerPartyCount
def_special CountPartyNonEggMons
def_special CountPartyAliveNonEggMons_IgnoreVar0x8004Slot
@@ -420,7 +420,7 @@ gSpecials:: @ 815FD60
def_special sub_812B478
def_special sub_812B484
def_special sub_810B82C
def_special sub_8099FAC
def_special CheckHasAtLeastOneBerry
def_special sub_815F094
def_special sub_815F114
def_special sub_815EEB0
File diff suppressed because it is too large Load Diff
+1
View File
@@ -62,6 +62,7 @@ void FieldObjectInteractionPickBerryTree(void);
void FieldObjectInteractionRemoveBerryTree(void);
u8 PlayerHasBerries(void);
void ResetBerryTreeSparkleFlags(void);
const struct Berry * sub_809C8A0(u8 berryIdx);
extern const struct Berry gBerries[];
+12
View File
@@ -0,0 +1,12 @@
#ifndef GUARD_BERRY_POUCH_H
#define GUARD_BERRY_POUCH_H
#include "task.h"
void BerryPouch_StartFadeToExitCallback(u8 taskId);
void BerryPouch_SetExitCallback(void (*)(void));
void InitBerryPouch(u8, void (*)(void), u8);
void DisplayItemMessageInBerryPouch(u8 taskId, u8 bgId, const u8 * str, TaskFunc followUpFunc);
void sub_813E2B8(u8 taskId);
#endif //GUARD_BERRY_POUCH_H
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_BERRY_POWDER_H
#define GUARD_BERRY_POWDER_H
u32 GetBerryPowder(void);
#endif //GUARD_BERRY_POWDER_H
+2
View File
@@ -2,5 +2,7 @@
#define GUARD_BIKE_H
void sub_80BD620(u32 unkC, u32 unk10);
bool8 sub_80BD540(void);
void StartTransitionToFlipBikeState(u8 flags);
#endif //GUARD_BIKE_H
+22
View File
@@ -0,0 +1,22 @@
#ifndef GUARD_CONSTANTS_FANFARES_H
#define GUARD_CONSTANTS_FANFARES_H
enum Fanfares
{
FANFARE_00,
FANFARE_01,
FANFARE_02,
FANFARE_03,
FANFARE_04,
FANFARE_05,
FANFARE_06,
FANFARE_07,
FANFARE_08,
FANFARE_09,
FANFARE_10,
FANFARE_POKEFLUTE,
FANFARE_KEY_ITEM,
FANFARE_DEX_EVAL
};
#endif //GUARD_CONSTANTS_FANFARES_H
+4
View File
@@ -1,6 +1,10 @@
#ifndef GUARD_CONSTANTS_FLAGS_H
#define GUARD_CONSTANTS_FLAGS_H
// Sys Flags Maybe
#define FLAG_WHITE_FLUTE_ACTIVE 0x803
#define FLAG_BLACK_FLUTE_ACTIVE 0x804
// World Map Flags
#define FLAG_WORLD_MAP_PALLET_TOWN 0x890
#define FLAG_WORLD_MAP_VIRIDIAN_CITY 0x891
+81
View File
@@ -0,0 +1,81 @@
#ifndef GUARD_CONSTANTS_GLOBAL_H
#define GUARD_CONSTANTS_GLOBAL_H
#define POKEMON_SLOTS_NUMBER 412
#define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
enum
{
VERSION_SAPPHIRE = 1,
VERSION_RUBY = 2,
VERSION_EMERALD = 3,
VERSION_FIRE_RED = 4,
VERSION_LEAF_GREEN = 5,
};
enum LanguageId {
LANGUAGE_JAPANESE = 1,
LANGUAGE_ENGLISH = 2,
LANGUAGE_FRENCH = 3,
LANGUAGE_ITALIAN = 4,
LANGUAGE_GERMAN = 5,
// 6 goes unused but the theory is it was meant to be Korean
LANGUAGE_SPANISH = 7,
};
#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
#define PC_ITEMS_COUNT 30
#define BAG_ITEMS_COUNT 42
#define BAG_KEYITEMS_COUNT 30
#define BAG_POKEBALLS_COUNT 13
#define BAG_TMHM_COUNT 58
#define BAG_BERRIES_COUNT 43
enum
{
MALE,
FEMALE
};
enum
{
OPTIONS_BUTTON_MODE_NORMAL,
OPTIONS_BUTTON_MODE_LR,
OPTIONS_BUTTON_MODE_L_EQUALS_A
};
enum
{
OPTIONS_TEXT_SPEED_SLOW,
OPTIONS_TEXT_SPEED_MID,
OPTIONS_TEXT_SPEED_FAST
};
enum
{
OPTIONS_SOUND_MONO,
OPTIONS_SOUND_STEREO
};
enum
{
OPTIONS_BATTLE_STYLE_SHIFT,
OPTIONS_BATTLE_STYLE_SET
};
enum
{
POCKET_ITEMS = 1,
POCKET_KEY_ITEMS,
POCKET_POKE_BALLS,
POCKET_TM_CASE,
POCKET_BERRY_POUCH,
};
#define NUM_BAG_POCKETS 5
#endif //GUARD_CONSTANTS_GLOBAL_H
-7
View File
@@ -395,11 +395,4 @@
// Check if the item is one that can be used on a Pokemon.
#define IS_POKEMON_ITEM(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2)
// POCKETS
#define POCKET_ITEMS 1
#define POCKET_KEY_ITEMS 2
#define POCKET_POKE_BALLS 3
#define POCKET_TM_CASE 4
#define POCKET_BERRY_POUCH 5
#endif // GUARD_CONSTANTS_ITEMS_H
+2 -2
View File
@@ -35,8 +35,8 @@
#define VAR_0x401D 0x401D
#define VAR_0x401E 0x401E
#define VAR_0x401F 0x401F
#define VAR_RECYCLE_GOODS 0x4020
#define VAR_REPEL_STEP_COUNT 0x4021
#define VAR_REPEL_STEP_COUNT 0x4020
#define VAR_0x4021 0x4021
#define VAR_ICE_STEP_COUNT 0x4022
#define VAR_0x4023 0x4023
#define VAR_MIRAGE_RND_H 0x4024
+1
View File
@@ -82,5 +82,6 @@ bool8 FieldEffectActiveListContains(u8 id);
void sub_80B69DC(void);
void CreateTeleportFieldEffectTask(void);
void FieldEffectActiveListRemove(u8 id);
void sub_8085620(void);
#endif //GUARD_FIELD_EFFECTS_H
+1
View File
@@ -14,5 +14,6 @@ void sub_807E500(void);
void sub_807DF64(void);
void sub_807DC18(void);
void FieldCallback_ReturnToEventScript2(void);
void sub_807DC00(void);
#endif // GUARD_FIELD_FADETRANSITION_H
+2
View File
@@ -22,5 +22,7 @@ void sub_805D9C4(struct Sprite *sprite);
void sub_805D154(u8 direction);
void sub_805DAE4(u8 direction);
void SetPlayerAvatarTransitionFlags(u16 a);
bool8 IsPlayerFacingSurfableFishableWater(void);
void sub_805D2C0(u8 secondaryId);
#endif //GUARD_FIELD_PLAYER_AVATAR_H
+1
View File
@@ -7,5 +7,6 @@ u8 GetLeadMonIndex(void);
u8 CountDigits(u16 number);
void TV_PrintIntToStringVar(u8, int);
u16 ScrSpecial_GetStarter(void);
void sub_80CCB68(void);
#endif // GUARD_FIELD_SPECIALS_H
+1
View File
@@ -13,5 +13,6 @@ void DoCurrentWeather(void);
void SetSav1WeatherFromCurrMapHeader(void);
void sub_807B0C4(u16 *, u16 *, u32);
void PlayRainStoppingSoundEffect(void);
bool8 sub_807AA70(void);
#endif // GUARD_WEATHER_H
+1 -73
View File
@@ -4,6 +4,7 @@
#include "config.h"
#include "gba/gba.h"
#include <string.h>
#include "constants/global.h"
// Prevent cross-jump optimization.
#define BLOCK_CROSS_JUMP asm("");
@@ -39,10 +40,6 @@
// Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096))
#define POKEMON_SLOTS_NUMBER 412
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
@@ -79,75 +76,6 @@ extern u8 gStringVar2[];
extern u8 gStringVar3[];
extern u8 gStringVar4[];
enum
{
VERSION_SAPPHIRE = 1,
VERSION_RUBY = 2,
VERSION_EMERALD = 3,
VERSION_FIRE_RED = 4,
VERSION_LEAF_GREEN = 5,
};
enum LanguageId {
LANGUAGE_JAPANESE = 1,
LANGUAGE_ENGLISH = 2,
LANGUAGE_FRENCH = 3,
LANGUAGE_ITALIAN = 4,
LANGUAGE_GERMAN = 5,
// 6 goes unused but the theory is it was meant to be Korean
LANGUAGE_SPANISH = 7,
};
#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
#define PC_ITEMS_COUNT 30
#define BAG_ITEMS_COUNT 42
#define BAG_KEYITEMS_COUNT 30
#define BAG_POKEBALLS_COUNT 13
#define BAG_TMHM_COUNT 58
#define BAG_BERRIES_COUNT 43
enum
{
MALE,
FEMALE
};
enum
{
OPTIONS_BUTTON_MODE_NORMAL,
OPTIONS_BUTTON_MODE_LR,
OPTIONS_BUTTON_MODE_L_EQUALS_A
};
enum
{
OPTIONS_TEXT_SPEED_SLOW,
OPTIONS_TEXT_SPEED_MID,
OPTIONS_TEXT_SPEED_FAST
};
enum
{
OPTIONS_SOUND_MONO,
OPTIONS_SOUND_STEREO
};
enum
{
OPTIONS_BATTLE_STYLE_SHIFT,
OPTIONS_BATTLE_STYLE_SET
};
enum
{
BAG_ITEMS = 1,
BAG_POKEBALLS,
BAG_TMsHMs,
BAG_BERRIES,
BAG_KEYITEMS
};
struct Coords16
{
s16 x;
+12 -10
View File
@@ -1,18 +1,20 @@
#ifndef ITEM_H
#define ITEM_H
#ifndef GUARD_ITEM_H
#define GUARD_ITEM_H
#include "global.h"
typedef void (*ItemUseFunc)(u8);
struct Item
{
u8 name[14];
u8 name[ITEM_NAME_LENGTH];
u16 itemId;
u16 price;
u8 holdEffect;
u8 holdEffectParam;
const u8 *description;
u8 importance;
u8 unk19;
u8 exitsBagOnUse;
u8 pocket;
u8 type;
ItemUseFunc fieldUseFunc;
@@ -60,20 +62,20 @@ u8 ItemId_GetBattleUsage(u16 itemId);
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
u8 ItemId_GetSecondaryId(u16 itemId);
u16 itemid_get_market_price(u16 itemId);
void sub_809A2DC(void);
void sub_809A2A4(void);
void ClearItemSlotsInAllBagPockets(void);
void ClearPCItemSlots(void);
void CopyItemName(u16, u8 *);
void sub_809A824(u16 itemId);
bool8 AddBagItem(u16 itemId, u16 amount);
void sub_809A5E4(struct BagPocket *);
void SortPocketAndPlaceHMsFirst(struct BagPocket *);
u16 BagGetItemIdByPocketPosition(u8 a0, u16 a1);
u16 BagGetQuantityByPocketPosition(u8 a0, u16 a1);
bool8 itemid_is_unique(u16 itemId);
void sub_809A584(struct ItemSlot * slots, u8 capacity);
u16 GetBagItemId(u16 *);
void BagPocketCompaction(struct ItemSlot * slots, u8 capacity);
u16 GetPcItemQuantity(u16 *);
void ItemPcCompaction(void);
void RemoveItemFromPC(u16 itemId, u16 quantity);
#endif // ITEM_H
#endif // GUARD_ITEM_H
+10 -1
View File
@@ -2,6 +2,7 @@
#define GUARD_ITEM_MENU_H
#include "global.h"
#include "task.h"
// Exported type declarations
@@ -26,7 +27,15 @@ void sub_81AAC50(void);
void sub_81AAC70(void);
void sub_8108CF0(void);
void sub_810B108(u8);
void UseFameCheckerFromMenu(void);
void ReturnToBagFromKeyItem(void);
void ItemMenu_MoveItemSlotToNewPositionInArray(struct ItemSlot * slots, int pos1, int pos2);
void ItemMenu_StartFadeToExitCallback(u8 taskId);
void sub_8108CB4(void);
void ItemMenu_SetExitCallback(void (*)(void));
void DisplayItemMessageInBag(u8 taskId, u8 bgId, const u8 * string, TaskFunc followUpFunc);
void sub_810A1F8(u8 taskId);
void sub_8107ECC(void);
void sub_8108DC8(u8 pocketId);
void sub_81089F4(u8 pocketId);
#endif //GUARD_ITEM_MENU_H
+33
View File
@@ -6,4 +6,37 @@
void sub_80A1E0C(u8);
void ItemUse_SetQuestLogEvent(u8, struct Pokemon *, u16, u16);
void FieldUseFunc_OrangeMail(u8 taskId);
void FieldUseFunc_MachBike(u8 taskId);
void FieldUseFunc_OldRod(u8 taskId);
void FieldUseFunc_CoinCase(u8 taskId);
void FieldUseFunc_PowderJar(u8 taskId);
void FieldUseFunc_PokeFlute(u8 taskId);
void FieldUseFunc_Medicine(u8 taskId);
void FieldUseFunc_Ether(u8 taskId);
void FieldUseFunc_PpUp(u8 taskId);
void FieldUseFunc_RareCandy(u8 taskId);
void FieldUseFunc_EvoItem(u8 taskId);
void FieldUseFunc_SacredAsh(u8 taskId);
void FieldUseFunc_TmCase(u8 taskId);
void FieldUseFunc_BerryPouch(u8 taskId);
void BattleUseFunc_BerryPouch(u8 taskId);
void FieldUseFunc_TeachyTv(u8 taskId);
void FieldUseFunc_SuperRepel(u8 taskId);
void FieldUseFunc_BlackFlute(u8 taskId);
void FieldUseFunc_TownMap(u8 taskId);
void FieldUseFunc_FameChecker(u8 taskId);
void FieldUseFunc_VsSeeker(u8 taskId);
void BattleUseFunc_PokeBallEtc(u8 taskId);
void BattleUseFunc_PokeFlute(u8 taskId);
void BattleUseFunc_GuardSpec(u8 taskId);
void BattleUseFunc_Medicine(u8 taskId);
void BattleUseFunc_Ether(u8 taskId);
void BattleUseFunc_PokeDoll(u8 taskId);
void FieldUseFunc_OakStopsYou(u8 taskId);
void ItemUseOutOfBattle_EscapeRope(u8 taskId);
void ItemUseOutOfBattle_EnigmaBerry(u8 taskId);
void ItemUseInBattle_EnigmaBerry(u8 taskId);
void ItemUseOutOfBattle_Itemfinder(u8 taskId);
#endif //GUARD_ITEM_USE_H
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_ITEMFINDER_H
#define GUARD_ITEMFINDER_H
void sub_813EC8C(u8 taskId);
#endif //GUARD_ITEMFINDER_H
+1
View File
@@ -25,5 +25,6 @@ void MoveSaveBlocks_ResetHeap(void);
void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey);
void ApplyNewEncryptionKeyToBagItems(u32 encryptionKey);
void ApplyNewEncryptionKeyToWord(u32 * word, u32 encryptionKey);
void ApplyNewEncryptionKeyToHword(u16 * hword, u32 encryptionKey);
#endif // GUARD_LOAD_SAVE_H
+1
View File
@@ -21,5 +21,6 @@ bool8 MonHasMail(struct Pokemon *mon);
void TakeMailFromMon(struct Pokemon *mon);
u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail);
void ClearMailStruct(struct MailStruct *mail);
void sub_80BEBEC(struct MailStruct * mail, void (* callback)(void), u8 a2);
#endif // GUARD_MAIL_H
+4
View File
@@ -31,6 +31,8 @@ extern MainCallback gFieldCallback;
extern struct WarpData gUnknown_2031DBC;
extern u8 gUnknown_2031DE0;
void IncrementGameStat(u8 index);
void Overworld_SetMapObjTemplateCoords(u8, s16, s16);
@@ -112,5 +114,7 @@ void sub_805671C(void);
void sub_8055DC4(void);
bool8 sub_8055FC4(void);
bool8 is_light_level_8_or_9(u8 mapType);
bool32 sub_8055C9C(void);
void sub_8054D70(void);
#endif //GUARD_ROM4_H
+9
View File
@@ -52,5 +52,14 @@ void GetMonNickname(const struct Pokemon * mon, u8 * dest);
void sub_81202F8(const u8 * src, u8 a1);
bool8 sub_8120370(void);
void PartyMenuInit(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback);
void sub_81252D0(u8 taskId, TaskFunc followUpFunc);
void ItemUseCB_PpRestore(u8 taskId, TaskFunc followUpFunc);
void dp05_pp_up(u8 taskId, TaskFunc followUpFunc);
void dp05_rare_candy(u8 taskId, TaskFunc followUpFunc);
void sub_8126B60(u8 taskId, TaskFunc followUpFunc);
void sub_8126894(u8 taskId, TaskFunc followUpFunc);
void sub_81279E0(void);
void ItemUseCB_Medicine(u8 taskId, TaskFunc followUpFunc);
u8 GetItemEffectType(u16 itemId);
#endif // GUARD_PARTY_MENU_H
+2
View File
@@ -678,4 +678,6 @@ u8 GetMonsStateToDoubles(void);
void sub_803E0A4(struct Pokemon *mon, struct BattleTowerPokemon *src);
void SetMultiuseSpriteTemplateToPokemon(u16 trainerSpriteId, u8 battlerPosition);
const u8 * Battle_PrintStatBoosterEffectMessage(u16 itemId);
#endif // GUARD_POKEMON_H
+1
View File
@@ -95,5 +95,6 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag);
u8 *GetMapName(u8 *, u16, u16);
bool32 sub_8124668(u8 mapSecId);
void sub_80C4DF8(u8 *, u8);
void sub_80BFF50(u8 a0, void (*a1)(void));
#endif //GUARD_REGION_MAP_H
+16
View File
@@ -161,4 +161,20 @@ extern const u8 gText_WithdrawItem[];
extern const u8 gText_Withdraw[];
extern const u8 gText_ReturnToPC[];
extern const u8 gUnknown_8416425[];
extern const u8 gUnknown_8416451[];
extern const u8 gUnknown_8416537[];
extern const u8 gUnknown_841658C[];
extern const u8 gUnknown_841659E[];
extern const u8 gUnknown_84165D2[];
extern const u8 gUnknown_8416600[];
extern const u8 gUnknown_8416631[];
extern const u8 gUnknown_8416644[];
extern const u8 gUnknown_841665C[];
extern const u8 gUnknown_8416690[];
extern const u8 gUnknown_84166A7[];
extern const u8 gUnknown_84169DC[];
extern const u8 gUnknown_84162BD[];
#endif //GUARD_STRINGS_H
+2 -2
View File
@@ -17,8 +17,8 @@ struct UnkStruct3
void sub_815C9F4(void);
void sub_815D108(u32 id);
void sub_815CD70(u32 id, s32 arg1);
u8 sub_815D324(u32 shape, u32 size);
void sub_815D1A8(u32 id, bool32 arg1);
bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2);
void sub_815CD70(u32 id, s32 arg1);
#endif //GUARD_UNK_815C980_H
+9
View File
@@ -0,0 +1,9 @@
# JSON files are run through jsonproc, which is a tool that converts JSON data to an output file
# based on an Inja template. https://github.com/pantor/inja
AUTO_GEN_TARGETS += src/data/items.h
src/data/items.h: src/data/items.json src/data/items.json.txt
$(JSONPROC) $^ $@
$(BUILD_DIR)/src/item.o: C_DEP += src/data/items.h
+7 -4
View File
@@ -138,8 +138,9 @@ SECTIONS {
asm/mail_data.o(.text);
asm/map_name_popup.o(.text);
src/item_menu_icons.o(.text);
src/battle_anim_mon_movement.o(.text);
asm/battle_anim_mon_movement.o(.text);
asm/item.o(.text);
src/item.o(.text);
asm/shop.o(.text);
src/berry.o(.text);
asm/script_menu.o(.text);
@@ -153,7 +154,7 @@ SECTIONS {
src/fldeff_berrytree.o(.text);
asm/field_special_scene.o(.text);
asm/safari_zone.o(.text);
asm/item_use.o(.text);
src/item_use.o(.text);
asm/battle_anim_effects_1.o(.text);
asm/battle_anim_effects_2.o(.text);
asm/water.o(.text);
@@ -284,7 +285,7 @@ SECTIONS {
src/ss_anne.o(.text);
src/cereader_tool.o(.text);
src/trainer_tower.o(.text);
src/unk_815EDDC.o(.text);
src/berry_powder.o(.text);
src/unk_815F138.o(.text);
src/berry_fix_program.o(.text);
} =0
@@ -409,7 +410,9 @@ SECTIONS {
data/field_weather.o(.rodata);
data/data_835B488.o(.rodata);
src/item_menu_icons.o(.rodata);
data/data_835B488.o(.rodata.83D4E4C);
src/battle_anim_mon_movement.o(.rodata);
src/item.o(.rodata);
data/data_835B488.o(.rodata.83DF09C);
src/heal_location.o(.rodata);
data/data_835B488.o(.rodata.83EEC98);
src/battle_ai_script_commands.o(.rodata);
+21
View File
@@ -0,0 +1,21 @@
#include "global.h"
void sub_80990AC(struct Sprite * sprite);
void sub_8099144(struct Sprite * sprite);
void sub_80991B4(struct Sprite * sprite);
void sub_80992E0(struct Sprite * sprite);
void sub_8099394(struct Sprite * sprite);
const struct SpriteTemplate gUnknown_83D4E4C[] = {
{
0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80990AC
}, {
0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8099144
}, {
0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80991B4
}, {
0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80992E0
}, {
0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8099394
}
};
+8 -8
View File
@@ -5,7 +5,7 @@
extern const struct Berry sBerries[];
#define ENIGMA_BERRY_STRUCT ({const struct Berry2 *berries = (const struct Berry2 *)sBerries;berries[ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY];})
#define ENIGMA_BERRY_STRUCT ({const struct Berry2 *berries = (const struct Berry2 *)sBerries;berries[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX];})
void sub_809C718(void)
{
@@ -136,10 +136,10 @@ bool32 IsEnigmaBerryValid(void)
const struct Berry * sub_809C8A0(u8 berryIdx)
{
if (berryIdx == ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY + 1 && IsEnigmaBerryValid())
if (berryIdx == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid())
return (struct Berry *)&gSaveBlock1Ptr->enigmaBerry.berry;
if (berryIdx == 0 || berryIdx > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY + 1)
if (berryIdx == 0 || berryIdx > ITEM_TO_BERRY(ITEM_ENIGMA_BERRY))
berryIdx = 1;
return &sBerries[berryIdx - 1];
@@ -147,18 +147,18 @@ const struct Berry * sub_809C8A0(u8 berryIdx)
u8 ItemIdToBerryType(u16 itemId)
{
if (itemId - ITEM_CHERI_BERRY < 0 || itemId - ITEM_CHERI_BERRY > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY)
if (itemId - FIRST_BERRY_INDEX < 0 || itemId - FIRST_BERRY_INDEX > ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX)
return 1;
return itemId - ITEM_CHERI_BERRY + 1;
return ITEM_TO_BERRY(itemId);
}
u16 BerryTypeToItemId(u16 berryType)
{
if (berryType - 1 < 0 || berryType - 1 > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY)
return ITEM_CHERI_BERRY;
if (berryType - 1 < 0 || berryType - 1 > ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX)
return FIRST_BERRY_INDEX;
return berryType + ITEM_CHERI_BERRY - 1;
return berryType + FIRST_BERRY_INDEX - 1;
}
void GetBerryNameByBerryType(u8 berryType, u8 * dest)
+3 -3
View File
@@ -84,7 +84,7 @@ bool8 sub_815EF5C(void)
}
}
u32 sub_815EFA0(void)
u32 GetBerryPowder(void)
{
return sub_815EE3C(&gSaveBlock2Ptr->berryCrush.berryPowderAmount);
}
@@ -104,7 +104,7 @@ void sub_815F014(u8 windowId, u16 baseBlock, u8 palette, u32 powder)
void sub_815F070(void)
{
sub_815EFBC(gUnknown_203F464, sub_815EFA0(), 39, 12, 0);
sub_815EFBC(gUnknown_203F464, GetBerryPowder(), 39, 12, 0);
}
void sub_815F094(void)
@@ -120,7 +120,7 @@ void sub_815F094(void)
FillWindowPixelBuffer(gUnknown_203F464, 0);
PutWindowTilemap(gUnknown_203F464);
TextWindow_SetStdFrame0_WithPal(gUnknown_203F464, 0x21D, 0xD0);
sub_815F014(gUnknown_203F464, 0x21D, 0xD, sub_815EFA0());
sub_815F014(gUnknown_203F464, 0x21D, 0xD, GetBerryPowder());
}
}
+6062
View File
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
{{ doNotModifyHeader }}
## for item in items
## if item.pocket == "POCKET_TM_CASE"
extern const u8 gMoveDescription_{{ item.moveId }}[];
## endif
{% if item.itemId != "ITEM_NONE" %}const u8 gItemDescription_{{ item.itemId }}[] = _("{{ item.description_english }}");{% endif %}
## endfor
const u8 gItemDescription_ITEM_NONE[] = _("?????");
const struct Item gItems[] = {
{% for item in items %}{
.name = _("{{ item.english }}"),
.itemId = {{ item.itemId }},
.price = {{ item.price }},
.holdEffect = {{ item.holdEffect }},
.holdEffectParam = {{ item.holdEffectParam }},
## if item.pocket == "POCKET_TM_CASE"
.description = gMoveDescription_{{ item.moveId }},
## else
.description = gItemDescription_{{ item.itemId }},
## endif
.importance = {{ item.importance }},
.exitsBagOnUse = {{ item.exitsBagOnUse }},
.pocket = {{ item.pocket }},
.type = {{ item.type }},
.fieldUseFunc = {{ item.fieldUseFunc }},
.battleUsage = {{ item.battleUsage }},
.battleUseFunc = {{ item.battleUseFunc }},
.secondaryId = {{ item.secondaryId }}
}, {% endfor %}
};
+1 -1
View File
@@ -552,7 +552,7 @@ static void Task_TopMenuHandleInput(u8 taskId)
if (FindTaskIdByFunc(Task_FCOpenOrCloseInfoBox) == 0xFF)
{
RunTextPrinters();
if ((JOY_NEW(SELECT_BUTTON)) && !sFameCheckerData->inPickMode && sFameCheckerData->savedCallback != UseFameCheckerFromMenu)
if ((JOY_NEW(SELECT_BUTTON)) && !sFameCheckerData->inPickMode && sFameCheckerData->savedCallback != ReturnToBagFromKeyItem)
task->func = Task_StartToCloseFameChecker;
else if (JOY_NEW(START_BUTTON))
{
+684
View File
@@ -0,0 +1,684 @@
#include "global.h"
#include "berry.h"
#include "event_data.h"
#include "item.h"
#include "item_use.h"
#include "load_save.h"
#include "malloc.h"
#include "quest_log.h"
#include "string_util.h"
#include "strings.h"
#include "constants/hold_effects.h"
#include "constants/items.h"
#include "constants/maps.h"
void SortAndCompactBagPocket(struct BagPocket * pocket);
// Item descriptions and data
#include "data/items.h"
u16 GetBagItemQuantity(u16 * ptr)
{
return gSaveBlock2Ptr->encryptionKey ^ *ptr;
}
void SetBagItemQuantity(u16 * ptr, u16 value)
{
*ptr = value ^ gSaveBlock2Ptr->encryptionKey;
}
u16 GetPcItemQuantity(u16 * ptr)
{
return 0 ^ *ptr;
}
void SetPcItemQuantity(u16 * ptr, u16 value)
{
*ptr = value ^ 0;
}
void ApplyNewEncryptionKeyToBagItems(u32 key)
{
u32 i, j;
for (i = 0; i < NUM_BAG_POCKETS; i++)
{
for (j = 0; j < gBagPockets[i].capacity; j++)
{
ApplyNewEncryptionKeyToHword(&gBagPockets[i].itemSlots[j].quantity, key);
}
}
}
void ApplyNewEncryptionKeyToBagItems_(u32 key)
{
ApplyNewEncryptionKeyToBagItems(key);
}
void SetBagPocketsPointers(void)
{
gBagPockets[POCKET_ITEMS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_Items;
gBagPockets[POCKET_ITEMS - 1].capacity = BAG_ITEMS_COUNT;
gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_KeyItems;
gBagPockets[POCKET_KEY_ITEMS - 1].capacity = BAG_KEYITEMS_COUNT;
gBagPockets[POCKET_POKE_BALLS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_PokeBalls;
gBagPockets[POCKET_POKE_BALLS - 1].capacity = BAG_POKEBALLS_COUNT;
gBagPockets[POCKET_TM_CASE - 1].itemSlots = gSaveBlock1Ptr->bagPocket_TMHM;
gBagPockets[POCKET_TM_CASE - 1].capacity = BAG_TMHM_COUNT;
gBagPockets[POCKET_BERRY_POUCH - 1].itemSlots = gSaveBlock1Ptr->bagPocket_Berries;
gBagPockets[POCKET_BERRY_POUCH - 1].capacity = BAG_BERRIES_COUNT;
}
void CopyItemName(u16 itemId, u8 * dest)
{
if (itemId == ITEM_ENIGMA_BERRY)
{
StringCopy(dest, sub_809C8A0(43)->name);
StringAppend(dest, gUnknown_84162BD);
}
else
{
StringCopy(dest, ItemId_GetName(itemId));
}
}
s8 BagPocketGetFirstEmptySlot(u8 pocketId)
{
u16 i;
for (i = 0; i < gBagPockets[pocketId].capacity; i++)
{
if (gBagPockets[pocketId].itemSlots[i].itemId == ITEM_NONE)
return i;
}
return -1;
}
bool8 IsPocketNotEmpty(u8 pocketId)
{
u8 i;
for (i = 0; i < gBagPockets[pocketId - 1].capacity; i++)
{
if (gBagPockets[pocketId - 1].itemSlots[i].itemId != ITEM_NONE)
return TRUE;
}
return FALSE;
}
bool8 CheckBagHasItem(u16 itemId, u16 count)
{
u8 i;
u8 pocket;
if (ItemId_GetPocket(itemId) == 0)
return FALSE;
pocket = ItemId_GetPocket(itemId) - 1;
// Check for item slots that contain the item
for (i = 0; i < gBagPockets[pocket].capacity; i++)
{
if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
{
u16 quantity;
// Does this item slot contain enough of the item?
quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
if (quantity >= count)
return TRUE;
// RS and Emerald check whether there is enough of the
// item across all stacks.
// For whatever reason, FR/LG assume there's only one
// stack of the item.
else
return FALSE;
}
}
return FALSE;
}
bool8 CheckHasAtLeastOneBerry(void)
{
u8 itemId;
bool8 exists;
exists = CheckBagHasItem(ITEM_BERRY_POUCH, 1);
if (!exists)
{
gSpecialVar_Result = FALSE;
return FALSE;
}
for (itemId = FIRST_BERRY_INDEX; itemId <= LAST_BERRY_INDEX; itemId++)
{
exists = CheckBagHasItem(itemId, 1);
if (exists)
{
gSpecialVar_Result = TRUE;
return TRUE;
}
}
gSpecialVar_Result = FALSE;
return FALSE;
}
bool8 CheckBagHasSpace(u16 itemId, u16 count)
{
u8 i;
u8 pocket;
if (ItemId_GetPocket(itemId) == 0)
return FALSE;
pocket = ItemId_GetPocket(itemId) - 1;
// Check for item slots that contain the item
for (i = 0; i < gBagPockets[pocket].capacity; i++)
{
if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
{
u16 quantity;
// Does this stack have room for more??
quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
if (quantity + count <= 999)
return TRUE;
// RS and Emerald check whether there is enough of the
// item across all stacks.
// For whatever reason, FR/LG assume there's only one
// stack of the item.
else
return FALSE;
}
}
if (BagPocketGetFirstEmptySlot(pocket) != -1)
return TRUE;
return FALSE;
}
bool8 AddBagItem(u16 itemId, u16 count)
{
u8 i;
u8 pocket;
s8 idx;
if (ItemId_GetPocket(itemId) == 0)
return FALSE;
pocket = ItemId_GetPocket(itemId) - 1;
for (i = 0; i < gBagPockets[pocket].capacity; i++)
{
if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
{
u16 quantity;
// Does this stack have room for more??
quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
if (quantity + count <= 999)
{
quantity += count;
SetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity, quantity);
return TRUE;
}
// RS and Emerald check whether there is enough of the
// item across all stacks.
// For whatever reason, FR/LG assume there's only one
// stack of the item.
else
return FALSE;
}
}
if (pocket == POCKET_TM_CASE - 1 && !CheckBagHasItem(ITEM_TM_CASE, 1))
{
idx = BagPocketGetFirstEmptySlot(POCKET_KEY_ITEMS - 1);
if (idx == -1)
return FALSE;
gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].itemId = ITEM_TM_CASE;
SetBagItemQuantity(&gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].quantity, 1);
}
if (pocket == POCKET_BERRY_POUCH - 1 && !CheckBagHasItem(ITEM_BERRY_POUCH, 1))
{
idx = BagPocketGetFirstEmptySlot(POCKET_KEY_ITEMS - 1);
if (idx == -1)
return FALSE;
gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].itemId = ITEM_BERRY_POUCH;
SetBagItemQuantity(&gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].quantity, 1);
FlagSet(FLAG_0x847);
}
if (itemId == ITEM_BERRY_POUCH)
FlagSet(FLAG_0x847);
idx = BagPocketGetFirstEmptySlot(pocket);
if (idx == -1)
return FALSE;
gBagPockets[pocket].itemSlots[idx].itemId = itemId;
SetBagItemQuantity(&gBagPockets[pocket].itemSlots[idx].quantity, count);
return TRUE;
}
bool8 RemoveBagItem(u16 itemId, u16 count)
{
u8 i;
u8 pocket;
if (ItemId_GetPocket(itemId) == 0)
return FALSE;
if (itemId == ITEM_NONE)
return FALSE;
pocket = ItemId_GetPocket(itemId) - 1;
// Check for item slots that contain the item
for (i = 0; i < gBagPockets[pocket].capacity; i++)
{
if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
{
u16 quantity;
// Does this item slot contain enough of the item?
quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
if (quantity >= count)
{
quantity -= count;
SetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity, quantity);
if (quantity == 0)
gBagPockets[pocket].itemSlots[i].itemId = ITEM_NONE;
return TRUE;
}
// RS and Emerald check whether there is enough of the
// item across all stacks.
// For whatever reason, FR/LG assume there's only one
// stack of the item.
else
return FALSE;
}
}
return FALSE;
}
u8 GetPocketByItemId(u16 itemId)
{
return ItemId_GetPocket(itemId); // wow such important
}
void ClearItemSlots(struct ItemSlot * slots, u8 capacity)
{
u16 i;
for (i = 0; i < capacity; i++)
{
slots[i].itemId = ITEM_NONE;
SetBagItemQuantity(&slots[i].quantity, 0);
}
}
void ClearPCItemSlots(void)
{
u16 i;
for (i = 0; i < PC_ITEMS_COUNT; i++)
{
gSaveBlock1Ptr->pcItems[i].itemId = ITEM_NONE;
SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity, 0);
}
}
void ClearItemSlotsInAllBagPockets(void)
{
u16 i;
for (i = 0; i < 5; i++)
{
ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity);
}
}
s8 PCItemsGetFirstEmptySlot(void)
{
s8 i;
for (i = 0; i < PC_ITEMS_COUNT; i++)
{
if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE)
return i;
}
return -1;
}
u8 CountItemsInPC(void)
{
u8 count = 0;
u8 i;
for (i = 0; i < PC_ITEMS_COUNT; i++)
{
if (gSaveBlock1Ptr->pcItems[i].itemId != ITEM_NONE)
count++;
}
return count;
}
bool8 CheckPCHasItem(u16 itemId, u16 count)
{
u8 i;
u16 quantity;
for (i = 0; i < PC_ITEMS_COUNT; i++)
{
if (gSaveBlock1Ptr->pcItems[i].itemId == itemId)
{
quantity = GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity);
if (quantity >= count)
return TRUE;
}
}
return FALSE;
}
bool8 AddPCItem(u16 itemId, u16 count)
{
u8 i;
u16 quantity;
s8 idx;
for (i = 0; i < PC_ITEMS_COUNT; i++)
{
if (gSaveBlock1Ptr->pcItems[i].itemId == itemId)
{
quantity = GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity);
if (quantity + count <= 999)
{
quantity += count;
SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity, quantity);
return TRUE;
}
else
return FALSE;
}
}
idx = PCItemsGetFirstEmptySlot();
if (idx == -1)
return FALSE;
gSaveBlock1Ptr->pcItems[idx].itemId = itemId;
SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[idx].quantity, count);
return TRUE;
}
void RemoveItemFromPC(u16 itemId, u16 count)
{
u32 i;
u16 quantity;
if (itemId == ITEM_NONE)
return;
for (i = 0; i < PC_ITEMS_COUNT; i++)
{
if (gSaveBlock1Ptr->pcItems[i].itemId == itemId)
break;
}
if (i != PC_ITEMS_COUNT)
{
quantity = GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity) - count;
SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity, quantity);
if (quantity == 0)
gSaveBlock1Ptr->pcItems[i].itemId = ITEM_NONE;
}
}
void ItemPcCompaction(void)
{
u16 i, j;
struct ItemSlot tmp;
for (i = 0; i < PC_ITEMS_COUNT - 1; i++)
{
for (j = i + 1; j < PC_ITEMS_COUNT; j++)
{
if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE)
{
tmp = gSaveBlock1Ptr->pcItems[i];
gSaveBlock1Ptr->pcItems[i] = gSaveBlock1Ptr->pcItems[j];
gSaveBlock1Ptr->pcItems[j] = tmp;
}
}
}
}
void RegisteredItemHandleBikeSwap(void)
{
switch (gSaveBlock1Ptr->registeredItem)
{
case ITEM_MACH_BIKE:
gSaveBlock1Ptr->registeredItem = ITEM_ACRO_BIKE;
break;
case ITEM_ACRO_BIKE:
gSaveBlock1Ptr->registeredItem = ITEM_MACH_BIKE;
break;
}
}
void SwapItemSlots(struct ItemSlot * a, struct ItemSlot * b)
{
struct ItemSlot c;
c = *a;
*a = *b;
*b = c;
}
void BagPocketCompaction(struct ItemSlot * slots, u8 capacity)
{
u16 i, j;
for (i = 0; i < capacity - 1; i++)
{
for (j = i + 1; j < capacity; j++)
{
if (GetBagItemQuantity(&slots[i].quantity) == 0)
{
SwapItemSlots(&slots[i], &slots[j]);
}
}
}
}
void SortPocketAndPlaceHMsFirst(struct BagPocket * pocket)
{
u16 i;
u16 j = 0;
u16 k;
struct ItemSlot * buff;
SortAndCompactBagPocket(pocket);
for (i = 0; i < pocket->capacity; i++)
{
if (pocket->itemSlots[i].itemId == ITEM_NONE && GetBagItemQuantity(&pocket->itemSlots[i].quantity) == 0)
return;
if (pocket->itemSlots[i].itemId >= ITEM_HM01 && GetBagItemQuantity(&pocket->itemSlots[i].quantity) != 0)
{
for (j = i + 1; j < pocket->capacity; j++)
{
if (pocket->itemSlots[j].itemId == ITEM_NONE && GetBagItemQuantity(&pocket->itemSlots[j].quantity) == 0)
break;
}
break;
}
}
for (k = 0; k < pocket->capacity; k++)
pocket->itemSlots[k].quantity = GetBagItemQuantity(&pocket->itemSlots[k].quantity);
buff = AllocZeroed(pocket->capacity * sizeof(struct ItemSlot));
CpuCopy16(pocket->itemSlots + i, buff, (j - i) * sizeof(struct ItemSlot));
CpuCopy16(pocket->itemSlots, buff + (j - i), i * sizeof(struct ItemSlot));
CpuCopy16(buff, pocket->itemSlots, pocket->capacity * sizeof(struct ItemSlot));
for (k = 0; k < pocket->capacity; k++)
SetBagItemQuantity(&pocket->itemSlots[k].quantity, pocket->itemSlots[k].quantity);
Free(buff);
}
void SortAndCompactBagPocket(struct BagPocket * pocket)
{
u16 i, j;
for (i = 0; i < pocket->capacity; i++)
{
for (j = i + 1; j < pocket->capacity; j++)
{
if (GetBagItemQuantity(&pocket->itemSlots[i].quantity) == 0 || (GetBagItemQuantity(&pocket->itemSlots[j].quantity) != 0 && pocket->itemSlots[i].itemId > pocket->itemSlots[j].itemId))
SwapItemSlots(&pocket->itemSlots[i], &pocket->itemSlots[j]);
}
}
}
u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 slotId)
{
return gBagPockets[pocketId - 1].itemSlots[slotId].itemId;
}
u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 slotId)
{
return GetBagItemQuantity(&gBagPockets[pocketId - 1].itemSlots[slotId].quantity);
}
u16 BagGetQuantityByItemId(u16 itemId)
{
u16 i;
struct BagPocket * pocket = &gBagPockets[ItemId_GetPocket(itemId) - 1];
for (i = 0; i < pocket->capacity; i++)
{
if (pocket->itemSlots[i].itemId == itemId)
return GetBagItemQuantity(&pocket->itemSlots[i].quantity);
}
return 0;
}
void sub_809A824(u16 itemId)
{
struct QuestLogStruct_809A824
{
u16 itemId;
u8 mapSectionId;
} * ptr;
if
(
itemId == ITEM_OAKS_PARCEL
|| itemId == ITEM_POKE_FLUTE
|| itemId == ITEM_SECRET_KEY
|| itemId == ITEM_BIKE_VOUCHER
|| itemId == ITEM_GOLD_TEETH
|| itemId == ITEM_OLD_AMBER
|| itemId == ITEM_CARD_KEY
|| itemId == ITEM_LIFT_KEY
|| itemId == ITEM_HELIX_FOSSIL
|| itemId == ITEM_DOME_FOSSIL
|| itemId == ITEM_SILPH_SCOPE
|| itemId == ITEM_BICYCLE
|| itemId == ITEM_TOWN_MAP
|| itemId == ITEM_VS_SEEKER
|| itemId == ITEM_TEACHY_TV
|| itemId == ITEM_RAINBOW_PASS
|| itemId == ITEM_TEA
|| itemId == ITEM_POWDER_JAR
|| itemId == ITEM_RUBY
|| itemId == ITEM_SAPPHIRE
)
{
if (itemId != ITEM_TOWN_MAP || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_GARYS_HOUSE) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_GARYS_HOUSE)))
{
ptr = malloc(sizeof(*ptr));
ptr->itemId = itemId;
ptr->mapSectionId = gMapHeader.regionMapSectionId;
sub_8113550(40, (void *)ptr);
free(ptr);
}
}
}
u16 SanitizeItemId(u16 itemId)
{
if (itemId >= ITEM_N_A)
return ITEM_NONE;
return itemId;
}
const u8 * ItemId_GetName(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].name;
}
u16 itemid_get_number(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].itemId;
}
u16 itemid_get_market_price(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].price;
}
u8 ItemId_GetHoldEffect(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].holdEffect;
}
u8 ItemId_GetHoldEffectParam(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].holdEffectParam;
}
const u8 * ItemId_GetDescription(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].description;
}
bool8 itemid_is_unique(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].importance;
}
u8 itemid_get_x19(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].exitsBagOnUse;
}
u8 ItemId_GetPocket(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].pocket;
}
u8 ItemId_GetType(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].type;
}
ItemUseFunc ItemId_GetFieldFunc(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].fieldUseFunc;
}
bool8 ItemId_GetBattleUsage(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].battleUsage;
}
ItemUseFunc ItemId_GetBattleFunc(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].battleUseFunc;
}
u8 ItemId_GetSecondaryId(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].secondaryId;
}
+1 -1
View File
@@ -676,7 +676,7 @@ static u16 ItemPc_GetItemIdBySlotId(u16 idx)
static u16 ItemPc_GetItemQuantityBySlotId(u16 idx)
{
return GetBagItemId(&gSaveBlock1Ptr->pcItems[idx].quantity);
return GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[idx].quantity);
}
static void ItemPc_CountPcItems(void)
+880
View File
@@ -0,0 +1,880 @@
#include "global.h"
#include "battle.h"
#include "berry_pouch.h"
#include "berry_powder.h"
#include "bike.h"
#include "coins.h"
#include "event_data.h"
#include "field_effect.h"
#include "field_fadetransition.h"
#include "field_map_obj_helpers.h"
#include "field_player_avatar.h"
#include "field_specials.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "item.h"
#include "item_menu.h"
#include "item_use.h"
#include "itemfinder.h"
#include "mail.h"
#include "main.h"
#include "malloc.h"
#include "map_obj_80688E4.h"
#include "map_obj_lock.h"
#include "metatile_behavior.h"
#include "new_menu_helpers.h"
#include "overworld.h"
#include "palette.h"
#include "party_menu.h"
#include "quest_log.h"
#include "region_map.h"
#include "script.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "teachy_tv.h"
#include "tm_case.h"
#include "vs_seeker.h"
#include "constants/fanfares.h"
#include "constants/flags.h"
#include "constants/items.h"
#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/songs.h"
EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL;
void sub_80A1084(void);
void sub_80A109C(u8 taskId);
void sub_80A112C(u8 taskId);
void sub_80A11C0(u8 taskId);
bool8 sub_80A1194(void);
void sub_80A1208(void);
void ItemUseOnFieldCB_Bicycle(u8 taskId);
bool8 ItemUseCheckFunc_Rod(void);
void ItemUseOnFieldCB_Rod(u8 taskId);
void FieldUseFunc_EvoItem(u8 taskId);
void sub_80A1648(u8 taskId);
void sub_80A1674(u8 taskId);
void InitTMCaseFromBag(void);
void Task_InitTMCaseFromField(u8 taskId);
void InitBerryPouchFromBag(void);
void Task_InitBerryPouchFromField(u8 taskId);
void InitBerryPouchFromBattle(void);
void InitTeachyTvFromBag(void);
void Task_InitTeachyTvFromField(u8 taskId);
void sub_80A19E8(u8 taskId);
void sub_80A1A44(void);
void sub_80A1B48(u8 taskId);
void sub_80A1C08(u8 taskId);
void sub_80A1C44(u8 taskId);
void sub_80A1CAC(void);
void sub_80A1CC0(u8 taskId);
void sub_80A1D58(void);
void sub_80A1D68(u8 taskId);
void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId);
void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId);
extern void (*const gUnknown_83E2954[])(void);
void sub_80A0FBC(u8 taskId)
{
u8 itemType;
if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY)
itemType = gTasks[taskId].data[4] - 1;
else
itemType = ItemId_GetType(gSpecialVar_ItemId) - 1;
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
{
BerryPouch_SetExitCallback(gUnknown_83E2954[itemType]);
BerryPouch_StartFadeToExitCallback(taskId);
}
else
{
ItemMenu_SetExitCallback(gUnknown_83E2954[itemType]);
if (itemType == 1)
sub_8108CB4();
ItemMenu_StartFadeToExitCallback(taskId);
}
}
void sub_80A103C(u8 taskId)
{
if (gTasks[taskId].data[3] != 1)
{
gFieldCallback = sub_80A1084;
sub_80A0FBC(taskId);
}
else
sItemUseOnFieldCB(taskId);
}
void sub_80A1084(void)
{
sub_807DC00();
CreateTask(sub_80A109C, 8);
}
void sub_80A109C(u8 taskId)
{
if (sub_807AA70() == TRUE)
{
sItemUseOnFieldCB(taskId);
}
}
void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str)
{
StringExpandPlaceholders(gStringVar4, str);
if (a1 == FALSE)
DisplayItemMessageInBag(taskId, a2, gStringVar4, sub_810A1F8);
else
DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C);
}
void sub_80A1110(u8 taskId, bool8 a1)
{
sub_80A10C4(taskId, a1, 4, gUnknown_8416425);
}
void sub_80A112C(u8 taskId)
{
ClearDialogWindowAndFrame(0, 1);
DestroyTask(taskId);
sub_80696C0();
ScriptContext2_Disable();
}
u8 GetItemCompatibilityRule(u16 itemId)
{
if (ItemId_GetPocket(itemId) == POCKET_TM_CASE)
return 1;
else if (ItemId_GetFieldFunc(itemId) == FieldUseFunc_EvoItem)
return 2;
else
return 0;
}
void sub_80A1184(void)
{
gFieldCallback2 = sub_80A1194;
}
bool8 sub_80A1194(void)
{
player_bitmagic();
ScriptContext2_Enable();
sub_807DC00();
CreateTask(sub_80A11C0, 10);
gUnknown_2031DE0 = 0;
return TRUE;
}
void sub_80A11C0(u8 taskId)
{
if (sub_807AA70() == TRUE)
{
UnfreezeMapObjects();
ScriptContext2_Disable();
DestroyTask(taskId);
}
}
void FieldUseFunc_OrangeMail(u8 taskId)
{
ItemMenu_SetExitCallback(sub_80A1208);
ItemMenu_StartFadeToExitCallback(taskId);
}
void sub_80A1208(void)
{
struct MailStruct mail;
mail.itemId = gSpecialVar_ItemId;
sub_80BEBEC(&mail, ReturnToBagFromKeyItem, 0);
}
void FieldUseFunc_MachBike(u8 taskId)
{
s16 x, y;
u8 behavior;
PlayerGetDestCoords(&x, &y);
behavior = MapGridGetMetatileBehaviorAt(x, y);
if (FlagGet(FLAG_0x830) == TRUE
|| MetatileBehavior_ReturnFalse_17(behavior) == TRUE
|| MetatileBehavior_ReturnFalse_18(behavior) == TRUE
|| MetatileBehavior_ReturnFalse_15(behavior) == TRUE
|| MetatileBehavior_ReturnFalse_16(behavior) == TRUE)
sub_80A10C4(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451);
else if (sub_8055C9C() == TRUE && !sub_80BD540())
{
sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle;
sub_80A103C(taskId);
}
else
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
void ItemUseOnFieldCB_Bicycle(u8 taskId)
{
if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
PlaySE(SE_JITENSYA);
StartTransitionToFlipBikeState(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE);
sub_80696C0();
ScriptContext2_Disable();
DestroyTask(taskId);
}
void FieldUseFunc_OldRod(u8 taskId)
{
if (ItemUseCheckFunc_Rod() == TRUE)
{
sItemUseOnFieldCB = ItemUseOnFieldCB_Rod;
sub_80A103C(taskId);
}
else
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
bool8 ItemUseCheckFunc_Rod(void)
{
s16 x, y;
u16 behavior;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
behavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsWaterfall(behavior))
return FALSE;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4))
return FALSE;
if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
{
if (IsPlayerFacingSurfableFishableWater())
return TRUE;
}
else
{
if (MetatileBehavior_IsSurfable(behavior) && !MapGridIsImpassableAt(x, y))
return TRUE;
if (MetatileBehavior_ReturnFalse_6(behavior) == TRUE)
return TRUE;
}
return FALSE;
}
void ItemUseOnFieldCB_Rod(u8 taskId)
{
sub_805D2C0(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
}
void ItemUseOutOfBattle_Itemfinder(u8 taskId)
{
IncrementGameStat(GAME_STAT_USED_ITEMFINDER);
sItemUseOnFieldCB = sub_813EC8C;
sub_80A103C(taskId);
}
void FieldUseFunc_CoinCase(u8 taskId)
{
ConvertIntToDecimalStringN(gStringVar1, GetCoins(), STR_CONV_MODE_LEFT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gUnknown_8416537);
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF);
if (gTasks[taskId].data[3] == 0)
DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8);
else
DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C);
}
void FieldUseFunc_PowderJar(u8 taskId)
{
ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 5);
StringExpandPlaceholders(gStringVar4, gUnknown_8416644);
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF);
if (gTasks[taskId].data[3] == 0)
DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8);
else
DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C);
}
void FieldUseFunc_PokeFlute(u8 taskId)
{
bool8 wokeSomeoneUp = FALSE;
u8 i;
for (i = 0; i < CalculatePlayerPartyCount(); i++)
{
if (!ExecuteTableBasedItemEffect(&gPlayerParty[i], ITEM_AWAKENING, i, MOVE_NONE))
wokeSomeoneUp = TRUE;
}
if (wokeSomeoneUp)
{
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF);
if (gTasks[taskId].data[3] == 0)
DisplayItemMessageInBag(taskId, 2, gUnknown_8416690, sub_80A1648);
else
DisplayItemMessageOnField(taskId, 2, gUnknown_8416690, sub_80A1648);
}
else
{
// Now that's a catchy tune!
if (gTasks[taskId].data[3] == 0)
DisplayItemMessageInBag(taskId, 2, gUnknown_841665C, sub_810A1F8);
else
DisplayItemMessageOnField(taskId, 2, gUnknown_841665C, sub_80A112C);
}
}
void sub_80A1648(u8 taskId)
{
PlayFanfareByFanfareNum(FANFARE_POKEFLUTE);
gTasks[taskId].func = sub_80A1674;
}
void sub_80A1674(u8 taskId)
{
if (WaitFanfare(FALSE))
{
if (gTasks[taskId].data[3] == 0)
DisplayItemMessageInBag(taskId, 2, gUnknown_84166A7, sub_810A1F8);
else
DisplayItemMessageOnField(taskId, 2, gUnknown_84166A7, sub_80A112C);
}
}
void sub_80A16D0(u8 taskId)
{
sub_80A0FBC(taskId);
}
void FieldUseFunc_Medicine(u8 taskId)
{
gUnknown_3005E98 = sub_81252D0;
sub_80A16D0(taskId);
}
void FieldUseFunc_Ether(u8 taskId)
{
gUnknown_3005E98 = ItemUseCB_PpRestore;
sub_80A16D0(taskId);
}
void FieldUseFunc_PpUp(u8 taskId)
{
gUnknown_3005E98 = dp05_pp_up;
sub_80A16D0(taskId);
}
void FieldUseFunc_RareCandy(u8 taskId)
{
gUnknown_3005E98 = dp05_rare_candy;
sub_80A16D0(taskId);
}
void FieldUseFunc_EvoItem(u8 taskId)
{
gUnknown_3005E98 = sub_8126B60;
sub_80A16D0(taskId);
}
void FieldUseFunc_SacredAsh(u8 taskId)
{
gUnknown_3005E98 = sub_8126894;
sub_80A0FBC(taskId);
}
void FieldUseFunc_TmCase(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
ItemMenu_SetExitCallback(InitTMCaseFromBag);
ItemMenu_StartFadeToExitCallback(taskId);
}
else
{
sub_80CCB68();
fade_screen(1, 0);
gTasks[taskId].func = Task_InitTMCaseFromField;
}
}
void InitTMCaseFromBag(void)
{
InitTMCase(0, ReturnToBagFromKeyItem, 0);
}
void Task_InitTMCaseFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
sub_80A1184();
InitTMCase(0, CB2_ReturnToField, 1);
DestroyTask(taskId);
}
}
void FieldUseFunc_BerryPouch(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
ItemMenu_SetExitCallback(InitBerryPouchFromBag);
ItemMenu_StartFadeToExitCallback(taskId);
}
else
{
sub_80CCB68();
fade_screen(1, 0);
gTasks[taskId].func = Task_InitBerryPouchFromField;
}
}
void InitBerryPouchFromBag(void)
{
InitBerryPouch(0, ReturnToBagFromKeyItem, 0);
}
void Task_InitBerryPouchFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
sub_80A1184();
InitBerryPouch(0, CB2_ReturnToField, 1);
DestroyTask(taskId);
}
}
void BattleUseFunc_BerryPouch(u8 taskId)
{
ItemMenu_SetExitCallback(InitBerryPouchFromBattle);
ItemMenu_StartFadeToExitCallback(taskId);
}
void InitBerryPouchFromBattle(void)
{
InitBerryPouch(4, sub_8107ECC, 0);
}
void FieldUseFunc_TeachyTv(u8 taskId)
{
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF);
if (gTasks[taskId].data[3] == 0)
{
ItemMenu_SetExitCallback(InitTeachyTvFromBag);
ItemMenu_StartFadeToExitCallback(taskId);
}
else
{
sub_80CCB68();
fade_screen(1, 0);
gTasks[taskId].func = Task_InitTeachyTvFromField;
}
}
void InitTeachyTvFromBag(void)
{
InitTeachyTvController(0, ReturnToBagFromKeyItem);
}
void Task_InitTeachyTvFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
sub_80A1184();
InitTeachyTvController(0, CB2_ReturnToField);
DestroyTask(taskId);
}
}
void FieldUseFunc_SuperRepel(u8 taskId)
{
if (VarGet(VAR_REPEL_STEP_COUNT) == 0)
{
PlaySE(SE_RU_GASYAN);
gTasks[taskId].func = sub_80A19E8;
}
else
// An earlier repel is still in effect
DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, sub_810A1F8);
}
void sub_80A19E8(u8 taskId)
{
if (!IsSEPlaying())
{
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF);
VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId));
sub_80A1A44();
DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8);
}
}
void sub_80A1A44(void)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
sub_8108DC8(ItemId_GetPocket(gSpecialVar_ItemId));
sub_81089F4(ItemId_GetPocket(gSpecialVar_ItemId));
CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gUnknown_841658C);
}
void FieldUseFunc_BlackFlute(u8 taskId)
{
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF);
if (gSpecialVar_ItemId == ITEM_WHITE_FLUTE)
{
FlagSet(FLAG_WHITE_FLUTE_ACTIVE);
FlagClear(FLAG_BLACK_FLUTE_ACTIVE);
CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gUnknown_84165D2);
gTasks[taskId].func = sub_80A1B48;
gTasks[taskId].data[8] = 0;
}
else if (gSpecialVar_ItemId == ITEM_BLACK_FLUTE)
{
FlagSet(FLAG_BLACK_FLUTE_ACTIVE);
FlagClear(FLAG_WHITE_FLUTE_ACTIVE);
CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gUnknown_8416600);
gTasks[taskId].func = sub_80A1B48;
gTasks[taskId].data[8] = 0;
}
}
void sub_80A1B48(u8 taskId)
{
if (++gTasks[taskId].data[8] > 7)
{
PlaySE(SE_PN_ON);
DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8);
}
}
bool8 sub_80A1B8C(void)
{
if (gMapHeader.escapeRope & 1)
return TRUE;
else
return FALSE;
}
void ItemUseOutOfBattle_EscapeRope(u8 taskId)
{
if (sub_80A1B8C() == TRUE)
{
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, gMapHeader.regionMapSectionId);
sItemUseOnFieldCB = sub_80A1C08;
sub_80A103C(taskId);
}
else
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
void sub_80A1C08(u8 taskId)
{
sub_8054D70();
sub_80A1A44();
gTasks[taskId].data[0] = 0;
DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A1C44);
}
void sub_80A1C44(u8 taskId)
{
ResetInitialPlayerAvatarState();
sub_8085620();
DestroyTask(taskId);
}
void FieldUseFunc_TownMap(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
ItemMenu_SetExitCallback(sub_80A1CAC);
ItemMenu_StartFadeToExitCallback(taskId);
}
else
{
sub_80CCB68();
fade_screen(1, 0);
gTasks[taskId].func = sub_80A1CC0;
}
}
void sub_80A1CAC(void)
{
sub_80BFF50(0, ReturnToBagFromKeyItem);
}
void sub_80A1CC0(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
sub_80A1184();
sub_80BFF50(0, CB2_ReturnToField);
DestroyTask(taskId);
}
}
void FieldUseFunc_FameChecker(u8 taskId)
{
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF);
if (gTasks[taskId].data[3] == 0)
{
ItemMenu_SetExitCallback(sub_80A1D58);
ItemMenu_StartFadeToExitCallback(taskId);
}
else
{
sub_80CCB68();
fade_screen(1, 0);
gTasks[taskId].func = sub_80A1D68;
}
}
void sub_80A1D58(void)
{
UseFameChecker(ReturnToBagFromKeyItem);
}
void sub_80A1D68(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
sub_80A1184();
UseFameChecker(CB2_ReturnToField);
DestroyTask(taskId);
}
}
void FieldUseFunc_VsSeeker(u8 taskId)
{
if ((gMapHeader.mapType != MAP_TYPE_ROUTE
&& gMapHeader.mapType != MAP_TYPE_TOWN
&& gMapHeader.mapType != MAP_TYPE_CITY)
|| (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(VIRIDIAN_FOREST)
&& (gSaveBlock1Ptr->location.mapNum == MAP_NUM(VIRIDIAN_FOREST)
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(MT_EMBER_EXTERIOR)
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(THREE_ISLAND_BERRY_FOREST)
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(SIX_ISLAND_PATTERN_BUSH))))
{
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
else
{
sItemUseOnFieldCB = Task_VsSeeker_0;
sub_80A103C(taskId);
}
}
void sub_80A1E0C(u8 taskId)
{
sub_80A112C(taskId);
}
void BattleUseFunc_PokeBallEtc(u8 taskId)
{
if (!IsPlayerPartyAndPokemonStorageFull())
{
RemoveBagItem(gSpecialVar_ItemId, 1);
sub_8108CB4();
ItemMenu_StartFadeToExitCallback(taskId);
}
else
{
DisplayItemMessageInBag(taskId, 2, gUnknown_8416631, sub_810A1F8);
}
}
void BattleUseFunc_PokeFlute(u8 taskId)
{
sub_8108CB4();
ItemMenu_StartFadeToExitCallback(taskId);
}
void BattleUseFunc_GuardSpec(u8 taskId)
{
if (ExecuteTableBasedItemEffect(&gPlayerParty[gBattlerPartyIndexes[gBattlerInMenuId]], gSpecialVar_ItemId, gBattlerPartyIndexes[gBattlerInMenuId], 0))
{
DisplayItemMessageInBag(taskId, 2, gUnknown_84169DC, sub_810A1F8);
}
else
{
gTasks[taskId].data[8] = 0;
gTasks[taskId].func = Task_BattleUse_StatBooster_DelayAndPrint;
}
}
void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
{
s16 * data = gTasks[taskId].data;
if (++data[8] > 7)
{
u16 itemId = gSpecialVar_ItemId;
PlaySE(SE_KAIFUKU);
RemoveBagItem(itemId, 1);
DisplayItemMessageInBag(taskId, 2, Battle_PrintStatBoosterEffectMessage(itemId), Task_BattleUse_StatBooster_WaitButton_ReturnToBattle);
}
}
void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId)
{
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
sub_8108CB4();
ItemMenu_StartFadeToExitCallback(taskId);
}
}
void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
{
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
{
BerryPouch_SetExitCallback(sub_81279E0);
BerryPouch_StartFadeToExitCallback(taskId);
}
else
{
ItemMenu_SetExitCallback(sub_81279E0);
ItemMenu_StartFadeToExitCallback(taskId);
}
}
void BattleUseFunc_Medicine(u8 taskId)
{
gUnknown_3005E98 = ItemUseCB_Medicine;
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
void sub_80A1FD8(u8 taskId)
{
gUnknown_3005E98 = sub_8126894;
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
void BattleUseFunc_Ether(u8 taskId)
{
gUnknown_3005E98 = ItemUseCB_PpRestore;
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
void BattleUseFunc_PokeDoll(u8 taskId)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER))
{
sub_80A1A44();
ItemUse_SetQuestLogEvent(4, 0, gSpecialVar_ItemId, 0xFFFF);
DisplayItemMessageInBag(taskId, 2, gStringVar4, ItemMenu_StartFadeToExitCallback);
}
else
sub_80A1110(taskId, 0);
}
void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
{
switch (GetItemEffectType(gSpecialVar_ItemId) - 1)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
gTasks[taskId].data[4] = 1;
FieldUseFunc_Medicine(taskId);
break;
case 9:
gTasks[taskId].data[4] = 1;
FieldUseFunc_SacredAsh(taskId);
break;
case 0:
gTasks[taskId].data[4] = 1;
FieldUseFunc_RareCandy(taskId);
break;
case 18:
case 19:
gTasks[taskId].data[4] = 1;
FieldUseFunc_PpUp(taskId);
break;
case 20:
gTasks[taskId].data[4] = 1;
FieldUseFunc_Ether(taskId);
break;
default:
gTasks[taskId].data[4] = 4;
FieldUseFunc_OakStopsYou(taskId);
}
}
void ItemUseInBattle_EnigmaBerry(u8 taskId)
{
switch (GetItemEffectType(gSpecialVar_ItemId))
{
case 0:
BattleUseFunc_GuardSpec(taskId);
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 11:
BattleUseFunc_Medicine(taskId);
break;
case 21:
BattleUseFunc_Ether(taskId);
break;
default:
FieldUseFunc_OakStopsYou(taskId);
}
}
void FieldUseFunc_OakStopsYou(u8 taskId)
{
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
{
StringExpandPlaceholders(gStringVar4, gUnknown_8416425);
DisplayItemMessageInBerryPouch(taskId, 4, gStringVar4, sub_813E2B8);
}
else
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
void ItemUse_SetQuestLogEvent(u8 eventId, struct Pokemon * pokemon, u16 itemId, u16 param)
{
struct UnkStruct_ItemUseQuestLog
{
u16 itemId;
u16 unk2;
u16 species;
u16 param;
} * questLog = Alloc(sizeof(*questLog));
questLog->itemId = itemId;
questLog->param = param;
if (pokemon != NULL)
questLog->species = GetMonData(pokemon, MON_DATA_SPECIES2);
else
questLog->species = 0xFFFF;
sub_8113550(eventId, (void *)questLog);
Free(questLog);
}
+2 -2
View File
@@ -7,7 +7,7 @@
#include "malloc.h"
#include "item.h"
extern void sub_8099E44(void);
extern void SetBagPocketsPointers(void);
extern void sub_8110840(void *oldSave);
extern void sub_8055778(int);
extern void sub_8054F38(u32 newKey);
@@ -80,7 +80,7 @@ void SetSaveBlocksPointers(void)
*sav1_LocalVar = (void*)(&gSaveBlock1) + offset;
gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset;
sub_8099E44();
SetBagPocketsPointers();
sub_8110840(oldSave);
}
+1 -1
View File
@@ -4526,7 +4526,7 @@ void sub_8042D50(int stat)
BattleStringExpandPlaceholdersToDisplayedString(BattleText_UnknownString3);
}
u8 *sub_8042DA4(u16 itemId)
const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
{
int i;
const u8 *itemEffect;
+2 -2
View File
@@ -985,8 +985,8 @@ void sub_8111368(void)
{
gUnknown_203ADFA = 2;
sub_806E6FC();
sub_809A2DC();
sub_809A2A4();
ClearItemSlotsInAllBagPockets();
ClearPCItemSlots();
if (sub_8110AC8() == 1)
{
sub_8111274(gUnknown_203ADF8, 0);
+1 -1
View File
@@ -736,7 +736,7 @@ static void TeachyTvOptionListController(u8 taskId)
{
input = ListMenuHandleInput(data[0]);
ListMenuGetScrollAndRow(data[0], &sStaticResources.scrollOffset, &sStaticResources.selectedRow);
if ((JOY_NEW(SELECT_BUTTON) && sStaticResources.callback != UseFameCheckerFromMenu))
if ((JOY_NEW(SELECT_BUTTON) && sStaticResources.callback != ReturnToBagFromKeyItem))
{
PlaySE(SE_SELECT);
TeachyTvQuitBeginFade(taskId);
+2 -2
View File
@@ -359,7 +359,7 @@ static bool8 DoSetUpTMCaseUI(void)
gMain.state++;
break;
case 9:
sub_809A5E4(&gBagPockets[POCKET_TM_CASE - 1]);
SortPocketAndPlaceHMsFirst(&gBagPockets[POCKET_TM_CASE - 1]);
gMain.state++;
break;
case 10:
@@ -648,7 +648,7 @@ static void TMCaseSetup_GetTMCount(void)
struct BagPocket * pocket = &gBagPockets[POCKET_TM_CASE - 1];
u16 i;
sub_809A584(pocket->itemSlots, pocket->capacity);
BagPocketCompaction(pocket->itemSlots, pocket->capacity);
sTMCaseDynamicResources->numTMs = 0;
for (i = 0; i < pocket->capacity; i++)
{
+2 -1
View File
@@ -41,6 +41,7 @@ static void sub_815CFEC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2);
static bool32 SharesTileWithAnyActive(u32 id);
static bool32 SharesPalWithAnyActive(u32 id);
static void sub_8035648(void);
static u8 sub_815D324(u32 shape, u32 size);
// ewram
static EWRAM_DATA struct UnkStruct1 *gUnknown_203F454 = {0};
@@ -430,7 +431,7 @@ static bool32 SharesPalWithAnyActive(u32 id)
return FALSE;
}
u8 sub_815D324(u32 shape, u32 size)
static u8 sub_815D324(u32 shape, u32 size)
{
return gUnknown_8479658[shape][size];
}
+4 -3
View File
@@ -985,9 +985,10 @@ gUnknown_2039994: @ 2039994
gUnknown_2039996: @ 2039996
.space 0x2
gUnknown_2039998: @ 2039998
.space 0x4
.align 2
.include "src/item_use.o"
.align 2
gUnknown_203999C: @ 203999C
.space 0x8
@@ -1570,4 +1571,4 @@ gUnknown_203F440: @ 203F440
.align 2
.include "src/trainer_tower.o"
.align 2
.include "src/unk_815EDDC.o"
.include "src/berry_powder.o"
+1
View File
@@ -0,0 +1 @@
jsonproc
+20
View File
@@ -0,0 +1,20 @@
CXX := g++
CXXFLAGS := -Wall -std=c++11 -O2
INCLUDES := -I .
SRCS := jsonproc.cpp
HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp
.PHONY: clean
all: jsonproc
@:
jsonproc: $(SRCS) $(HEADERS)
$(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS)
clean:
$(RM) jsonproc jsonproc.exe
File diff suppressed because it is too large Load Diff
+91
View File
@@ -0,0 +1,91 @@
// jsonproc.cpp
#include "jsonproc.h"
#include <map>
#include <string>
using std::string;
#include <inja.hpp>
using namespace inja;
using json = nlohmann::json;
std::map<string, string> customVars;
void set_custom_var(string key, string value)
{
customVars[key] = value;
}
string get_custom_var(string key)
{
return customVars[key];
}
int main(int argc, char *argv[])
{
if (argc != 4)
FATAL_ERROR("USAGE: jsonproc <json-filepath> <template-filepath> <output-filepath>\n");
string jsonfilepath = argv[1];
string templateFilepath = argv[2];
string outputFilepath = argv[3];
Environment env;
// Add custom command callbacks.
env.add_callback("doNotModifyHeader", 0, [jsonfilepath, templateFilepath](Arguments& args) {
return "//\n// DO NOT MODIFY THIS FILE! IT IS AUTO-GENERATED FROM " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n";
});
env.add_callback("setVar", 2, [=](Arguments& args) {
string key = args.at(0)->get<string>();
string value = args.at(1)->get<string>();
set_custom_var(key, value);
return "";
});
env.add_callback("getVar", 1, [=](Arguments& args) {
string key = args.at(0)->get<string>();
return get_custom_var(key);
});
env.add_callback("concat", 2, [](Arguments& args) {
string first = args.at(0)->get<string>();
string second = args.at(1)->get<string>();
return first + second;
});
env.add_callback("removePrefix", 2, [](Arguments& args) {
string rawValue = args.at(0)->get<string>();
string prefix = args.at(1)->get<string>();
string::size_type i = rawValue.find(prefix);
if (i != 0)
return rawValue;
return rawValue.erase(0, prefix.length());
});
// Add custom command callbacks.
env.add_callback("removeSuffix", 2, [](Arguments& args) {
string rawValue = args.at(0)->get<string>();
string suffix = args.at(1)->get<string>();
string::size_type i = rawValue.rfind(suffix);
if (i == string::npos)
return rawValue;
return rawValue.substr(0, i);
});
try
{
env.write_with_json_file(templateFilepath, jsonfilepath, outputFilepath);
}
catch (const std::exception& e)
{
FATAL_ERROR("JSONPROC_ERROR: %s\n", e.what());
}
return 0;
}
+32
View File
@@ -0,0 +1,32 @@
// jsonproc.h
#ifndef JSONPROC_H
#define JSONPROC_H
#include <cstdlib>
#include <cstdio>
using std::fprintf; using std::exit;
#include <cstdlib>
#ifdef _MSC_VER
#define FATAL_ERROR(format, ...) \
do \
{ \
fprintf(stderr, format, __VA_ARGS__); \
exit(1); \
} while (0)
#else
#define FATAL_ERROR(format, ...) \
do \
{ \
fprintf(stderr, format, ##__VA_ARGS__); \
exit(1); \
} while (0)
#endif // _MSC_VER
#endif // JSONPROC_H
File diff suppressed because it is too large Load Diff