From ba5a59eee2da10c4ef9ea104f20d1890f581888e Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Mon, 11 May 2026 13:47:17 -0700 Subject: [PATCH] Foolish items --- include/Z2AudioLib/Z2SceneMgr.h | 5 + include/d/d_a_item_static.h | 2 +- include/d/d_a_itembase_static.h | 5 + src/d/actor/d_a_alink_demo.inc | 512 +++++++++--------- src/d/actor/d_a_obj_item.cpp | 54 +- src/d/actor/d_a_obj_life_container.cpp | 22 +- src/d/actor/d_a_obj_shield.cpp | 12 +- src/d/actor/d_a_obj_sword.cpp | 17 +- src/d/actor/d_a_obj_zcloth.cpp | 10 +- src/d/actor/d_a_shop_item.cpp | 9 + src/d/d_a_itembase_static.cpp | 2 +- src/d/d_item.cpp | 13 +- .../randomizer/game/randomizer_context.cpp | 194 ++++--- .../randomizer/game/randomizer_context.hpp | 5 + .../data/text/languages/english.yaml | 5 + .../generator/data/text/text_overrides.yaml | 7 +- 16 files changed, 507 insertions(+), 367 deletions(-) diff --git a/include/Z2AudioLib/Z2SceneMgr.h b/include/Z2AudioLib/Z2SceneMgr.h index 1b3ef2cc0b..752bc4339b 100644 --- a/include/Z2AudioLib/Z2SceneMgr.h +++ b/include/Z2AudioLib/Z2SceneMgr.h @@ -46,6 +46,11 @@ public: s32 getSeLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 0); } s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); } u8 getDemoSeWaveNum() { return loadedDemoWave; } +#if TARGET_PC + u8 getLoadedSeWave_1() { return loadedSeWave_1;} + u8 getLoadedSeWave_2() { return loadedSeWave_2;} +#endif + private: /* 0x00 */ JAISoundID BGM_ID; diff --git a/include/d/d_a_item_static.h b/include/d/d_a_item_static.h index f9cc7742e7..0a8b8d6904 100644 --- a/include/d/d_a_item_static.h +++ b/include/d/d_a_item_static.h @@ -115,7 +115,7 @@ public: bool checkBoomWindTgTimer() { return mBoomWindTgTimer == 0; } #if TARGET_PC - void setRandomizerItem(); + void setRandomizerItem(bool setFoolishItemModel = false); #endif static procFunc mFuncPtr[]; diff --git a/include/d/d_a_itembase_static.h b/include/d/d_a_itembase_static.h index 36a0f55899..8701760584 100644 --- a/include/d/d_a_itembase_static.h +++ b/include/d/d_a_itembase_static.h @@ -7,4 +7,9 @@ class fopAc_ac_c; int CheckFieldItemCreateHeap(fopAc_ac_c* actor); int CheckItemCreateHeap(fopAc_ac_c* i_this); +#if TARGET_PC +// Used for foolish items in rando. Foolish item model id is saved to home.angle.z +#define M_ITEMNO_MODEL_ITEM_ID (IF_DUSK(randomizer_IsActive() && m_itemNo == dItemNo_Randomizer_FOOLISH_ITEM_e && home.angle.z != 0 ? home.angle.z :) m_itemNo) +#endif + #endif /* D_A_D_A_ITEMBASE_STATIC_H */ diff --git a/src/d/actor/d_a_alink_demo.inc b/src/d/actor/d_a_alink_demo.inc index 17d506fb82..ef5ea3fdcc 100644 --- a/src/d/actor/d_a_alink_demo.inc +++ b/src/d/actor/d_a_alink_demo.inc @@ -2234,261 +2234,261 @@ void daAlink_c::setGetSubBgm(int i_itemNo) { #if TARGET_PC // Randomizer SeType changes static const u8 getSeTypeRandomizer[255] = { - /* fpcNm_ITEM_HEART */ SETYPE_NONE, - /* fpcNm_ITEM_GREEN_RUPEE */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BLUE_RUPEE */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_YELLOW_RUPEE */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_RED_RUPEE */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_PURPLE_RUPEE */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_ORANGE_RUPEE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_SILVER_RUPEE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_S_MAGIC */ SETYPE_NONE, - /* fpcNm_ITEM_L_MAGIC */ SETYPE_NONE, - /* fpcNm_ITEM_BOMB_5 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BOMB_10 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BOMB_20 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BOMB_30 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_ARROW_10 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_ARROW_20 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_ARROW_30 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_ARROW_1 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_PACHINKO_SHOT */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_NOENTRY_19 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_20 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_21 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WATER_BOMB_5 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_WATER_BOMB_10 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_WATER_BOMB_20 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_WATER_BOMB_30 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BOMB_INSECT_5 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BOMB_INSECT_10 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BOMB_INSECT_20 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_BOMB_INSECT_30 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_RECOVERY_FAILY */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_TRIPLE_HEART */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_SMALL_KEY */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_KAKERA_HEART */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_UTAWA_HEART */ SETYPE_HEART, - /* fpcNm_ITEM_MAP */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_COMPUS */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_DUNGEON_EXIT */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_BOSS_KEY */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_DUNGEON_BACK */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_SWORD */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_MASTER_SWORD */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_WOOD_SHIELD */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_SHIELD */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_HYLIA_SHIELD */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_TKS_LETTER */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WEAR_CASUAL */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WEAR_KOKIRI */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_ARMOR */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_WEAR_ZORA */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_MAGIC_LV1 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_DUNGEON_EXIT_2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WALLET_LV1 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WALLET_LV2 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_WALLET_LV3 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_55 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_56 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_57 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_58 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_59 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_60 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_ZORAS_JEWEL */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_HAWK_EYE */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_WOOD_STICK */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_BOOMERANG */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_SPINNER */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_IRONBALL */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_BOW */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_HOOKSHOT */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_HVY_BOOTS */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_COPY_ROD */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_W_HOOKSHOT */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_KANTERA */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_LIGHT_SWORD */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_FISHING_ROD_1 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_PACHINKO */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_COPY_ROD_2 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_77 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_78 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_BOMB_BAG_LV2 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_BOMB_BAG_LV1 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_BOMB_IN_BAG */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_82 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LIGHT_ARROW */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_ARROW_LV1 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_ARROW_LV2 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_ARROW_LV3 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_87 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LURE_ROD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_BOMB_ARROW */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_HAWK_ARROW */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_BEE_ROD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_JEWEL_ROD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WORM_ROD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_JEWEL_BEE_ROD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_JEWEL_WORM_ROD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_EMPTY_BOTTLE */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_RED_BOTTLE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_GREEN_BOTTLE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_BLUE_BOTTLE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_MILK_BOTTLE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_HALF_MILK_BOTTLE */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_OIL_BOTTLE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WATER_BOTTLE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_OIL_BOTTLE_2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_RED_BOTTLE_2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_UGLY_SOUP */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_HOT_SPRING */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_FAIRY */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_HOT_SPRING_2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_OIL2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_OIL */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NORMAL_BOMB */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WATER_BOMB */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_POKE_BOMB */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_FAIRY_DROP */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_WORM */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_DROP_BOTTLE */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_BEE_CHILD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_CHUCHU_RARE */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_CHUCHU_RED */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_CHUCHU_BLUE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_CHUCHU_GREEN */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_CHUCHU_YELLOW */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_CHUCHU_PURPLE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LV1_SOUP */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LV2_SOUP */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LV3_SOUP */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LETTER */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_BILL */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_WOOD_STATUE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_IRIAS_PENDANT */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_HORSE_FLUTE */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_133 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_134 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_135 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_136 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_137 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_138 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_139 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_140 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_141 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_142 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_143 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_RAFRELS_MEMO */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_ASHS_SCRIBBLING */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_146 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_147 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_148 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_149 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_150 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_151 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_152 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_153 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_154 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_155 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_CHUCHU_YELLOW2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_OIL_BOTTLE3 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_SHOP_BEE_CHILD */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_CHUCHU_BLACK */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LIGHT_DROP */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_DROP_CONTAINER */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_DROP_CONTAINER02 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_DROP_CONTAINER03 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_FILLED_CONTAINER */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_MIRROR_PIECE_2 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_MIRROR_PIECE_3 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_MIRROR_PIECE_4 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_168 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_169 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_170 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_171 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_172 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_173 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_174 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_175 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_SMELL_YELIA_POUCH */ SETYPE_ITEM_GET_SMELL, - /* fpcNm_ITEM_SMELL_PUMPKIN */ SETYPE_ITEM_GET_SMELL, - /* fpcNm_ITEM_SMELL_POH */ SETYPE_ITEM_GET_SMELL, - /* fpcNm_ITEM_SMELL_FISH */ SETYPE_ITEM_GET_SMELL, - /* fpcNm_ITEM_SMELL_CHILDREN */ SETYPE_ITEM_GET_SMELL, - /* fpcNm_ITEM_SMELL_MEDICINE */ SETYPE_ITEM_GET_SMELL, - /* fpcNm_ITEM_NOENTRY_182 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_183 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_184 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_185 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_186 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_187 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_188 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_189 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_190 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_NOENTRY_191 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_M_BEETLE */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_BEETLE */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_BUTTERFLY */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_BUTTERFLY */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_STAG_BEETLE */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_STAG_BEETLE */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_GRASSHOPPER */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_GRASSHOPPER */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_NANAFUSHI */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_NANAFUSHI */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_DANGOMUSHI */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_DANGOMUSHI */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_MANTIS */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_MANTIS */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_LADYBUG */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_LADYBUG */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_SNAIL */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_SNAIL */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_DRAGONFLY */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_DRAGONFLY */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_ANT */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_ANT */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_M_MAYFLY */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_F_MAYFLY */ SETYPE_ITEM_GET_INSECT, - /* fpcNm_ITEM_NOENTRY_216 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_217 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_218 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_219 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_220 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_221 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_222 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_223 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_POU_SPIRIT */ SETYPE_ITEM_GET_POU, - /* fpcNm_ITEM_NOENTRY_225 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_226 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_227 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_228 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_229 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_230 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_231 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_NOENTRY_232 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_ANCIENT_DOCUMENT */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_AIR_LETTER */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_ANCIENT_DOCUMENT2 */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_LV7_DUNGEON_EXIT */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LINKS_SAVINGS */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_SMALL_KEY2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_POU_FIRE1 */ SETYPE_NONE, - /* fpcNm_ITEM_POU_FIRE2 */ SETYPE_NONE, - /* fpcNm_ITEM_POU_FIRE3 */ SETYPE_NONE, - /* fpcNm_ITEM_POU_FIRE4 */ SETYPE_NONE, - /* fpcNm_ITEM_BOSSRIDER_KEY */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_TOMATO_PUREE */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_TASTE */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_LV5_BOSS_KEY */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_SURFBOARD */ SETYPE_NONE, - /* fpcNm_ITEM_KANTERA2 */ SETYPE_ITEM_GET_ME, - /* fpcNm_ITEM_L2_KEY_PIECES1 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_L2_KEY_PIECES2 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_L2_KEY_PIECES3 */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_KEY_OF_CARAVAN */ SETYPE_ITEM_GET_MINI, - /* fpcNm_ITEM_LV2_BOSS_KEY */ SETYPE_ITEM_GET, - /* fpcNm_ITEM_KEY_OF_FILONE */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_HEART_e */ SETYPE_NONE, + /* dItemNo_Randomizer_GREEN_RUPEE_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BLUE_RUPEE_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_YELLOW_RUPEE_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_RED_RUPEE_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_PURPLE_RUPEE_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_ORANGE_RUPEE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_SILVER_RUPEE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_S_MAGIC_e */ SETYPE_NONE, + /* dItemNo_Randomizer_L_MAGIC_e */ SETYPE_NONE, + /* dItemNo_Randomizer_BOMB_5_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BOMB_10_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BOMB_20_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BOMB_30_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_ARROW_10_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_ARROW_20_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_ARROW_30_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_ARROW_1_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_PACHINKO_SHOT_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_FOOLISH_ITEM_e_e */ SETYPE_NONE, + /* dItemNo_Randomizer_NOENTRY_20_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_21_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WATER_BOMB_5_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_WATER_BOMB_10_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_WATER_BOMB_20_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_WATER_BOMB_30_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BOMB_INSECT_5_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BOMB_INSECT_10_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BOMB_INSECT_20_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_BOMB_INSECT_30_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_RECOVERY_FAILY_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_TRIPLE_HEART_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_SMALL_KEY_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_KAKERA_HEART_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_UTAWA_HEART_e */ SETYPE_HEART, + /* dItemNo_Randomizer_MAP_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_COMPUS_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_DUNGEON_EXIT_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_BOSS_KEY_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_DUNGEON_BACK_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_SWORD_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_MASTER_SWORD_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_WOOD_SHIELD_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_SHIELD_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_HYLIA_SHIELD_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_TKS_LETTER_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WEAR_CASUAL_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WEAR_KOKIRI_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_ARMOR_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_WEAR_ZORA_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_MAGIC_LV1_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_DUNGEON_EXIT_2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WALLET_LV1_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WALLET_LV2_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_WALLET_LV3_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_55_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_56_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_57_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_58_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_59_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_60_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_ZORAS_JEWEL_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_HAWK_EYE_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_WOOD_STICK_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_BOOMERANG_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_SPINNER_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_IRONBALL_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_BOW_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_HOOKSHOT_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_HVY_BOOTS_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_COPY_ROD_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_W_HOOKSHOT_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_KANTERA_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_LIGHT_SWORD_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_FISHING_ROD_1_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_PACHINKO_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_COPY_ROD_2_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_77_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_78_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_BOMB_BAG_LV2_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_BOMB_BAG_LV1_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_BOMB_IN_BAG_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_82_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LIGHT_ARROW_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_ARROW_LV1_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_ARROW_LV2_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_ARROW_LV3_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_87_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LURE_ROD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_BOMB_ARROW_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_HAWK_ARROW_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_BEE_ROD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_JEWEL_ROD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WORM_ROD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_JEWEL_BEE_ROD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_JEWEL_WORM_ROD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_EMPTY_BOTTLE_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_RED_BOTTLE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_GREEN_BOTTLE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_BLUE_BOTTLE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_MILK_BOTTLE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_HALF_MILK_BOTTLE_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_OIL_BOTTLE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WATER_BOTTLE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_OIL_BOTTLE_2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_RED_BOTTLE_2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_UGLY_SOUP_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_HOT_SPRING_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_FAIRY_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_HOT_SPRING_2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_OIL2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_OIL_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NORMAL_BOMB_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WATER_BOMB_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_POKE_BOMB_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_FAIRY_DROP_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_WORM_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_DROP_BOTTLE_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_BEE_CHILD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_CHUCHU_RARE_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_CHUCHU_RED_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_CHUCHU_BLUE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_CHUCHU_GREEN_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_CHUCHU_YELLOW_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_CHUCHU_PURPLE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LV1_SOUP_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LV2_SOUP_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LV3_SOUP_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LETTER_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_BILL_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_WOOD_STATUE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_IRIAS_PENDANT_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_HORSE_FLUTE_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_133_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_134_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_135_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_136_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_137_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_138_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_139_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_140_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_141_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_142_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_143_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_RAFRELS_MEMO_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_ASHS_SCRIBBLING_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_146_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_147_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_148_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_149_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_150_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_151_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_152_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_153_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_154_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_155_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_CHUCHU_YELLOW2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_OIL_BOTTLE3_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_SHOP_BEE_CHILD_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_CHUCHU_BLACK_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LIGHT_DROP_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_DROP_CONTAINER_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_DROP_CONTAINER02_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_DROP_CONTAINER03_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_FILLED_CONTAINER_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_MIRROR_PIECE_2_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_MIRROR_PIECE_3_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_MIRROR_PIECE_4_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_168_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_169_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_170_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_171_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_172_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_173_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_174_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_175_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_SMELL_YELIA_POUCH_e */ SETYPE_ITEM_GET_SMELL, + /* dItemNo_Randomizer_SMELL_PUMPKIN_e */ SETYPE_ITEM_GET_SMELL, + /* dItemNo_Randomizer_SMELL_POH_e */ SETYPE_ITEM_GET_SMELL, + /* dItemNo_Randomizer_SMELL_FISH_e */ SETYPE_ITEM_GET_SMELL, + /* dItemNo_Randomizer_SMELL_CHILDREN_e */ SETYPE_ITEM_GET_SMELL, + /* dItemNo_Randomizer_SMELL_MEDICINE_e */ SETYPE_ITEM_GET_SMELL, + /* dItemNo_Randomizer_NOENTRY_182_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_183_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_184_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_185_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_186_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_187_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_188_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_189_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_190_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_NOENTRY_191_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_M_BEETLE_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_BEETLE_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_BUTTERFLY_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_BUTTERFLY_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_STAG_BEETLE_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_STAG_BEETLE_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_GRASSHOPPER_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_GRASSHOPPER_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_NANAFUSHI_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_NANAFUSHI_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_DANGOMUSHI_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_DANGOMUSHI_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_MANTIS_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_MANTIS_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_LADYBUG_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_LADYBUG_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_SNAIL_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_SNAIL_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_DRAGONFLY_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_DRAGONFLY_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_ANT_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_ANT_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_M_MAYFLY_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_F_MAYFLY_e */ SETYPE_ITEM_GET_INSECT, + /* dItemNo_Randomizer_NOENTRY_216_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_217_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_218_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_219_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_220_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_221_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_222_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_223_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_POU_SPIRIT_e */ SETYPE_ITEM_GET_POU, + /* dItemNo_Randomizer_NOENTRY_225_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_226_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_227_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_228_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_229_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_230_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_231_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_NOENTRY_232_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_ANCIENT_DOCUMENT_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_AIR_LETTER_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_ANCIENT_DOCUMENT2_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_LV7_DUNGEON_EXIT_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LINKS_SAVINGS_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_SMALL_KEY2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_POU_FIRE1_e */ SETYPE_NONE, + /* dItemNo_Randomizer_POU_FIRE2_e */ SETYPE_NONE, + /* dItemNo_Randomizer_POU_FIRE3_e */ SETYPE_NONE, + /* dItemNo_Randomizer_POU_FIRE4_e */ SETYPE_NONE, + /* dItemNo_Randomizer_BOSSRIDER_KEY_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_TOMATO_PUREE_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_TASTE_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_LV5_BOSS_KEY_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_SURFBOARD_e */ SETYPE_NONE, + /* dItemNo_Randomizer_KANTERA2_e */ SETYPE_ITEM_GET_ME, + /* dItemNo_Randomizer_L2_KEY_PIECES1_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_L2_KEY_PIECES2_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_L2_KEY_PIECES3_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_KEY_OF_CARAVAN_e */ SETYPE_ITEM_GET_MINI, + /* dItemNo_Randomizer_LV2_BOSS_KEY_e */ SETYPE_ITEM_GET, + /* dItemNo_Randomizer_KEY_OF_FILONE_e */ SETYPE_ITEM_GET_MINI, }; #endif @@ -2507,7 +2507,7 @@ void daAlink_c::setGetSubBgm(int i_itemNo) { se_type = SETYPE_ITEM_GET_ME_S; } - if (se_type != SETYPE_NONE) { + if (se_type != SETYPE_NONE IF_DUSK(|| i_itemNo == dItemNo_Randomizer_FOOLISH_ITEM_e)) { mDoAud_subBgmStart(bgmLabel[se_type]); dComIfGp_setMesgBgmOn(); } diff --git a/src/d/actor/d_a_obj_item.cpp b/src/d/actor/d_a_obj_item.cpp index 9040d1dc49..8c3754dcfe 100644 --- a/src/d/actor/d_a_obj_item.cpp +++ b/src/d/actor/d_a_obj_item.cpp @@ -75,7 +75,7 @@ void daItem_c::setBaseMtx() { if (mpModel != NULL) { mpModel->setBaseScale(scale); - switch (m_itemNo) { + switch (M_ITEMNO_MODEL_ITEM_ID) { case dItemNo_GREEN_RUPEE_e: case dItemNo_BLUE_RUPEE_e: case dItemNo_YELLOW_RUPEE_e: @@ -162,8 +162,8 @@ void daItem_c::CreateInit() { mCcCyl.SetCoHitCallback(itemGetCoCallBack); mCcCyl.SetTgHitCallback(itemGetTgCallBack); - f32 cylHeight = dItem_data::getH(m_itemNo); - f32 cylRadius = dItem_data::getR(m_itemNo); + f32 cylHeight = dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID); + f32 cylRadius = dItem_data::getR(M_ITEMNO_MODEL_ITEM_ID); if (scale.x > 1.0f) { cylHeight *= scale.x; @@ -184,7 +184,7 @@ void daItem_c::CreateInit() { #if TARGET_PC if (randomizer_IsActive()) { // Adjust item scale based on item ID - switch(m_itemNo) + switch(M_ITEMNO_MODEL_ITEM_ID) { case dItemNo_Randomizer_KAKERA_HEART_e: case dItemNo_Randomizer_UTAWA_HEART_e: @@ -260,7 +260,7 @@ void daItem_c::CreateInit() { if (m_itemNo == dItemNo_BOOMERANG_e IF_DUSK(&& !randomizer_IsActive())) { itemGetNextExecute(); - } else if ((m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) && + } else if ((M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) && mSparkleEmtr.getEmitter() == NULL) { dComIfGp_particle_set(0x0C14, &mSparklePos, NULL, NULL, -1, &mSparkleEmtr, -1, NULL, NULL, @@ -316,7 +316,7 @@ int daItem_c::_daItem_create() { shape_angle.z = 0; shape_angle.x = 0; #if TARGET_PC - setRandomizerItem(); + setRandomizerItem(/*setFoolishItemModel = */true); #endif field_0x95d = true; } @@ -359,10 +359,12 @@ int daItem_c::_daItem_create() { if (flag) { CreateInit(); } else { - phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo)); +#if TARGET_PC +#endif + phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); if (phase_state == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, - dItem_data::getFieldHeapSize(m_itemNo))) + dItem_data::getFieldHeapSize(M_ITEMNO_MODEL_ITEM_ID))) { return cPhs_ERROR_e; } @@ -379,7 +381,7 @@ int daItem_c::_daItem_execute() { CountTimer(); eyePos = current.pos; - eyePos.y += (f32)dItem_data::getH(m_itemNo) / 2; + eyePos.y += (f32)dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID) / 2; attention_info.position = current.pos; @@ -421,7 +423,7 @@ int daItem_c::_daItem_execute() { mLastPos = current.pos; field_0x95f = (fopAcM_checkHookCarryNow(this) >> 0x14) & 1; - if (m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) { + if (M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) { mSparklePos = current.pos; mSparklePos.y += 18.0f; } @@ -448,11 +450,11 @@ int daItem_c::_daItem_draw() { int daItem_c::_daItem_delete() { mSound.deleteObject(); - if (m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) { + if (M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) { mSparkleEmtr.remove(); } - DeleteBase(dItem_data::getFieldArc(m_itemNo)); + DeleteBase(dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); return 1; } @@ -550,7 +552,7 @@ void daItem_c::procMainSimpleGetDemo() { void daItem_c::procInitGetDemoEvent() { hide(); - if (m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) { + if (M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) { mSparkleEmtr.remove(); } @@ -561,12 +563,19 @@ void daItem_c::procInitGetDemoEvent() { #if TARGET_PC // Set rando item again incase this item is progressive and // player picked up another one before this one on the same stage + u8 oldItemNo = m_itemNo; setRandomizerItem(); #endif m_item_id = fopAcM_createItemForTrBoxDemo(¤t.pos, m_itemNo, -1, fopAcM_GetRoomNo(this), NULL, NULL); JUT_ASSERT(0, m_item_id != fpcM_ERROR_PROCESS_ID_e); +#if TARGET_PC + // Set the itemNo back to the old one since the game relies on this + // to properly delete the arc it loaded + m_itemNo = oldItemNo; +#endif + setStatus(STATUS_WAIT_GET_DEMO_EVENT_e); } @@ -623,8 +632,8 @@ void daItem_c::procInitBoomerangCarry() { scale = mItemScale; mBoomerangMove.initOffset(¤t.pos); - u8 height = dItem_data::getH(m_itemNo); - u8 radius = dItem_data::getR(m_itemNo); + u8 height = dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID); + u8 radius = dItem_data::getR(M_ITEMNO_MODEL_ITEM_ID); mCcCyl.SetR((f32)radius * 2.0f); mCcCyl.SetH((f32)height * 2.0f); mCcCyl.OnCoSPrmBit(1); @@ -807,7 +816,7 @@ void daItem_c::mode_wait() { mAcch.SetGrndNone(); } - switch (m_itemNo) { + switch (M_ITEMNO_MODEL_ITEM_ID) { case dItemNo_HEART_e: itemActionForHeart(); break; @@ -851,7 +860,7 @@ void daItem_c::mode_water() { } f32 scale = 1.0f; - switch (m_itemNo) { + switch (M_ITEMNO_MODEL_ITEM_ID) { case dItemNo_HEART_e: scale = 0.5f; break; @@ -902,6 +911,7 @@ void daItem_c::itemGetNextExecute() { case dItemNo_ARROW_1_e: procInitSimpleGetDemo(); itemGet(); + break; case dItemNo_BLUE_RUPEE_e: case dItemNo_YELLOW_RUPEE_e: case dItemNo_RED_RUPEE_e: @@ -994,6 +1004,7 @@ void daItem_c::itemGet() { #if TARGET_PC // Set rando item again incase this item is progressive and // player picked up another one before this one on the same stage + u8 oldItemNo = m_itemNo; setRandomizerItem(); #endif switch (m_itemNo) { @@ -1058,6 +1069,9 @@ void daItem_c::itemGet() { OS_REPORT_ERROR("[daItem_c]ゲット処理が定義されていません[%d]\n", m_itemNo); break; } +#if TARGET_PC + m_itemNo = oldItemNo; +#endif } BOOL daItem_c::checkCountTimer() { @@ -1221,7 +1235,7 @@ void daItem_c::set_bound_se() { } #if TARGET_PC -void daItem_c::setRandomizerItem() { +void daItem_c::setRandomizerItem(bool setFoolishItemModel) { if (randomizer_IsActive()) { u32 params = fopAcM_GetParam(this); u8 flag = daItem_prm::getItemBitNo(this); @@ -1236,6 +1250,10 @@ void daItem_c::setRandomizerItem() { params |= verifyProgressiveItem(newItemId); fopAcM_SetParam(this, params); m_itemNo = daItem_prm::getItemNo(this); + // Set the ice trap model if this is an ice trap, and it isn't set + if (setFoolishItemModel && m_itemNo == dItemNo_Randomizer_FOOLISH_ITEM_e && home.angle.z == 0) { + home.angle.z = randomizer_getRandomFoolishItemModelID(); + } } } } diff --git a/src/d/actor/d_a_obj_life_container.cpp b/src/d/actor/d_a_obj_life_container.cpp index 0ce5266aff..d3e9182d8e 100644 --- a/src/d/actor/d_a_obj_life_container.cpp +++ b/src/d/actor/d_a_obj_life_container.cpp @@ -95,8 +95,8 @@ int daObjLife_c::Create() { mCcCyl.SetStts(&mCcStts); mCcCyl.SetCoHitCallback(lifeGetCoCallBack); mCcCyl.SetTgHitCallback(lifeGetTgCallBack); - mCcCyl.SetR(dItem_data::getR(m_itemNo)); - mCcCyl.SetH(dItem_data::getH(m_itemNo)); + mCcCyl.SetR(dItem_data::getR(M_ITEMNO_MODEL_ITEM_ID)); + mCcCyl.SetH(dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID)); fopAcM_SetCullSize(this, fopAc_CULLSPHERE_0_e); fopAcM_SetGravity(this, -3.2f); @@ -145,7 +145,7 @@ void daObjLife_c::setEffect() { #if TARGET_PC if (randomizer_IsActive()) { // In randomizer, we don't want rupees or poe souls to sparkle. They are bright enough. - switch(m_itemNo) + switch(M_ITEMNO_MODEL_ITEM_ID) { case dItemNo_Randomizer_GREEN_RUPEE_e: case dItemNo_Randomizer_BLUE_RUPEE_e: @@ -238,8 +238,12 @@ int daObjLife_c::create() { params |= itemId; fopAcM_SetParam(this, params); + if (itemId == dItemNo_Randomizer_FOOLISH_ITEM_e) { + home.angle.z = randomizer_getRandomFoolishItemModelID(); + } + // Also adjust the height of the object depending on the item - switch (itemId) { + switch (itemId == dItemNo_Randomizer_FOOLISH_ITEM_e ? home.angle.z : itemId) { case dItemNo_Randomizer_MASTER_SWORD_e: case dItemNo_Randomizer_LIGHT_SWORD_e: case dItemNo_Randomizer_WOOD_SHIELD_e: @@ -341,7 +345,7 @@ int daObjLife_c::create() { return cPhs_ERROR_e; } - int phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo)); + int phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); if (phase_state == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, 0x4000)) { return cPhs_ERROR_e; @@ -563,8 +567,8 @@ int daObjLife_c::actionInitBoomerangCarry() { mCcCyl.OnTgSPrmBit(1); mCcCyl.OnCoSPrmBit(1); - f32 height = dItem_data::getH(m_itemNo) * 4.0f; - f32 radius = dItem_data::getR(m_itemNo) * 4.0f; + f32 height = dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID) * 4.0f; + f32 radius = dItem_data::getR(M_ITEMNO_MODEL_ITEM_ID) * 4.0f; mCcCyl.SetR(radius); mCcCyl.SetH(height); @@ -603,7 +607,7 @@ void daObjLife_c::calcScale() { f32 newScale = 1.0f; if (randomizer_IsActive()) { // Change scale for certain items - switch (m_itemNo) { + switch (M_ITEMNO_MODEL_ITEM_ID) { case dItemNo_Randomizer_KAKERA_HEART_e: case dItemNo_Randomizer_UTAWA_HEART_e: case dItemNo_Randomizer_ARROW_10_e: @@ -717,7 +721,7 @@ int daObjLife_c::_delete() { endEffect00(); endEffect02(); - DeleteBase(dItem_data::getFieldArc(m_itemNo)); + DeleteBase(dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); return 1; } diff --git a/src/d/actor/d_a_obj_shield.cpp b/src/d/actor/d_a_obj_shield.cpp index 9d58fc3cab..420a478b56 100644 --- a/src/d/actor/d_a_obj_shield.cpp +++ b/src/d/actor/d_a_obj_shield.cpp @@ -109,6 +109,14 @@ int daItemShield_c::__CreateHeap() { int daItemShield_c::create() { fopAcM_ct(this, daItemShield_c); m_itemNo = IF_DUSK(randomizer_IsActive() ? randomizer_getItemAtLocation("Ordon Shield") : ) dItemNo_WOOD_SHIELD_e; +#if TARGET_PC + // Use home.angle.x as a check to see if we've set the foolish item model or not + // Otherwise we end up setting it twice + if (randomizer_IsActive() && m_itemNo == dItemNo_Randomizer_FOOLISH_ITEM_e && home.angle.x != 0) { + home.angle.z = randomizer_getRandomFoolishItemModelID(); + home.angle.x = 0; + } +#endif if (fopAcM_isSwitch(this, getSwBit2())) { OS_REPORT("木の盾:もう取ったので出ません\n"); return cPhs_ERROR_e; @@ -119,7 +127,7 @@ int daItemShield_c::create() { if (getSwBit() == 0xff) { OS_REPORT("[43;30m木の盾:スイッチビット指定がありません!\n\x1b[m"); } - int rv = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo)); + int rv = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); if (rv == cPhs_COMPLEATE_e) { if (fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, 0x820) == 0) { return cPhs_ERROR_e; @@ -338,7 +346,7 @@ int daItemShield_c::draw() { } int daItemShield_c::_delete() { - daItemBase_c::DeleteBase(dItem_data::getFieldArc(m_itemNo)); + daItemBase_c::DeleteBase(dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); return 1; } diff --git a/src/d/actor/d_a_obj_sword.cpp b/src/d/actor/d_a_obj_sword.cpp index c67c36e7d6..32f9d2b47d 100644 --- a/src/d/actor/d_a_obj_sword.cpp +++ b/src/d/actor/d_a_obj_sword.cpp @@ -9,6 +9,9 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_item_data.h" +#if TARGET_PC +#include "dusk/randomizer/game/verify_item_functions.h" +#endif static cull_box l_cull_box = {{-200.0f, 0.0f, -200.0f}, {200.0f, 100.0f, 200.0f}}; @@ -36,12 +39,20 @@ int daObjSword_c::Create() { cPhs_Step daObjSword_c::create() { fopAcM_ct(this, daObjSword_c); - m_itemNo = IF_DUSK(randomizer_IsActive() ? static_cast(randomizer_getItemAtLocation("Ordon Sword")): ) 0x28; + m_itemNo = IF_DUSK(randomizer_IsActive() ? verifyProgressiveItem(randomizer_getItemAtLocation("Ordon Sword")): ) 0x28; +#if TARGET_PC + // Use home.angle.x as a check to see if we've set the foolish item model or not. + // Otherwise we end up setting it twice + if (randomizer_IsActive() && m_itemNo == dItemNo_Randomizer_FOOLISH_ITEM_e && home.angle.x != 0) { + home.angle.z = randomizer_getRandomFoolishItemModelID(); + home.angle.x = 0; + } +#endif if (fopAcM_isItem(this, getItemBit())) { return cPhs_ERROR_e; } - cPhs_Step phase = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo)); + cPhs_Step phase = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); if (phase == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, 0x4000)) { return cPhs_ERROR_e; @@ -120,7 +131,7 @@ int daObjSword_c::draw() { } int daObjSword_c::_delete() { - DeleteBase(dItem_data::getFieldArc(m_itemNo)); + DeleteBase(dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); return 1; } diff --git a/src/d/actor/d_a_obj_zcloth.cpp b/src/d/actor/d_a_obj_zcloth.cpp index bfb806f905..72e3ea949b 100644 --- a/src/d/actor/d_a_obj_zcloth.cpp +++ b/src/d/actor/d_a_obj_zcloth.cpp @@ -40,9 +40,15 @@ int daObjZCloth_c::create() { // Override the item id in randomizer if (randomizer_IsActive()) { m_itemNo = verifyProgressiveItem(randomizer_getItemAtLocation("Rutelas Blessing")); + // Use home.angle.x as a check to see if we've set the foolish item model or not + // Otherwise we end up setting it twice + if (m_itemNo == dItemNo_Randomizer_FOOLISH_ITEM_e && home.angle.x != 0) { + home.angle.z = randomizer_getRandomFoolishItemModelID(); + home.angle.x = 0; + } // TODO: Set rotation/height/scale depending on the item (low prio, can figure this out later) scale.setall(1.5f); - switch (m_itemNo) { + switch (M_ITEMNO_MODEL_ITEM_ID) { case dItemNo_Randomizer_WOOD_STICK_e: shape_angle.x = 0x4000; break; @@ -57,7 +63,7 @@ int daObjZCloth_c::create() { } } #endif - int phase = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo)); + int phase = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID)); if (phase == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)CheckFieldItemCreateHeap, 0x2fb0)) { return cPhs_ERROR_e; diff --git a/src/d/actor/d_a_shop_item.cpp b/src/d/actor/d_a_shop_item.cpp index f86a8447ce..31e371e2d1 100644 --- a/src/d/actor/d_a_shop_item.cpp +++ b/src/d/actor/d_a_shop_item.cpp @@ -102,6 +102,15 @@ const char* daShopItem_c::getShopArcname() { u8 itemId = randomizer_GetContext().mShopOverrides.at(key); itemId = verifyProgressiveItem(itemId); + if (itemId == dItemNo_Randomizer_FOOLISH_ITEM_e) { + if (home.angle.x != -1) { + home.angle.z = randomizer_getRandomFoolishItemModelID(); + home.angle.x = -1; + } + itemId = home.angle.z; + + } + // Replace the necessary index in daShopItem_c::mRandoData with the model data from dItem_data auto& shopModel = mRandoData[mShopItemID]; shopModel.mArcName = dItem_data::getArcName(itemId); diff --git a/src/d/d_a_itembase_static.cpp b/src/d/d_a_itembase_static.cpp index dab95b2413..7d91a42fe9 100644 --- a/src/d/d_a_itembase_static.cpp +++ b/src/d/d_a_itembase_static.cpp @@ -11,7 +11,7 @@ #include "d/d_item_data.h" u8 daItemBase_c::getItemNo() { - return m_itemNo; + return M_ITEMNO_MODEL_ITEM_ID; } static void dummy(dItem_data* data) { diff --git a/src/d/d_item.cpp b/src/d/d_item.cpp index f9a23378a9..17c70ee942 100644 --- a/src/d/d_item.cpp +++ b/src/d/d_item.cpp @@ -1216,16 +1216,11 @@ void item_func_PACHINKO_SHOT() { #if TARGET_PC void item_func_FOOLISH_ITEM() { - /* - Pasting rando code until framework is implemented // Failsafe: Make sure the count does not somehow exceed 100 - rando::customItems::FoolishItems* foolishItemsPtr = rando::gRandomizer->getFoolishItemsPtr(); - const uint32_t triggerCount = foolishItemsPtr->getTriggerCount(); - if (triggerCount < 100) - { - foolishItemsPtr->setTriggerCount(static_cast(triggerCount + 1)); - } - */ + if (g_randomizerState.foolishItemCount < 100) + { + g_randomizerState.foolishItemCount += 1; + } } void item_func_ORDON_PORTAL() { diff --git a/src/dusk/randomizer/game/randomizer_context.cpp b/src/dusk/randomizer/game/randomizer_context.cpp index 4ba48db783..6f58f67bb6 100644 --- a/src/dusk/randomizer/game/randomizer_context.cpp +++ b/src/dusk/randomizer/game/randomizer_context.cpp @@ -322,6 +322,109 @@ int RandomizerState::_delete() { return 1; } +static bool checkFoolishItemEffectReady() +{ + // Verify Link is loaded on the map. + if (!daAlink_getAlinkActorClass()) + { + return false; + } + + // Ensure Link is not in a cutscene + if (daAlink_getAlinkActorClass()->checkEventRun()) + { + return false; + } + + // Make sure Link isn't riding anything + if (daAlink_getAlinkActorClass()->checkRide()) + { + return false; + } + + // Ensure there are pointers to the mMeterClass and mpMeterDraw structs + if (!dMeter2Info_getMeterClass()) + { + return false; + } + + if (!dMeter2Info_getMeterClass()->getMeterDrawPtr()) + { + return false; + } + + // Make sure Z button isn't dimmed + if (dMeter2Info_getMeterClass()->getMeterDrawPtr()->getZButtonAlpha() != 1.f) + { + return false; + } + + switch (daAlink_getAlinkActorClass()->mProcID) + { + case daAlink_c::PROC_TALK: + case daAlink_c::PROC_WOLF_SWIM_MOVE: + case daAlink_c::PROC_SWIM_MOVE: + case daAlink_c::PROC_SWIM_WAIT: + case daAlink_c::PROC_WOLF_SWIM_WAIT: + case daAlink_c::PROC_SWIM_UP: + case daAlink_c::PROC_SWIM_DIVE: + { + return false; + } + default: + { + break; + } + } + return true; +} + +static void handleFoolishItem() { + u32 count = g_randomizerState.foolishItemCount; + if (count == 0) { + return; + } + + if (!checkFoolishItemEffectReady()) + { + return; + } + + // Failsafe: Make sure the count does not somehow exceed 100 + if (count > 100) { + count = 100; + } + + // Reset count + g_randomizerState.foolishItemCount = 0; + + /* Store the currently loaded sound wave to local variables as we will need to load them back later. + * We use this method because if we just loaded the sound waves every time the item was gotten, we'd + * eventually run out of memory so it is safer to unload everything and load it back in. */ + + auto sceneMgr = Z2GetSceneMgr(); + const u32 seWave1 = sceneMgr->getLoadedSeWave_1(); + const u32 seWave2 = sceneMgr->getLoadedSeWave_2(); + sceneMgr->eraseSeWave(seWave1); + sceneMgr->eraseSeWave(seWave2); + sceneMgr->loadSeWave(0x46); + mDoAud_seStartLevel(0x10040, nullptr, 0, 0); + sceneMgr->loadSeWave(seWave1); + sceneMgr->loadSeWave(seWave2); + + // Initiate the appropriate visual damage process + if (daAlink_getAlinkActorClass()->checkWolf()) + { + daAlink_getAlinkActorClass()->procWolfDamageInit(nullptr); + } + else + { + daAlink_getAlinkActorClass()->procDamageInit(nullptr, 0); + } + + daPy_py_c::setPlayerDamage(count, TRUE); +} + /* * Updates flags for Hyrule Castle Barrier, Palace of Twilight Access, * and Hyrule Castle Big Key chest. Maybe a bit overkill to check this every frame, but @@ -441,11 +544,9 @@ int RandomizerState::execute() { } setRoomReloadingState(currentReloadingState); - // COpypasta old rando code until I build the framework out. - /*if (!libtp::tp::d_a_alink::checkStageName(libtp::data::stage::allStages[libtp::data::stage::StageIDs::Title_Screen])) - { - handleFoolishItem(randoPtr); - }*/ + if (getStageID() != Title_Screen) { + handleFoolishItem(); + } return 1; } @@ -632,64 +733,6 @@ void RandomizerState::offLoad() updateGoalFlags(); } -bool checkFoolishItemEffectReady() -{ - // Verify Link is loaded on the map. - if (!daAlink_getAlinkActorClass()) - { - return false; - } - - // Ensure Link is not in a cutscene - if (daAlink_getAlinkActorClass()->checkEventRun()) - { - return false; - } - - // Make sure Link isn't riding anything - if (daAlink_getAlinkActorClass()->checkRide()) - { - return false; - } - - // Ensure there are pointers to the mMeterClass and mpMeterDraw structs - if (!dMeter2Info_getMeterClass()) - { - return false; - } - - if (!dMeter2Info_getMeterClass()->getMeterDrawPtr()) - { - return false; - } - - // Make sure Z button isn't dimmed - if (dMeter2Info_getMeterClass()->getMeterDrawPtr()->getZButtonAlpha() != 1.f) - { - return false; - } - - switch (daAlink_getAlinkActorClass()->mProcID) - { - case daAlink_c::PROC_TALK: - case daAlink_c::PROC_WOLF_SWIM_MOVE: - case daAlink_c::PROC_SWIM_MOVE: - case daAlink_c::PROC_SWIM_WAIT: - case daAlink_c::PROC_WOLF_SWIM_WAIT: - case daAlink_c::PROC_SWIM_UP: - case daAlink_c::PROC_SWIM_DIVE: - { - return false; - } - default: - { - break; - } - } - return true; -} - - RandomizerContext& randomizer_GetContext() { static RandomizerContext instance; return instance; @@ -754,6 +797,31 @@ bool randomizer_checkTempleOfTimeRequirement() { return false; } +u8 randomizer_getRandomFoolishItemModelID() { + static constexpr auto foolishItemModels = std::to_array({ + dItemNo_Randomizer_ARMOR_e, + dItemNo_Randomizer_WOOD_STICK_e, + dItemNo_Randomizer_SHIELD_e, + dItemNo_Randomizer_HYLIA_SHIELD_e, + dItemNo_Randomizer_MAGIC_LV1_e, + dItemNo_Randomizer_FISHING_ROD_1_e, + dItemNo_Randomizer_HAWK_EYE_e, + dItemNo_Randomizer_BOOMERANG_e, + dItemNo_Randomizer_SPINNER_e, + dItemNo_Randomizer_IRONBALL_e, + dItemNo_Randomizer_BOW_e, + dItemNo_Randomizer_COPY_ROD_e, + dItemNo_Randomizer_HOOKSHOT_e, + dItemNo_Randomizer_HVY_BOOTS_e, + dItemNo_Randomizer_PACHINKO_e, + dItemNo_Randomizer_BOMB_BAG_LV1_e, + dItemNo_Randomizer_ANCIENT_DOCUMENT_e, + }); + + u8 selectedModal = foolishItemModels[static_cast(cM_rnd() * foolishItemModels.size()) % foolishItemModels.size()]; + return verifyProgressiveItem(selectedModal); +} + u32 getActorPatchesCurrentStageKey(u8 roomNo) { u32 actorPatchesStageKey{}; actorPatchesStageKey |= getStageID(dComIfGp_getStartStageName()) << 16; diff --git a/src/dusk/randomizer/game/randomizer_context.hpp b/src/dusk/randomizer/game/randomizer_context.hpp index 3c9617cb24..bda9690ea8 100644 --- a/src/dusk/randomizer/game/randomizer_context.hpp +++ b/src/dusk/randomizer/game/randomizer_context.hpp @@ -162,6 +162,8 @@ public: // more naturally with the timing of when the game normally gives items and affects // things like the sound of the rupee counter going up. u8 mFlowMessageItemId{0}; + + int foolishItemCount{0}; }; extern randomizer::Randomizer g_RandomizerGenerator; @@ -175,6 +177,9 @@ bool randomizer_IsActive(); int randomizer_getItemAtLocation(const std::string& locationName); bool randomizer_checkTempleOfTimeRequirement(); + +u8 randomizer_getRandomFoolishItemModelID(); + /** * Helper function to convert raw bytes of a container to a hex string */ diff --git a/src/dusk/randomizer/generator/data/text/languages/english.yaml b/src/dusk/randomizer/generator/data/text/languages/english.yaml index ce2d842bc6..f200db2e44 100644 --- a/src/dusk/randomizer/generator/data/text/languages/english.yaml +++ b/src/dusk/randomizer/generator/data/text/languages/english.yaml @@ -1,3 +1,8 @@ +Foolish Get Item Text: + Standard: + Text: |- + a cold wind blows... + Shadow Crystal Get Item Text: Standard: Text: |- diff --git a/src/dusk/randomizer/generator/data/text/text_overrides.yaml b/src/dusk/randomizer/generator/data/text/text_overrides.yaml index d7332356e3..b05d036449 100644 --- a/src/dusk/randomizer/generator/data/text/text_overrides.yaml +++ b/src/dusk/randomizer/generator/data/text/text_overrides.yaml @@ -1,6 +1,7 @@ -#- Name: Foolish Get Item Text -# Group: 0 -# Message Id: 120 +- Name: Foolish Get Item Text + Group: 0 + Message Id: 120 + # #- Name: Ordon Spring Portal Get Item Text # Group: 0