// // Generated By: dol2asm // Translation Unit: d/save/d_save // #include "d/save/d_save.h" #include "dol2asm.h" #include "dolphin/types.h" #include "msl_c/string.h" // // Types: // struct daObjCarry_c { /* 80031CF8 */ void clrSaveFlag(); /* 80031D04 */ void setSaveFlag(); }; struct dSv_event_tmp_flag_c { static u8 const tempBitLabels[370 + 2 /* padding */]; }; struct dSv_event_flag_c { static u8 saveBitLabels[1644 + 4 /* padding */]; }; struct dStage_roomControl_c { /* 8002D9B0 */ static int getZoneNo(int); }; struct JMSMesgEntry_c {}; struct dMeter2Info_c { /* 8021C250 */ void getString(u32, char*, JMSMesgEntry_c*); /* 8021DCC4 */ void setHotSpringTimer(u8); /* 8021E290 */ void setSaveStageName(char const*); }; struct dComIfG_play_c { /* 8002B3B0 */ void getNowVibration(); }; struct Z2AudioMgr { /* 802CD888 */ void setOutputMode(u32); static u8 mAudioMgrPtr[4 + 4 /* padding */]; }; struct JUTGamePad { static u8 sRumbleSupported[4]; }; // // Forward References: // extern "C" static void dSv_item_rename__FUc(); extern "C" void init__21dSv_player_status_a_cFv(); extern "C" void setSelectItemIndex__21dSv_player_status_a_cFiUc(); extern "C" void getSelectItemIndex__21dSv_player_status_a_cCFi(); extern "C" void setMixItemIndex__21dSv_player_status_a_cFiUc(); extern "C" void getMixItemIndex__21dSv_player_status_a_cCFi(); extern "C" void getRupeeMax__21dSv_player_status_a_cCFv(); extern "C" void isMagicFlag__21dSv_player_status_a_cCFUc(); extern "C" void init__21dSv_player_status_b_cFv(); extern "C" void onDarkClearLV__21dSv_player_status_b_cFi(); extern "C" void isDarkClearLV__21dSv_player_status_b_cCFi(); extern "C" void onTransformLV__21dSv_player_status_b_cFi(); extern "C" void isTransformLV__21dSv_player_status_b_cCFi(); extern "C" void init__17dSv_horse_place_cFv(); extern "C" void set__17dSv_horse_place_cFPCcRC4cXyzsSc(); extern "C" void init__25dSv_player_return_place_cFv(); extern "C" void set__25dSv_player_return_place_cFPCcScUc(); extern "C" void init__33dSv_player_field_last_stay_info_cFv(); extern "C" void set__33dSv_player_field_last_stay_info_cFPCcRC4cXyzsScUc(); extern "C" void onRegionBit__33dSv_player_field_last_stay_info_cFi(); extern "C" void isRegionBit__33dSv_player_field_last_stay_info_cCFi(); extern "C" void init__27dSv_player_last_mark_info_cFv(); extern "C" void setWarpItemData__27dSv_player_last_mark_info_cFPCcRC4cXyzsScUcUc(); extern "C" void init__17dSv_player_item_cFv(); extern "C" void setItem__17dSv_player_item_cFiUc(); extern "C" void getItem__17dSv_player_item_cCFib(); extern "C" void setLineUpItem__17dSv_player_item_cFv(); extern "C" void getLineUpItem__17dSv_player_item_cCFi(); extern "C" void setBottleItemIn__17dSv_player_item_cFUcUc(); extern "C" void setEmptyBottleItemIn__17dSv_player_item_cFUc(); extern "C" void setEmptyBottle__17dSv_player_item_cFv(); extern "C" void setEmptyBottle__17dSv_player_item_cFUc(); extern "C" void setEquipBottleItemIn__17dSv_player_item_cFUcUc(); extern "C" void setEquipBottleItemEmpty__17dSv_player_item_cFUc(); extern "C" void checkBottle__17dSv_player_item_cFUc(); extern "C" void checkInsectBottle__17dSv_player_item_cFv(); extern "C" void checkEmptyBottle__17dSv_player_item_cFv(); extern "C" void setBombBagItemIn__17dSv_player_item_cFUcUcb(); extern "C" void setBombBagItemIn__17dSv_player_item_cFUcUcUcb(); extern "C" void setEmptyBombBagItemIn__17dSv_player_item_cFUcb(); extern "C" void setEmptyBombBagItemIn__17dSv_player_item_cFUcUcb(); extern "C" void setEmptyBombBag__17dSv_player_item_cFv(); extern "C" void setEmptyBombBag__17dSv_player_item_cFUcUc(); extern "C" void checkBombBag__17dSv_player_item_cFUc(); extern "C" void setWarashibeItem__17dSv_player_item_cFUc(); extern "C" void setRodTypeLevelUp__17dSv_player_item_cFv(); extern "C" void setBaitItem__17dSv_player_item_cFUc(); extern "C" void init__21dSv_player_get_item_cFv(); extern "C" void onFirstBit__21dSv_player_get_item_cFUc(); extern "C" void offFirstBit__21dSv_player_get_item_cFUc(); extern "C" void isFirstBit__21dSv_player_get_item_cCFUc(); extern "C" void init__24dSv_player_item_record_cFv(); extern "C" void setBombNum__24dSv_player_item_record_cFUcUc(); extern "C" void getBombNum__24dSv_player_item_record_cCFUc(); extern "C" void setBottleNum__24dSv_player_item_record_cFUcUc(); extern "C" void addBottleNum__24dSv_player_item_record_cFUcs(); extern "C" void getBottleNum__24dSv_player_item_record_cCFUc(); extern "C" void init__21dSv_player_item_max_cFv(); extern "C" void setBombNum__21dSv_player_item_max_cFUcUc(); extern "C" void getBombNum__21dSv_player_item_max_cCFUc(); extern "C" void init__20dSv_player_collect_cFv(); extern "C" void setCollect__20dSv_player_collect_cFiUc(); extern "C" void isCollect__20dSv_player_collect_cCFiUc(); extern "C" void onCollectCrystal__20dSv_player_collect_cFUc(); extern "C" void isCollectCrystal__20dSv_player_collect_cCFUc(); extern "C" void onCollectMirror__20dSv_player_collect_cFUc(); extern "C" void isCollectMirror__20dSv_player_collect_cCFUc(); extern "C" void init__17dSv_player_wolf_cFv(); extern "C" void init__16dSv_light_drop_cFv(); extern "C" void setLightDropNum__16dSv_light_drop_cFUcUc(); extern "C" void getLightDropNum__16dSv_light_drop_cCFUc(); extern "C" void onLightDropGetFlag__16dSv_light_drop_cFUc(); extern "C" void isLightDropGetFlag__16dSv_light_drop_cCFUc(); extern "C" void init__17dSv_letter_info_cFv(); extern "C" void onLetterGetFlag__17dSv_letter_info_cFi(); extern "C" void isLetterGetFlag__17dSv_letter_info_cCFi(); extern "C" void onLetterReadFlag__17dSv_letter_info_cFi(); extern "C" void isLetterReadFlag__17dSv_letter_info_cCFi(); extern "C" void init__18dSv_fishing_info_cFv(); extern "C" void addFishCount__18dSv_fishing_info_cFUc(); extern "C" void init__17dSv_player_info_cFv(); extern "C" void init__19dSv_player_config_cFv(); extern "C" void checkVibration__19dSv_player_config_cCFv(); extern "C" void getSound__19dSv_player_config_cFv(); extern "C" void setSound__19dSv_player_config_cFUc(); extern "C" void getVibration__19dSv_player_config_cFv(); extern "C" void setVibration__19dSv_player_config_cFUc(); extern "C" void init__12dSv_player_cFv(); extern "C" void init__12dSv_memBit_cFv(); extern "C" void onTbox__12dSv_memBit_cFi(); extern "C" void offTbox__12dSv_memBit_cFi(); extern "C" void isTbox__12dSv_memBit_cCFi(); extern "C" void onSwitch__12dSv_memBit_cFi(); extern "C" void offSwitch__12dSv_memBit_cFi(); extern "C" void isSwitch__12dSv_memBit_cCFi(); extern "C" void revSwitch__12dSv_memBit_cFi(); extern "C" void onItem__12dSv_memBit_cFi(); extern "C" void isItem__12dSv_memBit_cCFi(); extern "C" void onDungeonItem__12dSv_memBit_cFi(); extern "C" void isDungeonItem__12dSv_memBit_cCFi(); extern "C" void init__11dSv_event_cFv(); extern "C" void onEventBit__11dSv_event_cFUs(); extern "C" void offEventBit__11dSv_event_cFUs(); extern "C" void isEventBit__11dSv_event_cCFUs(); extern "C" void setEventReg__11dSv_event_cFUsUc(); extern "C" void getEventReg__11dSv_event_cCFUs(); extern "C" void init__14dSv_MiniGame_cFv(); extern "C" void init__12dSv_memory_cFv(); extern "C" void init__13dSv_memory2_cFv(); extern "C" void onVisitedRoom__13dSv_memory2_cFi(); extern "C" void offVisitedRoom__13dSv_memory2_cFi(); extern "C" void isVisitedRoom__13dSv_memory2_cFi(); extern "C" void init__12dSv_danBit_cFSc(); extern "C" void onSwitch__12dSv_danBit_cFi(); extern "C" void offSwitch__12dSv_danBit_cFi(); extern "C" void isSwitch__12dSv_danBit_cCFi(); extern "C" void revSwitch__12dSv_danBit_cFi(); extern "C" void onItem__12dSv_danBit_cFi(); extern "C" void isItem__12dSv_danBit_cCFi(); extern "C" void init__13dSv_zoneBit_cFv(); extern "C" void clearRoomSwitch__13dSv_zoneBit_cFv(); extern "C" void clearRoomItem__13dSv_zoneBit_cFv(); extern "C" void onSwitch__13dSv_zoneBit_cFi(); extern "C" void offSwitch__13dSv_zoneBit_cFi(); extern "C" void isSwitch__13dSv_zoneBit_cCFi(); extern "C" void revSwitch__13dSv_zoneBit_cFi(); extern "C" void onOneSwitch__13dSv_zoneBit_cFi(); extern "C" void offOneSwitch__13dSv_zoneBit_cFi(); extern "C" void isOneSwitch__13dSv_zoneBit_cCFi(); extern "C" void revOneSwitch__13dSv_zoneBit_cFi(); extern "C" void onItem__13dSv_zoneBit_cFi(); extern "C" void isItem__13dSv_zoneBit_cCFi(); extern "C" void onOneItem__13dSv_zoneBit_cFi(); extern "C" void isOneItem__13dSv_zoneBit_cCFi(); extern "C" void init__15dSv_zoneActor_cFv(); extern "C" void on__15dSv_zoneActor_cFi(); extern "C" void off__15dSv_zoneActor_cFi(); extern "C" void is__15dSv_zoneActor_cCFi(); extern "C" void init__10dSv_zone_cFi(); extern "C" void setRoom__13dSv_restart_cFRC4cXyzsSc(); extern "C" void set__17dSv_turnRestart_cFRC4cXyzsScUl(); extern "C" void init__10dSv_info_cFv(); extern "C" void init__10dSv_save_cFv(); extern "C" void getSave2__10dSv_save_cFi(); extern "C" void getSave__10dSv_info_cFi(); extern "C" void putSave__10dSv_info_cFi(); extern "C" void initZone__10dSv_info_cFv(); extern "C" void createZone__10dSv_info_cFi(); extern "C" void onSwitch__10dSv_info_cFii(); extern "C" void offSwitch__10dSv_info_cFii(); extern "C" void isSwitch__10dSv_info_cCFii(); extern "C" void revSwitch__10dSv_info_cFii(); extern "C" void onItem__10dSv_info_cFii(); extern "C" void isItem__10dSv_info_cCFii(); extern "C" void onActor__10dSv_info_cFii(); extern "C" void offActor__10dSv_info_cFii(); extern "C" void isActor__10dSv_info_cCFii(); extern "C" void memory_to_card__10dSv_info_cFPci(); extern "C" void card_to_memory__10dSv_info_cFPci(); extern "C" void initdata_to_card__10dSv_info_cFPci(); extern "C" u8 const tempBitLabels__20dSv_event_tmp_flag_c[370 + 2 /* padding */]; extern "C" extern char const* const d_save_d_save__stringBase0; extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; // // External References: // extern "C" void OSReport_Error(); extern "C" void setNowVibration__14dComIfG_play_cFUc(); extern "C" void getNowVibration__14dComIfG_play_cFv(); extern "C" void getZoneNo__20dStage_roomControl_cFi(); extern "C" void dComIfGs_setSelectItemIndex__FiUc(); extern "C" void dComIfGs_setMixItemIndex__FiUc(); extern "C" void dComIfGs_getMixItemIndex__Fi(); extern "C" void dComIfGp_setSelectItem__Fi(int); extern "C" s32 dComIfGs_getBottleMax__Fv(); extern "C" void dComIfGs_setKeyNum__FiUc(); extern "C" void __ct__13dSv_memory2_cFv(); extern "C" void __ct__12dSv_memory_cFv(); extern "C" void clrSaveFlag__12daObjCarry_cFv(); extern "C" void setSaveFlag__12daObjCarry_cFv(); extern "C" void setInitEventBit__Fv(); extern "C" void getString__13dMeter2Info_cFUlPcP14JMSMesgEntry_c(); extern "C" void setHotSpringTimer__13dMeter2Info_cFUc(); extern "C" void setSaveStageName__13dMeter2Info_cFPCc(); extern "C" void setOutputMode__10Z2AudioMgrFUl(); extern "C" void OSGetSoundMode(); extern "C" void OSGetTime(); extern "C" void __construct_array(); extern "C" void _savegpr_22(); extern "C" void _savegpr_26(); extern "C" void _savegpr_27(); extern "C" void _savegpr_28(); extern "C" void _savegpr_29(); extern "C" void _restgpr_22(); extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" void __div2i(); extern "C" void printf(); extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_meter2_info[248]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" u8 sRumbleSupported__10JUTGamePad[4]; // // Declarations: // // needs gameinfo #ifdef NONMATCHING inline int dComIfGs_isItemFirstBit(u8 i_no) { return g_dComIfG_gameInfo.getSaveFile().getPlayerGetItem().isFirstBit(i_no); } #endif static u8 dSv_item_rename(u8 item_id) { switch (item_id) { case OIL_BOTTLE_2: return OIL_BOTTLE; case RED_BOTTLE_2: return RED_BOTTLE; case OIL2: return OIL; default: return item_id; } } void dSv_player_status_a_c::init() { mMaxLife = 15; mLife = 12; mRupee = 0; mMaxOil = 0; mOil = 0; unk10 = 0; for (int i = 0; i < MAX_SELECT_ITEM; i++) { mSelectItem[i] = NO_ITEM; mMixItem[i] = NO_ITEM; dComIfGp_setSelectItem__Fi(i); } for (int i = 0; i < MAX_EQUIPMENT; i++) { mSelectEquip[i] = 0; } mSelectEquip[COLLECT_CLOTHING] = WEARS_CASUAL; mSelectEquip[COLLECT_SWORD] = NO_ITEM; mSelectEquip[COLLECT_SHIELD] = NO_ITEM; mSelectEquip[COLLECT_SMELL] = NO_ITEM; mSelectEquip[B_BUTTON_ITEM] = NO_ITEM; mWalletSize = WALLET; mMaxMagic = 0; mMagic = 0; mMagicFlag = 0; unk29 = 0; mTransformStatus = 0; for (int i = 0; i < 3; i++) { unk31[i] = 0; } } void dSv_player_status_a_c::setSelectItemIndex(signed int i_no, u8 item_index) { if (i_no < MAX_SELECT_ITEM) { mSelectItem[i_no] = item_index; } } u8 dSv_player_status_a_c::getSelectItemIndex(signed int i_no) const { if (i_no < MAX_SELECT_ITEM) { return mSelectItem[i_no]; } return 0; } void dSv_player_status_a_c::setMixItemIndex(signed int i_no, u8 item_index) { if (i_no < MAX_SELECT_ITEM) { mMixItem[i_no] = item_index; } } u8 dSv_player_status_a_c::getMixItemIndex(signed int i_no) const { if (i_no < MAX_SELECT_ITEM) { return mMixItem[i_no]; } return 0; } u16 dSv_player_status_a_c::getRupeeMax(void) const { if (mWalletSize < 3) { // if you make this a default, it wont match. Compiler, pls. switch (mWalletSize) { case WALLET: return 300; case BIG_WALLET: return 600; case GIANT_WALLET: return 1000; } } return 0; } /* 80032AF8-80032B50 02D438 0058+00 0/0 1/1 0/0 .text isMagicFlag__21dSv_player_status_a_cCFUc */ #ifdef NONMATCHING BOOL dSv_player_status_a_c::isMagicFlag(u8 i_magic) const { if (i_magic == 0) { return dComIfGs_isEventBit__FUs(0x2304); } return (mMagicFlag & (u8)(1 << i_magic)) ? TRUE : FALSE; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm BOOL dSv_player_status_a_c::isMagicFlag(u8 param_0) const { nofralloc #include "asm/d/save/d_save/isMagicFlag__21dSv_player_status_a_cCFUc.s" } #pragma pop #endif void dSv_player_status_b_c::init() { mDateIpl = 0; mTransformLevelFlag = 0; mDarkClearLevelFlag = 0; unk10 = 0; mTime = 255.0f; mDate = 0; for (int i = 0; i < 3; i++) { unk18[i] = 0; } } void dSv_player_status_b_c::onDarkClearLV(int flagOnOff) { mDarkClearLevelFlag |= (u8)(1 << flagOnOff); } BOOL dSv_player_status_b_c::isDarkClearLV(int unk) const { return mDarkClearLevelFlag & (u8)(1 << unk) ? TRUE : FALSE; } void dSv_player_status_b_c::onTransformLV(int flagOnOff) { mTransformLevelFlag |= (u8)(1 << flagOnOff); } BOOL dSv_player_status_b_c::isTransformLV(int unk) const { return mTransformLevelFlag & (u8)(1 << unk) ? TRUE : FALSE; } /* ############################################################################################## */ /* 80379234-80379234 005894 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ #pragma push #pragma force_active on SECTION_DEAD static char const* const stringBase_80379234 = ""; #pragma pop /* 80451D5C-80451D60 00035C 0004+00 3/3 0/0 0/0 .sdata2 @3813 */ SECTION_SDATA2 static u8 lit_3813[4] = { 0x00, 0x00, 0x00, 0x00, }; /* 80032C0C-80032C64 02D54C 0058+00 1/1 0/0 0/0 .text init__17dSv_horse_place_cFv */ #ifdef NONMATCHING // zero-initialized literal void dSv_horse_place_c::init(void) { f32 position_val; char* default_stage; default_stage = strcpy(mCurrentStage, (char*)lbl_80379234); position_val = lbl_80451D5C; mPosition.x = lbl_80451D5C; mPosition.y = position_val; mPosition.z = position_val; mXRotation = 0; mSpawnId = 0; mRoomId = 0; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_horse_place_c::init() { nofralloc #include "asm/d/save/d_save/init__17dSv_horse_place_cFv.s" } #pragma pop #endif void dSv_horse_place_c::set(const char* i_name, const cXyz& i_position, s16 i_x_rot, signed char i_room_id) { strcpy(mCurrentStage, i_name); mPosition = i_position; mXRotation = i_x_rot; mRoomId = i_room_id; } void dSv_player_return_place_c::init(void) { strcpy(mCurrentStage, (char*)"F_SP108"); mRoomId = 1; mSpawnId = 0; unk10 = 21; unk11 = 0; } void dSv_player_return_place_c::set(const char* i_name, s8 i_room_id, u8 i_spawn_id) { strcpy(mCurrentStage, i_name); mRoomId = i_room_id; mSpawnId = i_spawn_id; } /* 80032D60-80032DE0 02D6A0 0080+00 1/1 0/0 0/0 .text init__33dSv_player_field_last_stay_info_cFv */ // zero-initialized literal #ifdef NONMATCHING void dSv_player_field_last_stay_info_c::init() { f32 position_val; strcpy(mName, (char*)lbl_80379234); position_val = lbl_80451D5C; mPos.x = lbl_80451D5C; mPos.y = position_val; mPos.z = position_val; mAngleY = 0; mLastSpawnId = 0; mRegionNo = 1; mFieldDataExistFlag = false; mRegion = 0; for (int i = 0; i < 2; i++) { unk26[i] = 0; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_field_last_stay_info_c::init() { nofralloc #include "asm/d/save/d_save/init__33dSv_player_field_last_stay_info_cFv.s" } #pragma pop #endif void dSv_player_field_last_stay_info_c::set(const char* i_name, const cXyz& i_last_position, s16 i_last_angle, signed char i_last_spawn_id, u8 i_last_room_id) { strcpy(mName, i_name); mPos = i_last_position; mAngleY = i_last_angle; mLastSpawnId = i_last_spawn_id; mRegionNo = i_last_room_id; } void dSv_player_field_last_stay_info_c::onRegionBit(int i_region_bit) { if (i_region_bit < 0) { return; } if (8 <= i_region_bit) { return; } mRegion |= (u8)(1 << i_region_bit); } BOOL dSv_player_field_last_stay_info_c::isRegionBit(int param_1) const { if ((param_1 >= 0) && (param_1 < 8)) { return (mRegion & (u8)(1 << param_1)) ? TRUE : FALSE; } return false; } /* 80032EB0-80032F2C 02D7F0 007C+00 1/1 0/0 0/0 .text init__27dSv_player_last_mark_info_cFv */ // zero-initialized literal #ifdef NONMATCHING void dSv_player_last_mark_info_c::init(void) { f32 position; strcpy(mOoccooStage, (char*)lbl_80379234); position = lbl_80451D5C; mOoccooPosition.x = lbl_80451D5C; mOoccooPosition.y = position; mOoccooPosition.z = position; mOoccooXRotation = 0; mOoccooRoomId = 0; mOoccooSpawnId = 0; mWarpAcceptStage = -1; for (int i = 0; i < 3; i++) { unk25[i] = 0; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_last_mark_info_c::init() { nofralloc #include "asm/d/save/d_save/init__27dSv_player_last_mark_info_cFv.s" } #pragma pop #endif void dSv_player_last_mark_info_c::setWarpItemData(const char* i_ooccoo_stage, const cXyz& i_ooccoo_position, s16 i_ooccoo_angle, s8 i_ooccoo_room_id, u8 unk1, u8 unk2) { strcpy(mOoccooStage, i_ooccoo_stage); mOoccooPosition = i_ooccoo_position; mOoccooXRotation = i_ooccoo_angle; mOoccooRoomId = i_ooccoo_room_id; } void dSv_player_item_c::init(void) { for (int i = 0; i < 24; i++) { mItems[i] = NO_ITEM; mItemSlots[i] = NO_ITEM; } } /* 80032FB8-80033030 02D8F8 0078+00 11/11 45/45 2/2 .text setItem__17dSv_player_item_cFiUc */ // need gameinfo inline #ifdef NONMATCHING void dSv_player_item_c::setItem(int item_slot, u8 item_id) { if (item_slot < MAX_ITEM_SLOTS) { mItems[item_slot] = item_id; setLineUpItem(); } int select_item_index = DEFAULT_SELECT_ITEM_INDEX; do { if (item_slot == dComIfGs_getSelectItemIndex(select_item_index)) { dComIfGp_setSelectItem__Fi(select_item_index); } select_item_index++; } while (select_item_index < MAX_SELECT_ITEM - 1); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setItem(int param_0, u8 param_1) { nofralloc #include "asm/d/save/d_save/setItem__17dSv_player_item_cFiUc.s" } #pragma pop #endif /* ############################################################################################## */ /* 80379234-80379234 005894 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ #pragma push #pragma force_active on SECTION_DEAD static char const* const stringBase_8037923D = "合成アイテム不定===>%d, %d\n"; #pragma pop /* 80033030-800332F8 02D970 02C8+00 7/7 70/70 2/2 .text getItem__17dSv_player_item_cCFib */ #ifdef NONMATCHING u8 dSv_player_item_c::getItem(int item_idx, bool isComboItem) const { if (item_idx < MAX_ITEM_SLOTS) { if (isComboItem) { for (int i = 0; i < 2; i++) { if ((dComIfGs_getSelectItemIndex(i) == item_idx || item_idx == dComIfGs_getMixItemIndex__Fi(i)) && dComIfGs_getMixItemIndex__Fi(i) != NO_ITEM) { u8 item_id_2 = mItems[dComIfGs_getSelectItemIndex(i)]; u8 item_id_1 = mItems[dComIfGs_getMixItemIndex(i)]; // Get Bomb arrow check: Bow + Normal Bombs if ((item_id_2 == BOW && item_id_1 == NORMAL_BOMB) || (item_id_1 == BOW && item_id_2 == NORMAL_BOMB)) { return BOMB_ARROW; } // Get Bomb arrow check: Bow + Water Bombs if ((item_id_2 == BOW && item_id_1 == WATER_BOMB) || (item_id_1 == BOW && item_id_2 == WATER_BOMB)) { return BOMB_ARROW; } // Get Bomb arrow check: Bow + Bomblings if ((item_id_2 == BOW && item_id_1 == POKE_BOMB) || (item_id_1 == BOW && item_id_2 == POKE_BOMB)) { return BOMB_ARROW; } // Get Hawkeye check if ((item_id_2 == BOW && item_id_1 == HAWK_EYE) || (item_id_1 == BOW && item_id_2 == HAWK_EYE)) { return HAWK_ARROW; } // Get Rod w/ bee larva if ((item_id_2 == FISHING_ROD_1 && item_id_1 == BEE_CHILD) || (item_id_1 == FISHING_ROD_1 && item_id_2 == BEE_CHILD)) { return BEE_ROD; } // Get Rod w/ coral earring if ((item_id_2 == FISHING_ROD_1 && item_id_1 == ZORAS_JEWEL) || (item_id_1 == FISHING_ROD_1 && item_id_2 == ZORAS_JEWEL)) { return JEWEL_ROD; } // Get Rod w/ worm if ((item_id_2 == FISHING_ROD_1 && item_id_1 == WORM) || (item_id_1 == FISHING_ROD_1 && item_id_2 == WORM)) { return WORM_ROD; } if (i == 3) { if (dComIfGs_getSelectItemIndex(i) == 0 && dComIfGs_getMixItemIndex__Fi(i) == 0) { dComIfGs_setSelectItemIndex__FiUc(i, 0xFF); dComIfGs_setMixItemIndex__FiUc(i, 0xFF); return 0xFF; } } // 合成アイテム不定===>%d, %d\n // Uncertain combination item===>%d, %d\n OSReport_Error(lbl_80379234 + 9, item_id_2, item_id_1); } } } return mItems[item_idx]; } else { return NO_ITEM; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm u8 dSv_player_item_c::getItem(int param_0, bool param_1) const { nofralloc #include "asm/d/save/d_save/getItem__17dSv_player_item_cCFib.s" } #pragma pop #endif static u8 i_item_lst[23] = {0x0A, 0x08, 0x06, 0x02, 0x09, 0x04, 0x03, 0x00, 0x01, 0x17, 0x14, 0x05, 0x0F, 0x10, 0x11, 0x0B, 0x0C, 0x0D, 0x0E, 0x13, 0x12, 0x16, 0x15}; /* 800332F8-80033354 02DC38 005C+00 2/2 0/0 0/0 .text setLineUpItem__17dSv_player_item_cFv */ // this is close #ifdef NONMATCHING void dSv_player_item_c::setLineUpItem(void) { for (int i = 0; i < 24; i++) { mItemSlots[i] = NO_ITEM; } for (int i = 0; i < 23; i++) { for (int j = 0; j < 24; j++) { if (mItems[i_item_lst[j]] != NO_ITEM) { mItemSlots[i] = i_item_lst[j]; } } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setLineUpItem() { nofralloc #include "asm/d/save/d_save/setLineUpItem__17dSv_player_item_cFv.s" } #pragma pop #endif u8 dSv_player_item_c::getLineUpItem(int slot_number) const { if (slot_number < MAX_ITEM_SLOTS) { return mItemSlots[slot_number]; } return NO_ITEM; } /* 80033370-80033450 02DCB0 00E0+00 1/1 2/2 0/0 .text setBottleItemIn__17dSv_player_item_cFUcUc */ #ifdef NONMATCHING void dSv_player_item_c::setBottleItemIn(u8 i_item_id_1, u8 i_item_id_2) { u8 current_item_index; u8 new_item_index; current_item_index = dSv_item_rename(i_item_id_1); new_item_index = dSv_item_rename(i_item_id_2); for (int i = 0; i < 4; i++) { // sanitize input to make sure it's only a bottle if (current_item_index == items[i + 11]) { setItem(i + 11, new_item_index); // if hotsprings water, turn on the timer if (new_item_index == 107) { setHotSpringTimer(i + 11); } for (int j = 0; j < 4; j++) { j = getSelectItemIndex(i); if (i + 11 == j) { dComIfGp_setSelectItem__Fi(j); } } } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setBottleItemIn(u8 param_0, u8 param_1) { nofralloc #include "asm/d/save/d_save/setBottleItemIn__17dSv_player_item_cFUcUc.s" } #pragma pop #endif /* 80033450-80033494 02DD90 0044+00 0/0 26/26 0/0 .text * setEmptyBottleItemIn__17dSv_player_item_cFUc */ // this is 1 instruction off #ifdef NONMATCHING void dSv_player_item_c::setEmptyBottleItemIn(u8 i_item_id) { setBottleItemIn(EMPTY_BOTTLE, dSv_item_rename(i_item_id)); return; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setEmptyBottleItemIn(u8 param_0) { nofralloc #include "asm/d/save/d_save/setEmptyBottleItemIn__17dSv_player_item_cFUc.s" } #pragma pop #endif /* 80033494-80033514 02DDD4 0080+00 0/0 1/1 1/1 .text setEmptyBottle__17dSv_player_item_cFv */ // inline #ifdef NONMATCHING void dSv_player_item_c::setEmptyBottle(void) { for (int i = 0; i < 4; i++) { if (dComIfGs_getItem((u8)(i + 11), true) == NO_ITEM) { dComIfGs_setItem((u8)(i + 11), EMPTY_BOTTLE); return; } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setEmptyBottle() { nofralloc #include "asm/d/save/d_save/setEmptyBottle__17dSv_player_item_cFv.s" } #pragma pop #endif /* 80033514-80033598 02DE54 0084+00 0/0 3/3 0/0 .text setEmptyBottle__17dSv_player_item_cFUc */ // need gameinfo inline #ifdef NONMATCHING void dSv_player_item_c::setEmptyBottle(u8 item_id) { for (int i = 0; i < 4; i++) { if (dComIfGs_getItem((u8)(i + 11), true) == NO_ITEM) { dComIfGs_setItem((u8)(i + 11), item_id); return; } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setEmptyBottle(u8 param_0) { nofralloc #include "asm/d/save/d_save/setEmptyBottle__17dSv_player_item_cFUc.s" } #pragma pop #endif /* 80033598-800336BC 02DED8 0124+00 1/1 3/3 0/0 .text * setEquipBottleItemIn__17dSv_player_item_cFUcUc */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setEquipBottleItemIn(u8 param_0, u8 param_1) { nofralloc #include "asm/d/save/d_save/setEquipBottleItemIn__17dSv_player_item_cFUcUc.s" } #pragma pop void dSv_player_item_c::setEquipBottleItemEmpty(u8 selected_index) { setEquipBottleItemIn(selected_index, EMPTY_BOTTLE); } u8 dSv_player_item_c::checkBottle(u8 i_item_id) { u8 item_id; u8 num_bottles = 0; item_id = dSv_item_rename(i_item_id); for (int i = 0; i < BOTTLE_MAX; i++) { if (item_id == mItems[i + SLOT_11]) { num_bottles++; } } return num_bottles; } /* ############################################################################################## */ /* 803A7288-803A78F8 0043A8 066C+04 2/2 45/45 148/148 .data saveBitLabels__16dSv_event_flag_c */ SECTION_DATA u8 dSv_event_flag_c::saveBitLabels[1644 + 4 /* padding */] = { 0xFF, 0xFF, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x01, 0x80, 0x01, 0x40, 0x01, 0x20, 0x01, 0x10, 0x01, 0x08, 0x01, 0x04, 0x01, 0x02, 0x01, 0x01, 0x02, 0x80, 0x02, 0x40, 0x02, 0x20, 0x02, 0x10, 0x02, 0x08, 0x02, 0x04, 0x02, 0x02, 0x02, 0x01, 0x03, 0x80, 0x03, 0x40, 0x03, 0x20, 0x03, 0x10, 0x03, 0x08, 0x03, 0x04, 0x03, 0x02, 0x03, 0x01, 0x04, 0x80, 0x04, 0x40, 0x04, 0x20, 0x04, 0x10, 0x04, 0x08, 0x04, 0x04, 0x04, 0x02, 0x04, 0x01, 0x05, 0x80, 0x05, 0x40, 0x05, 0x20, 0x05, 0x10, 0x05, 0x08, 0x05, 0x04, 0x05, 0x02, 0x05, 0x01, 0x06, 0x80, 0x06, 0x40, 0x06, 0x20, 0x06, 0x10, 0x06, 0x08, 0x06, 0x04, 0x06, 0x02, 0x06, 0x01, 0x07, 0x80, 0x07, 0x40, 0x07, 0x20, 0x07, 0x10, 0x07, 0x08, 0x07, 0x04, 0x07, 0x02, 0x07, 0x01, 0x08, 0x80, 0x08, 0x40, 0x08, 0x20, 0x08, 0x10, 0x08, 0x08, 0x08, 0x04, 0x08, 0x02, 0x08, 0x01, 0x09, 0x80, 0x09, 0x40, 0x09, 0x20, 0x09, 0x10, 0x09, 0x08, 0x09, 0x04, 0x09, 0x02, 0x09, 0x01, 0x0A, 0x80, 0x0A, 0x40, 0x0A, 0x20, 0x0A, 0x10, 0x0A, 0x08, 0x0A, 0x04, 0x0A, 0x02, 0x0A, 0x01, 0x0B, 0x80, 0x0B, 0x40, 0x0B, 0x20, 0x0B, 0x10, 0x0B, 0x08, 0x0B, 0x04, 0x0B, 0x02, 0x0B, 0x01, 0x0C, 0x80, 0x0C, 0x40, 0x0C, 0x20, 0x0C, 0x10, 0x0C, 0x08, 0x0C, 0x04, 0x0C, 0x02, 0x0C, 0x01, 0x0D, 0x80, 0x0D, 0x40, 0x0D, 0x20, 0x0D, 0x10, 0x0D, 0x08, 0x0D, 0x04, 0x0D, 0x02, 0x0D, 0x01, 0x0E, 0x80, 0x0E, 0x40, 0x0E, 0x20, 0x0E, 0x10, 0x0E, 0x08, 0x0E, 0x04, 0x0E, 0x02, 0x0E, 0x01, 0x0F, 0x80, 0x0F, 0x40, 0x0F, 0x20, 0x0F, 0x10, 0x0F, 0x08, 0x0F, 0x04, 0x0F, 0x02, 0x0F, 0x01, 0x10, 0x80, 0x10, 0x40, 0x10, 0x20, 0x10, 0x10, 0x10, 0x08, 0x10, 0x04, 0x10, 0x02, 0x10, 0x01, 0x11, 0x80, 0x11, 0x40, 0x11, 0x20, 0x11, 0x10, 0x11, 0x08, 0x11, 0x04, 0x11, 0x02, 0x11, 0x01, 0x12, 0x80, 0x12, 0x40, 0x12, 0x20, 0x12, 0x10, 0x12, 0x08, 0x12, 0x04, 0x12, 0x02, 0x12, 0x01, 0x13, 0x80, 0x13, 0x40, 0x13, 0x20, 0x13, 0x10, 0x13, 0x08, 0x13, 0x04, 0x13, 0x02, 0x13, 0x01, 0x14, 0x80, 0x14, 0x40, 0x14, 0x20, 0x14, 0x10, 0x14, 0x08, 0x14, 0x04, 0x14, 0x02, 0x14, 0x01, 0x15, 0x80, 0x15, 0x40, 0x15, 0x20, 0x15, 0x10, 0x15, 0x08, 0x15, 0x04, 0x15, 0x02, 0x15, 0x01, 0x16, 0x80, 0x16, 0x40, 0x16, 0x20, 0x16, 0x10, 0x16, 0x08, 0x16, 0x04, 0x16, 0x02, 0x16, 0x01, 0xFF, 0x1F, 0x17, 0x80, 0x17, 0x40, 0x17, 0x20, 0x17, 0x10, 0x17, 0x08, 0x17, 0x04, 0x17, 0x02, 0x17, 0x01, 0x18, 0x80, 0x18, 0x40, 0x18, 0x20, 0x18, 0x10, 0xFE, 0xFF, 0xFD, 0xFF, 0xFC, 0xFF, 0xFB, 0xFF, 0x18, 0x08, 0x18, 0x04, 0x18, 0x02, 0x18, 0x01, 0x19, 0x80, 0x19, 0x40, 0x19, 0x20, 0x19, 0x10, 0x19, 0x08, 0x19, 0x04, 0x19, 0x02, 0x19, 0x01, 0x1A, 0x80, 0x1A, 0x40, 0x1A, 0x20, 0x1A, 0x10, 0x1A, 0x08, 0x1A, 0x04, 0x1A, 0x02, 0x1A, 0x01, 0x1B, 0x80, 0x1B, 0x40, 0x1B, 0x20, 0x1B, 0x10, 0x1B, 0x08, 0x1B, 0x04, 0x1B, 0x02, 0x1B, 0x01, 0x1C, 0x80, 0x1C, 0x40, 0x1C, 0x20, 0x1C, 0x10, 0x1C, 0x08, 0x1C, 0x04, 0x1C, 0x02, 0x1C, 0x01, 0x1D, 0x80, 0x1D, 0x40, 0x1D, 0x20, 0x1D, 0x10, 0x1D, 0x08, 0x1D, 0x04, 0x1D, 0x02, 0x1D, 0x01, 0x1E, 0x80, 0x1E, 0x40, 0x1E, 0x20, 0x1E, 0x10, 0x1E, 0x08, 0x1E, 0x04, 0x1E, 0x02, 0x1E, 0x01, 0x1F, 0x80, 0x1F, 0x40, 0x1F, 0x20, 0x1F, 0x10, 0x1F, 0x08, 0x1F, 0x04, 0x1F, 0x02, 0x1F, 0x01, 0x20, 0x80, 0x20, 0x40, 0x20, 0x20, 0x20, 0x10, 0x20, 0x08, 0x20, 0x04, 0x20, 0x02, 0x20, 0x01, 0x21, 0x80, 0x21, 0x40, 0x21, 0x20, 0x21, 0x10, 0x21, 0x08, 0x21, 0x04, 0x21, 0x02, 0x21, 0x01, 0x22, 0x80, 0x22, 0x40, 0x22, 0x20, 0x22, 0x10, 0x22, 0x08, 0x22, 0x04, 0x22, 0x02, 0x22, 0x01, 0x23, 0x80, 0x23, 0x40, 0x23, 0x20, 0x23, 0x10, 0x23, 0x08, 0x23, 0x04, 0x23, 0x02, 0x23, 0x01, 0x24, 0x80, 0x24, 0x40, 0x24, 0x20, 0x24, 0x10, 0x24, 0x08, 0x24, 0x04, 0x24, 0x02, 0x24, 0x01, 0x25, 0x80, 0x25, 0x40, 0x25, 0x20, 0x25, 0x10, 0x25, 0x08, 0x25, 0x04, 0x25, 0x02, 0x25, 0x01, 0x26, 0x80, 0x26, 0x40, 0x26, 0x20, 0x26, 0x10, 0x26, 0x08, 0x26, 0x04, 0x26, 0x02, 0x26, 0x01, 0x27, 0x80, 0x27, 0x40, 0x27, 0x20, 0x27, 0x10, 0x27, 0x08, 0x27, 0x04, 0x27, 0x02, 0x27, 0x01, 0x28, 0x80, 0x28, 0x40, 0x28, 0x20, 0x28, 0x10, 0x28, 0x08, 0x28, 0x04, 0x28, 0x02, 0x28, 0x01, 0x29, 0x80, 0x29, 0x40, 0x29, 0x20, 0x29, 0x10, 0x29, 0x08, 0x29, 0x04, 0x29, 0x02, 0x29, 0x01, 0x2A, 0x80, 0x2A, 0x40, 0x2A, 0x20, 0x2A, 0x10, 0x2A, 0x08, 0x2A, 0x04, 0x2A, 0x02, 0x2A, 0x01, 0x2B, 0x80, 0x2B, 0x40, 0x2B, 0x20, 0x2B, 0x10, 0x2B, 0x08, 0x2B, 0x04, 0x2B, 0x02, 0x2B, 0x01, 0x2C, 0x80, 0x2C, 0x40, 0x2C, 0x20, 0x2C, 0x10, 0x2C, 0x08, 0x2C, 0x04, 0x2C, 0x02, 0x2C, 0x01, 0x2D, 0x80, 0x2D, 0x40, 0x2D, 0x20, 0x2D, 0x10, 0x2D, 0x08, 0x2D, 0x04, 0x2D, 0x02, 0x2D, 0x01, 0x2E, 0x80, 0x2E, 0x40, 0x2E, 0x20, 0x2E, 0x10, 0x2E, 0x08, 0x2E, 0x04, 0x2E, 0x02, 0x2E, 0x01, 0x2F, 0x80, 0x2F, 0x40, 0x2F, 0x20, 0x2F, 0x10, 0x2F, 0x08, 0x2F, 0x04, 0x2F, 0x02, 0x2F, 0x01, 0x30, 0x80, 0x30, 0x40, 0x30, 0x20, 0x30, 0x10, 0x30, 0x08, 0x30, 0x04, 0x30, 0x02, 0x30, 0x01, 0x31, 0x80, 0x31, 0x40, 0x31, 0x20, 0x31, 0x10, 0x31, 0x08, 0x31, 0x04, 0x31, 0x02, 0x31, 0x01, 0x32, 0x80, 0x32, 0x40, 0x32, 0x20, 0x32, 0x10, 0x32, 0x08, 0x32, 0x04, 0x32, 0x02, 0x32, 0x01, 0x33, 0x80, 0x33, 0x40, 0x33, 0x20, 0x33, 0x10, 0x33, 0x08, 0x33, 0x04, 0x33, 0x02, 0x33, 0x01, 0x34, 0x80, 0x34, 0x40, 0x34, 0x20, 0x34, 0x10, 0x34, 0x08, 0x34, 0x04, 0x34, 0x02, 0x34, 0x01, 0x35, 0x80, 0x35, 0x40, 0x35, 0x20, 0x35, 0x10, 0x35, 0x08, 0x35, 0x04, 0x35, 0x02, 0x35, 0x01, 0x36, 0x80, 0x36, 0x40, 0x36, 0x20, 0x36, 0x10, 0x36, 0x08, 0x36, 0x04, 0x36, 0x02, 0x36, 0x01, 0x37, 0x80, 0x37, 0x40, 0x37, 0x20, 0x37, 0x10, 0x37, 0x08, 0xFA, 0xFF, 0xF9, 0xFF, 0x37, 0x04, 0x37, 0x02, 0x37, 0x01, 0x38, 0x80, 0x38, 0x40, 0x38, 0x20, 0x38, 0x10, 0x38, 0x08, 0x38, 0x04, 0x38, 0x02, 0x38, 0x01, 0x39, 0x80, 0x39, 0x40, 0x39, 0x20, 0x39, 0x10, 0x39, 0x08, 0x39, 0x04, 0x39, 0x02, 0x39, 0x01, 0x3A, 0x80, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x10, 0x3A, 0x08, 0x3A, 0x04, 0x3A, 0x02, 0x3A, 0x01, 0x3B, 0x80, 0x3B, 0x40, 0x3B, 0x20, 0x3B, 0x10, 0x3B, 0x08, 0x3B, 0x04, 0x3B, 0x02, 0x3B, 0x01, 0x3C, 0x80, 0x3C, 0x40, 0x3C, 0x20, 0x3C, 0x10, 0x3C, 0x08, 0x3C, 0x04, 0x3C, 0x02, 0x3C, 0x01, 0x3D, 0x80, 0x3D, 0x40, 0x3D, 0x20, 0x3D, 0x10, 0x3D, 0x08, 0x3D, 0x04, 0x3D, 0x02, 0x3D, 0x01, 0x3E, 0x80, 0x3E, 0x40, 0x3E, 0x20, 0x3E, 0x10, 0x3E, 0x08, 0x3E, 0x04, 0x3E, 0x02, 0xF8, 0xFF, 0xF7, 0xFF, 0x3E, 0x01, 0x3F, 0x80, 0x3F, 0x40, 0x3F, 0x20, 0x3F, 0x10, 0x3F, 0x08, 0x3F, 0x04, 0x3F, 0x02, 0x3F, 0x01, 0x40, 0x80, 0x40, 0x40, 0x40, 0x20, 0x40, 0x10, 0x40, 0x08, 0x40, 0x04, 0x40, 0x02, 0x40, 0x01, 0x41, 0x80, 0x41, 0x40, 0x41, 0x20, 0x41, 0x10, 0x41, 0x08, 0x41, 0x04, 0x41, 0x02, 0x41, 0x01, 0x42, 0x80, 0x42, 0x40, 0x42, 0x20, 0x42, 0x10, 0x42, 0x08, 0x42, 0x04, 0x42, 0x02, 0x42, 0x01, 0x43, 0x80, 0x43, 0x40, 0x43, 0x20, 0x43, 0x10, 0x43, 0x08, 0x43, 0x04, 0x43, 0x02, 0x43, 0x01, 0x44, 0x80, 0x44, 0x40, 0x44, 0x20, 0x44, 0x10, 0x44, 0x08, 0x44, 0x04, 0x44, 0x02, 0x44, 0x01, 0x45, 0x80, 0x45, 0x40, 0x45, 0x20, 0x45, 0x10, 0x45, 0x08, 0x45, 0x04, 0x45, 0x02, 0x45, 0x01, 0x46, 0x80, 0x46, 0x40, 0x46, 0x20, 0x46, 0x10, 0x46, 0x08, 0x46, 0x04, 0x46, 0x02, 0x46, 0x01, 0x47, 0x80, 0x47, 0x40, 0x47, 0x20, 0x47, 0x10, 0x47, 0x08, 0x47, 0x04, 0x47, 0x02, 0x47, 0x01, 0x48, 0x80, 0x48, 0x40, 0x48, 0x20, 0x48, 0x10, 0x48, 0x08, 0x48, 0x04, 0x48, 0x02, 0x48, 0x01, 0x49, 0x80, 0x49, 0x40, 0x49, 0x20, 0x49, 0x10, 0x49, 0x08, 0x49, 0x04, 0x49, 0x02, 0x49, 0x01, 0xFF, 0xFF, 0x4A, 0x40, 0x4A, 0x20, 0x4A, 0x10, 0x4A, 0x08, 0x4A, 0x04, 0x4A, 0x02, 0x4A, 0x01, 0x4B, 0x80, 0x4B, 0x40, 0x4B, 0x20, 0x4B, 0x10, 0x4B, 0x08, 0x4B, 0x04, 0x4B, 0x02, 0x4B, 0x01, 0x4C, 0x80, 0x4C, 0x40, 0x4C, 0x20, 0x4C, 0x10, 0x4C, 0x08, 0x4C, 0x04, 0x4C, 0x02, 0x4C, 0x01, 0x4D, 0x80, 0x4D, 0x40, 0x4D, 0x20, 0x4D, 0x10, 0x4D, 0x08, 0x4A, 0x80, 0x4D, 0x04, 0x4D, 0x02, 0x4D, 0x01, 0x4E, 0x80, 0x4E, 0x40, 0x4E, 0x20, 0x4E, 0x10, 0x4E, 0x08, 0x4E, 0x04, 0x4E, 0x02, 0x4E, 0x01, 0x4F, 0x80, 0x4F, 0x40, 0x4F, 0x20, 0x4F, 0x10, 0x4F, 0x08, 0x4F, 0x04, 0x4F, 0x02, 0x4F, 0x01, 0x50, 0x80, 0x50, 0x40, 0x50, 0x20, 0x50, 0x10, 0x50, 0x08, 0x50, 0x04, 0x50, 0x02, 0x50, 0x01, 0x51, 0x80, 0x51, 0x40, 0x51, 0x20, 0x51, 0x10, 0x51, 0x08, 0x51, 0x04, 0x51, 0x02, 0x51, 0x01, 0x52, 0x80, 0x52, 0x40, 0x52, 0x20, 0x52, 0x10, 0x52, 0x08, 0x52, 0x04, 0x52, 0x02, 0x52, 0x01, 0x53, 0x80, 0x53, 0x40, 0x53, 0x20, 0x53, 0x10, 0x53, 0x08, 0x53, 0x04, 0x53, 0x02, 0x53, 0x01, 0x54, 0x80, 0x54, 0x40, 0x54, 0x20, 0x54, 0x10, 0x54, 0x08, 0x54, 0x04, 0x54, 0x02, 0x54, 0x01, 0x55, 0x80, 0x55, 0x40, 0x55, 0x20, 0x55, 0x10, 0x55, 0x08, 0x55, 0x04, 0x55, 0x02, 0x55, 0x01, 0x56, 0x80, 0x56, 0x40, 0x56, 0x20, 0x56, 0x10, 0x56, 0x08, 0x56, 0x04, 0x56, 0x02, 0x56, 0x01, 0x57, 0x80, 0x57, 0x40, 0x57, 0x20, 0xF6, 0x3F, 0xF5, 0x7F, 0xF4, 0x7F, 0xF3, 0x7F, 0xF2, 0x7F, 0x57, 0x10, 0x57, 0x08, 0x57, 0x04, 0x57, 0x02, 0x57, 0x01, 0x58, 0x80, 0x58, 0x40, 0x58, 0x20, 0x58, 0x10, 0x58, 0x08, 0x58, 0x04, 0x58, 0x02, 0x58, 0x01, 0x59, 0x80, 0x59, 0x40, 0x59, 0x20, 0xF1, 0x1F, 0x59, 0x10, 0x59, 0x08, 0x59, 0x04, 0x59, 0x02, 0x59, 0x01, 0x5A, 0x80, 0x5A, 0x40, 0x5A, 0x20, 0x5A, 0x10, 0x5A, 0x08, 0x5A, 0x04, 0x5A, 0x02, 0x5A, 0x01, 0x5B, 0x80, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x10, 0x5B, 0x08, 0x5B, 0x04, 0x5B, 0x02, 0x5B, 0x01, 0x5C, 0x80, 0x5C, 0x40, 0x5C, 0x20, 0x5C, 0x10, 0x5C, 0x08, 0x5C, 0x04, 0x5C, 0x02, 0xF0, 0xFF, 0xEF, 0xFF, 0xEE, 0xFF, 0xED, 0xFF, 0xEC, 0xFF, 0xEB, 0xFF, 0x5C, 0x01, 0x5D, 0x80, 0x5D, 0x40, 0x5D, 0x20, 0x5D, 0x10, 0x5D, 0x08, 0x5D, 0x04, 0x5D, 0x02, 0x5D, 0x01, 0x5E, 0x80, 0x5E, 0x40, 0x5E, 0x20, 0x5E, 0x10, 0x5E, 0x08, 0x5E, 0x04, 0x5E, 0x02, 0x5E, 0x01, 0x5F, 0x80, 0x5F, 0x40, 0x5F, 0x20, 0x5F, 0x10, 0x5F, 0x08, 0x5F, 0x04, 0x5F, 0x02, 0x5F, 0x01, 0x60, 0x80, 0x60, 0x40, 0x60, 0x20, 0x60, 0x10, 0x60, 0x08, 0x60, 0x04, 0x60, 0x02, 0x60, 0x01, 0x61, 0x80, 0x61, 0x40, 0x61, 0x20, 0x61, 0x10, 0x61, 0x08, 0x61, 0x04, 0x61, 0x02, 0x61, 0x01, 0x62, 0x80, 0x62, 0x40, 0x62, 0x20, 0x62, 0x10, 0x62, 0x08, 0x62, 0x04, 0x62, 0x02, 0x62, 0x01, 0x63, 0x80, 0x63, 0x40, 0x63, 0x20, 0x63, 0x10, 0x63, 0x08, 0x63, 0x04, 0x63, 0x02, /* padding */ 0x00, 0x00, 0x00, 0x00, }; /* 80033754-800337EC 02E094 0098+00 0/0 1/1 0/0 .text checkInsectBottle__17dSv_player_item_cFv */ #ifdef NONMATCHING BOOL dSv_player_item_c::checkInsectBottle() { int i = 0; int j = 0; for (; i < 0x18; i++) { if (dComIfGs_isItemFirstBit(192 + i) && !dComIfGs_isEventBit(lbl_803A7288.unk0[0x191 + j])) { return 1; } j += 1; } return 0; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm int dSv_player_item_c::checkInsectBottle() { nofralloc #include "asm/d/save/d_save/checkInsectBottle__17dSv_player_item_cFv.s" } #pragma pop #endif u8 dSv_player_item_c::checkEmptyBottle(void) { u8 num = 0; for (int i = 0; i < BOTTLE_MAX; i++) { // Loop through the bottle slots (11 - 14) and increment counter for every empty bottle if (mItems[i + SLOT_11] == EMPTY_BOTTLE) { num++; } } return num; } /* 80033828-80033910 02E168 00E8+00 1/1 0/0 0/0 .text setBombBagItemIn__17dSv_player_item_cFUcUcb */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setBombBagItemIn(u8 param_0, u8 param_1, bool param_2) { nofralloc #include "asm/d/save/d_save/setBombBagItemIn__17dSv_player_item_cFUcUcb.s" } #pragma pop /* 80033910-80033A20 02E250 0110+00 1/1 0/0 0/0 .text * setBombBagItemIn__17dSv_player_item_cFUcUcUcb */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setBombBagItemIn(u8 param_0, u8 param_1, u8 param_2, bool param_3) { nofralloc #include "asm/d/save/d_save/setBombBagItemIn__17dSv_player_item_cFUcUcUcb.s" } #pragma pop void dSv_player_item_c::setEmptyBombBagItemIn(u8 param_1, bool param_2) { setBombBagItemIn(BOMB_BAG_LV1, param_1, param_2); } void dSv_player_item_c::setEmptyBombBagItemIn(u8 param_1, u8 param_2, bool param_3) { setBombBagItemIn(BOMB_BAG_LV1, param_1, param_2, param_3); } /* 80033A88-80033B08 02E3C8 0080+00 0/0 2/2 0/0 .text setEmptyBombBag__17dSv_player_item_cFv */ // this is a few instructions off #ifdef NONMATCHING void dSv_player_item_c::setEmptyBombBag(void) { int current_item_index; u8 uVar1; for (int i = 0; i < 3; i++) { current_item_index = (u8)(i + 15); uVar1 = getItem(current_item_index, true); if (uVar1 == 0xff) { setItem(current_item_index, 80); return; } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setEmptyBombBag() { nofralloc #include "asm/d/save/d_save/setEmptyBombBag__17dSv_player_item_cFv.s" } #pragma pop #endif /* 80033B08-80033BEC 02E448 00E4+00 0/0 3/3 0/0 .text setEmptyBombBag__17dSv_player_item_cFUcUc */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setEmptyBombBag(u8 param_0, u8 param_1) { nofralloc #include "asm/d/save/d_save/setEmptyBombBag__17dSv_player_item_cFUcUc.s" } #pragma pop u8 dSv_player_item_c::checkBombBag(u8 param_1) { u8 counter = 0; for (int i = 0; i < BOMB_BAG_MAX; i++) { // Loop through the bomb bag slots (15 - 17) and increment counter for every match if (param_1 == mItems[i + SLOT_15]) { counter++; } } return counter; } /* 80033C2C-80033CBC 02E56C 0090+00 0/0 2/2 1/1 .text setWarashibeItem__17dSv_player_item_cFUc */ // need gameinfo inline #ifdef NONMATCHING void dSv_player_item_c::setWarashibeItem(u8 i_item_id) { u32 select_item_index; dComIfGs_setItem(SLOT_21, i_item_id); // inline should be used, but it wrongly swaps instruction order ?? // dComIfGp_setItem(SLOT_21, i_item_id); g_dComIfG_gameInfo.setPlayUnkWarashibe1(SLOT_21); g_dComIfG_gameInfo.setPlayUnkWarashibe2(i_item_id); for (int i = 0; i < 4; i++) { select_item_index = dComIfGs_getSelectItemIndex((u8)i); if (select_item_index == SLOT_21) { dComIfGp_setSelectItem__Fi((u8)i); } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setWarashibeItem(u8 param_0) { nofralloc #include "asm/d/save/d_save/setWarashibeItem__17dSv_player_item_cFUc.s" } #pragma pop #endif void dSv_player_item_c::setRodTypeLevelUp(void) { int current_fishing_rod_item_id = mItems[SLOT_20]; switch (current_fishing_rod_item_id) { case BEE_ROD: { mItems[SLOT_20] = JEWEL_BEE_ROD; break; } case WORM_ROD: { mItems[SLOT_20] = JEWEL_WORM_ROD; break; } case FISHING_ROD_1: { mItems[SLOT_20] = JEWEL_ROD; break; } } for (int i = 0; i < 4; i++) { dComIfGp_setSelectItem__Fi(i); } } /* 80033D40-80033E40 02E680 0100+00 0/0 2/2 0/0 .text setBaitItem__17dSv_player_item_cFUc */ // need gameinfo inline #ifdef NONMATCHING void dSv_player_item_c::setBaitItem(u8 param_1) { switch (param_1) { case BEE_CHILD: { dComIfGs_isItemFirstBit(ZORAS_JEWEL) ? mItems[SLOT_20] = JEWEL_BEE_ROD : mItems[SLOT_20] = BEE_ROD; break; } case WORM: { dComIfGs_isItemFirstBit(ZORAS_JEWEL) ? mItems[SLOT_20] = JEWEL_WORM_ROD : mItems[SLOT_20] = WORM_ROD; break; } case NO_ITEM: { dComIfGs_isItemFirstBit(ZORAS_JEWEL) ? mItems[SLOT_20] = JEWEL_ROD : mItems[SLOT_20] = FISHING_ROD_1; break; } } for (int i = 0; i < 4; i++) { dComIfGp_setSelectItem__Fi(i); } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_item_c::setBaitItem(u8 param_0) { nofralloc #include "asm/d/save/d_save/setBaitItem__17dSv_player_item_cFUc.s" } #pragma pop #endif void dSv_player_get_item_c::init(void) { for (int i = 0; i < 8; i++) { mPauseMenuBitFields[i] = 0; } } /* 80033E60-80033E94 02E7A0 0034+00 0/0 3/3 1/1 .text onFirstBit__21dSv_player_get_item_cFUc */ // this is a few instructions off #ifdef NONMATCHING void dSv_player_get_item_c::onFirstBit(u8 i_itemno) { int tmp = (int)i_itemno; int tmp2 = (i_itemno >> 3) & 0xE0; // int uVar1 = ; mPauseMenuBitFields[tmp2] |= 1 << (tmp & 0x1F); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_get_item_c::onFirstBit(u8 param_0) { nofralloc #include "asm/d/save/d_save/onFirstBit__21dSv_player_get_item_cFUc.s" } #pragma pop #endif /* 80033E94-80033EC8 02E7D4 0034+00 0/0 7/7 1/1 .text offFirstBit__21dSv_player_get_item_cFUc */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_get_item_c::offFirstBit(u8 param_0) { nofralloc #include "asm/d/save/d_save/offFirstBit__21dSv_player_get_item_cFUc.s" } #pragma pop /* 80033EC8-80033F00 02E808 0038+00 4/4 87/87 2/2 .text isFirstBit__21dSv_player_get_item_cCFUc */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm int dSv_player_get_item_c::isFirstBit(u8 param_0) const { nofralloc #include "asm/d/save/d_save/isFirstBit__21dSv_player_get_item_cCFUc.s" } #pragma pop void dSv_player_item_record_c::init(void) { mArrowNum = 0; for (int i = 0; i < 3; i++) { mBombNum[i] = 0; } for (int i = 0; i < 4; i++) { mBottleNum[i] = 0; } mPachinkoNum = 0; for (int i = 0; i < 3; i++) { unk5[i] = 0; } } void dSv_player_item_record_c::setBombNum(u8 i_bagIdx, u8 bag_id) { mBombNum[i_bagIdx] = bag_id; } u8 dSv_player_item_record_c::getBombNum(u8 i_bagIdx) const { return mBombNum[i_bagIdx]; } void dSv_player_item_record_c::setBottleNum(u8 i_bottleIdx, u8 bottle_num) { mBottleNum[i_bottleIdx] = bottle_num; } /* 80033F9C-80034030 02E8DC 0094+00 0/0 1/1 0/0 .text addBottleNum__24dSv_player_item_record_cFUcs */ // need gameinfo inline #ifdef NONMATCHING u8 dSv_player_item_record_c::addBottleNum(u8 i_bottleIdx, s16 param_2) { int iVar3 = mBottleNum[i_bottleIdx] + param_2; dComIfGs_getItem((u8)(i_bottleIdx + 0xB), true); if (iVar3 < 0) { mBottleNum[i_bottleIdx] = 0; } else if (iVar3 > dComIfGs_getBottleMax__Fv()) { mBottleNum[i_bottleIdx] = dComIfGs_getBottleMax__Fv(); } else { mBottleNum[i_bottleIdx] = iVar3; } return mBottleNum[i_bottleIdx]; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm u8 dSv_player_item_record_c::addBottleNum(u8 param_0, s16 param_1) { nofralloc #include "asm/d/save/d_save/addBottleNum__24dSv_player_item_record_cFUcs.s" } #pragma pop #endif u8 dSv_player_item_record_c::getBottleNum(u8 i_bottleIdx) const { return mBottleNum[i_bottleIdx]; } void dSv_player_item_max_c::init(void) { for (int i = 0; i < 7; i++) { mItemMax[i] = 30; } setBombNum(NORMAL_BOMB, 30); setBombNum(WATER_BOMB, 15); setBombNum(POKE_BOMB, 10); mItemMax[7] = 0; } void dSv_player_item_max_c::setBombNum(u8 bomb_id, u8 bomb_max) { switch (bomb_id) { case NORMAL_BOMB: mItemMax[NORMAL_BOMB_MAX] = bomb_max; return; case WATER_BOMB: mItemMax[WATER_BOMB_MAX] = bomb_max; return; case POKE_BOMB: mItemMax[POKE_BOMB_MAX] = bomb_max; return; } } /* 800340F8-800341AC 02EA38 00B4+00 3/3 14/14 2/2 .text getBombNum__21dSv_player_item_max_cCFUc */ // need gameinfo inline #ifdef NONMATCHING u8 dSv_player_item_max_c::getBombNum(u8 param_1) const { u8 iVar3; iVar3 = 0x1; if (dComIfGs_isItemFirstBit(BOMB_BAG_LV2)) { iVar3 = 0x2; } switch (param_1) { case NORMAL_BOMB: return (u8)(mItemMax[NORMAL_BOMB_MAX] * iVar3); case WATER_BOMB: return (u8)(mItemMax[WATER_BOMB_MAX] * iVar3); case POKE_BOMB: return (u8)(mItemMax[POKE_BOMB_MAX] * iVar3); default: return 0; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm u8 dSv_player_item_max_c::getBombNum(u8 param_0) const { nofralloc #include "asm/d/save/d_save/getBombNum__21dSv_player_item_max_cCFUc.s" } #pragma pop #endif void dSv_player_collect_c::init(void) { for (int i = 0; i < 8; i++) { mItem[i] = 0; } unk8 = 0; mCrystal = 0; mMirror = 0; unk11 = 0xFF; mPohNum = 0; } void dSv_player_collect_c::setCollect(int i_item_type, u8 i_item) { mItem[i_item_type] |= (u8)(1 << i_item); } BOOL dSv_player_collect_c::isCollect(int i_item_type, u8 i_item) const { return mItem[i_item_type] & (u8)(1 << i_item) ? TRUE : FALSE; } void dSv_player_collect_c::onCollectCrystal(u8 i_item) { mCrystal |= (u8)(1 << i_item); } BOOL dSv_player_collect_c::isCollectCrystal(u8 i_item) const { return mCrystal & (u8)(1 << i_item) ? TRUE : FALSE; } void dSv_player_collect_c::onCollectMirror(u8 i_item) { mMirror |= (u8)(1 << i_item); } BOOL dSv_player_collect_c::isCollectMirror(u8 i_item) const { return mMirror & (u8)(1 << i_item) ? TRUE : FALSE; } void dSv_player_wolf_c::init(void) { for (int i = 0; i < 3; i++) { unk0[i] = 0; } unk3 = 0; } void dSv_light_drop_c::init(void) { for (int i = 0; i < 4; i++) { mLightDropNum[i] = 0; } mLightDropGetFlag = 0; for (int i = 0; i < 3; i++) { unk5[i] = 0; } } void dSv_light_drop_c::setLightDropNum(u8 i_nowLevel, u8 param_2) { if ((i_nowLevel < LIGHT_DROP_STAGE) || (i_nowLevel > 6)) { mLightDropNum[i_nowLevel] = param_2; } } u8 dSv_light_drop_c::getLightDropNum(u8 i_nowLevel) const { if ((i_nowLevel >= LIGHT_DROP_STAGE) && (i_nowLevel <= 6)) { return 0; } return mLightDropNum[i_nowLevel]; } void dSv_light_drop_c::onLightDropGetFlag(u8 i_nowLevel) { if ((i_nowLevel < LIGHT_DROP_STAGE) || (i_nowLevel > 6)) { mLightDropGetFlag |= (u8)(1 << i_nowLevel); } } BOOL dSv_light_drop_c::isLightDropGetFlag(u8 i_nowLevel) const { if ((i_nowLevel >= LIGHT_DROP_STAGE) && (i_nowLevel <= 6)) { return 0; } return mLightDropGetFlag & (u8)(1 << i_nowLevel) ? TRUE : FALSE; } void dSv_letter_info_c::init(void) { for (int i = 0; i < 2; i++) { mLetterGetBitfields[i] = 0; mLetterReadBitfields[i] = 0; } for (int i = 0; i < LETTER_INFO_BIT; i++) { unk16[i] = 0; } } void dSv_letter_info_c::onLetterGetFlag(int i_no) { mLetterGetBitfields[i_no >> 0x5] |= 0x1 << (i_no & 0x1F); } BOOL dSv_letter_info_c::isLetterGetFlag(int i_no) const { return mLetterGetBitfields[i_no >> 0x5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE; } void dSv_letter_info_c::onLetterReadFlag(int i_no) { mLetterReadBitfields[i_no >> 0x5] |= 0x1 << (i_no & 0x1F); } BOOL dSv_letter_info_c::isLetterReadFlag(int i_no) const { return mLetterReadBitfields[i_no >> 5] & 1 << (i_no & 0x1F) ? TRUE : FALSE; } void dSv_fishing_info_c::init(void) { for (int i = 0; i < 16; i++) { mFishCount[i] = 0; mMaxSize[i] = 0; } } void dSv_fishing_info_c::addFishCount(u8 fish_index) { if (mFishCount[fish_index] < 999) { mFishCount[fish_index] += 1; } } /* 80034518-800345AC 02EE58 0094+00 1/1 0/0 0/0 .text init__17dSv_player_info_cFv */ // a few instructions off #ifdef NONMATCHING void dSv_player_info_c::init(void) { unsigned long a = 0x382; unsigned long b = 0x383; JMSMesgEntry_c* c = 0; JMSMesgEntry_c* d = 0; d_meter2_info::dMeter2Info_c ok; ok.getString(a, (char*)mPlayerName, c); ok.getString(b, (char*)mHorseName, d); unk4 = 0; unk0 = 0; mTotalTime = 0; unk16 = 0; mDeathCount = 0; mClearCount = 0; for (int i = 0; i < 5; i++) { unk55[i] = 0; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_info_c::init() { nofralloc #include "asm/d/save/d_save/init__17dSv_player_info_cFv.s" } #pragma pop #endif /* 800345AC-80034644 02EEEC 0098+00 1/1 0/0 0/0 .text init__19dSv_player_config_cFv */ // needs mAudioMgrPtr setup #ifdef NONMATCHING void dSv_player_config_c::init(void) { u32 os_mSoundMode; unk0 = 1; os_mSoundMode = OSGetSoundMode(); if (os_mSoundMode == SOUND_MODE_MONO) { mSoundMode = SOUND_MODE_MONO; lbl_80451368->setOutputMode(SOUND_MODE_MONO); } else { mSoundMode = SOUND_MODE_STEREO; lbl_80451368->setOutputMode(SOUND_MODE_STEREO); } mAttentionType = 0; mVibration = 1; unk4 = 0; unk5 = 0; mShortCut = 0; mCalibrateDist = 0x15e; mCalValue = 0; mCameraControl = 0; mPointer = 1; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_player_config_c::init() { nofralloc #include "asm/d/save/d_save/init__19dSv_player_config_cFv.s" } #pragma pop #endif /* 80034644-80034684 02EF84 0040+00 0/0 4/4 0/0 .text checkVibration__19dSv_player_config_cCFv */ // need gameinfo inline #ifdef NONMATCHING u32 dSv_player_config_c::checkVibration(void) const { return _sRumbleSupported & 0x80000000 ? dComIfGp_getNowVibration() : 0; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm u32 dSv_player_config_c::checkVibration() const { nofralloc #include "asm/d/save/d_save/checkVibration__19dSv_player_config_cCFv.s" } #pragma pop #endif u8 dSv_player_config_c::getSound(void) { return mSoundMode; } void dSv_player_config_c::setSound(u8 i_mSoundMode) { mSoundMode = i_mSoundMode; } u8 dSv_player_config_c::getVibration(void) { return mVibration; } void dSv_player_config_c::setVibration(u8 i_mVibrationStatus) { mVibration = i_mVibrationStatus; } void dSv_player_c::init(void) { player_status_a.init(); player_status_b.init(); horse_place.init(); player_return.init(); player_last_field.init(); player_last_mark.init(); player_item.init(); player_get_item.init(); player_item_record.init(); player_item_max.init(); player_collect.init(); player_wolf.init(); light_drop.init(); letter_info.init(); fishing_info.init(); mPlayerInfo.init(); player_config.init(); } void dSv_memBit_c::init(void) { for (int i = 0; i < 2; i++) { mTbox[i] = 0; } for (int i = 0; i < 4; i++) { mSwitch[i] = 0; } mItem[0] = 0; mKeyNum = 0; mDungeonItem = 0; } void dSv_memBit_c::onTbox(int i_no) { mTbox[i_no >> 5] |= 1 << (i_no & 0x1F); } void dSv_memBit_c::offTbox(int i_no) { mTbox[i_no >> 5] &= ~(1 << (i_no & 0x1F)); } BOOL dSv_memBit_c::isTbox(int i_no) const { return 1 << (i_no & 0x1f) & mTbox[i_no >> 0x5] ? TRUE : FALSE; } void dSv_memBit_c::onSwitch(int i_no) { mSwitch[i_no >> 5] |= 1 << (i_no & 0x1F); } void dSv_memBit_c::offSwitch(int i_no) { mSwitch[i_no >> 5] &= ~(1 << (i_no & 0x1F)); } BOOL dSv_memBit_c::isSwitch(int i_no) const { return (mSwitch[i_no >> 0x5] & 0x1 << (i_no & 0x1F)) ? TRUE : FALSE; } /* 8003488C-800348C4 02F1CC 0038+00 1/1 0/0 0/0 .text revSwitch__12dSv_memBit_cFi */ // instruction in wrong place #ifdef NONMATCHING BOOL dSv_memBit_c::revSwitch(int i_no) { unsigned int tmp = 1 << (i_no & 0x1F); (mTbox + (i_no >> 0x5))[0x2] ^= tmp; return (mTbox + (i_no >> 0x5))[0x2] & tmp ? TRUE : FALSE; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm int dSv_memBit_c::revSwitch(int param_0) { nofralloc #include "asm/d/save/d_save/revSwitch__12dSv_memBit_cFi.s" } #pragma pop #endif void dSv_memBit_c::onItem(int i_no) { mItem[i_no >> 5] |= 1 << (i_no & 0x1F); } BOOL dSv_memBit_c::isItem(int i_no) const { return (mItem[i_no >> 0x5] & 1 << (i_no & 0x1F)) ? TRUE : FALSE; } void dSv_memBit_c::onDungeonItem(int i_no) { mDungeonItem |= (u8)(1 << i_no); } bool dSv_memBit_c::isDungeonItem(int i_no) const { return mDungeonItem & (u8)(1 << i_no) ? true : false; } void dSv_event_c::init(void) { for (int i = 0; i < MAX_EVENTS; i++) { mEvent[i] = 0; } setInitEventBit__Fv(); } void dSv_event_c::onEventBit(u16 i_no) { mEvent[(i_no >> 8)] |= (u8)i_no; } void dSv_event_c::offEventBit(u16 i_no) { mEvent[(i_no >> 8)] &= ~(u8)i_no; } BOOL dSv_event_c::isEventBit(u16 i_no) const { return mEvent[(i_no >> 8)] & (i_no & 0xFF) ? TRUE : FALSE; } void dSv_event_c::setEventReg(u16 param_1, u8 param_2) { u8 uVar1 = (param_1 >> 8); mEvent[uVar1] &= ~(u8)param_1; mEvent[uVar1] |= param_2; } u8 dSv_event_c::getEventReg(u16 param_1) const { return (u8)param_1 & mEvent[param_1 >> 8]; } void dSv_MiniGame_c::init(void) { unk0 = 0; for (int i = 0; i < 3; i++) { unk1[i] = 0; } unk4 = 120000; mBalloonScore = 0; mRaceGameTime = 0; unk16 = 0; unk20 = 0; } void dSv_memory_c::init(void) { mMemBit.init(); } void dSv_memory2_c::init(void) { for (int i = 0; i < 2; i++) { mVisitedRoom[i] = 0; } } void dSv_memory2_c::onVisitedRoom(int i_no) { mVisitedRoom[i_no >> 5] |= 1 << (i_no & 0x1F); } void dSv_memory2_c::offVisitedRoom(int i_no) { mVisitedRoom[i_no >> 5] &= ~(1 << (i_no & 0x1F)); } BOOL dSv_memory2_c::isVisitedRoom(int param_1) { return (1 << (param_1 & 0x1F) & mVisitedRoom[param_1 >> 5]) ? TRUE : FALSE; } bool dSv_danBit_c::init(s8 i_stage) { if (i_stage != mStageNo) { mSwitch[0] = 0; mSwitch[1] = 0; mItem[0] = 0; mItem[1] = 0; mItem[2] = 0; mItem[3] = 0; mStageNo = i_stage; unk1 = 0; for (int i = 0; i < 16; i++) { unk28[i] = 0xFFFF; } clrSaveFlag__12daObjCarry_cFv(); return true; } else { setSaveFlag__12daObjCarry_cFv(); return false; } } void dSv_danBit_c::onSwitch(int i_no) { mSwitch[i_no >> 5] |= 1 << (i_no & 0x1F); } void dSv_danBit_c::offSwitch(int i_no) { mSwitch[i_no >> 5] &= ~(1 << (i_no & 0x1F)); } BOOL dSv_danBit_c::isSwitch(int i_no) const { return mSwitch[i_no >> 0x5] & (0x1 << (i_no & 0x1F)) ? TRUE : FALSE; } BOOL dSv_danBit_c::revSwitch(int i_no) { int uVar1 = 1 << (i_no & 0x1F); mSwitch[i_no >> 5] ^= uVar1; return mSwitch[i_no >> 5] & uVar1 ? TRUE : FALSE; } void dSv_danBit_c::onItem(int i_no) { mItem[i_no >> 5] |= 1 << (i_no & 0x1F); } BOOL dSv_danBit_c::isItem(int i_no) const { return mItem[i_no >> 5] & 1 << (i_no & 0x1F) ? TRUE : FALSE; } void dSv_zoneBit_c::init(void) { for (int i = 0; i < 2; i++) { mSwitch[i] = 0; } for (int i = 0; i < 2; i++) { mItem[i] = 0; } mRoomSwitch = 0; mRoomItem = 0; } void dSv_zoneBit_c::clearRoomSwitch(void) { mRoomSwitch = 0; } void dSv_zoneBit_c::clearRoomItem(void) { mRoomItem = 0; } void dSv_zoneBit_c::onSwitch(int i_no) { mSwitch[i_no >> 4] |= (u16)(1 << (i_no & 0xF)); } void dSv_zoneBit_c::offSwitch(int i_no) { mSwitch[i_no >> 4] &= ~(1 << (i_no & 0xF)); } BOOL dSv_zoneBit_c::isSwitch(int i_no) const { return mSwitch[i_no >> 4] & 1 << (i_no & 0xF) ? TRUE : FALSE; } /* 80034D78-80034DAC 02F6B8 0034+00 1/1 0/0 0/0 .text revSwitch__13dSv_zoneBit_cFi */ // instruction in wrong place #ifdef NONMATCHING BOOL dSv_zoneBit_c::revSwitch(int i_no) { int uVar1 = 1 << (i_no & 0xF); switch_bitfield[i_no >> 4] ^= uVar1; return switch_bitfield[i_no >> 4] & uVar1 ? TRUE : FALSE; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm int dSv_zoneBit_c::revSwitch(int param_0) { nofralloc #include "asm/d/save/d_save/revSwitch__13dSv_zoneBit_cFi.s" } #pragma pop #endif void dSv_zoneBit_c::onOneSwitch(int i_no) { mRoomSwitch |= (u16)(1 << i_no); } void dSv_zoneBit_c::offOneSwitch(int i_no) { mRoomSwitch &= ~(1 << i_no); } BOOL dSv_zoneBit_c::isOneSwitch(int i_no) const { return mRoomSwitch & 1 << i_no ? TRUE : FALSE; } BOOL dSv_zoneBit_c::revOneSwitch(int i_no) { int iVar1 = 1 << i_no; mRoomSwitch ^= iVar1; return mRoomSwitch & iVar1 ? TRUE : FALSE; } void dSv_zoneBit_c::onItem(int i_no) { mItem[i_no >> 4] |= (u16)(1 << (i_no & 0xF)); } BOOL dSv_zoneBit_c::isItem(int i_no) const { return mItem[i_no >> 4] & 1 << (i_no & 0xF) ? TRUE : FALSE; } void dSv_zoneBit_c::onOneItem(int i_no) { mRoomItem |= (u16)(1 << i_no); } BOOL dSv_zoneBit_c::isOneItem(int i_no) const { return mRoomItem & 1 << i_no ? TRUE : FALSE; } void dSv_zoneActor_c::init(void) { for (int i = 0; i < 4; i++) { actor_bitfield[i] = 0; } } void dSv_zoneActor_c::on(int i_id) { actor_bitfield[i_id >> 5] |= 1 << (i_id & 0x1F); } void dSv_zoneActor_c::off(int i_id) { actor_bitfield[i_id >> 5] &= ~(1 << (i_id & 0x1F)); } BOOL dSv_zoneActor_c::is(int i_id) const { return actor_bitfield[i_id >> 5] & 1 << (i_id & 0x1F) ? TRUE : FALSE; } void dSv_zone_c::init(int i_roomNo) { mRoomNo = i_roomNo; mBit.init(); mActor.init(); } void dSv_restart_c::setRoom(const cXyz& i_position, s16 i_angleY, s8 i_roomNo) { mRoomNo = i_roomNo; mRoomPos = i_position; mRoomAngleY = i_angleY; } void dSv_turnRestart_c::set(const cXyz& i_position, s16 i_angleY, s8 param_3, u32 i_param) { mPosition = i_position; mAngleY = i_angleY; unk18 = param_3; mParam = i_param; } void dSv_info_c::init(void) { mSavedata.init(); mMemory.init(); mDan.init(-1); initZone(); mTmp.init(); } void dSv_save_c::init(void) { mPlayer.init(); for (int i = 0; i < STAGE_MAX; i++) { mSave[i].init(); } for (int i = 0; i < STAGE2_MAX; i++) { mSave2[i].init(); } mEvent.init(); mMiniGame.init(); } dSv_memory2_c* dSv_save_c::getSave2(int i_stage2No) { return &mSave2[i_stage2No]; } /* 800350BC-800350F0 02F9FC 0034+00 0/0 1/1 0/0 .text getSave__10dSv_info_cFi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_info_c::getSave(int param_0) { nofralloc #include "asm/d/save/d_save/getSave__10dSv_info_cFi.s" } #pragma pop /* 800350F0-8003514C 02FA30 005C+00 0/0 2/2 0/0 .text putSave__10dSv_info_cFi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_info_c::putSave(int param_0) { nofralloc #include "asm/d/save/d_save/putSave__10dSv_info_cFi.s" } #pragma pop void dSv_info_c::initZone(void) { for (int i = 0; i < 0x20; i++) { mZone[i].init(-1); } } u32 dSv_info_c::createZone(int param_1) { dSv_zone_c* zone = mZone; for (int i = 0; i < 0x20; zone++, i++) { if (zone->getRoomNo() < 0) { zone->init(param_1); return i; } } return -1; } void dSv_info_c::onSwitch(int i_no, int i_roomNo) { if ((i_no == -1) || (i_no == 0xFF)) { return; } if (i_no < 0x80) { mMemory.getMemBit().onSwitch(i_no); } else if (i_no < 0xc0) { mDan.onSwitch(i_no - 0x80); } else { int zoneId = dStage_roomControl_c::getZoneNo(i_roomNo); if (i_no < 0xE0) { mZone[zoneId].getZoneBit().onSwitch(i_no - 0xC0); } else { mZone[zoneId].getZoneBit().onOneSwitch(i_no - 0xE0); } } } void dSv_info_c::offSwitch(int i_no, int i_roomNo) { if ((i_no == -1) || (i_no == 0xFF)) { return; } if (i_no < 0x80) { mMemory.getMemBit().offSwitch(i_no); } else if (i_no < 0xc0) { mDan.offSwitch(i_no - 0x80); } else { int zoneId = dStage_roomControl_c::getZoneNo(i_roomNo); if (i_no < 0xE0) { mZone[zoneId].getZoneBit().offSwitch(i_no - 0xC0); } else { mZone[zoneId].getZoneBit().offOneSwitch(i_no - 0xE0); } } } BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) const { int value; if ((i_no == -1) || (i_no == 0xFF)) { return FALSE; } if (i_no < 0x80) { value = mMemory.getMemBitConst().isSwitch(i_no); } else if (i_no < 0xc0) { value = mDan.isSwitch(i_no - 0x80); } else { int zoneId = dStage_roomControl_c::getZoneNo(i_roomNo); if ((zoneId < 0) || (zoneId >= 0x20)) { value = FALSE; } else { if (i_no < 0xE0) { value = mZone[zoneId].getZoneBitConst().isSwitch(i_no - 0xC0); } else { value = mZone[zoneId].getZoneBitConst().isOneSwitch(i_no - 0xE0); } } } return value; } BOOL dSv_info_c::revSwitch(int i_no, int i_roomNo) { int value; if ((i_no == -1) || (i_no == 0xFF)) { return FALSE; } if (i_no < 0x80) { value = mMemory.getMemBit().revSwitch(i_no); } else if (i_no < 0xC0) { value = mDan.revSwitch(i_no - 0x80); } else { int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo); if (i_no < 0xE0) { value = mZone[zoneNo].getZoneBit().revSwitch(i_no - 0xC0); } else { value = mZone[zoneNo].getZoneBit().revOneSwitch(i_no - 0xE0); } } return value; } void dSv_info_c::onItem(int i_no, int i_roomNo) { if ((i_no == -1) || (i_no == 0xFF)) { return; } if (i_no < 0x80) { mDan.onItem(i_no); } else if (i_no < 0xA0) { mMemory.getMemBit().onItem(i_no - 0x80); } else { int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo); if (i_no < 0xC0) { mZone[zoneNo].getZoneBit().onItem(i_no - 0xA0); } else { mZone[zoneNo].getZoneBit().onOneItem(i_no - 0xC0); } } } BOOL dSv_info_c::isItem(int i_no, int i_roomNo) const { int value; if ((i_no == -1) || (i_no == 0xFF)) { return FALSE; } if (i_no < 0x80) { value = mDan.isItem(i_no); } else if (i_no < 0xA0) { value = mMemory.getMemBitConst().isItem(i_no - 0x80); } else { int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo); if (i_no < 0xC0) { value = mZone[zoneNo].getZoneBitConst().isItem(i_no - 0xA0); } else { value = mZone[zoneNo].getZoneBitConst().isOneItem(i_no - 0xC0); } } return value; } void dSv_info_c::onActor(int i_id, int i_roomNo) { if (i_id == -1 || i_id == dSv_zoneActor_c::ACTOR_MAX || i_roomNo == -1) { return; } int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo); mZone[zoneNo].getZoneActor().on(i_id); } void dSv_info_c::offActor(int i_id, int i_roomNo) { if (i_id == -1 || i_id == dSv_zoneActor_c::ACTOR_MAX || i_roomNo == -1) { return; } int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo); mZone[zoneNo].getZoneActor().off(i_id); } BOOL dSv_info_c::isActor(int i_id, int i_roomNo) const { if (i_id == -1 || i_id == dSv_zoneActor_c::ACTOR_MAX || i_roomNo == -1) { return FALSE; } int ActorZoneNo = dStage_roomControl_c::getZoneNo(i_roomNo); return mZone[ActorZoneNo].getZoneActorConst().is(i_id); } /* ############################################################################################## */ /* 80379234-80379234 005894 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ #pragma push #pragma force_active on SECTION_DEAD static char const* const stringBase_8037925D = "Write size:%d\n"; SECTION_DEAD static char const* const stringBase_8037926C = "SAVE size:%d\n"; #pragma pop /* 80035798-80035A04 0300D8 026C+00 0/0 1/1 0/0 .text memory_to_card__10dSv_info_cFPci */ #ifdef NONMATCHING extern u8 lbl_803F6094[0x10100]; void dSv_info_c::memory_to_card(char* param_1, int param_2) { BOOL bVar1 = FALSE; int uVar12 = 0; BOOL bVar6 = dComIfGs_isEventBit__FUs(0x1B08); if (!tmp) { BOOL bVar7 = dComIfGs_isEventBit__FUs(0x1B20); BOOL tmp = bVar7; bVar7 = dComIfGs_isEventBit__FUs(0x1B10); BOOL tmp2 = bVar7; dComIfGs_offEventBit(0x1B20); dComIfGs_offEventBit(0x1B10); } BOOL iVar4 = dComIfGs_isItemFirstBit(KANTERA); if (iVar4) { dComIfGs_setItem(SLOT_1, KANTERA); u16 current_lantern_oil = dComIfGs_getOil(); u8 oil_gauge_backup = dMeter2Info_getOilGaugeBackUp(); dComIfGs_setOil(oil_gauge_backup & 0xFFFF); bVar1 = TRUE; } int uVar3 = g_dComIfG_gameInfo + 0xF2C; int iVar2 = g_dComIfG_gameInfo + 0xF28; u32* ptr = lbl_803F6094 + 0x9f6c; OSTime time = OSGetTime(); OSTime newTime = time >> 0x20; int newTime2 = newTime - uVar3; int newTime3 = newTime2 + g_dComIfG_gameInfo + 0xF30 int newTime4 = g_dComIfG_gameInfo + 0xF78 s64 sVar13 = __div2i((int)((ulonglong)uVar8 >> 0x20), (int)uVar8, 0x0, _DAT_800000f8 >> 0x2); BOOL bVar7 = } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_info_c::memory_to_card(char* param_0, int param_1) { nofralloc #include "asm/d/save/d_save/memory_to_card__10dSv_info_cFPci.s" } #pragma pop #endif /* ############################################################################################## */ /* 80379234-80379234 005894 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ #pragma push #pragma force_active on SECTION_DEAD static char const* const stringBase_8037927A = "LOAD size:%d\n"; #pragma pop /* 80035A04-80035BD0 030344 01CC+00 0/0 2/2 0/0 .text card_to_memory__10dSv_info_cFPci */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_info_c::card_to_memory(char* param_0, int param_1) { nofralloc #include "asm/d/save/d_save/card_to_memory__10dSv_info_cFPci.s" } #pragma pop /* ############################################################################################## */ /* 80379234-80379234 005894 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ #pragma push #pragma force_active on SECTION_DEAD static char const* const stringBase_80379288 = "INIT size:%d\n"; /* @stringBase0 padding */ SECTION_DEAD static char const* const pad_80379296 = "\0"; #pragma pop /* 80035BD0-80035C88 030510 00B8+00 0/0 3/3 0/0 .text initdata_to_card__10dSv_info_cFPci */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dSv_info_c::initdata_to_card(char* param_0, int param_1) { nofralloc #include "asm/d/save/d_save/initdata_to_card__10dSv_info_cFPci.s" } #pragma pop /* ############################################################################################## */ /* 803790C0-80379234 005720 0172+02 0/0 17/17 7/7 .rodata tempBitLabels__20dSv_event_tmp_flag_c */ SECTION_RODATA u8 const dSv_event_tmp_flag_c::tempBitLabels[370 + 2 /* padding */] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0x00, 0x40, 0xFD, 0xFF, 0xFC, 0xFF, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x01, 0x80, 0x01, 0x40, 0x01, 0x20, 0x01, 0x10, 0x01, 0x08, 0x01, 0x04, 0x01, 0x02, 0x01, 0x01, 0x02, 0x80, 0x02, 0x40, 0x02, 0x20, 0x02, 0x10, 0x02, 0x08, 0x02, 0x04, 0x02, 0x02, 0x02, 0x01, 0x03, 0x80, 0x03, 0x40, 0x03, 0x20, 0x03, 0x10, 0xFB, 0xFF, 0x03, 0x08, 0x03, 0x04, 0x03, 0x02, 0x03, 0x01, 0x04, 0x80, 0x04, 0x40, 0x04, 0x20, 0x04, 0x10, 0x04, 0x08, 0x04, 0x04, 0x04, 0x02, 0x04, 0x01, 0x05, 0x80, 0x05, 0x40, 0x05, 0x20, 0x05, 0x10, 0x05, 0x08, 0x05, 0x04, 0x05, 0x02, 0x05, 0x01, 0x06, 0x80, 0x06, 0x40, 0x06, 0x20, 0x06, 0x10, 0x06, 0x08, 0x06, 0x04, 0x06, 0x02, 0x06, 0x01, 0x07, 0x80, 0x07, 0x40, 0x07, 0x20, 0x07, 0x10, 0x07, 0x08, 0x07, 0x04, 0x07, 0x02, 0x07, 0x01, 0x08, 0x80, 0x08, 0x40, 0x08, 0x20, 0x08, 0x10, 0x08, 0x08, 0x08, 0x04, 0x08, 0x02, 0x08, 0x01, 0x09, 0x80, 0x09, 0x40, 0x09, 0x20, 0x09, 0x10, 0x09, 0x08, 0x09, 0x04, 0x09, 0x02, 0x09, 0x01, 0x0A, 0x80, 0x0A, 0x40, 0x0A, 0x20, 0x0A, 0x10, 0x0A, 0x08, 0x0A, 0x04, 0x0A, 0x02, 0x0A, 0x01, 0x0B, 0x80, 0x0B, 0x40, 0x0B, 0x20, 0x0B, 0x10, 0x0B, 0x08, 0x0B, 0x04, 0xFA, 0xFF, 0xF9, 0xFF, 0xF8, 0xFF, 0xF7, 0xFF, 0xF6, 0xFF, 0xF5, 0xFF, 0x0B, 0x02, 0x0B, 0x01, 0x0C, 0x80, 0x0C, 0x40, 0x0C, 0x20, 0x0C, 0x10, 0x0C, 0x08, 0xF4, 0xFF, 0xF3, 0xFF, 0x0C, 0x04, 0x0C, 0x02, 0x0C, 0x01, 0x0D, 0x80, 0x0D, 0x40, 0x0D, 0x20, 0x0D, 0x10, 0x0D, 0x08, 0x0D, 0x04, 0x0D, 0x02, 0x0D, 0x01, 0x0E, 0x80, 0x0E, 0x40, 0x0E, 0x20, 0x0E, 0x10, 0x0E, 0x08, 0x0E, 0x04, 0x0E, 0x02, 0x0E, 0x01, 0x0F, 0x80, 0x0F, 0x40, 0x0F, 0x20, 0x0F, 0x10, 0x0F, 0x08, 0x0F, 0x04, 0x0F, 0x02, 0x0F, 0x01, 0x10, 0x80, 0x10, 0x40, 0x10, 0x20, 0x10, 0x10, 0x10, 0x08, 0x10, 0x04, 0x10, 0x02, 0x10, 0x01, 0x11, 0x80, 0x11, 0x40, 0x11, 0x20, 0x11, 0x10, 0x11, 0x08, 0x11, 0x04, 0x11, 0x02, 0x11, 0x01, 0x12, 0x80, 0x12, 0x40, 0x12, 0x20, 0x12, 0x10, 0x12, 0x08, 0x12, 0x04, 0x12, 0x02, 0x12, 0x01, 0x13, 0x80, 0x13, 0x40, 0x13, 0x20, 0x13, 0x10, 0x13, 0x08, 0x13, 0x04, 0x13, 0x02, 0x13, 0x01, 0x14, 0x80, 0x14, 0x40, 0x14, 0x20, 0x14, 0x10, 0x14, 0x08, 0x14, 0x04, 0x14, 0x02, 0x14, 0x01, 0x15, 0x80, 0xF2, 0xFF, /* padding */ 0x00, 0x00, }; COMPILER_STRIP_GATE(0x803790C0, &dSv_event_tmp_flag_c::tempBitLabels); /* 80379234-80379234 005894 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */