gBerries refactor + untangling berry indices from item IDs (#7305)
Some checks are pending
CI / build-emerald (push) Waiting to run
CI / build-firered (push) Waiting to run
CI / build-leafgreen (push) Waiting to run
CI / release (push) Waiting to run
CI / test (push) Waiting to run
CI / build (push) Blocked by required conditions
CI / docs_validate (push) Waiting to run
CI / allcontributors (push) Waiting to run

This commit is contained in:
Nephrite 2026-03-21 20:30:09 +00:00 committed by GitHub
parent 264d99215b
commit 47cac73a61
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
42 changed files with 2956 additions and 2308 deletions

View File

@ -1279,11 +1279,14 @@
.endm
@ Sets a berry tree's berry and growth stage. treeId is any BERRY_TREE_* constant (an index into berryTrees in SaveBlock1),
@ berry is any ITEM_TO_BERRY(ITEM_BERRY_NAME) value, and growthStage is any BERRY_STAGE_* constant.
.macro setberrytree treeId:req, berry:req, growthStage:req
@ berryId is any BERRY_ID_X value, and growthStage is any BERRY_STAGE_* constant.
.macro setberrytree treeId:req, berryId:req, growthStage:req
.if \berryId == 0 || \berryId > NUM_BERRIES
.error "setberrytree must use a valid berry index"
.endif
.byte SCR_OP_SETBERRYTREE
.byte \treeId
.byte \berry
.byte \berryId
.byte \growthStage
.endm
@ -2785,6 +2788,20 @@
.4byte \name
.endm
@ Gives a random berry between the index ranges
.macro giverandomberry loBerry:req, hiBerry:req
.if \loBerry == 0 || \loBerry > NUM_BERRIES
.error "giverandomberry must use a valid berry index for first argument"
.endif
.if \hiBerry == 0 || \hiBerry > NUM_BERRIES
.error "giverandomberry must use a valid berry index for second argument"
.endif
callnative Script_GiveRandomBerry
.byte \loBerry
.byte \hiBerry
giveitem VAR_RESULT
.endm
@ VS Seeker
.macro vsseeker_rematchid rematchId:req
callnative NativeVsSeekerRematchId, requests_effects=1

View File

@ -36,9 +36,7 @@ LilycoveCity_EventScript_BerryGentleman::
dotimebasedevents
goto_if_set FLAG_DAILY_LILYCOVE_RECEIVED_BERRY, LilycoveCity_EventScript_ReceivedBerry
msgbox LilycoveCity_Text_BerrySuitsYou, MSGBOX_DEFAULT
random 10
addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem VAR_RESULT
giverandomberry BERRY_ID_CHERI, BERRY_ID_SITRUS
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_DAILY_LILYCOVE_RECEIVED_BERRY
msgbox LilycoveCity_Text_BecauseYoureTrainer, MSGBOX_DEFAULT

View File

@ -82,9 +82,7 @@ Route104_PrettyPetalFlowerShop_EventScript_RandomBerryGirl::
dotimebasedevents
goto_if_set FLAG_DAILY_FLOWER_SHOP_RECEIVED_BERRY, Route104_PrettyPetalFlowerShop_EventScript_AlreadyReceivedBerry
msgbox Route104_PrettyPetalFlowerShop_Text_ImGrowingFlowers, MSGBOX_DEFAULT
random 8
addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem VAR_RESULT
giverandomberry BERRY_ID_CHERI, BERRY_ID_PERSIM
goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull
setflag FLAG_DAILY_FLOWER_SHOP_RECEIVED_BERRY
msgbox Route104_PrettyPetalFlowerShop_Text_MachineMixesBerries, MSGBOX_DEFAULT

View File

@ -25,10 +25,7 @@ Route114_EventScript_Man::
dotimebasedevents
goto_if_set FLAG_DAILY_ROUTE_114_RECEIVED_BERRY, Route114_EventScript_ReceivedBerry
msgbox Route114_Text_LoveUsingBerryCrushShareBerry, MSGBOX_DEFAULT
random NUM_ROUTE_114_MAN_BERRIES
addvar VAR_RESULT, NUM_ROUTE_114_MAN_BERRIES_SKIPPED
addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem VAR_RESULT
giverandomberry BERRY_ID_RAZZ, BERRY_ID_PINAP
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_DAILY_ROUTE_114_RECEIVED_BERRY
msgbox Route114_Text_TryBerryCrushWithFriends, MSGBOX_DEFAULT

View File

@ -12,17 +12,11 @@ Route123_BerryMastersHouse_EventScript_BerryMaster::
dotimebasedevents
goto_if_set FLAG_DAILY_BERRY_MASTER_RECEIVED_BERRY, Route123_BerryMastersHouse_EventScript_ReceivedBerryToday
msgbox Route123_BerryMastersHouse_Text_YoureDeservingOfBerry, MSGBOX_DEFAULT
random NUM_BERRY_MASTER_BERRIES
addvar VAR_RESULT, NUM_BERRY_MASTER_BERRIES_SKIPPED
addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem VAR_RESULT
giverandomberry BERRY_ID_POMEG, BERRY_ID_NOMEL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_DAILY_BERRY_MASTER_RECEIVED_BERRY
msgbox Route123_BerryMastersHouse_Text_WhyBeStingyTakeAnother, MSGBOX_DEFAULT
random NUM_BERRY_MASTER_BERRIES
addvar VAR_RESULT, NUM_BERRY_MASTER_BERRIES_SKIPPED
addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem VAR_RESULT
giverandomberry BERRY_ID_POMEG, BERRY_ID_NOMEL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
msgbox Route123_BerryMastersHouse_Text_VisitPrettyPetalFlowerShop, MSGBOX_DEFAULT
release
@ -64,9 +58,7 @@ Route123_BerryMastersHouse_EventScript_GavePhrase::
Route123_BerryMastersHouse_EventScript_GiveNormalBerry::
msgbox Route123_BerryMastersHouse_Text_GoodSayingTakeThis, MSGBOX_DEFAULT
random NUM_BERRY_MASTER_WIFE_BERRIES
addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem VAR_RESULT
giverandomberry BERRY_ID_CHERI, BERRY_ID_SITRUS
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
goto Route123_BerryMastersHouse_EventScript_GaveBerry
release

View File

@ -708,16 +708,13 @@ SootopolisCity_EventScript_KiriRayquaza::
release
end
@ Gives 2 berries daily. First ranges from FIRST_KIRI_BERRY to LAST_KIRI_BERRY, second is always Figy or Iapapa
@ Gives 2 berries daily. First ranges from BERRY_ID_POMEG to BERRY_ID_NOMEL, second is always Figy or Iapapa
SootopolisCity_EventScript_KiriGiveBerry::
dotimebasedevents
special GetPlayerBigGuyGirlString
goto_if_set FLAG_DAILY_SOOTOPOLIS_RECEIVED_BERRY, SootopolisCity_EventScript_KiriReceivedBerry
msgbox SootopolisCity_Text_NameIsKiriHaveOneOfThese, MSGBOX_DEFAULT
random NUM_KIRI_BERRIES
addvar VAR_RESULT, NUM_KIRI_BERRIES_SKIPPED
addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem VAR_RESULT
giverandomberry BERRY_ID_POMEG, BERRY_ID_NOMEL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_DAILY_SOOTOPOLIS_RECEIVED_BERRY
msgbox SootopolisCity_Text_GiveYouThisBerryToo, MSGBOX_DEFAULT

View File

@ -1,115 +1,115 @@
EventScript_ResetAllBerries::
@ Route 102
setberrytree BERRY_TREE_ROUTE_102_ORAN, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_102_PECHA, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_102_ORAN, BERRY_ID_ORAN, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_102_PECHA, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
@ Route 104
setberrytree BERRY_TREE_ROUTE_104_ORAN_2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_PECHA, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_ORAN_1, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_CHERI_2, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_CHERI_1, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_LEPPA, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_ORAN_2, BERRY_ID_ORAN, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_PECHA, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_ORAN_1, BERRY_ID_ORAN, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_CHERI_2, BERRY_ID_CHERI, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_CHERI_1, BERRY_ID_CHERI, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_104_LEPPA, BERRY_ID_LEPPA, BERRY_STAGE_BERRIES
@ Route 116
setberrytree BERRY_TREE_ROUTE_116_PINAP_1, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_116_CHESTO_1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_116_CHESTO_2, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_116_PINAP_2, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_116_PINAP_1, BERRY_ID_PINAP, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_116_CHESTO_1, BERRY_ID_CHESTO, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_116_CHESTO_2, BERRY_ID_CHESTO, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_116_PINAP_2, BERRY_ID_PINAP, BERRY_STAGE_BERRIES
@ Route 115
setberrytree BERRY_TREE_ROUTE_115_KELPSY_1, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_KELPSY_2, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_KELPSY_3, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_BLUK_1, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_BLUK_2, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_KELPSY_1, BERRY_ID_KELPSY, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_KELPSY_2, BERRY_ID_KELPSY, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_KELPSY_3, BERRY_ID_KELPSY, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_BLUK_1, BERRY_ID_BLUK, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_115_BLUK_2, BERRY_ID_BLUK, BERRY_STAGE_BERRIES
@ Route 103
setberrytree BERRY_TREE_ROUTE_103_CHERI_1, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_103_LEPPA, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_103_CHERI_2, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_103_CHERI_1, BERRY_ID_CHERI, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_103_LEPPA, BERRY_ID_LEPPA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_103_CHERI_2, BERRY_ID_CHERI, BERRY_STAGE_BERRIES
@ Route 110
setberrytree BERRY_TREE_ROUTE_110_NANAB_1, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_110_NANAB_2, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_110_NANAB_3, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_110_NANAB_1, BERRY_ID_NANAB, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_110_NANAB_2, BERRY_ID_NANAB, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_110_NANAB_3, BERRY_ID_NANAB, BERRY_STAGE_BERRIES
@ Route 117
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_3, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_2, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_1, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_3, BERRY_ID_WEPEAR, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_2, BERRY_ID_WEPEAR, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_1, BERRY_ID_WEPEAR, BERRY_STAGE_BERRIES
@ Route 112
setberrytree BERRY_TREE_ROUTE_112_RAWST_2, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_112_PECHA_2, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_112_PECHA_1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_112_RAWST_1, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_112_RAWST_2, BERRY_ID_RAWST, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_112_PECHA_2, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_112_PECHA_1, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_112_RAWST_1, BERRY_ID_RAWST, BERRY_STAGE_BERRIES
@ Route 111
setberrytree BERRY_TREE_ROUTE_111_RAZZ_1, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_111_RAZZ_2, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_111_ORAN_1, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_111_ORAN_2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_111_RAZZ_1, BERRY_ID_RAZZ, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_111_RAZZ_2, BERRY_ID_RAZZ, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_111_ORAN_1, BERRY_ID_ORAN, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_111_ORAN_2, BERRY_ID_ORAN, BERRY_STAGE_BERRIES
@ Route 114
setberrytree BERRY_TREE_ROUTE_114_PERSIM_2, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_114_PERSIM_3, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_114_PERSIM_1, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_114_PERSIM_2, BERRY_ID_PERSIM, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_114_PERSIM_3, BERRY_ID_PERSIM, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_114_PERSIM_1, BERRY_ID_PERSIM, BERRY_STAGE_BERRIES
@ Route 118
setberrytree BERRY_TREE_ROUTE_118_SITRUS_1, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_118_SITRUS_2, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_118_SITRUS_1, BERRY_ID_SITRUS, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_118_SITRUS_2, BERRY_ID_SITRUS, BERRY_STAGE_BERRIES
@ Route 119
setberrytree BERRY_TREE_ROUTE_119_POMEG_1, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_POMEG_2, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_POMEG_3, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_HONDEW_1, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_HONDEW_2, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_SITRUS, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_LEPPA, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_POMEG_1, BERRY_ID_POMEG, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_POMEG_2, BERRY_ID_POMEG, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_POMEG_3, BERRY_ID_POMEG, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_HONDEW_1, BERRY_ID_HONDEW, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_HONDEW_2, BERRY_ID_HONDEW, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_SITRUS, BERRY_ID_SITRUS, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_119_LEPPA, BERRY_ID_LEPPA, BERRY_STAGE_BERRIES
@ Route 120
setberrytree BERRY_TREE_ROUTE_120_ASPEAR_1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_ASPEAR_2, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_ASPEAR_3, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PECHA_1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PECHA_2, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PECHA_3, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_WEPEAR, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PINAP, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_NANAB, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_RAZZ, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_ASPEAR_1, BERRY_ID_ASPEAR, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_ASPEAR_2, BERRY_ID_ASPEAR, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_ASPEAR_3, BERRY_ID_ASPEAR, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PECHA_1, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PECHA_2, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PECHA_3, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_WEPEAR, BERRY_ID_WEPEAR, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_PINAP, BERRY_ID_PINAP, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_NANAB, BERRY_ID_NANAB, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_120_RAZZ, BERRY_ID_RAZZ, BERRY_STAGE_BERRIES
@ Route 121
setberrytree BERRY_TREE_ROUTE_121_PERSIM, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_ASPEAR, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_RAWST, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_CHESTO, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_NANAB_1, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_NANAB_2, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_PERSIM, BERRY_ID_PERSIM, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_ASPEAR, BERRY_ID_ASPEAR, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_RAWST, BERRY_ID_RAWST, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_CHESTO, BERRY_ID_CHESTO, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_NANAB_1, BERRY_ID_NANAB, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_121_NANAB_2, BERRY_ID_NANAB, BERRY_STAGE_BERRIES
@ Route 123
setberrytree BERRY_TREE_ROUTE_123_LEPPA_1, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_LEPPA_2, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_3, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_4, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_1, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_2, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_4, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_1, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_1, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_2, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_3, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_4, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_2, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_3, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_PECHA, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_SITRUS, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_RAWST, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_LEPPA_1, BERRY_ID_LEPPA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_LEPPA_2, BERRY_ID_LEPPA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_3, BERRY_ID_POMEG, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_4, BERRY_ID_POMEG, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_1, BERRY_ID_GREPA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_2, BERRY_ID_GREPA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_4, BERRY_ID_QUALOT, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_1, BERRY_ID_QUALOT, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_1, BERRY_ID_POMEG, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_POMEG_2, BERRY_ID_POMEG, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_3, BERRY_ID_GREPA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_GREPA_4, BERRY_ID_GREPA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_2, BERRY_ID_QUALOT, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_QUALOT_3, BERRY_ID_QUALOT, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_PECHA, BERRY_ID_PECHA, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_SITRUS, BERRY_ID_SITRUS, BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_123_RAWST, BERRY_ID_RAWST, BERRY_STAGE_BERRIES
@ Mirage Island
setberrytree BERRY_TREE_ROUTE_130_LIECHI, ITEM_TO_BERRY(ITEM_LIECHI_BERRY), BERRY_STAGE_BERRIES
setberrytree BERRY_TREE_ROUTE_130_LIECHI, BERRY_ID_LIECHI, BERRY_STAGE_BERRIES
return
EventScript_ResetAllMapFlags::

View File

@ -83,14 +83,6 @@ enum ItemEffect
#define CRITICAL_HIT_BLOCKED -1
#define CRITICAL_HIT_ALWAYS -2
// for Natural Gift and Fling
struct TypePower
{
enum Type type:8;
u8 power;
u16 effect;
};
enum ImmunityHealStatusOutcome
{
IMMUNITY_NO_EFFECT,
@ -100,8 +92,6 @@ enum ImmunityHealStatusOutcome
IMMUNITY_TAUNT_CLEARED,
};
extern const struct TypePower gNaturalGiftTable[];
struct BattleContext
{
enum BattlerId battlerAtk:3;

View File

@ -3,18 +3,17 @@
void SetEnigmaBerry(u8 *src);
bool32 IsEnigmaBerryValid(void);
const struct Berry *GetBerryInfo(u8 berry);
const struct BerryInfo *GetBerryInfo(enum BerryId berry);
struct BerryTree *GetBerryTreeInfo(u8 id);
bool32 ObjectEventInteractionWaterBerryTree(void);
bool8 IsPlayerFacingEmptyBerryTreePatch(void);
bool8 TryToWaterBerryTree(void);
void ClearBerryTrees(void);
void BerryTreeTimeUpdate(s32 minutes);
void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 allowGrowth);
void PlantBerryTree(u8 id, enum BerryId berry, u8 stage, bool8 allowGrowth);
void RemoveBerryTree(u8 id);
u8 GetBerryTypeByBerryTreeId(u8 id);
u8 GetStageByBerryTreeId(u8 id);
u8 ItemIdToBerryType(enum Item item);
void GetBerryNameByBerryType(u8 berry, u8 *string);
void Bag_ChooseBerry(void);
void Bag_ChooseMulch(void);
@ -27,13 +26,234 @@ bool8 PlayerHasBerries(void);
void SetBerryTreesSeen(void);
bool32 BerryTreeGrow(struct BerryTree *tree);
extern const struct SpriteFrameImage gPicTable_CheriBerryTree[];
extern const struct SpriteFrameImage gPicTable_ChestoBerryTree[];
extern const struct SpriteFrameImage gPicTable_PechaBerryTree[];
extern const struct SpriteFrameImage gPicTable_RawstBerryTree[];
extern const struct SpriteFrameImage gPicTable_AspearBerryTree[];
extern const struct SpriteFrameImage gPicTable_LeppaBerryTree[];
extern const struct SpriteFrameImage gPicTable_OranBerryTree[];
extern const struct SpriteFrameImage gPicTable_PersimBerryTree[];
extern const struct SpriteFrameImage gPicTable_LumBerryTree[];
extern const struct SpriteFrameImage gPicTable_SitrusBerryTree[];
extern const struct SpriteFrameImage gPicTable_FigyBerryTree[];
extern const struct SpriteFrameImage gPicTable_WikiBerryTree[];
extern const struct SpriteFrameImage gPicTable_MagoBerryTree[];
extern const struct SpriteFrameImage gPicTable_AguavBerryTree[];
extern const struct SpriteFrameImage gPicTable_IapapaBerryTree[];
extern const struct SpriteFrameImage gPicTable_RazzBerryTree[];
extern const struct SpriteFrameImage gPicTable_WepearBerryTree[];
extern const struct SpriteFrameImage gPicTable_PomegBerryTree[];
extern const struct SpriteFrameImage gPicTable_KelpsyBerryTree[];
extern const struct SpriteFrameImage gPicTable_HondewBerryTree[];
extern const struct SpriteFrameImage gPicTable_GrepaBerryTree[];
extern const struct SpriteFrameImage gPicTable_TamatoBerryTree[];
extern const struct SpriteFrameImage gPicTable_CornnBerryTree[];
extern const struct SpriteFrameImage gPicTable_RabutaBerryTree[];
extern const struct SpriteFrameImage gPicTable_NomelBerryTree[];
extern const struct SpriteFrameImage gPicTable_SpelonBerryTree[];
extern const struct SpriteFrameImage gPicTable_PamtreBerryTree[];
extern const struct SpriteFrameImage gPicTable_DurinBerryTree[];
extern const struct SpriteFrameImage gPicTable_OccaBerryTree[];
extern const struct SpriteFrameImage gPicTable_YacheBerryTree[];
extern const struct SpriteFrameImage gPicTable_ChopleBerryTree[];
extern const struct SpriteFrameImage gPicTable_KebiaBerryTree[];
extern const struct SpriteFrameImage gPicTable_ShucaBerryTree[];
extern const struct SpriteFrameImage gPicTable_PayapaBerryTree[];
extern const struct SpriteFrameImage gPicTable_TangaBerryTree[];
extern const struct SpriteFrameImage gPicTable_KasibBerryTree[];
extern const struct SpriteFrameImage gPicTable_HabanBerryTree[];
extern const struct SpriteFrameImage gPicTable_ColburBerryTree[];
extern const struct SpriteFrameImage gPicTable_RoseliBerryTree[];
extern const struct SpriteFrameImage gPicTable_LiechiBerryTree[];
extern const struct SpriteFrameImage gPicTable_LansatBerryTree[];
extern const struct SpriteFrameImage gPicTable_MicleBerryTree[];
extern const struct SpriteFrameImage gPicTable_CustapBerryTree[];
extern const struct SpriteFrameImage gPicTable_JabocaBerryTree[];
extern const struct SpriteFrameImage gPicTable_RowapBerryTree[];
extern const u8 gBerryTreePaletteSlotTable_Cheri[];
extern const u8 gBerryTreePaletteSlotTable_Chesto[];
extern const u8 gBerryTreePaletteSlotTable_Pecha[];
extern const u8 gBerryTreePaletteSlotTable_Rawst[];
extern const u8 gBerryTreePaletteSlotTable_Aspear[];
extern const u8 gBerryTreePaletteSlotTable_Leppa[];
extern const u8 gBerryTreePaletteSlotTable_Oran[];
extern const u8 gBerryTreePaletteSlotTable_Persim[];
extern const u8 gBerryTreePaletteSlotTable_Lum[];
extern const u8 gBerryTreePaletteSlotTable_Sitrus[];
extern const u8 gBerryTreePaletteSlotTable_Figy[];
extern const u8 gBerryTreePaletteSlotTable_Wiki[];
extern const u8 gBerryTreePaletteSlotTable_Mago[];
extern const u8 gBerryTreePaletteSlotTable_Aguav[];
extern const u8 gBerryTreePaletteSlotTable_Iapapa[];
extern const u8 gBerryTreePaletteSlotTable_Razz[];
extern const u8 gBerryTreePaletteSlotTable_Wepear[];
extern const u8 gBerryTreePaletteSlotTable_Pomeg[];
extern const u8 gBerryTreePaletteSlotTable_Kelpsy[];
extern const u8 gBerryTreePaletteSlotTable_Hondew[];
extern const u8 gBerryTreePaletteSlotTable_Grepa[];
extern const u8 gBerryTreePaletteSlotTable_Tamato[];
extern const u8 gBerryTreePaletteSlotTable_Cornn[];
extern const u8 gBerryTreePaletteSlotTable_Rabuta[];
extern const u8 gBerryTreePaletteSlotTable_Nomel[];
extern const u8 gBerryTreePaletteSlotTable_Spelon[];
extern const u8 gBerryTreePaletteSlotTable_Pamtre[];
extern const u8 gBerryTreePaletteSlotTable_Durin[];
extern const u8 gBerryTreePaletteSlotTable_Occa[];
extern const u8 gBerryTreePaletteSlotTable_Yache[];
extern const u8 gBerryTreePaletteSlotTable_Chople[];
extern const u8 gBerryTreePaletteSlotTable_Kebia[];
extern const u8 gBerryTreePaletteSlotTable_Shuca[];
extern const u8 gBerryTreePaletteSlotTable_Payapa[];
extern const u8 gBerryTreePaletteSlotTable_Tanga[];
extern const u8 gBerryTreePaletteSlotTable_Kasib[];
extern const u8 gBerryTreePaletteSlotTable_Haban[];
extern const u8 gBerryTreePaletteSlotTable_Colbur[];
extern const u8 gBerryTreePaletteSlotTable_Roseli[];
extern const u8 gBerryTreePaletteSlotTable_Liechi[];
extern const u8 gBerryTreePaletteSlotTable_Lansat[];
extern const u8 gBerryTreePaletteSlotTable_Micle[];
extern const u8 gBerryTreePaletteSlotTable_Custap[];
extern const u8 gBerryTreePaletteSlotTable_Jaboca[];
extern const u8 gBerryTreePaletteSlotTable_Rowap[];
extern const u32 gBerryPic_Cheri[];
extern const u32 gBerryPic_Chesto[];
extern const u32 gBerryPic_Pecha[];
extern const u32 gBerryPic_Rawst[];
extern const u32 gBerryPic_Aspear[];
extern const u32 gBerryPic_Leppa[];
extern const u32 gBerryPic_Oran[];
extern const u32 gBerryPic_Persim[];
extern const u32 gBerryPic_Lum[];
extern const u32 gBerryPic_Sitrus[];
extern const u32 gBerryPic_Figy[];
extern const u32 gBerryPic_Wiki[];
extern const u32 gBerryPic_Mago[];
extern const u32 gBerryPic_Aguav[];
extern const u32 gBerryPic_Iapapa[];
extern const u32 gBerryPic_Razz[];
extern const u32 gBerryPic_Bluk[];
extern const u32 gBerryPic_Nanab[];
extern const u32 gBerryPic_Wepear[];
extern const u32 gBerryPic_Pinap[];
extern const u32 gBerryPic_Pomeg[];
extern const u32 gBerryPic_Kelpsy[];
extern const u32 gBerryPic_Qualot[];
extern const u32 gBerryPic_Hondew[];
extern const u32 gBerryPic_Grepa[];
extern const u32 gBerryPic_Tamato[];
extern const u32 gBerryPic_Cornn[];
extern const u32 gBerryPic_Magost[];
extern const u32 gBerryPic_Rabuta[];
extern const u32 gBerryPic_Nomel[];
extern const u32 gBerryPic_Spelon[];
extern const u32 gBerryPic_Pamtre[];
extern const u32 gBerryPic_Watmel[];
extern const u32 gBerryPic_Durin[];
extern const u32 gBerryPic_Belue[];
extern const u32 gBerryPic_Chilan[];
extern const u32 gBerryPic_Occa[];
extern const u32 gBerryPic_Passho[];
extern const u32 gBerryPic_Wacan[];
extern const u32 gBerryPic_Rindo[];
extern const u32 gBerryPic_Yache[];
extern const u32 gBerryPic_Chople[];
extern const u32 gBerryPic_Kebia[];
extern const u32 gBerryPic_Shuca[];
extern const u32 gBerryPic_Coba[];
extern const u32 gBerryPic_Payapa[];
extern const u32 gBerryPic_Tanga[];
extern const u32 gBerryPic_Charti[];
extern const u32 gBerryPic_Kasib[];
extern const u32 gBerryPic_Haban[];
extern const u32 gBerryPic_Colbur[];
extern const u32 gBerryPic_Babiri[];
extern const u32 gBerryPic_Roseli[];
extern const u32 gBerryPic_Liechi[];
extern const u32 gBerryPic_Ganlon[];
extern const u32 gBerryPic_Salac[];
extern const u32 gBerryPic_Petaya[];
extern const u32 gBerryPic_Apicot[];
extern const u32 gBerryPic_Lansat[];
extern const u32 gBerryPic_Starf[];
extern const u32 gBerryPic_Enigma[];
extern const u32 gBerryPic_Micle[];
extern const u32 gBerryPic_Custap[];
extern const u32 gBerryPic_Jaboca[];
extern const u32 gBerryPic_Rowap[];
extern const u32 gBerryPic_Kee[];
extern const u32 gBerryPic_Maranga[];
extern const u16 gBerryPalette_Cheri[];
extern const u16 gBerryPalette_Chesto[];
extern const u16 gBerryPalette_Pecha[];
extern const u16 gBerryPalette_Rawst[];
extern const u16 gBerryPalette_Aspear[];
extern const u16 gBerryPalette_Leppa[];
extern const u16 gBerryPalette_Oran[];
extern const u16 gBerryPalette_Persim[];
extern const u16 gBerryPalette_Lum[];
extern const u16 gBerryPalette_Sitrus[];
extern const u16 gBerryPalette_Figy[];
extern const u16 gBerryPalette_Wiki[];
extern const u16 gBerryPalette_Mago[];
extern const u16 gBerryPalette_Aguav[];
extern const u16 gBerryPalette_Iapapa[];
extern const u16 gBerryPalette_Razz[];
extern const u16 gBerryPalette_Bluk[];
extern const u16 gBerryPalette_Nanab[];
extern const u16 gBerryPalette_Wepear[];
extern const u16 gBerryPalette_Pinap[];
extern const u16 gBerryPalette_Pomeg[];
extern const u16 gBerryPalette_Kelpsy[];
extern const u16 gBerryPalette_Qualot[];
extern const u16 gBerryPalette_Hondew[];
extern const u16 gBerryPalette_Grepa[];
extern const u16 gBerryPalette_Tamato[];
extern const u16 gBerryPalette_Cornn[];
extern const u16 gBerryPalette_Magost[];
extern const u16 gBerryPalette_Rabuta[];
extern const u16 gBerryPalette_Nomel[];
extern const u16 gBerryPalette_Spelon[];
extern const u16 gBerryPalette_Pamtre[];
extern const u16 gBerryPalette_Watmel[];
extern const u16 gBerryPalette_Durin[];
extern const u16 gBerryPalette_Belue[];
extern const u16 gBerryPalette_Chilan[];
extern const u16 gBerryPalette_Occa[];
extern const u16 gBerryPalette_Passho[];
extern const u16 gBerryPalette_Wacan[];
extern const u16 gBerryPalette_Rindo[];
extern const u16 gBerryPalette_Yache[];
extern const u16 gBerryPalette_Chople[];
extern const u16 gBerryPalette_Kebia[];
extern const u16 gBerryPalette_Shuca[];
extern const u16 gBerryPalette_Coba[];
extern const u16 gBerryPalette_Payapa[];
extern const u16 gBerryPalette_Tanga[];
extern const u16 gBerryPalette_Charti[];
extern const u16 gBerryPalette_Kasib[];
extern const u16 gBerryPalette_Haban[];
extern const u16 gBerryPalette_Colbur[];
extern const u16 gBerryPalette_Babiri[];
extern const u16 gBerryPalette_Roseli[];
extern const u16 gBerryPalette_Liechi[];
extern const u16 gBerryPalette_Ganlon[];
extern const u16 gBerryPalette_Salac[];
extern const u16 gBerryPalette_Petaya[];
extern const u16 gBerryPalette_Apicot[];
extern const u16 gBerryPalette_Lansat[];
extern const u16 gBerryPalette_Starf[];
extern const u16 gBerryPalette_Enigma[];
extern const u16 gBerryPalette_Micle[];
extern const u16 gBerryPalette_Custap[];
extern const u16 gBerryPalette_Jaboca[];
extern const u16 gBerryPalette_Rowap[];
extern const u16 gBerryPalette_Kee[];
extern const u16 gBerryPalette_Maranga[];
extern const struct Berry gBerries[];
struct BerryCrushBerryData {
u8 difficulty; // The number of A presses required to crush it
u16 powder;
};
extern const struct BerryCrushBerryData gBerryCrush_BerryData[];
#endif // GUARD_BERRY_H

View File

@ -0,0 +1,73 @@
#ifndef GUARD_CONSTANTS_BERRIES_H
#define GUARD_CONSTANTS_BERRIES_H
#define FOREACH_BERRY(F) \
F(CHERI) \
F(CHESTO) \
F(PECHA) \
F(RAWST) \
F(ASPEAR) \
F(LEPPA) \
F(ORAN) \
F(PERSIM) \
F(LUM) \
F(SITRUS) \
F(FIGY) \
F(WIKI) \
F(MAGO) \
F(AGUAV) \
F(IAPAPA) \
F(RAZZ) \
F(BLUK) \
F(NANAB) \
F(WEPEAR) \
F(PINAP) \
F(POMEG) \
F(KELPSY) \
F(QUALOT) \
F(HONDEW) \
F(GREPA) \
F(TAMATO) \
F(CORNN) \
F(MAGOST) \
F(RABUTA) \
F(NOMEL) \
F(SPELON) \
F(PAMTRE) \
F(WATMEL) \
F(DURIN) \
F(BELUE) \
F(OCCA) \
F(PASSHO) \
F(WACAN) \
F(RINDO) \
F(YACHE) \
F(CHOPLE) \
F(KEBIA) \
F(SHUCA) \
F(COBA) \
F(PAYAPA) \
F(TANGA) \
F(CHARTI) \
F(KASIB) \
F(HABAN) \
F(COLBUR) \
F(BABIRI) \
F(CHILAN) \
F(LIECHI) \
F(GANLON) \
F(SALAC) \
F(PETAYA) \
F(APICOT) \
F(LANSAT) \
F(STARF) \
F(ENIGMA) \
F(MICLE) \
F(CUSTAP) \
F(JABOCA) \
F(ROWAP) \
F(ROSELI) \
F(KEE) \
F(MARANGA)
#endif

View File

@ -3,6 +3,7 @@
#include "metaprogram.h"
#include "constants/tms_hms.h"
#include "constants/berries.h"
enum __attribute__((packed)) Item
{
@ -1069,25 +1070,18 @@ enum __attribute__((packed)) Item
#define CONFUSE_BERRY_HP_FRACTION ((B_CONFUSE_BERRIES_HEAL >= GEN_7) ? 4 : 2)
// Range of berries given out by various NPCS
#define FIRST_BERRY_MASTER_BERRY ITEM_POMEG_BERRY
#define LAST_BERRY_MASTER_BERRY ITEM_NOMEL_BERRY
#define FIRST_BERRY_MASTER_WIFE_BERRY ITEM_CHERI_BERRY
#define LAST_BERRY_MASTER_WIFE_BERRY ITEM_SITRUS_BERRY
#define FIRST_KIRI_BERRY ITEM_POMEG_BERRY
#define LAST_KIRI_BERRY ITEM_NOMEL_BERRY
#define FIRST_ROUTE_114_MAN_BERRY ITEM_RAZZ_BERRY
#define LAST_ROUTE_114_MAN_BERRY ITEM_PINAP_BERRY
#define UNPACK_BERRY_ID(_berry) BERRY_ID_##_berry,
#define NUM_BERRY_MASTER_BERRIES (LAST_BERRY_MASTER_BERRY - FIRST_BERRY_MASTER_BERRY + 1)
#define NUM_BERRY_MASTER_BERRIES_SKIPPED (FIRST_BERRY_MASTER_BERRY - FIRST_BERRY_INDEX)
#define NUM_BERRY_MASTER_WIFE_BERRIES (LAST_BERRY_MASTER_WIFE_BERRY - FIRST_BERRY_MASTER_WIFE_BERRY + 1)
#define NUM_KIRI_BERRIES (LAST_KIRI_BERRY - FIRST_KIRI_BERRY + 1)
#define NUM_KIRI_BERRIES_SKIPPED (FIRST_KIRI_BERRY - FIRST_BERRY_INDEX)
#define NUM_ROUTE_114_MAN_BERRIES (LAST_ROUTE_114_MAN_BERRY - FIRST_ROUTE_114_MAN_BERRY + 1)
#define NUM_ROUTE_114_MAN_BERRIES_SKIPPED (FIRST_ROUTE_114_MAN_BERRY - FIRST_BERRY_INDEX)
enum BerryId
{
BERRY_ID_NONE,
FOREACH_BERRY(UNPACK_BERRY_ID)
BERRY_ID_ENGIMA_E_READER,
NUM_BERRIES = BERRY_ID_ENGIMA_E_READER,
};
#undef UNPACK_BERRY_ID
#define ITEM_TO_BERRY(itemId) (((itemId) - FIRST_BERRY_INDEX) + 1)
#define ITEM_TO_MAIL(itemId) ((itemId) - FIRST_MAIL_INDEX)
#define MAIL_NONE 0xFF
#define ITEM_TO_MULCH(itemId)(((itemId) - ITEM_GROWTH_MULCH) + 1)

View File

@ -121,8 +121,7 @@ extern const union AnimCmd *const sAnimTable_Following_Asym[];
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
extern const u8 gReflectionEffectPaletteMap[];
extern const struct SpriteFrameImage *const gBerryTreePicTablePointers[];
extern const u8 *const gBerryTreePaletteSlotTablePointers[];
extern const struct SpriteFrameImage gPicTable_PechaBerryTree[];
void ResetObjectEvents(void);
u8 GetMoveDirectionAnimNum(enum Direction direction);

View File

@ -4,7 +4,7 @@
#define BERRY_NAME_LENGTH 6
#define BERRY_ITEM_EFFECT_COUNT 18
struct Berry
struct BerryInfo
{
const u8 name[BERRY_NAME_LENGTH + 1];
enum BerryFirmness firmness:4;
@ -27,9 +27,22 @@ struct Berry
u8 drainRate;
};
struct Berry
{
struct BerryInfo info;
u32 naturalGiftType:6;
u32 naturalGiftPower:8;
u32 berryCrushDifficulty:8; // The number of A presses required to crush it
u32 berryCrushPowder:10;
const u32 *berryPic;
const u16 *berryPal;
const struct SpriteFrameImage *berryTreePicTable;
const u8 *berryTreePaletteSlotTable;
};
// with no const fields
struct Berry2
struct EnigmaBerryInfo
{
u8 name[BERRY_NAME_LENGTH + 1];
enum BerryFirmness firmness:4;
@ -54,7 +67,7 @@ struct Berry2
struct EnigmaBerry
{
struct Berry2 berry;
struct EnigmaBerryInfo berry;
u8 itemEffect[BERRY_ITEM_EFFECT_COUNT];
u8 holdEffect;
u8 holdEffectParam;

View File

@ -6,6 +6,7 @@
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/tms_hms.h"
#include "constants/berries.h"
#include "constants/item_effects.h"
#include "constants/hold_effects.h"
@ -174,11 +175,41 @@ static inline enum Item GetTMHMItemId(enum TMHMIndex index)
return gTMHMItemMoveIds[index].itemId;
}
static inline u16 GetTMHMMoveId(enum TMHMIndex index)
static inline enum Move GetTMHMMoveId(enum TMHMIndex index)
{
return gTMHMItemMoveIds[index].moveId;
}
#define GET_BERRY_ID(_berry) case ITEM_##_berry##_BERRY: return BERRY_ID_##_berry;
#define GET_BERRY_ITEM_ID(_berry) case BERRY_ID_##_berry: return ITEM_##_berry##_BERRY;
static inline enum BerryId ItemIdToBerryType(enum Item itemId)
{
switch (itemId)
{
FOREACH_BERRY(GET_BERRY_ID)
case ITEM_ENIGMA_BERRY_E_READER:
return BERRY_ID_ENGIMA_E_READER;
default:
return BERRY_ID_NONE;
}
};
static inline enum Item BerryTypeToItemId(enum BerryId berryId)
{
switch (berryId)
{
FOREACH_BERRY(GET_BERRY_ITEM_ID)
case BERRY_ID_ENGIMA_E_READER:
return ITEM_ENIGMA_BERRY_E_READER;
default:
return ITEM_NONE;
}
};
#undef GET_BERRY_ID
#undef GET_BERRY_ITEM_ID
void BagPocket_SetSlotData(struct BagPocket *pocket, u32 pocketPos, struct ItemSlot newSlot);
struct ItemSlot BagPocket_GetSlotData(struct BagPocket *pocket, u32 pocketPos);
@ -187,7 +218,7 @@ static inline void BagPocket_SetSlotItemIdAndCount(struct BagPocket *pocket, u32
BagPocket_SetSlotData(pocket, pocketPos, (struct ItemSlot) {itemId, quantity});
}
static inline u16 GetBagItemId(enum Pocket pocketId, u32 pocketPos)
static inline enum Item GetBagItemId(enum Pocket pocketId, u32 pocketPos)
{
return BagPocket_GetSlotData(&gBagPockets[pocketId], pocketPos).itemId;
}

View File

@ -73,7 +73,8 @@
/* Same as INVOKE_WITH but uses UNPACK_B to unpack arguments and only applies macro to args if there are any. */
#define INVOKE_WITH_B(macro, args, ...) INVOKE_B(macro, UNPACK_B(args) __VA_OPT__(, __VA_ARGS__))
#define INVOKE_B(macro, ...) __VA_OPT__(macro(__VA_ARGS__))
#define INVOKE_B(macro, ...) INVOKE_B_(macro, __VA_ARGS__)
#define INVOKE_B_(macro, ...) __VA_OPT__(macro(__VA_ARGS__))
/* Recursive macros.
* Based on https://www.scs.stanford.edu/~dm/blog/va-opt.html

View File

@ -246,6 +246,7 @@ enum RandomTag
RNG_WILD_MON_TARGET,
RNG_AI_FAKE_OUT_SAVE_ALLY,
RNG_AI_DMG_ROLL_RANDOM,
RNG_RANDOM_BERRY,
};
#define RandomWeighted(tag, ...) \

View File

@ -1214,7 +1214,7 @@ enum ItemEffect ItemBattleEffects(enum BattlerId itemBattler, enum BattlerId bat
{
gLastUsedItem = item;
gBattleScripting.battler = gPotentialItemEffectBattler = itemBattler;
if ((item >= FIRST_BERRY_INDEX && item <= LAST_BERRY_INDEX))
if (gItemsInfo[item].pocket == POCKET_BERRIES)
GetBattlerPartyState(itemBattler)->ateBerry = TRUE;
}

View File

@ -695,10 +695,10 @@ static void SetPlayerBerryDataInBattleStruct(void)
}
else
{
const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER));
const struct BerryInfo *berryInfo = GetBerryInfo(BERRY_ID_ENGIMA_E_READER);
for (i = 0; i < BERRY_NAME_LENGTH; i++)
battleBerry->name[i] = berryData->name[i];
battleBerry->name[i] = berryInfo->name[i];
battleBerry->name[i] = EOS;
for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; i++)
@ -740,12 +740,12 @@ static void SetAllPlayersBerryData(void)
}
else
{
const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER));
const struct BerryInfo *berryInfo = GetBerryInfo(BERRY_ID_ENGIMA_E_READER);
for (i = 0; i < BERRY_NAME_LENGTH; i++)
{
gEnigmaBerries[0].name[i] = berryData->name[i];
gEnigmaBerries[2].name[i] = berryData->name[i];
gEnigmaBerries[0].name[i] = berryInfo->name[i];
gEnigmaBerries[2].name[i] = berryInfo->name[i];
}
gEnigmaBerries[0].name[i] = EOS;
gEnigmaBerries[2].name[i] = EOS;
@ -5963,7 +5963,7 @@ enum Type GetDynamicMoveType(struct Pokemon *mon, enum Move move, enum BattlerId
break;
case EFFECT_NATURAL_GIFT:
if (GetItemPocket(heldItem) == POCKET_BERRIES)
return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type;
return gBerries[ItemIdToBerryType(heldItem)].naturalGiftType;
else
return moveType;
case EFFECT_TERRAIN_PULSE:

View File

@ -619,7 +619,7 @@ static void CopyBagItemName(u8 *dst, enum Item itemId)
{
if (GetItemPocket(itemId) == POCKET_BERRIES)
{
ConvertIntToDecimalStringN(gStringVar1, ITEM_TO_BERRY(itemId), STR_CONV_MODE_LEADING_ZEROS, MAX_PYRAMID_ITEM_DIGITS);
ConvertIntToDecimalStringN(gStringVar1, ItemIdToBerryType(itemId), STR_CONV_MODE_LEADING_ZEROS, MAX_PYRAMID_ITEM_DIGITS);
CopyItemName(itemId, gStringVar2);
StringExpandPlaceholders(dst, gText_NumberItem_TMBerry);
}

View File

@ -2894,8 +2894,8 @@ void SetMoveEffect(enum BattlerId battlerAtk, enum BattlerId effectBattler, enum
}
break;
case MOVE_EFFECT_INCINERATE:
if (((gBattleMons[effectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[effectBattler].item <= LAST_BERRY_INDEX)
|| (B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(effectBattler) == HOLD_EFFECT_GEMS))
if ((gItemsInfo[gBattleMons[effectBattler].item].pocket == POCKET_BERRIES
|| (B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(effectBattler) == HOLD_EFFECT_GEMS))
&& abilities[effectBattler] != ABILITY_STICKY_HOLD)
{
gLastUsedItem = gBattleMons[effectBattler].item;

View File

@ -6033,77 +6033,6 @@ static const u8 sSpeedDiffPowerTable[] = {40, 60, 80, 120, 150};
static const u8 sHeatCrashPowerTable[] = {40, 40, 60, 80, 100, 120};
static const u8 sTrumpCardPowerTable[] = {200, 80, 60, 50, 40};
const struct TypePower gNaturalGiftTable[] =
{
[ITEM_TO_BERRY(ITEM_CHERI_BERRY)] = {TYPE_FIRE, 80},
[ITEM_TO_BERRY(ITEM_CHESTO_BERRY)] = {TYPE_WATER, 80},
[ITEM_TO_BERRY(ITEM_PECHA_BERRY)] = {TYPE_ELECTRIC, 80},
[ITEM_TO_BERRY(ITEM_RAWST_BERRY)] = {TYPE_GRASS, 80},
[ITEM_TO_BERRY(ITEM_ASPEAR_BERRY)] = {TYPE_ICE, 80},
[ITEM_TO_BERRY(ITEM_LEPPA_BERRY)] = {TYPE_FIGHTING, 80},
[ITEM_TO_BERRY(ITEM_ORAN_BERRY)] = {TYPE_POISON, 80},
[ITEM_TO_BERRY(ITEM_PERSIM_BERRY)] = {TYPE_GROUND, 80},
[ITEM_TO_BERRY(ITEM_LUM_BERRY)] = {TYPE_FLYING, 80},
[ITEM_TO_BERRY(ITEM_SITRUS_BERRY)] = {TYPE_PSYCHIC, 80},
[ITEM_TO_BERRY(ITEM_FIGY_BERRY)] = {TYPE_BUG, 80},
[ITEM_TO_BERRY(ITEM_WIKI_BERRY)] = {TYPE_ROCK, 80},
[ITEM_TO_BERRY(ITEM_MAGO_BERRY)] = {TYPE_GHOST, 80},
[ITEM_TO_BERRY(ITEM_AGUAV_BERRY)] = {TYPE_DRAGON, 80},
[ITEM_TO_BERRY(ITEM_IAPAPA_BERRY)] = {TYPE_DARK, 80},
[ITEM_TO_BERRY(ITEM_RAZZ_BERRY)] = {TYPE_STEEL, 80},
[ITEM_TO_BERRY(ITEM_OCCA_BERRY)] = {TYPE_FIRE, 80},
[ITEM_TO_BERRY(ITEM_PASSHO_BERRY)] = {TYPE_WATER, 80},
[ITEM_TO_BERRY(ITEM_WACAN_BERRY)] = {TYPE_ELECTRIC, 80},
[ITEM_TO_BERRY(ITEM_RINDO_BERRY)] = {TYPE_GRASS, 80},
[ITEM_TO_BERRY(ITEM_YACHE_BERRY)] = {TYPE_ICE, 80},
[ITEM_TO_BERRY(ITEM_CHOPLE_BERRY)] = {TYPE_FIGHTING, 80},
[ITEM_TO_BERRY(ITEM_KEBIA_BERRY)] = {TYPE_POISON, 80},
[ITEM_TO_BERRY(ITEM_SHUCA_BERRY)] = {TYPE_GROUND, 80},
[ITEM_TO_BERRY(ITEM_COBA_BERRY)] = {TYPE_FLYING, 80},
[ITEM_TO_BERRY(ITEM_PAYAPA_BERRY)] = {TYPE_PSYCHIC, 80},
[ITEM_TO_BERRY(ITEM_TANGA_BERRY)] = {TYPE_BUG, 80},
[ITEM_TO_BERRY(ITEM_CHARTI_BERRY)] = {TYPE_ROCK, 80},
[ITEM_TO_BERRY(ITEM_KASIB_BERRY)] = {TYPE_GHOST, 80},
[ITEM_TO_BERRY(ITEM_HABAN_BERRY)] = {TYPE_DRAGON, 80},
[ITEM_TO_BERRY(ITEM_COLBUR_BERRY)] = {TYPE_DARK, 80},
[ITEM_TO_BERRY(ITEM_BABIRI_BERRY)] = {TYPE_STEEL, 80},
[ITEM_TO_BERRY(ITEM_CHILAN_BERRY)] = {TYPE_NORMAL, 80},
[ITEM_TO_BERRY(ITEM_ROSELI_BERRY)] = {TYPE_FAIRY, 80},
[ITEM_TO_BERRY(ITEM_BLUK_BERRY)] = {TYPE_FIRE, 90},
[ITEM_TO_BERRY(ITEM_NANAB_BERRY)] = {TYPE_WATER, 90},
[ITEM_TO_BERRY(ITEM_WEPEAR_BERRY)] = {TYPE_ELECTRIC, 90},
[ITEM_TO_BERRY(ITEM_PINAP_BERRY)] = {TYPE_GRASS, 90},
[ITEM_TO_BERRY(ITEM_POMEG_BERRY)] = {TYPE_ICE, 90},
[ITEM_TO_BERRY(ITEM_KELPSY_BERRY)] = {TYPE_FIGHTING, 90},
[ITEM_TO_BERRY(ITEM_QUALOT_BERRY)] = {TYPE_POISON, 90},
[ITEM_TO_BERRY(ITEM_HONDEW_BERRY)] = {TYPE_GROUND, 90},
[ITEM_TO_BERRY(ITEM_GREPA_BERRY)] = {TYPE_FLYING, 90},
[ITEM_TO_BERRY(ITEM_TAMATO_BERRY)] = {TYPE_PSYCHIC, 90},
[ITEM_TO_BERRY(ITEM_CORNN_BERRY)] = {TYPE_BUG, 90},
[ITEM_TO_BERRY(ITEM_MAGOST_BERRY)] = {TYPE_ROCK, 90},
[ITEM_TO_BERRY(ITEM_RABUTA_BERRY)] = {TYPE_GHOST, 90},
[ITEM_TO_BERRY(ITEM_NOMEL_BERRY)] = {TYPE_DRAGON, 90},
[ITEM_TO_BERRY(ITEM_SPELON_BERRY)] = {TYPE_DARK, 90},
[ITEM_TO_BERRY(ITEM_PAMTRE_BERRY)] = {TYPE_STEEL, 90},
[ITEM_TO_BERRY(ITEM_WATMEL_BERRY)] = {TYPE_FIRE, 100},
[ITEM_TO_BERRY(ITEM_DURIN_BERRY)] = {TYPE_WATER, 100},
[ITEM_TO_BERRY(ITEM_BELUE_BERRY)] = {TYPE_ELECTRIC, 100},
[ITEM_TO_BERRY(ITEM_LIECHI_BERRY)] = {TYPE_GRASS, 100},
[ITEM_TO_BERRY(ITEM_GANLON_BERRY)] = {TYPE_ICE, 100},
[ITEM_TO_BERRY(ITEM_SALAC_BERRY)] = {TYPE_FIGHTING, 100},
[ITEM_TO_BERRY(ITEM_PETAYA_BERRY)] = {TYPE_POISON, 100},
[ITEM_TO_BERRY(ITEM_APICOT_BERRY)] = {TYPE_GROUND, 100},
[ITEM_TO_BERRY(ITEM_LANSAT_BERRY)] = {TYPE_FLYING, 100},
[ITEM_TO_BERRY(ITEM_STARF_BERRY)] = {TYPE_PSYCHIC, 100},
[ITEM_TO_BERRY(ITEM_ENIGMA_BERRY)] = {TYPE_BUG, 100},
[ITEM_TO_BERRY(ITEM_MICLE_BERRY)] = {TYPE_ROCK, 100},
[ITEM_TO_BERRY(ITEM_CUSTAP_BERRY)] = {TYPE_GHOST, 100},
[ITEM_TO_BERRY(ITEM_JABOCA_BERRY)] = {TYPE_DRAGON, 100},
[ITEM_TO_BERRY(ITEM_ROWAP_BERRY)] = {TYPE_DARK, 100},
[ITEM_TO_BERRY(ITEM_KEE_BERRY)] = {TYPE_FAIRY, 100},
[ITEM_TO_BERRY(ITEM_MARANGA_BERRY)] = {TYPE_DARK, 100},
};
static inline u32 CalcRolloutBasePower(enum BattlerId battlerAtk, u32 basePower)
{
u32 i;
@ -6253,7 +6182,7 @@ static inline u32 CalcMoveBasePower(struct BattleContext *ctx)
basePower *= 2;
break;
case EFFECT_NATURAL_GIFT:
basePower = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].power;
basePower = gBerries[ItemIdToBerryType(gBattleMons[battlerAtk].item)].naturalGiftPower;
break;
case EFFECT_DOUBLE_POWER_ON_ARG_STATUS:
// Comatose targets treated as if asleep

File diff suppressed because it is too large Load Diff

View File

@ -104,7 +104,7 @@ enum {
#define PALTAG_MISC 46546
// Last berry that an NPC can put in
#define NUM_NPC_BERRIES ITEM_TO_BERRY(ITEM_ASPEAR_BERRY)
#define NUM_NPC_BERRIES BERRY_ID_ASPEAR
enum {
// Windows 0-3 are used implicitly in several loops over BLENDER_MAX_PLAYERS
@ -845,31 +845,31 @@ static const s16 sBerrySpriteData[][5] =
// There are only 5 different berries the NPCs will ever use
// Each of these sets represents 3 berries chosen to be used by the NPCs
// If the player's berry is one of the 5 possible berries, a set is chosen that excludes it
static const u8 sOpponentBerrySets[NUM_NPC_BERRIES * 2][3] =
static const u8 sOpponentBerrySets[][3] =
{
// These sets are used if the player chose one of the 5 NPC berries
{ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1}, // player chose Cheri Berry
{ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1}, // player chose Chesto Berry
{ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1}, // player chose Pecha Berry
{ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1}, // player chose Rawst Berry
{ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1}, // player chose Aspear Berry
{BERRY_ID_ASPEAR, BERRY_ID_RAWST, BERRY_ID_PECHA}, // player chose Cheri Berry
{BERRY_ID_CHERI, BERRY_ID_ASPEAR, BERRY_ID_RAWST}, // player chose Chesto Berry
{BERRY_ID_CHESTO, BERRY_ID_CHERI, BERRY_ID_ASPEAR}, // player chose Pecha Berry
{BERRY_ID_PECHA, BERRY_ID_CHESTO, BERRY_ID_CHERI}, // player chose Rawst Berry
{BERRY_ID_RAWST, BERRY_ID_PECHA, BERRY_ID_CHESTO}, // player chose Aspear Berry
// These sets are used if the player chose a different berry (set is selected by player's berry % 5)
{ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1}, // player chose Leppa, Figy, ...
{ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1}, // player chose Oran, Wiki, ...
{ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1}, // player chose Persim, Mago, ...
{ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1}, // player chose Lum, Aguav, ...
{ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1, ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1}, // player chose Sitrus, Iapapa, ...
{BERRY_ID_CHERI, BERRY_ID_PECHA, BERRY_ID_RAWST}, // player chose Leppa, Figy, ...
{BERRY_ID_CHESTO, BERRY_ID_RAWST, BERRY_ID_ASPEAR}, // player chose Oran, Wiki, ...
{BERRY_ID_PECHA, BERRY_ID_ASPEAR, BERRY_ID_CHERI}, // player chose Persim, Mago, ...
{BERRY_ID_RAWST, BERRY_ID_CHERI, BERRY_ID_CHESTO}, // player chose Lum, Aguav, ...
{BERRY_ID_ASPEAR, BERRY_ID_CHESTO, BERRY_ID_PECHA}, // player chose Sitrus, Iapapa, ...
};
// Berry master's berries follow the same rules as above, but instead of explicitly listing
// the alternate sets if the player chooses one of these berries, it implicitly uses these berries - 5, i.e. Tamato - Nomel
static const u8 sBerryMasterBerries[] = {
ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1,
ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1,
ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1,
ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1,
ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1
BERRY_ID_SPELON,
BERRY_ID_PAMTRE,
BERRY_ID_WATMEL,
BERRY_ID_DURIN,
BERRY_ID_BELUE
};
// "0 players" is link
@ -1185,7 +1185,7 @@ static void SetBerrySpriteData(struct Sprite *sprite, s32 x, s32 y, s32 bounceSp
static void CreateBerrySprite(enum Item itemId, u32 playerId)
{
u32 berryId = ITEM_TO_BERRY(itemId) - 1;
enum BerryId berryId = ItemIdToBerryType(itemId);
u32 spriteId = CreateSpinningBerrySprite(berryId, 0, 80, playerId & 1);
SetBerrySpriteData(&gSprites[spriteId],
sBerrySpriteData[playerId][0],
@ -1198,7 +1198,7 @@ static void CreateBerrySprite(enum Item itemId, u32 playerId)
static void ConvertItemToBlenderBerry(struct BlenderBerry *berry, enum Item itemId)
{
const struct Berry *berryInfo = GetBerryInfo(ITEM_TO_BERRY(itemId));
const struct BerryInfo *berryInfo = GetBerryInfo(ItemIdToBerryType(itemId));
berry->itemId = itemId;
StringCopy(berry->name, berryInfo->name);
@ -1546,14 +1546,14 @@ static void SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct B
}
else
{
opponentSetId = ITEM_TO_BERRY(playerBerryItemId) - 1;
if (opponentSetId >= NUM_NPC_BERRIES)
opponentSetId = (opponentSetId % NUM_NPC_BERRIES) + NUM_NPC_BERRIES;
opponentSetId = ItemIdToBerryType(playerBerryItemId);
if (opponentSetId > NUM_NPC_BERRIES)
opponentSetId = ((opponentSetId - 1) % NUM_NPC_BERRIES) + NUM_NPC_BERRIES;
}
for (i = 0; i < playersNum - 1; i++)
{
opponentBerryId = sOpponentBerrySets[opponentSetId][i];
berryMasterDiff = ITEM_TO_BERRY(playerBerryItemId) - ITEM_TO_BERRY(ITEM_SPELON_BERRY);
berryMasterDiff = ItemIdToBerryType(playerBerryItemId) - BERRY_ID_SPELON;
if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER) && gSpecialVar_0x8004 == 1)
{
opponentSetId %= ARRAY_COUNT(sBerryMasterBerries);
@ -1564,7 +1564,7 @@ static void SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct B
if (berryMasterDiff < ARRAY_COUNT(sBerryMasterBerries))
opponentBerryId -= ARRAY_COUNT(sBerryMasterBerries);
}
SetPlayerBerryData(i + 1, opponentBerryId + FIRST_BERRY_INDEX);
SetPlayerBerryData(i + 1, BerryTypeToItemId(opponentBerryId));
}
}
@ -3539,7 +3539,7 @@ static bool8 PrintBlendingResults(void)
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
if (sBerryBlender->chosenItemId[i] != 0)
berryIds[i] = sBerryBlender->chosenItemId[i] - FIRST_BERRY_INDEX;
berryIds[i] = ItemIdToBerryType(sBerryBlender->chosenItemId[i]);
if (sBerryBlender->arrowIdToPlayerId[i] != NO_PLAYER)
{
PutWindowTilemap(i);

View File

@ -1024,12 +1024,18 @@ void StartBerryCrush(MainCallback exitCallback)
static void GetBerryFromBag(void)
{
if (gSpecialVar_ItemId < FIRST_BERRY_INDEX || gSpecialVar_ItemId > LAST_BERRY_INDEX + 1)
gSpecialVar_ItemId = FIRST_BERRY_INDEX;
enum BerryId berryId = ItemIdToBerryType(gSpecialVar_ItemId);
if (!berryId)
{
berryId = 1;
gSpecialVar_ItemId = BerryTypeToItemId(1);
}
else
{
RemoveBagItem(gSpecialVar_ItemId, 1);
}
sGame->players[sGame->localId].berryId = gSpecialVar_ItemId - FIRST_BERRY_INDEX;
sGame->players[sGame->localId].berryId = berryId;
sGame->nextCmd = CMD_FADE;
sGame->afterPalFadeCmd = CMD_WAIT_BERRIES;
SetPaletteFadeArgs(sGame->commandArgs, FALSE, PALETTES_ALL, 0, 16, 0, RGB_BLACK);
@ -1358,7 +1364,7 @@ static void CreateBerrySprites(struct BerryCrushGame *game, struct BerryCrushGam
&sSpriteTemplate_PlayerBerry,
sPlayerBerrySpriteTags[i],
sPlayerBerrySpriteTags[i],
game->players[i].berryId + FIRST_BERRY_INDEX);
BerryTypeToItemId(game->players[i].berryId));
gfx->berrySprites[i] = &gSprites[spriteId];
gfx->berrySprites[i]->oam.priority = 3;
gfx->berrySprites[i]->affineAnimPaused = TRUE;
@ -1617,9 +1623,9 @@ static void PrintResultsText(struct BerryCrushGame *game, u8 page, u8 sp14, u8 b
playerId = i;
ranking = i;
j = game->players[i].berryId;
if (j >= LAST_BERRY_INDEX - FIRST_BERRY_INDEX + 2)
j = 0;
StringCopy(gStringVar1, gBerries[j].name);
if (j > NUM_BERRIES)
j = 1;
StringCopy(gStringVar1, GetBerryInfo(j)->name);
StringExpandPlaceholders(gStringVar4, sResultsTexts[page]);
break;
}
@ -2363,10 +2369,10 @@ static u32 Cmd_WaitForOthersToPickBerries(struct BerryCrushGame *game, u8 *args)
for (i = 0; i < game->playerCount; i++)
{
game->players[i].berryId = gBlockRecvBuffer[i][0];
if (game->players[i].berryId > LAST_BERRY_INDEX + 1)
game->players[i].berryId = 0;
game->targetAPresses += gBerryCrush_BerryData[game->players[i].berryId].difficulty;
game->powder += gBerryCrush_BerryData[game->players[i].berryId].powder;
if (game->players[i].berryId > NUM_BERRIES)
game->players[i].berryId = 1;
game->targetAPresses += gBerries[game->players[i].berryId].berryCrushDifficulty;
game->powder += gBerries[game->players[i].berryId].berryCrushPowder;
}
game->cmdTimer = 0;
ResetBlockReceivedFlags();
@ -3446,7 +3452,7 @@ static void ResetGame(struct BerryCrushGame *game)
game->sparkleCounter = 0;
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
game->players[i].berryId = -1;
game->players[i].berryId = 0;
game->players[i].inputTime = 0;
game->players[i].neatInputStreak = 0;
game->players[i].timeSincePrevInput = 1;

View File

@ -411,22 +411,22 @@ static void PrintAllBerryData(void)
static void PrintBerryNumberAndName(void)
{
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
const struct BerryInfo *berryInfo = GetBerryInfo(sBerryTag->berryId);
ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2);
StringCopy(gStringVar2, berry->name);
StringCopy(gStringVar2, berryInfo->name);
StringExpandPlaceholders(gStringVar4, sText_NumberVar1Var2);
PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0);
}
static void PrintBerrySize(void)
{
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
const struct BerryInfo *berryInfo = GetBerryInfo(sBerryTag->berryId);
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL);
if (berry->size != 0)
if (berryInfo->size != 0)
{
u32 inches, fraction;
inches = 1000 * berry->size / 254;
inches = 1000 * berryInfo->size / 254;
if (inches % 10 > 4)
inches += 10;
fraction = (inches % 100) / 10;
@ -445,29 +445,29 @@ static void PrintBerrySize(void)
static void PrintBerryFirmness(void)
{
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
const struct BerryInfo *berryInfo = GetBerryInfo(sBerryTag->berryId);
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL);
if (berry->firmness != BERRY_FIRMNESS_UNKNOWN)
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness], 0x28, 0x11, 0, NULL);
if (berryInfo->firmness != BERRY_FIRMNESS_UNKNOWN)
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berryInfo->firmness], 0x28, 0x11, 0, NULL);
else
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_ThreeMarks, 0x28, 0x11, 0, NULL);
}
static void PrintBerryDescription1(void)
{
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description1, 0, 1, 0, NULL);
const struct BerryInfo *berryInfo = GetBerryInfo(sBerryTag->berryId);
AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berryInfo->description1, 0, 1, 0, NULL);
}
static void PrintBerryDescription2(void)
{
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description2, 0, 0x11, 0, NULL);
const struct BerryInfo *berryInfo = GetBerryInfo(sBerryTag->berryId);
AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berryInfo->description2, 0, 0x11, 0, NULL);
}
static void CreateBerrySprite(void)
{
sBerryTag->currentSpriteBerryId = sBerryTag->berryId - 1;
sBerryTag->currentSpriteBerryId = sBerryTag->berryId;
sBerryTag->berrySpriteId = CreateBerryTagSprite(sBerryTag->currentSpriteBerryId, 56, 64);
}
@ -487,29 +487,29 @@ static void CreateFlavorCircleSprites(void)
static void SetFlavorCirclesVisiblity(void)
{
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
const struct BerryInfo *berryInfo = GetBerryInfo(sBerryTag->berryId);
if (berry->spicy)
if (berryInfo->spicy)
gSprites[sBerryTag->flavorCircleIds[FLAVOR_SPICY]].invisible = FALSE;
else
gSprites[sBerryTag->flavorCircleIds[FLAVOR_SPICY]].invisible = TRUE;
if (berry->dry)
if (berryInfo->dry)
gSprites[sBerryTag->flavorCircleIds[FLAVOR_DRY]].invisible = FALSE;
else
gSprites[sBerryTag->flavorCircleIds[FLAVOR_DRY]].invisible = TRUE;
if (berry->sweet)
if (berryInfo->sweet)
gSprites[sBerryTag->flavorCircleIds[FLAVOR_SWEET]].invisible = FALSE;
else
gSprites[sBerryTag->flavorCircleIds[FLAVOR_SWEET]].invisible = TRUE;
if (berry->bitter)
if (berryInfo->bitter)
gSprites[sBerryTag->flavorCircleIds[FLAVOR_BITTER]].invisible = FALSE;
else
gSprites[sBerryTag->flavorCircleIds[FLAVOR_BITTER]].invisible = TRUE;
if (berry->sour)
if (berryInfo->sour)
gSprites[sBerryTag->flavorCircleIds[FLAVOR_SOUR]].invisible = FALSE;
else
gSprites[sBerryTag->flavorCircleIds[FLAVOR_SOUR]].invisible = TRUE;
@ -565,7 +565,7 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
s16 *data = gTasks[taskId].data;
s16 currPocketPosition = gBagPosition.scrollPosition[POCKET_BERRIES] + gBagPosition.cursorPosition[POCKET_BERRIES];
u32 newPocketPosition = currPocketPosition + toMove;
if (newPocketPosition < ITEM_TO_BERRY(LAST_BERRY_INDEX) && GetBagItemId(POCKET_BERRIES, newPocketPosition) != ITEM_NONE)
if (newPocketPosition < NUM_BERRIES && GetBagItemId(POCKET_BERRIES, newPocketPosition) != ITEM_NONE)
{
if (toMove < 0)
tBgOp = BG_COORD_SUB;

View File

@ -1,4 +1,4 @@
static const struct SpriteFrameImage sPicTable_CheriBerryTree[] = {
const struct SpriteFrameImage gPicTable_CheriBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -12,7 +12,7 @@ static const struct SpriteFrameImage sPicTable_CheriBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Cheri[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_ChestoBerryTree[] = {
const struct SpriteFrameImage gPicTable_ChestoBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -26,7 +26,7 @@ static const struct SpriteFrameImage sPicTable_ChestoBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Chesto[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = {
const struct SpriteFrameImage gPicTable_PechaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -40,7 +40,7 @@ static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Pecha[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_RawstBerryTree[] = {
const struct SpriteFrameImage gPicTable_RawstBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -54,7 +54,7 @@ static const struct SpriteFrameImage sPicTable_RawstBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Rawst[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_AspearBerryTree[] = {
const struct SpriteFrameImage gPicTable_AspearBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -68,7 +68,7 @@ static const struct SpriteFrameImage sPicTable_AspearBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Aspear[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_LeppaBerryTree[] = {
const struct SpriteFrameImage gPicTable_LeppaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -82,7 +82,7 @@ static const struct SpriteFrameImage sPicTable_LeppaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Leppa[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_OranBerryTree[] = {
const struct SpriteFrameImage gPicTable_OranBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -96,7 +96,7 @@ static const struct SpriteFrameImage sPicTable_OranBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Oran[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_PersimBerryTree[] = {
const struct SpriteFrameImage gPicTable_PersimBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -110,7 +110,7 @@ static const struct SpriteFrameImage sPicTable_PersimBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Persim[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_LumBerryTree[] = {
const struct SpriteFrameImage gPicTable_LumBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -124,7 +124,7 @@ static const struct SpriteFrameImage sPicTable_LumBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Lum[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_SitrusBerryTree[] = {
const struct SpriteFrameImage gPicTable_SitrusBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -138,7 +138,7 @@ static const struct SpriteFrameImage sPicTable_SitrusBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Sitrus[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_FigyBerryTree[] = {
const struct SpriteFrameImage gPicTable_FigyBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -152,7 +152,7 @@ static const struct SpriteFrameImage sPicTable_FigyBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Figy[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_WikiBerryTree[] = {
const struct SpriteFrameImage gPicTable_WikiBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -166,7 +166,7 @@ static const struct SpriteFrameImage sPicTable_WikiBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Wiki[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_MagoBerryTree[] = {
const struct SpriteFrameImage gPicTable_MagoBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -180,7 +180,7 @@ static const struct SpriteFrameImage sPicTable_MagoBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Mago[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_AguavBerryTree[] = {
const struct SpriteFrameImage gPicTable_AguavBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -194,7 +194,7 @@ static const struct SpriteFrameImage sPicTable_AguavBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Aguav[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_IapapaBerryTree[] = {
const struct SpriteFrameImage gPicTable_IapapaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -208,7 +208,7 @@ static const struct SpriteFrameImage sPicTable_IapapaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Iapapa[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_RazzBerryTree[] = {
const struct SpriteFrameImage gPicTable_RazzBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -222,7 +222,7 @@ static const struct SpriteFrameImage sPicTable_RazzBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Razz[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_WepearBerryTree[] = {
const struct SpriteFrameImage gPicTable_WepearBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -236,7 +236,7 @@ static const struct SpriteFrameImage sPicTable_WepearBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Wepear[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_PomegBerryTree[] = {
const struct SpriteFrameImage gPicTable_PomegBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -250,7 +250,7 @@ static const struct SpriteFrameImage sPicTable_PomegBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Pomeg[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_KelpsyBerryTree[] = {
const struct SpriteFrameImage gPicTable_KelpsyBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -264,7 +264,7 @@ static const struct SpriteFrameImage sPicTable_KelpsyBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Kelpsy[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_HondewBerryTree[] = {
const struct SpriteFrameImage gPicTable_HondewBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -278,7 +278,7 @@ static const struct SpriteFrameImage sPicTable_HondewBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Hondew[] = {3, 4, 5, 5, 5, 5, 5};
static const struct SpriteFrameImage sPicTable_GrepaBerryTree[] = {
const struct SpriteFrameImage gPicTable_GrepaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -292,7 +292,7 @@ static const struct SpriteFrameImage sPicTable_GrepaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Grepa[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_TamatoBerryTree[] = {
const struct SpriteFrameImage gPicTable_TamatoBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -306,7 +306,7 @@ static const struct SpriteFrameImage sPicTable_TamatoBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Tamato[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_CornnBerryTree[] = {
const struct SpriteFrameImage gPicTable_CornnBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -320,7 +320,7 @@ static const struct SpriteFrameImage sPicTable_CornnBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Cornn[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_RabutaBerryTree[] = {
const struct SpriteFrameImage gPicTable_RabutaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -334,7 +334,7 @@ static const struct SpriteFrameImage sPicTable_RabutaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Rabuta[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_NomelBerryTree[] = {
const struct SpriteFrameImage gPicTable_NomelBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -348,7 +348,7 @@ static const struct SpriteFrameImage sPicTable_NomelBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Nomel[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_SpelonBerryTree[] = {
const struct SpriteFrameImage gPicTable_SpelonBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -362,7 +362,7 @@ static const struct SpriteFrameImage sPicTable_SpelonBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Spelon[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_PamtreBerryTree[] = {
const struct SpriteFrameImage gPicTable_PamtreBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -376,7 +376,7 @@ static const struct SpriteFrameImage sPicTable_PamtreBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Pamtre[] = {3, 4, 2, 2, 2, 2, 2};
static const struct SpriteFrameImage sPicTable_DurinBerryTree[] = {
const struct SpriteFrameImage gPicTable_DurinBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -390,7 +390,7 @@ static const struct SpriteFrameImage sPicTable_DurinBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Durin[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_OccaBerryTree[] = {
const struct SpriteFrameImage gPicTable_OccaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -404,7 +404,7 @@ static const struct SpriteFrameImage sPicTable_OccaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Occa[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_YacheBerryTree[] = {
const struct SpriteFrameImage gPicTable_YacheBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -418,7 +418,7 @@ static const struct SpriteFrameImage sPicTable_YacheBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Yache[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_ChopleBerryTree[] = {
const struct SpriteFrameImage gPicTable_ChopleBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -432,7 +432,7 @@ static const struct SpriteFrameImage sPicTable_ChopleBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Chople[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_KebiaBerryTree[] = {
const struct SpriteFrameImage gPicTable_KebiaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -446,7 +446,7 @@ static const struct SpriteFrameImage sPicTable_KebiaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Kebia[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_ShucaBerryTree[] = {
const struct SpriteFrameImage gPicTable_ShucaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -460,7 +460,7 @@ static const struct SpriteFrameImage sPicTable_ShucaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Shuca[] = {3, 4, 5, 5, 5, 5, 5};
static const struct SpriteFrameImage sPicTable_PayapaBerryTree[] = {
const struct SpriteFrameImage gPicTable_PayapaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -474,7 +474,7 @@ static const struct SpriteFrameImage sPicTable_PayapaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Payapa[] = {3, 4, 5, 5, 5, 5, 5};
static const struct SpriteFrameImage sPicTable_TangaBerryTree[] = {
const struct SpriteFrameImage gPicTable_TangaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -488,7 +488,7 @@ static const struct SpriteFrameImage sPicTable_TangaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Tanga[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_KasibBerryTree[] = {
const struct SpriteFrameImage gPicTable_KasibBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -502,7 +502,7 @@ static const struct SpriteFrameImage sPicTable_KasibBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Kasib[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_HabanBerryTree[] = {
const struct SpriteFrameImage gPicTable_HabanBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -516,7 +516,7 @@ static const struct SpriteFrameImage sPicTable_HabanBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Haban[] = {3, 4, 3, 3, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_ColburBerryTree[] = {
const struct SpriteFrameImage gPicTable_ColburBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -530,7 +530,7 @@ static const struct SpriteFrameImage sPicTable_ColburBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Colbur[] = {3, 4, 5, 5, 5, 5, 5};
static const struct SpriteFrameImage sPicTable_RoseliBerryTree[] = {
const struct SpriteFrameImage gPicTable_RoseliBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -544,7 +544,7 @@ static const struct SpriteFrameImage sPicTable_RoseliBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Roseli[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_LiechiBerryTree[] = {
const struct SpriteFrameImage gPicTable_LiechiBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -558,7 +558,7 @@ static const struct SpriteFrameImage sPicTable_LiechiBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Liechi[] = {3, 4, 4, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_LansatBerryTree[] = {
const struct SpriteFrameImage gPicTable_LansatBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -572,7 +572,7 @@ static const struct SpriteFrameImage sPicTable_LansatBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Lansat[] = {3, 4, 2, 2, 2, 2, 2};
const struct SpriteFrameImage sPicTable_MicleBerryTree[] = {
const struct SpriteFrameImage gPicTable_MicleBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -586,7 +586,7 @@ const struct SpriteFrameImage sPicTable_MicleBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Micle[] = {3, 4, 4, 4, 4, 4, 4};
const struct SpriteFrameImage sPicTable_CustapBerryTree[] = {
const struct SpriteFrameImage gPicTable_CustapBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -600,7 +600,7 @@ const struct SpriteFrameImage sPicTable_CustapBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Custap[] = {3, 4, 5, 5, 5, 5, 5};
const struct SpriteFrameImage sPicTable_JabocaBerryTree[] = {
const struct SpriteFrameImage gPicTable_JabocaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -614,7 +614,7 @@ const struct SpriteFrameImage sPicTable_JabocaBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Jaboca[] = {3, 4, 5, 5, 5, 5, 5};
const struct SpriteFrameImage sPicTable_RowapBerryTree[] = {
const struct SpriteFrameImage gPicTable_RowapBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
@ -631,146 +631,3 @@ const u8 gBerryTreePaletteSlotTable_Rowap[] = {3, 4, 5, 5, 5, 5, 5};
const u8 gDeadBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES};
const u8 gBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES};
const struct SpriteFrameImage *const gBerryTreePicTablePointers[] = {
[ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = sPicTable_CheriBerryTree,
[ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChestoBerryTree,
[ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree,
[ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree,
[ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_AspearBerryTree,
[ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_LeppaBerryTree,
[ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_OranBerryTree,
[ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = sPicTable_PersimBerryTree,
[ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = sPicTable_LumBerryTree,
[ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = sPicTable_SitrusBerryTree,
[ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = sPicTable_FigyBerryTree,
[ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = sPicTable_WikiBerryTree,
[ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree,
[ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree,
[ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree,
[ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
[ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
[ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree,
[ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree,
[ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree,
[ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
[ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = sPicTable_KelpsyBerryTree,
[ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree,
[ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
[ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
[ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree,
[ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
[ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
[ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree,
[ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_NomelBerryTree,
[ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = sPicTable_SpelonBerryTree,
[ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PamtreBerryTree,
[ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree,
[ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
[ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
[ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
[ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_OccaBerryTree,
[ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
[ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
[ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree,
[ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = sPicTable_YacheBerryTree,
[ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChopleBerryTree,
[ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = sPicTable_KebiaBerryTree,
[ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_ShucaBerryTree,
[ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree,
[ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PayapaBerryTree,
[ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = sPicTable_TangaBerryTree,
[ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree,
[ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = sPicTable_KasibBerryTree,
[ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_HabanBerryTree,
[ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = sPicTable_ColburBerryTree,
[ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree,
[ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = sPicTable_RoseliBerryTree,
[ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree,
[ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
[ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree,
[ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
[ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
[ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree,
[ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
[ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = sPicTable_MicleBerryTree,
[ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_CustapBerryTree,
[ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_JabocaBerryTree,
[ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_RowapBerryTree,
[ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree,
[ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = sPicTable_OccaBerryTree,
[ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
};
const u8 *const gBerryTreePaletteSlotTablePointers[] = {
[ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cheri,
[ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Chesto,
[ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pecha,
[ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rawst,
[ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Aspear,
[ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Leppa,
[ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Oran,
[ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Persim,
[ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Lum,
[ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Sitrus,
[ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Figy,
[ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Wiki,
[ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Mago,
[ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Aguav,
[ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Iapapa,
[ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Razz,
[ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Razz,
[ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Mago,
[ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Wepear,
[ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Iapapa,
[ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pomeg,
[ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Kelpsy,
[ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Wepear,
[ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Hondew,
[ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Grepa,
[ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Tamato,
[ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cornn,
[ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pomeg,
[ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rabuta,
[ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Nomel,
[ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Spelon,
[ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pamtre,
[ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rabuta,
[ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin,
[ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Hondew,
[ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Grepa,
[ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Occa,
[ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cornn,
[ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Razz,
[ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Tamato,
[ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Yache,
[ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Chople,
[ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Kebia,
[ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Shuca,
[ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rawst,
[ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Payapa,
[ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Tanga,
[ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Lansat,
[ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Kasib,
[ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Haban,
[ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Colbur,
[ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Liechi,
[ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Roseli,
[ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Liechi,
[ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Hondew,
[ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Aguav,
[ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pomeg,
[ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Grepa,
[ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Lansat,
[ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cornn,
[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin,
[ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Micle,
[ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Custap,
[ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Jaboca,
[ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rowap,
[ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pecha,
[ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Occa,
[ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin,
};

View File

@ -1093,7 +1093,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = NULL,
.anims = sAnimTable_BerryTree,
.images = sPicTable_PechaBerryTree,
.images = gPicTable_PechaBerryTree,
};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages = {
@ -1111,7 +1111,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStag
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_BerryTree,
.images = sPicTable_PechaBerryTree,
.images = gPicTable_PechaBerryTree,
};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages = {
@ -1129,7 +1129,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStage
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
.anims = sAnimTable_BerryTree,
.images = sPicTable_PechaBerryTree,
.images = gPicTable_PechaBerryTree,
};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {

View File

@ -3853,8 +3853,9 @@ static void DebugAction_PCBag_Fill_PocketBerries(u8 taskId)
{
enum Item itemId;
for (itemId = FIRST_BERRY_INDEX; itemId < LAST_BERRY_INDEX; itemId++)
for (enum BerryId berryId = 1; berryId < NUM_BERRIES; berryId++)
{
itemId = BerryTypeToItemId(berryId);
if (CheckBagHasSpace(itemId, MAX_BAG_ITEM_CAPACITY))
AddBagItem(itemId, MAX_BAG_ITEM_CAPACITY);
}

View File

@ -592,40 +592,40 @@ ALIGNED(4)
static const u8 sPrizeBerryIds[][10] =
{
{ // Possible prizes with 3 players
ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1,
ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1,
ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1,
ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1,
ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1,
ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1,
ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1,
ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1,
ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1,
ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1
BERRY_ID_RAZZ,
BERRY_ID_BLUK,
BERRY_ID_NANAB,
BERRY_ID_WEPEAR,
BERRY_ID_PINAP,
BERRY_ID_PINAP,
BERRY_ID_WEPEAR,
BERRY_ID_NANAB,
BERRY_ID_BLUK,
BERRY_ID_RAZZ
},
{ // Possible prizes with 4 players
ITEM_TO_BERRY(ITEM_POMEG_BERRY) - 1,
ITEM_TO_BERRY(ITEM_KELPSY_BERRY) - 1,
ITEM_TO_BERRY(ITEM_QUALOT_BERRY) - 1,
ITEM_TO_BERRY(ITEM_HONDEW_BERRY) - 1,
ITEM_TO_BERRY(ITEM_GREPA_BERRY) - 1,
ITEM_TO_BERRY(ITEM_TAMATO_BERRY) - 1,
ITEM_TO_BERRY(ITEM_CORNN_BERRY) - 1,
ITEM_TO_BERRY(ITEM_MAGOST_BERRY) - 1,
ITEM_TO_BERRY(ITEM_RABUTA_BERRY) - 1,
ITEM_TO_BERRY(ITEM_NOMEL_BERRY) - 1
BERRY_ID_POMEG,
BERRY_ID_KELPSY,
BERRY_ID_QUALOT,
BERRY_ID_HONDEW,
BERRY_ID_GREPA,
BERRY_ID_TAMATO,
BERRY_ID_CORNN,
BERRY_ID_MAGOST,
BERRY_ID_RABUTA,
BERRY_ID_NOMEL
},
{ // Possible prizes with 5 players
ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1,
ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1,
ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1,
ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1,
ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1,
ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1,
ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1,
ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1,
ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1,
ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1
BERRY_ID_SPELON,
BERRY_ID_PAMTRE,
BERRY_ID_WATMEL,
BERRY_ID_DURIN,
BERRY_ID_BELUE,
BERRY_ID_BELUE,
BERRY_ID_DURIN,
BERRY_ID_WATMEL,
BERRY_ID_PAMTRE,
BERRY_ID_SPELON
},
};
@ -2695,7 +2695,7 @@ static void ResetPickState(void)
static u16 GetPrizeItemId(void)
{
return sGame->berryResults[sGame->multiplayerId][BERRY_PRIZE] + FIRST_BERRY_INDEX;
return BerryTypeToItemId(sGame->berryResults[sGame->multiplayerId][BERRY_PRIZE]);
}
static u8 GetNumPlayers(void)

View File

@ -22,6 +22,7 @@
#include "follower_helper.h"
#include "gpu_regs.h"
#include "graphics.h"
#include "item.h"
#include "mauville_old_man.h"
#include "metatile_behavior.h"
#include "overworld.h"
@ -220,8 +221,6 @@ static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphics
static u16 GetGraphicsIdForMon(enum Species species, bool32 shiny, bool32 female);
static enum Species GetUnownSpecies(struct Pokemon *mon);
static const struct SpriteFrameImage sPicTable_PechaBerryTree[];
static void StartSlowRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, enum Direction direction);
const u8 gReflectionEffectPaletteMap[16] = {
@ -3168,10 +3167,10 @@ static void SetBerryTreeGraphicsById(struct ObjectEvent *objectEvent, u8 berryId
const u16 graphicsId = gBerryTreeObjectEventGraphicsIdTable[berryStage];
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
UpdateSpritePalette(&sObjectEventSpritePalettes[gBerryTreePaletteSlotTablePointers[berryId][berryStage]-2], sprite);
UpdateSpritePalette(&sObjectEventSpritePalettes[gBerries[berryId].berryTreePaletteSlotTable[berryStage] - 2], sprite);
sprite->oam.shape = graphicsInfo->oam->shape;
sprite->oam.size = graphicsInfo->oam->size;
sprite->images = gBerryTreePicTablePointers[berryId];
sprite->images = gBerries[berryId].berryTreePicTable;
sprite->anims = graphicsInfo->anims;
sprite->subspriteTables = graphicsInfo->subspriteTables;
objectEvent->inanimate = graphicsInfo->inanimate;
@ -3188,7 +3187,7 @@ static void SetBerryTreeGraphicsById(struct ObjectEvent *objectEvent, u8 berryId
static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
u8 berryStage;
u8 berryId;
enum BerryId berryId;
objectEvent->invisible = TRUE;
sprite->invisible = TRUE;
@ -3197,9 +3196,9 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite
{
objectEvent->invisible = FALSE;
sprite->invisible = FALSE;
berryId = GetBerryTypeByBerryTreeId(objectEvent->trainerRange_berryTreeId) - 1;
berryId = GetBerryTypeByBerryTreeId(objectEvent->trainerRange_berryTreeId);
berryStage--;
if (berryId > ITEM_TO_BERRY(LAST_BERRY_INDEX))
if (berryId > NUM_BERRIES)
berryId = 0;
SetBerryTreeGraphicsById(objectEvent, berryId, berryStage);

View File

@ -225,12 +225,13 @@ bool32 CheckBagHasItem(enum Item itemId, u16 count)
bool32 HasAtLeastOneBerry(void)
{
gSpecialVar_Result = FALSE;
for (enum BerryId berryId = 1; berryId <= NUM_BERRIES; berryId++)
{
if (CheckBagHasItem(BerryTypeToItemId(berryId), 1) == TRUE)
return (gSpecialVar_Result = TRUE);
}
for (u32 i = FIRST_BERRY_INDEX; i <= LAST_BERRY_INDEX && gSpecialVar_Result == FALSE; i++)
gSpecialVar_Result = CheckBagHasItem(i, 1);
return gSpecialVar_Result;
return (gSpecialVar_Result = FALSE);
}
bool32 HasAtLeastOnePokeBall(void)

View File

@ -952,7 +952,7 @@ static void GetItemNameFromPocket(u8 *dest, enum Item itemId)
}
break;
case POCKET_BERRIES:
ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
ConvertIntToDecimalStringN(gStringVar1, ItemIdToBerryType(itemId), STR_CONV_MODE_LEADING_ZEROS, 2);
end = CopyItemName(itemId, gStringVar2);
PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 61);
StringExpandPlaceholders(dest, gText_NumberItem_TMBerry);

View File

@ -23,12 +23,6 @@ enum {
#define TAG_BERRY_CHECK_CIRCLE_GFX 10000
#define TAG_BERRY_PIC_PAL 30020
struct TilesPal
{
const u32 *tiles;
const u16 *pal;
};
// this file's functions
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite);
static void SpriteCB_ShakeBagSprite(struct Sprite *sprite);
@ -314,78 +308,6 @@ static const struct SpriteTemplate sBerryPicRotatingSpriteTemplate =
.affineAnims = sBerryPicRotatingAnimCmds,
};
static const struct TilesPal sBerryPicTable[] =
{
[ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1] = {gBerryPic_Cheri, gBerryPalette_Cheri},
[ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1] = {gBerryPic_Chesto, gBerryPalette_Chesto},
[ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1] = {gBerryPic_Pecha, gBerryPalette_Pecha},
[ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1] = {gBerryPic_Rawst, gBerryPalette_Rawst},
[ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1] = {gBerryPic_Aspear, gBerryPalette_Aspear},
[ITEM_TO_BERRY(ITEM_LEPPA_BERRY) - 1] = {gBerryPic_Leppa, gBerryPalette_Leppa},
[ITEM_TO_BERRY(ITEM_ORAN_BERRY) - 1] = {gBerryPic_Oran, gBerryPalette_Oran},
[ITEM_TO_BERRY(ITEM_PERSIM_BERRY) - 1] = {gBerryPic_Persim, gBerryPalette_Persim},
[ITEM_TO_BERRY(ITEM_LUM_BERRY) - 1] = {gBerryPic_Lum, gBerryPalette_Lum},
[ITEM_TO_BERRY(ITEM_SITRUS_BERRY) - 1] = {gBerryPic_Sitrus, gBerryPalette_Sitrus},
[ITEM_TO_BERRY(ITEM_FIGY_BERRY) - 1] = {gBerryPic_Figy, gBerryPalette_Figy},
[ITEM_TO_BERRY(ITEM_WIKI_BERRY) - 1] = {gBerryPic_Wiki, gBerryPalette_Wiki},
[ITEM_TO_BERRY(ITEM_MAGO_BERRY) - 1] = {gBerryPic_Mago, gBerryPalette_Mago},
[ITEM_TO_BERRY(ITEM_AGUAV_BERRY) - 1] = {gBerryPic_Aguav, gBerryPalette_Aguav},
[ITEM_TO_BERRY(ITEM_IAPAPA_BERRY) - 1] = {gBerryPic_Iapapa, gBerryPalette_Iapapa},
[ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1] = {gBerryPic_Razz, gBerryPalette_Razz},
[ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1] = {gBerryPic_Bluk, gBerryPalette_Bluk},
[ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1] = {gBerryPic_Nanab, gBerryPalette_Nanab},
[ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1] = {gBerryPic_Wepear, gBerryPalette_Wepear},
[ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1] = {gBerryPic_Pinap, gBerryPalette_Pinap},
[ITEM_TO_BERRY(ITEM_POMEG_BERRY) - 1] = {gBerryPic_Pomeg, gBerryPalette_Pomeg},
[ITEM_TO_BERRY(ITEM_KELPSY_BERRY) - 1] = {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
[ITEM_TO_BERRY(ITEM_QUALOT_BERRY) - 1] = {gBerryPic_Qualot, gBerryPalette_Qualot},
[ITEM_TO_BERRY(ITEM_HONDEW_BERRY) - 1] = {gBerryPic_Hondew, gBerryPalette_Hondew},
[ITEM_TO_BERRY(ITEM_GREPA_BERRY) - 1] = {gBerryPic_Grepa, gBerryPalette_Grepa},
[ITEM_TO_BERRY(ITEM_TAMATO_BERRY) - 1] = {gBerryPic_Tamato, gBerryPalette_Tamato},
[ITEM_TO_BERRY(ITEM_CORNN_BERRY) - 1] = {gBerryPic_Cornn, gBerryPalette_Cornn},
[ITEM_TO_BERRY(ITEM_MAGOST_BERRY) - 1] = {gBerryPic_Magost, gBerryPalette_Magost},
[ITEM_TO_BERRY(ITEM_RABUTA_BERRY) - 1] = {gBerryPic_Rabuta, gBerryPalette_Rabuta},
[ITEM_TO_BERRY(ITEM_NOMEL_BERRY) - 1] = {gBerryPic_Nomel, gBerryPalette_Nomel},
[ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1] = {gBerryPic_Spelon, gBerryPalette_Spelon},
[ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1] = {gBerryPic_Pamtre, gBerryPalette_Pamtre},
[ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1] = {gBerryPic_Watmel, gBerryPalette_Watmel},
[ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1] = {gBerryPic_Durin, gBerryPalette_Durin},
[ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1] = {gBerryPic_Belue, gBerryPalette_Belue},
[ITEM_TO_BERRY(ITEM_CHILAN_BERRY) - 1] = {gBerryPic_Chilan, gBerryPalette_Chilan},
[ITEM_TO_BERRY(ITEM_OCCA_BERRY) - 1] = {gBerryPic_Occa, gBerryPalette_Occa},
[ITEM_TO_BERRY(ITEM_PASSHO_BERRY) - 1] = {gBerryPic_Passho, gBerryPalette_Passho},
[ITEM_TO_BERRY(ITEM_WACAN_BERRY) - 1] = {gBerryPic_Wacan, gBerryPalette_Wacan},
[ITEM_TO_BERRY(ITEM_RINDO_BERRY) - 1] = {gBerryPic_Rindo, gBerryPalette_Rindo},
[ITEM_TO_BERRY(ITEM_YACHE_BERRY) - 1] = {gBerryPic_Yache, gBerryPalette_Yache},
[ITEM_TO_BERRY(ITEM_CHOPLE_BERRY) - 1] = {gBerryPic_Chople, gBerryPalette_Chople},
[ITEM_TO_BERRY(ITEM_KEBIA_BERRY) - 1] = {gBerryPic_Kebia, gBerryPalette_Kebia},
[ITEM_TO_BERRY(ITEM_SHUCA_BERRY) - 1] = {gBerryPic_Shuca, gBerryPalette_Shuca},
[ITEM_TO_BERRY(ITEM_COBA_BERRY) - 1] = {gBerryPic_Coba, gBerryPalette_Coba},
[ITEM_TO_BERRY(ITEM_PAYAPA_BERRY) - 1] = {gBerryPic_Payapa, gBerryPalette_Payapa},
[ITEM_TO_BERRY(ITEM_TANGA_BERRY) - 1] = {gBerryPic_Tanga, gBerryPalette_Tanga},
[ITEM_TO_BERRY(ITEM_CHARTI_BERRY) - 1] = {gBerryPic_Charti, gBerryPalette_Charti},
[ITEM_TO_BERRY(ITEM_KASIB_BERRY) - 1] = {gBerryPic_Kasib, gBerryPalette_Kasib},
[ITEM_TO_BERRY(ITEM_HABAN_BERRY) - 1] = {gBerryPic_Haban, gBerryPalette_Haban},
[ITEM_TO_BERRY(ITEM_COLBUR_BERRY) - 1] = {gBerryPic_Colbur, gBerryPalette_Colbur},
[ITEM_TO_BERRY(ITEM_BABIRI_BERRY) - 1] = {gBerryPic_Babiri, gBerryPalette_Babiri},
[ITEM_TO_BERRY(ITEM_ROSELI_BERRY) - 1] = {gBerryPic_Roseli, gBerryPalette_Roseli},
[ITEM_TO_BERRY(ITEM_LIECHI_BERRY) - 1] = {gBerryPic_Liechi, gBerryPalette_Liechi},
[ITEM_TO_BERRY(ITEM_GANLON_BERRY) - 1] = {gBerryPic_Ganlon, gBerryPalette_Ganlon},
[ITEM_TO_BERRY(ITEM_SALAC_BERRY) - 1] = {gBerryPic_Salac, gBerryPalette_Salac},
[ITEM_TO_BERRY(ITEM_PETAYA_BERRY) - 1] = {gBerryPic_Petaya, gBerryPalette_Petaya},
[ITEM_TO_BERRY(ITEM_APICOT_BERRY) - 1] = {gBerryPic_Apicot, gBerryPalette_Apicot},
[ITEM_TO_BERRY(ITEM_LANSAT_BERRY) - 1] = {gBerryPic_Lansat, gBerryPalette_Lansat},
[ITEM_TO_BERRY(ITEM_STARF_BERRY) - 1] = {gBerryPic_Starf, gBerryPalette_Starf},
[ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma},
[ITEM_TO_BERRY(ITEM_MICLE_BERRY) - 1] = {gBerryPic_Micle, gBerryPalette_Micle},
[ITEM_TO_BERRY(ITEM_CUSTAP_BERRY) - 1] = {gBerryPic_Custap, gBerryPalette_Custap},
[ITEM_TO_BERRY(ITEM_JABOCA_BERRY) - 1] = {gBerryPic_Jaboca, gBerryPalette_Jaboca},
[ITEM_TO_BERRY(ITEM_ROWAP_BERRY) - 1] = {gBerryPic_Rowap, gBerryPalette_Rowap},
[ITEM_TO_BERRY(ITEM_KEE_BERRY) - 1] = {gBerryPic_Kee, gBerryPalette_Kee},
[ITEM_TO_BERRY(ITEM_MARANGA_BERRY)- 1] = {gBerryPic_Maranga, gBerryPalette_Maranga},
[ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma},
};
const struct CompressedSpriteSheet gBerryCheckCircleSpriteSheet =
{
gBerryCheckCircle_Gfx, 0x800, TAG_BERRY_CHECK_CIRCLE_GFX
@ -639,11 +561,11 @@ static struct BerryDynamicGfx *LoadBerryGfx(u8 berryId)
{
struct SpritePalette pal;
pal.data = sBerryPicTable[berryId].pal;
pal.data = gBerries[berryId].berryPal;
pal.tag = TAG_BERRY_PIC_PAL + berryId;
LoadSpritePalette(&pal);
struct BerryDynamicGfx *gfxAlloced = Alloc(sizeof(struct BerryDynamicGfx));
void *buffer = malloc_and_decompress(sBerryPicTable[berryId].tiles, NULL);
void *buffer = malloc_and_decompress(gBerries[berryId].berryPic, NULL);
ArrangeBerryGfx(buffer, gfxAlloced->gfx);
Free(buffer);

View File

@ -2600,12 +2600,12 @@ bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx)
bool8 ScrCmd_setberrytree(struct ScriptContext *ctx)
{
u8 treeId = ScriptReadByte(ctx);
u8 berry = ScriptReadByte(ctx);
enum BerryId berryId = ScriptReadByte(ctx);
u8 growthStage = ScriptReadByte(ctx);
Script_RequestEffects(SCREFF_V1 | SCREFF_SAVE);
PlantBerryTree(treeId, berry, growthStage, FALSE);
PlantBerryTree(treeId, berryId, growthStage, FALSE);
return FALSE;
}

View File

@ -108,7 +108,7 @@ bool8 DoesPartyHaveEnigmaBerry(void)
{
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY_E_READER);
if (hasItem == TRUE)
GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER), gStringVar1);
GetBerryNameByBerryType(BERRY_ID_ENGIMA_E_READER, gStringVar1);
return hasItem;
}
@ -681,3 +681,11 @@ void Script_SetKO(struct ScriptContext *ctx)
SetMonData(&gPlayerParty[slot], MON_DATA_HP, &hp);
}
}
void Script_GiveRandomBerry(struct ScriptContext *ctx)
{
enum BerryId loBerry = ScriptReadByte(ctx);
enum BerryId hiBerry = ScriptReadByte(ctx);
gSpecialVar_Result = BerryTypeToItemId(RandomUniform(RNG_RANDOM_BERRY, loBerry, hiBerry));
}

View File

@ -4,6 +4,7 @@
#include "event_data.h"
#include "wonder_news.h"
#include "constants/items.h"
#include "item.h"
// Every 4th reward for sending Wonder News to a link partner is a "big" reward.
#define MAX_SENT_REWARD 4
@ -30,11 +31,11 @@ void WonderNews_SetReward(u32 newsType)
case WONDER_NEWS_RECV_FRIEND:
case WONDER_NEWS_RECV_WIRELESS:
// Random berry between ITEM_RAZZ_BERRY and ITEM_NOMEL_BERRY
data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY);
data->berry = RandomUniform(RNG_RANDOM_BERRY, BERRY_ID_RAZZ, BERRY_ID_NOMEL);
break;
case WONDER_NEWS_SENT:
// Random berry between ITEM_CHERI_BERRY and ITEM_IAPAPA_BERRY
data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY);
data->berry = RandomUniform(RNG_RANDOM_BERRY, BERRY_ID_CHERI, BERRY_ID_IAPAPA);
break;
}
}
@ -106,7 +107,7 @@ static u32 GetRewardItem(struct WonderNewsMetadata *data)
{
enum Item itemId;
data->newsType = WONDER_NEWS_NONE;
itemId = data->berry + FIRST_BERRY_INDEX - 1;
itemId = BerryTypeToItemId(data->berry);
data->berry = 0;
IncrementRewardCounter(data);
return itemId;

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
#include "berry.h"
ASSUMPTIONS
{
@ -111,7 +112,7 @@ SINGLE_BATTLE_TEST("Aerilate doesn't affect Natural Gift's type")
GIVEN {
ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT);
ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP);
ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_PERSIM_BERRY)].type == TYPE_GROUND);
ASSUME(gBerries[ItemIdToBerryType(ITEM_PERSIM_BERRY)].naturalGiftType == TYPE_GROUND);
ASSUME(GetSpeciesType(SPECIES_SALAMENCE_MEGA, 0) == TYPE_FLYING || GetSpeciesType(SPECIES_SALAMENCE_MEGA, 1) == TYPE_FLYING);
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PERSIM_BERRY); }
OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); }

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
#include "berry.h"
SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP (Gen 7+)")
{
@ -66,7 +67,7 @@ SINGLE_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Natural
ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
ASSUME(gItemsInfo[ITEM_SKY_PLATE].holdEffect == HOLD_EFFECT_PLATE);
ASSUME(gItemsInfo[ITEM_SKY_PLATE].secondaryId == TYPE_FLYING);
ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_LUM_BERRY)].type == TYPE_FLYING);
ASSUME(gBerries[ItemIdToBerryType(ITEM_LUM_BERRY)].naturalGiftType == TYPE_FLYING);
OPPONENT(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); Speed(1); Item(heldItem); HPIV(31); AttackIV(3); DefenseIV(31); SpAttackIV(30); SpDefenseIV(30); SpeedIV(30); TeraType(TYPE_FLYING); }
PLAYER(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
#include "berry.h"
ASSUMPTIONS
{
@ -103,7 +104,7 @@ SINGLE_BATTLE_TEST("Galvanize doesn't affect Natural Gift's type")
PARAMETRIZE { ability = ABILITY_GALVANIZE; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT);
ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_ORAN_BERRY)].type == TYPE_POISON);
ASSUME(gBerries[ItemIdToBerryType(ITEM_ORAN_BERRY)].naturalGiftType == TYPE_POISON);
ASSUME(GetSpeciesType(SPECIES_BELDUM, 0) == TYPE_STEEL);
PLAYER(SPECIES_GEODUDE_ALOLA) { Ability(ability); Item(ITEM_ORAN_BERRY); }
OPPONENT(SPECIES_BELDUM);

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
#include "berry.h"
ASSUMPTIONS
{
@ -218,7 +219,7 @@ SINGLE_BATTLE_TEST("Normalize doesn't affect Natural Gift's type")
PARAMETRIZE { ability = ABILITY_NORMALIZE; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT);
ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_ORAN_BERRY)].type == TYPE_POISON);
ASSUME(gBerries[ItemIdToBerryType(ITEM_ORAN_BERRY)].naturalGiftType == TYPE_POISON);
ASSUME(GetSpeciesType(SPECIES_BELDUM, 0) == TYPE_STEEL);
PLAYER(SPECIES_SKITTY) { Ability(ability); Item(ITEM_ORAN_BERRY); }
OPPONENT(SPECIES_BELDUM);

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
#include "berry.h"
ASSUMPTIONS
{
@ -82,7 +83,7 @@ SINGLE_BATTLE_TEST("Pixilate doesn't affect Natural Gift's type")
PARAMETRIZE { ability = ABILITY_PIXILATE; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT);
ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_ORAN_BERRY)].type == TYPE_POISON);
ASSUME(gBerries[ItemIdToBerryType(ITEM_ORAN_BERRY)].naturalGiftType == TYPE_POISON);
ASSUME(GetSpeciesType(SPECIES_BELDUM, 0) == TYPE_STEEL);
PLAYER(SPECIES_SYLVEON) { Ability(ability); Item(ITEM_ORAN_BERRY); }
OPPONENT(SPECIES_BELDUM);

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
#include "berry.h"
ASSUMPTIONS
{
@ -81,7 +82,7 @@ SINGLE_BATTLE_TEST("Refrigerate doesn't affect Natural Gift's type")
PARAMETRIZE { ability = ABILITY_REFRIGERATE; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT);
ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_ORAN_BERRY)].type == TYPE_POISON);
ASSUME(gBerries[ItemIdToBerryType(ITEM_ORAN_BERRY)].naturalGiftType == TYPE_POISON);
ASSUME(GetSpeciesType(SPECIES_BELDUM, 0) == TYPE_STEEL);
PLAYER(SPECIES_AMAURA) { Ability(ability); Item(ITEM_ORAN_BERRY); }
OPPONENT(SPECIES_BELDUM);