From 47cac73a6159664c4b6f4c5a6a71a0bb8660c7e1 Mon Sep 17 00:00:00 2001 From: Nephrite Date: Sat, 21 Mar 2026 20:30:09 +0000 Subject: [PATCH] gBerries refactor + untangling berry indices from item IDs (#7305) --- asm/macros/event.inc | 23 +- data/maps/LilycoveCity/scripts.inc | 4 +- .../scripts.inc | 4 +- data/maps/Route114/scripts.inc | 5 +- .../Route123_BerryMastersHouse/scripts.inc | 14 +- data/maps/SootopolisCity/scripts.inc | 7 +- data/scripts/new_game.inc | 160 +- include/battle_util.h | 10 - include/berry.h | 240 +- include/constants/berries.h | 73 + include/constants/items.h | 28 +- include/event_object_movement.h | 3 +- include/global.berry.h | 19 +- include/item.h | 35 +- include/metaprogram.h | 3 +- include/random.h | 1 + src/battle_hold_effects.c | 2 +- src/battle_main.c | 12 +- src/battle_pyramid_bag.c | 2 +- src/battle_script_commands.c | 4 +- src/battle_util.c | 73 +- src/berry.c | 3971 ++++++++++------- src/berry_blender.c | 50 +- src/berry_crush.c | 30 +- src/berry_tag_screen.c | 40 +- .../berry_tree_graphics_tables.h | 233 +- .../object_event_graphics_info.h | 6 +- src/debug.c | 3 +- src/dodrio_berry_picking.c | 62 +- src/event_object_movement.c | 13 +- src/item.c | 11 +- src/item_menu.c | 2 +- src/item_menu_icons.c | 82 +- src/scrcmd.c | 4 +- src/script_pokemon_util.c | 10 +- src/wonder_news.c | 7 +- test/battle/ability/aerilate.c | 3 +- test/battle/ability/gale_wings.c | 3 +- test/battle/ability/galvanize.c | 3 +- test/battle/ability/normalize.c | 3 +- test/battle/ability/pixilate.c | 3 +- test/battle/ability/refrigerate.c | 3 +- 42 files changed, 2956 insertions(+), 2308 deletions(-) create mode 100644 include/constants/berries.h diff --git a/asm/macros/event.inc b/asm/macros/event.inc index a7f4cbf049..eb8bc7e8a4 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -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 diff --git a/data/maps/LilycoveCity/scripts.inc b/data/maps/LilycoveCity/scripts.inc index 0424202355..6ef95fcfd4 100644 --- a/data/maps/LilycoveCity/scripts.inc +++ b/data/maps/LilycoveCity/scripts.inc @@ -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 diff --git a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc index 7486b11093..a5088f82cc 100644 --- a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc +++ b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc @@ -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 diff --git a/data/maps/Route114/scripts.inc b/data/maps/Route114/scripts.inc index db46f7bb80..44cd7d21ef 100644 --- a/data/maps/Route114/scripts.inc +++ b/data/maps/Route114/scripts.inc @@ -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 diff --git a/data/maps/Route123_BerryMastersHouse/scripts.inc b/data/maps/Route123_BerryMastersHouse/scripts.inc index bdc0b0456b..0e63398d8a 100644 --- a/data/maps/Route123_BerryMastersHouse/scripts.inc +++ b/data/maps/Route123_BerryMastersHouse/scripts.inc @@ -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 diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index eb6edd3245..a20d57db2e 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -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 diff --git a/data/scripts/new_game.inc b/data/scripts/new_game.inc index bf0b8cd03d..d4dead0289 100644 --- a/data/scripts/new_game.inc +++ b/data/scripts/new_game.inc @@ -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:: diff --git a/include/battle_util.h b/include/battle_util.h index 97d5623470..028c09a79f 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -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; diff --git a/include/berry.h b/include/berry.h index 7b45dbf14e..a1a1ec94f9 100644 --- a/include/berry.h +++ b/include/berry.h @@ -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 diff --git a/include/constants/berries.h b/include/constants/berries.h new file mode 100644 index 0000000000..1d5fa8e385 --- /dev/null +++ b/include/constants/berries.h @@ -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 diff --git a/include/constants/items.h b/include/constants/items.h index e718890a1c..bf4522306b 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -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) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 923cc99467..71a3256364 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -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); diff --git a/include/global.berry.h b/include/global.berry.h index 9db8efce3a..2dc76ce53c 100644 --- a/include/global.berry.h +++ b/include/global.berry.h @@ -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; diff --git a/include/item.h b/include/item.h index 3409e27020..3eb477842d 100644 --- a/include/item.h +++ b/include/item.h @@ -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; } diff --git a/include/metaprogram.h b/include/metaprogram.h index 3bb5a40d3a..ec0b6ef0bf 100644 --- a/include/metaprogram.h +++ b/include/metaprogram.h @@ -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 diff --git a/include/random.h b/include/random.h index 3a51c46036..4f9a1ad9d6 100644 --- a/include/random.h +++ b/include/random.h @@ -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, ...) \ diff --git a/src/battle_hold_effects.c b/src/battle_hold_effects.c index f607a437da..02d5e95aac 100644 --- a/src/battle_hold_effects.c +++ b/src/battle_hold_effects.c @@ -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; } diff --git a/src/battle_main.c b/src/battle_main.c index bce94d9193..3d65d0b5e3 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -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: diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 2c7a58fc8f..5fc5eb38e4 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -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); } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6b6feeb174..eb31120e53 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -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; diff --git a/src/battle_util.c b/src/battle_util.c index e058e351be..fb2f1f8c75 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -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 diff --git a/src/berry.c b/src/berry.c index ebf49d8196..278e6fd65b 100644 --- a/src/berry.c +++ b/src/berry.c @@ -10,12 +10,12 @@ #include "main.h" #include "random.h" #include "script_pokemon_util.h" +#include "sprite.h" #include "string_util.h" #include "text.h" #include "constants/event_object_movement.h" #include "constants/items.h" -static enum Item BerryTypeToItemId(u16 berry); static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree); static u8 GetNumStagesWateredByBerryTreeId(u8 id); static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water); @@ -56,1642 +56,2260 @@ static void AddTreeBonus(struct BerryTree *tree, u8 bonus); #define GROWTH_DURATION(g3, g4, g5, xy, oras, g7) OW_BERRY_GROWTH_RATE == GEN_3 ? g3 : OW_BERRY_GROWTH_RATE == GEN_4 ? g4 : OW_BERRY_GROWTH_RATE == GEN_5 ? g5 : OW_BERRY_GROWTH_RATE == GEN_6_XY ? xy : OW_BERRY_GROWTH_RATE == GEN_6_ORAS ? oras : g7 #define YIELD_RATE(g3, g4, xy, oras) OW_BERRY_YIELD_RATE == GEN_3 ? g3 : OW_BERRY_YIELD_RATE == GEN_4 ? g4 : OW_BERRY_YIELD_RATE == GEN_6_XY ? xy : oras -const struct Berry gBerries[] = +const struct Berry gBerries[NUM_BERRIES + 1] = { - [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Cheri"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_RED, - .size = 20, - .maxYield = YIELD_RATE(3, 5, 15, 20), - .minYield = YIELD_RATE(2, 2, 4, 4), - .description1 = COMPOUND_STRING("Blooms with delicate pretty flowers."), - .description2 = COMPOUND_STRING("The bright red Berry is very spicy."), - .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - .drainRate = 15, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Chesto"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, - .size = 80, - .maxYield = YIELD_RATE(3, 5, 15, 20), - .minYield = YIELD_RATE(2, 2, 4, 4), - .description1 = COMPOUND_STRING("The Berry's thick skin and fruit are"), - .description2 = COMPOUND_STRING("very tough. It is dry-tasting all over."), - .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - .drainRate = 15, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Pecha"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = BERRY_COLOR_PINK, - .size = 40, - .maxYield = YIELD_RATE(3, 5, 15, 20), - .minYield = YIELD_RATE(2, 2, 4, 4), - .description1 = COMPOUND_STRING("Very sweet and delicious."), - .description2 = COMPOUND_STRING("Also very tender - handle with care."), - .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 25, - .drainRate = 15, - .waterBonus = 10, - .weedsBonus = 4, - .pestsBonus = 6, - }, - - [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Rawst"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_GREEN, - .size = 32, - .maxYield = YIELD_RATE(3, 5, 15, 20), - .minYield = YIELD_RATE(2, 2, 4, 4), - .description1 = COMPOUND_STRING("If the leaves grow long and curly,"), - .description2 = COMPOUND_STRING("the Berry seems to grow very bitter."), - .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 25, - .drainRate = 15, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Aspear"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_YELLOW, - .size = 50, - .maxYield = YIELD_RATE(3, 5, 15, 20), - .minYield = YIELD_RATE(2, 2, 4, 4), - .description1 = COMPOUND_STRING("The hard Berry is dense with a rich"), - .description2 = COMPOUND_STRING("juice. It is quite sour."), - .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 25, - .drainRate = 15, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Leppa"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_RED, - .size = 28, - .maxYield = YIELD_RATE(3, 5, 15, 22), - .minYield = YIELD_RATE(2, 2, 2, 2), - .description1 = COMPOUND_STRING("Grows slower than Cheri and others."), - .description2 = COMPOUND_STRING("The smaller the Berry, the tastier."), - .growthDuration = GROWTH_DURATION(16, 16, 24, 24, 16, 24), - .spicy = 10, - .dry = 0, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - .drainRate = 15, - .waterBonus = 15, - .weedsBonus = 3, - .pestsBonus = 6, - }, - - [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Oran"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_BLUE, - .size = 35, - .maxYield = YIELD_RATE(3, 5, 15, 20), - .minYield = YIELD_RATE(2, 2, 4, 4), - .description1 = COMPOUND_STRING("A peculiar Berry with a mix of flavors."), - .description2 = COMPOUND_STRING("Berries grow in half a day."), - .growthDuration = GROWTH_DURATION(12, 16, 24, 24, 16, 24), - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - .drainRate = 15, - .waterBonus = 10, - .weedsBonus = 4, - .pestsBonus = 6, - }, - - [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Persim"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_PINK, - .size = 47, - .maxYield = YIELD_RATE(3, 5, 15, 20), - .minYield = YIELD_RATE(2, 2, 4, 4), - .description1 = COMPOUND_STRING("Loves sunlight. The Berry's color"), - .description2 = COMPOUND_STRING("grows vivid when exposed to the sun."), - .growthDuration = GROWTH_DURATION(12, 16, 24, 24, 16, 24), - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - .drainRate = 15, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Lum"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_GREEN, - .size = 34, - .maxYield = YIELD_RATE(2, 5, 20, 18), - .minYield = YIELD_RATE(1, 2, 3, 2), - .description1 = COMPOUND_STRING("Slow to grow. If raised with loving"), - .description2 = COMPOUND_STRING("care, it may grow two Berries."), - .growthDuration = GROWTH_DURATION(48, 48, 72, 48, 32, 48), - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - .drainRate = 8, - .waterBonus = 12, - .weedsBonus = 1, - .pestsBonus = 6, - }, - - [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Sitrus"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_YELLOW, - .size = 95, - .maxYield = YIELD_RATE(3, 5, 20, 27), - .minYield = YIELD_RATE(2, 2, 3, 3), - .description1 = COMPOUND_STRING("Closely related to Oran. The large"), - .description2 = COMPOUND_STRING("Berry has a well-rounded flavor."), - .growthDuration = GROWTH_DURATION(24, 32, 48, 48, 32, 48), - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - .drainRate = 7, - .waterBonus = 12, - .weedsBonus = 1, - .pestsBonus = 6, - }, - - [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Figy"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_RED, - .size = 100, - .maxYield = YIELD_RATE(3, 5, 15, 15), - .minYield = YIELD_RATE(2, 1, 3, 3), - .description1 = COMPOUND_STRING("The Berry, which looks chewed up,"), - .description2 = COMPOUND_STRING("brims with spicy substances."), - .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - .drainRate = 10, - .waterBonus = 15, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Wiki"), - .firmness = BERRY_FIRMNESS_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, - .size = 115, - .maxYield = YIELD_RATE(3, 5, 15, 15), - .minYield = YIELD_RATE(2, 1, 3, 3), - .description1 = COMPOUND_STRING("The Berry is said to have grown lumpy"), - .description2 = COMPOUND_STRING("to help Pokémon grip it."), - .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - .drainRate = 10, - .waterBonus = 15, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Mago"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_PINK, - .size = 126, - .maxYield = YIELD_RATE(3, 5, 15, 15), - .minYield = YIELD_RATE(2, 1, 3, 3), - .description1 = COMPOUND_STRING("The Berry turns curvy as it grows."), - .description2 = COMPOUND_STRING("The curvier, the sweeter and tastier."), - .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 25, - .drainRate = 10, - .waterBonus = 15, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Aguav"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_GREEN, - .size = 64, - .maxYield = YIELD_RATE(3, 5, 15, 15), - .minYield = YIELD_RATE(2, 1, 3, 3), - .description1 = COMPOUND_STRING("The flower is dainty. It is rare in its"), - .description2 = COMPOUND_STRING("ability to grow without light."), - .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 25, - .drainRate = 10, - .waterBonus = 15, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Iapapa"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_YELLOW, - .size = 223, - .maxYield = YIELD_RATE(3, 5, 15, 15), - .minYield = YIELD_RATE(2, 1, 3, 3), - .description1 = COMPOUND_STRING("The Berry is very big and sour."), - .description2 = COMPOUND_STRING("It takes at least a day to grow."), - .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 25, - .drainRate = 10, - .waterBonus = 15, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Razz"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_RED, - .size = 120, - .maxYield = YIELD_RATE(6, 10, 15, 20), - .minYield = YIELD_RATE(3, 2, 3, 4), - .description1 = COMPOUND_STRING("The red Berry tastes slightly spicy."), - .description2 = COMPOUND_STRING("It grows quickly in just four hours."), - .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), - .spicy = 10, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 20, - .drainRate = 35, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Bluk"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, - .size = 108, - .maxYield = YIELD_RATE(6, 10, 15, 20), - .minYield = YIELD_RATE(3, 2, 3, 4), - .description1 = COMPOUND_STRING("The Berry is blue on the outside, but"), - .description2 = COMPOUND_STRING("it blackens the mouth when eaten."), - .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), - .spicy = 0, - .dry = 10, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 20, - .drainRate = 35, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Nanab"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_PINK, - .size = 77, - .maxYield = YIELD_RATE(6, 10, 15, 20), - .minYield = YIELD_RATE(3, 2, 3, 4), - .description1 = COMPOUND_STRING("This Berry was the seventh"), - .description2 = COMPOUND_STRING("discovered in the world. It is sweet."), - .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 10, - .sour = 0, - .smoothness = 20, - .drainRate = 35, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Wepear"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_GREEN, - .size = 74, - .maxYield = YIELD_RATE(6, 10, 15, 20), - .minYield = YIELD_RATE(3, 2, 3, 4), - .description1 = COMPOUND_STRING("The flower is small and white. It has a"), - .description2 = COMPOUND_STRING("delicate balance of bitter and sour."), - .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 10, - .smoothness = 20, - .drainRate = 35, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Pinap"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_YELLOW, - .size = 80, - .maxYield = YIELD_RATE(6, 10, 15, 20), - .minYield = YIELD_RATE(3, 2, 3, 4), - .description1 = COMPOUND_STRING("Weak against wind and cold."), - .description2 = COMPOUND_STRING("The fruit is spicy and the skin, sour."), - .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 20, - .drainRate = 35, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Pomeg"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_RED, - .size = 135, - .maxYield = YIELD_RATE(6, 5, 20, 26), - .minYield = YIELD_RATE(2, 1, 1, 2), - .description1 = COMPOUND_STRING("However much it is watered,"), - .description2 = COMPOUND_STRING("it only grows up to six Berries."), - .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), - .spicy = 10, - .dry = 0, - .sweet = 10, - .bitter = 10, - .sour = 0, - .smoothness = 20, - .drainRate = 8, - .waterBonus = 5, - .weedsBonus = 3, - .pestsBonus = 6, - }, - - [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Kelpsy"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_BLUE, - .size = 150, - .maxYield = YIELD_RATE(6, 5, 20, 26), - .minYield = YIELD_RATE(2, 1, 1, 2), - .description1 = COMPOUND_STRING("A rare variety shaped like a root."), - .description2 = COMPOUND_STRING("Grows a very large flower."), - .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 10, - .sour = 10, - .smoothness = 20, - .drainRate = 8, - .waterBonus = 5, - .weedsBonus = 3, - .pestsBonus = 6, - }, - - [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Qualot"), - .firmness = BERRY_FIRMNESS_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_YELLOW : BERRY_COLOR_PINK, - .size = 110, - .maxYield = YIELD_RATE(6, 5, 20, 26), - .minYield = YIELD_RATE(2, 1, 1, 2), - .description1 = COMPOUND_STRING("Loves water. Grows strong even in"), - .description2 = COMPOUND_STRING("locations with constant rainfall."), - .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), - .spicy = 10, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 10, - .smoothness = 20, - .drainRate = 8, - .waterBonus = 5, - .weedsBonus = 3, - .pestsBonus = 6, - }, - - [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Hondew"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_GREEN, - .size = 162, - .maxYield = YIELD_RATE(6, 5, 20, 26), - .minYield = YIELD_RATE(2, 1, 1, 2), - .description1 = COMPOUND_STRING("A Berry that is very valuable and"), - .description2 = COMPOUND_STRING("rarely seen. It is very delicious."), - .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), - .spicy = 10, - .dry = 10, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 20, - .drainRate = 8, - .waterBonus = 5, - .weedsBonus = 3, - .pestsBonus = 6, - }, - - [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Grepa"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_YELLOW, - .size = 149, - .maxYield = YIELD_RATE(6, 5, 20, 26), - .minYield = YIELD_RATE(2, 1, 1, 2), - .description1 = COMPOUND_STRING("Despite its tenderness and round"), - .description2 = COMPOUND_STRING("shape, the Berry is unimaginably sour."), - .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), - .spicy = 0, - .dry = 10, - .sweet = 10, - .bitter = 0, - .sour = 10, - .smoothness = 20, - .drainRate = 8, - .waterBonus = 5, - .weedsBonus = 3, - .pestsBonus = 6, - }, - - [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Tamato"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_RED, - .size = 200, - .maxYield = YIELD_RATE(4, 5, 20, 26), - .minYield = YIELD_RATE(2, 1, 1, 2), - .description1 = COMPOUND_STRING("The Berry is lip-bendingly spicy."), - .description2 = COMPOUND_STRING("It takes time to grow."), - .growthDuration = GROWTH_DURATION(24, 32, 48, 48, 32, 48), - .spicy = 20, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 30, - .drainRate = 8, - .waterBonus = 5, - .weedsBonus = 3, - .pestsBonus = 6, - }, - - [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Cornn"), - .firmness = BERRY_FIRMNESS_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, - .size = 75, - .maxYield = YIELD_RATE(4, 10, 15, 15), - .minYield = YIELD_RATE(2, 2, 3, 3), - .description1 = COMPOUND_STRING("A Berry from an ancient era. May not"), - .description2 = COMPOUND_STRING("grow unless planted in quantity."), - .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), - .spicy = 0, - .dry = 20, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 30, - .drainRate = 10, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Magost"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_PINK, - .size = 140, - .maxYield = YIELD_RATE(4, 10, 15, 15), - .minYield = YIELD_RATE(2, 2, 3, 3), - .description1 = COMPOUND_STRING("A Berry that is widely said to have"), - .description2 = COMPOUND_STRING("a finely balanced flavor."), - .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 20, - .bitter = 10, - .sour = 0, - .smoothness = 30, - .drainRate = 10, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Rabuta"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_GREEN, - .size = 226, - .maxYield = YIELD_RATE(4, 10, 15, 15), - .minYield = YIELD_RATE(2, 2, 3, 3), - .description1 = COMPOUND_STRING("A rare variety that is overgrown with"), - .description2 = COMPOUND_STRING("hair. It is quite bitter."), - .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 20, - .sour = 10, - .smoothness = 30, - .drainRate = 10, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Nomel"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_YELLOW, - .size = 285, - .maxYield = YIELD_RATE(4, 10, 15, 15), - .minYield = YIELD_RATE(2, 2, 3, 3), - .description1 = COMPOUND_STRING("Quite sour. Just one bite makes it"), - .description2 = COMPOUND_STRING("impossible to taste for three days."), - .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 20, - .smoothness = 30, - .drainRate = 10, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Spelon"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_RED : BERRY_COLOR_PINK, - .size = 133, - .maxYield = YIELD_RATE(2, 15, 15, 15), - .minYield = YIELD_RATE(1, 2, 3, 3), - .description1 = COMPOUND_STRING("The vividly red Berry is very spicy."), - .description2 = COMPOUND_STRING("Its warts secrete a spicy substance."), - .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), - .spicy = 40, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 70, - .drainRate = 8, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Pamtre"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, - .size = 244, - .maxYield = YIELD_RATE(2, 15, 15, 15), - .minYield = YIELD_RATE(1, 3, 3, 3), - .description1 = COMPOUND_STRING("Drifts on the sea from somewhere."), - .description2 = COMPOUND_STRING("It is thought to grow elsewhere."), - .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), - .spicy = 0, - .dry = 40, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 70, - .drainRate = 8, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Watmel"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PINK : BERRY_COLOR_GREEN, - .size = 250, - .maxYield = YIELD_RATE(2, 15, 15, 15), - .minYield = YIELD_RATE(1, 2, 3, 3), - .description1 = COMPOUND_STRING("A huge Berry, with some over 20"), - .description2 = COMPOUND_STRING("inches discovered. Exceedingly sweet."), - .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 40, - .bitter = 10, - .sour = 0, - .smoothness = 70, - .drainRate = 8, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Durin"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_GREEN, - .size = 280, - .maxYield = YIELD_RATE(2, 15, 15, 15), - .minYield = YIELD_RATE(1, 3, 3, 3), - .description1 = COMPOUND_STRING("Bitter to even look at. It is so"), - .description2 = COMPOUND_STRING("bitter, no one has ever eaten it as is."), - .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 40, - .sour = 10, - .smoothness = 70, - .drainRate = 8, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Belue"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, - .size = 300, - .maxYield = YIELD_RATE(2, 15, 15, 15), - .minYield = YIELD_RATE(1, 2, 3, 3), - .description1 = COMPOUND_STRING("It is glossy and looks delicious, but"), - .description2 = COMPOUND_STRING("it is awfully sour. Takes time to grow."), - .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 40, - .smoothness = 70, - .drainRate = 8, - .waterBonus = 10, - .weedsBonus = 2, - .pestsBonus = 6, - }, - - [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Chilan"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = BERRY_COLOR_YELLOW, - .size = 34, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("It can be made into a whistle that"), - .description2 = COMPOUND_STRING("produces an indescribable sound."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 25, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Occa"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_RED, - .size = 90, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Said to grow in the tropics once,"), - .description2 = COMPOUND_STRING("it boasts an intensely hot spiciness."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 15, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Passho"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_BLUE, - .size = 33, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Its flesh is dotted with many tiny"), - .description2 = COMPOUND_STRING("bubbles that keep it afloat in water."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 15, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Wacan"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = BERRY_COLOR_YELLOW, - .size = 250, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Energy drawn from lightning strikes"), - .description2 = COMPOUND_STRING("makes this Berry grow big and rich."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 0, - .sweet = 15, - .bitter = 0, - .sour = 10, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Rindo"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_GREEN, - .size = 156, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("This berry has a vegetable-like flavor,"), - .description2 = COMPOUND_STRING("but is rich in health-promoting fiber."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 15, - .sour = 0, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Yache"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_BLUE, - .size = 135, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("This Berry has a refreshing dry and"), - .description2 = COMPOUND_STRING("sour flavor. Tastes better chilled."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 15, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Chople"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_RED, - .size = 77, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Contains a substance that generates"), - .description2 = COMPOUND_STRING("heat. Can even fire up a chilly heart."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 15, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Kebia"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_GREEN, - .size = 90, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Brilliant green on the outside, inside"), - .description2 = COMPOUND_STRING("it is packed with black-colored flesh."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 15, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Shuca"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_YELLOW, - .size = 42, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("The sweet pulp has just the hint of a"), - .description2 = COMPOUND_STRING("a hard-edged and fragrant bite to it."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 10, - .dry = 0, - .sweet = 15, - .bitter = 0, - .sour = 0, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Coba"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_BLUE, - .size = 278, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("This Berry is said to be a cross of"), - .description2 = COMPOUND_STRING("two Berries blown in from far away."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 15, - .sour = 0, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Payapa"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_RED, - .size = 252, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Said to sense human emotions, it swells"), - .description2 = COMPOUND_STRING("roundly when a person approaches."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 15, - .smoothness = 30, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Tanga"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = BERRY_COLOR_GREEN, - .size = 42, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("It grows a flower at the tip that lures"), - .description2 = COMPOUND_STRING("Bug Pokémon with its stringy petals."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 20, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Charti"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = BERRY_COLOR_YELLOW, - .size = 28, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Often used for pickles because of its"), - .description2 = COMPOUND_STRING("dry flavor. Sometimes eaten raw."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 10, - .dry = 20, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Kasib"), - .firmness = BERRY_FIRMNESS_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_PINK, - .size = 144, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Old superstitions say it has an odd"), - .description2 = COMPOUND_STRING("power. A popular good-luck charm."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 10, - .sweet = 20, - .bitter = 0, - .sour = 0, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Haban"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_RED, - .size = 23, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Less bitter if enough of this Berry"), - .description2 = COMPOUND_STRING("is boiled down. Makes a good jam."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 20, - .sour = 0, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Colbur"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_PINK, - .size = 39, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Tiny hooks on the surface latch onto"), - .description2 = COMPOUND_STRING("Pokémon to reach far-off places."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 20, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Babiri"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_GREEN, - .size = 265, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("Very tough with a strong flavor. It"), - .description2 = COMPOUND_STRING("was used to make medicine in the past."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 25, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Roseli"), - .firmness = BERRY_FIRMNESS_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PINK : BERRY_COLOR_RED, - .size = 35, - .maxYield = YIELD_RATE(5, 5, 20, 10), - .minYield = YIELD_RATE(2, 1, 3, 2), - .description1 = COMPOUND_STRING("In nature, they grow in wide rings"), - .description2 = COMPOUND_STRING("for reasons that are still unknown."), - .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), - .spicy = 0, - .dry = 0, - .sweet = 25, - .bitter = 10, - .sour = 0, - .smoothness = 35, - .drainRate = 6, - .waterBonus = 10, - .weedsBonus = 1, - .pestsBonus = 4, - }, - - [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Liechi"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_RED : BERRY_COLOR_YELLOW, - .size = 111, - .maxYield = YIELD_RATE(2, 5, 10, 13), - .minYield = YIELD_RATE(1, 1, 1, 2), - .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), - .description2 = COMPOUND_STRING("contain the power of the sea."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), - .spicy = 40, - .dry = 0, - .sweet = 40, - .bitter = 0, - .sour = 10, - .smoothness = 80, - .drainRate = 4, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 2, - }, - - [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Ganlon"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, - .size = 33, - .maxYield = YIELD_RATE(2, 5, 10, 13), - .minYield = YIELD_RATE(1, 1, 1, 2), - .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), - .description2 = COMPOUND_STRING("contain the power of the land."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), - .spicy = 0, - .dry = 40, - .sweet = 0, - .bitter = 40, - .sour = 0, - .smoothness = 80, - .drainRate = 4, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 2, - }, - - [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Salac"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_GREEN, - .size = 95, - .maxYield = YIELD_RATE(2, 5, 10, 13), - .minYield = YIELD_RATE(1, 1, 1, 2), - .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), - .description2 = COMPOUND_STRING("contain the power of the sky."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), - .spicy = 0, - .dry = 0, - .sweet = 40, - .bitter = 0, - .sour = 40, - .smoothness = 80, - .drainRate = 4, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 2, - }, - - [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Petaya"), - .firmness = BERRY_FIRMNESS_VERY_HARD, - .color = BERRY_COLOR_PINK, - .size = 237, - .maxYield = YIELD_RATE(2, 5, 10, 13), - .minYield = YIELD_RATE(1, 1, 1, 2), - .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), - .description2 = COMPOUND_STRING("contain the power of all living things."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), - .spicy = 40, - .dry = 0, - .sweet = 0, - .bitter = 40, - .sour = 0, - .smoothness = 80, - .drainRate = 4, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 2, - }, - - [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Apicot"), - .firmness = BERRY_FIRMNESS_HARD, - .color = BERRY_COLOR_BLUE, - .size = 75, - .maxYield = YIELD_RATE(2, 5, 10, 13), - .minYield = YIELD_RATE(1, 1, 1, 2), - .description1 = COMPOUND_STRING("A very mystifying Berry. No telling"), - .description2 = COMPOUND_STRING("what may happen or how it can be used."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), - .spicy = 0, - .dry = 40, - .sweet = 0, - .bitter = 0, - .sour = 40, - .smoothness = 80, - .drainRate = 4, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 2, - }, - - [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Lansat"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_RED : BERRY_COLOR_PINK, - .size = 97, - .maxYield = YIELD_RATE(2, 5, 5, 7), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("Said to be a legendary Berry."), - .description2 = COMPOUND_STRING("Holding it supposedly brings joy."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 120, 48, 72), - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 30, - .drainRate = 4, - .waterBonus = 1, - .weedsBonus = 0, - .pestsBonus = 1, - }, - - [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Starf"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_GREEN, - .size = 153, - .maxYield = YIELD_RATE(2, 5, 5, 7), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("So strong, it was abandoned at the"), - .description2 = COMPOUND_STRING("world's edge. Considered a mirage."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 120, 48, 72), - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 30, - .drainRate = 4, - .waterBonus = 1, - .weedsBonus = 0, - .pestsBonus = 1, - }, - - [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Enigma"), - .firmness = BERRY_FIRMNESS_HARD, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_YELLOW, - .size = 155, - .maxYield = YIELD_RATE(2, 5, 5, 13), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("A completely enigmatic Berry."), - .description2 = COMPOUND_STRING("Appears to have the power of stars."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), - .spicy = 40, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 60, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 0, - }, - - [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Micle"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_GREEN, - .size = 41, - .maxYield = YIELD_RATE(2, 5, 5, 13), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("It makes other food eaten at the"), - .description2 = COMPOUND_STRING("same time taste sweet."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), - .spicy = 0, - .dry = 40, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 60, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 0, - }, - - [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Custap"), - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .color = BERRY_COLOR_RED, - .size = 267, - .maxYield = YIELD_RATE(2, 5, 5, 13), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("The flesh underneath the Custap"), - .description2 = COMPOUND_STRING("Berry's skin is sweet and creamy soft."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), - .spicy = 0, - .dry = 0, - .sweet = 40, - .bitter = 10, - .sour = 0, - .smoothness = 60, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 0, - }, - - [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Jaboca"), - .firmness = BERRY_FIRMNESS_SOFT, - .color = BERRY_COLOR_YELLOW, - .size = 33, - .maxYield = YIELD_RATE(2, 5, 5, 13), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("The drupelets that make up this berry"), - .description2 = COMPOUND_STRING("pop rythmically if handled roughly."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 40, - .sour = 10, - .smoothness = 60, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 0, - }, - - [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Rowap"), - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .color = BERRY_COLOR_BLUE, - .size = 52, - .maxYield = YIELD_RATE(2, 5, 5, 13), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("People once worked top-shaped pieces"), - .description2 = COMPOUND_STRING("of this berry free to use as toys."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 40, - .smoothness = 60, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 0, - }, - - [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Kee"), - .firmness = BERRY_FIRMNESS_UNKNOWN, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_YELLOW : BERRY_COLOR_PINK, - .size = 0, - .maxYield = YIELD_RATE(2, 5, 10, 13), - .minYield = YIELD_RATE(1, 1, 1, 2), - .description1 = COMPOUND_STRING("A berry that is incredibly spicy at"), - .description2 = COMPOUND_STRING("first, then extremely bitter."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), - .spicy = 30, - .dry = 30, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 60, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 2, - }, - - [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = - { - .name = _("Marnga"), // "Maranga" is too long - .firmness = BERRY_FIRMNESS_UNKNOWN, - .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_BLUE : BERRY_COLOR_YELLOW, - .size = 0, - .maxYield = YIELD_RATE(2, 5, 10, 13), - .minYield = YIELD_RATE(1, 1, 1, 2), - .description1 = COMPOUND_STRING("Its outside is very bitter, but its"), - .description2 = COMPOUND_STRING("inside tastes like a sweet drink."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), - .spicy = 10, - .dry = 10, - .sweet = 30, - .bitter = 30, - .sour = 10, - .smoothness = 60, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 2, - }, - - [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = - { - .name = _("Enigma"), - .firmness = BERRY_FIRMNESS_UNKNOWN, - .color = BERRY_COLOR_PURPLE, - .size = 0, - .maxYield = YIELD_RATE(2, 5, 5, 13), - .minYield = YIELD_RATE(1, 1, 1, 1), - .description1 = COMPOUND_STRING("A completely enigmatic Berry."), - .description2 = COMPOUND_STRING("Appears to have the power of stars."), - .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), - .spicy = 40, - .dry = 40, - .sweet = 40, - .bitter = 40, - .sour = 40, - .smoothness = 40, - .drainRate = 7, - .waterBonus = 2, - .weedsBonus = 0, - .pestsBonus = 0, - }, -}; - -const struct BerryCrushBerryData gBerryCrush_BerryData[] = { - [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150}, - [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, - [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, - [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, - [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 30}, - [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, - [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, - [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 50}, - [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, - [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, - [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, - [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, - [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200}, - [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 250}, - [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, - [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 250}, - [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 250}, - [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 500}, - [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 500}, - [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200} + [BERRY_ID_NONE] = { + .info = { + .name = _("?????"), + .description1 = COMPOUND_STRING("????????"), + .description2 = COMPOUND_STRING("????????"), + }, + .berryPic = gBerryPic_Enigma, + .berryPal = gBerryPalette_Enigma, + .berryTreePicTable = gPicTable_DurinBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Durin, + }, + [BERRY_ID_CHERI] = + { + .info = { + .name = _("Cheri"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_RED, + .size = 20, + .maxYield = YIELD_RATE(3, 5, 15, 20), + .minYield = YIELD_RATE(2, 2, 4, 4), + .description1 = COMPOUND_STRING("Blooms with delicate pretty flowers."), + .description2 = COMPOUND_STRING("The bright red Berry is very spicy."), + .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + .drainRate = 15, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_FIRE, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 20, + .berryPic = gBerryPic_Cheri, + .berryPal = gBerryPalette_Cheri, + .berryTreePicTable = gPicTable_CheriBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Cheri, + }, + + [BERRY_ID_CHESTO] = + { + .info = { + .name = _("Chesto"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, + .size = 80, + .maxYield = YIELD_RATE(3, 5, 15, 20), + .minYield = YIELD_RATE(2, 2, 4, 4), + .description1 = COMPOUND_STRING("The Berry's thick skin and fruit are"), + .description2 = COMPOUND_STRING("very tough. It is dry-tasting all over."), + .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + .drainRate = 15, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_WATER, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 20, + .berryPic = gBerryPic_Chesto, + .berryPal = gBerryPalette_Chesto, + .berryTreePicTable = gPicTable_ChestoBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Chesto, + }, + + [BERRY_ID_PECHA] = + { + .info = { + .name = _("Pecha"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = BERRY_COLOR_PINK, + .size = 40, + .maxYield = YIELD_RATE(3, 5, 15, 20), + .minYield = YIELD_RATE(2, 2, 4, 4), + .description1 = COMPOUND_STRING("Very sweet and delicious."), + .description2 = COMPOUND_STRING("Also very tender - handle with care."), + .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 25, + .drainRate = 15, + .waterBonus = 10, + .weedsBonus = 4, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_ELECTRIC, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 20, + .berryPic = gBerryPic_Pecha, + .berryPal = gBerryPalette_Pecha, + .berryTreePicTable = gPicTable_PechaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Pecha, + }, + + [BERRY_ID_RAWST] = + { + .info = { + .name = _("Rawst"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_GREEN, + .size = 32, + .maxYield = YIELD_RATE(3, 5, 15, 20), + .minYield = YIELD_RATE(2, 2, 4, 4), + .description1 = COMPOUND_STRING("If the leaves grow long and curly,"), + .description2 = COMPOUND_STRING("the Berry seems to grow very bitter."), + .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 25, + .drainRate = 15, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_GRASS, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 20, + .berryPic = gBerryPic_Rawst, + .berryPal = gBerryPalette_Rawst, + .berryTreePicTable = gPicTable_RawstBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Rawst, + }, + + [BERRY_ID_ASPEAR] = + { + .info = { + .name = _("Aspear"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_YELLOW, + .size = 50, + .maxYield = YIELD_RATE(3, 5, 15, 20), + .minYield = YIELD_RATE(2, 2, 4, 4), + .description1 = COMPOUND_STRING("The hard Berry is dense with a rich"), + .description2 = COMPOUND_STRING("juice. It is quite sour."), + .growthDuration = GROWTH_DURATION(12, 12, 18, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 25, + .drainRate = 15, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_ICE, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 20, + .berryPic = gBerryPic_Aspear, + .berryPal = gBerryPalette_Aspear, + .berryTreePicTable = gPicTable_AspearBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Aspear, + }, + + [BERRY_ID_LEPPA] = + { + .info = { + .name = _("Leppa"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_RED, + .size = 28, + .maxYield = YIELD_RATE(3, 5, 15, 22), + .minYield = YIELD_RATE(2, 2, 2, 2), + .description1 = COMPOUND_STRING("Grows slower than Cheri and others."), + .description2 = COMPOUND_STRING("The smaller the Berry, the tastier."), + .growthDuration = GROWTH_DURATION(16, 16, 24, 24, 16, 24), + .spicy = 10, + .dry = 0, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + .drainRate = 15, + .waterBonus = 15, + .weedsBonus = 3, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_FIGHTING, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Leppa, + .berryPal = gBerryPalette_Leppa, + .berryTreePicTable = gPicTable_LeppaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Leppa, + }, + + [BERRY_ID_ORAN] = + { + .info = { + .name = _("Oran"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_BLUE, + .size = 35, + .maxYield = YIELD_RATE(3, 5, 15, 20), + .minYield = YIELD_RATE(2, 2, 4, 4), + .description1 = COMPOUND_STRING("A peculiar Berry with a mix of flavors."), + .description2 = COMPOUND_STRING("Berries grow in half a day."), + .growthDuration = GROWTH_DURATION(12, 16, 24, 24, 16, 24), + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + .drainRate = 15, + .waterBonus = 10, + .weedsBonus = 4, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_POISON, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Oran, + .berryPal = gBerryPalette_Oran, + .berryTreePicTable = gPicTable_OranBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Oran, + }, + + [BERRY_ID_PERSIM] = + { + .info = { + .name = _("Persim"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_PINK, + .size = 47, + .maxYield = YIELD_RATE(3, 5, 15, 20), + .minYield = YIELD_RATE(2, 2, 4, 4), + .description1 = COMPOUND_STRING("Loves sunlight. The Berry's color"), + .description2 = COMPOUND_STRING("grows vivid when exposed to the sun."), + .growthDuration = GROWTH_DURATION(12, 16, 24, 24, 16, 24), + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + .drainRate = 15, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_GROUND, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Persim, + .berryPal = gBerryPalette_Persim, + .berryTreePicTable = gPicTable_PersimBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Persim, + }, + + [BERRY_ID_LUM] = + { + .info = { + .name = _("Lum"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_GREEN, + .size = 34, + .maxYield = YIELD_RATE(2, 5, 20, 18), + .minYield = YIELD_RATE(1, 2, 3, 2), + .description1 = COMPOUND_STRING("Slow to grow. If raised with loving"), + .description2 = COMPOUND_STRING("care, it may grow two Berries."), + .growthDuration = GROWTH_DURATION(48, 48, 72, 48, 32, 48), + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + .drainRate = 8, + .waterBonus = 12, + .weedsBonus = 1, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_FLYING, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Lum, + .berryPal = gBerryPalette_Lum, + .berryTreePicTable = gPicTable_LumBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Lum, + }, + + [BERRY_ID_SITRUS] = + { + .info = { + .name = _("Sitrus"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_YELLOW, + .size = 95, + .maxYield = YIELD_RATE(3, 5, 20, 27), + .minYield = YIELD_RATE(2, 2, 3, 3), + .description1 = COMPOUND_STRING("Closely related to Oran. The large"), + .description2 = COMPOUND_STRING("Berry has a well-rounded flavor."), + .growthDuration = GROWTH_DURATION(24, 32, 48, 48, 32, 48), + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + .drainRate = 7, + .waterBonus = 12, + .weedsBonus = 1, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_PSYCHIC, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Sitrus, + .berryPal = gBerryPalette_Sitrus, + .berryTreePicTable = gPicTable_SitrusBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Sitrus, + }, + + [BERRY_ID_FIGY] = + { + .info = { + .name = _("Figy"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_RED, + .size = 100, + .maxYield = YIELD_RATE(3, 5, 15, 15), + .minYield = YIELD_RATE(2, 1, 3, 3), + .description1 = COMPOUND_STRING("The Berry, which looks chewed up,"), + .description2 = COMPOUND_STRING("brims with spicy substances."), + .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + .drainRate = 10, + .waterBonus = 15, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_BUG, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Figy, + .berryPal = gBerryPalette_Figy, + .berryTreePicTable = gPicTable_FigyBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Figy, + }, + + [BERRY_ID_WIKI] = + { + .info = { + .name = _("Wiki"), + .firmness = BERRY_FIRMNESS_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, + .size = 115, + .maxYield = YIELD_RATE(3, 5, 15, 15), + .minYield = YIELD_RATE(2, 1, 3, 3), + .description1 = COMPOUND_STRING("The Berry is said to have grown lumpy"), + .description2 = COMPOUND_STRING("to help Pokémon grip it."), + .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + .drainRate = 10, + .waterBonus = 15, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_ROCK, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Wiki, + .berryPal = gBerryPalette_Wiki, + .berryTreePicTable = gPicTable_WikiBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Wiki, + }, + + [BERRY_ID_MAGO] = + { + .info = { + .name = _("Mago"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_PINK, + .size = 126, + .maxYield = YIELD_RATE(3, 5, 15, 15), + .minYield = YIELD_RATE(2, 1, 3, 3), + .description1 = COMPOUND_STRING("The Berry turns curvy as it grows."), + .description2 = COMPOUND_STRING("The curvier, the sweeter and tastier."), + .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 25, + .drainRate = 10, + .waterBonus = 15, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_GHOST, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Mago, + .berryPal = gBerryPalette_Mago, + .berryTreePicTable = gPicTable_MagoBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Mago, + }, + + [BERRY_ID_AGUAV] = + { + .info = { + .name = _("Aguav"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_GREEN, + .size = 64, + .maxYield = YIELD_RATE(3, 5, 15, 15), + .minYield = YIELD_RATE(2, 1, 3, 3), + .description1 = COMPOUND_STRING("The flower is dainty. It is rare in its"), + .description2 = COMPOUND_STRING("ability to grow without light."), + .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 25, + .drainRate = 10, + .waterBonus = 15, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_DRAGON, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Aguav, + .berryPal = gBerryPalette_Aguav, + .berryTreePicTable = gPicTable_AguavBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Aguav, + }, + + [BERRY_ID_IAPAPA] = + { + .info = { + .name = _("Iapapa"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_YELLOW, + .size = 223, + .maxYield = YIELD_RATE(3, 5, 15, 15), + .minYield = YIELD_RATE(2, 1, 3, 3), + .description1 = COMPOUND_STRING("The Berry is very big and sour."), + .description2 = COMPOUND_STRING("It takes at least a day to grow."), + .growthDuration = GROWTH_DURATION(24, 20, 30, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 25, + .drainRate = 10, + .waterBonus = 15, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_DARK, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Iapapa, + .berryPal = gBerryPalette_Iapapa, + .berryTreePicTable = gPicTable_IapapaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Iapapa, + }, + + [BERRY_ID_RAZZ] = + { + .info = { + .name = _("Razz"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_RED, + .size = 120, + .maxYield = YIELD_RATE(6, 10, 15, 20), + .minYield = YIELD_RATE(3, 2, 3, 4), + .description1 = COMPOUND_STRING("The red Berry tastes slightly spicy."), + .description2 = COMPOUND_STRING("It grows quickly in just four hours."), + .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), + .spicy = 10, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 20, + .drainRate = 35, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_STEEL, + .naturalGiftPower = 80, + .berryCrushDifficulty = 80, + .berryCrushPowder = 70, + .berryPic = gBerryPic_Razz, + .berryPal = gBerryPalette_Razz, + .berryTreePicTable = gPicTable_RazzBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Razz, + }, + + [BERRY_ID_BLUK] = + { + .info = { + .name = _("Bluk"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, + .size = 108, + .maxYield = YIELD_RATE(6, 10, 15, 20), + .minYield = YIELD_RATE(3, 2, 3, 4), + .description1 = COMPOUND_STRING("The Berry is blue on the outside, but"), + .description2 = COMPOUND_STRING("it blackens the mouth when eaten."), + .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), + .spicy = 0, + .dry = 10, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 20, + .drainRate = 35, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_FIRE, + .naturalGiftPower = 90, + .berryCrushDifficulty = 80, + .berryCrushPowder = 70, + .berryPic = gBerryPic_Bluk, + .berryPal = gBerryPalette_Bluk, + .berryTreePicTable = gPicTable_RazzBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Razz, + }, + + [BERRY_ID_NANAB] = + { + .info = { + .name = _("Nanab"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_PINK, + .size = 77, + .maxYield = YIELD_RATE(6, 10, 15, 20), + .minYield = YIELD_RATE(3, 2, 3, 4), + .description1 = COMPOUND_STRING("This Berry was the seventh"), + .description2 = COMPOUND_STRING("discovered in the world. It is sweet."), + .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 10, + .sour = 0, + .smoothness = 20, + .drainRate = 35, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_WATER, + .naturalGiftPower = 90, + .berryCrushDifficulty = 80, + .berryCrushPowder = 70, + .berryPic = gBerryPic_Nanab, + .berryPal = gBerryPalette_Nanab, + .berryTreePicTable = gPicTable_MagoBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Mago, + }, + + [BERRY_ID_WEPEAR] = + { + .info = { + .name = _("Wepear"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_GREEN, + .size = 74, + .maxYield = YIELD_RATE(6, 10, 15, 20), + .minYield = YIELD_RATE(3, 2, 3, 4), + .description1 = COMPOUND_STRING("The flower is small and white. It has a"), + .description2 = COMPOUND_STRING("delicate balance of bitter and sour."), + .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 10, + .smoothness = 20, + .drainRate = 35, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_ELECTRIC, + .naturalGiftPower = 90, + .berryCrushDifficulty = 80, + .berryCrushPowder = 70, + .berryPic = gBerryPic_Wepear, + .berryPal = gBerryPalette_Wepear, + .berryTreePicTable = gPicTable_WepearBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Wepear, + }, + + [BERRY_ID_PINAP] = + { + .info = { + .name = _("Pinap"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_YELLOW, + .size = 80, + .maxYield = YIELD_RATE(6, 10, 15, 20), + .minYield = YIELD_RATE(3, 2, 3, 4), + .description1 = COMPOUND_STRING("Weak against wind and cold."), + .description2 = COMPOUND_STRING("The fruit is spicy and the skin, sour."), + .growthDuration = GROWTH_DURATION(4, 8, 12, 24, 16, 24), + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 20, + .drainRate = 35, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_GRASS, + .naturalGiftPower = 90, + .berryCrushDifficulty = 80, + .berryCrushPowder = 70, + .berryPic = gBerryPic_Pinap, + .berryPal = gBerryPalette_Pinap, + .berryTreePicTable = gPicTable_IapapaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Iapapa, + }, + + [BERRY_ID_POMEG] = + { + .info = { + .name = _("Pomeg"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_RED, + .size = 135, + .maxYield = YIELD_RATE(6, 5, 20, 26), + .minYield = YIELD_RATE(2, 1, 1, 2), + .description1 = COMPOUND_STRING("However much it is watered,"), + .description2 = COMPOUND_STRING("it only grows up to six Berries."), + .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), + .spicy = 10, + .dry = 0, + .sweet = 10, + .bitter = 10, + .sour = 0, + .smoothness = 20, + .drainRate = 8, + .waterBonus = 5, + .weedsBonus = 3, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_ICE, + .naturalGiftPower = 90, + .berryCrushDifficulty = 100, + .berryCrushPowder = 100, + .berryPic = gBerryPic_Pomeg, + .berryPal = gBerryPalette_Pomeg, + .berryTreePicTable = gPicTable_PomegBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Pomeg, + }, + + [BERRY_ID_KELPSY] = + { + .info = { + .name = _("Kelpsy"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_BLUE, + .size = 150, + .maxYield = YIELD_RATE(6, 5, 20, 26), + .minYield = YIELD_RATE(2, 1, 1, 2), + .description1 = COMPOUND_STRING("A rare variety shaped like a root."), + .description2 = COMPOUND_STRING("Grows a very large flower."), + .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 10, + .sour = 10, + .smoothness = 20, + .drainRate = 8, + .waterBonus = 5, + .weedsBonus = 3, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_FIGHTING, + .naturalGiftPower = 90, + .berryCrushDifficulty = 100, + .berryCrushPowder = 100, + .berryPic = gBerryPic_Kelpsy, + .berryPal = gBerryPalette_Kelpsy, + .berryTreePicTable = gPicTable_KelpsyBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Kelpsy, + }, + + [BERRY_ID_QUALOT] = + { + .info = { + .name = _("Qualot"), + .firmness = BERRY_FIRMNESS_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_YELLOW : BERRY_COLOR_PINK, + .size = 110, + .maxYield = YIELD_RATE(6, 5, 20, 26), + .minYield = YIELD_RATE(2, 1, 1, 2), + .description1 = COMPOUND_STRING("Loves water. Grows strong even in"), + .description2 = COMPOUND_STRING("locations with constant rainfall."), + .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), + .spicy = 10, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 10, + .smoothness = 20, + .drainRate = 8, + .waterBonus = 5, + .weedsBonus = 3, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_POISON, + .naturalGiftPower = 90, + .berryCrushDifficulty = 100, + .berryCrushPowder = 100, + .berryPic = gBerryPic_Qualot, + .berryPal = gBerryPalette_Qualot, + .berryTreePicTable = gPicTable_WepearBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Wepear, + }, + + [BERRY_ID_HONDEW] = + { + .info = { + .name = _("Hondew"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_GREEN, + .size = 162, + .maxYield = YIELD_RATE(6, 5, 20, 26), + .minYield = YIELD_RATE(2, 1, 1, 2), + .description1 = COMPOUND_STRING("A Berry that is very valuable and"), + .description2 = COMPOUND_STRING("rarely seen. It is very delicious."), + .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), + .spicy = 10, + .dry = 10, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 20, + .drainRate = 8, + .waterBonus = 5, + .weedsBonus = 3, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_GROUND, + .naturalGiftPower = 90, + .berryCrushDifficulty = 100, + .berryCrushPowder = 100, + .berryPic = gBerryPic_Hondew, + .berryPal = gBerryPalette_Hondew, + .berryTreePicTable = gPicTable_HondewBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Hondew, + }, + + [BERRY_ID_GREPA] = + { + .info = { + .name = _("Grepa"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_YELLOW, + .size = 149, + .maxYield = YIELD_RATE(6, 5, 20, 26), + .minYield = YIELD_RATE(2, 1, 1, 2), + .description1 = COMPOUND_STRING("Despite its tenderness and round"), + .description2 = COMPOUND_STRING("shape, the Berry is unimaginably sour."), + .growthDuration = GROWTH_DURATION(12, 32, 48, 48, 32, 48), + .spicy = 0, + .dry = 10, + .sweet = 10, + .bitter = 0, + .sour = 10, + .smoothness = 20, + .drainRate = 8, + .waterBonus = 5, + .weedsBonus = 3, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_FLYING, + .naturalGiftPower = 90, + .berryCrushDifficulty = 100, + .berryCrushPowder = 100, + .berryPic = gBerryPic_Grepa, + .berryPal = gBerryPalette_Grepa, + .berryTreePicTable = gPicTable_GrepaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Grepa, + }, + + [BERRY_ID_TAMATO] = + { + .info = { + .name = _("Tamato"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_RED, + .size = 200, + .maxYield = YIELD_RATE(4, 5, 20, 26), + .minYield = YIELD_RATE(2, 1, 1, 2), + .description1 = COMPOUND_STRING("The Berry is lip-bendingly spicy."), + .description2 = COMPOUND_STRING("It takes time to grow."), + .growthDuration = GROWTH_DURATION(24, 32, 48, 48, 32, 48), + .spicy = 20, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 30, + .drainRate = 8, + .waterBonus = 5, + .weedsBonus = 3, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_PSYCHIC, + .naturalGiftPower = 90, + .berryCrushDifficulty = 130, + .berryCrushPowder = 150, + .berryPic = gBerryPic_Tamato, + .berryPal = gBerryPalette_Tamato, + .berryTreePicTable = gPicTable_TamatoBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Tamato, + }, + + [BERRY_ID_CORNN] = + { + .info = { + .name = _("Cornn"), + .firmness = BERRY_FIRMNESS_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, + .size = 75, + .maxYield = YIELD_RATE(4, 10, 15, 15), + .minYield = YIELD_RATE(2, 2, 3, 3), + .description1 = COMPOUND_STRING("A Berry from an ancient era. May not"), + .description2 = COMPOUND_STRING("grow unless planted in quantity."), + .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), + .spicy = 0, + .dry = 20, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 30, + .drainRate = 10, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_BUG, + .naturalGiftPower = 90, + .berryCrushDifficulty = 130, + .berryCrushPowder = 150, + .berryPic = gBerryPic_Cornn, + .berryPal = gBerryPalette_Cornn, + .berryTreePicTable = gPicTable_CornnBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Cornn, + }, + + [BERRY_ID_MAGOST] = + { + .info = { + .name = _("Magost"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_PINK, + .size = 140, + .maxYield = YIELD_RATE(4, 10, 15, 15), + .minYield = YIELD_RATE(2, 2, 3, 3), + .description1 = COMPOUND_STRING("A Berry that is widely said to have"), + .description2 = COMPOUND_STRING("a finely balanced flavor."), + .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 20, + .bitter = 10, + .sour = 0, + .smoothness = 30, + .drainRate = 10, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_ROCK, + .naturalGiftPower = 90, + .berryCrushDifficulty = 130, + .berryCrushPowder = 150, + .berryPic = gBerryPic_Magost, + .berryPal = gBerryPalette_Magost, + .berryTreePicTable = gPicTable_PomegBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Pomeg, + }, + + [BERRY_ID_RABUTA] = + { + .info = { + .name = _("Rabuta"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_GREEN, + .size = 226, + .maxYield = YIELD_RATE(4, 10, 15, 15), + .minYield = YIELD_RATE(2, 2, 3, 3), + .description1 = COMPOUND_STRING("A rare variety that is overgrown with"), + .description2 = COMPOUND_STRING("hair. It is quite bitter."), + .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 20, + .sour = 10, + .smoothness = 30, + .drainRate = 10, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_GHOST, + .naturalGiftPower = 90, + .berryCrushDifficulty = 130, + .berryCrushPowder = 150, + .berryPic = gBerryPic_Rabuta, + .berryPal = gBerryPalette_Rabuta, + .berryTreePicTable = gPicTable_RabutaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Rabuta, + }, + + [BERRY_ID_NOMEL] = + { + .info = { + .name = _("Nomel"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_YELLOW, + .size = 285, + .maxYield = YIELD_RATE(4, 10, 15, 15), + .minYield = YIELD_RATE(2, 2, 3, 3), + .description1 = COMPOUND_STRING("Quite sour. Just one bite makes it"), + .description2 = COMPOUND_STRING("impossible to taste for three days."), + .growthDuration = GROWTH_DURATION(24, 24, 36, 24, 16, 24), + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 20, + .smoothness = 30, + .drainRate = 10, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_DRAGON, + .naturalGiftPower = 90, + .berryCrushDifficulty = 130, + .berryCrushPowder = 150, + .berryPic = gBerryPic_Nomel, + .berryPal = gBerryPalette_Nomel, + .berryTreePicTable = gPicTable_NomelBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Nomel, + }, + + [BERRY_ID_SPELON] = + { + .info = { + .name = _("Spelon"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_RED : BERRY_COLOR_PINK, + .size = 133, + .maxYield = YIELD_RATE(2, 15, 15, 15), + .minYield = YIELD_RATE(1, 2, 3, 3), + .description1 = COMPOUND_STRING("The vividly red Berry is very spicy."), + .description2 = COMPOUND_STRING("Its warts secrete a spicy substance."), + .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), + .spicy = 40, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 70, + .drainRate = 8, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_DARK, + .naturalGiftPower = 90, + .berryCrushDifficulty = 160, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Spelon, + .berryPal = gBerryPalette_Spelon, + .berryTreePicTable = gPicTable_SpelonBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Spelon, + }, + + [BERRY_ID_PAMTRE] = + { + .info = { + .name = _("Pamtre"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, + .size = 244, + .maxYield = YIELD_RATE(2, 15, 15, 15), + .minYield = YIELD_RATE(1, 3, 3, 3), + .description1 = COMPOUND_STRING("Drifts on the sea from somewhere."), + .description2 = COMPOUND_STRING("It is thought to grow elsewhere."), + .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), + .spicy = 0, + .dry = 40, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 70, + .drainRate = 8, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_STEEL, + .naturalGiftPower = 90, + .berryCrushDifficulty = 160, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Pamtre, + .berryPal = gBerryPalette_Pamtre, + .berryTreePicTable = gPicTable_PamtreBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Pamtre, + }, + + [BERRY_ID_WATMEL] = + { + .info = { + .name = _("Watmel"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PINK : BERRY_COLOR_GREEN, + .size = 250, + .maxYield = YIELD_RATE(2, 15, 15, 15), + .minYield = YIELD_RATE(1, 2, 3, 3), + .description1 = COMPOUND_STRING("A huge Berry, with some over 20"), + .description2 = COMPOUND_STRING("inches discovered. Exceedingly sweet."), + .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 40, + .bitter = 10, + .sour = 0, + .smoothness = 70, + .drainRate = 8, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_FIRE, + .naturalGiftPower = 100, + .berryCrushDifficulty = 160, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Watmel, + .berryPal = gBerryPalette_Watmel, + .berryTreePicTable = gPicTable_RabutaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Rabuta, + }, + + [BERRY_ID_DURIN] = + { + .info = { + .name = _("Durin"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_GREEN, + .size = 280, + .maxYield = YIELD_RATE(2, 15, 15, 15), + .minYield = YIELD_RATE(1, 3, 3, 3), + .description1 = COMPOUND_STRING("Bitter to even look at. It is so"), + .description2 = COMPOUND_STRING("bitter, no one has ever eaten it as is."), + .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 40, + .sour = 10, + .smoothness = 70, + .drainRate = 8, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_WATER, + .naturalGiftPower = 100, + .berryCrushDifficulty = 160, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Durin, + .berryPal = gBerryPalette_Durin, + .berryTreePicTable = gPicTable_DurinBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Durin, + }, + + [BERRY_ID_BELUE] = + { + .info = { + .name = _("Belue"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, + .size = 300, + .maxYield = YIELD_RATE(2, 15, 15, 15), + .minYield = YIELD_RATE(1, 2, 3, 3), + .description1 = COMPOUND_STRING("It is glossy and looks delicious, but"), + .description2 = COMPOUND_STRING("it is awfully sour. Takes time to grow."), + .growthDuration = GROWTH_DURATION(72, 60, 90, 24, 16, 24), + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 40, + .smoothness = 70, + .drainRate = 8, + .waterBonus = 10, + .weedsBonus = 2, + .pestsBonus = 6, + }, + .naturalGiftType = TYPE_ELECTRIC, + .naturalGiftPower = 100, + .berryCrushDifficulty = 160, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Belue, + .berryPal = gBerryPalette_Belue, + .berryTreePicTable = gPicTable_HondewBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Hondew, + }, + + [BERRY_ID_OCCA] = + { + .info = { + .name = _("Occa"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_RED, + .size = 90, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Said to grow in the tropics once,"), + .description2 = COMPOUND_STRING("it boasts an intensely hot spiciness."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 15, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_FIRE, + .naturalGiftPower = 80, + .berryCrushDifficulty = 100, + .berryCrushPowder = 100, + .berryPic = gBerryPic_Occa, + .berryPal = gBerryPalette_Occa, + .berryTreePicTable = gPicTable_OccaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Occa, + }, + + [BERRY_ID_PASSHO] = + { + .info = { + .name = _("Passho"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_BLUE, + .size = 33, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Its flesh is dotted with many tiny"), + .description2 = COMPOUND_STRING("bubbles that keep it afloat in water."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 15, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_WATER, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Passho, + .berryPal = gBerryPalette_Passho, + .berryTreePicTable = gPicTable_CornnBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Cornn, + }, + + [BERRY_ID_WACAN] = + { + .info = { + .name = _("Wacan"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = BERRY_COLOR_YELLOW, + .size = 250, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Energy drawn from lightning strikes"), + .description2 = COMPOUND_STRING("makes this Berry grow big and rich."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 0, + .sweet = 15, + .bitter = 0, + .sour = 10, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_ELECTRIC, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Wacan, + .berryPal = gBerryPalette_Wacan, + .berryTreePicTable = gPicTable_RazzBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Razz, + }, + + [BERRY_ID_RINDO] = + { + .info = { + .name = _("Rindo"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_GREEN, + .size = 156, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("This berry has a vegetable-like flavor,"), + .description2 = COMPOUND_STRING("but is rich in health-promoting fiber."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 15, + .sour = 0, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_GRASS, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Rindo, + .berryPal = gBerryPalette_Rindo, + .berryTreePicTable = gPicTable_TamatoBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Tamato, + }, + + [BERRY_ID_YACHE] = + { + .info = { + .name = _("Yache"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_BLUE, + .size = 135, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("This Berry has a refreshing dry and"), + .description2 = COMPOUND_STRING("sour flavor. Tastes better chilled."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 15, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_ICE, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Yache, + .berryPal = gBerryPalette_Yache, + .berryTreePicTable = gPicTable_YacheBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Yache, + }, + + [BERRY_ID_CHOPLE] = + { + .info = { + .name = _("Chople"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_RED, + .size = 77, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Contains a substance that generates"), + .description2 = COMPOUND_STRING("heat. Can even fire up a chilly heart."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 15, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_FIGHTING, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Chople, + .berryPal = gBerryPalette_Chople, + .berryTreePicTable = gPicTable_ChopleBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Chople, + }, + + [BERRY_ID_KEBIA] = + { + .info = { + .name = _("Kebia"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_GREEN, + .size = 90, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Brilliant green on the outside, inside"), + .description2 = COMPOUND_STRING("it is packed with black-colored flesh."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 15, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_POISON, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Kebia, + .berryPal = gBerryPalette_Kebia, + .berryTreePicTable = gPicTable_KebiaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Kebia, + }, + + [BERRY_ID_SHUCA] = + { + .info = { + .name = _("Shuca"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_YELLOW, + .size = 42, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("The sweet pulp has just the hint of a"), + .description2 = COMPOUND_STRING("a hard-edged and fragrant bite to it."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 10, + .dry = 0, + .sweet = 15, + .bitter = 0, + .sour = 0, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_GROUND, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 20, + .berryPic = gBerryPic_Shuca, + .berryPal = gBerryPalette_Shuca, + .berryTreePicTable = gPicTable_ShucaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Shuca, + }, + + [BERRY_ID_COBA] = + { + .info = { + .name = _("Coba"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_BLUE, + .size = 278, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("This Berry is said to be a cross of"), + .description2 = COMPOUND_STRING("two Berries blown in from far away."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 15, + .sour = 0, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_FLYING, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Coba, + .berryPal = gBerryPalette_Coba, + .berryTreePicTable = gPicTable_RawstBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Rawst, + }, + + [BERRY_ID_PAYAPA] = + { + .info = { + .name = _("Payapa"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_RED, + .size = 252, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Said to sense human emotions, it swells"), + .description2 = COMPOUND_STRING("roundly when a person approaches."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 15, + .smoothness = 30, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_PSYCHIC, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Payapa, + .berryPal = gBerryPalette_Payapa, + .berryTreePicTable = gPicTable_PayapaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Payapa, + }, + + [BERRY_ID_TANGA] = + { + .info = { + .name = _("Tanga"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = BERRY_COLOR_GREEN, + .size = 42, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("It grows a flower at the tip that lures"), + .description2 = COMPOUND_STRING("Bug Pokémon with its stringy petals."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 20, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_BUG, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Tanga, + .berryPal = gBerryPalette_Tanga, + .berryTreePicTable = gPicTable_TangaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Tanga, + }, + + [BERRY_ID_CHARTI] = + { + .info = { + .name = _("Charti"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = BERRY_COLOR_YELLOW, + .size = 28, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Often used for pickles because of its"), + .description2 = COMPOUND_STRING("dry flavor. Sometimes eaten raw."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 10, + .dry = 20, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_ROCK, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Charti, + .berryPal = gBerryPalette_Charti, + .berryTreePicTable = gPicTable_LansatBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Lansat, + }, + + [BERRY_ID_KASIB] = + { + .info = { + .name = _("Kasib"), + .firmness = BERRY_FIRMNESS_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_PINK, + .size = 144, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Old superstitions say it has an odd"), + .description2 = COMPOUND_STRING("power. A popular good-luck charm."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 10, + .sweet = 20, + .bitter = 0, + .sour = 0, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_GHOST, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Kasib, + .berryPal = gBerryPalette_Kasib, + .berryTreePicTable = gPicTable_KasibBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Kasib, + }, + + [BERRY_ID_HABAN] = + { + .info = { + .name = _("Haban"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_RED, + .size = 23, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Less bitter if enough of this Berry"), + .description2 = COMPOUND_STRING("is boiled down. Makes a good jam."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 20, + .sour = 0, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_DRAGON, + .naturalGiftPower = 80, + .berryCrushDifficulty = 50, + .berryCrushPowder = 30, + .berryPic = gBerryPic_Haban, + .berryPal = gBerryPalette_Haban, + .berryTreePicTable = gPicTable_HabanBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Haban, + }, + + [BERRY_ID_COLBUR] = + { + .info = { + .name = _("Colbur"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_PINK, + .size = 39, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Tiny hooks on the surface latch onto"), + .description2 = COMPOUND_STRING("Pokémon to reach far-off places."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 20, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_DARK, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Colbur, + .berryPal = gBerryPalette_Colbur, + .berryTreePicTable = gPicTable_ColburBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Colbur, + }, + + [BERRY_ID_BABIRI] = + { + .info = { + .name = _("Babiri"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_GREEN, + .size = 265, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("Very tough with a strong flavor. It"), + .description2 = COMPOUND_STRING("was used to make medicine in the past."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 25, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_STEEL, + .naturalGiftPower = 80, + .berryCrushDifficulty = 80, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Babiri, + .berryPal = gBerryPalette_Babiri, + .berryTreePicTable = gPicTable_LiechiBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Liechi, + }, + + [BERRY_ID_CHILAN] = + { + .info = { + .name = _("Chilan"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = BERRY_COLOR_YELLOW, + .size = 34, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("It can be made into a whistle that"), + .description2 = COMPOUND_STRING("produces an indescribable sound."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 25, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_NORMAL, + .naturalGiftPower = 80, + .berryCrushDifficulty = 80, + .berryCrushPowder = 70, + .berryPic = gBerryPic_Chilan, + .berryPal = gBerryPalette_Chilan, + .berryTreePicTable = gPicTable_GrepaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Grepa, + }, + + [BERRY_ID_LIECHI] = + { + .info = { + .name = _("Liechi"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_RED : BERRY_COLOR_YELLOW, + .size = 111, + .maxYield = YIELD_RATE(2, 5, 10, 13), + .minYield = YIELD_RATE(1, 1, 1, 2), + .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), + .description2 = COMPOUND_STRING("contain the power of the sea."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), + .spicy = 40, + .dry = 0, + .sweet = 40, + .bitter = 0, + .sour = 10, + .smoothness = 80, + .drainRate = 4, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 2, + }, + .naturalGiftType = TYPE_GRASS, + .naturalGiftPower = 100, + .berryCrushDifficulty = 180, + .berryCrushPowder = 500, + .berryPic = gBerryPic_Liechi, + .berryPal = gBerryPalette_Liechi, + .berryTreePicTable = gPicTable_LiechiBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Liechi, + }, + + [BERRY_ID_GANLON] = + { + .info = { + .name = _("Ganlon"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_BLUE, + .size = 33, + .maxYield = YIELD_RATE(2, 5, 10, 13), + .minYield = YIELD_RATE(1, 1, 1, 2), + .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), + .description2 = COMPOUND_STRING("contain the power of the land."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), + .spicy = 0, + .dry = 40, + .sweet = 0, + .bitter = 40, + .sour = 0, + .smoothness = 80, + .drainRate = 4, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 2, + }, + .naturalGiftType = TYPE_ICE, + .naturalGiftPower = 100, + .berryCrushDifficulty = 180, + .berryCrushPowder = 500, + .berryPic = gBerryPic_Ganlon, + .berryPal = gBerryPalette_Ganlon, + .berryTreePicTable = gPicTable_HondewBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Hondew, + }, + + [BERRY_ID_SALAC] = + { + .info = { + .name = _("Salac"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_GREEN, + .size = 95, + .maxYield = YIELD_RATE(2, 5, 10, 13), + .minYield = YIELD_RATE(1, 1, 1, 2), + .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), + .description2 = COMPOUND_STRING("contain the power of the sky."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), + .spicy = 0, + .dry = 0, + .sweet = 40, + .bitter = 0, + .sour = 40, + .smoothness = 80, + .drainRate = 4, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 2, + }, + .naturalGiftType = TYPE_FIGHTING, + .naturalGiftPower = 100, + .berryCrushDifficulty = 180, + .berryCrushPowder = 500, + .berryPic = gBerryPic_Salac, + .berryPal = gBerryPalette_Salac, + .berryTreePicTable = gPicTable_AguavBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Aguav, + }, + + [BERRY_ID_PETAYA] = + { + .info = { + .name = _("Petaya"), + .firmness = BERRY_FIRMNESS_VERY_HARD, + .color = BERRY_COLOR_PINK, + .size = 237, + .maxYield = YIELD_RATE(2, 5, 10, 13), + .minYield = YIELD_RATE(1, 1, 1, 2), + .description1 = COMPOUND_STRING("A mysterious Berry. It is rumored to"), + .description2 = COMPOUND_STRING("contain the power of all living things."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), + .spicy = 40, + .dry = 0, + .sweet = 0, + .bitter = 40, + .sour = 0, + .smoothness = 80, + .drainRate = 4, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 2, + }, + .naturalGiftType = TYPE_POISON, + .naturalGiftPower = 100, + .berryCrushDifficulty = 180, + .berryCrushPowder = 500, + .berryPic = gBerryPic_Petaya, + .berryPal = gBerryPalette_Petaya, + .berryTreePicTable = gPicTable_PomegBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Pomeg, + }, + + [BERRY_ID_APICOT] = + { + .info = { + .name = _("Apicot"), + .firmness = BERRY_FIRMNESS_HARD, + .color = BERRY_COLOR_BLUE, + .size = 75, + .maxYield = YIELD_RATE(2, 5, 10, 13), + .minYield = YIELD_RATE(1, 1, 1, 2), + .description1 = COMPOUND_STRING("A very mystifying Berry. No telling"), + .description2 = COMPOUND_STRING("what may happen or how it can be used."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), + .spicy = 0, + .dry = 40, + .sweet = 0, + .bitter = 0, + .sour = 40, + .smoothness = 80, + .drainRate = 4, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 2, + }, + .naturalGiftType = TYPE_GROUND, + .naturalGiftPower = 100, + .berryCrushDifficulty = 180, + .berryCrushPowder = 500, + .berryPic = gBerryPic_Apicot, + .berryPal = gBerryPalette_Apicot, + .berryTreePicTable = gPicTable_GrepaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Grepa, + }, + + [BERRY_ID_LANSAT] = + { + .info = { + .name = _("Lansat"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_RED : BERRY_COLOR_PINK, + .size = 97, + .maxYield = YIELD_RATE(2, 5, 5, 7), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("Said to be a legendary Berry."), + .description2 = COMPOUND_STRING("Holding it supposedly brings joy."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 120, 48, 72), + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 30, + .drainRate = 4, + .waterBonus = 1, + .weedsBonus = 0, + .pestsBonus = 1, + }, + .naturalGiftType = TYPE_FLYING, + .naturalGiftPower = 100, + .berryCrushDifficulty = 200, + .berryCrushPowder = 750, + .berryPic = gBerryPic_Lansat, + .berryPal = gBerryPalette_Lansat, + .berryTreePicTable = gPicTable_LansatBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Lansat, + }, + + [BERRY_ID_STARF] = + { + .info = { + .name = _("Starf"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_GREEN, + .size = 153, + .maxYield = YIELD_RATE(2, 5, 5, 7), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("So strong, it was abandoned at the"), + .description2 = COMPOUND_STRING("world's edge. Considered a mirage."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 120, 48, 72), + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 30, + .drainRate = 4, + .waterBonus = 1, + .weedsBonus = 0, + .pestsBonus = 1, + }, + .naturalGiftType = TYPE_PSYCHIC, + .naturalGiftPower = 100, + .berryCrushDifficulty = 200, + .berryCrushPowder = 750, + .berryPic = gBerryPic_Starf, + .berryPal = gBerryPalette_Starf, + .berryTreePicTable = gPicTable_CornnBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Cornn, + }, + + [BERRY_ID_ENIGMA] = + { + .info = { + .name = _("Enigma"), + .firmness = BERRY_FIRMNESS_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PURPLE : BERRY_COLOR_YELLOW, + .size = 155, + .maxYield = YIELD_RATE(2, 5, 5, 13), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("A completely enigmatic Berry."), + .description2 = COMPOUND_STRING("Appears to have the power of stars."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), + .spicy = 40, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 60, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 0, + }, + .naturalGiftType = TYPE_BUG, + .naturalGiftPower = 100, + .berryCrushDifficulty = 150, + .berryCrushPowder = 200, + .berryPic = gBerryPic_Enigma, + .berryPal = gBerryPalette_Enigma, + .berryTreePicTable = gPicTable_DurinBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Durin, + }, + + [BERRY_ID_MICLE] = + { + .info = { + .name = _("Micle"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_GREEN, + .size = 41, + .maxYield = YIELD_RATE(2, 5, 5, 13), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("It makes other food eaten at the"), + .description2 = COMPOUND_STRING("same time taste sweet."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), + .spicy = 0, + .dry = 40, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 60, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 0, + }, + .naturalGiftType = TYPE_ROCK, + .naturalGiftPower = 100, + .berryCrushDifficulty = 130, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Micle, + .berryPal = gBerryPalette_Micle, + .berryTreePicTable = gPicTable_MicleBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Micle, + }, + + [BERRY_ID_CUSTAP] = + { + .info = { + .name = _("Custap"), + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .color = BERRY_COLOR_RED, + .size = 267, + .maxYield = YIELD_RATE(2, 5, 5, 13), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("The flesh underneath the Custap"), + .description2 = COMPOUND_STRING("Berry's skin is sweet and creamy soft."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), + .spicy = 0, + .dry = 0, + .sweet = 40, + .bitter = 10, + .sour = 0, + .smoothness = 60, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 0, + }, + .naturalGiftType = TYPE_GHOST, + .naturalGiftPower = 100, + .berryCrushDifficulty = 200, + .berryCrushPowder = 750, + .berryPic = gBerryPic_Custap, + .berryPal = gBerryPalette_Custap, + .berryTreePicTable = gPicTable_CustapBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Custap, + }, + + [BERRY_ID_JABOCA] = + { + .info = { + .name = _("Jaboca"), + .firmness = BERRY_FIRMNESS_SOFT, + .color = BERRY_COLOR_YELLOW, + .size = 33, + .maxYield = YIELD_RATE(2, 5, 5, 13), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("The drupelets that make up this berry"), + .description2 = COMPOUND_STRING("pop rythmically if handled roughly."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 40, + .sour = 10, + .smoothness = 60, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 0, + }, + .naturalGiftType = TYPE_DRAGON, + .naturalGiftPower = 100, + .berryCrushDifficulty = 130, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Jaboca, + .berryPal = gBerryPalette_Jaboca, + .berryTreePicTable = gPicTable_JabocaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Jaboca, + }, + + [BERRY_ID_ROWAP] = + { + .info = { + .name = _("Rowap"), + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .color = BERRY_COLOR_BLUE, + .size = 52, + .maxYield = YIELD_RATE(2, 5, 5, 13), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("People once worked top-shaped pieces"), + .description2 = COMPOUND_STRING("of this berry free to use as toys."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 40, + .smoothness = 60, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 0, + }, + .naturalGiftType = TYPE_DARK, + .naturalGiftPower = 100, + .berryCrushDifficulty = 130, + .berryCrushPowder = 250, + .berryPic = gBerryPic_Rowap, + .berryPal = gBerryPalette_Rowap, + .berryTreePicTable = gPicTable_RowapBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Rowap, + }, + + [BERRY_ID_ROSELI] = + { + .info = { + .name = _("Roseli"), + .firmness = BERRY_FIRMNESS_HARD, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_PINK : BERRY_COLOR_RED, + .size = 35, + .maxYield = YIELD_RATE(5, 5, 20, 10), + .minYield = YIELD_RATE(2, 1, 3, 2), + .description1 = COMPOUND_STRING("In nature, they grow in wide rings"), + .description2 = COMPOUND_STRING("for reasons that are still unknown."), + .growthDuration = GROWTH_DURATION(84, 72, 108, 48, 32, 48), + .spicy = 0, + .dry = 0, + .sweet = 25, + .bitter = 10, + .sour = 0, + .smoothness = 35, + .drainRate = 6, + .waterBonus = 10, + .weedsBonus = 1, + .pestsBonus = 4, + }, + .naturalGiftType = TYPE_FAIRY, + .naturalGiftPower = 80, + .berryCrushDifficulty = 60, + .berryCrushPowder = 50, + .berryPic = gBerryPic_Roseli, + .berryPal = gBerryPalette_Roseli, + .berryTreePicTable = gPicTable_RoseliBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Roseli, + }, + + [BERRY_ID_KEE] = + { + .info = { + .name = _("Kee"), + .firmness = BERRY_FIRMNESS_UNKNOWN, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_YELLOW : BERRY_COLOR_PINK, + .size = 0, + .maxYield = YIELD_RATE(2, 5, 10, 13), + .minYield = YIELD_RATE(1, 1, 1, 2), + .description1 = COMPOUND_STRING("A berry that is incredibly spicy at"), + .description2 = COMPOUND_STRING("first, then extremely bitter."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), + .spicy = 30, + .dry = 30, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 60, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 2, + }, + .naturalGiftType = TYPE_FAIRY, + .naturalGiftPower = 100, + .berryCrushDifficulty = 160, + .berryCrushPowder = 500, + .berryPic = gBerryPic_Kee, + .berryPal = gBerryPalette_Kee, + .berryTreePicTable = gPicTable_PechaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Pecha, + }, + + [BERRY_ID_MARANGA] = + { + .info = { + .name = _("Marnga"), // "Maranga" is too long + .firmness = BERRY_FIRMNESS_UNKNOWN, + .color = OW_BERRY_COLORS == GEN_6_XY ? BERRY_COLOR_BLUE : BERRY_COLOR_YELLOW, + .size = 0, + .maxYield = YIELD_RATE(2, 5, 10, 13), + .minYield = YIELD_RATE(1, 1, 1, 2), + .description1 = COMPOUND_STRING("Its outside is very bitter, but its"), + .description2 = COMPOUND_STRING("inside tastes like a sweet drink."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 96, 48, 72), + .spicy = 10, + .dry = 10, + .sweet = 30, + .bitter = 30, + .sour = 10, + .smoothness = 60, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 2, + }, + .naturalGiftType = TYPE_DARK, + .naturalGiftPower = 100, + .berryCrushDifficulty = 160, + .berryCrushPowder = 500, + .berryPic = gBerryPic_Maranga, + .berryPal = gBerryPalette_Maranga, + .berryTreePicTable = gPicTable_OccaBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Occa, + }, + + [BERRY_ID_ENGIMA_E_READER] = + { + .info = { + .name = _("Enigma"), + .firmness = BERRY_FIRMNESS_UNKNOWN, + .color = BERRY_COLOR_PURPLE, + .size = 0, + .maxYield = YIELD_RATE(2, 5, 5, 13), + .minYield = YIELD_RATE(1, 1, 1, 1), + .description1 = COMPOUND_STRING("A completely enigmatic Berry."), + .description2 = COMPOUND_STRING("Appears to have the power of stars."), + .growthDuration = GROWTH_DURATION(96, 96, 144, 72, 48, 72), + .spicy = 40, + .dry = 40, + .sweet = 40, + .bitter = 40, + .sour = 40, + .smoothness = 40, + .drainRate = 7, + .waterBonus = 2, + .weedsBonus = 0, + .pestsBonus = 0, + }, + .berryCrushDifficulty = 150, + .berryCrushPowder = 200, + .berryPic = gBerryPic_Enigma, + .berryPal = gBerryPalette_Enigma, + .berryTreePicTable = gPicTable_DurinBerryTree, + .berryTreePaletteSlotTable = gBerryTreePaletteSlotTable_Durin, + }, }; const struct BerryTree gBlankBerryTree = {}; @@ -1738,21 +2356,21 @@ bool32 IsEnigmaBerryValid(void) #endif //FREE_ENIGMA_BERRY } -const struct Berry *GetBerryInfo(u8 berry) +const struct BerryInfo *GetBerryInfo(enum BerryId berry) { - if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) && IsEnigmaBerryValid()) + if (berry == BERRY_ID_ENGIMA_E_READER && IsEnigmaBerryValid()) { #if FREE_ENIGMA_BERRY == FALSE - return (struct Berry *)(&gSaveBlock1Ptr->enigmaBerry.berry); + return (struct BerryInfo *)(&gSaveBlock1Ptr->enigmaBerry.berry); #else - return &gBerries[0]; //never reached, but will appease the compiler gods + return &gBerries[BERRY_ID_NONE].info; //never reached, but will appease the compiler gods #endif //FREE_ENIGMA_BERRY } else { - if (berry == BERRY_NONE || berry > ITEM_TO_BERRY(LAST_BERRY_INDEX)) - berry = ITEM_TO_BERRY(FIRST_BERRY_INDEX); - return &gBerries[berry - 1]; + if (berry == BERRY_ID_NONE || berry > NUM_BERRIES) + berry = 1; + return &gBerries[berry].info; } } @@ -1957,7 +2575,7 @@ 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) { struct BerryTree *tree = GetBerryTreeInfo(id); @@ -2008,26 +2626,6 @@ u8 GetMulchByBerryTreeId(u8 id) return gSaveBlock1Ptr->berryTrees[id].mulch; } -u8 ItemIdToBerryType(enum Item item) -{ - u16 berry = item - FIRST_BERRY_INDEX; - - if (berry > LAST_BERRY_INDEX - FIRST_BERRY_INDEX) - return ITEM_TO_BERRY(FIRST_BERRY_INDEX); - else - return ITEM_TO_BERRY(item); -} - -static enum Item BerryTypeToItemId(u16 berry) -{ - enum Item item = berry - 1; - - if (item > LAST_BERRY_INDEX - FIRST_BERRY_INDEX) - return FIRST_BERRY_INDEX; - else - return berry + FIRST_BERRY_INDEX - 1; -} - void GetBerryNameByBerryType(u8 berry, u8 *string) { memcpy(string, GetBerryInfo(berry)->name, BERRY_NAME_LENGTH); @@ -2090,14 +2688,14 @@ static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) static u8 CalcBerryYield(struct BerryTree *tree) { - const struct Berry *berry = GetBerryInfo(tree->berry); + const struct BerryInfo *berryInfo = GetBerryInfo(tree->berry); u8 min = tree->berryYield; - u8 max = berry->maxYield; + u8 max = berryInfo->maxYield; u8 result; if (OW_BERRY_MULCH_USAGE && (tree->mulch == ITEM_TO_MULCH(ITEM_RICH_MULCH) || tree->mulch == ITEM_TO_MULCH(ITEM_AMAZE_MULCH))) min += 2; if (!(OW_BERRY_MOISTURE && OW_BERRY_ALWAYS_WATERABLE)) - min += berry->minYield; + min += berryInfo->minYield; if (min >= max) result = max; else @@ -2197,12 +2795,12 @@ void ObjectEventInteractionGetBerryCountString(void) count = 1; gSpecialVar_0x8006 = BerryTypeToItemId(berry); - CopyItemNameHandlePlural(BerryTypeToItemId(berry), gStringVar1, count); + CopyItemNameHandlePlural(gSpecialVar_0x8006, gStringVar1, count); berry = GetTreeMutationValue(treeId); if (berry > 0) { count = 1; - CopyItemNameHandlePlural(BerryTypeToItemId(berry), gStringVar3, count); + CopyItemNameHandlePlural(gSpecialVar_0x8006, gStringVar3, count); gSpecialVar_Result = TRUE; } else @@ -2221,9 +2819,7 @@ void Bag_ChooseMulch(void) void ObjectEventInteractionPlantBerryTree(void) { - u8 berry = ItemIdToBerryType(gSpecialVar_ItemId); - - PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, BERRY_STAGE_PLANTED, TRUE); + PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), ItemIdToBerryType(gSpecialVar_ItemId), BERRY_STAGE_PLANTED, TRUE); ObjectEventInteractionGetBerryTreeData(); } @@ -2351,19 +2947,20 @@ bool8 PlayerHasMulch(void) #if OW_BERRY_MUTATIONS == TRUE static const u8 sBerryMutations[][3] = { - {ITEM_TO_BERRY(ITEM_IAPAPA_BERRY), ITEM_TO_BERRY(ITEM_MAGO_BERRY), ITEM_TO_BERRY(ITEM_POMEG_BERRY)}, - {ITEM_TO_BERRY(ITEM_CHESTO_BERRY), ITEM_TO_BERRY(ITEM_PERSIM_BERRY), ITEM_TO_BERRY(ITEM_KELPSY_BERRY)}, - {ITEM_TO_BERRY(ITEM_ORAN_BERRY), ITEM_TO_BERRY(ITEM_PECHA_BERRY), ITEM_TO_BERRY(ITEM_QUALOT_BERRY)}, - {ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), ITEM_TO_BERRY(ITEM_LEPPA_BERRY), ITEM_TO_BERRY(ITEM_HONDEW_BERRY)}, - {ITEM_TO_BERRY(ITEM_AGUAV_BERRY), ITEM_TO_BERRY(ITEM_FIGY_BERRY), ITEM_TO_BERRY(ITEM_GREPA_BERRY)}, - {ITEM_TO_BERRY(ITEM_LUM_BERRY), ITEM_TO_BERRY(ITEM_SITRUS_BERRY), ITEM_TO_BERRY(ITEM_TAMATO_BERRY)}, - {ITEM_TO_BERRY(ITEM_HONDEW_BERRY), ITEM_TO_BERRY(ITEM_YACHE_BERRY), ITEM_TO_BERRY(ITEM_LIECHI_BERRY)}, - {ITEM_TO_BERRY(ITEM_QUALOT_BERRY), ITEM_TO_BERRY(ITEM_TANGA_BERRY), ITEM_TO_BERRY(ITEM_GANLON_BERRY)}, - {ITEM_TO_BERRY(ITEM_GREPA_BERRY), ITEM_TO_BERRY(ITEM_ROSELI_BERRY), ITEM_TO_BERRY(ITEM_SALAC_BERRY)}, - {ITEM_TO_BERRY(ITEM_POMEG_BERRY), ITEM_TO_BERRY(ITEM_KASIB_BERRY), ITEM_TO_BERRY(ITEM_PETAYA_BERRY)}, - {ITEM_TO_BERRY(ITEM_KELPSY_BERRY), ITEM_TO_BERRY(ITEM_WACAN_BERRY), ITEM_TO_BERRY(ITEM_APICOT_BERRY)}, - {ITEM_TO_BERRY(ITEM_GANLON_BERRY), ITEM_TO_BERRY(ITEM_LIECHI_BERRY), ITEM_TO_BERRY(ITEM_KEE_BERRY)}, - {ITEM_TO_BERRY(ITEM_SALAC_BERRY), ITEM_TO_BERRY(ITEM_PETAYA_BERRY), ITEM_TO_BERRY(ITEM_MARANGA_BERRY)}, + {BERRY_ID_IAPAPA, BERRY_ID_MAGO, BERRY_ID_POMEG}, + {BERRY_ID_CHESTO, BERRY_ID_PERSIM, BERRY_ID_KELPSY}, + {BERRY_ID_ORAN, BERRY_ID_PECHA, BERRY_ID_QUALOT}, + {BERRY_ID_CHESTO, BERRY_ID_PERSIM, BERRY_ID_KELPSY}, + {BERRY_ID_ASPEAR, BERRY_ID_LEPPA, BERRY_ID_HONDEW}, + {BERRY_ID_AGUAV, BERRY_ID_FIGY, BERRY_ID_GREPA}, + {BERRY_ID_LUM, BERRY_ID_SITRUS, BERRY_ID_TAMATO}, + {BERRY_ID_HONDEW, BERRY_ID_YACHE, BERRY_ID_LIECHI}, + {BERRY_ID_QUALOT, BERRY_ID_TANGA, BERRY_ID_GANLON}, + {BERRY_ID_GREPA, BERRY_ID_ROSELI, BERRY_ID_SALAC}, + {BERRY_ID_POMEG, BERRY_ID_KASIB, BERRY_ID_PETAYA}, + {BERRY_ID_KELPSY, BERRY_ID_WACAN, BERRY_ID_APICOT}, + {BERRY_ID_GANLON, BERRY_ID_LIECHI, BERRY_ID_KEE}, + {BERRY_ID_SALAC, BERRY_ID_PETAYA, BERRY_ID_MARANGA}, // Up to one more Mutation can be added here for a total of 15 (only 4 bits are allocated) }; @@ -2466,8 +3063,8 @@ static void SetTreeMutations(u8 id, u8 berry) static enum Species GetBerryPestSpecies(u8 berryId) { #if OW_BERRY_PESTS == TRUE - const struct Berry *berry = GetBerryInfo(berryId); - switch (berry->color) + const struct BerryInfo *berryInfo = GetBerryInfo(berryId); + switch (berryInfo->color) { case BERRY_COLOR_RED: return P_FAMILY_LEDYBA ? SPECIES_LEDYBA : SPECIES_NONE; diff --git a/src/berry_blender.c b/src/berry_blender.c index 00257e4b34..f41fe0e2e6 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -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); diff --git a/src/berry_crush.c b/src/berry_crush.c index 3ff3a11b69..2b6ee1fdcb 100644 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -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; diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index b00cdbea0d..f11ec6bdce 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -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; diff --git a/src/data/object_events/berry_tree_graphics_tables.h b/src/data/object_events/berry_tree_graphics_tables.h index d2127199fd..6195ef9b01 100755 --- a/src/data/object_events/berry_tree_graphics_tables.h +++ b/src/data/object_events/berry_tree_graphics_tables.h @@ -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, -}; - diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index e74555718e..7a62ca8784 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -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 = { diff --git a/src/debug.c b/src/debug.c index cd11ca357c..ad427120d8 100644 --- a/src/debug.c +++ b/src/debug.c @@ -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); } diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 00e6643523..ac1f4a2e44 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -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) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 559510cfab..47b2dc308e 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -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); diff --git a/src/item.c b/src/item.c index 83f8b88fb4..4a4b6ba552 100644 --- a/src/item.c +++ b/src/item.c @@ -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) diff --git a/src/item_menu.c b/src/item_menu.c index 8d1388f961..6209b1f838 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -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); diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index a82f8bae18..cd903d7dcd 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -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); diff --git a/src/scrcmd.c b/src/scrcmd.c index f95f7b0952..bec2b1c9f4 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -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; } diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 342bc32d33..584493db73 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -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)); +} diff --git a/src/wonder_news.c b/src/wonder_news.c index d1f4e403f8..e3db455480 100644 --- a/src/wonder_news.c +++ b/src/wonder_news.c @@ -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; diff --git a/test/battle/ability/aerilate.c b/test/battle/ability/aerilate.c index 1226103529..1fd1152ed9 100644 --- a/test/battle/ability/aerilate.c +++ b/test/battle/ability/aerilate.c @@ -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); } diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c index 98a3d5f9c7..a449122d9f 100644 --- a/test/battle/ability/gale_wings.c +++ b/test/battle/ability/gale_wings.c @@ -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 { diff --git a/test/battle/ability/galvanize.c b/test/battle/ability/galvanize.c index 67cc83c5fe..596857f6f4 100644 --- a/test/battle/ability/galvanize.c +++ b/test/battle/ability/galvanize.c @@ -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); diff --git a/test/battle/ability/normalize.c b/test/battle/ability/normalize.c index a1fe02baa2..692afba862 100644 --- a/test/battle/ability/normalize.c +++ b/test/battle/ability/normalize.c @@ -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); diff --git a/test/battle/ability/pixilate.c b/test/battle/ability/pixilate.c index 27ed38b00b..6c5e414d73 100644 --- a/test/battle/ability/pixilate.c +++ b/test/battle/ability/pixilate.c @@ -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); diff --git a/test/battle/ability/refrigerate.c b/test/battle/ability/refrigerate.c index aeffe84034..f02168bf15 100644 --- a/test/battle/ability/refrigerate.c +++ b/test/battle/ability/refrigerate.c @@ -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);