mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-26 23:47:11 -04:00
1950 lines
61 KiB
C++
1950 lines
61 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_save.cpp
|
|
//
|
|
|
|
#include "d/d_save.h"
|
|
#include "d/d_save_init.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_item_data.h"
|
|
#include "m_Do/m_Do_MemCardRWmng.h"
|
|
#if VERSION <= VERSION_JPN
|
|
#include "d/d_s_play.h"
|
|
#endif
|
|
#include "d/actor/d_a_npc_sarace.h"
|
|
#include "m_Do/m_Do_audio.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
#include "JSystem/JUtility/JUTGamePad.h"
|
|
#include "SSystem/SComponent/c_lib.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "string.h"
|
|
#include "stdio.h"
|
|
|
|
/* 800589A8-80058B54 .text init__21dSv_player_status_a_cFv */
|
|
void dSv_player_status_a_c::init() {
|
|
mMaxLife = 12;
|
|
mLife = 12;
|
|
field_0x8 = 0;
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(mSelectItem); i++) {
|
|
mSelectItem[i] = dItem_NONE_e;
|
|
dComIfGp_setSelectItem(i);
|
|
}
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(mSelectEquip); i++) {
|
|
mSelectEquip[i] = dItem_NONE_e;
|
|
}
|
|
|
|
mRupee = 0;
|
|
mWalletSize = 0;
|
|
mMaxMagic = 0;
|
|
mMagic = 0;
|
|
field_0x15 = 0;
|
|
field_0x6 = 0;
|
|
field_0x16 = 0;
|
|
}
|
|
|
|
/* 80058B54-80058B84 .text init__21dSv_player_status_b_cFv */
|
|
void dSv_player_status_b_c::init() {
|
|
mTactWindAngleX = -1;
|
|
mTactWindAngleY = -1;
|
|
mTime = 165.0f;
|
|
mDate = 0;
|
|
mDateIPL = 0;
|
|
field_0x8 = 0.0f;
|
|
}
|
|
|
|
/* 80058B84-80058BC8 .text init__25dSv_player_return_place_cFv */
|
|
void dSv_player_return_place_c::init() {
|
|
strcpy(mName, "sea");
|
|
mRoomNo = dIsleRoom_OutsetIsland_e;
|
|
mPoint = 206;
|
|
}
|
|
|
|
/* 80058BC8-80058C60 .text set__25dSv_player_return_place_cFPCcScUc */
|
|
void dSv_player_return_place_c::set(const char* i_name, s8 i_roomNo, u8 i_status) {
|
|
JUT_ASSERT(179, strlen(i_name) <= 7);
|
|
|
|
strcpy(mName, i_name);
|
|
mRoomNo = i_roomNo;
|
|
mPoint = i_status;
|
|
}
|
|
|
|
/* 80058C60-80058C7C .text init__17dSv_player_item_cFv */
|
|
void dSv_player_item_c::init() {
|
|
for (int i = 0; i < ARRAY_SIZE(mItems); i++) {
|
|
mItems[i] = dItem_NONE_e;
|
|
}
|
|
}
|
|
|
|
/* 80058C7C-80058E1C .text setBottleItemIn__17dSv_player_item_cFUcUc */
|
|
void dSv_player_item_c::setBottleItemIn(u8 prevItemNo, u8 newItemNo) {
|
|
for (int bottleIdx = 0; bottleIdx < dInvSlot_BOTTLE_COUNT_e; bottleIdx++) {
|
|
if (mItems[dInvSlot_BOTTLE0_e + bottleIdx] == prevItemNo) {
|
|
mItems[dInvSlot_BOTTLE0_e + bottleIdx] = newItemNo;
|
|
for (int itemBtn = 0; itemBtn < dItemBtn_COUNT_e; itemBtn++) {
|
|
if (dComIfGs_getSelectItem(itemBtn) == dInvSlot_BOTTLE0_e + bottleIdx) {
|
|
dComIfGp_setSelectItem(itemBtn);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80058E1C-80058E44 .text setEmptyBottleItemIn__17dSv_player_item_cFUc */
|
|
void dSv_player_item_c::setEmptyBottleItemIn(u8 i_itemNo) {
|
|
setBottleItemIn(dItem_EMPTY_BOTTLE_e, i_itemNo);
|
|
}
|
|
|
|
/* 80058E44-80058F74 .text setEmptyBottle__17dSv_player_item_cFv */
|
|
void dSv_player_item_c::setEmptyBottle() {
|
|
for (int bottleIdx = 0; bottleIdx < dInvSlot_BOTTLE_COUNT_e; bottleIdx++) {
|
|
int invIdx = dInvSlot_BOTTLE0_e + bottleIdx;
|
|
if (dComIfGs_getItem((u8)invIdx) == dItem_NONE_e) {
|
|
dComIfGs_setItem((u8)invIdx, dItem_EMPTY_BOTTLE_e);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80058F74-8005918C .text setEquipBottleItemIn__17dSv_player_item_cFUcUc */
|
|
void dSv_player_item_c::setEquipBottleItemIn(u8 i_itemBtn, u8 i_itemNo) {
|
|
u8 invIdx = dComIfGs_getSelectItem(i_itemBtn);
|
|
if (invIdx < dInvSlot_BOTTLE0_e)
|
|
return;
|
|
if (invIdx > dInvSlot_BOTTLE3_e)
|
|
return;
|
|
|
|
mItems[invIdx] = i_itemNo;
|
|
|
|
dComIfGs_setItem(dComIfGs_getSelectItem(i_itemBtn), i_itemNo);
|
|
dComIfGp_setItem(dComIfGs_getSelectItem(i_itemBtn), i_itemNo);
|
|
dComIfGp_setSelectItem(i_itemBtn);
|
|
}
|
|
|
|
/* 8005918C-800591B0 .text setEquipBottleItemEmpty__17dSv_player_item_cFUc */
|
|
void dSv_player_item_c::setEquipBottleItemEmpty(u8 i_itemBtn) {
|
|
setEquipBottleItemIn(i_itemBtn, dItem_EMPTY_BOTTLE_e);
|
|
}
|
|
|
|
/* 800591B0-80059408 .text setEquipBottleItemIn__17dSv_player_item_cFUc */
|
|
void dSv_player_item_c::setEquipBottleItemIn(u8 i_itemNo) {
|
|
u8 talkBtn = dComIfGp_event_getTalkXYBtn();
|
|
u8 itemBtn;
|
|
if (talkBtn == dTalkBtn_X_e) {
|
|
itemBtn = dItemBtn_X_e;
|
|
} else if (talkBtn == dTalkBtn_Y_e) {
|
|
itemBtn = dItemBtn_Y_e;
|
|
} else if (talkBtn == dTalkBtn_Z_e) {
|
|
itemBtn = dItemBtn_Z_e;
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
u8 invIdx = dComIfGs_getSelectItem(itemBtn);
|
|
if (invIdx < dInvSlot_BOTTLE0_e) {
|
|
return;
|
|
}
|
|
if (invIdx > dInvSlot_BOTTLE3_e) {
|
|
return;
|
|
}
|
|
|
|
mItems[invIdx] = i_itemNo;
|
|
|
|
dComIfGs_setItem(dComIfGs_getSelectItem(itemBtn), i_itemNo);
|
|
dComIfGp_setItem(dComIfGs_getSelectItem(itemBtn), i_itemNo);
|
|
dComIfGp_setSelectItem(itemBtn);
|
|
}
|
|
|
|
/* 80059408-8005942C .text setEquipBottleItemEmpty__17dSv_player_item_cFv */
|
|
void dSv_player_item_c::setEquipBottleItemEmpty() {
|
|
setEquipBottleItemIn(dItem_EMPTY_BOTTLE_e);
|
|
}
|
|
|
|
/* 8005942C-8005946C .text checkBottle__17dSv_player_item_cFUc */
|
|
u8 dSv_player_item_c::checkBottle(u8 i_itemNo) {
|
|
u8 ret = 0;
|
|
|
|
for (int i = 0; i < dInvSlot_BOTTLE_COUNT_e; i++) {
|
|
if (i_itemNo == mItems[i + dInvSlot_BOTTLE0_e]) {
|
|
ret++;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 8005946C-800594A8 .text checkEmptyBottle__17dSv_player_item_cFv */
|
|
u8 dSv_player_item_c::checkEmptyBottle() {
|
|
u8 ret = 0;
|
|
|
|
for (int i = 0; i < dInvSlot_BOTTLE_COUNT_e; i++) {
|
|
if (mItems[i + dInvSlot_BOTTLE0_e] == dItem_EMPTY_BOTTLE_e) {
|
|
ret++;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 800594A8-800594C4 .text init__21dSv_player_get_item_cFv */
|
|
void dSv_player_get_item_c::init() {
|
|
for (int i = 0; i < ARRAY_SIZE(mItemFlags); i++) {
|
|
mItemFlags[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 800594C4-8005955C .text onItem__21dSv_player_get_item_cFiUc */
|
|
void dSv_player_get_item_c::onItem(int i_field, u8 i_item) {
|
|
JUT_ASSERT(399, 0 <= i_item && i_item < 8);
|
|
|
|
mItemFlags[i_field] |= (u8)(1 << i_item);
|
|
}
|
|
|
|
/* 8005955C-800595F8 .text isItem__21dSv_player_get_item_cFiUc */
|
|
BOOL dSv_player_get_item_c::isItem(int i_field, u8 i_item) {
|
|
JUT_ASSERT(429, 0 <= i_item && i_item < 8);
|
|
|
|
return mItemFlags[i_field] & (u8)(1 << i_item) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 800595F8-80059740 .text onBottleItem__21dSv_player_get_item_cFUc */
|
|
void dSv_player_get_item_c::onBottleItem(u8 i_item) {
|
|
switch (i_item) {
|
|
case EMPTY_BSHIP:
|
|
mItemFlags[0] |= 0x02;
|
|
break;
|
|
case dItem_EMPTY_BOTTLE_e:
|
|
mItemFlags[0] |= 0x04;
|
|
break;
|
|
case dItem_RED_POTION_e:
|
|
mItemFlags[0] |= 0x08;
|
|
break;
|
|
case dItem_GREEN_POTION_e:
|
|
mItemFlags[0] |= 0x10;
|
|
break;
|
|
case dItem_BLUE_POTION_e:
|
|
mItemFlags[0] |= 0x20;
|
|
break;
|
|
case dItem_HALF_SOUP_BOTTLE_e:
|
|
mItemFlags[0] |= 0x40;
|
|
break;
|
|
case dItem_SOUP_BOTTLE_e:
|
|
mItemFlags[0] |= 0x80;
|
|
break;
|
|
case dItem_WATER_BOTTLE_e:
|
|
mItemFlags[1] |= 0x02;
|
|
break;
|
|
case dItem_FAIRY_BOTTLE_e:
|
|
mItemFlags[1] |= 0x04;
|
|
break;
|
|
case dItem_FIREFLY_BOTTLE_e:
|
|
mItemFlags[1] |= 0x08;
|
|
break;
|
|
case dItem_FOREST_WATER_e:
|
|
mItemFlags[1] |= 0x10;
|
|
break;
|
|
case UNK_BOTTLE_5A:
|
|
mItemFlags[1] |= 0x20;
|
|
break;
|
|
case UNK_BOTTLE_5B:
|
|
mItemFlags[1] |= 0x40;
|
|
break;
|
|
case UNK_BOTTLE_5C:
|
|
mItemFlags[1] |= 0x80;
|
|
break;
|
|
case UNK_BOTTLE_5D:
|
|
mItemFlags[2] |= 0x02;
|
|
break;
|
|
case UNK_BOTTLE_5E:
|
|
mItemFlags[2] |= 0x04;
|
|
break;
|
|
case UNK_BOTTLE_5F:
|
|
mItemFlags[2] |= 0x08;
|
|
break;
|
|
case UNK_BOTTLE_60:
|
|
mItemFlags[2] |= 0x10;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 80059740-80059848 .text isBottleItem__21dSv_player_get_item_cFUc */
|
|
BOOL dSv_player_get_item_c::isBottleItem(u8 i_item) {
|
|
switch (i_item) {
|
|
case EMPTY_BSHIP:
|
|
return (mItemFlags[0] >> 1) & 1;
|
|
case dItem_EMPTY_BOTTLE_e:
|
|
return (mItemFlags[0] >> 2) & 1;
|
|
case dItem_RED_POTION_e:
|
|
return (mItemFlags[0] >> 3) & 1;
|
|
case dItem_GREEN_POTION_e:
|
|
return (mItemFlags[0] >> 4) & 1;
|
|
case dItem_BLUE_POTION_e:
|
|
return (mItemFlags[0] >> 5) & 1;
|
|
case dItem_HALF_SOUP_BOTTLE_e:
|
|
return (mItemFlags[0] >> 6) & 1;
|
|
case dItem_SOUP_BOTTLE_e:
|
|
return (mItemFlags[0] >> 7) & 1;
|
|
case dItem_WATER_BOTTLE_e:
|
|
return (mItemFlags[1] >> 1) & 1;
|
|
case dItem_FAIRY_BOTTLE_e:
|
|
return (mItemFlags[1] >> 2) & 1;
|
|
case dItem_FIREFLY_BOTTLE_e:
|
|
return (mItemFlags[1] >> 3) & 1;
|
|
case dItem_FOREST_WATER_e:
|
|
return (mItemFlags[1] >> 4) & 1;
|
|
case UNK_BOTTLE_5A:
|
|
return (mItemFlags[1] >> 5) & 1;
|
|
case UNK_BOTTLE_5B:
|
|
return (mItemFlags[1] >> 6) & 1;
|
|
case UNK_BOTTLE_5C:
|
|
return (mItemFlags[1] >> 7) & 1;
|
|
case UNK_BOTTLE_5D:
|
|
return (mItemFlags[2] >> 1) & 1;
|
|
case UNK_BOTTLE_5E:
|
|
return (mItemFlags[2] >> 2) & 1;
|
|
case UNK_BOTTLE_5F:
|
|
return (mItemFlags[2] >> 3) & 1;
|
|
case UNK_BOTTLE_60:
|
|
return (mItemFlags[2] >> 4) & 1;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 80059848-8005987C .text init__24dSv_player_item_record_cFv */
|
|
void dSv_player_item_record_c::init() {
|
|
mItemRecord2.mPictureNum = 0;
|
|
mItemRecord2.mArrowNum = 0;
|
|
mItemRecord2.mBombNum = 0;
|
|
mTimer = 0;
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
mBottleNum[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 8005987C-80059894 .text resetTimer__24dSv_player_item_record_cFUs */
|
|
void dSv_player_item_record_c::resetTimer(u16 timer) {
|
|
mTimer = timer;
|
|
dComIfGs_stopFwaterTimer();
|
|
}
|
|
|
|
/* 80059894-800598D0 .text decTimer__24dSv_player_item_record_cFv */
|
|
void dSv_player_item_record_c::decTimer() {
|
|
if (dComIfGs_checkFwaterTimer() != 1)
|
|
return;
|
|
|
|
if (mTimer != 0) {
|
|
mTimer--;
|
|
return;
|
|
}
|
|
|
|
mTimer = 0;
|
|
dComIfGs_stopFwaterTimer();
|
|
}
|
|
|
|
/* 800598D0-800598D8 .text getTimer__24dSv_player_item_record_cFv */
|
|
u16 dSv_player_item_record_c::getTimer() {
|
|
return mTimer;
|
|
}
|
|
|
|
/* 800598D8-80059908 .text init__21dSv_player_item_max_cFv */
|
|
void dSv_player_item_max_c::init() {
|
|
setReserved1Num(0);
|
|
setArrowNum(0);
|
|
setBombNum(0);
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
field_0x3[i] = 0;
|
|
}
|
|
}
|
|
/* 80059908-80059968 .text init__21dSv_player_bag_item_cFv */
|
|
void dSv_player_bag_item_c::init() {
|
|
for (int i = 0; i < ARRAY_SIZE(mBeast); i++) {
|
|
mBeast[i] = dItem_NONE_e;
|
|
}
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(mBait); i++) {
|
|
mBait[i] = dItem_NONE_e;
|
|
}
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(mReserve); i++) {
|
|
mReserve[i] = dItem_NONE_e;
|
|
}
|
|
}
|
|
|
|
/* 80059968-800599D8 .text setBeastItem__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setBeastItem(u8 i_itemNo) {
|
|
if (!checkBeastItem(i_itemNo)) {
|
|
for (int i = 0; i < ARRAY_SIZE(mBeast); i++) {
|
|
if (mBeast[i] == dItem_NONE_e) {
|
|
mBeast[i] = i_itemNo;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 800599D8-80059C30 .text setBeastItemEmpty__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setBeastItemEmpty(u8 i_itemNo) {
|
|
if (checkBeastItem(i_itemNo)) {
|
|
for (int i = 0; i < ARRAY_SIZE(mBeast); i++) {
|
|
if (mBeast[i] == i_itemNo) {
|
|
mBeast[i] = dItem_NONE_e;
|
|
for (int itemBtn = 0; itemBtn < dItemBtn_COUNT_e; itemBtn++) {
|
|
if (dComIfGp_getSelectItem(itemBtn) == i_itemNo) {
|
|
dComIfGs_setItem(dComIfGs_getSelectItem(itemBtn), dItem_NONE_e);
|
|
dComIfGp_setItem(dComIfGs_getSelectItem(itemBtn), dItem_NONE_e);
|
|
dComIfGp_setSelectItem(itemBtn);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80059C30-80059C60 .text checkBeastItem__21dSv_player_bag_item_cFUc */
|
|
bool dSv_player_bag_item_c::checkBeastItem(u8 i_itemNo) {
|
|
for (int i = 0; i < ARRAY_SIZE(mBeast); i++) {
|
|
if (mBeast[i] == i_itemNo) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 80059C60-80059EB0 .text setBaitItemChange__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setBaitItemChange(u8 i_itemNo) {
|
|
u8 talkBtn = dComIfGp_event_getTalkXYBtn();
|
|
u8 itemBtn;
|
|
if (talkBtn == dTalkBtn_X_e) {
|
|
itemBtn = dItemBtn_X_e;
|
|
} else if (talkBtn == dTalkBtn_Y_e) {
|
|
itemBtn = dItemBtn_Y_e;
|
|
} else if (talkBtn == dTalkBtn_Z_e) {
|
|
itemBtn = dItemBtn_Z_e;
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
u8 invIdx = dComIfGs_getSelectItem(itemBtn);
|
|
if (invIdx < dInvSlot_BaitFirst_e) {
|
|
return;
|
|
}
|
|
if (invIdx >= dInvSlot_BaitLast_e) {
|
|
return;
|
|
}
|
|
|
|
dComIfGs_setItem(dComIfGs_getSelectItem(itemBtn), i_itemNo);
|
|
dComIfGp_setItem(dComIfGs_getSelectItem(itemBtn), i_itemNo);
|
|
dComIfGp_setSelectItem(itemBtn);
|
|
}
|
|
|
|
/* 80059EB0-8005A0C8 .text setBaitItemChange__21dSv_player_bag_item_cFUcUc */
|
|
void dSv_player_bag_item_c::setBaitItemChange(u8 i_itemBtn, u8 i_itemNo) {
|
|
if (i_itemBtn > dItemBtn_COUNT_e-1) {
|
|
return;
|
|
}
|
|
|
|
u8 invIdx = dComIfGs_getSelectItem(i_itemBtn);
|
|
if (invIdx < dInvSlot_BaitFirst_e) {
|
|
return;
|
|
}
|
|
if (invIdx >= dInvSlot_BaitLast_e) {
|
|
return;
|
|
}
|
|
|
|
dComIfGs_setItem(dComIfGs_getSelectItem(i_itemBtn), i_itemNo);
|
|
dComIfGp_setItem(dComIfGs_getSelectItem(i_itemBtn), i_itemNo);
|
|
dComIfGp_setSelectItem(i_itemBtn);
|
|
}
|
|
|
|
/* 8005A0C8-8005A1A4 .text setBaitItemEmpty__21dSv_player_bag_item_cFv */
|
|
void dSv_player_bag_item_c::setBaitItemEmpty() {
|
|
u8 talkBtn = dComIfGp_event_getTalkXYBtn();
|
|
u8 itemBtn;
|
|
if (talkBtn == dTalkBtn_X_e) {
|
|
itemBtn = dItemBtn_X_e;
|
|
} else if (talkBtn == dTalkBtn_Y_e) {
|
|
itemBtn = dItemBtn_Y_e;
|
|
} else if (talkBtn == dTalkBtn_Z_e) {
|
|
itemBtn = dItemBtn_Z_e;
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
u8 invIdx = dComIfGs_getSelectItem(itemBtn);
|
|
if (invIdx < dInvSlot_BaitFirst_e) {
|
|
return;
|
|
}
|
|
if (invIdx >= dInvSlot_BaitLast_e) {
|
|
return;
|
|
}
|
|
|
|
int baitSlotIdx = invIdx - dInvSlot_BaitFirst_e;
|
|
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
|
|
u8 itemNo = dComIfGp_getSelectItem(itemBtn);
|
|
|
|
if (itemNo == dItem_HYOI_PEAR_e) {
|
|
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
|
|
setBaitItemChange(dItem_NONE_e);
|
|
} else if (itemNo == dItem_BIRD_BAIT_5_e) {
|
|
num = dComIfGs_getBaitNum(baitSlotIdx);
|
|
if (num > 0) {
|
|
num = num - 1;
|
|
}
|
|
dComIfGs_setBaitNum(baitSlotIdx, num);
|
|
if (num == 0) {
|
|
setBaitItemChange(dItem_NONE_e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8005A1A4-8005A248 .text setBaitItemEmpty__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setBaitItemEmpty(u8 i_itemBtn) {
|
|
if (i_itemBtn > dItemBtn_COUNT_e-1) {
|
|
return;
|
|
}
|
|
|
|
u8 invIdx = dComIfGs_getSelectItem(i_itemBtn);
|
|
if (invIdx < dInvSlot_BaitFirst_e) {
|
|
return;
|
|
}
|
|
if (invIdx >= dInvSlot_BaitLast_e) {
|
|
return;
|
|
}
|
|
|
|
int baitSlotIdx = invIdx - dInvSlot_BaitFirst_e;
|
|
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
|
|
u8 itemNo = dComIfGp_getSelectItem(i_itemBtn);
|
|
|
|
if (itemNo == dItem_HYOI_PEAR_e) {
|
|
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
|
|
setBaitItemChange(i_itemBtn, dItem_NONE_e);
|
|
} else if (itemNo == dItem_BIRD_BAIT_5_e) {
|
|
num = dComIfGs_getBaitNum(baitSlotIdx);
|
|
if (num > 0) {
|
|
num = num - 1;
|
|
}
|
|
dComIfGs_setBaitNum(baitSlotIdx, num);
|
|
if (num == 0) {
|
|
setBaitItemChange(i_itemBtn, dItem_NONE_e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8005A248-8005A2D0 .text setBaitItem__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setBaitItem(u8 i_itemNo) {
|
|
if (checkBaitItemEmpty()) {
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mBait[i] == dItem_NONE_e) {
|
|
mBait[i] = i_itemNo;
|
|
dComIfGs_setBaitNum(i, 3);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8005A2D0-8005A2F4 .text checkBaitItemEmpty__21dSv_player_bag_item_cFv */
|
|
u8 dSv_player_bag_item_c::checkBaitItemEmpty() {
|
|
return checkBaitItem(dItem_NONE_e);
|
|
}
|
|
|
|
/* 8005A2F4-8005A334 .text checkBaitItem__21dSv_player_bag_item_cFUc */
|
|
u8 dSv_player_bag_item_c::checkBaitItem(u8 i_itemNo) {
|
|
u8 ret = 0;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mBait[i] == i_itemNo) {
|
|
ret++;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 8005A334-8005A584 .text setReserveItemChange__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setReserveItemChange(u8 i_itemNo) {
|
|
u8 talkBtn = dComIfGp_event_getTalkXYBtn();
|
|
u8 itemBtn;
|
|
if (talkBtn == dTalkBtn_X_e) {
|
|
itemBtn = dItemBtn_X_e;
|
|
} else if (talkBtn == dTalkBtn_Y_e) {
|
|
itemBtn = dItemBtn_Y_e;
|
|
} else if (talkBtn == dTalkBtn_Z_e) {
|
|
itemBtn = dItemBtn_Z_e;
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
u8 invIdx = dComIfGs_getSelectItem(itemBtn);
|
|
if (invIdx < dInvSlot_ReserveFirst_e) {
|
|
return;
|
|
}
|
|
if (invIdx >= dInvSlot_ReserveLast_e) {
|
|
return;
|
|
}
|
|
|
|
dComIfGs_setItem(dComIfGs_getSelectItem(itemBtn), i_itemNo);
|
|
dComIfGp_setItem(dComIfGs_getSelectItem(itemBtn), i_itemNo);
|
|
dComIfGp_setSelectItem(itemBtn);
|
|
}
|
|
|
|
/* 8005A584-8005A79C .text setReserveItemChange__21dSv_player_bag_item_cFUcUc */
|
|
void dSv_player_bag_item_c::setReserveItemChange(u8 i_itemBtn, u8 i_itemNo) {
|
|
if (i_itemBtn > dItemBtn_COUNT_e-1) {
|
|
return;
|
|
}
|
|
|
|
u8 invIdx = dComIfGs_getSelectItem(i_itemBtn);
|
|
if (invIdx < dInvSlot_ReserveFirst_e) {
|
|
return;
|
|
}
|
|
if (invIdx >= dInvSlot_ReserveLast_e) {
|
|
return;
|
|
}
|
|
|
|
dComIfGs_setItem(dComIfGs_getSelectItem(i_itemBtn), i_itemNo);
|
|
dComIfGp_setItem(dComIfGs_getSelectItem(i_itemBtn), i_itemNo);
|
|
dComIfGp_setSelectItem(i_itemBtn);
|
|
}
|
|
|
|
/* 8005A79C-8005A7C0 .text setReserveItemEmpty__21dSv_player_bag_item_cFv */
|
|
void dSv_player_bag_item_c::setReserveItemEmpty() {
|
|
setReserveItemChange(dItem_NONE_e);
|
|
}
|
|
|
|
/* 8005A7C0-8005A7E4 .text setReserveItemEmpty__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setReserveItemEmpty(u8 i_itemNo) {
|
|
setReserveItemChange(i_itemNo, dItem_NONE_e);
|
|
}
|
|
|
|
/* 8005A7E4-8005A854 .text setReserveItem__21dSv_player_bag_item_cFUc */
|
|
void dSv_player_bag_item_c::setReserveItem(u8 i_itemNo) {
|
|
if (checkReserveItemEmpty()) {
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mReserve[i] == dItem_NONE_e) {
|
|
mReserve[i] = i_itemNo;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8005A854-8005A878 .text checkReserveItemEmpty__21dSv_player_bag_item_cFv */
|
|
u8 dSv_player_bag_item_c::checkReserveItemEmpty() {
|
|
return checkReserveItem(dItem_NONE_e);
|
|
}
|
|
|
|
/* 8005A878-8005A8B8 .text checkReserveItem__21dSv_player_bag_item_cFUc */
|
|
u8 dSv_player_bag_item_c::checkReserveItem(u8 i_itemNo) {
|
|
u8 ret = 0;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mReserve[i] == i_itemNo) {
|
|
ret++;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 8005A8B8-8005A8CC .text init__25dSv_player_get_bag_item_cFv */
|
|
void dSv_player_get_bag_item_c::init() {
|
|
mBeastFlags = 0;
|
|
mBaitFlags = 0;
|
|
mReserveFlags = 0;
|
|
}
|
|
|
|
/* 8005A8CC-8005A960 .text onBeast__25dSv_player_get_bag_item_cFUc */
|
|
void dSv_player_get_bag_item_c::onBeast(u8 i_no) {
|
|
JUT_ASSERT(1235, 0 <= i_no && i_no < 8);
|
|
mBeastFlags |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005A960-8005A9F8 .text isBeast__25dSv_player_get_bag_item_cFUc */
|
|
BOOL dSv_player_get_bag_item_c::isBeast(u8 i_no) {
|
|
JUT_ASSERT(1265, 0 <= i_no && i_no < 8);
|
|
return mBeastFlags & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005A9F8-8005AA8C .text onBait__25dSv_player_get_bag_item_cFUc */
|
|
void dSv_player_get_bag_item_c::onBait(u8 i_no) {
|
|
JUT_ASSERT(1280, 0 <= i_no && i_no < 8);
|
|
mBaitFlags |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005AA8C-8005AB24 .text isBait__25dSv_player_get_bag_item_cFUc */
|
|
BOOL dSv_player_get_bag_item_c::isBait(u8 i_no) {
|
|
JUT_ASSERT(1310, 0 <= i_no && i_no < 8);
|
|
return mBaitFlags & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005AB24-8005ABB4 .text onReserve__25dSv_player_get_bag_item_cFUc */
|
|
void dSv_player_get_bag_item_c::onReserve(u8 i_no) {
|
|
JUT_ASSERT(1325, 0 <= i_no && i_no < 32);
|
|
mReserveFlags |= (1 << i_no);
|
|
}
|
|
|
|
/* 8005ABB4-8005AC48 .text isReserve__25dSv_player_get_bag_item_cFUc */
|
|
BOOL dSv_player_get_bag_item_c::isReserve(u8 i_no) {
|
|
JUT_ASSERT(1355, 0 <= i_no && i_no < 32);
|
|
return mReserveFlags & (1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005AC48-8005ACA8 .text init__28dSv_player_bag_item_record_cFv */
|
|
void dSv_player_bag_item_record_c::init() {
|
|
for (int i = 0; i < 8; i++) {
|
|
mBeastNum[i] = 0;
|
|
}
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
mBaitNum[i] = 0;
|
|
}
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
mReserveNum[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 8005ACA8-8005ACE0 .text init__20dSv_player_collect_cFv */
|
|
void dSv_player_collect_c::init() {
|
|
for (int i = 0; i < ARRAY_SIZE(mCollect); i++) {
|
|
mCollect[i] = 0;
|
|
}
|
|
|
|
field_0x8 = 0;
|
|
mTact = 0;
|
|
mTriforce = 0;
|
|
mSymbol = 0;
|
|
field_0xc = 0;
|
|
}
|
|
|
|
/* 8005ACE0-8005AD78 .text onCollect__20dSv_player_collect_cFiUc */
|
|
void dSv_player_collect_c::onCollect(int i_idx, u8 i_item) {
|
|
JUT_ASSERT(1412, 0 <= i_item && i_item < 8);
|
|
mCollect[i_idx] |= (u8)(1 << i_item);
|
|
}
|
|
|
|
/* 8005AD78-8005AE10 .text offCollect__20dSv_player_collect_cFiUc */
|
|
void dSv_player_collect_c::offCollect(int i_idx, u8 i_item) {
|
|
JUT_ASSERT(1427, 0 <= i_item && i_item < 8);
|
|
mCollect[i_idx] &= ~(u8)(1 << i_item);
|
|
}
|
|
|
|
/* 8005AE10-8005AEAC .text isCollect__20dSv_player_collect_cFiUc */
|
|
BOOL dSv_player_collect_c::isCollect(int i_idx, u8 i_item) {
|
|
JUT_ASSERT(1442, 0 <= i_item && i_item < 8);
|
|
return mCollect[i_idx] & (u8)(1 << i_item) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005AEAC-8005AF40 .text onTact__20dSv_player_collect_cFUc */
|
|
void dSv_player_collect_c::onTact(u8 i_no) {
|
|
JUT_ASSERT(1502, 0 <= i_no && i_no < 8);
|
|
mTact |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005AF40-8005AFD8 .text isTact__20dSv_player_collect_cFUc */
|
|
BOOL dSv_player_collect_c::isTact(u8 i_no) {
|
|
JUT_ASSERT(1532, 0 <= i_no && i_no < 8);
|
|
return mTact & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005AFD8-8005B06C .text onTriforce__20dSv_player_collect_cFUc */
|
|
void dSv_player_collect_c::onTriforce(u8 i_no) {
|
|
JUT_ASSERT(1547, 0 <= i_no && i_no < 8);
|
|
mTriforce |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005B06C-8005B104 .text isTriforce__20dSv_player_collect_cFUc */
|
|
BOOL dSv_player_collect_c::isTriforce(u8 i_no) {
|
|
JUT_ASSERT(1577, 0 <= i_no && i_no < 8);
|
|
return mTriforce & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005B104-8005B198 .text onSymbol__20dSv_player_collect_cFUc */
|
|
void dSv_player_collect_c::onSymbol(u8 i_no) {
|
|
JUT_ASSERT(1592, 0 <= i_no && i_no < 8);
|
|
mSymbol |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005B198-8005B230 .text isSymbol__20dSv_player_collect_cFUc */
|
|
BOOL dSv_player_collect_c::isSymbol(u8 i_no) {
|
|
JUT_ASSERT(1622, 0 <= i_no && i_no < 8);
|
|
return mSymbol & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005B230-8005B290 .text getTriforceNum__20dSv_player_collect_cFv */
|
|
int dSv_player_collect_c::getTriforceNum() {
|
|
int num = 0;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
if (isTriforce(i)) {
|
|
num++;
|
|
}
|
|
}
|
|
|
|
return num;
|
|
}
|
|
|
|
/* 8005B290-8005B320 .text init__16dSv_player_map_cFv */
|
|
void dSv_player_map_c::init() {
|
|
for (int i = 0; i < ARRAY_SIZE(field_0x0[0]); i++) {
|
|
field_0x0[0][i] = 0;
|
|
field_0x0[1][i] = 0;
|
|
field_0x0[2][i] = 0;
|
|
field_0x0[3][i] = 0;
|
|
}
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(mFmapBits); i++) {
|
|
mFmapBits[i] = 0;
|
|
}
|
|
|
|
field_0x81 = 0;
|
|
mFmapBits[dIsleIdx_ForsakenFortress_e] = 1 | 2;
|
|
mFmapBits[dIsleIdx_OutsetIsland_e] = 1 | 2;
|
|
mFmapBits[dIsleIdx_WindfallIsland_e] = 1 | 2;
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(field_0x71); i++) {
|
|
field_0x71[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 8005B320-8005B3CC .text onGetMap__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::onGetMap(int i_no) {
|
|
JUT_ASSERT(1690, 0 <= i_no && i_no < 128);
|
|
field_0x0[1][i_no >> 5] |= (1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005B3CC-8005B47C .text isGetMap__16dSv_player_map_cFi */
|
|
BOOL dSv_player_map_c::isGetMap(int i_no) {
|
|
JUT_ASSERT(1718, 0 <= i_no && i_no < 128);
|
|
return field_0x0[1][i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005B47C-8005B528 .text onOpenMap__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::onOpenMap(int i_no) {
|
|
JUT_ASSERT(1751, 0 <= i_no && i_no < 128);
|
|
field_0x0[2][i_no >> 5] |= (1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005B528-8005B5D4 .text offOpenMap__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::offOpenMap(int i_no) {
|
|
JUT_ASSERT(1765, 0 <= i_no && i_no < 128);
|
|
field_0x0[2][i_no >> 5] &= ~(1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005B5D4-8005B684 .text isOpenMap__16dSv_player_map_cFi */
|
|
BOOL dSv_player_map_c::isOpenMap(int i_no) {
|
|
JUT_ASSERT(1779, 0 <= i_no && i_no < 128);
|
|
return field_0x0[2][i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005B684-8005B730 .text onCompleteMap__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::onCompleteMap(int i_no) {
|
|
JUT_ASSERT(1812, 0 <= i_no && i_no < 128);
|
|
field_0x0[3][i_no >> 5] |= (1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005B730-8005B7DC .text offCompleteMap__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::offCompleteMap(int i_no) {
|
|
JUT_ASSERT(1826, 0 <= i_no && i_no < 128);
|
|
field_0x0[3][i_no >> 5] &= ~(1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005B7DC-8005B88C .text isCompleteMap__16dSv_player_map_cFi */
|
|
BOOL dSv_player_map_c::isCompleteMap(int i_no) {
|
|
JUT_ASSERT(1840, 0 <= i_no && i_no < 128);
|
|
return field_0x0[3][i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005B88C-8005B92C .text onTriforce__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::onTriforce(int i_no) {
|
|
JUT_ASSERT(1874, 0 <= i_no && i_no < 8);
|
|
field_0x81 |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005B92C-8005B9CC .text offTriforce__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::offTriforce(int i_no) {
|
|
JUT_ASSERT(1888, 0 <= i_no && i_no < 8);
|
|
field_0x81 &= ~(u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005B9CC-8005BA70 .text isTriforce__16dSv_player_map_cFi */
|
|
BOOL dSv_player_map_c::isTriforce(int i_no) {
|
|
JUT_ASSERT(1902, 0 <= i_no && i_no < 8);
|
|
return field_0x81 & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005BA70-8005BAE8 .text getCollectMapNum__16dSv_player_map_cFv */
|
|
int dSv_player_map_c::getCollectMapNum() {
|
|
int num = 0;
|
|
for (int i = 1; i <= 61; i++) {
|
|
if (i != 35 && i != 36 && i < 52 && isGetMap(i - 1)) {
|
|
num++;
|
|
}
|
|
}
|
|
|
|
return num;
|
|
}
|
|
|
|
/* 8005BAE8-8005BB84 .text onFmapBit__16dSv_player_map_cFiUc */
|
|
void dSv_player_map_c::onFmapBit(int i_idx, u8 i_no) {
|
|
JUT_ASSERT(1957, 0 <= i_no && i_no < 8);
|
|
mFmapBits[i_idx] |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005BB84-8005BC24 .text isFmapBit__16dSv_player_map_cFiUc */
|
|
BOOL dSv_player_map_c::isFmapBit(int i_idx, u8 i_no) {
|
|
JUT_ASSERT(1987, 0 <= i_no && i_no < 8);
|
|
return mFmapBits[i_idx] & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005BC24-8005BCBC .text onSaveArriveGrid__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::onSaveArriveGrid(int no) {
|
|
JUT_ASSERT(1996, (no >= 0) && (no < 49));
|
|
onFmapBit(no, 0);
|
|
}
|
|
|
|
/* 8005BCBC-8005BD54 .text isSaveArriveGrid__16dSv_player_map_cFi */
|
|
BOOL dSv_player_map_c::isSaveArriveGrid(int no) {
|
|
JUT_ASSERT(2010, (no >= 0) && (no < 49));
|
|
return isFmapBit(no, 0);
|
|
}
|
|
|
|
/* 8005BD54-8005BDEC .text onSaveArriveGridForAgb__16dSv_player_map_cFi */
|
|
void dSv_player_map_c::onSaveArriveGridForAgb(int no) {
|
|
JUT_ASSERT(2017, (no >= 0) && (no < 49));
|
|
onFmapBit(no, 1);
|
|
}
|
|
|
|
/* 8005BDEC-8005BE84 .text isSaveArriveGridForAgb__16dSv_player_map_cFi */
|
|
BOOL dSv_player_map_c::isSaveArriveGridForAgb(int no) {
|
|
JUT_ASSERT(2029, (no >= 0) && (no < 49));
|
|
return isFmapBit(no, 1);
|
|
}
|
|
|
|
/* 8005BE84-8005BF2C .text init__17dSv_player_info_cFv */
|
|
void dSv_player_info_c::init() {
|
|
static char l_defaultName[] = VERSION_SELECT("リンク", "リンク", "Link", "Link");
|
|
|
|
strcpy(mPlayerName, l_defaultName);
|
|
#if VERSION <= VERSION_JPN
|
|
if (g_msgDHIO.field_0x08 == 1) {
|
|
strcpy(mPlayerName, "Link");
|
|
}
|
|
#endif
|
|
field_0x10 = 0;
|
|
strcpy(field_0x25, l_defaultName);
|
|
strcpy(field_0x36, l_defaultName);
|
|
|
|
mDeathCount = 0;
|
|
mClearCount = 0;
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(field_0x47); i++) {
|
|
field_0x47[i] = 0;
|
|
}
|
|
|
|
mRandomSalvagePoint = cM_rndF(3.0f);
|
|
if (mRandomSalvagePoint >= 3) {
|
|
mRandomSalvagePoint = 2;
|
|
}
|
|
}
|
|
|
|
/* 8005BF2C-8005BFA4 .text init__19dSv_player_config_cFv */
|
|
void dSv_player_config_c::init() {
|
|
mRuby = VERSION_SELECT(0, 0, 1, 0);
|
|
|
|
u32 soundMode = OSGetSoundMode();
|
|
if (soundMode == 0) {
|
|
mSoundMode = 0;
|
|
JAIZelBasic::getInterface()->setOutputMode(0);
|
|
} else {
|
|
mSoundMode = 1;
|
|
JAIZelBasic::getInterface()->setOutputMode(1);
|
|
}
|
|
|
|
mAttentionType = 0;
|
|
mVibration = 1;
|
|
}
|
|
|
|
/* 8005BFA4-8005BFC8 .text checkVibration__19dSv_player_config_cFv */
|
|
s32 dSv_player_config_c::checkVibration() {
|
|
if (JUTGamePad::sRumbleSupported & 0x80000000)
|
|
return dComIfGp_getNowVibration();
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 8005BFC8-8005BFD4 .text init__19dSv_player_priest_cFv */
|
|
void dSv_player_priest_c::init() {
|
|
field_0xf = 0;
|
|
}
|
|
|
|
/* 8005BFD4-8005BFFC .text set__19dSv_player_priest_cFUcR4cXyzsSc */
|
|
void dSv_player_priest_c::set(u8 param_0, cXyz& param_1, s16 param_2, s8 param_3) {
|
|
field_0xf = param_0;
|
|
field_0x0 = param_1;
|
|
field_0xc = param_2;
|
|
field_0xe = param_3;
|
|
}
|
|
|
|
/* 8005BFFC-8005C000 .text init__21dSv_player_status_c_cFv */
|
|
void dSv_player_status_c_c::init() {}
|
|
|
|
/* 8005C000-8005C094 .text init__12dSv_player_cFv */
|
|
void dSv_player_c::init() {
|
|
mPlayerStatusA.init();
|
|
mPlayerStatusB.init();
|
|
mReturnPlace.init();
|
|
mPlayerItem.init();
|
|
mGetItem.init();
|
|
mItemRecord.init();
|
|
mItemMax.init();
|
|
mBagItem.init();
|
|
mGetBagItem.init();
|
|
mBagItemRecord.init();
|
|
mCollect.init();
|
|
mMap.init();
|
|
mInfo.init();
|
|
mConfig.init();
|
|
}
|
|
|
|
/* 8005C094-8005C0EC .text init__12dSv_memBit_cFv */
|
|
void dSv_memBit_c::init() {
|
|
mTbox = 0;
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(mSwitch); i++) {
|
|
mSwitch[i] = 0;
|
|
}
|
|
|
|
mItem[0] = 0;
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(mVisitedRoom); i++) {
|
|
mVisitedRoom[i] = 0;
|
|
}
|
|
|
|
mKeyNum = 0;
|
|
mDungeonItem = 0;
|
|
}
|
|
|
|
/* 8005C0EC-8005C188 .text onTbox__12dSv_memBit_cFi */
|
|
void dSv_memBit_c::onTbox(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2225, 2225, 2252, 2252), 0 <= i_no && i_no < 32);
|
|
mTbox |= (1 << i_no);
|
|
}
|
|
|
|
/* 8005C188-8005C228 .text isTbox__12dSv_memBit_cFi */
|
|
BOOL dSv_memBit_c::isTbox(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2253, 2253, 2280, 2280), 0 <= i_no && i_no < 32);
|
|
return mTbox & (1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005C228-8005C2D4 .text onSwitch__12dSv_memBit_cFi */
|
|
void dSv_memBit_c::onSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2284, 2284, 2311, 2311), 0 <= i_no && i_no < 128);
|
|
mSwitch[i_no >> 5] |= (1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005C2D4-8005C380 .text offSwitch__12dSv_memBit_cFi */
|
|
void dSv_memBit_c::offSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2298, 2298, 2325, 2325), 0 <= i_no && i_no < 128);
|
|
mSwitch[i_no >> 5] &= ~(1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005C380-8005C430 .text isSwitch__12dSv_memBit_cFi */
|
|
BOOL dSv_memBit_c::isSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2312, 2312, 2339, 2339), 0 <= i_no && i_no < 128);
|
|
return mSwitch[i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005C430-8005C4EC .text revSwitch__12dSv_memBit_cFi */
|
|
BOOL dSv_memBit_c::revSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2326, 2326, 2353, 2353), 0 <= i_no && i_no < 128);
|
|
|
|
u32 idx = i_no >> 5;
|
|
u32 sw = 1 << (i_no & 0x1F);
|
|
mSwitch[idx] ^= sw;
|
|
return mSwitch[idx] & sw ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005C4EC-8005C598 .text onItem__12dSv_memBit_cFi */
|
|
void dSv_memBit_c::onItem(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2345, 2345, 2372, 2372), 0 <= i_no && i_no < 64);
|
|
mItem[i_no >> 5] |= (1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005C598-8005C648 .text isItem__12dSv_memBit_cFi */
|
|
BOOL dSv_memBit_c::isItem(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2373, 2373, 2400, 2400), 0 <= i_no && i_no < 64);
|
|
return mItem[i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005C648-8005C6F4 .text onVisitedRoom__12dSv_memBit_cFi */
|
|
void dSv_memBit_c::onVisitedRoom(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2405, 2405, 2432, 2432), 0 <= i_no && i_no < 64);
|
|
mVisitedRoom[i_no >> 5] |= (1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005C6F4-8005C7A4 .text isVisitedRoom__12dSv_memBit_cFi */
|
|
BOOL dSv_memBit_c::isVisitedRoom(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2433, 2433, 2460, 2460), 0 <= i_no && i_no < 64);
|
|
return mVisitedRoom[i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005C7A4-8005C844 .text onDungeonItem__12dSv_memBit_cFi */
|
|
void dSv_memBit_c::onDungeonItem(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2465, 2465, 2492, 2492), 0 <= i_no && i_no < 6);
|
|
mDungeonItem |= (u8)(1 << i_no);
|
|
}
|
|
|
|
/* 8005C844-8005C8E8 .text isDungeonItem__12dSv_memBit_cFi */
|
|
BOOL dSv_memBit_c::isDungeonItem(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2494, 2494, 2521, 2521), 0 <= i_no && i_no < 6);
|
|
return mDungeonItem & (u8)(1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
static void dummy() {
|
|
OSReport("(123 <= i_no) && (i_no <= 132)");
|
|
}
|
|
|
|
/* 8005C8E8-8005C908 .text init__11dSv_ocean_cFv */
|
|
void dSv_ocean_c::init() {
|
|
for (int i = 0; i < 50; i++) {
|
|
field_0x0[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 8005C908-8005C9E8 .text onOceanSvBit__11dSv_ocean_cFUcUs */
|
|
void dSv_ocean_c::onOceanSvBit(u8 i_grid, u16 i_bit) {
|
|
JUT_ASSERT(VERSION_SELECT(2613, 2613, 2640, 2640), (0 <= i_grid) && (i_grid <= 0x31));
|
|
JUT_ASSERT(VERSION_SELECT(2614, 2614, 2641, 2641), (0 <= i_bit) && (i_bit < 16));
|
|
field_0x0[i_grid] |= (u16)(1 << i_bit);
|
|
}
|
|
|
|
/* 8005C9E8-8005CACC .text isOceanSvBit__11dSv_ocean_cFUcUs */
|
|
BOOL dSv_ocean_c::isOceanSvBit(u8 i_grid, u16 i_bit) {
|
|
JUT_ASSERT(VERSION_SELECT(2645, 2645, 2672, 2672), (0 <= i_grid) && (i_grid <= 0x31));
|
|
JUT_ASSERT(VERSION_SELECT(2646, 2646, 2673, 2673), (0 <= i_bit) && (i_bit < 16));
|
|
return field_0x0[i_grid] & (u16)(1 << i_bit) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005CACC-8005CB04 .text init__11dSv_event_cFv */
|
|
void dSv_event_c::init() {
|
|
for (int i = 0; i < 0x100; i++) {
|
|
mFlags[i] = 0;
|
|
}
|
|
|
|
setInitEventBit();
|
|
}
|
|
|
|
/* 8005CB04-8005CB1C .text onEventBit__11dSv_event_cFUs */
|
|
void dSv_event_c::onEventBit(u16 i_no) {
|
|
mFlags[i_no >> 8] |= (i_no & 0xFF);
|
|
}
|
|
|
|
/* 8005CB1C-8005CB34 .text offEventBit__11dSv_event_cFUs */
|
|
void dSv_event_c::offEventBit(u16 i_no) {
|
|
mFlags[i_no >> 8] &= ~(i_no & 0xFF);
|
|
}
|
|
|
|
/* 8005CB34-8005CB58 .text isEventBit__11dSv_event_cFUs */
|
|
BOOL dSv_event_c::isEventBit(u16 i_no) {
|
|
return mFlags[i_no >> 8] & (i_no & 0xFF) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005CB58-8005CB7C .text setEventReg__11dSv_event_cFUsUc */
|
|
void dSv_event_c::setEventReg(u16 i_reg, u8 i_no) {
|
|
mFlags[i_reg >> 8] &= ~(u8)i_reg;
|
|
mFlags[i_reg >> 8] |= i_no;
|
|
}
|
|
|
|
/* 8005CB7C-8005CB94 .text getEventReg__11dSv_event_cFUs */
|
|
u8 dSv_event_c::getEventReg(u16 i_reg) {
|
|
return (u8)i_reg & mFlags[i_reg >> 8];
|
|
}
|
|
|
|
/* 8005CB94-8005CBB0 .text init__13dSv_reserve_cFv */
|
|
void dSv_reserve_c::init() {
|
|
for (int i = 0; i < sizeof(dSv_reserve_c); i++) {
|
|
mReserve[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 8005CBB0-8005CBD0 .text init__12dSv_memory_cFv */
|
|
void dSv_memory_c::init() {
|
|
mMembit.init();
|
|
}
|
|
|
|
/* 8005CBD0-8005CC08 .text init__12dSv_danBit_cFSc */
|
|
int dSv_danBit_c::init(s8 i_stageNo) {
|
|
if (i_stageNo != mStageNo) {
|
|
mSwitch[0] = 0;
|
|
mSwitch[1] = 0;
|
|
mStageNo = i_stageNo;
|
|
mGbaRupeeCount = 0;
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 8005CC08-8005CCB4 .text onSwitch__12dSv_danBit_cFi */
|
|
void dSv_danBit_c::onSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2790, 2790, 2817, 2817), 0 <= i_no && i_no < 64);
|
|
mSwitch[i_no >> 5] |= (1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005CCB4-8005CD60 .text offSwitch__12dSv_danBit_cFi */
|
|
void dSv_danBit_c::offSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2804, 2804, 2831, 2831), 0 <= i_no && i_no < 64);
|
|
mSwitch[i_no >> 5] &= ~(1 << (i_no & 0x1F));
|
|
}
|
|
|
|
/* 8005CD60-8005CE10 .text isSwitch__12dSv_danBit_cFi */
|
|
BOOL dSv_danBit_c::isSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2818, 2818, 2845, 2845), 0 <= i_no && i_no < 64);
|
|
return mSwitch[i_no >> 5] & (1 << (i_no & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005CE10-8005CECC .text revSwitch__12dSv_danBit_cFi */
|
|
BOOL dSv_danBit_c::revSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2832, 2832, 2859, 2859), 0 <= i_no && i_no < 64);
|
|
|
|
int sw = 1 << (i_no & 0x1F);
|
|
mSwitch[i_no >> 5] ^= sw;
|
|
return mSwitch[i_no >> 5] & sw ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005CECC-8005CEF4 .text init__13dSv_zoneBit_cFv */
|
|
void dSv_zoneBit_c::init() {
|
|
for (int i = 0; i < 3; i++) {
|
|
mSwitch[i] = 0;
|
|
}
|
|
|
|
mItem = 0;
|
|
}
|
|
|
|
/* 8005CEF4-8005CF00 .text clearRoomSwitch__13dSv_zoneBit_cFv */
|
|
void dSv_zoneBit_c::clearRoomSwitch() {
|
|
mSwitch[2] = 0;
|
|
}
|
|
|
|
/* 8005CF00-8005CFAC .text onSwitch__13dSv_zoneBit_cFi */
|
|
void dSv_zoneBit_c::onSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2876, 2876, 2903, 2903), 0 <= i_no && i_no < SWITCH_MAX);
|
|
mSwitch[i_no >> 4] |= (u16)(1 << (i_no & 0xF));
|
|
}
|
|
|
|
/* 8005CFAC-8005D054 .text offSwitch__13dSv_zoneBit_cFi */
|
|
void dSv_zoneBit_c::offSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2890, 2890, 2917, 2917), 0 <= i_no && i_no < SWITCH_MAX);
|
|
mSwitch[i_no >> 4] &= ~(1 << (i_no & 0xF));
|
|
}
|
|
|
|
/* 8005D054-8005D100 .text isSwitch__13dSv_zoneBit_cFi */
|
|
BOOL dSv_zoneBit_c::isSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2904, 2904, 2931, 2931), 0 <= i_no && i_no < SWITCH_MAX);
|
|
return mSwitch[i_no >> 4] & 1 << (i_no & 0xF) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005D100-8005D1B8 .text revSwitch__13dSv_zoneBit_cFi */
|
|
BOOL dSv_zoneBit_c::revSwitch(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2918, 2918, 2945, 2945), 0 <= i_no && i_no < SWITCH_MAX);
|
|
|
|
u32 idx = i_no >> 4;
|
|
int sw = 1 << (i_no & 0xF);
|
|
mSwitch[idx] ^= sw;
|
|
return mSwitch[idx] & sw ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005D1B8-8005D254 .text onItem__13dSv_zoneBit_cFi */
|
|
void dSv_zoneBit_c::onItem(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2937, 2937, 2964, 2964), 0 <= i_no && i_no < 16);
|
|
mItem |= (1 << i_no);
|
|
}
|
|
|
|
/* 8005D254-8005D2F4 .text isItem__13dSv_zoneBit_cFi */
|
|
BOOL dSv_zoneBit_c::isItem(int i_no) {
|
|
JUT_ASSERT(VERSION_SELECT(2965, 2965, 2992, 2992), 0 <= i_no && i_no < 16);
|
|
return mItem & (1 << i_no) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005D2F4-8005D314 .text init__15dSv_zoneActor_cFv */
|
|
void dSv_zoneActor_c::init() {
|
|
for (int i = 0; i < 16; i++) {
|
|
mActorFlags[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 8005D314-8005D3BC .text on__15dSv_zoneActor_cFi */
|
|
void dSv_zoneActor_c::on(int i_id) {
|
|
JUT_ASSERT(VERSION_SELECT(3010, 3010, 3037, 3037), 0 <= i_id && i_id < ACTOR_MAX);
|
|
mActorFlags[i_id >> 5] |= (1 << (i_id & 0x1F));
|
|
}
|
|
|
|
/* 8005D3BC-8005D468 .text is__15dSv_zoneActor_cFi */
|
|
BOOL dSv_zoneActor_c::is(int i_id) {
|
|
JUT_ASSERT(VERSION_SELECT(3038, 3038, 3065, 3065), 0 <= i_id && i_id < ACTOR_MAX);
|
|
return mActorFlags[i_id >> 5] & (1 << (i_id & 0x1F)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 8005D468-8005D4A4 .text init__10dSv_zone_cFi */
|
|
void dSv_zone_c::init(int i_roomNo) {
|
|
mRoomNo = i_roomNo;
|
|
mZoneBit.init();
|
|
mZoneActor.init();
|
|
}
|
|
|
|
/* 8005D4A4-8005D4C8 .text setRoom__13dSv_restart_cFRC4cXyzsSc */
|
|
void dSv_restart_c::setRoom(const cXyz& i_pos, s16 i_angle, s8 i_roomNo) {
|
|
mRestartRoom = i_roomNo;
|
|
mRestartPos = i_pos;
|
|
mRestartAngle = i_angle;
|
|
}
|
|
|
|
/* 8005D4C8-8005D584 .text setRestartOption__13dSv_restart_cFSc */
|
|
void dSv_restart_c::setRestartOption(s8 param_0) {
|
|
static cXyz l_offsetPos(100.0, 0.0f, 0.0f);
|
|
|
|
cXyz pos = mRestartPos;
|
|
cLib_offsetPos(&pos, &pos, mRestartAngle, &l_offsetPos);
|
|
setRestartOption(param_0, &pos, mRestartAngle, mRestartRoom);
|
|
}
|
|
|
|
/* 8005D584-8005D5B4 .text setRestartOption__13dSv_restart_cFScP4cXyzsSc */
|
|
void dSv_restart_c::setRestartOption(s8 param_0, cXyz* i_pos, s16 i_angle, s8 i_roomNo) {
|
|
mOptionRoomPos = *i_pos;
|
|
mOptionRoomAngleY = i_angle;
|
|
mOptionRoomNo = i_roomNo;
|
|
mOptionPoint = -1;
|
|
mOption = param_0;
|
|
}
|
|
|
|
/* 8005D5B4-8005D604 .text set__17dSv_turnRestart_cFRC4cXyzsScUlRC4cXyzsi */
|
|
void dSv_turnRestart_c::set(const cXyz& i_pos, s16 i_angle, s8 i_roomNo, u32 i_param,
|
|
const cXyz& i_shipPos, s16 i_shipAngle, BOOL i_hasShip) {
|
|
mPosition = i_pos;
|
|
mAngleY = i_angle;
|
|
mRoomNo = i_roomNo;
|
|
mParam = i_param;
|
|
field_0x13 = 0;
|
|
mShipPos = i_shipPos;
|
|
mShipAngleY = i_shipAngle;
|
|
#if VERSION > VERSION_DEMO
|
|
mHasShip = i_hasShip;
|
|
#endif
|
|
}
|
|
|
|
/* 8005D604-8005D660 .text init__10dSv_info_cFv */
|
|
void dSv_info_c::init() {
|
|
mSavedata.init();
|
|
mMemory.init();
|
|
mDan.init(-1);
|
|
initZone();
|
|
mTmp.init();
|
|
|
|
daNpc_Sarace_c::ship_race_rupee = 0;
|
|
daNpc_Sarace_c::ship_race_result = 0;
|
|
}
|
|
|
|
/* 8005D660-8005D860 .text reinit__10dSv_info_cFv */
|
|
void dSv_info_c::reinit() {
|
|
static u16 l_holdEventReg[] = {0x95FF, 0x94FF, 0x93FF, 0x92FF, 0x91FF, 0x90FF,
|
|
0x8FFF, 0x8EFF, 0x8DFF, 0x8CFF, 0xB1FF, 0x9CFF,
|
|
0x84FF, 0x83FF, 0x82FF, 0x81FF, 0x80FF};
|
|
|
|
static u16 l_onEventBit[] = {0x2F08, 0x2F04, 0x2F02, 0x3A01, 0x3401};
|
|
|
|
u8* r29 = new u8[ARRAY_SIZE(l_holdEventReg)];
|
|
for (int i = 0; i < ARRAY_SIZE(l_holdEventReg); i++) {
|
|
r29[i] = dComIfGs_getEventReg(l_holdEventReg[i]);
|
|
}
|
|
|
|
u8 clearCount = dComIfGs_getClearCount();
|
|
|
|
char name[17];
|
|
strcpy(name, dComIfGs_getPlayerName());
|
|
|
|
u8 attnType = dComIfGs_getOptAttentionType();
|
|
u8 ruby = dComIfGs_getOptRuby();
|
|
u8 sound = dComIfGs_getOptSound();
|
|
u8 vib = dComIfGs_getOptVibration();
|
|
|
|
u8 pictureNum = dComIfGs_getPictureNum();
|
|
|
|
u8 r27 = dComIfGs_getEventReg(0x89FF);
|
|
|
|
init();
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(l_holdEventReg); i++) {
|
|
dComIfGs_setEventReg(l_holdEventReg[i], r29[i]);
|
|
}
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(l_onEventBit); i++) {
|
|
dComIfGs_onEventBit(l_onEventBit[i]);
|
|
}
|
|
|
|
dComIfGs_setEventReg(0xC407, 7);
|
|
|
|
dComIfGs_setClearCount(clearCount);
|
|
|
|
dComIfGs_onSaveTbox(dSv_save_c::STAGE_MISC, 0x00);
|
|
dComIfGs_onSaveSwitch(dSv_save_c::STAGE_SEA, 0x47);
|
|
dComIfGs_onSaveSwitch(dSv_save_c::STAGE_SEA, 0x5E);
|
|
|
|
dComIfGs_setPlayerName(name);
|
|
|
|
dComIfGs_setOptAttentionType(attnType);
|
|
dComIfGs_setOptRuby(ruby);
|
|
dComIfGs_setOptSound(sound);
|
|
dComIfGs_setOptVibration(vib);
|
|
|
|
dComIfGs_setRandomSalvagePoint(3);
|
|
|
|
dComIfGs_setItem(dInvSlot_CAMERA_e, CAMERA2);
|
|
dComIfGp_setItem(dInvSlot_CAMERA_e, CAMERA2);
|
|
|
|
dComIfGs_onGetItem(dInvSlot_CAMERA_e, 0);
|
|
dComIfGs_onGetItem(dInvSlot_CAMERA_e, 1);
|
|
|
|
dComIfGs_setPictureNum(pictureNum);
|
|
|
|
dComIfGs_setEventReg(0x89FF, r27);
|
|
}
|
|
|
|
/* 8005D860-8005D8C8 .text init__10dSv_save_cFv */
|
|
void dSv_save_c::init() {
|
|
mPlayer.init();
|
|
|
|
for (int i = 0; i < STAGE_MAX; i++) {
|
|
mMemory[i].init();
|
|
}
|
|
|
|
mOcean.init();
|
|
mEvent.init();
|
|
}
|
|
|
|
/* 8005D8C8-8005D988 .text getSave__10dSv_info_cFi */
|
|
void dSv_info_c::getSave(int i_stageNo) {
|
|
JUT_ASSERT(VERSION_SELECT(3308, 3308, 3335, 3335), 0 <= i_stageNo && i_stageNo < dSv_save_c::STAGE_MAX);
|
|
mMemory = mSavedata.getSave(i_stageNo);
|
|
}
|
|
|
|
/* 8005D988-8005DA70 .text putSave__10dSv_info_cFi */
|
|
void dSv_info_c::putSave(int i_stageNo) {
|
|
JUT_ASSERT(VERSION_SELECT(3324, 3324, 3351, 3351), 0 <= i_stageNo && i_stageNo < dSv_save_c::STAGE_MAX);
|
|
mSavedata.putSave(i_stageNo, mMemory);
|
|
}
|
|
|
|
/* 8005DA70-8005DAC8 .text initZone__10dSv_info_cFv */
|
|
void dSv_info_c::initZone() {
|
|
for (int i = 0; i < 32; i++) {
|
|
mZone[i].init(-1);
|
|
}
|
|
}
|
|
|
|
/* 8005DAC8-8005DB24 .text createZone__10dSv_info_cFi */
|
|
int dSv_info_c::createZone(int i_roomNo) {
|
|
dSv_zone_c* zone_p = mZone;
|
|
|
|
for (int i = 0; i < ZONE_MAX; i++) {
|
|
if (zone_p->getRoomNo() < 0) {
|
|
zone_p->init(i_roomNo);
|
|
return i;
|
|
}
|
|
zone_p++;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
/* 8005DB24-8005DCD0 .text onSwitch__10dSv_info_cFii */
|
|
void dSv_info_c::onSwitch(int i_no, int i_roomNo) {
|
|
JUT_ASSERT(VERSION_SELECT(3384, 3384, 3411, 3411),
|
|
(0 <= i_no && i_no < (MEMORY_SWITCH+ DAN_SWITCH+ ZONE_SWITCH)) || i_no == -1 || i_no == 255);
|
|
|
|
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 {
|
|
JUT_ASSERT(VERSION_SELECT(3397, 3397, 3424, 3424), 0 <= i_roomNo && i_roomNo < 64);
|
|
|
|
int zoneId = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3399, 3399, 3426, 3426), 0 <= zoneId && zoneId < ZONE_MAX);
|
|
|
|
mZone[zoneId].getZoneBit().onSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
|
|
}
|
|
}
|
|
|
|
/* 8005DCEC-8005DE98 .text offSwitch__10dSv_info_cFii */
|
|
void dSv_info_c::offSwitch(int i_no, int i_roomNo) {
|
|
JUT_ASSERT(VERSION_SELECT(3421, 3421, 3448, 3448),
|
|
(0 <= i_no && i_no < (MEMORY_SWITCH+ DAN_SWITCH+ ZONE_SWITCH)) || i_no == -1 || i_no == 255);
|
|
|
|
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 {
|
|
JUT_ASSERT(VERSION_SELECT(3434, 3434, 3461, 3461), 0 <= i_roomNo && i_roomNo < 64);
|
|
|
|
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3436, 3436, 3463, 3463), 0 <= zoneNo && zoneNo < ZONE_MAX);
|
|
|
|
mZone[zoneNo].getZoneBit().offSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
|
|
}
|
|
}
|
|
|
|
/* 8005DE98-8005DFE0 .text isSwitch__10dSv_info_cFii */
|
|
BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) {
|
|
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 {
|
|
JUT_ASSERT(VERSION_SELECT(3482, 3482, 3509, 3509), 0 <= i_roomNo && i_roomNo < 64);
|
|
|
|
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3484, 3484, 3511, 3511), 0 <= zoneNo && zoneNo < ZONE_MAX);
|
|
|
|
return mZone[zoneNo].getZoneBit().isSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
|
|
}
|
|
}
|
|
|
|
/* 8005DFE0-8005E190 .text revSwitch__10dSv_info_cFii */
|
|
BOOL dSv_info_c::revSwitch(int i_no, int i_roomNo) {
|
|
JUT_ASSERT(VERSION_SELECT(3505, 3505, 3532, 3532),
|
|
(0 <= i_no && i_no < (MEMORY_SWITCH+ DAN_SWITCH+ ZONE_SWITCH)) || i_no == -1 || i_no == 255);
|
|
|
|
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 {
|
|
JUT_ASSERT(VERSION_SELECT(3517, 3517, 3544, 3544), 0 <= i_roomNo && i_roomNo < 64);
|
|
|
|
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3519, 3519, 3546, 3546), 0 <= zoneNo && zoneNo < ZONE_MAX);
|
|
|
|
return mZone[zoneNo].getZoneBit().revSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH));
|
|
}
|
|
}
|
|
|
|
/* 8005E190-8005E324 .text onItem__10dSv_info_cFii */
|
|
void dSv_info_c::onItem(int i_no, int i_roomNo) {
|
|
JUT_ASSERT(VERSION_SELECT(3538, 3538, 3565, 3565),
|
|
(0 <= i_no && i_no < (MEMORY_ITEM+ZONE_ITEM)) || i_no == -1 || i_no == 127);
|
|
|
|
if (i_no == -1 || i_no == 127) {
|
|
return;
|
|
}
|
|
|
|
if (i_no < MEMORY_ITEM) {
|
|
mMemory.getBit().onItem(i_no);
|
|
} else {
|
|
JUT_ASSERT(VERSION_SELECT(3548, 3548, 3575, 3575), 0 <= i_roomNo && i_roomNo < 64);
|
|
|
|
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3550, 3550, 3577, 3577), 0 <= zoneNo && zoneNo < ZONE_MAX);
|
|
|
|
mZone[zoneNo].getZoneBit().onItem(i_no - MEMORY_ITEM);
|
|
}
|
|
}
|
|
|
|
/* 8005E324-8005E4BC .text isItem__10dSv_info_cFii */
|
|
BOOL dSv_info_c::isItem(int i_no, int i_roomNo) {
|
|
JUT_ASSERT(VERSION_SELECT(3602, 3602, 3629, 3629),
|
|
(0 <= i_no && i_no < (MEMORY_ITEM+ZONE_ITEM)) || i_no == -1 || i_no == 127);
|
|
|
|
if (i_no == -1 || i_no == 127) {
|
|
return FALSE;
|
|
}
|
|
|
|
if (i_no < MEMORY_ITEM) {
|
|
return mMemory.getBit().isItem(i_no);
|
|
} else {
|
|
JUT_ASSERT(VERSION_SELECT(3611, 3611, 3638, 3638), 0 <= i_roomNo && i_roomNo < 64);
|
|
|
|
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3613, 3613, 3640, 3640), 0 <= zoneNo && zoneNo < ZONE_MAX);
|
|
|
|
return mZone[zoneNo].getZoneBit().isItem(i_no - MEMORY_ITEM);
|
|
}
|
|
}
|
|
|
|
/* 8005E4BC-8005E5F0 .text onActor__10dSv_info_cFii */
|
|
void dSv_info_c::onActor(int i_id, int i_roomNo) {
|
|
if (i_id == -1 || i_id == 0xFFFF || i_roomNo == -1) {
|
|
return;
|
|
}
|
|
|
|
JUT_ASSERT(VERSION_SELECT(3666, 3666, 3693, 3693), (0 <= i_id && i_id < dSv_zoneActor_c::ACTOR_MAX) && (0 <= i_roomNo && i_roomNo < 64));
|
|
|
|
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3668, 3668, 3695, 3695), 0 <= zoneNo && zoneNo < ZONE_MAX);
|
|
|
|
mZone[zoneNo].getActor().on(i_id);
|
|
}
|
|
|
|
/* 8005E5F0-8005E780 .text isActor__10dSv_info_cFii */
|
|
BOOL dSv_info_c::isActor(int i_id, int i_roomNo) {
|
|
if (i_id == -1 || i_id == 0xFFFF || i_roomNo == -1) {
|
|
return FALSE;
|
|
}
|
|
|
|
if (0 > i_id || i_id >= dSv_zoneActor_c::ACTOR_MAX) {
|
|
JUT_ASSERT(VERSION_SELECT(3717, 3717, 3744, 3744), 0 <= i_id && i_id < dSv_zoneActor_c::ACTOR_MAX);
|
|
}
|
|
|
|
JUT_ASSERT(VERSION_SELECT(3719, 3719, 3746, 3746), 0 <= i_roomNo && i_roomNo < 64);
|
|
|
|
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
|
|
JUT_ASSERT(VERSION_SELECT(3721, 3721, 3748, 3748), 0 <= zoneNo && zoneNo < ZONE_MAX);
|
|
|
|
return mZone[zoneNo].getActor().is(i_id);
|
|
}
|
|
|
|
/* 8005E780-8005EA24 .text memory_to_card__10dSv_info_cFPci */
|
|
int dSv_info_c::memory_to_card(char* i_cardPtr, int i_dataNum) {
|
|
char* buffer_start;
|
|
char* buffer = i_cardPtr + i_dataNum * sizeof(card_gamedata);
|
|
buffer_start = buffer;
|
|
|
|
memcpy(buffer, dComIfGs_getpPlayerStatusA(), sizeof(dSv_player_status_a_c));
|
|
dSv_player_status_a_c* status_a = (dSv_player_status_a_c*)buffer;
|
|
if (status_a->getLife() < 0xC) {
|
|
status_a->setLife(0xC);
|
|
}
|
|
buffer += sizeof(dSv_player_status_a_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpPlayerStatusB(), sizeof(dSv_player_status_b_c));
|
|
dSv_player_status_b_c* status_b = (dSv_player_status_b_c*)buffer;
|
|
status_b->setDateIpl(OSGetTime());
|
|
buffer += sizeof(dSv_player_status_b_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpPlayerReturnPlace(), sizeof(dSv_player_return_place_c));
|
|
buffer += sizeof(dSv_player_return_place_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpItem(), sizeof(dSv_player_item_c));
|
|
buffer += sizeof(dSv_player_item_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpGetItem(), sizeof(dSv_player_get_item_c));
|
|
buffer += sizeof(dSv_player_get_item_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpItemRecord(), sizeof(dSv_player_item_record_c));
|
|
buffer += sizeof(dSv_player_item_record_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpItemMax(), sizeof(dSv_player_item_max_c));
|
|
buffer += sizeof(dSv_player_item_max_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpBagItem(), sizeof(dSv_player_bag_item_c));
|
|
buffer += sizeof(dSv_player_bag_item_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpGetBagItem(), sizeof(dSv_player_get_bag_item_c));
|
|
buffer += sizeof(dSv_player_get_bag_item_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpBagItemRecord(), sizeof(dSv_player_bag_item_record_c));
|
|
buffer += sizeof(dSv_player_bag_item_record_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpCollect(), sizeof(dSv_player_collect_c));
|
|
buffer += sizeof(dSv_player_collect_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpMap(), sizeof(dSv_player_map_c));
|
|
buffer += sizeof(dSv_player_map_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpPlayerInfo(), sizeof(dSv_player_info_c));
|
|
buffer += sizeof(dSv_player_info_c);
|
|
|
|
memcpy(buffer, dComIfGs_getpConfig(), sizeof(dSv_player_config_c));
|
|
buffer += sizeof(dSv_player_config_c);
|
|
#if VERSION <= VERSION_JPN
|
|
if (dComIfGs_getOptSound() == 0) {
|
|
OSSetSoundMode(0);
|
|
} else {
|
|
OSSetSoundMode(1);
|
|
}
|
|
#endif
|
|
|
|
memcpy(buffer, dComIfGs_getpPriest(), sizeof(dSv_player_priest_c));
|
|
buffer += sizeof(dSv_player_priest_c);
|
|
|
|
for (int i = 0; i < dSv_player_c::PLAYER_STATUS_C_COUNT; i++) {
|
|
memcpy(buffer, dComIfGs_getpPlayerStatusC(i), sizeof(dSv_player_status_c_c));
|
|
buffer += sizeof(dSv_player_status_c_c);
|
|
}
|
|
|
|
memcpy(buffer, dComIfGs_getPCourseInfo(), sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX);
|
|
buffer += sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX;
|
|
|
|
memcpy(buffer, dComIfGs_getPOcean(), sizeof(dSv_ocean_c));
|
|
buffer += sizeof(dSv_ocean_c);
|
|
|
|
memcpy(buffer, dComIfGs_getPEvent(), sizeof(dSv_event_c));
|
|
buffer += sizeof(dSv_event_c);
|
|
|
|
memcpy(buffer, dComIfGs_getPReserve(), sizeof(dSv_reserve_c));
|
|
buffer += sizeof(dSv_reserve_c);
|
|
|
|
s32 save_size = buffer - buffer_start;
|
|
if (save_size > dSv_save_c::PACKED_STRUCT_SIZE) {
|
|
printf("SAVE size over(%d/%d)\n", dSv_save_c::PACKED_STRUCT_SIZE, save_size);
|
|
return -1;
|
|
} else {
|
|
printf("SAVE size:%d\n", save_size);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* 8005EA24-8005ED00 .text card_to_memory__10dSv_info_cFPci */
|
|
int dSv_info_c::card_to_memory(char* i_cardPtr, int i_dataNum) {
|
|
char* buffer_start;
|
|
char* buffer = i_cardPtr + i_dataNum * sizeof(card_gamedata);
|
|
buffer_start = buffer;
|
|
|
|
memcpy(dComIfGs_getpPlayerStatusA(), buffer, sizeof(dSv_player_status_a_c));
|
|
buffer += sizeof(dSv_player_status_a_c);
|
|
|
|
memcpy(dComIfGs_getpPlayerStatusB(), buffer, sizeof(dSv_player_status_b_c));
|
|
buffer += sizeof(dSv_player_status_b_c);
|
|
|
|
memcpy(dComIfGs_getpPlayerReturnPlace(), buffer, sizeof(dSv_player_return_place_c));
|
|
buffer += sizeof(dSv_player_return_place_c);
|
|
|
|
memcpy(dComIfGs_getpItem(), buffer, sizeof(dSv_player_item_c));
|
|
buffer += sizeof(dSv_player_item_c);
|
|
|
|
memcpy(dComIfGs_getpGetItem(), buffer, sizeof(dSv_player_get_item_c));
|
|
buffer += sizeof(dSv_player_get_item_c);
|
|
|
|
memcpy(dComIfGs_getpItemRecord(), buffer, sizeof(dSv_player_item_record_c));
|
|
buffer += sizeof(dSv_player_item_record_c);
|
|
|
|
memcpy(dComIfGs_getpItemMax(), buffer, sizeof(dSv_player_item_max_c));
|
|
buffer += sizeof(dSv_player_item_max_c);
|
|
|
|
memcpy(dComIfGs_getpBagItem(), buffer, sizeof(dSv_player_bag_item_c));
|
|
buffer += sizeof(dSv_player_bag_item_c);
|
|
|
|
memcpy(dComIfGs_getpGetBagItem(), buffer, sizeof(dSv_player_get_bag_item_c));
|
|
buffer += sizeof(dSv_player_get_bag_item_c);
|
|
|
|
memcpy(dComIfGs_getpBagItemRecord(), buffer, sizeof(dSv_player_bag_item_record_c));
|
|
buffer += sizeof(dSv_player_bag_item_record_c);
|
|
|
|
memcpy(dComIfGs_getpCollect(), buffer, sizeof(dSv_player_collect_c));
|
|
buffer += sizeof(dSv_player_collect_c);
|
|
|
|
memcpy(dComIfGs_getpMap(), buffer, sizeof(dSv_player_map_c));
|
|
buffer += sizeof(dSv_player_map_c);
|
|
|
|
memcpy(dComIfGs_getpPlayerInfo(), buffer, sizeof(dSv_player_info_c));
|
|
buffer += sizeof(dSv_player_info_c);
|
|
|
|
memcpy(dComIfGs_getpConfig(), buffer, sizeof(dSv_player_config_c));
|
|
buffer += sizeof(dSv_player_config_c);
|
|
if (OSGetSoundMode() == 0) {
|
|
dComIfGs_setOptSound(0);
|
|
mDoAud_setOutputMode(0);
|
|
} else if (dComIfGs_getOptSound() == 2) {
|
|
mDoAud_setOutputMode(2);
|
|
} else {
|
|
dComIfGs_setOptSound(1);
|
|
mDoAud_setOutputMode(1);
|
|
}
|
|
|
|
memcpy(dComIfGs_getpPriest(), buffer, sizeof(dSv_player_priest_c));
|
|
buffer += sizeof(dSv_player_priest_c);
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
memcpy(dComIfGs_getpPlayerStatusC(i), buffer, sizeof(dSv_player_status_c_c));
|
|
buffer += sizeof(dSv_player_status_c_c);
|
|
}
|
|
|
|
memcpy(dComIfGs_getPCourseInfo(), buffer, sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX);
|
|
buffer += sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX;
|
|
|
|
memcpy(dComIfGs_getPOcean(), buffer, sizeof(dSv_ocean_c));
|
|
buffer += sizeof(dSv_ocean_c);
|
|
|
|
memcpy(dComIfGs_getPEvent(), buffer, sizeof(dSv_event_c));
|
|
buffer += sizeof(dSv_event_c);
|
|
|
|
memcpy(dComIfGs_getPReserve(), buffer, sizeof(dSv_reserve_c));
|
|
buffer += sizeof(dSv_reserve_c);
|
|
|
|
s32 load_size = buffer - buffer_start;
|
|
if (load_size > dSv_save_c::PACKED_STRUCT_SIZE) {
|
|
printf("LOAD size over(%d/%d)\n", dSv_save_c::PACKED_STRUCT_SIZE, load_size);
|
|
return -1;
|
|
} else {
|
|
printf("LOAD size:%d\n", load_size);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* 8005ED00-8005EF88 .text initdata_to_card__10dSv_info_cFPci */
|
|
int dSv_info_c::initdata_to_card(char* i_cardPtr, int i_dataNum) {
|
|
// TODO: This function could probably be cleaned up somehow
|
|
char* buffer = i_cardPtr + i_dataNum * sizeof(card_gamedata);
|
|
char* buffer_start = buffer;
|
|
char* buffer_src;
|
|
|
|
dSv_player_status_a_c status_a;
|
|
status_a.init();
|
|
buffer_src = (char*)&status_a;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_status_a_c));
|
|
buffer += sizeof(dSv_player_status_a_c);
|
|
|
|
dSv_player_status_b_c status_b;
|
|
status_b.init();
|
|
buffer_src = (char*)&status_b;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_status_b_c));
|
|
buffer += sizeof(dSv_player_status_b_c);
|
|
|
|
dSv_player_return_place_c return_place;
|
|
return_place.init();
|
|
buffer_src = (char*)&return_place;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_return_place_c));
|
|
buffer += sizeof(dSv_player_return_place_c);
|
|
|
|
dSv_player_item_c item;
|
|
item.init();
|
|
buffer_src = (char*)&item;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_item_c));
|
|
buffer += sizeof(dSv_player_item_c);
|
|
|
|
dSv_player_get_item_c get_item;
|
|
get_item.init();
|
|
buffer_src = (char*)&get_item;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_get_item_c));
|
|
buffer += sizeof(dSv_player_get_item_c);
|
|
|
|
dSv_player_item_record_c item_record;
|
|
item_record.init();
|
|
buffer_src = (char*)&item_record;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_item_record_c));
|
|
buffer += sizeof(dSv_player_item_record_c);
|
|
|
|
dSv_player_item_max_c item_max;
|
|
item_max.init();
|
|
buffer_src = (char*)&item_max;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_item_max_c));
|
|
buffer += sizeof(dSv_player_item_max_c);
|
|
|
|
dSv_player_bag_item_c bag_item;
|
|
bag_item.init();
|
|
buffer_src = (char*)&bag_item;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_bag_item_c));
|
|
buffer += sizeof(dSv_player_bag_item_c);
|
|
|
|
dSv_player_get_bag_item_c get_bag_item;
|
|
get_bag_item.init();
|
|
buffer_src = (char*)&get_bag_item;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_get_bag_item_c));
|
|
buffer += sizeof(dSv_player_get_bag_item_c);
|
|
|
|
dSv_player_bag_item_record_c bag_item_record;
|
|
bag_item_record.init();
|
|
buffer_src = (char*)&bag_item_record;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_bag_item_record_c));
|
|
buffer += sizeof(dSv_player_bag_item_record_c);
|
|
|
|
dSv_player_collect_c collect;
|
|
collect.init();
|
|
buffer_src = (char*)&collect;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_collect_c));
|
|
buffer += sizeof(dSv_player_collect_c);
|
|
|
|
dSv_player_map_c map;
|
|
map.init();
|
|
buffer_src = (char*)↦
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_map_c));
|
|
buffer += sizeof(dSv_player_map_c);
|
|
|
|
dSv_player_info_c info;
|
|
info.init();
|
|
memset(buffer, 0, sizeof(dSv_player_info_c));
|
|
buffer += sizeof(dSv_player_info_c);
|
|
|
|
dSv_player_config_c config;
|
|
config.init();
|
|
buffer_src = (char*)&config;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_config_c));
|
|
buffer += sizeof(dSv_player_config_c);
|
|
|
|
dSv_player_priest_c priest;
|
|
priest.init();
|
|
buffer_src = (char*)&priest;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_priest_c));
|
|
buffer += sizeof(dSv_player_priest_c);
|
|
|
|
dSv_player_status_c_c status_c;
|
|
status_c.init();
|
|
buffer_src = (char*)&status_c;
|
|
for (int i = 0; i < 4; i++) {
|
|
memcpy(buffer, buffer_src, sizeof(dSv_player_status_c_c));
|
|
buffer += sizeof(dSv_player_status_c_c);
|
|
}
|
|
|
|
// Bug: It copies 16 instances of dSv_memory_c from the stack to the card, but only allocates and initializes 1.
|
|
// This means when it initializes an empty save slot in the memory card, all of the stage save tables except the
|
|
// first are filled with garbage data instead of all zeroes.
|
|
// It's unlikely that this bug has any actual effect ingame, as when you start a new game using the empty slot, it
|
|
// initializes all 16 dSv_memory_c with zeroes again anyway. But I haven't looked into it too deeply.
|
|
dSv_memory_c memory;
|
|
memory.init();
|
|
buffer_src = (char*)&memory;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX);
|
|
buffer += sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX;
|
|
|
|
dSv_ocean_c ocean;
|
|
ocean.init();
|
|
buffer_src = (char*)&ocean;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_ocean_c));
|
|
buffer += sizeof(dSv_ocean_c);
|
|
|
|
dSv_event_c event;
|
|
event.init();
|
|
buffer_src = (char*)&event;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_event_c));
|
|
buffer += sizeof(dSv_event_c);
|
|
|
|
dSv_reserve_c reserve;
|
|
reserve.init();
|
|
buffer_src = (char*)&reserve;
|
|
memcpy(buffer, buffer_src, sizeof(dSv_reserve_c));
|
|
buffer += sizeof(dSv_reserve_c);
|
|
|
|
s32 load_size = buffer - buffer_start;
|
|
if (load_size > dSv_save_c::PACKED_STRUCT_SIZE) {
|
|
printf("INIT size over %d/%d\n", dSv_save_c::PACKED_STRUCT_SIZE, load_size);
|
|
return -1;
|
|
} else {
|
|
printf("INIT size:%d\n", load_size);
|
|
return 0;
|
|
}
|
|
}
|