@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+43
-43
@@ -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
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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]
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
+354
-357
File diff suppressed because it is too large
Load Diff
@@ -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[];
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef GUARD_BERRY_POWDER_H
|
||||
#define GUARD_BERRY_POWDER_H
|
||||
|
||||
u32 GetBerryPowder(void);
|
||||
|
||||
#endif //GUARD_BERRY_POWDER_H
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef GUARD_ITEMFINDER_H
|
||||
#define GUARD_ITEMFINDER_H
|
||||
|
||||
void sub_813EC8C(u8 taskId);
|
||||
|
||||
#endif //GUARD_ITEMFINDER_H
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
jsonproc
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
@@ -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
Reference in New Issue
Block a user