Files
dusklight/src/d/save/d_save.cpp
T
2022-07-01 00:12:01 +02:00

1950 lines
63 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: d/save/d_save
//
#include "d/save/d_save.h"
#include "Z2AudioLib/Z2AudioMgr.h"
#include "d/com/d_com_inf_game.h"
#include "d/meter/d_meter2_info.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "rel/d/a/obj/d_a_obj_carry/d_a_obj_carry.h"
//
// 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 setNowVibration__14dComIfG_play_cFUc();
extern "C" void getNowVibration__14dComIfG_play_cFv();
extern "C" void getZoneNo__20dStage_roomControl_cFi();
extern "C" void dComIfGs_setSelectItemIndex__FiUc(int, u8);
extern "C" void dComIfGs_setMixItemIndex__FiUc(int, u8);
extern "C" u8 dComIfGs_getMixItemIndex__Fi(int);
extern "C" void dComIfGp_setSelectItem__Fi(int);
extern "C" u8 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 __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" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
extern "C" u8 sRumbleSupported__10JUTGamePad[4];
//
// Declarations:
//
static u8 dSv_item_rename(u8 i_itemNo) {
switch (i_itemNo) {
case OIL_BOTTLE_2:
return OIL_BOTTLE;
case RED_BOTTLE_2:
return RED_BOTTLE;
case OIL2:
return OIL;
default:
return i_itemNo;
}
}
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(i);
}
for (int i = 0; i < MAX_EQUIPMENT; i++) {
mSelectEquip[i] = 0;
}
mSelectEquip[COLLECT_CLOTHING] = WEAR_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 = TF_STATUS_HUMAN;
for (int i = 0; i < 3; i++) {
unk31[i] = 0;
}
}
void dSv_player_status_a_c::setSelectItemIndex(int i_no, u8 item_index) {
if (i_no < MAX_SELECT_ITEM) {
mSelectItem[i_no] = item_index;
}
}
u8 dSv_player_status_a_c::getSelectItemIndex(int i_no) const {
if (i_no < MAX_SELECT_ITEM) {
return mSelectItem[i_no];
}
return 0;
}
void dSv_player_status_a_c::setMixItemIndex(int i_no, u8 item_index) {
if (i_no < MAX_SELECT_ITEM) {
mMixItem[i_no] = item_index;
}
}
u8 dSv_player_status_a_c::getMixItemIndex(int i_no) const {
if (i_no < MAX_SELECT_ITEM) {
return mMixItem[i_no];
}
return 0;
}
u16 dSv_player_status_a_c::getRupeeMax() 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;
}
BOOL dSv_player_status_a_c::isMagicFlag(u8 i_magic) const {
if (i_magic == 0) {
return i_dComIfGs_isEventBit(0x2304); // Magic Unlocked
}
return (mMagicFlag & (u8)(1 << i_magic)) ? TRUE : FALSE;
}
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 i_no) {
mDarkClearLevelFlag |= (u8)(1 << i_no);
}
BOOL dSv_player_status_b_c::isDarkClearLV(int i_no) const {
return mDarkClearLevelFlag & (u8)(1 << i_no) ? TRUE : FALSE;
}
void dSv_player_status_b_c::onTransformLV(int i_no) {
mTransformLevelFlag |= (u8)(1 << i_no);
}
BOOL dSv_player_status_b_c::isTransformLV(int i_no) const {
return mTransformLevelFlag & (u8)(1 << i_no) ? TRUE : FALSE;
}
void dSv_horse_place_c::init() {
strcpy(mName, "");
mPos.set(0.0f, 0.0f, 0.0f);
mAngleY = 0;
mSpawnId = 0;
mRoomNo = 0;
}
void dSv_horse_place_c::set(const char* i_name, const cXyz& i_pos, s16 i_angle, s8 i_roomNo) {
strcpy(mName, i_name);
mPos = i_pos;
mAngleY = i_angle;
mRoomNo = i_roomNo;
}
void dSv_player_return_place_c::init() {
strcpy(mName, "F_SP108");
mRoomNo = 1;
mPlayerStatus = 0;
unk10 = 21;
unk11 = 0;
}
void dSv_player_return_place_c::set(const char* i_name, s8 i_roomNo, u8 i_status) {
strcpy(mName, i_name);
mRoomNo = i_roomNo;
mPlayerStatus = i_status;
}
void dSv_player_field_last_stay_info_c::init() {
strcpy(mName, "");
mPos.set(0.0f, 0.0f, 0.0f);
mAngleY = 0;
mLastSpawnId = 0;
mRegionNo = 1;
mFieldDataExistFlag = false;
mRegion = 0;
for (int i = 0; i < 2; i++) {
unk26[i] = 0;
}
}
void dSv_player_field_last_stay_info_c::set(const char* i_name, const cXyz& i_pos, s16 i_angle,
s8 i_spawn, u8 i_regionNo) {
strcpy(mName, i_name);
mPos = i_pos;
mAngleY = i_angle;
mLastSpawnId = i_spawn;
mRegionNo = i_regionNo;
}
void dSv_player_field_last_stay_info_c::onRegionBit(int i_region) {
if (i_region >= 0 && i_region < 8) {
mRegion |= (u8)(1 << i_region);
}
}
BOOL dSv_player_field_last_stay_info_c::isRegionBit(int i_region) const {
if (i_region >= 0 && i_region < 8) {
return (mRegion & (u8)(1 << i_region)) ? TRUE : FALSE;
}
return false;
}
void dSv_player_last_mark_info_c::init() {
strcpy(mName, "");
mPos.set(0.0f, 0.0f, 0.0f);
mAngleY = 0;
mRoomNo = 0;
mSpawnId = 0;
mWarpAcceptStage = -1;
for (int i = 0; i < 3; i++) {
unk25[i] = 0;
}
}
void dSv_player_last_mark_info_c::setWarpItemData(const char* i_name, const cXyz& i_pos,
s16 i_angle, s8 i_roomNo, u8 unk1, u8 unk2) {
strcpy(mName, i_name);
mPos.set(i_pos);
mAngleY = i_angle;
mRoomNo = i_roomNo;
}
void dSv_player_item_c::init() {
for (int i = 0; i < MAX_ITEM_SLOTS; i++) {
mItems[i] = NO_ITEM;
mItemSlots[i] = NO_ITEM;
}
}
void dSv_player_item_c::setItem(int item_slot, u8 i_itemNo) {
if (item_slot < MAX_ITEM_SLOTS) {
mItems[item_slot] = i_itemNo;
setLineUpItem();
}
for (int i = DEFAULT_SELECT_ITEM_INDEX; i < MAX_SELECT_ITEM - 1; i++) {
if (item_slot == dComIfGs_getSelectItemIndex(i)) {
dComIfGp_setSelectItem(i);
}
}
}
u8 dSv_player_item_c::getItem(int slot_no, bool check_combo) const {
if (slot_no < MAX_ITEM_SLOTS) {
if (check_combo) {
for (int i = 0; i < SELECT_ITEM_NUM; i++) {
if ((slot_no == dComIfGs_getSelectItemIndex(i) ||
slot_no == dComIfGs_getMixItemIndex(i)) &&
dComIfGs_getMixItemIndex(i) != NO_ITEM) {
u8 select_item = mItems[dComIfGs_getSelectItemIndex(i)];
u8 mix_item = mItems[dComIfGs_getMixItemIndex(i)];
// Get Bomb arrow check: Bow + Normal Bombs
if ((select_item == BOW && mix_item == NORMAL_BOMB) ||
(mix_item == BOW && select_item == NORMAL_BOMB)) {
return BOMB_ARROW;
}
// Get Bomb arrow check: Bow + Water Bombs
if ((select_item == BOW && mix_item == WATER_BOMB) ||
(mix_item == BOW && select_item == WATER_BOMB)) {
return BOMB_ARROW;
}
// Get Bomb arrow check: Bow + Bomblings
if ((select_item == BOW && mix_item == POKE_BOMB) ||
(mix_item == BOW && select_item == POKE_BOMB)) {
return BOMB_ARROW;
}
// Get Hawkeye check
if ((select_item == BOW && mix_item == HAWK_EYE) ||
(mix_item == BOW && select_item == HAWK_EYE)) {
return HAWK_ARROW;
}
// Get Rod w/ bee larva
if ((select_item == FISHING_ROD_1 && mix_item == BEE_CHILD) ||
(mix_item == FISHING_ROD_1 && select_item == BEE_CHILD)) {
return BEE_ROD;
}
// Get Rod w/ coral earring
if ((select_item == FISHING_ROD_1 && mix_item == ZORAS_JEWEL) ||
(mix_item == FISHING_ROD_1 && select_item == ZORAS_JEWEL)) {
return JEWEL_ROD;
}
// Get Rod w/ worm
if ((select_item == FISHING_ROD_1 && mix_item == WORM) ||
(mix_item == FISHING_ROD_1 && select_item == WORM)) {
return WORM_ROD;
}
// This block will only run on the Wii version
if (i == SELECT_ITEM_B) {
if (dComIfGs_getSelectItemIndex(i) == 0 &&
dComIfGs_getMixItemIndex(i) == 0) {
dComIfGs_setSelectItemIndex(i, NO_ITEM);
dComIfGs_setMixItemIndex(i, NO_ITEM);
return NO_ITEM;
}
}
// Uncertain combination item===>%d, %d\n
OSReport_Error("合成アイテム不定===>%d, %d\n", select_item, mix_item);
}
}
}
return mItems[slot_no];
}
return NO_ITEM;
}
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() {
int i1 = 0;
int i2 = 0;
for (; i1 < 24; i1++) {
mItemSlots[i1] = NO_ITEM;
}
for (int i1 = 0; i1 < 23; i1++) {
if (mItems[i_item_lst[i1]] != NO_ITEM) {
mItemSlots[i2] = i_item_lst[i1];
i2++;
}
}
}
#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_no) const {
if (slot_no < MAX_ITEM_SLOTS) {
return mItemSlots[slot_no];
}
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 curItemIn, u8 newItemIn) {
u8 cur_item = dSv_item_rename(curItemIn);
u8 new_item = dSv_item_rename(newItemIn);
for (int i = 0; i < 4; i++) {
if (cur_item == mItems[i + SLOT_11]) {
setItem(i + SLOT_11, new_item);
if (new_item == HOT_SPRING) {
dMeter2Info_setHotSpringTimer(i + SLOT_11);
}
for (int j = 0; j < 3; j++) {
if (i + SLOT_11 == dComIfGs_getSelectItemIndex(j)) {
dComIfGp_setSelectItem(j);
}
}
return;
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dSv_player_item_c::setBottleItemIn(u8 curItemIn, u8 newItemIn) {
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_itemNo) {
setBottleItemIn(EMPTY_BOTTLE, dSv_item_rename(i_itemNo));
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dSv_player_item_c::setEmptyBottleItemIn(u8 i_itemNo) {
nofralloc
#include "asm/d/save/d_save/setEmptyBottleItemIn__17dSv_player_item_cFUc.s"
}
#pragma pop
#endif
void dSv_player_item_c::setEmptyBottle() {
for (int i = 0; i < 4; i++) {
if (dComIfGs_getItem((u8)(i + SLOT_11), true) == NO_ITEM) {
dComIfGs_setItem((u8)(i + SLOT_11), EMPTY_BOTTLE);
return;
}
}
}
void dSv_player_item_c::setEmptyBottle(u8 i_itemNo) {
for (int i = 0; i < 4; i++) {
if (dComIfGs_getItem((u8)(i + SLOT_11), true) == NO_ITEM) {
dComIfGs_setItem((u8)(i + SLOT_11), i_itemNo);
return;
}
}
}
/* 80033598-800336BC 02DED8 0124+00 1/1 3/3 0/0 .text
* setEquipBottleItemIn__17dSv_player_item_cFUcUc */
// one instruction
#ifdef NONMATCHING
void dSv_player_item_c::setEquipBottleItemIn(u8 curItemIn, u8 newItemIn) {
u8 new_item = dSv_item_rename(newItemIn);
if (dComIfGs_getSelectItemIndex(curItemIn) >= SLOT_11 &&
dComIfGs_getSelectItemIndex(curItemIn) <= SLOT_14) {
if (new_item == HOT_SPRING) {
dMeter2Info_setHotSpringTimer(dComIfGs_getSelectItemIndex(curItemIn));
}
setItem(dComIfGs_getSelectItemIndex(curItemIn), new_item);
dComIfGs_setItem(dComIfGs_getSelectItemIndex(curItemIn), new_item);
dComIfGp_setItem(dComIfGs_getSelectItemIndex(curItemIn), new_item);
dComIfGp_setSelectItem(curItemIn);
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dSv_player_item_c::setEquipBottleItemIn(u8 curItemIn, u8 newItemIn) {
nofralloc
#include "asm/d/save/d_save/setEquipBottleItemIn__17dSv_player_item_cFUcUc.s"
}
#pragma pop
#endif
void dSv_player_item_c::setEquipBottleItemEmpty(u8 curItemIn) {
setEquipBottleItemIn(curItemIn, EMPTY_BOTTLE);
}
u8 dSv_player_item_c::checkBottle(u8 i_itemNo) {
u8 num_bottles = 0;
u8 item_id = dSv_item_rename(i_itemNo);
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 */
u16 dSv_event_flag_c::saveBitLabels[822] = {
0xFFFF, 0x0080, 0x0040, 0x0020, 0x0010, 0x0008, 0x0004, 0x0002, 0x0001, 0x0180, 0x0140, 0x0120,
0x0110, 0x0108, 0x0104, 0x0102, 0x0101, 0x0280, 0x0240, 0x0220, 0x0210, 0x0208, 0x0204, 0x0202,
0x0201, 0x0380, 0x0340, 0x0320, 0x0310, 0x0308, 0x0304, 0x0302, 0x0301, 0x0480, 0x0440, 0x0420,
0x0410, 0x0408, 0x0404, 0x0402, 0x0401, 0x0580, 0x0540, 0x0520, 0x0510, 0x0508, 0x0504, 0x0502,
0x0501, 0x0680, 0x0640, 0x0620, 0x0610, 0x0608, 0x0604, 0x0602, 0x0601, 0x0780, 0x0740, 0x0720,
0x0710, 0x0708, 0x0704, 0x0702, 0x0701, 0x0880, 0x0840, 0x0820, 0x0810, 0x0808, 0x0804, 0x0802,
0x0801, 0x0980, 0x0940, 0x0920, 0x0910, 0x0908, 0x0904, 0x0902, 0x0901, 0x0A80, 0x0A40, 0x0A20,
0x0A10, 0x0A08, 0x0A04, 0x0A02, 0x0A01, 0x0B80, 0x0B40, 0x0B20, 0x0B10, 0x0B08, 0x0B04, 0x0B02,
0x0B01, 0x0C80, 0x0C40, 0x0C20, 0x0C10, 0x0C08, 0x0C04, 0x0C02, 0x0C01, 0x0D80, 0x0D40, 0x0D20,
0x0D10, 0x0D08, 0x0D04, 0x0D02, 0x0D01, 0x0E80, 0x0E40, 0x0E20, 0x0E10, 0x0E08, 0x0E04, 0x0E02,
0x0E01, 0x0F80, 0x0F40, 0x0F20, 0x0F10, 0x0F08, 0x0F04, 0x0F02, 0x0F01, 0x1080, 0x1040, 0x1020,
0x1010, 0x1008, 0x1004, 0x1002, 0x1001, 0x1180, 0x1140, 0x1120, 0x1110, 0x1108, 0x1104, 0x1102,
0x1101, 0x1280, 0x1240, 0x1220, 0x1210, 0x1208, 0x1204, 0x1202, 0x1201, 0x1380, 0x1340, 0x1320,
0x1310, 0x1308, 0x1304, 0x1302, 0x1301, 0x1480, 0x1440, 0x1420, 0x1410, 0x1408, 0x1404, 0x1402,
0x1401, 0x1580, 0x1540, 0x1520, 0x1510, 0x1508, 0x1504, 0x1502, 0x1501, 0x1680, 0x1640, 0x1620,
0x1610, 0x1608, 0x1604, 0x1602, 0x1601, 0xFF1F, 0x1780, 0x1740, 0x1720, 0x1710, 0x1708, 0x1704,
0x1702, 0x1701, 0x1880, 0x1840, 0x1820, 0x1810, 0xFEFF, 0xFDFF, 0xFCFF, 0xFBFF, 0x1808, 0x1804,
0x1802, 0x1801, 0x1980, 0x1940, 0x1920, 0x1910, 0x1908, 0x1904, 0x1902, 0x1901, 0x1A80, 0x1A40,
0x1A20, 0x1A10, 0x1A08, 0x1A04, 0x1A02, 0x1A01, 0x1B80, 0x1B40, 0x1B20, 0x1B10, 0x1B08, 0x1B04,
0x1B02, 0x1B01, 0x1C80, 0x1C40, 0x1C20, 0x1C10, 0x1C08, 0x1C04, 0x1C02, 0x1C01, 0x1D80, 0x1D40,
0x1D20, 0x1D10, 0x1D08, 0x1D04, 0x1D02, 0x1D01, 0x1E80, 0x1E40, 0x1E20, 0x1E10, 0x1E08, 0x1E04,
0x1E02, 0x1E01, 0x1F80, 0x1F40, 0x1F20, 0x1F10, 0x1F08, 0x1F04, 0x1F02, 0x1F01, 0x2080, 0x2040,
0x2020, 0x2010, 0x2008, 0x2004, 0x2002, 0x2001, 0x2180, 0x2140, 0x2120, 0x2110, 0x2108, 0x2104,
0x2102, 0x2101, 0x2280, 0x2240, 0x2220, 0x2210, 0x2208, 0x2204, 0x2202, 0x2201, 0x2380, 0x2340,
0x2320, 0x2310, 0x2308, 0x2304, 0x2302, 0x2301, 0x2480, 0x2440, 0x2420, 0x2410, 0x2408, 0x2404,
0x2402, 0x2401, 0x2580, 0x2540, 0x2520, 0x2510, 0x2508, 0x2504, 0x2502, 0x2501, 0x2680, 0x2640,
0x2620, 0x2610, 0x2608, 0x2604, 0x2602, 0x2601, 0x2780, 0x2740, 0x2720, 0x2710, 0x2708, 0x2704,
0x2702, 0x2701, 0x2880, 0x2840, 0x2820, 0x2810, 0x2808, 0x2804, 0x2802, 0x2801, 0x2980, 0x2940,
0x2920, 0x2910, 0x2908, 0x2904, 0x2902, 0x2901, 0x2A80, 0x2A40, 0x2A20, 0x2A10, 0x2A08, 0x2A04,
0x2A02, 0x2A01, 0x2B80, 0x2B40, 0x2B20, 0x2B10, 0x2B08, 0x2B04, 0x2B02, 0x2B01, 0x2C80, 0x2C40,
0x2C20, 0x2C10, 0x2C08, 0x2C04, 0x2C02, 0x2C01, 0x2D80, 0x2D40, 0x2D20, 0x2D10, 0x2D08, 0x2D04,
0x2D02, 0x2D01, 0x2E80, 0x2E40, 0x2E20, 0x2E10, 0x2E08, 0x2E04, 0x2E02, 0x2E01, 0x2F80, 0x2F40,
0x2F20, 0x2F10, 0x2F08, 0x2F04, 0x2F02, 0x2F01, 0x3080, 0x3040, 0x3020, 0x3010, 0x3008, 0x3004,
0x3002, 0x3001, 0x3180, 0x3140, 0x3120, 0x3110, 0x3108, 0x3104, 0x3102, 0x3101, 0x3280, 0x3240,
0x3220, 0x3210, 0x3208, 0x3204, 0x3202, 0x3201, 0x3380, 0x3340, 0x3320, 0x3310, 0x3308, 0x3304,
0x3302, 0x3301, 0x3480, 0x3440, 0x3420, 0x3410, 0x3408, 0x3404, 0x3402, 0x3401, 0x3580, 0x3540,
0x3520, 0x3510, 0x3508, 0x3504, 0x3502, 0x3501, 0x3680, 0x3640, 0x3620, 0x3610, 0x3608, 0x3604,
0x3602, 0x3601, 0x3780, 0x3740, 0x3720, 0x3710, 0x3708, 0xFAFF, 0xF9FF, 0x3704, 0x3702, 0x3701,
0x3880, 0x3840, 0x3820, 0x3810, 0x3808, 0x3804, 0x3802, 0x3801, 0x3980, 0x3940, 0x3920, 0x3910,
0x3908, 0x3904, 0x3902, 0x3901, 0x3A80, 0x3A40, 0x3A20, 0x3A10, 0x3A08, 0x3A04, 0x3A02, 0x3A01,
0x3B80, 0x3B40, 0x3B20, 0x3B10, 0x3B08, 0x3B04, 0x3B02, 0x3B01, 0x3C80, 0x3C40, 0x3C20, 0x3C10,
0x3C08, 0x3C04, 0x3C02, 0x3C01, 0x3D80, 0x3D40, 0x3D20, 0x3D10, 0x3D08, 0x3D04, 0x3D02, 0x3D01,
0x3E80, 0x3E40, 0x3E20, 0x3E10, 0x3E08, 0x3E04, 0x3E02, 0xF8FF, 0xF7FF, 0x3E01, 0x3F80, 0x3F40,
0x3F20, 0x3F10, 0x3F08, 0x3F04, 0x3F02, 0x3F01, 0x4080, 0x4040, 0x4020, 0x4010, 0x4008, 0x4004,
0x4002, 0x4001, 0x4180, 0x4140, 0x4120, 0x4110, 0x4108, 0x4104, 0x4102, 0x4101, 0x4280, 0x4240,
0x4220, 0x4210, 0x4208, 0x4204, 0x4202, 0x4201, 0x4380, 0x4340, 0x4320, 0x4310, 0x4308, 0x4304,
0x4302, 0x4301, 0x4480, 0x4440, 0x4420, 0x4410, 0x4408, 0x4404, 0x4402, 0x4401, 0x4580, 0x4540,
0x4520, 0x4510, 0x4508, 0x4504, 0x4502, 0x4501, 0x4680, 0x4640, 0x4620, 0x4610, 0x4608, 0x4604,
0x4602, 0x4601, 0x4780, 0x4740, 0x4720, 0x4710, 0x4708, 0x4704, 0x4702, 0x4701, 0x4880, 0x4840,
0x4820, 0x4810, 0x4808, 0x4804, 0x4802, 0x4801, 0x4980, 0x4940, 0x4920, 0x4910, 0x4908, 0x4904,
0x4902, 0x4901, 0xFFFF, 0x4A40, 0x4A20, 0x4A10, 0x4A08, 0x4A04, 0x4A02, 0x4A01, 0x4B80, 0x4B40,
0x4B20, 0x4B10, 0x4B08, 0x4B04, 0x4B02, 0x4B01, 0x4C80, 0x4C40, 0x4C20, 0x4C10, 0x4C08, 0x4C04,
0x4C02, 0x4C01, 0x4D80, 0x4D40, 0x4D20, 0x4D10, 0x4D08, 0x4A80, 0x4D04, 0x4D02, 0x4D01, 0x4E80,
0x4E40, 0x4E20, 0x4E10, 0x4E08, 0x4E04, 0x4E02, 0x4E01, 0x4F80, 0x4F40, 0x4F20, 0x4F10, 0x4F08,
0x4F04, 0x4F02, 0x4F01, 0x5080, 0x5040, 0x5020, 0x5010, 0x5008, 0x5004, 0x5002, 0x5001, 0x5180,
0x5140, 0x5120, 0x5110, 0x5108, 0x5104, 0x5102, 0x5101, 0x5280, 0x5240, 0x5220, 0x5210, 0x5208,
0x5204, 0x5202, 0x5201, 0x5380, 0x5340, 0x5320, 0x5310, 0x5308, 0x5304, 0x5302, 0x5301, 0x5480,
0x5440, 0x5420, 0x5410, 0x5408, 0x5404, 0x5402, 0x5401, 0x5580, 0x5540, 0x5520, 0x5510, 0x5508,
0x5504, 0x5502, 0x5501, 0x5680, 0x5640, 0x5620, 0x5610, 0x5608, 0x5604, 0x5602, 0x5601, 0x5780,
0x5740, 0x5720, 0xF63F, 0xF57F, 0xF47F, 0xF37F, 0xF27F, 0x5710, 0x5708, 0x5704, 0x5702, 0x5701,
0x5880, 0x5840, 0x5820, 0x5810, 0x5808, 0x5804, 0x5802, 0x5801, 0x5980, 0x5940, 0x5920, 0xF11F,
0x5910, 0x5908, 0x5904, 0x5902, 0x5901, 0x5A80, 0x5A40, 0x5A20, 0x5A10, 0x5A08, 0x5A04, 0x5A02,
0x5A01, 0x5B80, 0x5B40, 0x5B20, 0x5B10, 0x5B08, 0x5B04, 0x5B02, 0x5B01, 0x5C80, 0x5C40, 0x5C20,
0x5C10, 0x5C08, 0x5C04, 0x5C02, 0xF0FF, 0xEFFF, 0xEEFF, 0xEDFF, 0xECFF, 0xEBFF, 0x5C01, 0x5D80,
0x5D40, 0x5D20, 0x5D10, 0x5D08, 0x5D04, 0x5D02, 0x5D01, 0x5E80, 0x5E40, 0x5E20, 0x5E10, 0x5E08,
0x5E04, 0x5E02, 0x5E01, 0x5F80, 0x5F40, 0x5F20, 0x5F10, 0x5F08, 0x5F04, 0x5F02, 0x5F01, 0x6080,
0x6040, 0x6020, 0x6010, 0x6008, 0x6004, 0x6002, 0x6001, 0x6180, 0x6140, 0x6120, 0x6110, 0x6108,
0x6104, 0x6102, 0x6101, 0x6280, 0x6240, 0x6220, 0x6210, 0x6208, 0x6204, 0x6202, 0x6201, 0x6380,
0x6340, 0x6320, 0x6310, 0x6308, 0x6304, 0x6302,
};
BOOL dSv_player_item_c::checkInsectBottle() {
for (int i = 0; i < 24; i++) {
if (i_dComIfGs_isItemFirstBit(M_BEETLE + i) &&
!i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x191 + i])) {
return TRUE;
}
}
return FALSE;
}
u8 dSv_player_item_c::checkEmptyBottle() {
u8 bottleNum = 0;
for (int i = 0; i < BOTTLE_MAX; i++) {
if (mItems[i + SLOT_11] == EMPTY_BOTTLE) {
bottleNum++;
}
}
return bottleNum;
}
void dSv_player_item_c::setBombBagItemIn(u8 curBomb, u8 newBomb, bool setNum) {
for (int i = 0; i < 3; i++) {
if (curBomb == mItems[i + SLOT_15]) {
setItem(i + SLOT_15, newBomb);
if (setNum == true && newBomb != BOMB_BAG_LV1) {
dComIfGs_setBombNum(i, dComIfGs_getBombMax(newBomb));
}
for (int j = 0; j < 3; j++) {
if (i + SLOT_15 == dComIfGs_getSelectItemIndex(j)) {
dComIfGp_setSelectItem(j);
}
}
break;
}
}
}
void dSv_player_item_c::setBombBagItemIn(u8 curBomb, u8 newBomb, u8 bombNum, bool setNum) {
for (int i = 0; i < 3; i++) {
if (curBomb == mItems[i + SLOT_15]) {
setItem(i + SLOT_15, newBomb);
if (setNum == 1 && newBomb != BOMB_BAG_LV1) {
if (bombNum > dComIfGs_getBombMax(newBomb)) {
bombNum = dComIfGs_getBombMax(newBomb);
}
dComIfGs_setBombNum(i, bombNum);
}
for (int j = 0; j < 3; j++) {
if (i + SLOT_15 == dComIfGs_getSelectItemIndex(j)) {
dComIfGp_setSelectItem(j);
}
}
break;
}
}
}
void dSv_player_item_c::setEmptyBombBagItemIn(u8 newBomb, bool setNum) {
setBombBagItemIn(BOMB_BAG_LV1, newBomb, setNum);
}
void dSv_player_item_c::setEmptyBombBagItemIn(u8 newBomb, u8 bombNum, bool setNum) {
setBombBagItemIn(BOMB_BAG_LV1, newBomb, bombNum, setNum);
}
void dSv_player_item_c::setEmptyBombBag() {
for (int i = 0; i < 3; i++) {
if (dComIfGs_getItem((u8)(i + SLOT_15), true) == NO_ITEM) {
dComIfGs_setItem((u8)(i + SLOT_15), BOMB_BAG_LV1);
return;
}
}
}
void dSv_player_item_c::setEmptyBombBag(u8 newBomb, u8 bombNum) {
for (int i = 0; i < 3; i++) {
if (dComIfGs_getItem((u8)(i + SLOT_15), true) == NO_ITEM) {
dComIfGs_setItem((u8)(i + SLOT_15), newBomb);
if (newBomb == BOMB_BAG_LV1) {
return;
}
if (bombNum > dComIfGs_getBombMax(newBomb)) {
bombNum = dComIfGs_getBombMax(newBomb);
}
dComIfGs_setBombNum(i, bombNum);
return;
}
}
}
u8 dSv_player_item_c::checkBombBag(u8 i_itemNo) {
u8 bombBags = 0;
for (int i = 0; i < BOMB_BAG_MAX; i++) {
if (i_itemNo == mItems[i + SLOT_15]) {
bombBags++;
}
}
return bombBags;
}
void dSv_player_item_c::setWarashibeItem(u8 i_itemNo) {
dComIfGs_setItem(SLOT_21, i_itemNo);
dComIfGp_setItem(SLOT_21, i_itemNo);
for (int i = 0; i < 4; i++) {
if (dComIfGs_getSelectItemIndex((u8)i) == SLOT_21) {
dComIfGp_setSelectItem((u8)i);
}
}
}
void dSv_player_item_c::setRodTypeLevelUp() {
switch (mItems[SLOT_20]) {
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(i);
}
}
void dSv_player_item_c::setBaitItem(u8 i_itemNo) {
switch (i_itemNo) {
case BEE_CHILD: {
i_dComIfGs_isItemFirstBit(ZORAS_JEWEL) ? mItems[SLOT_20] = JEWEL_BEE_ROD :
mItems[SLOT_20] = BEE_ROD;
break;
}
case WORM: {
i_dComIfGs_isItemFirstBit(ZORAS_JEWEL) ? mItems[SLOT_20] = JEWEL_WORM_ROD :
mItems[SLOT_20] = WORM_ROD;
break;
}
case NO_ITEM: {
i_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(i);
}
}
void dSv_player_get_item_c::init() {
for (int i = 0; i < 8; i++) {
mItemFlags[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) {
mItemFlags[i_itemNo >> 5] |= (1 << (i_itemNo & 0x1F));
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dSv_player_get_item_c::onFirstBit(u8 i_itemNo) {
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 i_itemNo) {
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 i_itemNo) const {
nofralloc
#include "asm/d/save/d_save/isFirstBit__21dSv_player_get_item_cCFUc.s"
}
#pragma pop
void dSv_player_item_record_c::init() {
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;
}
u8 dSv_player_item_record_c::addBottleNum(u8 i_bottleIdx, s16 num) {
int bottleNum = mBottleNum[i_bottleIdx] + num;
dComIfGs_getItem((u8)(i_bottleIdx + SLOT_11), true);
if (bottleNum < 0) {
mBottleNum[i_bottleIdx] = 0;
} else if (bottleNum > dComIfGs_getBottleMax()) {
mBottleNum[i_bottleIdx] = dComIfGs_getBottleMax();
} else {
mBottleNum[i_bottleIdx] = bottleNum;
}
return mBottleNum[i_bottleIdx];
}
u8 dSv_player_item_record_c::getBottleNum(u8 i_bottleIdx) const {
return mBottleNum[i_bottleIdx];
}
void dSv_player_item_max_c::init() {
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;
}
}
u8 dSv_player_item_max_c::getBombNum(u8 bombId) const {
u8 lv_multiplier = 1;
if (i_dComIfGs_isItemFirstBit(BOMB_BAG_LV2)) {
lv_multiplier = 2;
}
switch (bombId) {
case NORMAL_BOMB:
return (u8)(mItemMax[NORMAL_BOMB_MAX] * lv_multiplier);
case WATER_BOMB:
return (u8)(mItemMax[WATER_BOMB_MAX] * lv_multiplier);
case POKE_BOMB:
return (u8)(mItemMax[POKE_BOMB_MAX] * lv_multiplier);
default:
return 0;
}
}
void dSv_player_collect_c::init() {
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() {
for (int i = 0; i < 3; i++) {
unk0[i] = 0;
}
unk3 = 0;
}
void dSv_light_drop_c::init() {
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 dropNum) {
if (i_nowLevel < LIGHT_DROP_STAGE || i_nowLevel > 6) {
mLightDropNum[i_nowLevel] = dropNum;
}
}
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() {
for (int i = 0; i < 2; i++) {
mLetterGetFlags[i] = 0;
mLetterReadFlags[i] = 0;
}
for (int i = 0; i < LETTER_INFO_BIT; i++) {
mGetNumber[i] = 0;
}
}
void dSv_letter_info_c::onLetterGetFlag(int i_no) {
mLetterGetFlags[i_no >> 5] |= 1 << (i_no & 0x1F);
}
BOOL dSv_letter_info_c::isLetterGetFlag(int i_no) const {
return mLetterGetFlags[i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
}
void dSv_letter_info_c::onLetterReadFlag(int i_no) {
mLetterReadFlags[i_no >> 5] |= 1 << (i_no & 0x1F);
}
BOOL dSv_letter_info_c::isLetterReadFlag(int i_no) const {
return mLetterReadFlags[i_no >> 5] & 1 << (i_no & 0x1F) ? TRUE : FALSE;
}
void dSv_fishing_info_c::init() {
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;
}
}
void dSv_player_info_c::init() {
dMeter2Info_getString(0x382, mPlayerName, NULL); // Link
dMeter2Info_getString(0x383, mHorseName, NULL); // Epona
unk4 = 0;
unk0 = 0;
mTotalTime = 0;
unk16 = 0;
mDeathCount = 0;
mClearCount = 0;
for (int i = 0; i < 5; i++) {
unk55[i] = 0;
}
}
void dSv_player_config_c::init() {
unk0 = 1;
if (OSGetSoundMode() == SOUND_MODE_MONO) {
mSoundMode = SOUND_MODE_MONO;
Z2AudioMgr::mAudioMgrPtr->setOutputMode(SOUND_MODE_MONO);
} else {
mSoundMode = SOUND_MODE_STEREO;
Z2AudioMgr::mAudioMgrPtr->setOutputMode(SOUND_MODE_STEREO);
}
mAttentionType = 0;
mVibration = 1;
unk4 = 0;
unk5 = 0;
mShortCut = 0;
mCalibrateDist = 350;
mCalValue = 0;
mCameraControl = 0;
mPointer = 1;
}
u32 dSv_player_config_c::checkVibration() const {
return JUTGamePad::sRumbleSupported & 0x80000000 ? dComIfGp_getNowVibration() : 0;
}
u8 dSv_player_config_c::getSound() {
return mSoundMode;
}
void dSv_player_config_c::setSound(u8 i_mode) {
mSoundMode = i_mode;
}
u8 dSv_player_config_c::getVibration() {
return mVibration;
}
void dSv_player_config_c::setVibration(u8 i_status) {
mVibration = i_status;
}
void dSv_player_c::init() {
mPlayerStatusA.init();
mPlayerStatusB.init();
mHorsePlace.init();
mPlayerReturnPlace.init();
mPlayerFieldLastStayInfo.init();
mPlayerLastMarkInfo.init();
mItem.init();
mGetItem.init();
mItemRecord.init();
mItemMax.init();
mCollect.init();
mWolf.init();
mLightDrop.init();
mLetterInfo.init();
mFishingInfo.init();
mPlayerInfo.init();
mConfig.init();
}
void dSv_memBit_c::init() {
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 >> 5] ? 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 >> 5] & 1 << (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) {
u32 tmp = 1 << (i_no & 0x1F);
mSwitch[i_no >> 5] ^= tmp;
return mSwitch[i_no >> 5] & tmp ? TRUE : FALSE;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int dSv_memBit_c::revSwitch(int i_no) {
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 >> 5] & 1 << (i_no & 0x1F)) ? TRUE : FALSE;
}
void dSv_memBit_c::onDungeonItem(int i_no) {
mDungeonItem |= (u8)(1 << i_no);
}
s32 dSv_memBit_c::isDungeonItem(int i_no) const {
return mDungeonItem & (u8)(1 << i_no) ? 1 : 0;
}
void dSv_event_c::init() {
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 i_reg, u8 i_no) {
mEvent[i_reg >> 8] &= ~(u8)i_reg;
mEvent[i_reg >> 8] |= i_no;
}
u8 dSv_event_c::getEventReg(u16 i_reg) const {
return (u8)i_reg & mEvent[i_reg >> 8];
}
void dSv_MiniGame_c::init() {
unk0 = 0;
for (int i = 0; i < 3; i++) {
unk1[i] = 0;
}
mStarTime = 120000;
mBalloonScore = 0;
mRaceGameTime = 0;
unk16 = 0;
unk20 = 0;
}
void dSv_memory_c::init() {
mBit.init();
}
void dSv_memory2_c::init() {
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 i_no) {
return (1 << (i_no & 0x1F) & mVisitedRoom[i_no >> 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;
}
daObjCarry_c::clrSaveFlag();
return true;
} else {
daObjCarry_c::setSaveFlag();
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 >> 5] & (1 << (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() {
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() {
mRoomSwitch = 0;
}
void dSv_zoneBit_c::clearRoomItem() {
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);
mSwitch[i_no >> 4] ^= uVar1;
return mSwitch[i_no >> 4] & uVar1 ? TRUE : FALSE;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int dSv_zoneBit_c::revSwitch(int i_no) {
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() {
for (int i = 0; i < 4; i++) {
mActorFlags[i] = 0;
}
}
void dSv_zoneActor_c::on(int i_id) {
mActorFlags[i_id >> 5] |= 1 << (i_id & 0x1F);
}
void dSv_zoneActor_c::off(int i_id) {
mActorFlags[i_id >> 5] &= ~(1 << (i_id & 0x1F));
}
BOOL dSv_zoneActor_c::is(int i_id) const {
return mActorFlags[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() {
mSavedata.init();
mMemory.init();
initDan(-1);
initZone();
mTmp.init();
}
void dSv_save_c::init() {
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];
}
void dSv_info_c::getSave(int i_stageNo) {
mMemory = mSavedata.getSave(i_stageNo);
}
void dSv_info_c::putSave(int i_stageNo) {
mSavedata.putSave(i_stageNo, mMemory);
}
void dSv_info_c::initZone() {
for (int i = 0; i < 0x20; i++) {
mZone[i].init(-1);
}
}
u32 dSv_info_c::createZone(int i_roomNo) {
dSv_zone_c* zone = mZone;
for (int i = 0; i < 0x20; zone++, i++) {
if (zone->getRoomNo() < 0) {
zone->init(i_roomNo);
return i;
}
}
return -1;
}
void dSv_info_c::onSwitch(int i_no, int i_roomNo) {
if (i_no == -1 || i_no == 255) {
return;
}
if (i_no < MEMORY_SWITCH) {
mMemory.getBit().onSwitch(i_no);
} else if (i_no < (MEMORY_SWITCH + DAN_SWITCH)) {
mDan.onSwitch(i_no - MEMORY_SWITCH);
} else {
int zoneId = dStage_roomControl_c::getZoneNo(i_roomNo);
if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) {
mZone[zoneId].getZoneBit().onSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
} else {
mZone[zoneId].getZoneBit().onOneSwitch(i_no -
(MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH));
}
}
}
void dSv_info_c::offSwitch(int i_no, int i_roomNo) {
if (i_no == -1 || i_no == 255) {
return;
}
if (i_no < MEMORY_SWITCH) {
mMemory.getBit().offSwitch(i_no);
} else if (i_no < (MEMORY_SWITCH + DAN_SWITCH)) {
mDan.offSwitch(i_no - MEMORY_SWITCH);
} else {
int zoneId = dStage_roomControl_c::getZoneNo(i_roomNo);
if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) {
mZone[zoneId].getZoneBit().offSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
} else {
mZone[zoneId].getZoneBit().offOneSwitch(i_no -
(MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH));
}
}
}
BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) const {
if (i_no == -1 || i_no == 255) {
return FALSE;
}
if (i_no < MEMORY_SWITCH) {
return mMemory.getBit().isSwitch(i_no);
} else if (i_no < (MEMORY_SWITCH + DAN_SWITCH)) {
return mDan.isSwitch(i_no - MEMORY_SWITCH);
} else {
int zoneId = dStage_roomControl_c::getZoneNo(i_roomNo);
if (zoneId < 0 || zoneId >= ZONE_MAX) {
return FALSE;
} else {
if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) {
return mZone[zoneId].getBit().isSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
} else {
return mZone[zoneId].getBit().isOneSwitch(
i_no - (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH));
}
}
}
}
BOOL dSv_info_c::revSwitch(int i_no, int i_roomNo) {
if (i_no == -1 || i_no == 255) {
return FALSE;
}
if (i_no < MEMORY_SWITCH) {
return mMemory.getBit().revSwitch(i_no);
} else if (i_no < (MEMORY_SWITCH + DAN_SWITCH)) {
return mDan.revSwitch(i_no - MEMORY_SWITCH);
} else {
int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo);
if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) {
return mZone[zoneNo].getZoneBit().revSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
} else {
return mZone[zoneNo].getZoneBit().revOneSwitch(
i_no - (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH));
}
}
}
void dSv_info_c::onItem(int i_no, int i_roomNo) {
if (i_no == -1 || i_no == 255) {
return;
}
if (i_no < MEMORY_ITEM) {
mDan.onItem(i_no);
} else if (i_no < (MEMORY_ITEM + DAN_ITEM)) {
mMemory.getBit().onItem(i_no - MEMORY_ITEM);
} else {
int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo);
if (i_no < (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM)) {
mZone[zoneNo].getZoneBit().onItem(i_no - (MEMORY_ITEM + DAN_ITEM));
} else {
mZone[zoneNo].getZoneBit().onOneItem(i_no - (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM));
}
}
}
BOOL dSv_info_c::isItem(int i_no, int i_roomNo) const {
if (i_no == -1 || i_no == 255) {
return FALSE;
}
if (i_no < MEMORY_ITEM) {
return mDan.isItem(i_no);
} else if (i_no < (MEMORY_ITEM + DAN_ITEM)) {
return mMemory.getBit().isItem(i_no - MEMORY_ITEM);
} else {
int zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo);
if (i_no < (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM)) {
return mZone[zoneNo].getBit().isItem(i_no - (MEMORY_ITEM + DAN_ITEM));
} else {
return mZone[zoneNo].getBit().isOneItem(i_no - (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM));
}
}
}
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].getActor().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].getActor().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 zoneNo = dStage_roomControl_c::getZoneNo(i_roomNo);
return mZone[zoneNo].getActor().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 */
// lots of regalloc issues
#ifdef NONMATCHING
int dSv_info_c::memory_to_card(char* card_ptr, int dataNum) {
bool lantern_not_recovered = false;
s32 lantern_stolen;
s32 lantern_dropped;
bool phi_r30 = false;
u16 current_lantern_oil = 0;
if (!i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[226])) {
lantern_stolen = i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[224]);
lantern_dropped = i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[225]);
dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[224]);
dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[225]);
lantern_not_recovered = true;
}
if (i_dComIfGs_isItemFirstBit(KANTERA) && dComIfGs_getItem(SLOT_1, 1) == NO_ITEM) {
dComIfGs_setItem(SLOT_1, KANTERA);
current_lantern_oil = dComIfGs_getOil();
dComIfGs_setOil(dMeter2Info_getOilGaugeBackUp());
phi_r30 = true;
}
char* save_ptr = card_ptr + (dataNum * 0xA94); // 0xA94 = Quest Log size
dSv_save_c* savedata = dComIfGs_getSaveData();
s64 play_time = (OSGetTime() - dComIfGs_getSaveStartTime());
s64 total_time = (play_time + dComIfGs_getSaveTotalTime()) / (OS_BUS_CLOCK / 4);
// 3599940 = 999:59 in seconds
if (total_time < 3599940) {
savedata->getPlayer().getPlayerInfo().setTotalTime(total_time);
}
savedata->getPlayer().getPlayerStatusB().setDateIpl(OSGetTime());
memcpy(save_ptr, savedata, sizeof(dSv_save_c));
printf("Write size:%d\n", sizeof(dSv_save_c));
if (lantern_not_recovered == true) {
if (lantern_stolen) {
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[224]);
}
if (lantern_dropped) {
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[225]);
}
}
if (phi_r30 == true) {
dComIfGs_setItem(SLOT_1, NO_ITEM);
dComIfGs_setOil(current_lantern_oil);
}
printf("SAVE size:%d\n", sizeof(dSv_save_c));
return 0;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int dSv_info_c::memory_to_card(char* card_ptr, int dataNum) {
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 */
// memcpy param loads out of order
#ifdef NONMATCHING
int dSv_info_c::card_to_memory(char* card_ptr, int dataNum) {
memcpy(dComIfGs_getSaveData(), card_ptr + dataNum * 0xa94, sizeof(dSv_save_c));
if (OSGetSoundMode() == SOUND_MODE_MONO) {
g_dComIfG_gameInfo.info.getPlayer().getConfig().setSound(SOUND_MODE_MONO);
Z2AudioMgr::mAudioMgrPtr->setOutputMode(SOUND_MODE_MONO);
} else if (g_dComIfG_gameInfo.info.getPlayer().getConfig().getSound() == 2) {
Z2AudioMgr::mAudioMgrPtr->setOutputMode(2);
} else {
g_dComIfG_gameInfo.info.getPlayer().getConfig().setSound(SOUND_MODE_STEREO);
Z2AudioMgr::mAudioMgrPtr->setOutputMode(SOUND_MODE_STEREO);
}
dSv_save_c* savedata = dComIfGs_getSaveData();
if (savedata->getPlayer().getPlayerStatusA().getLife() < 12) {
savedata->getPlayer().getPlayerStatusA().setLife(12);
}
dComIfGs_setKeyNum(6, 0);
if (dComIfGs_getItem(SLOT_9, 1) == W_HOOKSHOT) {
dComIfGs_setItem(SLOT_10, W_HOOKSHOT);
dComIfGs_setItem(SLOT_9, NO_ITEM);
}
if (dComIfGs_getItem(SLOT_9, 1) == HOOKSHOT && dComIfGs_getItem(SLOT_10, 1) == W_HOOKSHOT) {
dComIfGs_setItem(SLOT_9, NO_ITEM);
}
dComIfGs_setLineUpItem();
u8 save_vibration = savedata->getPlayer().getConfig().getVibration();
dComIfGp_setNowVibration(save_vibration);
char* save_stage = g_dComIfG_gameInfo.info.getPlayer().getPlayerReturnPlace().getName();
dMeter2Info_setSaveStageName(save_stage);
printf("LOAD size:%d\n", sizeof(dSv_save_c));
return 0;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int dSv_info_c::card_to_memory(char* card_ptr, int dataNum) {
nofralloc
#include "asm/d/save/d_save/card_to_memory__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_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
*/
#ifdef NONMATCHING
int dSv_info_c::initdata_to_card(char* card_ptr, int dataNum) {
char* ptr = card_ptr + (dataNum * 0xa94);
dSv_save_c tmp;
tmp.init();
tmp.getPlayer().getPlayerInfo().setPlayerName("");
tmp.getPlayer().getPlayerInfo().setHorseName("");
memcpy(&ptr, &tmp, 0x958);
printf("INIT size:%d\n", 0x958);
return 0;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int dSv_info_c::initdata_to_card(char* card_ptr, int dataNum) {
nofralloc
#include "asm/d/save/d_save/initdata_to_card__10dSv_info_cFPci.s"
}
#pragma pop
#endif
u16 const dSv_event_tmp_flag_c::tempBitLabels[185] = {
0xFFFF, 0xFFFF, 0xFF0F, 0xFEFF, 0x0040, 0xFDFF, 0xFCFF, 0x0020, 0x0080, 0x0010, 0x0008, 0x0004,
0x0002, 0x0001, 0x0180, 0x0140, 0x0120, 0x0110, 0x0108, 0x0104, 0x0102, 0x0101, 0x0280, 0x0240,
0x0220, 0x0210, 0x0208, 0x0204, 0x0202, 0x0201, 0x0380, 0x0340, 0x0320, 0x0310, 0xFBFF, 0x0308,
0x0304, 0x0302, 0x0301, 0x0480, 0x0440, 0x0420, 0x0410, 0x0408, 0x0404, 0x0402, 0x0401, 0x0580,
0x0540, 0x0520, 0x0510, 0x0508, 0x0504, 0x0502, 0x0501, 0x0680, 0x0640, 0x0620, 0x0610, 0x0608,
0x0604, 0x0602, 0x0601, 0x0780, 0x0740, 0x0720, 0x0710, 0x0708, 0x0704, 0x0702, 0x0701, 0x0880,
0x0840, 0x0820, 0x0810, 0x0808, 0x0804, 0x0802, 0x0801, 0x0980, 0x0940, 0x0920, 0x0910, 0x0908,
0x0904, 0x0902, 0x0901, 0x0A80, 0x0A40, 0x0A20, 0x0A10, 0x0A08, 0x0A04, 0x0A02, 0x0A01, 0x0B80,
0x0B40, 0x0B20, 0x0B10, 0x0B08, 0x0B04, 0xFAFF, 0xF9FF, 0xF8FF, 0xF7FF, 0xF6FF, 0xF5FF, 0x0B02,
0x0B01, 0x0C80, 0x0C40, 0x0C20, 0x0C10, 0x0C08, 0xF4FF, 0xF3FF, 0x0C04, 0x0C02, 0x0C01, 0x0D80,
0x0D40, 0x0D20, 0x0D10, 0x0D08, 0x0D04, 0x0D02, 0x0D01, 0x0E80, 0x0E40, 0x0E20, 0x0E10, 0x0E08,
0x0E04, 0x0E02, 0x0E01, 0x0F80, 0x0F40, 0x0F20, 0x0F10, 0x0F08, 0x0F04, 0x0F02, 0x0F01, 0x1080,
0x1040, 0x1020, 0x1010, 0x1008, 0x1004, 0x1002, 0x1001, 0x1180, 0x1140, 0x1120, 0x1110, 0x1108,
0x1104, 0x1102, 0x1101, 0x1280, 0x1240, 0x1220, 0x1210, 0x1208, 0x1204, 0x1202, 0x1201, 0x1380,
0x1340, 0x1320, 0x1310, 0x1308, 0x1304, 0x1302, 0x1301, 0x1480, 0x1440, 0x1420, 0x1410, 0x1408,
0x1404, 0x1402, 0x1401, 0x1580, 0xF2FF};
/* 80379234-80379234 005894 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */