d_a_alink cleanup / debug work (#3045)

* start d_a_alink debug cleanup

* d_a_alink_damage debug

* d_a_alink_guard debug

* d_a_alink_bow debug

* d_a_alink_boom debug

* d_a_alink_copyrod debug

* d_a_alink_hvyboots debug

* d_a_alink_grab debug

* d_a_alink_sumou debug

* d_a_alink_horse debug

* d_a_alink_canoe debug

* d_a_alink_crawl / d_a_alink_hang debug

* d_a_alink_swim debug

* d_a_alink_hook / d_a_alink_iceleaf debug

* d_a_alink_bottle debug

* d_a_alink_whistle / d_a_alink_kandelaar / d_a_alink_ironball debug

* d_a_alink_demo debug

* d_a_alink_effect debug

* d_a_alink_wolf debug

* d_a_alink debug / cleanup

* cleanup button status enums
This commit is contained in:
TakaRikka
2026-01-17 05:44:37 -08:00
committed by GitHub
parent 43eac24e2e
commit ccdb3fbd2a
85 changed files with 11833 additions and 10199 deletions
+4132 -3411
View File
File diff suppressed because it is too large Load Diff
+155 -135
View File
@@ -12,124 +12,132 @@
static void daAlinkHIO_setAnmGenMessage(daAlinkHIO_anm_c* i_anmP, JORMContext* ctx, char* param_3,
f32 param_4, int param_5) {
size_t sVar1;
char acStack_94[100];
char labelbuf[100];
sVar1 = strlen(param_3);
sprintf(acStack_94, param_3);
sprintf(labelbuf, param_3);
// A Speed
sprintf(acStack_94 + sVar1, "A速度");
ctx->genSlider(acStack_94, &i_anmP->mSpeed, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
sprintf(labelbuf + sVar1, "A速度");
ctx->genSlider(labelbuf, &i_anmP->mSpeed, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Starting F
sprintf(acStack_94 + sVar1, "開始F");
ctx->genSlider(acStack_94, &i_anmP->mStartFrame, 0.0f, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
sprintf(labelbuf + sVar1, "開始F");
ctx->genSlider(labelbuf, &i_anmP->mStartFrame, 0.0f, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
// Ending F
sprintf(acStack_94 + sVar1, "終了F");
ctx->genSlider(acStack_94, &i_anmP->mEndFrame, 0, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
sprintf(labelbuf + sVar1, "終了F");
ctx->genSlider(labelbuf, &i_anmP->mEndFrame, 0, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
if (param_5 != 0) {
sprintf(acStack_94 + sVar1, "CF");
ctx->genSlider(acStack_94, &i_anmP->mCancelFrame, -1.0f, param_4 + 1.0f, 0, NULL, 0xffff,
sprintf(labelbuf + sVar1, "CF");
ctx->genSlider(labelbuf, &i_anmP->mCancelFrame, -1.0f, param_4 + 1.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
}
// Interpolation
sprintf(acStack_94 + sVar1, "補間");
ctx->genSlider(acStack_94, &i_anmP->mInterpolation, 0.0f, 20.0f, 0, NULL, 0xffff, 0xffff, 0x200,
sprintf(labelbuf + sVar1, "補間");
ctx->genSlider(labelbuf, &i_anmP->mInterpolation, 0.0f, 20.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
}
static void daAlinkHIO_setReverseAnmGenMessage(daAlinkHIO_anm_c* i_anmP, JORMContext* ctx,
char* param_3, f32 param_4, int param_5) {
size_t sVar1;
char acStack_94[100];
char labelbuf[100];
sVar1 = strlen(param_3);
sprintf(acStack_94, param_3);
sprintf(labelbuf, param_3);
// A Speed
sprintf(acStack_94 + sVar1, "A速度");
ctx->genSlider(acStack_94, &i_anmP->mSpeed, -10.0f, 0.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
sprintf(labelbuf + sVar1, "A速度");
ctx->genSlider(labelbuf, &i_anmP->mSpeed, -10.0f, 0.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Starting F
sprintf(acStack_94 + sVar1, "開始F");
ctx->genSlider(acStack_94, &i_anmP->mEndFrame, 0, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
sprintf(labelbuf + sVar1, "開始F");
ctx->genSlider(labelbuf, &i_anmP->mEndFrame, 0, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
// Ending F
sprintf(acStack_94 + sVar1, "終了F");
ctx->genSlider(acStack_94, &i_anmP->mStartFrame, 0.0f, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
sprintf(labelbuf + sVar1, "終了F");
ctx->genSlider(labelbuf, &i_anmP->mStartFrame, 0.0f, param_4, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
if (param_5 != 0) {
sprintf(acStack_94 + sVar1, "CF");
ctx->genSlider(acStack_94, &i_anmP->mCancelFrame, -1.0f, param_4 + 1.0f, 0, NULL, 0xffff,
sprintf(labelbuf + sVar1, "CF");
ctx->genSlider(labelbuf, &i_anmP->mCancelFrame, -1.0f, param_4 + 1.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
}
// Interpolation
sprintf(acStack_94 + sVar1, "補間");
ctx->genSlider(acStack_94, &i_anmP->mInterpolation, 0.0f, 20.0f, 0, NULL, 0xffff, 0xffff, 0x200,
sprintf(labelbuf + sVar1, "補間");
ctx->genSlider(labelbuf, &i_anmP->mInterpolation, 0.0f, 20.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
}
// DEBUG NONMATCHING - regalloc + extra mr instruction
void daAlinkHIO_data_c::setStructData(char* param_1) {
u8* pfVar2;
u8* pfVar4;
void daAlinkHIO_data_c::setStructData(char* o_data) {
int i, j;
s16* ps16data;
f32* pf32data;
daAlinkHIO_anm_c* panmdata;
u8* pu8data;
sprintf(param_1 + strlen(param_1), m_name_string);
pfVar2 = (u8*)mp_data;
// open struct data string
sprintf(o_data + strlen(o_data), m_name_string);
panmdata = (daAlinkHIO_anm_c*)mp_data;
for (int i = 0; i < m_anm_num; i++) {
sprintf(param_1 + strlen(param_1), "\t{\n");
pfVar4 = pfVar2;
// create daAlinkHIO_anm_c data string
for (i = 0; i < m_anm_num; i++) {
sprintf(o_data + strlen(o_data), "\t{\n");
for (int i = 0; i < 2; i++) {
sprintf(param_1 + strlen(param_1), "\t\t%d,\n", *(s16*)pfVar4);
pfVar4 += 2;
ps16data = (s16*)panmdata;
for (j = 0; j < 2; j++) {
sprintf(o_data + strlen(o_data), "\t\t%d,\n", *ps16data);
ps16data++;
}
pfVar4 = pfVar2;
for (int i = 0; i < 4; i++) {
sprintf(param_1 + strlen(param_1), "\t\t%ff,\n", *(f32*)pfVar4);
pfVar4 += 4;
pf32data = (f32*)ps16data;
for (j = 0; j < 4; j++) {
sprintf(o_data + strlen(o_data), "\t\t%ff,\n", *pf32data);
pf32data++;
}
pfVar2 += 0x14;
sprintf(param_1 + strlen(param_1), "\t},\n");
panmdata++;
sprintf(o_data + strlen(o_data), "\t},\n");
}
pfVar4 = pfVar2;
for (int i = 0; i < m_u8_num; i++) {
sprintf(param_1 + strlen(param_1), "\t%d,\n", *(u8*)pfVar2);
pfVar2++;
// create u8 data string
pu8data = (u8*)panmdata;
for (i = 0; i < m_u8_num; i++) {
sprintf(o_data + strlen(o_data), "\t%d,\n", *pu8data);
pu8data++;
}
for (int i = 0; i < m_s16_num; i++) {
sprintf(param_1 + strlen(param_1), "\t%d,\n", *(s16*)pfVar2);
pfVar2 += 2;
// create s16 data string
ps16data = (s16*)pu8data;
for (i = 0; i < m_s16_num; i++) {
sprintf(o_data + strlen(o_data), "\t%d,\n", *ps16data);
ps16data++;
}
for (int i = 0; i < m_f32_num; i++) {
sprintf(param_1 + strlen(param_1), "\t%ff,\n", *(f32*)pfVar2);
pfVar2 += 4;
// create f32 data string
pf32data = (f32*)ps16data;
for (i = 0; i < m_f32_num; i++) {
sprintf(o_data + strlen(o_data), "\t%ff,\n", *pf32data);
pf32data++;
}
sprintf(param_1 + strlen(param_1), "};\n\n");
// close struct data string
sprintf(o_data + strlen(o_data), "};\n\n");
}
daAlinkHIO_data_c* l_HIO_before;
daAlinkHIO_data_c* l_HIO_top;
void daAlinkHIO_data_c::checkDataSize() {
u32 dataSize = (m_u8_num + m_anm_num * 0x14) + (m_s16_num * 2) + (m_f32_num * 4);
u32 dataSize = (m_u8_num + m_anm_num * sizeof(daAlinkHIO_anm_c)) + (m_s16_num * sizeof(s16)) + (m_f32_num * sizeof(f32));
JUT_ASSERT(188, dataSize == m_len);
if (l_HIO_before != NULL) {
@@ -146,49 +154,65 @@ void daAlinkHIO_data_c::baseCopy() {
cLib_memCpy(mp_data, mp_src_data, m_len);
}
// DEBUG NONMATCHING
void daAlinkHIO_data_c::update() {
int i, j;
s16* ps16data;
u8* pu8data;
f32* pf32data;
daAlinkHIO_anm_c* panmdata;
baseCopy();
JORMContext* ctx = attachJORMContext(8);
ctx->startUpdateNode(this);
u8* local_20 = (u8*)mp_data;
for (int i = 0; i < m_anm_num; i++) {
ctx->updateSlider(2, (s16*)local_20, 0, 0, 0);
panmdata = (daAlinkHIO_anm_c*)mp_data;
for (i = 0; i < m_anm_num; i++) {
ps16data = (s16*)panmdata;
ctx->updateSlider(2, ps16data, 0, 0, 0);
ps16data++;
ps16data++;
for (int j = 0; j < 4; local_20 += 4, j++) {
ctx->updateSlider(2, (f32*)local_20, 0.0f, 0.0f, 0);
pf32data = (f32*)ps16data;
for (j = 0; j < 4; j++) {
ctx->updateSlider(2, pf32data, 0.0f, 0.0f, 0);
pf32data++;
}
panmdata++;
}
for (int i = 0; i < f14; i++) {
ctx->updateCheckBox(2, local_20, 1, 0);
pu8data = (u8*)panmdata;
for (i = 0; i < f14; i++) {
ctx->updateCheckBox(2, pu8data, 1, 0);
pu8data++;
}
for (int i = 0; i < f18; i++) {
ctx->updateComboBox(2, local_20, 0);
// local_20++;
for (i = 0; i < f18; i++) {
ctx->updateComboBox(2, pu8data, 0);
pu8data++;
}
for (int i = 0; i < (m_u8_num - f14 + f18); i++) {
// local_20++;
int spC = m_u8_num - (f14 + f18);
for (i = 0; i < spC; i++) {
pu8data++;
}
int iVar1 = f1c;
int iVar3 = m_s16_num;
for (int i = 0; i < iVar3 - iVar1; i++) {
ctx->updateSlider(2, (s16*)local_20, 0, 0, 0);
// local_20 += 2;
ps16data = (s16*)pu8data;
int sp8 = m_s16_num - f1c;
for (i = 0; i < sp8; i++) {
ctx->updateSlider(2, ps16data, 0, 0, 0);
ps16data++;
}
for (int i = 0; i < f1c; i++) {
// local_20 += 2;
for (i = 0; i < f1c; i++) {
ps16data++;
}
for (int i = 0; i < m_f32_num; i++) {
ctx->updateSlider(2, (f32*)local_20, 0.0f, 0.0f, 0);
// local_20 += 4;
pf32data = (f32*)ps16data;
for (i = 0; i < m_f32_num; i++) {
ctx->updateSlider(2, pf32data, 0.0f, 0.0f, 0);
pf32data++;
}
ctx->endUpdateNode();
@@ -5812,9 +5836,9 @@ void daAlinkHIO_c::jumpStateUpdate(const cXyz* param_0, const cXyz* param_1, f32
JORMContext* ctx = attachJORMContext(8);
ctx->startUpdateNode(this);
sprintf(buf, "水平距離 %-8.3f", JMAFastSqrt(xDiff * xDiff + zDiff * zDiff));
ctx->updateLabel(2, 0x4000006, buf);
ctx->updateLabel(2, PROPERTY_JUMP_HDIST_DISP_e, buf);
sprintf(buf, "最頂点 %-8.3f", param_2);
ctx->updateLabel(2, 0x4000007, buf);
ctx->updateLabel(2, PROPERTY_JUMP_VDIST_DISP_e, buf);
ctx->endUpdateNode();
releaseJORMContext(ctx);
}
@@ -5823,15 +5847,15 @@ void daAlinkHIO_c::genMessage(JORMContext* ctx) {
// ------ Info Display ------
ctx->genLabel("------情報表示------", 0x4000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Horizontal Distance
ctx->genLabel("水平距離", 0x4000006, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genLabel("水平距離", PROPERTY_JUMP_HDIST_DISP_e, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Vertical Distance
ctx->genLabel("最頂点", 0x4000007, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Reset
ctx->genButton("位置", 0x4000002, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genLabel("最頂点", PROPERTY_JUMP_VDIST_DISP_e, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Position
ctx->genButton("位置", PROPERTY_POS_DISP_e, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Save to File
ctx->genButton("ファイルに保存", 0x4000004, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genButton("ファイルに保存", PROPERTY_SAVE_FILE_e, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Load File
ctx->genButton("ファイル読込", 0x4000005, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genButton("ファイル読込", PROPERTY_LOAD_FILE_e, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// Basic
ctx->genNode("基本", &mBasic, 0, 0);
// Move
@@ -5880,51 +5904,49 @@ void daAlinkHIO_c::genMessage(JORMContext* ctx) {
ctx->genNode("", &mWolf, 0, 0);
}
void daAlinkHIO_c::readFileData(char* param_0) {
int src;
void daAlinkHIO_c::readFileData(char* o_fileData) {
int position;
daAlinkHIO_data_c* top;
src = 0;
position = 0;
for (top = l_HIO_top; top != NULL; top = top->mpNext) {
cLib_memCpy(top->mp_src_data, param_0 + src, top->m_len);
cLib_memCpy(top->mp_src_data, o_fileData + position, top->m_len);
top->update();
src += top->m_len;
position += top->m_len;
}
}
size_t daAlinkHIO_c::makeFileOutData(char* param_0, char* param_1) {
size_t sVar1;
int iVar2;
size_t daAlinkHIO_c::makeFileOutData(char* o_fileData, char* o_structData) {
int position;
daAlinkHIO_data_c* top;
iVar2 = 0;
position = 0;
for (top = l_HIO_top; top != NULL; top = top->mpNext) {
cLib_memCpy(param_0 + iVar2, top->mp_data, top->m_len);
iVar2 += top->m_len;
cLib_memCpy(o_fileData + position, top->mp_data, top->m_len);
position += top->m_len;
}
param_0[iVar2] = 10;
iVar2++;
o_fileData[position] = '\n';
position++;
top = l_HIO_top;
*param_1 = 0;
*o_structData = 0;
for (; top != NULL; top = top->mpNext) {
top->setStructData(param_1);
top->setStructData(o_structData);
}
cLib_memCpy(param_0 + iVar2, param_1, strlen(param_1));
return iVar2 + strlen(param_1);
cLib_memCpy(o_fileData + position, o_structData, strlen(o_structData));
return position + strlen(o_structData);
}
void daAlinkHIO_c::listenPropertyEvent(const JORPropertyEvent* event) {
fopAc_ac_c* player = dComIfGp_getPlayer(0);
JORReflexible::listenPropertyEvent(event);
JORFile aJStack_168;
JORFile file;
switch ((u32)event->id) {
case 0x4000002: {
OS_REPORT("X = %f, Y = %f, Z = %f,\n", player->current.pos.x, player->current.pos.y,
player->current.pos.z);
case PROPERTY_POS_DISP_e: {
OS_REPORT("X = %f, Y = %f, Z = %f,\n", player->current.pos.x, player->current.pos.y, player->current.pos.z);
OS_REPORT("SHAPE_ANGLE = %x, %d\n", player->shape_angle.y, player->shape_angle.y);
OS_REPORT("CURRENT_ANGLE = %x, %d\n", player->current.angle.y, player->current.angle.y);
@@ -5934,60 +5956,58 @@ void daAlinkHIO_c::listenPropertyEvent(const JORPropertyEvent* event) {
dComIfG_play_c::getLayerNo(0));
break;
}
case 0x4000004: {
if (aJStack_168.open(6, "すべてのファイル(*.*)\0*.*\0", 0, 0, 0) != 0) {
char* buffer1 = new (0x20) char[0x10000];
char* buffer2 = new (0x20) char[0x10000];
case PROPERTY_SAVE_FILE_e: {
if (file.open(6, "すべてのファイル(*.*)\0*.*\0", NULL, NULL, NULL)) {
char* fileData = new (0x20) char[0x10000];
char* structData = new (0x20) char[0x10000];
if (buffer1 != NULL && buffer2 != NULL) {
size_t uVar5 = makeFileOutData(buffer1, buffer2);
aJStack_168.writeData(buffer1, uVar5);
if (fileData != NULL && structData != NULL) {
size_t dataSize = makeFileOutData(fileData, structData);
file.writeData(fileData, dataSize);
// Write area %x\n
OS_REPORT("書き込み領域%x\n", uVar5);
OS_REPORT("書き込み領域%x\n", dataSize);
if (uVar5 > 0x20000) {
if (dataSize > 0x20000) {
// Memory corruption has occurred!!!!!
OS_REPORT("メモリ破壊が起こりました!!!!!\n");
}
delete[] buffer1;
delete[] buffer2;
delete[] fileData;
delete[] structData;
} else {
if (buffer1 != NULL) {
delete[] buffer1;
if (fileData != NULL) {
delete[] fileData;
}
if (buffer2 != NULL) {
delete[] buffer2;
if (structData != NULL) {
delete[] structData;
}
// Could not secure the write area
OS_REPORT("書き込み用領域確保できませんでした\n");
}
aJStack_168.close();
file.close();
} else {
// Cannot open file
OS_REPORT("ファイルが開けません\n");
}
break;
}
case 0x4000005: {
if (aJStack_168.open(1, "すべてのファイル(*.*)\0*.*\0", (char*)0x0, (char*)0x0, (char*)0x0) != 0) {
char* buffer1 = new (0x20) char[0x10000];
case PROPERTY_LOAD_FILE_e: {
if (file.open(1, "すべてのファイル(*.*)\0*.*\0", NULL, NULL, NULL)) {
char* fileData = new (0x20) char[0x10000];
if (buffer1 != NULL) {
aJStack_168.readData(buffer1, 0);
readFileData(buffer1);
delete[] buffer1;
if (fileData != NULL) {
file.readData(fileData, 0);
readFileData(fileData);
delete[] fileData;
} else {
// Could not secure the read area
OS_REPORT("読み込み用領域確保できませんでした\n");
}
aJStack_168.close();
file.close();
} else {
// The file cannot be opened
OS_REPORT("ファイルが開けません\n");
+42 -34
View File
@@ -94,9 +94,12 @@ bool daAlink_c::checkBoomerangChargeEnd() {
}
BOOL daAlink_c::checkBoomerangCarry(fopAc_ac_c* i_grabActor) {
if (checkNoResetFlg0(FLG0_UNK_20) && !checkEventRun() && !checkWolf() &&
checkModeFlg(0x10000000) &&
(checkHorseNoUpperAnime() || checkHorseTurnAnime() || checkBoomerangThrowAnime())) {
if (checkNoResetFlg0(FLG0_UNK_20)
&& !checkEventRun()
&& !checkWolf()
&& checkModeFlg(0x10000000)
&& (checkHorseNoUpperAnime() || checkHorseTurnAnime() || checkBoomerangThrowAnime()))
{
deleteEquipItem(FALSE, FALSE);
seStartOnlyReverb(JA_SE_LK_BOOM_CATCH);
offNoResetFlg0(FLG0_UNK_20);
@@ -110,13 +113,12 @@ BOOL daAlink_c::checkBoomerangCarry(fopAc_ac_c* i_grabActor) {
return 0;
}
void daAlink_c::initBoomerangUpperAnimeSpeed(int param_0) {
void daAlink_c::initBoomerangUpperAnimeSpeed(BOOL param_0) {
if (!checkBoomerangThrowAnime()) {
if (param_0 != 0) {
f32 tmp = 0.0f;
mUpperFrameCtrl[2].setRate(tmp);
mUpperFrameCtrl[2].setFrame(tmp);
getNowAnmPackUpper(UPPER_2)->setFrame(tmp);
if (param_0) {
mUpperFrameCtrl[2].setRate(0.0f);
mUpperFrameCtrl[2].setFrame(0.0f);
getNowAnmPackUpper(UPPER_2)->setFrame(0.0f);
} else {
mUpperFrameCtrl[2].setRate(mpHIO->mItem.mBoomerang.m.mIdleAnmSpeed);
}
@@ -129,37 +131,36 @@ BOOL daAlink_c::checkBoomerangAnime() const {
BOOL daAlink_c::checkBoomerangThrowAnime() const {
return (mEquipItem == fpcNm_ITEM_BOOMERANG || checkNoResetFlg1(FLG1_UNK_2) || mEquipItem == 0x102) &&
checkUpperAnime(0x53);
checkUpperAnime(dRes_ID_ALANM_BCK_BOOMTHROW_e);
}
void daAlink_c::setBoomerangReadyQuake() {
f32 tmp_0 = 0.0f;
dComIfGp_getVibration().StartQuake(1, 1, cXyz(tmp_0, 1.0f, tmp_0));
dComIfGp_getVibration().StartQuake(VIBMODE_Q_POWER1, 1, cXyz(0.0f, 1.0f, 0.0f));
onNoResetFlg3(FLG3_UNK_4);
mItemVar0.field_0x3018 = mpHIO->mItem.mBoomerang.m.mChargeTime;
}
void daAlink_c::setBoomerangReadyAnime() {
f32 var_f31;
if (checkAttentionLock()) {
var_f31 = mpHIO->mItem.mBoomerang.m.mIdleAnmSpeed;
f32 anm_speed;
if (!checkAttentionLock()) {
anm_speed = 0.0f;
} else {
var_f31 = 0.0f;
anm_speed = mpHIO->mItem.mBoomerang.m.mIdleAnmSpeed;
}
setUpperAnimeBaseSpeed(0x54, var_f31, 3.0f);
setUpperAnimeBaseSpeed(dRes_ID_ALANM_BCK_BOOMWAIT_e, anm_speed, 3.0f);
setBoomerangReadyQuake();
}
void daAlink_c::setThrowBoomerangAnime() {
setUpperAnimeParam(0x53, UPPER_2, &mpHIO->mItem.mBoomerang.m.mThrowAnm);
setUpperAnimeParam(dRes_ID_ALANM_BCK_BOOMTHROW_e, UPPER_2, &mpHIO->mItem.mBoomerang.m.mThrowAnm);
cancelItemUseQuake(0);
}
void daAlink_c::setBoomerangCatchAnime() {
setUpperAnimeParam(0x52, UPPER_2, &mpHIO->mItem.mBoomerang.m.mCatchAnm);
setFacePriBck(0xE8);
setUpperAnimeParam(dRes_ID_ALANM_BCK_BOOMCATCH_e, UPPER_2, &mpHIO->mItem.mBoomerang.m.mCatchAnm);
setFacePriBck(dRes_ID_ALANM_BCK_FAT_e);
field_0x2f97 = 254;
if (mEquipItem != fpcNm_ITEM_COPY_ROD) {
@@ -234,12 +235,20 @@ void daAlink_c::throwBoomerang() {
int daAlink_c::returnBoomerang(int param_0) {
dComIfGp_clearPlayerStatus0(0, 0x400000);
if (mEquipItem == fpcNm_ITEM_NONE && !checkMagneBootsOn() && mItemAcKeep.getActor() == NULL &&
!checkBoardRide() && !checkBoarRide() && !checkWolf() &&
(mProcID != PROC_HANG_READY || field_0x3198 != 3) && (!checkEventRun() || param_0 != 0) &&
(checkNoUpperAnime() || checkPlayerGuard() || checkHorseTurnAnime() ||
checkDashDamageAnime() || checkBoomerangAnime()) &&
!checkModeFlg(0x1BD0810)) {
if (mEquipItem == fpcNm_ITEM_NONE
&& !checkMagneBootsOn()
&& mItemAcKeep.getActor() == NULL
#if !PLATFORM_SHIELD
&& !checkBoardRide()
&& !checkBoarRide()
#endif
&& !checkWolf()
&& (mProcID != PROC_HANG_READY || field_0x3198 != 3)
&& (!checkEventRun() || param_0 != 0)
&& (checkNoUpperAnime() || checkPlayerGuard() || checkHorseTurnAnime() ||
checkDashDamageAnime() || checkBoomerangAnime())
&& !checkModeFlg(0x1BD0810))
{
mItemAcKeep = mThrowBoomerangAcKeep;
mThrowBoomerangAcKeep.clearData();
@@ -247,8 +256,7 @@ int daAlink_c::returnBoomerang(int param_0) {
field_0x2f94 = 2;
onNoResetFlg0(FLG0_UNK_20);
f32 tmp_0 = 0.0f;
dComIfGp_getVibration().StartShock(1, 1, cXyz(tmp_0, 1.0f, tmp_0));
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER1, 1, cXyz(0.0f, 1.0f, 0.0f));
return 1;
}
@@ -349,7 +357,7 @@ void daAlink_c::setBoomerangSight() {
daBoomerang_c* boomerang = (daBoomerang_c*)mItemAcKeep.getActor();
if (boomerang->getLockReserve() || (check_line && !boomerang->getLockCntMax())) {
setItemActionButtonStatus(0x10);
setItemActionButtonStatus(BUTTON_STATUS_LOCK);
itemActionTrigger();
}
}
@@ -376,7 +384,7 @@ int daAlink_c::procBoomerangSubject() {
}
if (checkBoomerangReadyAnime()) {
setDoStatus(0x12);
setDoStatus(BUTTON_STATUS_BACK);
}
setShapeAngleToAtnActor(0);
@@ -414,14 +422,14 @@ int daAlink_c::procBoomerangMove() {
}
if (!checkNextAction(0)) {
f32 var_f31 = -1.0f;
f32 morf = -1.0f;
if (checkZeroSpeedF()) {
onModeFlg(1);
if (field_0x2f98 != 3) {
field_0x2f98 = 3;
var_f31 = mpHIO->mBasic.m.mBasicInterpolation;
morf = mpHIO->mBasic.m.mBasicInterpolation;
}
} else {
offModeFlg(1);
@@ -432,7 +440,7 @@ int daAlink_c::procBoomerangMove() {
}
}
setBlendAtnMoveAnime(var_f31);
setBlendAtnMoveAnime(morf);
setBodyAngleXReadyAnime(0);
}
@@ -459,7 +467,7 @@ int daAlink_c::procBoomerangCatch() {
onModeFlg(4);
}
if (frameCtrl->checkAnmEnd()) {
if (checkAnmEnd(frameCtrl)) {
resetUpperAnime(UPPER_2, -1.0f);
checkNextAction(0);
} else {
+71 -83
View File
@@ -12,7 +12,7 @@ static int daAlink_bottleModelCallBack(J3DJoint* i_joint, int param_1);
int daAlink_c::bottleModelCallBack() {
if (mItemMode != 0) {
mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30c2));
mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(mRightItemJntNo));
mDoMtx_stack_c::transM(-3.0f, -1.0f, 0.3f);
mDoMtx_stack_c::XYZrotM(cM_deg2s(102.0f), cM_deg2s(-0.5f), cM_deg2s(-122.0f));
mDoMtx_copy(mDoMtx_stack_c::get(), mHeldItemModel->getAnmMtx(1));
@@ -22,6 +22,8 @@ int daAlink_c::bottleModelCallBack() {
}
static int daAlink_bottleModelCallBack(J3DJoint* i_joint, int param_1) {
UNUSED(i_joint);
daAlink_c* player_p = (daAlink_c*)j3dSys.getModel()->getUserArea();
if (param_1 == 0) {
@@ -46,36 +48,36 @@ BOOL daAlink_c::checkOilBottleItemNotGet(u16 i_itemNo) {
void daAlink_c::setBottleModel(u16 i_itemNo) {
JKRHeap* prev_heap = setItemHeap();
mHeldItemModel = initModelEnv(loadAramBmd(0x310, 0x5C00), 0x1020200);
field_0x072c = loadAramItemBtp(0x3AE, mHeldItemModel);
field_0x0724 = loadAramItemBrk(0x322, mHeldItemModel);
mHeldItemModel = initModelEnv(loadAramBmd(dRes_ID_ALANM_BMD_AL_BOTTLE_e, 0x5C00), 0x1020200);
field_0x072c = loadAramItemBtp(dRes_ID_ALANM_BTP_AL_BOTTLE_e, mHeldItemModel);
field_0x0724 = loadAramItemBrk(dRes_ID_ALANM_BRK_AL_BOTTLE_e, mHeldItemModel);
if (checkDrinkBottleItem(i_itemNo) || checkOilBottleItemNotGet(i_itemNo)) {
field_0x071c = loadAramItemBtk(0x328, mHeldItemModel);
field_0x0720 = loadAramItemBtk(0x327, mHeldItemModel);
field_0x071c = loadAramItemBtk(dRes_ID_ALANM_BTK_BOTTLE_D_YURE_e, mHeldItemModel);
field_0x0720 = loadAramItemBtk(dRes_ID_ALANM_BTK_BOTTLE_D_NOMU_e, mHeldItemModel);
} else {
field_0x071c = loadAramItemBtk(0x32A, mHeldItemModel);
field_0x0720 = loadAramItemBtk(0x329, mHeldItemModel);
field_0x071c = loadAramItemBtk(dRes_ID_ALANM_BTK_BOTTLE_NUKU_e, mHeldItemModel);
field_0x0720 = loadAramItemBtk(dRes_ID_ALANM_BTK_BOTTLE_DASU_e, mHeldItemModel);
}
field_0x0718 = loadAramItemBtk(0x32B, mHeldItemModel);
field_0x0718 = loadAramItemBtk(dRes_ID_ALANM_BTK_BOTTLE_YURE_e, mHeldItemModel);
if (i_itemNo == fpcNm_ITEM_FAIRY) {
J3DAnmTransform* bck = (J3DAnmTransform*)loadAram(0x1E8, 0xC00);
mpHookTipModel = initModel(loadAramBmd(0x31D, 0x1400), 0);
J3DAnmTransform* bck = (J3DAnmTransform*)loadAram(dRes_ID_ALANM_BCK_O_GD_NV_e, 0xC00);
mpHookTipModel = initModel(loadAramBmd(dRes_ID_ALANM_BMD_O_GD_NV_e, 0x1400), 0);
if (!mHookTipBck.init(bck, FALSE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false)) {
JUT_ASSERT(142, FALSE);
}
mHookTipBck.entry(mpHookTipModel->getModelData(), 0.0f);
} else if (i_itemNo == fpcNm_ITEM_WORM) {
J3DAnmTransform* bck = (J3DAnmTransform*)loadAram(0x1E9, 0xC00);
mpHookTipModel = initModel(loadAramBmd(0x31E, 0x2400), 0);
J3DAnmTransform* bck = (J3DAnmTransform*)loadAram(dRes_ID_ALANM_BCK_O_GD_WORM_e, 0xC00);
mpHookTipModel = initModel(loadAramBmd(dRes_ID_ALANM_BMD_O_GD_WORM_e, 0x2400), 0);
if (!mHookTipBck.init(bck, FALSE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false)) {
JUT_ASSERT(151, FALSE);
}
mHookTipBck.entry(mpHookTipModel->getModelData(), 0.0f);
} else if (i_itemNo == fpcNm_ITEM_BEE_CHILD) {
mpHookTipModel = initModel(loadAramBmd(0x31C, 0x1000), 0);
mpHookTipModel = initModel(loadAramBmd(dRes_ID_ALANM_BMD_O_GD_HK_e, 0x1000), 0);
}
mDoExt_setCurrentHeap(prev_heap);
@@ -139,14 +141,13 @@ void daAlink_c::setBottleModel(u16 i_itemNo) {
}
}
int daAlink_c::commonBottleDrink(int param_0) {
int daAlink_c::commonBottleDrink(BOOL param_0) {
simpleAnmPlay(field_0x0718);
simpleAnmPlay(field_0x071c);
daPy_frameCtrl_c* frameCtrl_p;
u16 current_anm;
if (param_0 || mUpperAnmHeap[2].getIdx() == 0x247) {
if (param_0 || mUpperAnmHeap[2].getIdx() == dRes_ID_ALANM_BCK_TAKEL_e) {
frameCtrl_p = &mUpperFrameCtrl[2];
current_anm = mUpperAnmHeap[2].getIdx();
} else {
@@ -222,18 +223,14 @@ int daAlink_c::commonBottleDrink(int param_0) {
if (dComIfGs_getLife() <= 2) {
mItemVar0.mBottleItemHealAmount = dComIfGs_getMaxLifeGauge();
} else if (dComIfGs_getLife() <= 4) {
mItemVar0.mBottleItemHealAmount =
(dComIfGs_getMaxLifeGauge() / 2) - dComIfGs_getLife();
} else if (dComIfGs_getLife() == dComIfGs_getMaxLifeGauge() ||
cM_rnd() < 0.5f)
{
mItemVar0.mBottleItemHealAmount = (dComIfGs_getMaxLifeGauge() / 2) - dComIfGs_getLife();
} else if (dComIfGs_getLife() == dComIfGs_getMaxLifeGauge() || cM_rnd() < 0.5f) {
mItemVar0.mBottleItemHealAmount = -4;
} else {
mItemVar0.mBottleItemHealAmount = 4;
}
} else if (mEquipItem == fpcNm_ITEM_CHUCHU_PURPLE) {
f32 rnd = cM_rndF(6.0f);
if (rnd < 1.0f) {
mItemVar0.mBottleItemHealAmount = dComIfGs_getMaxLifeGauge();
} else if (rnd < 2.0f) {
@@ -329,7 +326,6 @@ int daAlink_c::commonBottleDrink(int param_0) {
return 0;
}
fopAc_ac_c* daAlink_c::makeFairy(cXyz* i_pos, u32 i_params) {
cXyz fairy_pos;
@@ -345,11 +341,8 @@ fopAc_ac_c* daAlink_c::makeFairy(cXyz* i_pos, u32 i_params) {
i_pos = &fairy_pos;
}
fopAc_ac_c* fairy_actor =
(fopAc_ac_c*)fopAcM_fastCreate(PROC_Obj_Yousei, i_params, i_pos, fopAcM_GetRoomNo(this),
&shape_angle, NULL, -1, NULL, NULL);
field_0x285c.setData(fairy_actor);
field_0x285c.setData(fopAcM_fastCreate(PROC_Obj_Yousei, i_params, i_pos, fopAcM_GetRoomNo(this),
&shape_angle, NULL, -1, NULL, NULL));
onResetFlg0(RFLG0_UNK_400);
if (checkEventRun() && field_0x285c.getActor() != NULL) {
@@ -365,7 +358,7 @@ int daAlink_c::procBottleDrinkInit(u16 i_itemNo) {
return 1;
}
} else {
if (!dComIfGp_event_compulsory(this, 0, 0xFFFF)) {
if (!dComIfGp_event_compulsory(this, NULL, 0xFFFF)) {
return 0;
}
@@ -401,8 +394,8 @@ int daAlink_c::procBottleDrink() {
return 1;
}
int daAlink_c::procBottleOpenInit(u16 param_0) {
if (!dComIfGp_event_compulsory(this, 0, 0xFFFF)) {
int daAlink_c::procBottleOpenInit(u16 i_itemNo) {
if (!dComIfGp_event_compulsory(this, NULL, 0xFFFF)) {
return 0;
}
@@ -414,7 +407,7 @@ int daAlink_c::procBottleOpenInit(u16 param_0) {
setSingleAnimeParam(ANM_BOTTLE_OPEN, &mpHIO->mItem.mBottle.m.mOpenBottleAnm);
keepItemData();
setBottleModel(param_0);
setBottleModel(i_itemNo);
dComIfGp_setPlayerStatus1(0, 0x4000);
mProcVar1.field_0x300a = 0;
field_0x32cc = -1;
@@ -435,21 +428,19 @@ int daAlink_c::procBottleOpenInit(u16 param_0) {
mProcVar3.field_0x300e = 0;
u32 id = fopAcM_GetID(this);
dCam_getBody()->StartEventCamera(0x12, id, "Type", 1, &field_0x3194, 0);
dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, 0);
mProcVar2.field_0x300c = 0;
field_0x27c8.initialize(current.pos.y + field_0x598);
field_0x27c8.initialize(current.pos.y + mHeight);
if (param_0 == 0x67) {
setCylAtParam(0x200, dCcG_At_Spl_UNK_0, 0, 0, 0, 30.0f, 30.0f);
if (i_itemNo == fpcNm_ITEM_WATER_BOTTLE) {
setCylAtParam(AT_TYPE_LANTERN_SWING, dCcG_At_Spl_UNK_0, 0, dCcD_SE_NONE, 0, 30.0f, 30.0f);
}
mProcVar4.field_0x3010 = 0;
mProcVar4.field_0x3010 = 0;
return 1;
}
int daAlink_c::procBottleOpen() {
static Vec const bottleTop = {0.0f, 25.0f, 0.0f};
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
@@ -486,17 +477,17 @@ int daAlink_c::procBottleOpen() {
mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x071c);
if (mEquipItem == fpcNm_ITEM_FAIRY) {
cXyz spC;
mDoMtx_multVec(mHeldItemModel->getBaseTRMtx(), &bottleTop, &spC);
cXyz fairyPos;
mDoMtx_multVec(mHeldItemModel->getBaseTRMtx(), &bottleTop, &fairyPos);
if (makeFairy(&spC, 0)) {
if (makeFairy(&fairyPos, 0)) {
onModeFlg(0x8000000);
mpHookTipModel = NULL;
resetFairyEffect();
}
}
} else if (frameCtrl_p->getFrame() >= 18.0f) {
field_0x2f93 = 5;
mRightHandIndex = 5;
}
} else {
if (checkAnmEnd(frameCtrl_p) && mProcVar0.field_0x3008 != 0) {
@@ -534,14 +525,12 @@ int daAlink_c::procBottleOpen() {
return 1;
}
int daAlink_c::procBottleSwingInit(fopAc_ac_c* param_0, int param_1) {
fopAc_ac_c* var_r31 = param_0;
if (var_r31 != NULL && mEquipItem != fpcNm_ITEM_KANTERA) {
int daAlink_c::procBottleSwingInit(fopAc_ac_c* i_catchActor, int param_1) {
if (i_catchActor != NULL && mEquipItem != fpcNm_ITEM_KANTERA) {
return procPreActionUnequipInit(PROC_BOTTLE_SWING, NULL);
}
if (var_r31 == NULL && getReadyItem() != fpcNm_ITEM_EMPTY_BOTTLE) {
if (i_catchActor == NULL && getReadyItem() != fpcNm_ITEM_EMPTY_BOTTLE) {
return checkWaitAction();
}
@@ -551,22 +540,24 @@ int daAlink_c::procBottleSwingInit(fopAc_ac_c* param_0, int param_1) {
field_0x2f98 = 4;
mProcVar4.field_0x3010 = param_1;
if (var_r31 != NULL) {
field_0x280c.setData(var_r31);
fopAc_ac_c* catchActor;
if (i_catchActor != NULL) {
catchActor = i_catchActor;
field_0x280c.setData(i_catchActor);
} else {
var_r31 = dComIfGp_att_getCatghTarget();
catchActor = dComIfGp_att_getCatghTarget();
}
BOOL temp_r3;
s16 temp_r30;
if (var_r31 != NULL) {
if (var_r31->attention_info.position.y > field_0x3834.y - 30.0f) {
s16 catchActorName;
if (catchActor != NULL) {
if (catchActor->attention_info.position.y > field_0x3834.y - 30.0f) {
temp_r3 = false;
} else {
temp_r3 = true;
}
temp_r30 = fopAcM_GetName(var_r31);
catchActorName = fopAcM_GetName(catchActor);
} else {
if (field_0x2fbc != 11 && field_0x2fbc != 6 && mWaterY > current.pos.y + 10.0f) {
temp_r3 = true;
@@ -574,16 +565,16 @@ int daAlink_c::procBottleSwingInit(fopAc_ac_c* param_0, int param_1) {
temp_r3 = false;
}
temp_r30 = PROC_ALINK;
catchActorName = PROC_ALINK;
}
if (temp_r30 == PROC_OBJ_OILTUBO || temp_r30 == PROC_TAG_SSDRINK ||
temp_r30 == PROC_TAG_BTLITM || mEquipItem == fpcNm_ITEM_KANTERA)
if (catchActorName == PROC_OBJ_OILTUBO || catchActorName == PROC_TAG_SSDRINK ||
catchActorName == PROC_TAG_BTLITM || mEquipItem == fpcNm_ITEM_KANTERA)
{
setSingleAnimeParam(ANM_BOTTLE_SCOOP, &mpHIO->mItem.mBottle.m.mScoopAnm);
if (mEquipItem == fpcNm_ITEM_KANTERA) {
onNoResetFlg2(FLG2_UNK_10000000);
onNoResetFlg2(FLG2_KANDELAAR_LIGHT_OFF);
JPABaseEmitter* emitter_p = dComIfGp_particle_getEmitter(field_0x31c4);
if (emitter_p != NULL) {
@@ -594,15 +585,15 @@ int daAlink_c::procBottleSwingInit(fopAc_ac_c* param_0, int param_1) {
field_0x3478 = mpHIO->mItem.mBottle.m.mScoopAnm.mCancelFrame;
field_0x347c = 14.0f;
if (var_r31 != NULL) {
shape_angle.y = cLib_targetAngleY(&current.pos, &var_r31->current.pos);
if (catchActor != NULL) {
shape_angle.y = cLib_targetAngleY(&current.pos, &catchActor->current.pos);
current.angle.y = shape_angle.y;
current.pos.x = var_r31->current.pos.x - cM_ssin(shape_angle.y) * 70.0f;
current.pos.z = var_r31->current.pos.z - cM_scos(shape_angle.y) * 70.0f;
current.pos.x = catchActor->current.pos.x - cM_ssin(shape_angle.y) * 70.0f;
current.pos.z = catchActor->current.pos.z - cM_scos(shape_angle.y) * 70.0f;
}
if (temp_r30 == PROC_OBJ_OILTUBO) {
if (catchActorName == PROC_OBJ_OILTUBO) {
onModeFlg(0x2000);
}
} else if (temp_r3) {
@@ -622,7 +613,6 @@ int daAlink_c::procBottleSwingInit(fopAc_ac_c* param_0, int param_1) {
return 1;
}
int daAlink_c::procBottleSwing() {
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
@@ -702,9 +692,8 @@ int daAlink_c::procBottleSwing() {
return 1;
}
int daAlink_c::procBottleGetInit(int param_0) {
BOOL proc_pickup = mProcID == PROC_PICK_UP;
int daAlink_c::procBottleGetInit(BOOL param_0) {
BOOL isPrevPickUp = mProcID == PROC_PICK_UP;
commonProcInit(PROC_BOTTLE_GET);
int var_r30;
@@ -712,19 +701,19 @@ int daAlink_c::procBottleGetInit(int param_0) {
setSingleAnime(ANM_BOTTLE_GET, mpHIO->mItem.mBottle.m.mGetAnm.mSpeed, 40.0f,
mpHIO->mItem.mBottle.m.mGetAnm.mEndFrame,
mpHIO->mItem.mBottle.m.mGetAnm.mInterpolation);
field_0x2f93 = 0xFE;
mRightHandIndex = 0xFE;
if (proc_pickup) {
if (isPrevPickUp) {
execItemGet(fpcNm_ITEM_KANTERA);
var_r30 = 0xF8;
var_r30 = fpcNm_ITEM_KANTERA2;
dComIfGp_setItemOilCount(-dComIfGs_getMaxOil());
} else {
dComIfGp_setItemOilCount(dComIfGs_getMaxOil());
if (param_0) {
var_r30 = 0x9C;
var_r30 = fpcNm_ITEM_CHUCHU_YELLOW2;
} else {
var_r30 = 0x6E;
var_r30 = fpcNm_ITEM_OIL2;
}
}
@@ -751,15 +740,14 @@ int daAlink_c::procBottleGetInit(int param_0) {
dCam_getBody()->StartEventCamera(0x12, id, "Type", 1, &field_0x3194, 0);
if (mEquipItem == fpcNm_ITEM_FAIRY_DROP || mEquipItem == fpcNm_ITEM_CHUCHU_RARE || mEquipItem == fpcNm_ITEM_WORM) {
setFaceBasicTexture(FTANM_UNK_48);
setFaceBasicBck(0x143);
setFaceBasicTexture(FTANM_I_BINGET);
setFaceBasicBck(dRes_ID_ALANM_BCK_FI_e);
} else if (mEquipItem == fpcNm_ITEM_UGLY_SOUP) {
setFaceBasicBck(0x146);
setFaceBasicBck(dRes_ID_ALANM_BCK_FJ_e);
}
// event flag 0x4A40: Ordon Day 1 completed
if (mEquipItem == fpcNm_ITEM_BEE_CHILD && dComIfGs_isEventBit(0x4A40)) {
dComIfGs_onEventBit(0x4C80); // event flag 0x4C80: Collected Bee Larva on Ordon Day 2
if (mEquipItem == fpcNm_ITEM_BEE_CHILD && dComIfGs_isEventBit(dSv_event_flag_c::F_0700)) {
dComIfGs_onEventBit(dSv_event_flag_c::F_0618);
}
return 1;
@@ -770,7 +758,7 @@ int daAlink_c::procBottleGet() {
simpleAnmPlay(field_0x0718);
if (frameCtrl->checkAnmEnd() && checkEndMessage(field_0x32cc)) {
if (checkAnmEnd(frameCtrl) && checkEndMessage(field_0x32cc)) {
resetFairyEffect();
if (mEquipItem != fpcNm_ITEM_KANTERA) {
deleteEquipItem(FALSE, FALSE);
@@ -778,12 +766,12 @@ int daAlink_c::procBottleGet() {
resetSpecialEvent();
} else if (frameCtrl->getFrame() >= 37.0f) {
field_0x2f93 = 0xFE;
mRightHandIndex = 0xFE;
} else if (frameCtrl->getFrame() >= 15.0f) {
mItemMode = 0;
} else if (frameCtrl->getFrame() >= 5.0f) {
mHeldItemModel->getModelData()->getMaterialNodePointer(0)->getShape()->show();
field_0x2f93 = 5;
mRightHandIndex = 5;
mItemMode = 1;
}
+71 -65
View File
@@ -8,7 +8,7 @@
#include "d/actor/d_a_arrow.h"
#include "d/actor/d_a_horse.h"
void daAlink_c::getArrowFlyData(f32* o_distance, f32* o_speed, int i_forceCharge) const {
void daAlink_c::getArrowFlyData(f32* o_distance, f32* o_speed, BOOL i_forceCharge) const {
if (mEquipItem == fpcNm_ITEM_PACHINKO) {
*o_distance = mpHIO->mItem.mBow.m.mSlingshotDistance;
*o_speed = mpHIO->mItem.mBow.m.mSlingshotSpeed;
@@ -53,43 +53,45 @@ BOOL daAlink_c::checkBowAndSlingItem(int i_itemNo) {
}
void daAlink_c::setSlingModel() {
J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(0x1F9);
J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(dRes_ID_ALANM_BCK_PWAIT_e);
JKRHeap* prev_heap = setItemHeap();
J3DModelData* model_data = loadAramBmd(0x319, 0x2C00);
mHeldItemModel = initModel(model_data, 0);
mItemBck.init(bck, 0, 2, 1.0f, 0, -1, false);
mHeldItemModel = initModel(loadAramBmd(dRes_ID_ALANM_BMD_AL_PACHI_e, 0x2C00), 0);
if (!mItemBck.init(bck, FALSE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false)) {
JUT_ASSERT(108, 0);
}
mDoExt_setCurrentHeap(prev_heap);
field_0x2f95 = 5;
field_0x2f94 = 103;
}
cXyz* daAlink_c::checkBowCameraArrowPosP(s16* param_0, s16* param_1) {
cXyz* daAlink_c::checkBowCameraArrowPosP(s16* o_angleX, s16* o_angleY) {
if (!checkBowAnime() || mEquipItem == fpcNm_ITEM_PACHINKO) {
return NULL;
}
s16 var_28;
s16 angle_y;
if (checkHorseRide() && checkBoarSingleBattle() && dComIfGp_getHorseActor() != NULL) {
var_28 = dComIfGp_getHorseActor()->shape_angle.y;
angle_y = dComIfGp_getHorseActor()->shape_angle.y;
} else if (checkMagneBootsOn()) {
var_28 = field_0x3118;
angle_y = field_0x3118;
} else {
var_28 = shape_angle.y;
angle_y = shape_angle.y;
}
var_28 += mBodyAngle.y;
angle_y += mBodyAngle.y;
mDoMtx_stack_c::transS(field_0x3834);
concatMagneBootMtx();
mDoMtx_stack_c::ZXYrotM(mBodyAngle.x, var_28, 0);
mDoMtx_stack_c::ZXYrotM(mBodyAngle.x, angle_y, 0);
static Vec const localPos = {3.45f, 45.32f, -7.0f};
static const Vec localPos = {3.45f, 45.32f, -7.0f};
mDoMtx_stack_c::multVec(&localPos, &mHeldItemRootPos);
*param_0 = mBodyAngle.x;
*param_1 = var_28;
*o_angleX = mBodyAngle.x;
*o_angleY = angle_y;
return &mHeldItemRootPos;
}
@@ -111,8 +113,13 @@ void daAlink_c::makeArrow() {
field_0x301e = 0;
}
fopAc_ac_c* arrow_p = daArrow_c::makeArrow(this, field_0x301e);
mItemAcKeep.setData(arrow_p);
mItemAcKeep.setData(daArrow_c::makeArrow(this, field_0x301e));
if (mItemAcKeep.getActor() == NULL) {
// "Not enough memory to create item!!"
OS_REPORT("メモリが足りなくてアイテム発生できません!!\n");
JUT_ASSERT(221, 0);
}
}
mItemVar0.field_0x3018 = 0;
@@ -152,7 +159,7 @@ void daAlink_c::changeArrowType() {
return;
}
setItemActionButtonStatus(0x11);
setItemActionButtonStatus(BUTTON_STATUS_SWITCH);
if (arrowChangeTrigger()) {
if (mEquipItem == fpcNm_ITEM_HAWK_ARROW) {
@@ -179,14 +186,13 @@ void daAlink_c::changeArrowType() {
}
}
BOOL daAlink_c::cancelBowMoveRideNotAtn() {
return checkModeFlg(0x400) && checkAttentionLock() && mTargetedActor == NULL;
}
BOOL daAlink_c::cancelBowMove() {
if (mTargetedActor == NULL && !checkAttentionLock() && mFastShotTime == 0 &&
!checkBowReadyAnime() && (!checkBowShootAnime() || mUpperFrameCtrl[2].checkAnmEnd()))
!checkBowReadyAnime() && (!checkBowShootAnime() || checkAnmEnd(&mUpperFrameCtrl[2])))
{
resetUpperAnime(UPPER_2, -1.0f);
return true;
@@ -208,7 +214,7 @@ void daAlink_c::setBowReadyAnime() {
}
}
setUpperAnimeBase(0xD);
setUpperAnimeBase(dRes_ID_ALANM_BCK_ASHOOTWAIT_e);
if (checkResetFlg0(RFLG0_UNK_80)) {
mItemMode = 0;
@@ -220,23 +226,23 @@ void daAlink_c::setBowReadyAnime() {
field_0x2f96 = 4;
if (mEquipItem == fpcNm_ITEM_PACHINKO) {
changeItemBck(0x1F1, -1.0f);
changeItemBck(dRes_ID_ALANM_BCK_PSHOOT_e, -1.0f);
} else {
changeItemBck(0x43, -1.0f);
changeItemBck(dRes_ID_ALANM_BCK_BASHOOT_e, -1.0f);
}
}
void daAlink_c::setBowReloadAnime() {
setUpperAnimeParam(9, UPPER_2, &mpHIO->mItem.mBow.m.mLoadAnm);
setFacePriTexture(FTANM_UNK_8);
setFacePriBck(0xE5);
setUpperAnimeParam(dRes_ID_ALANM_BCK_ARELORD_e, UPPER_2, &mpHIO->mItem.mBow.m.mLoadAnm);
setFacePriTexture(FTANM_FINISHA);
setFacePriBck(dRes_ID_ALANM_BCK_FARELORD_e);
if (mEquipItem == fpcNm_ITEM_PACHINKO) {
changeItemBck(0x1F0, mpHIO->mItem.mBow.m.mLoadAnm.mStartFrame);
changeItemBck(dRes_ID_ALANM_BCK_PRELORD_e, mpHIO->mItem.mBow.m.mLoadAnm.mStartFrame);
field_0x2f97 = 5;
seStartOnlyReverb(Z2SE_AL_PACHINKO_DRAW);
} else {
changeItemBck(0x41, mpHIO->mItem.mBow.m.mLoadAnm.mStartFrame);
changeItemBck(dRes_ID_ALANM_BCK_BARELORD_e, mpHIO->mItem.mBow.m.mLoadAnm.mStartFrame);
field_0x2f97 = 7;
seStartOnlyReverb(Z2SE_AL_DRAW_BOW);
}
@@ -249,7 +255,7 @@ BOOL daAlink_c::checkUpperItemActionBow() {
daPy_frameCtrl_c* frameCtrl_p = &mUpperFrameCtrl[2];
if (mEquipItem == fpcNm_ITEM_PACHINKO) {
static Vec const slingLocalPos = {10.0f, 10.0f, 0.0f};
static const Vec slingLocalPos = {10.0f, 10.0f, 0.0f};
mDoMtx_multVec(getLeftItemMatrix(), &slingLocalPos, &mHeldItemRootPos);
}
@@ -273,29 +279,29 @@ BOOL daAlink_c::checkUpperItemActionBow() {
if (checkReadyItem()) {
if (mItemVar0.field_0x3018 != 0) {
setUpperAnimeParam(0xC, UPPER_2, &mpHIO->mItem.mBow.m.mShootAnm);
setFacePriBck(0xE8);
setUpperAnimeParam(dRes_ID_ALANM_BCK_ASHOOT_e, UPPER_2, &mpHIO->mItem.mBow.m.mShootAnm);
setFacePriBck(dRes_ID_ALANM_BCK_FAT_e);
field_0x2f96 = 0;
u16 var_r29;
u16 bck_res_id;
if (mEquipItem == fpcNm_ITEM_PACHINKO) {
var_r29 = 0x1F1;
bck_res_id = dRes_ID_ALANM_BCK_PSHOOT_e;
if (dComIfGs_getPachinkoNum() != 0 &&
daArrow_c::makeSlingStone(this, &mHeldItemRootPos) != NULL)
{
dComIfGp_setItemPachinkoNumCount(-1);
}
} else if (field_0x301c != 0) {
var_r29 = 0x43;
bck_res_id = dRes_ID_ALANM_BCK_BASHOOT_e;
} else {
var_r29 = 0x44;
bck_res_id = dRes_ID_ALANM_BCK_BASHOOTTAME_e;
}
changeItemBck(var_r29, mpHIO->mItem.mBow.m.mShootAnm.mStartFrame);
changeItemBck(bck_res_id, mpHIO->mItem.mBow.m.mShootAnm.mStartFrame);
mItemVar0.field_0x3018 = 0;
} else if (mEquipItem == fpcNm_ITEM_PACHINKO) {
if (!itemButton()) {
dComIfGp_getVibration().StartShock(1, 1, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER1, 1, cXyz(0.0f, 1.0f, 0.0f));
seStartOnlyReverb(Z2SE_AL_PACHINKO_SHOT);
mItemVar0.field_0x3018 = 1;
resetFacePriAnime();
@@ -303,11 +309,11 @@ BOOL daAlink_c::checkUpperItemActionBow() {
} else if (!itemButton()) {
if (arrow_p != NULL) {
u32 sound;
int shock_strength;
int vibmode;
if (field_0x301c != 0) {
arrow_p->setShoot();
shock_strength = 1;
vibmode = VIBMODE_S_POWER1;
if (arrow_p->checkBombArrow()) {
sound = Z2SE_OBJ_ARROWBOMB_SHOT;
@@ -316,7 +322,7 @@ BOOL daAlink_c::checkUpperItemActionBow() {
}
} else {
arrow_p->setChargeShoot();
shock_strength = 2;
vibmode = VIBMODE_S_POWER2;
if (arrow_p->checkBombArrow()) {
sound = Z2SE_OBJ_ARROWBOMB_SHOTGAIN;
@@ -325,7 +331,7 @@ BOOL daAlink_c::checkUpperItemActionBow() {
}
}
dComIfGp_getVibration().StartShock(shock_strength, 1, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartShock(vibmode, 1, cXyz(0.0f, 1.0f, 0.0f));
seStartOnlyReverb(sound);
if (field_0x301e == 1) {
@@ -352,13 +358,13 @@ BOOL daAlink_c::checkUpperItemActionBow() {
}
} else if (checkBowReloadAnime()) {
if (checkAnmEnd(frameCtrl_p)) {
setUpperAnimeBaseSpeed(10, 0.0f, -1.0f);
setFacePriTexture(FTANM_UNK_9);
setFacePriBck(0xE6);
setUpperAnimeBaseSpeed(dRes_ID_ALANM_BCK_ARELORDTAME_e, 0.0f, -1.0f);
setFacePriTexture(FTANM_ARELORD);
setFacePriBck(dRes_ID_ALANM_BCK_FARELORDTAME_e);
if (mEquipItem != fpcNm_ITEM_PACHINKO) {
changeItemBck(0x42, 0.0f);
dComIfGp_getVibration().StartQuake(1, 1, cXyz(0.0f, 1.0f, 0.0f));
changeItemBck(dRes_ID_ALANM_BCK_BARELORDTAME_e, 0.0f);
dComIfGp_getVibration().StartQuake(VIBMODE_Q_POWER1, 1, cXyz(0.0f, 1.0f, 0.0f));
onNoResetFlg3(FLG3_UNK_4);
}
}
@@ -423,7 +429,6 @@ BOOL daAlink_c::checkUpperItemActionBow() {
return cancelUpperItemReadyAnime(0);
}
void daAlink_c::checkUpperItemActionBowFly() {
if (checkBowAnime()) {
checkUpperItemActionBow();
@@ -439,7 +444,7 @@ int daAlink_c::checkNextActionBow() {
mFastShotTime--;
}
BOOL var_r31 = false;
BOOL is_hawk_arrow = false;
if (!checkBowAnime()) {
setBowReadyAnime();
setFastShotTimer();
@@ -452,7 +457,7 @@ int daAlink_c::checkNextActionBow() {
mItemVar0.field_0x3018 = 1;
if (mEquipItem == fpcNm_ITEM_HAWK_ARROW) {
var_r31 = true;
is_hawk_arrow = true;
mFastShotTime = 0;
}
@@ -471,7 +476,7 @@ int daAlink_c::checkNextActionBow() {
}
}
BOOL rt;
BOOL rt = FALSE;
if (!checkAttentionLock() && mFastShotTime == 0) {
if (checkModeFlg(0x400)) {
if (checkCanoeRide()) {
@@ -494,7 +499,7 @@ int daAlink_c::checkNextActionBow() {
}
}
if (rt && var_r31) {
if (rt && is_hawk_arrow) {
dComIfGp_setPlayerStatus0(0, 0x200000);
seStartSystem(Z2SE_AL_HAWK_EYE_PUTON);
}
@@ -502,36 +507,37 @@ int daAlink_c::checkNextActionBow() {
return rt;
}
void daAlink_c::setBowModel() {
J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(0x59);
JKRHeap* old_heap = setItemHeap();
J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(dRes_ID_ALANM_BCK_BVJMPCL_e);
JKRHeap* heap = setItemHeap();
mHeldItemModel = initModel(loadAramBmd(0x314, 0x4C00), 0);
mItemBck.init(bck, FALSE, 2, 1.0f, 0, -1, false);
mHeldItemModel = initModel(loadAramBmd(dRes_ID_ALANM_BMD_AL_BOW_e, 0x4C00), 0);
if (!mItemBck.init(bck, FALSE, 2, 1.0f, 0, -1, false)) {
JUT_ASSERT(894, 0);
}
mDoExt_setCurrentHeap(old_heap);
mDoExt_setCurrentHeap(heap);
field_0x33dc = mItemBck.getBckAnm()->getFrameMax() - 0.001f;
field_0x2f95 = 5;
field_0x2f94 = 0x67;
}
bool daAlink_c::checkBowGrabLeftHand() const {
return checkReinRide() && !checkBowAnime();
}
void daAlink_c::setBowHangAnime() {
if (checkBowItem(mEquipItem)) {
changeItemBck(0x58, 0.0f);
changeItemBck(dRes_ID_ALANM_BCK_BVJMPCH_e, 0.0f);
}
}
void daAlink_c::setBowNormalAnime() {
if (checkBowItem(mEquipItem)) {
changeItemBck(0x59, -1.0f);
changeItemBck(dRes_ID_ALANM_BCK_BVJMPCL_e, -1.0f);
} else if (mEquipItem == fpcNm_ITEM_PACHINKO) {
changeItemBck(0x1F9, -1.0f);
changeItemBck(dRes_ID_ALANM_BCK_PWAIT_e, -1.0f);
}
}
@@ -563,7 +569,7 @@ int daAlink_c::procBowSubjectInit() {
}
int daAlink_c::procBowSubject() {
setDoStatus(0x12);
setDoStatus(BUTTON_STATUS_BACK);
if (!checkNextAction(0) && setBodyAngleToCamera()) {
setBowSight();
}
@@ -597,21 +603,21 @@ int daAlink_c::procBowMove() {
onEndResetFlg0(ERFLG0_UNK_8000000);
if (!checkNextAction(0)) {
f32 var_f31 = -1.0f;
f32 morf = -1.0f;
if (checkZeroSpeedF()) {
onModeFlg(1);
if (field_0x2f98 != 3) {
field_0x2f98 = 3;
var_f31 = mpHIO->mBasic.m.mBasicInterpolation;
morf = mpHIO->mBasic.m.mBasicInterpolation;
}
current.angle.y = shape_angle.y - 0x4000;
} else {
offModeFlg(1);
}
setBlendAtnMoveAnime(var_f31);
setBlendAtnMoveAnime(morf);
setBodyAngleXReadyAnime(0);
}
File diff suppressed because it is too large Load Diff
+35 -39
View File
@@ -43,7 +43,7 @@ fopAc_ac_c* daAlink_c::getCopyRodCameraActor() {
return NULL;
}
void daAlink_c::initCopyRodUpperAnimeSpeed(int param_0) {
void daAlink_c::initCopyRodUpperAnimeSpeed(BOOL param_0) {
if (!checkCopyRodThrowAnime()) {
if (param_0) {
mUpperFrameCtrl[2].setRate(0.0f);
@@ -60,11 +60,9 @@ BOOL daAlink_c::checkForestOldCentury() {
}
BOOL daAlink_c::checkCopyRodTopUse() {
// Event flag 0x2580: Dominion Rod power restored
return (dComIfGs_isEventBit(0x2580) &&
!(mProcID == PROC_UNEQUIP && mProcVar3.field_0x300e != 0)) ||
dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x15 ||
checkForestOldCentury();
return (dComIfGs_isEventBit(dSv_event_flag_c::F_0302) && !(mProcID == PROC_UNEQUIP && mProcVar3.field_0x300e != 0))
|| dStage_stagInfo_GetSaveTbl(dComIfGp_getStage()->getStagInfo()) == dStage_SaveTbl_LV6
|| checkForestOldCentury();
}
BOOL daAlink_c::checkCopyRodAnime() const {
@@ -73,7 +71,7 @@ BOOL daAlink_c::checkCopyRodAnime() const {
void daAlink_c::setCopyRodControllAnime() {
if (checkNoUpperAnime() && getCopyRodControllActor()) {
setUpperAnimeBaseSpeed(0x202, 0.0f, 3.0f);
setUpperAnimeBaseSpeed(dRes_ID_ALANM_BCK_RODD_e, 0.0f, 3.0f);
field_0x2f96 = 2;
field_0x2f97 = 5;
field_0x33e8 = 0.0f;
@@ -81,26 +79,26 @@ void daAlink_c::setCopyRodControllAnime() {
}
void daAlink_c::setCopyRodControllUpperSpeedRate() {
f32 var_f31;
f32 max_speed;
if (checkAttentionLock()) {
var_f31 = 1.0f;
max_speed = 1.0f;
} else {
if (mProcID == PROC_STEP_MOVE) {
var_f31 = fabsf(field_0x3478 / mpHIO->mMove.m.mMaxSpeed);
max_speed = fabsf(field_0x3478 / mpHIO->mMove.m.mMaxSpeed);
} else {
var_f31 = fabsf(mNormalSpeed / mpHIO->mMove.m.mMaxSpeed);
max_speed = fabsf(mNormalSpeed / mpHIO->mMove.m.mMaxSpeed);
}
if (checkHeavyStateOn(1, 1)) {
var_f31 *= 1.0f / (mHeavySpeedMultiplier * mHeavySpeedMultiplier);
if (checkHeavyStateOn(TRUE, TRUE)) {
max_speed *= 1.0f / (mHeavySpeedMultiplier * mHeavySpeedMultiplier);
}
}
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
if (max_speed > 1.0f) {
max_speed = 1.0f;
}
cLib_chaseF(&field_0x33e8, var_f31, 0.15f);
cLib_chaseF(&field_0x33e8, max_speed, 0.15f);
daPy_frameCtrl_c* frame_ctrl = &mUpperFrameCtrl[2];
frame_ctrl->setFrame(field_0x33e8 * frame_ctrl->getEnd());
@@ -109,9 +107,8 @@ void daAlink_c::setCopyRodControllUpperSpeedRate() {
void daAlink_c::setCopyRodModel() {
JKRHeap* heap = setItemHeap();
J3DModelData* mdl_data = loadAramBmd(0x315, 0x5400);
mHeldItemModel = initModel(mdl_data, 0x80000, 0x1000000);
field_0x0724 = loadAramItemBrk(0x323, mHeldItemModel);
mHeldItemModel = initModel(loadAramBmd(dRes_ID_ALANM_BMD_AL_CROD_e, 0x5400), 0x1000000);
field_0x0724 = loadAramItemBrk(dRes_ID_ALANM_BRK_AL_CROD_CHANGE_COLOR_e, mHeldItemModel);
mDoExt_setCurrentHeap(heap);
field_0x0724->setFrame(0.0f);
@@ -119,25 +116,25 @@ void daAlink_c::setCopyRodModel() {
mAtCps[0].SetAtSpl(dCcG_At_Spl_UNK_0);
mAtCps[0].SetAtAtp(0);
mAtCps[0].SetAtSe(20);
mAtCps[0].SetAtSe(dCcD_SE_COPYROD);
mAtCps[0].SetAtHitMark(1);
mAtCps[0].OnAtSetBit();
mAtCps[0].SetAtHitCallback(NULL);
mAtCps[0].SetAtMtrl(dCcD_MTRL_NONE);
mHeldItemModel->setBaseTRMtx(mpLinkModel->getAnmMtx(field_0x30c0));
mHeldItemModel->setBaseTRMtx(mpLinkModel->getAnmMtx(mLeftItemJntNo));
mHeldItemModel->calc();
}
void daAlink_c::setCopyRodReadyAnime() {
f32 speed;
if (checkAttentionLock()) {
speed = mpHIO->mItem.mBoomerang.m.mIdleAnmSpeed;
} else {
if (!checkAttentionLock()) {
speed = 0.0f;
} else {
speed = mpHIO->mItem.mBoomerang.m.mIdleAnmSpeed;
}
setUpperAnimeBaseSpeed(0x54, speed, 3.0f);
setUpperAnimeBaseSpeed(dRes_ID_ALANM_BCK_BOOMWAIT_e, speed, 3.0f);
if (checkCopyRodTopUse()) {
seStartSwordCut(Z2SE_AL_COPYROD_READY);
@@ -160,6 +157,7 @@ void daAlink_c::throwCopyRod() {
onNoResetFlg3(FLG3_COPY_ROD_THROW_AFTER);
mItemAcKeep.clearData();
}
dComIfGp_clearPlayerStatus0(0, 0x80);
mFastShotTime = -1;
voiceStart(Z2SE_AL_V_ATTACK_S);
@@ -179,20 +177,19 @@ void daAlink_c::throwCopyRod() {
int daAlink_c::returnCopyRod() {
offNoResetFlg3(FLG3_COPY_ROD_THROW_AFTER);
int var_r31;
BOOL rt;
if (mEquipItem == fpcNm_ITEM_COPY_ROD) {
mItemAcKeep = mCopyRodAcKeep;
onNoResetFlg0(FLG0_UNK_20);
var_r31 = 1;
rt = TRUE;
f32 tmp_0 = 0.0f;
dComIfGp_getVibration().StartShock(1, 1, cXyz(tmp_0, 1.0f, tmp_0));
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER1, 1, cXyz(0.0f, 1.0f, 0.0f));
} else {
var_r31 = 0;
rt = FALSE;
}
mCopyRodAcKeep.clearData();
return var_r31;
return rt;
}
BOOL daAlink_c::checkUpperItemActionCopyRod() {
@@ -255,7 +252,6 @@ int daAlink_c::checkNextActionCopyRod() {
void daAlink_c::setCopyRodSight() {
if (mItemAcKeep.getActor() && !checkCopyRodThrowAnime()) {
cXyz sight_pos;
checkSightLine(getCopyRodBallDisMax(), &sight_pos);
mSight.setPos(&sight_pos);
mSight.onDrawFlg();
@@ -288,7 +284,7 @@ int daAlink_c::procCopyRodSubject() {
}
if (checkCopyRodReadyAnime()) {
setDoStatus(0x12);
setDoStatus(BUTTON_STATUS_BACK);
}
setShapeAngleToAtnActor(0);
@@ -326,20 +322,20 @@ int daAlink_c::procCopyRodMove() {
}
if (!checkNextAction(0)) {
f32 var_f31 = -1.0f;
f32 morf = -1.0f;
if (checkZeroSpeedF()) {
onModeFlg(1);
if (field_0x2f98 != 3) {
field_0x2f98 = 3;
var_f31 = mpHIO->mBasic.m.mBasicInterpolation;
morf = mpHIO->mBasic.m.mBasicInterpolation;
}
} else {
offModeFlg(1);
}
setBlendAtnMoveAnime(var_f31);
setBlendAtnMoveAnime(morf);
setBodyAngleXReadyAnime(0);
}
@@ -383,7 +379,7 @@ int daAlink_c::procCopyRodSwing() {
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
mProcVar2.field_0x300c = 0;
if (frameCtrl->checkAnmEnd()) {
if (checkAnmEnd(frameCtrl)) {
setCopyRodControllAnime();
checkNextAction(0);
} else if (frameCtrl->getFrame() > field_0x3480 && checkNextAction(1)) {
@@ -413,7 +409,7 @@ int daAlink_c::procCopyRodReviveInit() {
if (mDemo.getParam0() == 0) {
if (mEquipItem != fpcNm_ITEM_COPY_ROD) {
deleteEquipItem(0, 0);
deleteEquipItem(FALSE, FALSE);
mEquipItem = fpcNm_ITEM_COPY_ROD;
setCopyRodModel();
}
@@ -428,7 +424,7 @@ int daAlink_c::procCopyRodReviveInit() {
int daAlink_c::procCopyRodRevive() {
simpleAnmPlay(field_0x0724);
if (mUnderFrameCtrl[0].checkAnmEnd()) {
if (checkAnmEnd(&mUnderFrameCtrl[0])) {
dComIfGp_evmng_cutEnd(mAlinkStaffId);
}
+144 -120
View File
@@ -28,8 +28,13 @@ void daAlink_c::setCrawlMoveDirectionArrow() {
static const u8 data_80452F39 = 4;
u8 direction = 0;
camera_class* camera = (camera_class*)dComIfGp_getCamera(field_0x317c);
BOOL bvar = cLib_distanceAngleS(fopCamM_GetAngleY(camera), shape_angle.y) > 0x4000;
BOOL bvar;
if (cLib_distanceAngleS(fopCamM_GetAngleY(dComIfGp_getCamera(field_0x317c)), shape_angle.y) > 0x4000) {
bvar = TRUE;
} else {
bvar = FALSE;
}
if (field_0x3198 & 4) {
if (!bvar) {
@@ -140,9 +145,20 @@ BOOL daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
var_r29 |= 8;
}
}
if (cM3d_Len2dSqPntAndSegLine(0.5f * (sp34.x + sp28.x), 0.5f * (sp34.z + sp28.z), sp70.x, sp70.z, param_0->x - (95.0f * temp_f31), param_0->z - (95.0f * temp_f30), &sp64.x, &sp64.z, &spC)) {
f32 var_f27 = param_0->x - (95.0f * temp_f31);
f32 var_f26 = param_0->z - (95.0f * temp_f30);
if (cM3d_Len2dSqPntAndSegLine(0.5f * (sp34.x + sp28.x),
0.5f * (sp34.z + sp28.z),
sp70.x,
sp70.z,
var_f27,
var_f26,
&sp64.x,
&sp64.z,
&spC))
{
sp64.y = current.pos.y;
if (checkWolf()) {
return procWolfLieAutoMoveInit(var_r29, &sp64);
@@ -155,15 +171,15 @@ BOOL daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
}
int daAlink_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3,
int param_4, u8* param_5) {
int param_4, u8* param_5) {
if (commonLineCheck(param_0, param_1) && ((param_4 == 0 && (!checkWolf() || !dComIfGp_checkPlayerStatus0(0, 0x08000000))) || dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 6) && (!checkWolf() || dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7)) {
cM3dGPla sp3C;
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp3C);
cM3dGPla tripla;
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &tripla);
int temp_r27 = dComIfG_Bgsp().GetSpecialCode(mLinkLinChk);
if (cBgW_CheckBWall(sp3C.mNormal.y) || (param_3 == 2 && cBgW_CheckBGround(sp3C.mNormal.y))) {
if (cBgW_CheckBWall(tripla.mNormal.y) || (param_3 == 2 && cBgW_CheckBGround(tripla.mNormal.y))) {
cXyz sp1C = *param_1 - mLinkLinChk.GetCross();
s16 temp_r26 = sp3C.mNormal.atan2sX_Z();
s16 temp_r26 = tripla.mNormal.atan2sX_Z();
s16 temp_r3 = sp1C.atan2sX_Z();
if (abs((s16)((temp_r3 + 0x8000) - temp_r26)) > 0x3000) {
@@ -172,34 +188,34 @@ int daAlink_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2, int
f32 temp_f31 = -sp1C.absXZ() * cM_scos(((temp_r3 - temp_r26) - 0x8000));
param_2->x = temp_f31 * sp3C.mNormal.x;
param_2->x = temp_f31 * tripla.mNormal.x;
if (param_3 != 1) {
param_2->y = 0.0f;
} else {
param_2->y = sp1C.y;
}
param_2->z = temp_f31 * sp3C.mNormal.z;
param_2->z = temp_f31 * tripla.mNormal.z;
if (param_5 != NULL && (dKy_pol_argument_get(&mLinkLinChk) & 0x60)) {
*param_5 = 3;
cM3dGPla sp28;
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp28);
cM3dGPla tripla;
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &tripla);
field_0x311e = sp28.mNormal.atan2sX_Z();
field_0x311e = tripla.mNormal.atan2sX_Z();
if (checkIcePolygonDamage(&mLinkLinChk)) {
*param_5 |= 0x80;
*param_5 |= (u8)0x80;
}
if (dKy_pol_argument_get(&mLinkLinChk) & 0x20) {
*param_5 |= 0x40;
*param_5 |= (u8)0x40;
}
}
return 1;
}
if (param_3 == 1 && (temp_r27 == 1 || (sp3C.mNormal.y < field_0x3470 && temp_r27 == 2))) {
if (param_3 == 1 && (temp_r27 == 1 || (tripla.mNormal.y < field_0x3470 && temp_r27 == 2))) {
*param_2 = *param_1 - mLinkLinChk.GetCross();
return 1;
}
@@ -233,24 +249,24 @@ void daAlink_c::crawlBgCheck(cXyz* param_0, cXyz* param_1, int param_2) {
}
BOOL daAlink_c::checkCrawlSideWall(cXyz* param_0, cXyz* param_1, cXyz* param_2, cXyz* param_3,
s16* param_4, s16* param_5) {
s16* param_4, s16* param_5) {
cXyz sp58;
cXyz sp4C;
if (commonLineCheck(param_0, param_1)) {
cM3dGPla sp64;
cM3dGPla tripla;
*param_2 = mLinkLinChk.GetCross();
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp64);
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &tripla);
*param_4 = sp64.mNormal.atan2sX_Z();
*param_4 = tripla.mNormal.atan2sX_Z();
sp4C = *param_2 + (sp64.mNormal * 95.0f);
sp4C = *param_2 + (tripla.mNormal * 95.0f);
sp58 = (sp4C + *param_2) * 0.5f;
if (commonLineCheck(&sp58, &sp4C)) {
*param_3 = mLinkLinChk.GetCross();
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp64);
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &tripla);
*param_5 = sp64.mNormal.atan2sX_Z();
*param_5 = tripla.mNormal.atan2sX_Z();
cXyz sp40 = *param_2 - *param_3;
f32 temp_f31 = sp40.abs2XZ();
@@ -265,25 +281,25 @@ BOOL daAlink_c::checkCrawlSideWall(cXyz* param_0, cXyz* param_1, cXyz* param_2,
void daAlink_c::decideCrawlDoStatus() {
if (dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x80)) {
if (checkSubjectEnd(1) || mWaterY > current.pos.y) {
if (checkSubjectEnd(TRUE) || mWaterY > current.pos.y) {
dComIfGp_clearPlayerStatus0(0, 0x2000);
}
} else {
dCamera_c* camera = dCam_getBody();
} else if (dCam_getBody()->ChangeModeOK(4) && mWaterY <= current.pos.y) {
onResetFlg0(RFLG0_UNK_4000000);
if (camera->ChangeModeOK(4) && mWaterY <= current.pos.y) {
onResetFlg0(RFLG0_UNK_4000000);
if (dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x1000) && !checkEventRun()) {
setSubjectMode();
}
if (dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x1000) && !checkEventRun()) {
setSubjectMode();
}
}
}
BOOL daAlink_c::checkNotCrawlStand(cXyz* param_0) {
mLinkRoofChk.SetPos(*param_0);
return dComIfG_Bgsp().RoofChk(&mLinkRoofChk) - current.pos.y <= field_0x598;
if (dComIfG_Bgsp().RoofChk(&mLinkRoofChk) - current.pos.y <= mHeight) {
return TRUE;
}
return FALSE;
}
BOOL daAlink_c::checkNotCrawlStand(cXyz* param_0, cXyz* param_1) {
@@ -303,6 +319,8 @@ BOOL daAlink_c::checkNotCrawlStand(cXyz* param_0, cXyz* param_1) {
}
BOOL daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3) {
UNUSED(param_3);
cXyz spC0;
cXyz spB4;
cXyz spA8;
@@ -325,7 +343,9 @@ BOOL daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, in
*param_2 += sp90;
spB4 = (*param_2 * 2.0f) - spC0;
if (checkCrawlSideWall(param_2, &spC0, &spA8, &sp9C, &sp16, &sp14) || checkCrawlSideWall(param_2, &spB4, &sp9C, &spA8, &sp14, &sp16)) {
if (checkCrawlSideWall(param_2, &spC0, &spA8, &sp9C, &sp16, &sp14) ||
checkCrawlSideWall(param_2, &spB4, &sp9C, &spA8, &sp14, &sp16))
{
field_0x3198 = 1;
field_0x37c8 = ((spA8 + sp9C) * 0.5f) - sp90;
mProcVar2.field_0x300c = sp16 + 0x4000;
@@ -336,9 +356,7 @@ BOOL daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, in
}
void daAlink_c::setCrawlMoveHoll() {
f32 frame_ctrl_rate = mUnderFrameCtrl[0].getRate();
if (frame_ctrl_rate) {
if (mUnderFrameCtrl[0].getRate()) {
cLib_addCalcAngleS(&shape_angle.y, mProcVar2.field_0x300c, 5, 0x1000, 0x800);
current.angle.y = shape_angle.y;
}
@@ -357,7 +375,7 @@ void daAlink_c::setCrawlMoveAngle() {
cXyz sp2C;
cXyz sp38;
cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, mpHIO->mCrouch.m.mCrawlTurnRate,
cLib_addCalcAngleS(&shape_angle.y, mMoveAngle, mpHIO->mCrouch.m.mCrawlTurnRate,
mpHIO->mCrouch.m.mCrawlTurnMax,
mpHIO->mCrouch.m.mCrawlTurnMin);
@@ -386,14 +404,14 @@ void daAlink_c::setCrawlMoveAngle() {
}
}
void daAlink_c::stopHalfMoveAnime(f32 param_0) {
void daAlink_c::stopHalfMoveAnime(f32 i_frame) {
daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl;
f32 frame;
if (frame_ctrl->checkPass(0.0f)) {
frame = 0.0f;
} else {
frame = param_0;
frame = i_frame;
}
frame_ctrl->setRate(0.0f);
@@ -402,11 +420,11 @@ void daAlink_c::stopHalfMoveAnime(f32 param_0) {
}
void daAlink_c::setCrawlAutoMoveAimPos() {
int temp_r30 = getDirectionFromShapeAngle();
int direction = getDirectionFromShapeAngle();
f32 temp_f31 = cM_ssin(shape_angle.y);
f32 temp_f30 = cM_scos(shape_angle.y);
if (temp_r30 == 2 && (field_0x3198 & 4)) {
if (direction == DIR_LEFT && (field_0x3198 & 4)) {
field_0x37c8.x += 1.5f * (95.0f * temp_f30);
field_0x37c8.z -= 1.5f * (95.0f * temp_f31);
@@ -419,7 +437,7 @@ void daAlink_c::setCrawlAutoMoveAimPos() {
}
mProcVar0.field_0x3008 = -1;
} else if (temp_r30 == 3 && (field_0x3198 & 8)) {
} else if (direction == DIR_RIGHT && (field_0x3198 & 8)) {
field_0x37c8.x -= 1.5f * (95.0f * temp_f30);
field_0x37c8.z += 1.5f * (95.0f * temp_f31);
@@ -432,14 +450,14 @@ void daAlink_c::setCrawlAutoMoveAimPos() {
}
mProcVar0.field_0x3008 = -1;
} else if ((field_0x3198 & 1) && ((shape_angle.y == current.angle.y && temp_r30 == 0) || (shape_angle.y != current.angle.y && temp_r30 == 1))) {
} else if ((field_0x3198 & 1) && ((shape_angle.y == current.angle.y && direction == DIR_FORWARD) || (shape_angle.y != current.angle.y && direction == DIR_BACKWARD))) {
field_0x37c8.x += 1.5f * (95.0f * cM_ssin(current.angle.y));
field_0x37c8.z += 1.5f * (95.0f * cM_scos(current.angle.y));
mProcVar2.field_0x300c = shape_angle.y;
mProcVar3.field_0x300e = 0;
mProcVar0.field_0x3008 = -1;
} else if ((shape_angle.y == current.angle.y && temp_r30 == 1) || (shape_angle.y != current.angle.y && temp_r30 == 0)) {
} else if ((shape_angle.y == current.angle.y && direction == DIR_BACKWARD) || (shape_angle.y != current.angle.y && direction == DIR_FORWARD)) {
current.angle.y += 0x8000;
field_0x37c8.x -= 1.5f * (95.0f * cM_ssin(current.angle.y));
field_0x37c8.z -= 1.5f * (95.0f * cM_scos(current.angle.y));
@@ -503,50 +521,50 @@ int daAlink_c::procCrawlStart() {
return 1;
}
int daAlink_c::procCrawlMoveInit(s16 param_0, s16 param_1) {
int daAlink_c::procCrawlMoveInit(s16 i_angleX, s16 i_angleZ) {
BOOL var_r29;
BOOL var_r28 = 0;
BOOL var_r28 = FALSE;
if (mProcID == PROC_CRAWL_AUTO_MOVE) {
var_r29 = 0;
var_r29 = FALSE;
} else {
var_r29 = 1;
var_r29 = TRUE;
if (mProcID == PROC_CRAWL_START) {
var_r28 = 1;
var_r28 = TRUE;
}
}
BOOL var_r27;
if (dComIfGp_checkPlayerStatus0(0, 0x2000)) {
var_r27 = 1;
var_r27 = TRUE;
} else {
var_r27 = 0;
var_r27 = FALSE;
}
commonProcInit(PROC_CRAWL_MOVE);
mProcVar3.field_0x300e = 0;
if (var_r29 != 0) {
f32 var_f31 = getCrawlMoveAnmSpeed();
if (var_r28 != 0) {
if (var_r29) {
f32 anm_speed = getCrawlMoveAnmSpeed();
if (var_r28) {
mProcVar3.field_0x300e = 1;
} else if (getDirectionFromShapeAngle() == 1) {
var_f31 *= -1.0f;
} else if (getDirectionFromShapeAngle() == DIR_BACKWARD) {
anm_speed *= -1.0f;
}
current.angle.y = shape_angle.y;
setSingleAnimeBaseSpeed(ANM_CRAWL, var_f31, mpHIO->mCrouch.m.mCrawlInterpolation);
setSingleAnimeBaseSpeed(ANM_CRAWL, anm_speed, mpHIO->mCrouch.m.mCrawlInterpolation);
}
field_0x3198 = var_r29 ^ 1;
shape_angle.x = param_0;
shape_angle.z = param_1;
shape_angle.x = i_angleX;
shape_angle.z = i_angleZ;
field_0x33cc = 1.0f;
field_0x2f99 = 0xC;
dComIfGp_setPlayerStatus0(0, 0x08000000);
if (var_r27 != 0) {
if (var_r27) {
dComIfGp_setPlayerStatus0(0, 0x2000);
}
@@ -554,7 +572,7 @@ int daAlink_c::procCrawlMoveInit(s16 param_0, s16 param_1) {
}
int daAlink_c::procCrawlMove() {
daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
cXyz sp54;
cXyz sp48;
cXyz sp3C;
@@ -587,33 +605,33 @@ int daAlink_c::procCrawlMove() {
if ((var_r27 != 0 && mProcVar3.field_0x300e == 0) || getSlidePolygon(&sp60) || checkCrawlWaterIn()) {
procCrawlEndInit(1, shape_angle.x, shape_angle.z);
} else {
BOOL var_r26 = 0;
BOOL var_r26 = FALSE;
f32 temp_f31 = getCrawlMoveAnmSpeed();
if (temp_r29->getRate() > 0.0f) {
setWaterInAnmRate(temp_r29, temp_f31);
} else if (temp_r29->getRate() < 0.0f) {
setWaterInAnmRate(temp_r29, -temp_f31);
if (framectrl->getRate() > 0.0f) {
setWaterInAnmRate(framectrl, temp_f31);
} else if (framectrl->getRate() < 0.0f) {
setWaterInAnmRate(framectrl, -temp_f31);
} else {
var_r26 = 1;
var_r26 = TRUE;
}
if (var_r26 == 1 || temp_r29->checkPass(0.0f) || temp_r29->checkPass(17.0f)) {
if (var_r26 == TRUE || framectrl->checkPass(0.0f) || framectrl->checkPass(17.0f)) {
if (mProcVar3.field_0x300e != 0) {
mProcVar3.field_0x300e--;
setWaterInAnmRate(temp_r29, temp_f31);
temp_r29->setLoop(0);
setWaterInAnmRate(framectrl, temp_f31);
framectrl->setLoop(0);
} else if (checkInputOnR()) {
if (getDirectionFromShapeAngle() != 1) {
setWaterInAnmRate(temp_r29, temp_f31);
temp_r29->setLoop(0);
if (getDirectionFromShapeAngle() != DIR_BACKWARD) {
setWaterInAnmRate(framectrl, temp_f31);
framectrl->setLoop(0);
} else {
setWaterInAnmRate(temp_r29, -temp_f31);
temp_r29->setLoop(temp_r29->getEnd());
setWaterInAnmRate(framectrl, -temp_f31);
framectrl->setLoop(framectrl->getEnd());
}
initBasAnime();
} else if (var_r26 == 0) {
} else if (var_r26 == FALSE) {
stopHalfMoveAnime(17.0f);
}
}
@@ -624,9 +642,9 @@ int daAlink_c::procCrawlMove() {
if (checkCrawlInHoll(&sp54, &sp3C, &sp18, var_r27)) {
setCrawlMoveHoll();
} else if (sp8 != 0 && temp_r25 && temp_r24 && temp_r23 && var_r27 == 0 && changeCrawlAutoMoveProc(&sp18) ) {
} else if (sp8 != 0 && temp_r25 && temp_r24 && temp_r23 && !var_r27 && changeCrawlAutoMoveProc(&sp18) ) {
return 1;
} else if (mProcVar3.field_0x300e == 0 && checkInputOnR() && temp_r29->getRate() > 0.0f) {
} else if (mProcVar3.field_0x300e == 0 && checkInputOnR() && framectrl->getRate() > 0.0f) {
setCrawlMoveAngle();
}
@@ -648,7 +666,13 @@ int daAlink_c::procCrawlMove() {
}
int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) {
BOOL var_r30 = dComIfGp_checkPlayerStatus0(0, 0x2000) != 0 ? TRUE : FALSE;
BOOL var_r30;
if (dComIfGp_checkPlayerStatus0(0, 0x2000)) {
var_r30 = TRUE;
} else {
var_r30 = FALSE;
}
commonProcInit(PROC_CRAWL_AUTO_MOVE);
field_0x37c8 = *param_1;
field_0x33cc = 1.0f;
@@ -671,24 +695,24 @@ int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) {
int daAlink_c::procCrawlAutoMove() {
field_0x2f99 = 0xC;
daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
s16 temp_r27 = shape_angle.y;
s16 temp_r26 = current.angle.y;
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
s16 prev_shapeangle = shape_angle.y;
s16 prev_angle = current.angle.y;
if (mProcVar0.field_0x3008 > 0) {
if (temp_r29->checkPass(0.0f) || temp_r29->checkPass(17.0f)) {
if (framectrl->checkPass(0.0f) || framectrl->checkPass(17.0f)) {
stopHalfMoveAnime(17.0f);
mNormalSpeed = 0.0f;
} else if (checkAnmEnd(temp_r29)) {
} else if (checkAnmEnd(framectrl)) {
mNormalSpeed = 0.0f;
mProcVar0.field_0x3008 -= 1;
mProcVar0.field_0x3008--;
}
setCrawlMoveDirectionArrow();
decideCrawlDoStatus();
shape_angle.y = temp_r27;
current.angle.y = temp_r26;
shape_angle.y = prev_shapeangle;
current.angle.y = prev_angle;
} else if (mProcVar0.field_0x3008 == 0) {
setCrawlMoveDirectionArrow();
if (checkInputOnR()) {
@@ -698,19 +722,19 @@ int daAlink_c::procCrawlAutoMove() {
dComIfGp_setAdvanceDirection(0);
if (shape_angle.y == current.angle.y) {
setWaterInAnmRate(temp_r29, 2.0f);
temp_r29->setLoop(0);
setWaterInAnmRate(framectrl, 2.0f);
framectrl->setLoop(0);
} else {
setWaterInAnmRate(temp_r29, -2.0f);
temp_r29->setLoop(temp_r29->getEnd());
setWaterInAnmRate(framectrl, -2.0f);
framectrl->setLoop(framectrl->getEnd());
}
initBasAnime();
}
} else {
decideCrawlDoStatus();
shape_angle.y = temp_r27;
current.angle.y = temp_r26;
shape_angle.y = prev_shapeangle;
current.angle.y = prev_angle;
}
} else {
int var_r28 = 1;
@@ -754,55 +778,55 @@ int daAlink_c::procCrawlAutoMove() {
return 1;
}
int daAlink_c::procCrawlEndInit(int param_0, s16 param_1, s16 param_2) {
daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
f32 var_f31 = temp_r29->getFrame();
int daAlink_c::procCrawlEndInit(int param_0, s16 i_angleX, s16 i_angleZ) {
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
f32 frame = framectrl->getFrame();
commonProcInit(PROC_CRAWL_END);
current.angle.y = shape_angle.y;
field_0x2f99 = 0xC;
const daAlinkHIO_anm_c* temp_r30 = &mpHIO->mCrouch.m.mCrawlEndAnm;
const daAlinkHIO_anm_c* anmParams = &mpHIO->mCrouch.m.mCrawlEndAnm;
f32 var_f30;
f32 morf;
if (param_0 != 0) {
var_f30 = temp_r30->mInterpolation;
morf = anmParams->mInterpolation;
} else {
var_f30 = -1.0f;
morf = -1.0f;
}
setSingleAnime(ANM_CRAWL_START, temp_r30->mSpeed, temp_r30->mStartFrame, temp_r30->mEndFrame, var_f30);
setSingleAnime(ANM_CRAWL_START, anmParams->mSpeed, anmParams->mStartFrame, anmParams->mEndFrame, morf);
if (param_0 == 0) {
if (temp_r30->mStartFrame > var_f31) {
var_f31 = temp_r30->mStartFrame;
} else if (temp_r30->mEndFrame <= var_f31) {
var_f31 = temp_r30->mEndFrame;
if (anmParams->mStartFrame > frame) {
frame = anmParams->mStartFrame;
} else if (anmParams->mEndFrame <= frame) {
frame = anmParams->mEndFrame;
}
temp_r29->setFrame(var_f31);
getNowAnmPackUnder(UNDER_0)->setFrame(var_f31);
framectrl->setFrame(frame);
getNowAnmPackUnder(UNDER_0)->setFrame(frame);
}
J3DTransformInfo sp10;
getNowAnmPackUnder(UNDER_0)->getTransform(0, &sp10);
J3DTransformInfo transinfo;
getNowAnmPackUnder(UNDER_0)->getTransform(0, &transinfo);
field_0x34d4.x = sp10.mTranslate.x;
field_0x34d4.y = sp10.mTranslate.y;
field_0x34d4.z = sp10.mTranslate.z;
field_0x34d4.x = transinfo.mTranslate.x;
field_0x34d4.y = transinfo.mTranslate.y;
field_0x34d4.z = transinfo.mTranslate.z;
mNormalSpeed = 0.0f;
shape_angle.x = param_1;
shape_angle.z = param_2;
shape_angle.x = i_angleX;
shape_angle.z = i_angleZ;
if (temp_r30->mCancelFrame > temp_r30->mStartFrame) {
field_0x347c = temp_r30->mCancelFrame;
if (anmParams->mCancelFrame > anmParams->mStartFrame) {
field_0x347c = anmParams->mCancelFrame;
} else {
field_0x347c = temp_r30->mStartFrame;
field_0x347c = anmParams->mStartFrame;
}
field_0x3478 = 1.0f / (temp_r30->mEndFrame - field_0x347c);
field_0x3478 = 1.0f / (anmParams->mEndFrame - field_0x347c);
field_0x3588 = l_waitBaseAnime;
return 1;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+115 -101
View File
@@ -6,24 +6,19 @@
#include "d/actor/d_a_alink.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_obj_gra2.h"
#include "d/actor/d_a_npc_kn.h"
BOOL daAlink_c::checkEnemyGroup(fopAc_ac_c* i_actor) {
return i_actor != NULL && (fopAcM_GetGroup(i_actor) == fopAc_ENEMY_e ||
fopAcM_GetName(i_actor) == PROC_E_ZH || checkSpecialNpc(i_actor));
return i_actor != NULL
&& (fopAcM_GetGroup(i_actor) == fopAc_ENEMY_e || fopAcM_GetName(i_actor) == PROC_E_ZH || checkSpecialNpc(i_actor));
}
// properly setup later
class daNpc_Kn_c : public fopAc_ac_c {
public:
bool checkBattleMode() { return true; }
};
BOOL daAlink_c::checkSpecialNpc(fopAc_ac_c* i_actor) {
s16 name = fopAcM_GetName(i_actor);
return ((name == PROC_NPC_KAKASHI || name == PROC_NPC_KN) &&
static_cast<daNpc_Kn_c*>(i_actor)->checkBattleMode()) ||
(name == PROC_OBJ_GRA && !static_cast<daObj_GrA_c*>(i_actor)->checkNpcObjGra());
return name == PROC_NPC_KAKASHI ||
(name == PROC_NPC_KN && static_cast<daNpc_Kn_c*>(i_actor)->checkBattleMode()) ||
(name == PROC_OBJ_GRA && !static_cast<daObj_GrA_c*>(i_actor)->checkNpcObjGra());
}
BOOL daAlink_c::checkShieldAttackEmphasys() {
@@ -56,20 +51,29 @@ void daAlink_c::stickArrowIncrement(int param_0) {
}
if (arrow_num != 0) {
if (checkShieldGet() && checkItemGet(fpcNm_ITEM_BOW, true)) {
int arrow_type = arrow_num == 1 ? fpcNm_ITEM_ARROW_1 : fpcNm_ITEM_ARROW_10;
if (checkShieldGet()
#if !PLATFORM_SHIELD
&& checkItemGet(fpcNm_ITEM_BOW, true)
#endif
)
{
int arrow_type;
if (arrow_num == 1) {
arrow_type = fpcNm_ITEM_ARROW_1;
} else {
arrow_type = fpcNm_ITEM_ARROW_10;
}
dComIfGp_setItemArrowNumCount(arrow_num);
fopAcM_createItemForSimpleDemo(&current.pos, arrow_type, -1, NULL, NULL, 0.0f,
0.0f);
}
onResetFlg0(RFLG0_UNK_1);
onResetFlg0(RFLG0_STICK_ARROW_RESET);
}
}
}
void daAlink_c::setArrowShieldActor(fopAc_ac_c* i_actor, int param_1) {
fpc_ProcID new_arrow_id = fopAcM_GetID(i_actor);
@@ -106,12 +110,11 @@ void daAlink_c::setArrowShieldActor(fopAc_ac_c* i_actor, int param_1) {
}
}
BOOL daAlink_c::checkWoodShieldEquipNotIronBall() const {
return checkWoodShieldEquip() && !checkIronBallEquip();
}
void daAlink_c::getArrowShieldOffset(cXyz const* param_0, csXyz const* param_1, cXyz* param_2,
void daAlink_c::getArrowShieldOffset(const cXyz* param_0, const csXyz* param_1, cXyz* param_2,
cXyz* param_3) const {
cXyz sp54;
mDoMtx_stack_c::ZXYrotS(param_1->x + cM_rndFX(0x1000), param_1->y + cM_rndFX(0x1000), 0);
@@ -120,7 +123,7 @@ void daAlink_c::getArrowShieldOffset(cXyz const* param_0, csXyz const* param_1,
mDoMtx_stack_c::inverse();
mDoMtx_stack_c::multVecSR(&sp54, param_3);
static Vec const localCenter = {-15.0f, 0.0f, 18.0f};
static const Vec localCenter = {-15.0f, 0.0f, 18.0f};
cXyz sp60;
mDoMtx_multVec(getShieldMtx(), &localCenter, &sp60);
@@ -140,9 +143,8 @@ void daAlink_c::getArrowShieldOffset(cXyz const* param_0, csXyz const* param_1,
mDoMtx_stack_c::multVec(&sp6C, param_2);
}
void daAlink_c::setArrowShieldPos(cXyz* param_0, csXyz* param_1, cXyz const* param_2,
cXyz const* param_3) const {
void daAlink_c::setArrowShieldPos(cXyz* param_0, csXyz* param_1, const cXyz* param_2,
const cXyz* param_3) const {
cXyz sp1C;
mDoMtx_multVecSR(getShieldMtx(), param_3, &sp1C);
@@ -153,9 +155,12 @@ void daAlink_c::setArrowShieldPos(cXyz* param_0, csXyz* param_1, cXyz const* par
}
BOOL daAlink_c::checkUpperGuardAnime() const {
return checkNoResetFlg2(FLG2_UNK_8000000) && !checkEventRun() &&
!checkNoResetFlg0(FLG0_UNK_2) && mProcID != PROC_GUARD_BREAK &&
mProcID != PROC_CUT_REVERSE && mProcID != PROC_GUARD_ATTACK;
return checkNoResetFlg2(FLG2_UNK_8000000) &&
!checkEventRun() &&
!checkNoResetFlg0(FLG0_UNK_2) &&
mProcID != PROC_GUARD_BREAK &&
mProcID != PROC_CUT_REVERSE &&
mProcID != PROC_GUARD_ATTACK;
}
BOOL daAlink_c::checkPlayerGuard() const {
@@ -168,15 +173,20 @@ BOOL daAlink_c::checkPlayerGuardAndAttack() const {
}
BOOL daAlink_c::checkGuardAccept() {
return checkModeFlg(0x80) && checkShieldGet() && !checkFmChainGrabAnime() &&
return checkModeFlg(0x80) &&
checkShieldGet() &&
!checkFmChainGrabAnime() &&
!checkNotBattleStage();
}
void daAlink_c::setUpperGuardAnime(f32) {
void daAlink_c::setUpperGuardAnime(f32 param_0) {
UNUSED(param_0);
onNoResetFlg2(FLG2_UNK_8000000);
}
void daAlink_c::setShieldGuard() {
f32 var_f31 = mNowAnmPackUpper[2].getRatio();
if ((mProcID == PROC_GUARD_SLIP && mEquipItem != fpcNm_ITEM_IRONBALL) || checkSmallUpperGuardAnime() ||
(checkGuardAccept() && !checkGrabAnime() && !checkUpperReadyThrowAnime() &&
!checkDkCaught2Anime() && !checkKandelaarSwingAnime() && !checkCutDashAnime() &&
@@ -191,28 +201,28 @@ void daAlink_c::setShieldGuard() {
void daAlink_c::setGuardSe(dCcD_GObjInf* i_objinf) {
int var_r31;
int var_r30;
BOOL isRebound;
if (checkWoodShieldEquipNotIronBall() && !checkMagicArmorNoDamage()) {
var_r31 = 0x29;
var_r30 = 0;
isRebound = FALSE;
} else {
var_r31 = 0x28;
var_r30 = 1;
isRebound = TRUE;
}
u32 hit_se;
if (i_objinf->GetTgHitGObj() != NULL && i_objinf->GetTgHitGObj()->GetAtType() == AT_TYPE_BOMB) {
hit_se = Z2SE_HIT_METAL_WEAPON;
} else {
hit_se = i_objinf->GetTgHitObjHitSeID(var_r30);
hit_se = i_objinf->GetTgHitObjHitSeID(isRebound);
}
mZ2Link.startCollisionSE(hit_se, var_r31);
}
void daAlink_c::setSmallGuard(dCcD_GObjInf* i_objinf) {
setUpperAnimeBase(0x16);
setUpperAnimeBase(dRes_ID_ALANM_BCK_ATDEFS_e);
cXyz* dmg_vec = getDamageVec(i_objinf);
mBodyAngle.y = (dmg_vec->atan2sX_Z() + 0x8000) - shape_angle.y;
@@ -227,7 +237,7 @@ void daAlink_c::setSmallGuard(dCcD_GObjInf* i_objinf) {
mBodyAngle.x = cLib_minMaxLimit<s16>(cM_atan2s(dmg_vec->y, dmg_vec->absXZ()), -mpHIO->mGuard.m.mSmallGuardFBAngleMax, mpHIO->mGuard.m.mSmallGuardFBAngleMax);
}
int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
int daAlink_c::procGuardSlipInit(int i_atSpl, dCcD_GObjInf* i_objinf) {
if (mProcID == PROC_GUARD_SLIP) {
return 0;
}
@@ -241,9 +251,11 @@ int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
commonProcInit(PROC_GUARD_SLIP);
field_0x2fd4 = 3;
cXyz* temp_r3 = getDamageVec(param_1);
current.angle.y = temp_r3->atan2sX_Z();
cXyz* dmg_vec = getDamageVec(i_objinf);
current.angle.y = dmg_vec->atan2sX_Z();
const daAlinkHIO_anm_c* anmParams;
daAlink_ANM anm;
if (mEquipItem == fpcNm_ITEM_IRONBALL) {
setSingleAnimeBase(ANM_IRONBALL_DEF);
setIronBallWaitUpperAnime(1);
@@ -253,15 +265,14 @@ int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
mProcVar2.field_0x300c = 0;
mProcVar3.field_0x300e = 0;
} else {
const daAlinkHIO_anm_c* var_r27 = &mpHIO->mGuard.m.mGuardHitAnm;
daAlink_ANM var_r28;
anmParams = &mpHIO->mGuard.m.mGuardHitAnm;
if (field_0x2f98 == 2) {
var_r28 = ANM_GUARD_LEFT;
anm = ANM_GUARD_LEFT;
} else {
var_r28 = ANM_GUARD_RIGHT;
anm = ANM_GUARD_RIGHT;
}
setSingleAnimeParam(var_r28, var_r27);
setSingleAnimeParam(anm, anmParams);
setUpperGuardAnime(-1.0f);
mProcVar2.field_0x300c = (current.angle.y + 0x8000) - shape_angle.y;
@@ -271,7 +282,7 @@ int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
mProcVar2.field_0x300c = cLib_minMaxLimit<s16>((s16)mProcVar2.field_0x300c, -mpHIO->mGuard.m.mGuardLRAngleMax, mpHIO->mGuard.m.mGuardLRAngleMax);
}
mProcVar3.field_0x300e = cLib_minMaxLimit<s16>(cM_atan2s(temp_r3->y, temp_r3->absXZ()), -mpHIO->mGuard.m.mGuardFBAngleMax, mpHIO->mGuard.m.mGuardFBAngleMax);
mProcVar3.field_0x300e = cLib_minMaxLimit<s16>(cM_atan2s(dmg_vec->y, dmg_vec->absXZ()), -mpHIO->mGuard.m.mGuardFBAngleMax, mpHIO->mGuard.m.mGuardFBAngleMax);
mProcVar1.field_0x300a = mpHIO->mGuard.m.mGuardBodyInterpolation + 1;
mProcVar2.field_0x300c = (mProcVar2.field_0x300c - mBodyAngle.y) / mProcVar1.field_0x300a;
mProcVar3.field_0x300e = (mProcVar3.field_0x300e - mBodyAngle.x) / mProcVar1.field_0x300a;
@@ -284,7 +295,7 @@ int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
mProcVar4.field_0x3010 = 0;
mProcVar5.field_0x3012 = 0;
if (param_1 != NULL && param_1->GetTgHitAc() != NULL && fopAcM_GetName(param_1->GetTgHitAc()) == PROC_E_MM_MT && param_1->GetTgHitAc()->argument == 1) {
if (i_objinf != NULL && i_objinf->GetTgHitAc() != NULL && fopAcM_GetName(i_objinf->GetTgHitAc()) == PROC_E_MM_MT && i_objinf->GetTgHitAc()->argument == 1) {
if (checkBootsOrArmorHeavy()) {
mNormalSpeed = mpHIO->mGuard.m.mMagneHvyGuardSpeed;
mProcVar5.field_0x3012 = 1;
@@ -294,13 +305,13 @@ int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
}
mProcVar4.field_0x3010 = 1;
} else if (checkHugeAttack(param_0)) {
} else if (checkHugeAttack(i_atSpl)) {
if ((!checkBootsOrArmorHeavy() && checkMiddleBossGoronRoom()) || checkStageName("D_MN07B")) {
mNormalSpeed = 40.0f;
} else {
mNormalSpeed = mpHIO->mGuard.m.mGuardSpeedHuge;
}
} else if (checkLargeAttack(param_0)) {
} else if (checkLargeAttack(i_atSpl)) {
mNormalSpeed = mpHIO->mGuard.m.mGuardSpeedLarge;
} else {
mNormalSpeed = mpHIO->mGuard.m.mGuardSpeedNormal;
@@ -319,7 +330,7 @@ int daAlink_c::procGuardSlip() {
setShapeAngleToAtnActor(0);
if (mProcVar1.field_0x300a != 0) {
mProcVar1.field_0x300a -= 1;
mProcVar1.field_0x300a -= (s16)1;
mBodyAngle.y += mProcVar2.field_0x300c;
mBodyAngle.x += mProcVar3.field_0x300e;
}
@@ -328,19 +339,19 @@ int daAlink_c::procGuardSlip() {
field_0x2f9d = 0x60;
}
f32 var_f31;
f32 speed_step;
if (checkBootsOrArmorHeavy() && mProcVar4.field_0x3010 == 0) {
var_f31 = 2.5f;
speed_step = 2.5f;
} else {
var_f31 = 1.25f;
speed_step = 1.25f;
}
if (mProcVar4.field_0x3010 != 0 && mProcVar5.field_0x3012 != checkBootsOrArmorHeavy()) {
mNormalSpeed = 0.0f;
}
if (cLib_chaseF(&mNormalSpeed, 0.0f, var_f31) != 0 && checkAnmEnd(&mUnderFrameCtrl[0])) {
field_0x814.SetTgApid(0);
if (cLib_chaseF(&mNormalSpeed, 0.0f, speed_step) != 0 && checkAnmEnd(&mUnderFrameCtrl[0])) {
mCcStts.SetTgApid(0);
if (!checkGuardActionChange()) {
onEndResetFlg1(ERFLG1_UNK_20);
@@ -357,41 +368,44 @@ int daAlink_c::procGuardSlip() {
}
int daAlink_c::procGuardAttackInit() {
if (mDemo.getDemoMode() == 0x4B && mProcID == PROC_GUARD_ATTACK) {
if (mDemo.getDemoMode() == daPy_demo_c::DEMO_GUARD_ATTACK_e && mProcID == PROC_GUARD_ATTACK) {
return 1;
}
commonProcInit(PROC_GUARD_ATTACK);
const daAlinkHIO_guardAttack_c1* temp_r30 = &mpHIO->mGuard.mAtPush.m;
daAlink_ANM anm = ANM_SHIELD_ATTACK;
const daAlinkHIO_guardAttack_c1* params = &mpHIO->mGuard.mAtPush.m;
field_0x2f98 = 3;
field_0x34d4 = l_rWaitBaseAnime;
field_0x3588 = l_rWaitBaseAnime;
setCutType(0x29);
setSingleAnimeParam(ANM_SHIELD_ATTACK, &temp_r30->mAttackAnm);
setCutType(CUT_TYPE_GUARD_ATTACK);
u8 atSe = dCcD_SE_SHIELD_ATTACK;
field_0x3478 = temp_r30->mAttackStartFrame;
field_0x347c = temp_r30->mAttackEndFrame;
field_0x3480 = temp_r30->mSpeed;
setSingleAnimeParam(anm, &params->mAttackAnm);
if (checkHeavyStateOn(1, 1) != 0) {
field_0x3478 = params->mAttackStartFrame;
field_0x347c = params->mAttackEndFrame;
field_0x3480 = params->mSpeed;
if (checkHeavyStateOn(TRUE, TRUE)) {
field_0x3480 *= mHeavySpeedMultiplier;
}
if (mDemo.getDemoMode() == 0x4B) {
if (mDemo.getDemoMode() == daPy_demo_c::DEMO_GUARD_ATTACK_e) {
field_0x3484 = 1000.0f;
field_0x3488 = 1000.0f;
} else {
field_0x3484 = temp_r30->mAttackAnm.mCancelFrame;
field_0x3488 = temp_r30->mSlashCheckFrame;
field_0x3484 = params->mAttackAnm.mCancelFrame;
field_0x3488 = params->mSlashCheckFrame;
}
mNormalSpeed = 0.0f;
setSwordVoiceSe(Z2SE_AL_V_TATE_OSHI);
mGuardAtCps.ResetAtHit();
mGuardAtCps.SetAtSe(2);
mGuardAtCps.SetAtSe(atSe);
mGuardAtCps.SetR(mpHIO->mGuard.m.mAttackRadius);
current.angle.y = shape_angle.y;
@@ -405,7 +419,7 @@ int daAlink_c::procGuardAttackInit() {
}
int daAlink_c::procGuardAttack() {
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
setUpperGuardAnime(-1.0f);
field_0x2f99 = 4;
@@ -419,17 +433,17 @@ int daAlink_c::procGuardAttack() {
BOOL var_r29;
if (mEquipItem == 0x103 && !checkMagneBootsOn()) {
var_r29 = 1;
var_r29 = TRUE;
if (doTrigger()) {
mProcVar3.field_0x300e = 1;
}
} else {
var_r29 = 0;
var_r29 = FALSE;
}
if (mProcVar0.field_0x3008 == 0 && mGuardAtCps.ChkAtHit()) {
mProcVar0.field_0x3008 = 1;
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER3, 1, cXyz(0.0f, 1.0f, 0.0f));
}
if (mProcVar5.field_0x3012 != 0 && commonLineCheck(&field_0x3834, &mRightHandPos) && dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7) {
@@ -439,20 +453,20 @@ int daAlink_c::procGuardAttack() {
if (var_r29) {
if (checkCutHeadState()) {
setDoStatusEmphasys(0x77);
setDoStatusEmphasys(BUTTON_STATUS_HELM_SPLITTER);
} else {
setDoStatus(0x86);
setDoStatus(BUTTON_STATUS_UNK_134);
}
}
if (checkAnmEnd(temp_r30)) {
if (mDemo.getDemoMode() == 0x4B) {
if (checkAnmEnd(framectrl)) {
if (mDemo.getDemoMode() == daPy_demo_c::DEMO_GUARD_ATTACK_e) {
dComIfGp_evmng_cutEnd(mAlinkStaffId);
} else {
checkNextAction(0);
}
} else {
if (temp_r30->getFrame() > field_0x3488) {
if (framectrl->getFrame() > field_0x3488) {
if (mProcVar3.field_0x300e != 0) {
return checkDoCutAction();
}
@@ -462,10 +476,10 @@ int daAlink_c::procGuardAttack() {
}
}
if (temp_r30->getFrame() > field_0x3484) {
if (framectrl->getFrame() > field_0x3484) {
onModeFlg(4);
checkNextAction(1);
} else if (temp_r30->getFrame() >= field_0x3478 && temp_r30->getFrame() < field_0x347c) {
} else if (framectrl->getFrame() >= field_0x3478 && framectrl->getFrame() < field_0x347c) {
if (mProcVar5.field_0x3012 == 0) {
mNormalSpeed = field_0x3480;
}
@@ -483,29 +497,29 @@ int daAlink_c::procGuardBreakInit() {
setSingleAnimeParam(ANM_GUARD_BREAK, &mpHIO->mGuard.m.mGuardBreakAnm);
if (mEquipItem == fpcNm_ITEM_IRONBALL) {
deleteEquipItem(0, 0);
deleteEquipItem(FALSE, FALSE);
}
mNormalSpeed = 0.0f;
field_0x3588 = l_halfAtnWaitBaseAnime;
dComIfGp_getVibration().StartShock(5, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER5, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
voiceStart(Z2SE_AL_V_GUARD_BROKEN);
return 1;
}
int daAlink_c::procGuardBreak() {
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
setUpperGuardAnime(-1.0f);
onEndResetFlg0(ERFLG0_UNK_8000000);
field_0x2f99 = 4;
if (checkAnmEnd(temp_r30)) {
if (checkAnmEnd(framectrl)) {
if (checkGuardActionChange() == 0) {
onEndResetFlg1(ERFLG1_UNK_20);
}
checkNextAction(0);
} else if (temp_r30->getFrame() > mpHIO->mGuard.m.mGuardBreakAnm.mCancelFrame) {
} else if (framectrl->getFrame() > mpHIO->mGuard.m.mGuardBreakAnm.mCancelFrame) {
if (!checkGuardActionChange()) {
onEndResetFlg1(ERFLG1_UNK_20);
}
@@ -518,37 +532,37 @@ int daAlink_c::procGuardBreak() {
}
int daAlink_c::procTurnMoveInit(int param_0) {
BOOL temp_r27 = checkUpperGuardAnime();
fopAc_ac_c* temp_r28 = mTargetedActor;
BOOL isUpperGuardAnime = checkUpperGuardAnime();
fopAc_ac_c* targetedActor = mTargetedActor;
commonProcInit(PROC_TURN_MOVE);
mNormalSpeed = 0.0f;
daAlink_ANM var_r29;
daAlink_ANM anm;
if (param_0 == 2) {
var_r29 = ANM_SIDE_ROLL_LEFT;
anm = ANM_SIDE_ROLL_LEFT;
} else if (param_0 == 3) {
var_r29 = ANM_SIDE_ROLL_RIGHT;
anm = ANM_SIDE_ROLL_RIGHT;
} else if (checkInputOnR()) {
if ((s16)(field_0x2fe2 - shape_angle.y) >= 0) {
var_r29 = ANM_SIDE_ROLL_LEFT;
if ((s16)(mMoveAngle - shape_angle.y) >= 0) {
anm = ANM_SIDE_ROLL_LEFT;
} else {
var_r29 = ANM_SIDE_ROLL_RIGHT;
anm = ANM_SIDE_ROLL_RIGHT;
}
} else {
var_r29 = ANM_SIDE_ROLL_LEFT;
anm = ANM_SIDE_ROLL_LEFT;
}
f32 temp_f31 = mpHIO->mGuard.mTurnMove.m.mTurnAnm.mSpeed;
f32 anm_speed = mpHIO->mGuard.mTurnMove.m.mTurnAnm.mSpeed;
mProcVar1.field_0x300a = mpHIO->mGuard.mTurnMove.m.mMaxTurnSpeed;
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
if (checkNoResetFlg0(FLG0_WATER_IN_MOVE)) {
mProcVar1.field_0x300a = mProcVar1.field_0x300a * mpHIO->mItem.mIronBoots.m.mWaterVelocityX;
}
setSingleAnime(var_r29, temp_f31, mpHIO->mGuard.mTurnMove.m.mTurnAnm.mStartFrame, mpHIO->mGuard.mTurnMove.m.mTurnAnm.mEndFrame, mpHIO->mGuard.mTurnMove.m.mTurnAnm.mInterpolation);
setSingleAnime(anm, anm_speed, mpHIO->mGuard.mTurnMove.m.mTurnAnm.mStartFrame, mpHIO->mGuard.mTurnMove.m.mTurnAnm.mEndFrame, mpHIO->mGuard.mTurnMove.m.mTurnAnm.mInterpolation);
if (var_r29 == ANM_SIDE_ROLL_LEFT) {
if (anm == ANM_SIDE_ROLL_LEFT) {
mProcVar2.field_0x300c = -0x7FF0;
field_0x2f98 = 2;
} else {
@@ -556,9 +570,9 @@ int daAlink_c::procTurnMoveInit(int param_0) {
field_0x2f98 = 3;
}
if (temp_r28 != NULL) {
cXyz sp8 = current.pos - temp_r28->current.pos;
shape_angle.y = fopAcM_searchActorAngleY(this, temp_r28);
if (targetedActor != NULL) {
cXyz sp8 = current.pos - targetedActor->current.pos;
shape_angle.y = fopAcM_searchActorAngleY(this, targetedActor);
field_0x3478 = sp8.absXZ();
mProcVar3.field_0x300e = sp8.atan2sX_Z();
} else {
@@ -569,7 +583,7 @@ int daAlink_c::procTurnMoveInit(int param_0) {
field_0x347c = (field_0x3478 - 150.0f) / mProcVar2.field_0x300c;
voiceStart(Z2SE_AL_V_SOTOMO_ROLL);
if (mDemo.getDemoMode() == 0x52) {
if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK_82_e) {
mProcVar0.field_0x3008 = 1;
} else {
mProcVar0.field_0x3008 = 0;
@@ -579,7 +593,7 @@ int daAlink_c::procTurnMoveInit(int param_0) {
field_0x2f9d = 4;
dComIfGp_setPlayerStatus0(0, 4);
if (temp_r27 != 0) {
if (isUpperGuardAnime) {
onNoResetFlg0(FLG0_UNK_2);
}
@@ -611,22 +625,22 @@ int daAlink_c::procTurnMove() {
shape_angle.y = mProcVar3.field_0x300e + 0x8000;
mProcVar0.field_0x3008 |= checkCutFinishJumpUp();
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
if (checkNoResetFlg0(FLG0_UNK_2)) {
setUpperGuardAnime(-1.0f);
}
if (checkAnmEnd(temp_r30)) {
if (checkAnmEnd(framectrl)) {
if (!checkAttentionLock()) {
offNoResetFlg2(FLG2_UNK_8000000);
}
checkNextAction(0);
} else if (mProcVar0.field_0x3008 != 0 && !checkNotJumpSinkLimit() && temp_r30->getFrame() > mpHIO->mGuard.mTurnMove.m.mTwirlCutDelayF) {
} else if (mProcVar0.field_0x3008 != 0 && !checkNotJumpSinkLimit() && framectrl->getFrame() > mpHIO->mGuard.mTurnMove.m.mTwirlCutDelayF) {
procCutFinishJumpUpInit();
dComIfGp_setPlayerStatus0(0, 4);
} else {
if (temp_r30->getFrame() > mpHIO->mGuard.mTurnMove.m.mTurnAnm.mCancelFrame) {
if (framectrl->getFrame() > mpHIO->mGuard.mTurnMove.m.mTurnAnm.mCancelFrame) {
onModeFlg(4);
if (checkNextAction(1)) {
@@ -634,8 +648,8 @@ int daAlink_c::procTurnMove() {
}
}
if (temp_r30->checkPass(19.0f)) {
dComIfGp_getVibration().StartShock(1, 1, cXyz(0.0f, 1.0f, 0.0f));
if (framectrl->checkPass(19.0f)) {
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER1, 1, cXyz(0.0f, 1.0f, 0.0f));
}
if (abs(temp_r29) > 0x100) {
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+29 -28
View File
@@ -18,9 +18,9 @@ void daAlink_c::concatMagneBootInvMtx() {
}
}
void daAlink_c::multVecMagneBootInvMtx(cXyz* vec) {
void daAlink_c::multVecMagneBootInvMtx(cXyz* o_dst) {
if (checkMagneBootsOn()) {
mDoMtx_multVecSR(mMagneBootInvMtx, vec, vec);
mDoMtx_multVecSR(mMagneBootInvMtx, o_dst, o_dst);
}
}
@@ -35,7 +35,7 @@ bool daAlink_c::commonMagneLineCheck(cXyz* i_start, cXyz* i_end) {
}
BOOL daAlink_c::checkBootsMoveAnime(int param_0) {
return (checkHeavyStateOn(param_0, 1) && !checkNoResetFlg0(FLG0_UNDERWATER)) ||
return (checkHeavyStateOn(param_0, 1) && !checkNoResetFlg0(FLG0_WATER_IN_MOVE)) ||
checkDkCaught2Anime();
}
@@ -56,7 +56,7 @@ int daAlink_c::setHeavyBoots(int param_0) {
deleteEquipItem(TRUE, FALSE);
}
if (checkNoResetFlg0(FLG0_UNDERWATER) && !dComIfGp_checkPlayerStatus1(0, 0x2000000)) {
if (checkNoResetFlg0(FLG0_WATER_IN_MOVE) && !dComIfGp_checkPlayerStatus1(0, 0x2000000)) {
return procSwimWaitInit(0);
}
@@ -92,7 +92,6 @@ int daAlink_c::setHeavyBoots(int param_0) {
return 0;
}
s16 daAlink_c::getMagneBootsLocalAngleY(s16 param_0, int param_1) {
if (param_1 == 1 || (param_1 != 2 && field_0x3114 <= 0x4000 && field_0x3114 != -0x8000)) {
return param_0;
@@ -107,12 +106,12 @@ s16 daAlink_c::getMagneBootsLocalAngleY(s16 param_0, int param_1) {
return vec.atan2sX_Z();
}
void daAlink_c::setMagneBootsMtx(cBgS_PolyInfo* i_polyinfo, int param_1) {
cM3dGPla poly;
dComIfG_Bgsp().GetTriPla(*i_polyinfo, &poly);
s16 var_r28 = cM_atan2s(poly.mNormal.absXZ(), poly.mNormal.y);
s16 var_r26 = field_0x3116;
int temp_r3_2 = abs(var_r28);
if (temp_r3_2 < 500) {
var_r28 = 0;
@@ -145,16 +144,14 @@ void daAlink_c::setMagneBootsMtx(cBgS_PolyInfo* i_polyinfo, int param_1) {
cXyz sp44 = mMagneBootsTopVec.outprod(poly.mNormal);
sp44.normalizeZP();
f32 var_f1_2 = JMAFastSqrt(1.0f - temp_f1 * temp_f1);
f32 temp_f1_2 = cM_atan2f(var_f1_2, temp_f1);
f32 temp_f1_2 = cM_atan2f(JMAFastSqrt(1.0f - temp_f1 * temp_f1), temp_f1);
f32 var_f2 = temp_f1_2 * 0.2f;
if (var_f2 > 0.4f) {
var_f2 = 0.4f;
} else if (var_f2 < 0.025f) {
var_f2 = 0.025f;
if (0.025f > temp_f1_2) {
if (var_f2 > temp_f1_2) {
var_f2 = temp_f1_2;
}
}
@@ -167,10 +164,10 @@ void daAlink_c::setMagneBootsMtx(cBgS_PolyInfo* i_polyinfo, int param_1) {
field_0x3114 = cM_atan2s(sp40.absXZ(), sp40.y);
int temp_r3_4 = abs(field_0x3114);
if (temp_r3_4 < 500) {
temp_r3_2 = abs(field_0x3114);
if (temp_r3_2 < 500) {
field_0x3114 = 0;
} else if (temp_r3_4 > 0x7E0B) {
} else if (temp_r3_2 > 0x7E0B) {
field_0x3114 = -0x8000;
}
@@ -189,7 +186,7 @@ void daAlink_c::setMagneBootsMtx(cBgS_PolyInfo* i_polyinfo, int param_1) {
s16 angle = sp40.atan2sX_Z();
shape_angle.y += angle;
current.angle.y += angle;
field_0x2fe6 += angle;
mPrevAngleY += angle;
field_0x310c += angle;
}
}
@@ -201,7 +198,6 @@ void daAlink_c::setMagneBootsMtx(cBgS_PolyInfo* i_polyinfo, int param_1) {
mDoMtx_multVec(mMagneBootMtx, &cXyz::BaseY, &mMagneBootsTopVec);
}
int daAlink_c::cancelMagneBootsOn() {
offNoResetFlg0(FLG0_MAGNE_BOOTS_ON);
mZ2Link.setMagnetized(false);
@@ -221,10 +217,10 @@ int daAlink_c::cancelMagneBootsOn() {
current.pos += mMagneBootsTopVec * 100.0f;
mLinkGndChk.SetPos(&current.pos);
f32 gnd_cross = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
f32 ground_y = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
current.pos.y -= 100.0f;
if (gnd_cross > current.pos.y) {
current.pos.y = gnd_cross;
if (ground_y > current.pos.y) {
current.pos.y = ground_y;
}
old.pos = current.pos;
@@ -242,7 +238,6 @@ int daAlink_c::cancelMagneBootsOn() {
return 0;
}
int daAlink_c::checkMagneBootsFly() {
if (field_0x2fb8 != 0 && checkEquipHeavyBoots() && !checkDeadHP() &&
mProcID != PROC_MAGNE_BOOTS_FLY && !checkEventRun())
@@ -291,14 +286,13 @@ int daAlink_c::procBootsEquip() {
onModeFlg(4);
checkNextAction(1);
} else if (frameCtrl_p->getFrame() >= 5.0f) {
field_0x2f92 = 1;
field_0x2f93 = 6;
mLeftHandIndex = 1;
mRightHandIndex = 6;
}
return 1;
}
int daAlink_c::procMagneBootsFlyInit() {
cXyz sp44 = field_0x369c.normZP();
cM3dGPla sp50(&sp44, -sp44.inprod(field_0x3834));
@@ -338,20 +332,27 @@ int daAlink_c::procMagneBootsFlyInit() {
}
field_0x3478 = 0.0f;
field_0x594 = mpHIO->mItem.mIronBoots.m.mMaxMagneFlySpeed;
mMaxSpeed = mpHIO->mItem.mIronBoots.m.mMaxMagneFlySpeed;
mProcVar2.field_0x300c = 0;
voiceStart(Z2SE_AL_V_MAGNET_CAUGHT);
return 1;
}
int daAlink_c::procMagneBootsFly() {
field_0x3478 += mpHIO->mItem.mIronBoots.m.mMagneFlyAccelRate;
if (field_0x3478 > field_0x594) {
field_0x3478 = field_0x594;
if (field_0x3478 > mMaxSpeed) {
field_0x3478 = mMaxSpeed;
}
if (dComIfG_Bgsp().ChkPolySafe(mPolyInfo2) && checkEquipHeavyBoots()) {
/* !@bug - If iron boots are unequipped mid-flight, player will still stick to magnetic poly
* Fixed in GCN and Wii KOR versions by adding a checkEquipHeavyBoots check
*/
if (dComIfG_Bgsp().ChkPolySafe(mPolyInfo2)
#if PLATFORM_GCN || VERSION == VERSION_WII_KOR
&& checkEquipHeavyBoots()
#endif
)
{
if (dComIfG_Bgsp().ChkMoveBG(mPolyInfo2)) {
cXyz old_37c8(field_0x37c8);
dComIfG_Bgsp().MoveBgTransPos(mPolyInfo2, true, &field_0x37c8, NULL, NULL);
@@ -377,7 +378,7 @@ int daAlink_c::procMagneBootsFly() {
cLib_addCalcAngleS(&shape_angle.x, sp24.atan2sY_XZ() + -0x4000, 5, 0x1000, 0x100);
cLib_addCalcAngleS(&shape_angle.y, sp24.atan2sX_Z(), 5, 0x1000, 0x100);
mProcVar2.field_0x300c += 0x1C00;
mProcVar2.field_0x300c += (s16)0x1C00;
}
return 1;
+57 -54
View File
@@ -8,6 +8,8 @@
#include "SSystem/SComponent/c_math.h"
static fopAc_ac_c* daAlink_searchIceLeaf(fopAc_ac_c* i_actor, void* i_data) {
UNUSED(i_data);
if (fopAcM_GetName(i_actor) == PROC_Obj_IceLeaf) {
return i_actor;
}
@@ -19,8 +21,8 @@ bool daAlink_c::checkSnowCode() const {
return mGndPolySpecialCode == dBgW_SPCODE_HEAVY_SNOW || mGndPolySpecialCode == dBgW_SPCODE_LIGHT_SNOW;
}
bool daAlink_c::checkSnowCodePolygon(cBgS_PolyInfo& i_poly) {
int code = dComIfG_Bgsp().GetSpecialCode(i_poly);
bool daAlink_c::checkSnowCodePolygon(cBgS_PolyInfo& i_polyinfo) {
int code = dComIfG_Bgsp().GetSpecialCode(i_polyinfo);
return code == dBgW_SPCODE_HEAVY_SNOW || code == dBgW_SPCODE_LIGHT_SNOW;
}
@@ -47,7 +49,7 @@ int daAlink_c::boardCommon(BOOL i_canMove) {
for (int i = 0; i < 3; i++) {
if (mAcchCir[i].ChkWallHit() && cLib_distanceAngleS(sp8, mAcchCir[i].GetWallAngleY()) <= 0x2000 && mNormalSpeed > 30.0f) {
setJumpMode();
return procCoLargeDamageInit(-4, 1, 0, 0, NULL, 0);
return procCoLargeDamageInit(-4, TRUE, 0, 0, NULL, 0);
}
}
}
@@ -66,14 +68,14 @@ int daAlink_c::boardCommon(BOOL i_canMove) {
s16 var_r27;
if (mLinkAcch.ChkGroundHit() && dComIfG_Bgsp().ChkPolySafe(mLinkAcch.m_gnd)) {
cM3dGPla poly;
dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, &poly);
cM3dGPla tripla;
dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, &tripla);
mProcVar3.field_0x300e = cM_atan2s(poly.mNormal.absXZ(), poly.mNormal.y);
mProcVar3.field_0x300e = cM_atan2s(tripla.mNormal.absXZ(), tripla.mNormal.y);
if (mProcVar3.field_0x300e == 0) {
var_r27 = shape_angle.y;
} else {
var_r27 = poly.mNormal.atan2sX_Z();
var_r27 = tripla.mNormal.atan2sX_Z();
}
} else {
mProcVar3.field_0x300e = 0;
@@ -82,7 +84,7 @@ int daAlink_c::boardCommon(BOOL i_canMove) {
if (mProcVar0.field_0x3008 != 0) {
mProcVar0.field_0x3008--;
onResetFlg1(RFLG1_UNK_40);
onResetFlg1(RFLG1_BOARD_NO_FOOT_ANGLE);
}
f32 var_f30 = 0.0f;
@@ -90,10 +92,10 @@ int daAlink_c::boardCommon(BOOL i_canMove) {
s16 var_r24;
if (checkInputOnR() && i_canMove) {
var_r24 = 1024.0f * field_0x33ac * cM_ssin(mStickAngle);
var_r24 = 1024.0f * mMoveValue * cM_ssin(mStickAngle);
if (temp_r26 > 0x6000 && field_0x2f8c == 0xB && mProcID == PROC_BOARD_WAIT) {
f32 temp_f29 = field_0x33ac * cM_scos((0x8000 - temp_r26) * 2);
f32 temp_f29 = mMoveValue * cM_scos((0x8000 - temp_r26) * 2);
f32 speed_step = temp_f29;
if (speed_step < 0.15f) {
@@ -178,8 +180,8 @@ int daAlink_c::boardCommon(BOOL i_canMove) {
f32 temp_f26 = (var_f31 * cM_scos(var_r27)) + (mNormalSpeed * cM_scos(shape_angle.y));
mNormalSpeed = JMAFastSqrt((temp_f27 * temp_f27) + (temp_f26 * temp_f26));
if (mNormalSpeed > field_0x594) {
mNormalSpeed = field_0x594;
if (mNormalSpeed > mMaxSpeed) {
mNormalSpeed = mMaxSpeed;
}
if (mNormalSpeed > 0.1f) {
@@ -203,8 +205,8 @@ int daAlink_c::boardCommon(BOOL i_canMove) {
setCommonBoardAnime(FALSE);
}
if (mNormalSpeed > (0.7f * field_0x594)) {
cLib_chaseF(&mNormalSpeed, 0.7f * field_0x594, 1.5f);
if (mNormalSpeed > (0.7f * mMaxSpeed)) {
cLib_chaseF(&mNormalSpeed, 0.7f * mMaxSpeed, 1.5f);
}
}
@@ -227,19 +229,27 @@ int daAlink_c::boardCommon(BOOL i_canMove) {
return 0;
}
void daAlink_c::setCommonBoardAnime(BOOL i_is_ride_front) {
void daAlink_c::setCommonBoardAnime(BOOL i_isRideFront) {
// Fakematch, retail should use mpHIO->mItem.mBoard.m.mStandAnmSpeed and mpHIO->mItem.mBoard.m.mStandInterpolation
#if DEBUG
setDoubleAnime(
0.0f,
mpHIO->mItem.mBoard.m.mStandAnmSpeed,
1.0f,
i_isRideFront ? ANM_RIDE_FRONT : ANM_RIDE_WAIT, ANM_RIDE_STOP,
11,
mpHIO->mItem.mBoard.m.mStandInterpolation
);
#else
setDoubleAnime(
0.0f,
// Fakematch, should be
// mpHIO->mItem.mBoard.m.mStandAnmSpeed,
daAlinkHIO_board_c0::m.mStandAnmSpeed,
1.0f,
i_is_ride_front ? ANM_RIDE_FRONT : ANM_RIDE_WAIT, ANM_RIDE_STOP,
i_isRideFront ? ANM_RIDE_FRONT : ANM_RIDE_WAIT, ANM_RIDE_STOP,
11,
// Fakematch, should be
// mpHIO->mItem.mBoard.m.mStandInterpolation
daAlinkHIO_board_c0::m.mStandInterpolation
);
#endif
}
int daAlink_c::checkNextActionBoard() {
@@ -296,7 +306,7 @@ int daAlink_c::procBoardRideInit() {
setHeavyBoots(0);
if (mEquipItem != 0x103) {
deleteEquipItem(1, 1);
deleteEquipItem(TRUE, TRUE);
} else {
offKandelaarModel();
}
@@ -335,7 +345,8 @@ int daAlink_c::procBoardRide() {
return 1;
}
int daAlink_c::procBoardWaitInit(fopAc_ac_c* i_board) {
int daAlink_c::procBoardWaitInit(fopAc_ac_c* i_boardActor) {
#if PLATFORM_GCN
if (mEquipItem != 0x103) {
deleteEquipItem(TRUE, TRUE);
} else {
@@ -347,23 +358,24 @@ int daAlink_c::procBoardWaitInit(fopAc_ac_c* i_board) {
if (!checkBoardRide()) {
resetUpperAnime(UPPER_2, -1.0f);
}
#endif
if (checkModeFlg(2) && i_board == NULL) {
if (checkModeFlg(2) && i_boardActor == NULL) {
return procBoardJumpInit(0.0f, TRUE);
}
BOOL prev_ride = mProcID == PROC_BOARD_RIDE;
BOOL is_prev_boardRide = mProcID == PROC_BOARD_RIDE;
if (!commonProcInitNotSameProc(PROC_BOARD_WAIT)) {
return 0;
}
current.angle.y = shape_angle.y;
if (i_board != NULL) {
mRideAcKeep.setData(i_board);
((daObjIceLeaf_c*)i_board)->onRide();
if (i_boardActor != NULL) {
mRideAcKeep.setData(i_boardActor);
((daObjIceLeaf_c*)i_boardActor)->onRide();
if (prev_ride) {
if (is_prev_boardRide) {
f32 speed_ratio = mNormalSpeed / mpHIO->mMove.m.mMaxSpeed;
if (speed_ratio > 1.0f) {
speed_ratio = 1.0f;
@@ -374,13 +386,13 @@ int daAlink_c::procBoardWaitInit(fopAc_ac_c* i_board) {
mNormalSpeed = 0.0f;
}
field_0x594 = mpHIO->mItem.mBoard.m.mMaxSpeed;
mMaxSpeed = mpHIO->mItem.mBoard.m.mMaxSpeed;
mProcVar2.field_0x300c = 0;
mProcVar3.field_0x300e = 0;
setCommonBoardAnime(FALSE);
}
mRideStatus = 4;
mRideStatus = RIDETYPE_BOARD;
mProcVar5.field_0x3012 = 0;
mProcVar1.field_0x300a = 0;
return 1;
@@ -423,7 +435,7 @@ int daAlink_c::procBoardWait() {
return procBoardCutInit();
} else if (mProcVar5.field_0x3012 == 0) {
if (!checkModeFlg(2) && mProcID != PROC_BOARD_ROW) {
setDoStatus(0xA);
setDoStatus(BUTTON_STATUS_CROUCH);
if (doButton()) {
f32 blend_ratio;
@@ -440,7 +452,7 @@ int daAlink_c::procBoardWait() {
}
} else if (mProcVar5.field_0x3012 != 0) {
if (mNormalSpeed > 15.0f) {
setDoStatus(0x19);
setDoStatus(BUTTON_STATUS_JUMP);
}
if (!doButton()) {
@@ -463,7 +475,7 @@ int daAlink_c::procBoardWait() {
int daAlink_c::procBoardRowInit() {
commonProcInit(PROC_BOARD_ROW);
setSingleAnimeBaseSpeed(ANM_RIDE_KICK, getBoardRowAnmSpeed(), mpHIO->mItem.mBoard.m.mPushInterpolation);
onResetFlg1(RFLG1_UNK_40);
onResetFlg1(RFLG1_BOARD_NO_FOOT_ANGLE);
mProcVar0.field_0x3008 = 4;
mProcVar4.field_0x3010 = 1;
mProcVar5.field_0x3012 = 0;
@@ -476,7 +488,7 @@ int daAlink_c::procBoardRow() {
}
if (mProcVar4.field_0x3010 != 0) {
onResetFlg1(RFLG1_UNK_40);
onResetFlg1(RFLG1_BOARD_NO_FOOT_ANGLE);
mProcVar0.field_0x3008 = 4;
}
@@ -492,7 +504,6 @@ int daAlink_c::procBoardRow() {
}
} else if (frame_ctrl->checkPass(7.0f)) {
mNormalSpeed += mpHIO->mItem.mBoard.m.mPushAccel;
if (mNormalSpeed > mpHIO->mItem.mBoard.m.mMaxPushSpeed) {
mNormalSpeed = mpHIO->mItem.mBoard.m.mMaxPushSpeed;
}
@@ -530,7 +541,7 @@ int daAlink_c::procBoardTurn() {
mProcVar1.field_0x300a = 1;
}
} else {
cLib_addCalcAngleS(&shape_angle.y, mProcVar4.field_0x3010, 5, 0x1B58, 0x7D0);
cLib_addCalcAngleS(&shape_angle.y, mProcVar4.field_0x3010, 5, 7000, 2000);
current.angle.y = shape_angle.y;
if (!checkModeFlg(2)) {
@@ -544,7 +555,7 @@ int daAlink_c::procBoardTurn() {
return 1;
}
int daAlink_c::procBoardJumpInit(f32 i_jump_speed, BOOL i_no_speed_set) {
int daAlink_c::procBoardJumpInit(f32 i_jumpSpeed, BOOL i_isNoSpeed) {
commonProcInit(PROC_BOARD_JUMP);
mProcVar0.field_0x3008 = 0;
mProcVar5.field_0x3012 = 1;
@@ -554,8 +565,8 @@ int daAlink_c::procBoardJumpInit(f32 i_jump_speed, BOOL i_no_speed_set) {
mpHIO->mItem.mBoard.m.mAirborneAnm.mEndFrame,
mpHIO->mItem.mBoard.m.mAirborneAnm.mInterpolation);
if (!i_no_speed_set) {
speed.y = cLib_minMaxLimit(i_jump_speed, mpHIO->mItem.mBoard.m.mMinJumpSpeedY, mpHIO->mItem.mBoard.m.mMaxJumpSpeedY);
if (!i_isNoSpeed) {
speed.y = cLib_minMaxLimit(i_jumpSpeed, mpHIO->mItem.mBoard.m.mMinJumpSpeedY, mpHIO->mItem.mBoard.m.mMaxJumpSpeedY);
}
mProcVar4.field_0x3010 = 0;
@@ -588,7 +599,6 @@ int daAlink_c::procBoardSubjectivityInit() {
commonProcBoardInit(PROC_BOARD_SUBJECTIVITY);
setSubjectMode();
setCommonBoardAnime(FALSE);
return 1;
}
@@ -603,7 +613,7 @@ int daAlink_c::procBoardSubjectivity() {
shape_angle.y = old_shape_angle;
if (checkSubjectEnd(1)) {
if (checkSubjectEnd(TRUE)) {
procBoardWaitInit(NULL);
} else {
setRideSubjectAngle(old_angle);
@@ -615,17 +625,10 @@ int daAlink_c::procBoardSubjectivity() {
int daAlink_c::procBoardCutInit() {
commonProcBoardInit(PROC_BOARD_CUT);
bool cut_charge = false;
if (checkUnderMove0BckNoArc(ANM_RIDE_CUT_TURN_CHARGE)) {
if (mUnderFrameCtrl[0].getFrame() > mpHIO->mCut.m.mNormalSwingDuration) {
cut_charge = true;
}
}
bool isCutCharge = checkUnderMove0BckNoArc(ANM_RIDE_CUT_TURN_CHARGE) && mUnderFrameCtrl[0].getFrame() > mpHIO->mCut.m.mNormalSwingDuration;
setCommonBoardAnime(FALSE);
setCutDash(1, cut_charge);
setCutDash(1, isCutCharge);
mProcVar5.field_0x3012 = 0;
return 1;
}
@@ -660,7 +663,7 @@ int daAlink_c::procBoardCutTurnInit() {
}
mProcVar5.field_0x3012 = 0;
resetCombo(1);
resetCombo(TRUE);
field_0x3478 = mpHIO->mCut.mCutTurn.m.mAttackRadius;
field_0x347c = 0.5f * field_0x3478;
@@ -680,14 +683,14 @@ int daAlink_c::procBoardCutTurn() {
daPy_frameCtrl_c* frame_ctrl = &mUnderFrameCtrl[0];
if (frame_ctrl->getFrame() >= 4.0f && frame_ctrl->getFrame() < 14.0f) {
if (!checkNoResetFlg0(FLG0_UNK_40)) {
if (!checkNoResetFlg0(FLG0_CUT_AT_FLG)) {
seStartSwordCut(Z2SE_AL_KAITENGIRI);
}
onResetFlg0(RFLG0_UNK_2);
cLib_chaseF(&field_0x347c, field_0x3478, 20.0f);
field_0xFB8.SetR(field_0x347c);
onResetFlg1(RFLG1_UNK_40);
mAtSph.SetR(field_0x347c);
onResetFlg1(RFLG1_BOARD_NO_FOOT_ANGLE);
} else {
mProcVar5.field_0x3012 = 0;
}
+51 -50
View File
@@ -42,10 +42,11 @@ bool daAlink_c::checkIronBallGroundStop() const {
void daAlink_c::setIronBallWaitUpperAnime(int param_0) {
if (!checkIronBallWaitAnime() && !checkIronBallPreSwingAnime() &&
(mItemVar0.field_0x3018 == 0 || mItemVar0.field_0x3018 == 8) && (param_0 || checkNoUpperAnime())) {
setUpperAnimeBaseSpeed(0x19C, mpHIO->mItem.mIronBall.m.mWaitAnmSpeed,
(mItemVar0.field_0x3018 == 0 || mItemVar0.field_0x3018 == 8) && (param_0 || checkNoUpperAnime()))
{
setUpperAnimeBaseSpeed(dRes_ID_ALANM_BCK_IBWAIT_e, mpHIO->mItem.mIronBall.m.mWaitAnmSpeed,
mpHIO->mBasic.m.mBasicInterpolation);
setFacePriBck(0xE8);
setFacePriBck(dRes_ID_ALANM_BCK_FAT_e);
field_0x2f96 = 254;
field_0x2f97 = 5;
mItemVar0.field_0x3018 = 0;
@@ -66,7 +67,7 @@ void daAlink_c::checkIronBallDelete() {
}
}
void daAlink_c::setIronBallReturn(int param_0) {
void daAlink_c::setIronBallReturn(BOOL param_0) {
if (param_0 && field_0x301e != 0) {
field_0x301e--;
} else if (mItemVar0.field_0x3018 != 7) {
@@ -89,8 +90,8 @@ void daAlink_c::setIronBallBgCheckPos() {
void daAlink_c::setIronBallModel() {
JKRHeap* prev_heap = setItemHeap();
mHeldItemModel = initModelEnv(loadAramBmd(0x311, 0x2800), 0);
mpItemModelData = loadAramBmd(0x317, 0x1000);
mHeldItemModel = initModelEnv(loadAramBmd(dRes_ID_ALANM_BMD_AL_IB_e, 0x2800), 0);
mpItemModelData = loadAramBmd(dRes_ID_ALANM_BMD_AL_HS_KUSARI_e, 0x1000);
mpHookChain = new hsChainShape_c();
mIronBallChainPos = new cXyz[102];
@@ -113,12 +114,12 @@ void daAlink_c::setIronBallModel() {
mpHookChain->setUserArea((uintptr_t)this);
field_0xFB8.SetAtType(AT_TYPE_IRON_BALL);
field_0xFB8.SetAtHitMark(3);
field_0xFB8.SetAtSe(dCcD_SE_HAMMER);
field_0xFB8.SetAtAtp(2);
field_0xFB8.SetAtMtrl(dCcD_MTRL_NONE);
field_0xFB8.SetR(mpHIO->mItem.mIronBall.m.mAttackRadius);
mAtSph.SetAtType(AT_TYPE_IRON_BALL);
mAtSph.SetAtHitMark(3);
mAtSph.SetAtSe(dCcD_SE_HAMMER);
mAtSph.SetAtAtp(2);
mAtSph.SetAtMtrl(dCcD_MTRL_NONE);
mAtSph.SetR(mpHIO->mItem.mIronBall.m.mAttackRadius);
csXyz* var_r28 = mIronBallChainAngle;
for (int i = 0; i < 102; i++, var_r28++) {
@@ -158,7 +159,7 @@ void daAlink_c::setIronBallModel() {
field_0x3024 = 0;
field_0x3026 = 0;
field_0x173c.Init(0xDC, 0xFF, this);
field_0x173c.Init(220, 0xFF, this);
field_0x1778.Set(l_sphSrc);
field_0x1778.SetStts(&field_0x173c);
field_0x1778.OffTgSetBit();
@@ -289,11 +290,11 @@ void daAlink_c::setIronBallChainPos() {
*var_r26 = (*var_r29 - sp28C) * mpHIO->mItem.mIronBall.m.mChainSpeedRate;
}
} else if (mItemVar0.field_0x3018 == 1 || mItemVar0.field_0x3018 == 3 || mItemVar0.field_0x3018 == 4) {
daPy_frameCtrl_c* sp30 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
if (mItemVar0.field_0x3018 == 1) {
f32 temp_f25 = sp30->getEnd() - 13.0f;
f32 temp_f29 = (sp30->getFrame() - 13.0f) / temp_f25;
f32 temp_f25 = framectrl->getEnd() - 13.0f;
f32 temp_f29 = (framectrl->getFrame() - 13.0f) / temp_f25;
s16 sp12 = -16384.0f - (14336.0f * temp_f29);
mDoMtx_stack_c::ZXYrotS(mBodyAngle.x, shape_angle.y, 0);
@@ -310,7 +311,7 @@ void daAlink_c::setIronBallChainPos() {
mDoMtx_stack_c::ZXYrotS(mBodyAngle.x, shape_angle.y, 0);
mDoMtx_stack_c::multVec(&sp268, &sp298);
sp38 = 2.0f * (1.0f + sp30->getFrame());
sp38 = 2.0f * (1.0f + framectrl->getFrame());
} else {
sp38 = -1;
}
@@ -448,8 +449,9 @@ BOOL daAlink_c::checkIronBallReturnChange() {
if (mProcID != PROC_IRON_BALL_THROW ||
(!(mBodyAngle.x > 0x400) && mIronBallBgChkPos.y < (current.pos.y - 200.0f)) ||
(mBodyAngle.x > 0x400 && mItemMode == 0x64) ||
(field_0xFB8.ChkAtHit() && field_0xFB8.GetAtHitGObj() != NULL &&
static_cast<dCcD_GObjInf*>(field_0xFB8.GetAtHitGObj())->ChkTgIronBallRebound())) {
(mAtSph.ChkAtHit() && mAtSph.GetAtHitGObj() != NULL &&
static_cast<dCcD_GObjInf*>(mAtSph.GetAtHitGObj())->ChkTgIronBallRebound()))
{
setIronBallReturn(0);
return true;
}
@@ -465,7 +467,7 @@ void daAlink_c::setIronBallPos() {
cXyz spDC;
cXyz spD0(mIronBallCenterPos);
mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(0xF));
mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(15));
mDoMtx_stack_c::transM(-1.0f, -6.0f, -3.6f);
mDoMtx_stack_c::XYZrotM(cM_deg2s(150.0f), cM_deg2s(-81.0f), cM_deg2s(111.0f));
@@ -478,7 +480,7 @@ void daAlink_c::setIronBallPos() {
mDoMtx_stack_c::multVecZero(&mHeldItemRootPos);
mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x316c);
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(9), &sp10C);
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0xE), &sp100);
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(14), &sp100);
spE8 = (sp10C + sp100) * 0.5f;
@@ -494,12 +496,12 @@ void daAlink_c::setIronBallPos() {
cXyz spC4;
cXyz spB8;
if (field_0xFB8.ChkAtHit()) {
if (mAtSph.ChkAtHit()) {
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
}
if (mItemVar0.field_0x3018 == 0) {
mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(0xA));
mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(10));
mDoMtx_stack_c::transM(-35.3f, -9.5f, -16.0f);
mDoMtx_stack_c::XYZrotM(cM_deg2s(61.5f), cM_deg2s(-2.5f), cM_deg2s(50.3f));
mDoMtx_stack_c::multVecZero(mIronBallChainPos);
@@ -513,8 +515,8 @@ void daAlink_c::setIronBallPos() {
mItemMode = 6;
} else if (mItemVar0.field_0x3018 != 1) {
if (mItemVar0.field_0x3018 == 2) {
daPy_frameCtrl_c* temp_r24 = &mUpperFrameCtrl[2];
s16 sp10 = 32768.0f - (65536.0f * (temp_r24->getFrame() / temp_r24->getEnd()));
daPy_frameCtrl_c* framectrl = &mUpperFrameCtrl[2];
s16 sp10 = 32768.0f - (65536.0f * (framectrl->getFrame() / framectrl->getEnd()));
mItemMode = 3;
@@ -570,13 +572,13 @@ void daAlink_c::setIronBallPos() {
spF4 = *mIronBallChainPos - mHookshotTopPos;
f32 temp_f1 = spF4.abs();
BOOL var_r26 = 0;
BOOL var_r26 = FALSE;
if (temp_f1 > 1000.0f) {
spF4 *= 1000.0f / temp_f1;
*mIronBallChainPos = mHookshotTopPos + spF4;
if (field_0x3848->abs2() < 1.0f) {
var_r26 = 1;
var_r26 = TRUE;
} else {
field_0x3848->x = 0.0f;
field_0x3848->z = 0.0f;
@@ -811,14 +813,14 @@ BOOL daAlink_c::checkIronBallAnime() const {
void daAlink_c::setIronBallReadyAnime() {
resetUpperAnime(UPPER_2, -1.0f);
setSingleAnime(ANM_IRONBALL_ATTACK, mpHIO->mItem.mIronBall.m.mPrepareAnmSpeed, 0.0f,
0x15, mpHIO->mItem.mIronBall.m.mPrepareInterpolation);
setUpperAnimeBaseSpeed(0x19A, mpHIO->mItem.mIronBall.m.mPrepareAnmSpeed, -1.0f);
21, mpHIO->mItem.mIronBall.m.mPrepareInterpolation);
setUpperAnimeBaseSpeed(dRes_ID_ALANM_BCK_IBTHROW_e, mpHIO->mItem.mIronBall.m.mPrepareAnmSpeed, -1.0f);
mNowAnmPackUpper[2].setRatio(0.0f);
voiceStart(Z2SE_AL_V_SWING_IB);
field_0xFB8.OffAtSetBit();
field_0xFB8.ResetAtHit();
field_0xFB8.SetAtAtp(2);
mAtSph.OffAtSetBit();
mAtSph.ResetAtHit();
mAtSph.SetAtAtp(2);
field_0x301e = 10;
field_0x3020 = 0;
@@ -845,13 +847,12 @@ BOOL daAlink_c::checkUpperItemActionIronBall() {
return procIronBallThrowInit();
}
if (frameCtrl->checkAnmEnd()) {
if (checkAnmEnd(frameCtrl)) {
if (checkModeFlg(1)) {
setSingleAnimeBaseSpeed(ANM_IRONBALL_TURN, mpHIO->mItem.mIronBall.m.mTurnAnmSpeed, mpHIO->mItem.mIronBall.m.mTurnInterpolation);
}
u16 upperId = getMainBckData(ANM_IRONBALL_TURN)->m_upperID;
setUpperAnimeBaseSpeed(upperId, mpHIO->mItem.mIronBall.m.mTurnAnmSpeed, mpHIO->mItem.mIronBall.m.mTurnInterpolation);
setUpperAnimeBaseSpeed(getMainBckData(ANM_IRONBALL_TURN)->m_upperID, mpHIO->mItem.mIronBall.m.mTurnAnmSpeed, mpHIO->mItem.mIronBall.m.mTurnInterpolation);
mItemVar0.field_0x3018 = 2;
seStartOnlyReverb(Z2SE_AL_IB_SWING);
return 1;
@@ -912,7 +913,7 @@ int daAlink_c::procIronBallSubjectInit() {
int daAlink_c::procIronBallSubject() {
if (checkIronBallAnime()) {
setDoStatus(0x12);
setDoStatus(BUTTON_STATUS_BACK);
}
setShapeAngleToAtnActor(0);
@@ -943,13 +944,13 @@ int daAlink_c::procIronBallMoveInit() {
int daAlink_c::procIronBallMove() {
if (checkIronBallAnime()) {
setDoStatus(0x12);
setDoStatus(BUTTON_STATUS_BACK);
}
setShapeAngleToAtnActor(0);
if (!checkNextAction(0)) {
f32 var_f31 = -1.0f;
f32 morf = -1.0f;
if (checkIronBallPreSwingAnime()) {
mNormalSpeed = 0.0f;
@@ -960,7 +961,7 @@ int daAlink_c::procIronBallMove() {
if (field_0x2f98 != 2) {
field_0x2f98 = 2;
var_f31 = mpHIO->mBasic.m.mBasicInterpolation;
morf = mpHIO->mBasic.m.mBasicInterpolation;
}
} else {
offModeFlg(1);
@@ -969,7 +970,7 @@ int daAlink_c::procIronBallMove() {
if (checkModeFlg(1)) {
setIronBallBaseAnime();
} else {
setBlendAtnMoveAnime(var_f31);
setBlendAtnMoveAnime(morf);
}
setBodyAngleXReadyAnime(0);
@@ -992,12 +993,12 @@ int daAlink_c::procIronBallThrowInit() {
voiceStart(Z2SE_AL_V_THROW_IB);
seStartOnlyReverb(Z2SE_AL_IB_THROW);
field_0xFB8.SetAtAtp(3);
mAtSph.SetAtAtp(3);
return 1;
}
int daAlink_c::procIronBallThrow() {
daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* framectrl = &mUnderFrameCtrl[0];
if (mEquipItem != fpcNm_ITEM_IRONBALL) {
return checkWaitAction();
@@ -1009,16 +1010,16 @@ int daAlink_c::procIronBallThrow() {
return procIronBallReturnInit();
}
if (mItemVar0.field_0x3018 == 4 && temp_r29->checkPass(6.0f)) {
if (mItemVar0.field_0x3018 == 4 && framectrl->checkPass(6.0f)) {
mItemVar0.field_0x3018 = 5;
mDoMtx_stack_c::ZXYrotS(mBodyAngle.x, shape_angle.y, 0);
Vec sp8 = {0.0f, mpHIO->mItem.mIronBall.m.mThrowSpeedY, mpHIO->mItem.mIronBall.m.mThrowSpeedZ};
mDoMtx_stack_c::multVec(&sp8, field_0x3848);
Vec throwVec = {0.0f, mpHIO->mItem.mIronBall.m.mThrowSpeedY, mpHIO->mItem.mIronBall.m.mThrowSpeedZ};
mDoMtx_stack_c::multVec(&throwVec, field_0x3848);
field_0x3022 = 0;
}
if (checkAnmEnd(temp_r29)) {
if (checkAnmEnd(framectrl)) {
if (mProcVar2.field_0x300c == 0) {
mProcVar2.field_0x300c = 1;
setSingleAnimeBaseSpeed(ANM_IRONBALL_THROW, mpHIO->mItem.mIronBall.m.mThrowAnmSpeed, mpHIO->mItem.mIronBall.m.mThrowInterpolation);
@@ -1028,9 +1029,9 @@ int daAlink_c::procIronBallThrow() {
procIronBallReturnInit();
}
} else if (mProcVar2.field_0x300c != 0) {
if (temp_r29->getFrame() >= 5.0f) {
field_0x2f92 = 0xFE;
field_0x2f93 = 0xFE;
if (framectrl->getFrame() >= 5.0f) {
mLeftHandIndex = 0xFE;
mRightHandIndex = 0xFE;
}
}
@@ -1070,7 +1071,7 @@ int daAlink_c::procIronBallReturn() {
seStartOnlyReverb(Z2SE_AL_IB_CATCH);
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
} else if (frameCtrl->checkAnmEnd()) {
} else if (checkAnmEnd(frameCtrl)) {
if (mItemVar0.field_0x3018 == 8) {
mItemVar0.field_0x3018 = 0;
setIronBallWaitUpperAnime(1);
+34 -33
View File
@@ -11,6 +11,8 @@
#include "SSystem/SComponent/c_math.h"
static fopAc_ac_c* daAlink_searchTagKandelaar(fopAc_ac_c* i_actor, void* i_data) {
UNUSED(i_data);
if (fopAcM_GetName(i_actor) == PROC_TAG_LANTERN) {
return i_actor;
}
@@ -19,10 +21,11 @@ static fopAc_ac_c* daAlink_searchTagKandelaar(fopAc_ac_c* i_actor, void* i_data)
}
static fopAc_ac_c* daAlink_searchTagKtOnFire(fopAc_ac_c* i_actor, void* i_data) {
UNUSED(i_data);
daAlink_c* player_p = daAlink_getAlinkActorClass();
if (fopAcM_GetName(i_actor) == PROC_Tag_KtOnFire &&
i_actor->current.pos.abs2(player_p->current.pos) < 22500.0f &&
i_actor->current.pos.abs2(player_p->current.pos) < SQUARE(150.0f) &&
fopAcM_seenActorAngleY(player_p, i_actor) < 0x3000)
{
return i_actor;
@@ -34,7 +37,7 @@ static fopAc_ac_c* daAlink_searchTagKtOnFire(fopAc_ac_c* i_actor, void* i_data)
void daAlink_c::setKandelaarMtx(Mtx i_mtx, int param_1, int param_2) {
if (mpKanteraModel != NULL) {
if (checkNoResetFlg2(FLG2_UNK_1)) {
deleteEquipItem(0, 1);
deleteEquipItem(FALSE, TRUE);
}
onEndResetFlg1(ERFLG1_UNK_4);
@@ -51,7 +54,6 @@ void daAlink_c::setKandelaarMtx(Mtx i_mtx, int param_1, int param_2) {
}
BOOL daAlink_c::checkWaterInKandelaarOffset(f32 param_0) {
f32 tmp_65 = 65.0f; // tmp can be removed with literals
f32 base_y_pos;
if (checkModeFlg(0x40)) {
base_y_pos = mRightFootPos.y;
@@ -59,7 +61,7 @@ BOOL daAlink_c::checkWaterInKandelaarOffset(f32 param_0) {
base_y_pos = current.pos.y;
}
return param_0 > tmp_65 + base_y_pos;
return param_0 > 65.0f + base_y_pos;
}
void daAlink_c::checkWaterInKandelaar(f32 param_0) {
@@ -74,7 +76,7 @@ void daAlink_c::checkWaterInKandelaar(f32 param_0) {
}
void daAlink_c::offKandelaarModel() {
offNoResetFlg2(FLG2_UNK_10000001);
offNoResetFlg2(daPy_FLG2(FLG2_KANDELAAR_LIGHT_OFF | FLG2_UNK_1));
mZ2Link.setKanteraState(0);
}
@@ -111,7 +113,7 @@ int daAlink_c::kandelaarModelCallBack() {
mDoMtx_stack_c::multVec(&sp38, &sp38);
s16 var_r28 = cLib_minMaxLimit<s16>(cM_atan2s(-sp38.z, -sp38.y), -0x1800, 0x1800);
s16 var_r27 = cLib_minMaxLimit<s16>(cM_atan2s(sp38.x, JMAFastSqrt((sp38.y * sp38.y) + (sp38.z * sp38.z))), -0x1800, 0x1800);
s16 var_r27 = cLib_minMaxLimit<s16>(cM_atan2s(sp38.x, JMAFastSqrt(SQUARE(sp38.y) + SQUARE(sp38.z))), -0x1800, 0x1800);
mDoMtx_stack_c::transS(sp44);
if (mProcID != PROC_OPEN_TREASURE && (mProcID != PROC_GET_ITEM || mProcVar4.field_0x3010 == 0)) {
@@ -124,10 +126,10 @@ int daAlink_c::kandelaarModelCallBack() {
field_0x3618 = (mKandelaarFlamePos - field_0x3624) * 0.9f;
if (!checkEndResetFlg1(ERFLG1_UNK_8)) {
f32 temp_f31 = JMAFastSqrt((J3DSys::mCurrentMtx[0][0] * J3DSys::mCurrentMtx[0][0]) + (J3DSys::mCurrentMtx[1][0] * J3DSys::mCurrentMtx[1][0]) + (J3DSys::mCurrentMtx[2][0] * J3DSys::mCurrentMtx[2][0]));
f32 scale = JMAFastSqrt(SQUARE(J3DSys::mCurrentMtx[0][0]) + SQUARE(J3DSys::mCurrentMtx[1][0]) + SQUARE(J3DSys::mCurrentMtx[2][0]));
mDoMtx_stack_c::transS(J3DSys::mCurrentMtx[0][3], J3DSys::mCurrentMtx[1][3], J3DSys::mCurrentMtx[2][3]);
mDoMtx_stack_c::ZXYrotM(var_r28, var_r29, var_r27);
mDoMtx_stack_c::scaleM(temp_f31, temp_f31, temp_f31);
mDoMtx_stack_c::scaleM(scale, scale, scale);
mpKanteraModel->setAnmMtx(1, mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
@@ -136,7 +138,9 @@ int daAlink_c::kandelaarModelCallBack() {
return 1;
}
static int daAlink_kandelaarModelCallBack(J3DJoint* param_0, int param_1) {
static int daAlink_kandelaarModelCallBack(J3DJoint* i_joint, int param_1) {
UNUSED(i_joint);
daAlink_c* player_p = (daAlink_c*)j3dSys.getModel()->getUserArea();
if (param_1 == 0) {
@@ -147,7 +151,7 @@ static int daAlink_kandelaarModelCallBack(J3DJoint* param_0, int param_1) {
}
cXyz* daAlink_c::getKandelaarFlamePos() {
if ((!checkNoResetFlg2((daPy_FLG2)0x20001) && !checkEndResetFlg1(ERFLG1_UNK_4)) ||
if ((!checkNoResetFlg2(daPy_FLG2(FLG2_UNK_20000 | FLG2_UNK_1)) && !checkEndResetFlg1(ERFLG1_UNK_4)) ||
checkWolf() || !checkNoResetFlg1(FLG1_UNK_80))
{
return NULL;
@@ -157,7 +161,7 @@ cXyz* daAlink_c::getKandelaarFlamePos() {
}
BOOL daAlink_c::checkKandelaarEquipAnime() const {
return checkUpperAnime(0x264) || checkUpperAnime(0x268);
return checkUpperAnime(dRes_ID_ALANM_BCK_WAITHK_e) || checkUpperAnime(dRes_ID_ALANM_BCK_WAITK_e);
}
void daAlink_c::preKandelaarDraw() {
@@ -179,14 +183,14 @@ void daAlink_c::preKandelaarDraw() {
mDoLib_project(&mKandelaarFlamePos, &proj);
camera_class* camera_p = dComIfGp_getCamera(0);
f32 var_f3;
f32 trimHeight;
if (camera_p != NULL) {
var_f3 = camera_p->mCamera.TrimHeight();
trimHeight = camera_p->mCamera.TrimHeight();
} else {
var_f3 = 0.0f;
trimHeight = 0.0f;
}
if (proj.x > 0.0f && proj.x < FB_WIDTH && proj.y > var_f3 && proj.y < FB_HEIGHT - var_f3) {
if (proj.x > 0.0f && proj.x < FB_WIDTH && proj.y > trimHeight && proj.y < FB_HEIGHT - trimHeight) {
dComIfGd_peekZ(proj.x, proj.y, &field_0x32c8);
} else {
field_0x32c8 = 0;
@@ -210,7 +214,7 @@ void daAlink_c::setKandelaarModel() {
if (!checkNoResetFlg2(FLG2_UNK_1)) {
onNoResetFlg2(FLG2_UNK_1);
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(field_0x30c0), &mKandelaarFlamePos);
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(mLeftItemJntNo), &mKandelaarFlamePos);
mKandelaarFlamePos.y -= 30.0f;
field_0x3630 = field_0x3624;
@@ -227,7 +231,6 @@ void daAlink_c::setKandelaarModel() {
mZ2Link.setKanteraState(1);
}
void daAlink_c::resetOilBottleModel() {
deleteEquipItem(FALSE, TRUE);
@@ -270,7 +273,7 @@ int daAlink_c::commonKandelaarPour(int param_0) {
current_anm = mUnderAnmHeap[0].getIdx();
}
onNoResetFlg2(FLG2_UNK_10000000);
onNoResetFlg2(FLG2_KANDELAAR_LIGHT_OFF);
if (current_anm == getMainBckData(ANM_OIL_BOTTLE_POUR_START)->m_underID) {
if (checkAnmEnd(frameCtrl_p)) {
@@ -310,14 +313,13 @@ int daAlink_c::commonKandelaarPour(int param_0) {
resetOilBottleModel();
resetSpecialEvent();
offNoResetFlg2(FLG2_UNK_10000000);
offNoResetFlg2(FLG2_KANDELAAR_LIGHT_OFF);
return 1;
}
return 0;
}
void daAlink_c::initKandelaarSwing() {
if (mEquipItem == fpcNm_ITEM_KANTERA) {
if (dComIfGs_getOil() != 0) {
@@ -328,19 +330,19 @@ void daAlink_c::initKandelaarSwing() {
}
voiceStart(Z2SE_AL_V_SWING_BOTTLE);
field_0xFB8.ResetAtHit();
mAtSph.ResetAtHit();
if (!checkEventRun()) {
dComIfGp_setItemOilCount(-mpHIO->mItem.mLantern.m.mShakeOilLoss);
}
field_0xFB8.OffAtSetBit();
field_0xFB8.SetR(50.0f);
field_0xFB8.SetAtType(AT_TYPE_LANTERN_SWING);
field_0xFB8.SetAtHitMark(0);
field_0xFB8.SetAtSe(dCcD_SE_NONE);
field_0xFB8.SetAtAtp(0);
field_0xFB8.SetAtMtrl(dCcD_MTRL_FIRE);
mAtSph.OffAtSetBit();
mAtSph.SetR(50.0f);
mAtSph.SetAtType(AT_TYPE_LANTERN_SWING);
mAtSph.SetAtHitMark(0);
mAtSph.SetAtSe(dCcD_SE_NONE);
mAtSph.SetAtAtp(0);
mAtSph.SetAtMtrl(dCcD_MTRL_FIRE);
}
int daAlink_c::procKandelaarSwingInit() {
@@ -383,17 +385,16 @@ int daAlink_c::procKandelaarSwingInit() {
return 1;
}
int daAlink_c::procKandelaarSwing() {
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
if (frameCtrl_p->checkAnmEnd()) {
if (mDemo.getDemoMode() == 0x27) {
if (checkAnmEnd(frameCtrl_p)) {
if (mDemo.getDemoMode() == daPy_demo_c::DEMO_KANDELAAR_SWING_e) {
dComIfGp_evmng_cutEnd(mAlinkStaffId);
} else {
checkNextAction(0);
}
} else if (frameCtrl_p->getFrame() > field_0x3478 && mDemo.getDemoMode() != 0x27) {
} else if (frameCtrl_p->getFrame() > field_0x3478 && mDemo.getDemoMode() != daPy_demo_c::DEMO_KANDELAAR_SWING_e) {
onModeFlg(4);
checkNextAction(1);
}
@@ -402,7 +403,7 @@ int daAlink_c::procKandelaarSwing() {
}
int daAlink_c::procKandelaarPourInit() {
if (!dComIfGp_event_compulsory(this, 0, 0xFBFF)) {
if (!dComIfGp_event_compulsory(this, NULL, 0xFBFF)) {
return 0;
}
+45 -38
View File
@@ -63,38 +63,39 @@ int daAlink_c::checkSubjectAction() {
return 0;
}
s16 daAlink_c::checkBodyAngleX(s16 param_0) {
s16 daAlink_c::checkBodyAngleX(s16 i_angle) {
if (checkWolf() || mProcID == PROC_PEEP_SUBJECTIVITY || mProcID == PROC_HOOKSHOT_WALL_SHOOT) {
return param_0;
return i_angle;
}
Vec sp2C = { 0.0f, 0.0f, 0.0f };
sp2C.y = 0.5f * field_0x598;
f32 var_f31 = 0.5f * mHeight;
sp2C.y = var_f31;
cXyz sp20;
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(1), &sp20);
cXyz sp14;
cXyz backbone1_pos;
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(1), &backbone1_pos);
cXyz check_pos;
if (param_0 >= 0) {
if (i_angle >= 0) {
sp2C.z = 25.0f;
} else {
sp2C.z = -25.0f;
}
mDoMtx_stack_c::transS(sp20);
mDoMtx_stack_c::transS(backbone1_pos);
concatMagneBootMtx();
mDoMtx_stack_c::ZXYrotM(param_0, shape_angle.y, 0);
mDoMtx_stack_c::multVec(&sp2C, &sp14);
mDoMtx_stack_c::ZXYrotM(i_angle, shape_angle.y, 0);
mDoMtx_stack_c::multVec(&sp2C, &check_pos);
if (commonLineCheck(&sp20, &sp14)) {
cXyz sp8 = sp14 - mLinkLinChk.GetCross();
multVecMagneBootInvMtx(&sp8);
if (commonLineCheck(&backbone1_pos, &check_pos)) {
cXyz dist = check_pos - mLinkLinChk.GetCross();
multVecMagneBootInvMtx(&dist);
current.pos.x -= sp8.x;
current.pos.z -= sp8.z;
current.pos.x -= dist.x;
current.pos.z -= dist.z;
}
return param_0;
return i_angle;
}
BOOL daAlink_c::setBodyAngleToCamera() {
@@ -105,7 +106,7 @@ BOOL daAlink_c::setBodyAngleToCamera() {
s16 sp8;
if (checkInputOnR()) {
f32 var_f31 = 512.0f * field_0x33ac * field_0x33ac;
f32 var_f31 = 512.0f * mMoveValue * mMoveValue;
if (checkWolfEyeUp()) {
var_f31 *= 0.6f;
}
@@ -160,11 +161,11 @@ BOOL daAlink_c::subjectCancelTrigger() {
return false;
}
int daAlink_c::checkSubjectEnd(BOOL i_playSound) {
setDoStatus(0x12);
BOOL daAlink_c::checkSubjectEnd(BOOL i_isPlaySe) {
setDoStatus(BUTTON_STATUS_BACK);
if (checkEventRun() || checkEquipAnime() || doTrigger() || checkSetItemTrigger(fpcNm_ITEM_HAWK_EYE) || subjectCancelTrigger() || checkEndResetFlg0(ERFLG0_FORCE_SUBJECT_CANCEL) || dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x2000)) {
if (i_playSound) {
if (i_isPlaySe) {
seStartSystem(Z2SE_SUBJ_VIEW_OUT);
}
@@ -180,7 +181,8 @@ void daAlink_c::searchPeepObj(fopAc_ac_c* i_actor, void* i_data) {
f32 var_f31 = current.pos.abs2(i_actor->current.pos);
if (var_f31 < field_0x3478) {
field_0x3478 = var_f31;
*(fopAc_ac_c**)i_data = i_actor;
fopAc_ac_c** var_r29 = (fopAc_ac_c**)i_data;
*var_r29 = i_actor;
}
}
}
@@ -195,7 +197,7 @@ int daAlink_c::procCoSubjectivityInit() {
mNormalSpeed = 0.0f;
setSubjectMode();
field_0x2fe6 = shape_angle.y;
mPrevAngleY = shape_angle.y;
if (checkWolf()) {
setSingleAnimeWolfBaseSpeed(WANM_WAIT, 0.0f, 3.0f);
@@ -310,7 +312,7 @@ int daAlink_c::procCoPeepSubjectivity() {
mPeepExitID = peep->getSceneListID();
}
if (dComIfGp_event_compulsory(this, 0, 0xFFFF)) {
if (dComIfGp_event_compulsory(this, NULL, 0xFFFF)) {
startPeepChange();
}
}
@@ -319,45 +321,45 @@ int daAlink_c::procCoPeepSubjectivity() {
}
u32 daAlink_c::checkBoardRide() const {
return mRideStatus == 4;
return mRideStatus == RIDETYPE_BOARD;
}
u32 daAlink_c::checkCanoeRide() const {
return mRideStatus == 3;
return mRideStatus == RIDETYPE_CANOE;
}
u32 daAlink_c::checkHorseRide() const {
return mRideStatus == 1;
return mRideStatus == RIDETYPE_HORSE;
}
MtxP daAlink_c::getLeftItemMatrix() {
return mpLinkModel->getAnmMtx(field_0x30c0);
return mpLinkModel->getAnmMtx(mLeftItemJntNo);
}
u32 daAlink_c::checkBoarRide() const {
return mRideStatus == 2;
return mRideStatus == RIDETYPE_BOAR;
}
u32 daAlink_c::checkSpinnerRide() const {
return mRideStatus == 5;
return mRideStatus == RIDETYPE_SPINNER;
}
MtxP daAlink_c::getLeftHandMatrix() {
return mpLinkModel->getAnmMtx(field_0x30b8);
return mpLinkModel->getAnmMtx(mLeftHandJntNo);
}
MtxP daAlink_c::getRightHandMatrix() {
return mpLinkModel->getAnmMtx(field_0x30ba);
return mpLinkModel->getAnmMtx(mRightHandJntNo);
}
void daAlink_c::onSceneChangeArea(u8 exitID, u8 exitDirection, fopAc_ac_c* scexAc) {
mExitID = exitID;
mExitDirection = exitDirection;
mpScnChg = (daScex_c*)scexAc;
void daAlink_c::onSceneChangeArea(u8 i_exitID, u8 i_exitDirection, fopAc_ac_c* i_scexAc) {
mExitID = i_exitID;
mExitDirection = i_exitDirection;
mpScnChg = (daScex_c*)i_scexAc;
}
MtxP daAlink_c::getRightItemMatrix() {
return mpLinkModel->getAnmMtx(field_0x30c2);
return mpLinkModel->getAnmMtx(mRightItemJntNo);
}
u32 daAlink_c::checkPlayerNoDraw() {
@@ -366,5 +368,10 @@ u32 daAlink_c::checkPlayerNoDraw() {
}
daAlink_c::daAlink_c()
: mAnmHeap3(0), mAnmHeap4(0), mFaceBtpHeap(0x800), mFaceBtkHeap(0x400), mFaceBckHeap(0xC00),
mAnmHeap9(0x800) {}
: mAnmHeap3(0),
mAnmHeap4(0),
mFaceBtpHeap(0x800),
mFaceBtkHeap(0x400),
mFaceBckHeap(0xC00),
mAnmHeap9(0x800)
{}
+12 -13
View File
@@ -84,7 +84,6 @@ bool daAlink_c::checkSpinnerTriggerAttack() {
return false;
}
void daAlink_c::setSpinnerSyncPos() {
daSpinner_c* spinner = (daSpinner_c*)mRideAcKeep.getActor();
@@ -150,8 +149,8 @@ int daAlink_c::procSpinnerReady() {
return 1;
}
void daAlink_c::setSpinnerStatus(u8 status, u8 flag) {
dComIfGp_setDoStatus(status, flag);
void daAlink_c::setSpinnerStatus(u8 i_status, u8 i_flag) {
dComIfGp_setDoStatus(i_status, i_flag);
}
int daAlink_c::procSpinnerWaitInit() {
@@ -159,7 +158,7 @@ int daAlink_c::procSpinnerWaitInit() {
return 0;
}
mRideStatus = 5;
mRideStatus = RIDETYPE_SPINNER;
setBgCheckParam();
setSingleAnimeBaseSpeed(ANM_RIDE_CROUCH, mpHIO->mItem.mBoard.m.mSitAnmSpeed, 4.0f);
speed.y = 0.0f;
@@ -177,12 +176,12 @@ int daAlink_c::procSpinnerWaitInit() {
return 1;
}
int daAlink_c::procSpinnerWait() {
daSpinner_c* spinner = (daSpinner_c*)mRideAcKeep.getActor();
if (spinner == NULL || spinner->getDeleteFlg() || checkWindSpeedOnXZ() ||
checkEndResetFlg1(ERFLG1_UNK_1) || checkEndResetFlg0(ERFLG0_UNK_2)) {
checkEndResetFlg1(ERFLG1_NS_SCREAM) || checkEndResetFlg0(ERFLG0_FORCE_WOLF_CHANGE))
{
mNormalSpeed = 0.0f;
setJumpMode();
return procFallInit(1, mpHIO->mAutoJump.m.mFallInterpolation);
@@ -200,7 +199,7 @@ int daAlink_c::procSpinnerWait() {
spinner->setMove(mNormalSpeed, getSpinnerRideMoveTime());
} else if (checkInputOnR()) {
int direction = getDirectionFromAngle(mStickAngle);
s16 angle = field_0x33ac * 384.0f * field_0x33ac;
s16 angle = mMoveValue * 384.0f * mMoveValue;
if (direction == DIR_LEFT) {
shape_angle.y += angle;
@@ -226,10 +225,10 @@ int daAlink_c::procSpinnerWait() {
if (spinner->checkPathMoveNow() == NULL) {
seStartOnlyReverbLevel(Z2SE_AL_SPINNER_RIDE);
setSpinnerStatus(ACTION_STR_ATTACK, ACTION_FLG_DEFAULT);
setSpinnerStatus(BUTTON_STATUS_ATTACK, BUTTON_STATUS_FLAG_NONE);
} else {
seStartOnlyReverbLevel(Z2SE_AL_SPINNER_RAIL);
setSpinnerStatus(ACTION_STR_JUMP2, ACTION_FLG_DEFAULT);
setSpinnerStatus(BUTTON_STATUS_UNK_101, BUTTON_STATUS_FLAG_NONE);
}
mNormalSpeed = spinner->speedF;
@@ -237,7 +236,7 @@ int daAlink_c::procSpinnerWait() {
if (spinner->checkSpinnerTagIntoIncRot()) {
mProcVar5.field_0x3012 = 1;
setSpinnerStatus(ACTION_STR_SPIN, ACTION_FLG_CONTINUATION);
setSpinnerStatus(BUTTON_STATUS_SPIN, BUTTON_STATUS_FLAG_CONTINUATION);
if (field_0x3198 != ANM_RIDE_KICK && field_0x2060->getOldFrameRate() < 0.01f) {
setSingleAnimeBaseSpeed(ANM_RIDE_CROUCH, mpHIO->mItem.mBoard.m.mSitAnmSpeed,
@@ -247,9 +246,9 @@ int daAlink_c::procSpinnerWait() {
}
} else if (spinner->checkSpinnerTagInto()) {
if (mProcVar5.field_0x3012 != 0) {
setSpinnerStatus(ACTION_STR_SPIN, ACTION_FLG_CONTINUATION);
setSpinnerStatus(BUTTON_STATUS_SPIN, BUTTON_STATUS_FLAG_CONTINUATION);
} else {
setSpinnerStatus(ACTION_STR_SPIN, ACTION_FLG_DEFAULT);
setSpinnerStatus(BUTTON_STATUS_SPIN, BUTTON_STATUS_FLAG_NONE);
}
if ((field_0x3198 == ANM_RIDE_KICK && field_0x2060->getOldFrameRate() < 0.01f) ||
@@ -276,7 +275,7 @@ int daAlink_c::procSpinnerWait() {
mpHIO->mItem.mBoard.m.mAirborneAnm.mEndFrame, -1.0f);
mProcVar4.field_0x3010 = 1;
}
} else if ((field_0x3198 == ANM_RIDE_JUMP_LAND && frameCtrl->checkAnmEnd()) ||
} else if ((field_0x3198 == ANM_RIDE_JUMP_LAND && checkAnmEnd(frameCtrl)) ||
(field_0x3198 != ANM_RIDE_JUMP_LAND && field_0x3198 != ANM_RIDE_CROUCH)) {
setSingleAnimeBaseSpeed(ANM_RIDE_CROUCH, mpHIO->mItem.mBoard.m.mSitAnmSpeed,
mpHIO->mItem.mBoard.m.mSitInterpolation);
+149 -142
View File
@@ -17,7 +17,7 @@ BOOL daAlink_c::checkSumouVsActor() {
return false;
}
if (mSpecialMode == 0xD || mSpecialMode == 0xB || mSpecialMode == 0xC || mSpecialMode == 0xE) {
if (mMode == 0xD || mMode == 0xB || mMode == 0xC || mMode == 0xE) {
procSumouWinLoseInit();
return false;
}
@@ -27,15 +27,15 @@ BOOL daAlink_c::checkSumouVsActor() {
void daAlink_c::cancelSumouMode() {
mCargoCarryAcKeep.clearData();
mSpecialMode = 0;
mMode = 0;
}
BOOL daAlink_c::sumouPunchTrigger() {
return itemTriggerCheck(BTN_B);
return swordTrigger();
}
void daAlink_c::setSumouPunchStatus() {
setBStatus(ACTION_STR_SLAP);
setBStatus(BUTTON_STATUS_SLAP);
}
int daAlink_c::procSumouReadyInit() {
@@ -49,7 +49,7 @@ int daAlink_c::procSumouReadyInit() {
field_0x3588 = l_waitBaseAnime;
field_0x34d4 = field_0x3588;
field_0x2f99 = 4;
mSpecialMode = 1;
mMode = 1;
mProcVar2.field_0x300c = 0;
mProcVar3.field_0x300e = 0;
deleteEquipItem(FALSE, TRUE);
@@ -68,9 +68,9 @@ int daAlink_c::procSumouReady() {
return 1;
}
if (mSpecialMode == 2 || mSpecialMode == 3 || mSpecialMode == 4) {
if (mMode == 2 || mMode == 3 || mMode == 4) {
setSumouPunchStatus();
setDoStatusEmphasys(0x15);
setDoStatusEmphasys(BUTTON_STATUS_GRAB);
dComIfGp_setAdvanceDirection(5);
if (doTrigger()) {
@@ -85,20 +85,20 @@ int daAlink_c::procSumouReady() {
if (mUnderAnmHeap[0].getIdx() == getMainBckData(ANM_SUMOU_HAKEYOI)->m_underID &&
mUnderFrameCtrl[0].checkPass(7.0f))
{
field_0x2f92 = 0xFE;
field_0x2f93 = 0xFE;
mLeftHandIndex = 0xFE;
mRightHandIndex = 0xFE;
}
if (mSpecialMode == 3) {
if (mMode == 3) {
setSingleAnimeBase(ANM_SUMOU_HAKEYOI);
field_0x2f99 = 12;
mSpecialMode = 4;
mMode = 4;
dComIfGp_clearPlayerStatus0(0, 0x2000);
} else if (checkAnmEnd(mUnderFrameCtrl)) {
if (checkInputOnR()) {
s16 temp_r29 = (s16)(field_0x2fe2 - shape_angle.y);
s16 temp_r29 = (s16)(mMoveAngle - shape_angle.y);
int var_r30 = abs(temp_r29);
cLib_distanceAngleS(field_0x2fe2, shape_angle.y);
cLib_distanceAngleS(mMoveAngle, shape_angle.y);
if (var_r30 > 0x800 && var_r30 < 0x7800) {
mNormalSpeed = 1.0f;
@@ -111,10 +111,9 @@ int daAlink_c::procSumouReady() {
}
}
if (mSpecialMode == 0x1C || mSpecialMode == 0x1B || mProcVar2.field_0x300c != 0 ||
if (mMode == 0x1C || mMode == 0x1B || mProcVar2.field_0x300c != 0 ||
mProcVar3.field_0x300e != 0 ||
(static_cast<daNpcWrestler_c*>(mCargoCarryAcKeep.getActor())->getWrestlerAction() ==
3 &&
(static_cast<daNpcWrestler_c*>(mCargoCarryAcKeep.getActor())->getWrestlerAction() == 3 &&
!checkZeroSpeedF()))
{
procSumouActionInit(mProcVar2.field_0x300c, mProcVar3.field_0x300e, 0);
@@ -126,7 +125,6 @@ int daAlink_c::procSumouReady() {
return 1;
}
int daAlink_c::procSumouMoveInit() {
daNpcWrestler_c* wrestler_p = (daNpcWrestler_c*)mCargoCarryAcKeep.getActor();
commonProcInit(PROC_SUMOU_MOVE);
@@ -135,30 +133,36 @@ int daAlink_c::procSumouMoveInit() {
field_0x3478 = 1000.0f;
daAlink_ANM anm;
if (mSpecialMode == 15 || mSpecialMode == 16) {
if (wrestler_p->getWrestlerType() != 0) {
anm = ANM_SUMOU_TACKLE_WAIT_GORON;
} else {
if (mMode == 15 || mMode == 16) {
#if VERSION == VERSION_SHIELD_DEBUG // probably a fakematch
if (wrestler_p->getWrestlerType() == 0) {
anm = ANM_SUMOU_TACKLE_WAIT;
} else {
anm = ANM_SUMOU_TACKLE_WAIT_GORON;
}
#else
anm = wrestler_p->getWrestlerType() != 0 ? ANM_SUMOU_TACKLE_WAIT_GORON : ANM_SUMOU_TACKLE_WAIT;
#endif
setSingleAnimeBase(anm);
mSpeedModifier = 1.0f;
mSpecialMode = 7;
mMode = 7;
mProcVar2.field_0x300c = 0xFFFF;
mProcVar0.field_0x3008 = 10;
field_0x3478 = 5.0f;
field_0x32cc = Z2SE_AL_V_SUMO_PUSH;
} else {
if (wrestler_p->getWrestlerType() != 0) {
anm = ANM_SUMOU_TACKLE_STAGGER_GORON;
} else {
#if VERSION == VERSION_SHIELD_DEBUG // probably a fakematch
if (wrestler_p->getWrestlerType() == 0) {
anm = ANM_SUMOU_TACKLE_STAGGER;
} else {
anm = ANM_SUMOU_TACKLE_STAGGER_GORON;
}
#else
anm = wrestler_p->getWrestlerType() != 0 ? ANM_SUMOU_TACKLE_STAGGER_GORON : ANM_SUMOU_TACKLE_STAGGER;
#endif
setSingleAnimeBase(anm);
mSpeedModifier = -1.0f;
mSpecialMode = 8;
mMode = 8;
mProcVar2.field_0x300c = 10;
mProcVar0.field_0x3008 = 15;
field_0x2f9d = 0x60;
@@ -174,7 +178,6 @@ int daAlink_c::procSumouMoveInit() {
return 1;
}
int daAlink_c::procSumouMove() {
field_0x2f99 = 4;
@@ -190,7 +193,7 @@ int daAlink_c::procSumouMove() {
voiceStart(field_0x32cc);
}
if (mSpecialMode == 9 || mSpecialMode == 10) {
if (mMode == 9 || mMode == 10) {
if (mProcVar1.field_0x300a != 0) {
mProcVar1.field_0x300a--;
}
@@ -202,7 +205,7 @@ int daAlink_c::procSumouMove() {
}
f32 var_f1;
if (mSpecialMode == 10 && mProcVar1.field_0x300a == 0) {
if (mMode == 10 && mProcVar1.field_0x300a == 0) {
var_f1 = 1.5f;
} else {
var_f1 = 0.2f;
@@ -210,11 +213,11 @@ int daAlink_c::procSumouMove() {
cLib_chaseF(&sp8, var_f1, 0.3f);
frameCtrl_p->setRate(sp8);
} else if (mSpecialMode == 9) {
} else if (mMode == 9) {
cLib_chaseF(&sp8, 1.5f, 0.3f);
} else {
setSingleAnimeBase(ANM_SUMOU_PUSH_BACK);
mSpecialMode = 0x23;
mMode = 0x23;
mSpeedModifier = 0.0f;
field_0x3478 = 13.0f;
field_0x32cc = Z2SE_AL_V_SUMO_HOLD_BACK;
@@ -240,26 +243,30 @@ int daAlink_c::procSumouMove() {
dMeter2Info_onBlinkButton(1);
if (mSpecialMode == 0x24 || (mSpeedModifier < 0.0f && mProcVar2.field_0x300c == 0)) {
if (mMode == 0x24 || (mSpeedModifier < 0.0f && mProcVar2.field_0x300c == 0)) {
mProcVar3.field_0x300e = 1;
field_0x2f99 = 12;
if (mSpeedModifier > 0.0f) {
daAlink_ANM anm;
if (wrestler_p->getWrestlerType() != 0) {
anm = ANM_SUMOU_PULL_BACK_GORON;
} else {
#if VERSION == VERSION_SHIELD_DEBUG // probably a fakematch
if (wrestler_p->getWrestlerType() == 0) {
anm = ANM_SUMOU_PULL_BACK;
} else {
anm = ANM_SUMOU_PULL_BACK_GORON;
}
#else
anm = wrestler_p->getWrestlerType() != 0 ? ANM_SUMOU_PULL_BACK_GORON : ANM_SUMOU_PULL_BACK;
#endif
setSingleAnimeBase(anm);
mSpecialMode = 0x24;
mMode = 0x24;
field_0x3478 = 13.0f;
field_0x32cc = Z2SE_AL_V_SUMO_PUSHED_BACK;
field_0x3198 = anm;
} else {
setSingleAnimeBase(ANM_SUMOU_PUSH_BACK);
mSpecialMode = 0x23;
mMode = 0x23;
field_0x3478 = 13.0f;
field_0x32cc = Z2SE_AL_V_SUMO_HOLD_BACK;
field_0x3198 = ANM_SUMOU_PUSH_BACK;
@@ -272,7 +279,7 @@ int daAlink_c::procSumouMove() {
if (mSpeedModifier > 0.0f && checkInputOnR()) {
int direction = getDirectionFromAngle(mStickAngle);
if (direction == DIR_LEFT || direction == DIR_RIGHT) {
var_r31 = field_0x33ac * (mpHIO->mPushpull.m.mSumoRotationAngle * field_0x33ac);
var_r31 = mMoveValue * (mpHIO->mPushpull.m.mSumoRotationAngle * mMoveValue);
if (direction == DIR_RIGHT) {
var_r31 = -var_r31;
@@ -311,18 +318,17 @@ int daAlink_c::procSumouMove() {
return 1;
}
int daAlink_c::procSumouSideMoveInit() {
commonProcInit(PROC_SUMOU_SIDE_MOVE);
mSpecialMode = 0x16;
mMode = 0x16;
field_0x2f98 = 3;
current.angle.y = shape_angle.y + -0x4000;
field_0x594 = mpHIO->mAtnMove.m.mMaxSpeed;
mMaxSpeed = mpHIO->mAtnMove.m.mMaxSpeed;
setSingleAnimeBase(ANM_SUMOU_FIGHT_WAIT);
field_0x3198 = 0x141;
setSumouPunchStatus();
setDoStatusEmphasys(0x15);
setDoStatusEmphasys(BUTTON_STATUS_GRAB);
dComIfGp_setAdvanceDirection(5);
field_0x2f99 = 12;
@@ -353,8 +359,8 @@ int daAlink_c::procSumouSideMove() {
current.angle.y = shape_angle.y + 0x4000;
}
int temp_r30_2 = cLib_distanceAngleS(field_0x2fe2, shape_angle.y);
if (mSpecialMode == 0x1C || mSpecialMode == 0x1B || doTrigger() || sumouPunchTrigger() ||
int temp_r30_2 = cLib_distanceAngleS(mMoveAngle, shape_angle.y);
if (mMode == 0x1C || mMode == 0x1B || doTrigger() || sumouPunchTrigger() ||
(static_cast<daNpcWrestler_c*>(mCargoCarryAcKeep.getActor())->getWrestlerAction() == 3 &&
!checkZeroSpeedF()))
{
@@ -362,12 +368,12 @@ int daAlink_c::procSumouSideMove() {
}
setSumouPunchStatus();
setDoStatusEmphasys(0x15);
setDoStatusEmphasys(BUTTON_STATUS_GRAB);
dComIfGp_setAdvanceDirection(5);
f32 var_f1;
if (checkInputOnR() && temp_r30_2 > 0x800 && temp_r30_2 < 0x7800) {
if (abs((s16)(field_0x2fe2 - current.angle.y)) > 0x4000) {
if (abs((s16)(mMoveAngle - current.angle.y)) > 0x4000) {
current.angle.y += 0x8000;
mNormalSpeed *= -1.0f;
@@ -378,8 +384,8 @@ int daAlink_c::procSumouSideMove() {
}
}
if (field_0x33ac > (1.0f - fabsf(mNormalSpeed / field_0x594)) * 0.3f) {
var_f1 = mpHIO->mAtnMove.m.mAcceleration * field_0x33ac;
if (mMoveValue > (1.0f - fabsf(mNormalSpeed / mMaxSpeed)) * 0.3f) {
var_f1 = mpHIO->mAtnMove.m.mAcceleration * mMoveValue;
} else {
var_f1 = 0.0f;
}
@@ -391,7 +397,7 @@ int daAlink_c::procSumouSideMove() {
if (checkZeroSpeedF()) {
onModeFlg(1);
mSpecialMode = 0x16;
mMode = 0x16;
field_0x2f98 = 3;
current.angle.y = shape_angle.y - 0x4000;
@@ -417,13 +423,15 @@ int daAlink_c::procSumouSideMove() {
mSpeedModifier = 1.0f;
}
daPy_frameCtrl_c* framectrl = mUnderFrameCtrl;
if (field_0x2f98 == 3) {
mSpecialMode = 0x18;
mMode = 0x18;
} else {
mSpecialMode = 0x17;
mMode = 0x17;
}
mUnderFrameCtrl[0].setRate(mNormalSpeed / field_0x594);
framectrl->setRate(mNormalSpeed / mMaxSpeed);
initBasAnime();
field_0x2f9d = 0x60;
}
@@ -431,8 +439,8 @@ int daAlink_c::procSumouSideMove() {
return 1;
}
int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int unused) {
int daAlink_c::procSumouActionInit(BOOL i_isDoTrigger, BOOL i_isPunchTrigger, int unused) {
UNUSED(unused);
commonProcInit(PROC_SUMOU_ACTION);
daNpcWrestler_c* wrestler_p = (daNpcWrestler_c*)mCargoCarryAcKeep.getActor();
@@ -440,100 +448,94 @@ int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int un
mProcVar5.field_0x3012 = 0;
daAlink_ANM anm;
if (mSpecialMode == 0x21) {
mSpecialMode = 0x22;
if (mMode == 0x21) {
mMode = 0x22;
anm = ANM_SUMOU_PUNCH_SHOCK;
} else if (mSpecialMode == 0x1C) {
i_doTrigger = FALSE;
i_punchTrigger = FALSE;
mSpecialMode = 0x1E;
} else if (mMode == 0x1C) {
i_isDoTrigger = FALSE;
i_isPunchTrigger = FALSE;
mMode = 0x1E;
if (!checkZeroSpeedF()) {
daAlink_ANM var_r0;
if (field_0x2f98 == 2) {
var_r0 = ANM_SUMOU_FIGHT_STEP_LEFT;
anm = ANM_SUMOU_FIGHT_STEP_LEFT;
} else {
var_r0 = ANM_SUMOU_FIGHT_STEP_RIGHT;
anm = ANM_SUMOU_FIGHT_STEP_RIGHT;
}
anm = var_r0;
mProcVar5.field_0x3012 = 1;
} else {
anm = ANM_SUMOU_PUNCH_SHOCK;
}
} else if (mSpecialMode == 0x1B) {
i_doTrigger = FALSE;
i_punchTrigger = FALSE;
mSpecialMode = 0x1D;
} else if (mMode == 0x1B) {
i_isDoTrigger = FALSE;
i_isPunchTrigger = FALSE;
mMode = 0x1D;
anm = ANM_SUMOU_TACKLE_SHOCK;
} else if (wrestler_action == 2) {
if (i_doTrigger) {
mSpecialMode = 0x10;
if (i_isDoTrigger) {
mMode = 0x10;
anm = ANM_SUMOU_DODGE_TACKLE;
} else if (i_punchTrigger) {
mSpecialMode = 0x15;
} else if (i_isPunchTrigger) {
mMode = 0x15;
anm = ANM_SUMOU_PUNCH_MISS_SHOCK_RETURN;
} else {
mSpecialMode = 0x1E;
mMode = 0x1E;
if (!checkZeroSpeedF()) {
daAlink_ANM var_r0_2;
if (field_0x2f98 == 2) {
var_r0_2 = ANM_SUMOU_FIGHT_STEP_LEFT;
anm = ANM_SUMOU_FIGHT_STEP_LEFT;
} else {
var_r0_2 = ANM_SUMOU_FIGHT_STEP_RIGHT;
anm = ANM_SUMOU_FIGHT_STEP_RIGHT;
}
anm = var_r0_2;
mProcVar5.field_0x3012 = 1;
} else {
anm = ANM_SUMOU_PUNCH_SHOCK;
}
}
} else if (wrestler_action == 3) {
if (i_doTrigger) {
mSpecialMode = 0x12;
if (i_isDoTrigger) {
mMode = 0x12;
anm = ANM_SUMOU_TACKLE_SHOCK_RETURN;
} else if (i_punchTrigger) {
mSpecialMode = 0x14;
} else if (i_isPunchTrigger) {
mMode = 0x14;
anm = ANM_SUMOU_PUNCH_MISS_SHOCK;
} else if (!checkZeroSpeedF()) {
if (field_0x2f98 == 3) {
mSpecialMode = 0x1A;
mMode = 0x1A;
anm = ANM_SUMOU_FIGHT_STEP_RIGHT;
} else {
mSpecialMode = 0x19;
mMode = 0x19;
anm = ANM_SUMOU_FIGHT_STEP_LEFT;
}
} else {
mSpecialMode = 0x1D;
mMode = 0x1D;
anm = ANM_SUMOU_TACKLE_SHOCK;
}
} else if (wrestler_action == 1) {
if (i_doTrigger) {
mSpecialMode = 0x11;
if (i_isDoTrigger) {
mMode = 0x11;
anm = ANM_SUMOU_TACKLE_MISS;
} else {
mSpecialMode = 0x13;
mMode = 0x13;
anm = ANM_SUMOU_PUNCH;
}
} else if (wrestler_p->getWrestlerType() != 0 && !checkEquipHeavyBoots()) {
if (i_doTrigger) {
mSpecialMode = 0x12;
if (i_isDoTrigger) {
mMode = 0x12;
anm = ANM_SUMOU_TACKLE_SHOCK_RETURN;
} else {
mSpecialMode = 0x15;
mMode = 0x15;
anm = ANM_SUMOU_PUNCH_MISS_SHOCK_RETURN;
}
} else if (i_doTrigger) {
mSpecialMode = 0xF;
} else if (i_isDoTrigger) {
mMode = 0xF;
if (wrestler_p->getWrestlerType() == 0) {
anm = ANM_SUMOU_TACKLE;
} else {
anm = ANM_SUMOU_TACKLE_GORON;
}
} else {
mSpecialMode = 0x13;
mMode = 0x13;
anm = ANM_SUMOU_PUNCH;
}
@@ -541,19 +543,19 @@ int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int un
mDoMtx_stack_c::YrotM(shape_angle.y);
mProcVar3.field_0x300e = 0x82;
if (mSpecialMode == 0x19) {
if (mMode == 0x19) {
dComIfGp_setAdvanceDirection(1);
mProcVar4.field_0x3010 = shape_angle.y - 0x2800;
field_0x2f98 = 2;
} else if (mSpecialMode == 0x1A) {
} else if (mMode == 0x1A) {
field_0x2f98 = 3;
dComIfGp_setAdvanceDirection(4);
mProcVar4.field_0x3010 = shape_angle.y + 0x2800;
} else if (i_doTrigger) {
setDoStatusEmphasys(0x15);
} else if (i_isDoTrigger) {
setDoStatusEmphasys(BUTTON_STATUS_GRAB);
mProcVar3.field_0x300e = 0x15;
field_0x2f98 = 4;
} else if (i_punchTrigger) {
} else if (i_isPunchTrigger) {
setSumouPunchStatus();
mProcVar3.field_0x300e = 0x44;
field_0x2f98 = 4;
@@ -567,13 +569,13 @@ int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int un
field_0x2f98 = 4;
}
f32 var_f31;
f32 anm_frame;
if ((anm == ANM_SUMOU_FIGHT_STEP_RIGHT || anm == ANM_SUMOU_FIGHT_STEP_LEFT) &&
mUnderAnmHeap[0].getIdx() != (getMainBckData(anm)->m_underID & 0xFFF))
{
var_f31 = mUnderFrameCtrl[0].getFrame();
anm_frame = mUnderFrameCtrl[0].getFrame();
} else {
var_f31 = 0.0f;
anm_frame = 0.0f;
}
mProcVar2.field_0x300c = 0;
@@ -587,8 +589,8 @@ int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int un
}
setSingleAnime(anm, 1.0f, 0.0f, end_frame, 3.0f);
mUnderFrameCtrl[0].setFrame(var_f31);
getNowAnmPackUnder(UNDER_0)->setFrame(var_f31);
mUnderFrameCtrl[0].setFrame(anm_frame);
getNowAnmPackUnder(UNDER_0)->setFrame(anm_frame);
cLib_addCalcAngleS(&shape_angle.y,
cLib_targetAngleY(&current.pos, &mCargoCarryAcKeep.getActor()->current.pos),
@@ -634,7 +636,6 @@ int daAlink_c::procSumouActionInit(BOOL i_doTrigger, BOOL i_punchTrigger, int un
return 1;
}
int daAlink_c::procSumouAction() {
field_0x2f99 = 4;
@@ -650,11 +651,11 @@ int daAlink_c::procSumouAction() {
mProcVar2.field_0x300c++;
if (mSpecialMode == 0x1C || mSpecialMode == 0x1B) {
if (mMode == 0x1C || mMode == 0x1B) {
return procSumouActionInit(FALSE, FALSE, 0);
}
if (mSpecialMode == 0x19 || mSpecialMode == 0x1A) {
if (mMode == 0x19 || mMode == 0x1A) {
cLib_addCalcAngleS(&shape_angle.y, mProcVar4.field_0x3010, 2, 0x400, 0x40);
current.angle.y = shape_angle.y;
@@ -664,20 +665,20 @@ int daAlink_c::procSumouAction() {
procSumouSideMoveInit();
}
} else {
if (mSpecialMode == 0x13) {
if (mMode == 0x13) {
cLib_addCalcAngleS(
&shape_angle.y,
cLib_targetAngleY(&current.pos, &mCargoCarryAcKeep.getActor()->current.pos), 2,
0x2000, 0x800);
current.angle.y = shape_angle.y;
} else if (mSpecialMode == 0x1E && mProcVar5.field_0x3012 != 0) {
} else if (mMode == 0x1E && mProcVar5.field_0x3012 != 0) {
cLib_addCalcAngleS(&shape_angle.y, mProcVar4.field_0x3010, 2, 0x400, 0x40);
current.angle.y = shape_angle.y;
current.pos.set(field_0x37c8.x - field_0x3478 * cM_ssin(current.angle.y),
field_0x37c8.y,
field_0x37c8.z - field_0x3478 * cM_scos(current.angle.y));
} else if (mSpecialMode == 0x1E || mSpecialMode == 0x1D) {
} else if (mMode == 0x1E || mMode == 0x1D) {
cLib_addCalcAngleS(
&shape_angle.y,
cLib_targetAngleY(&current.pos, &mCargoCarryAcKeep.getActor()->current.pos), 2,
@@ -686,18 +687,18 @@ int daAlink_c::procSumouAction() {
}
if (mProcVar3.field_0x300e == 0x15) {
setDoStatusEmphasys(0x15);
setDoStatusEmphasys(BUTTON_STATUS_GRAB);
} else if (mProcVar3.field_0x300e == 0x44) {
setSumouPunchStatus();
}
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
if (checkAnmEnd(frameCtrl_p)) {
if (mSpecialMode == 0x1E) {
if (mMode == 0x1E) {
procSumouStaggerInit();
} else if (mSpecialMode == 0x12 || mSpecialMode == 0x22 || mSpecialMode == 0x13 ||
mSpecialMode == 0x1A || mSpecialMode == 0x19 || mSpecialMode == 0x11 ||
mSpecialMode == 0x15)
} else if (mMode == 0x12 || mMode == 0x22 || mMode == 0x13 ||
mMode == 0x1A || mMode == 0x19 || mMode == 0x11 ||
mMode == 0x15)
{
procSumouSideMoveInit();
} else {
@@ -725,14 +726,13 @@ int daAlink_c::procSumouAction() {
return 1;
}
int daAlink_c::procSumouStaggerInit() {
commonProcInit(PROC_SUMOU_STAGGER);
if (mSpecialMode == 0x11) {
mSpecialMode = 0x20;
if (mMode == 0x11) {
mMode = 0x20;
} else {
mSpecialMode = 0x1F;
mMode = 0x1F;
}
setSingleAnimeBase(ANM_SUMOU_STAGGER);
@@ -750,8 +750,8 @@ int daAlink_c::procSumouStagger() {
}
mProcVar0.field_0x3008--;
if (mSpecialMode == 0x1C || mSpecialMode == 0x21 || mSpecialMode == 0x1B) {
procSumouActionInit(0, 0, 0);
if (mMode == 0x1C || mMode == 0x21 || mMode == 0x1B) {
procSumouActionInit(FALSE, FALSE, 0);
} else if (mProcVar0.field_0x3008 == 0) {
procSumouSideMoveInit();
}
@@ -760,7 +760,7 @@ int daAlink_c::procSumouStagger() {
}
int daAlink_c::procSumouWinLoseInit() {
if (mSpecialMode == 0xB && mUnderFrameCtrl[0].getAttribute() == 2) {
if (mMode == 0xB && mUnderFrameCtrl[0].getAttribute() == 2) {
cancelSumouMode();
return procWaitInit();
}
@@ -770,15 +770,20 @@ int daAlink_c::procSumouWinLoseInit() {
field_0x3478 = 1000.0f;
daAlink_ANM anm = ANM_WAIT;
if (mSpecialMode == 0xB) {
if (mMode == 0xB) {
mProcVar2.field_0x300c = 1;
} else if (mSpecialMode == 0xD) {
} else if (mMode == 0xD) {
field_0x2f99 = 12;
if (wrestler_p->getWrestlerType() != 0) {
anm = ANM_SUMOU_WIN_GORON;
} else {
#if VERSION == VERSION_SHIELD_DEBUG // probably a fakematch
if (wrestler_p->getWrestlerType() == 0) {
anm = ANM_SUMOU_WIN;
} else {
anm = ANM_SUMOU_WIN_GORON;
}
#else
anm = wrestler_p->getWrestlerType() != 0 ? ANM_SUMOU_WIN_GORON : ANM_SUMOU_WIN;
#endif
setSingleAnimeBase(anm);
mProcVar2.field_0x300c = 1;
@@ -787,7 +792,7 @@ int daAlink_c::procSumouWinLoseInit() {
field_0x3198 = 13;
} else {
f32 start_frame;
if (mSpecialMode == 12) {
if (mMode == 12) {
start_frame = 24.0f;
voiceStart(Z2SE_AL_V_SUMO_FALL_LOSE);
} else {
@@ -796,11 +801,15 @@ int daAlink_c::procSumouWinLoseInit() {
field_0x32cc = Z2SE_AL_V_SUMO_FALL_LOSE;
}
if (wrestler_p->getWrestlerType() != 0) {
anm = ANM_SUMOU_LOSE_GORON;
} else {
#if VERSION == VERSION_SHIELD_DEBUG // probably a fakematch
if (wrestler_p->getWrestlerType() == 0) {
anm = ANM_SUMOU_LOSE;
} else {
anm = ANM_SUMOU_LOSE_GORON;
}
#else
anm = wrestler_p->getWrestlerType() != 0 ? ANM_SUMOU_LOSE_GORON : ANM_SUMOU_LOSE;
#endif
setSingleAnime(anm, 1.0f, start_frame, -1, 3.0f);
field_0x2f99 = 15;
@@ -818,7 +827,6 @@ int daAlink_c::procSumouWinLoseInit() {
return 1;
}
int daAlink_c::procSumouWinLose() {
if (mProcVar3.field_0x300e == 0) {
if (mProcVar2.field_0x300c != 0) {
@@ -844,7 +852,7 @@ int daAlink_c::procSumouWinLose() {
field_0x3478 = 1000.0f;
field_0x3198 = ANM_SUMOU_KNOCKED_DOWN;
}
} else if (mProcVar3.field_0x300e == 0 && mSpecialMode == 0x25) {
} else if (mProcVar3.field_0x300e == 0 && mMode == 0x25) {
setSingleAnimeBase(ANM_SUMOU_GET_UP);
mProcVar3.field_0x300e = 1;
field_0x3478 = 1000.0f;
@@ -860,7 +868,6 @@ int daAlink_c::procSumouWinLose() {
return 1;
}
int daAlink_c::procSumouShikoInit() {
if (!commonProcInitNotSameProc(PROC_SUMOU_SHIKO)) {
return 0;
@@ -872,10 +879,10 @@ int daAlink_c::procSumouShikoInit() {
field_0x34d4 = field_0x3588;
field_0x2f99 = 12;
mProcVar2.field_0x300c = 0;
mSpecialMode = 0;
mMode = 0;
setFootEffectProcType(5);
deleteEquipItem(0, 1);
deleteEquipItem(FALSE, TRUE);
return 1;
}
@@ -885,7 +892,7 @@ int daAlink_c::procSumouShiko() {
field_0x2f99 = 4;
}
if (mSpecialMode == 1) {
if (mMode == 1) {
return procSumouReadyInit();
}
@@ -899,8 +906,8 @@ int daAlink_c::procSumouShiko() {
} else if (frameCtrl_p->checkPass(65.0f)) {
voiceStart(Z2SE_AL_V_SUMO_SHIKO);
} else if (frameCtrl_p->checkPass(9.0f)) {
field_0x2f92 = 0xFE;
field_0x2f93 = 0xFE;
mLeftHandIndex = 0xFE;
mRightHandIndex = 0xFE;
}
} else {
dComIfGp_evmng_cutEnd(mAlinkStaffId);
+183 -177
View File
@@ -17,7 +17,7 @@ BOOL daAlink_c::checkAcceptUseItemInWater(u16 i_itemNo) const {
void daAlink_c::swimDeleteItem() {
if (!checkHookshotItem(mEquipItem) && (mEquipItem != 0x103 || !checkBootsOrArmorHeavy())) {
deleteEquipItem(1, 1);
deleteEquipItem(TRUE, TRUE);
}
if (checkNoResetFlg2(FLG2_UNK_1)) {
@@ -54,23 +54,21 @@ f32 daAlink_c::getSwimMaxFallSpeed() const {
}
void daAlink_c::checkOxygenTimer() {
BOOL hide_timer;
BOOL is_hide_timer;
if (!checkNoResetFlg0(FLG0_SWIM_UP) ||
(checkModeFlg(MODE_SWIMMING) && mWaterY > 5.0f + current.pos.y))
{
hide_timer = false;
is_hide_timer = false;
} else {
hide_timer = true;
is_hide_timer = true;
}
if (dComIfGp_getOxygenShowFlag()) {
if (checkZoraWearAbility()) {
offOxygenTimer();
} else if (hide_timer) {
s32 max = dComIfGp_getMaxOxygen();
dComIfGp_setOxygenCount(max);
} else if (is_hide_timer) {
dComIfGp_setOxygenCount(dComIfGp_getMaxOxygen());
if (field_0x2fbe < 90) {
field_0x2fbe++;
} else {
@@ -79,7 +77,7 @@ void daAlink_c::checkOxygenTimer() {
} else if (!checkEventRun()) {
dComIfGp_setOxygenCount(-1);
}
} else if (!hide_timer && !checkZoraWearAbility()) {
} else if (!is_hide_timer && !checkZoraWearAbility()) {
if (field_0x2fbe != 0) {
field_0x2fbe--;
} else {
@@ -91,19 +89,19 @@ void daAlink_c::checkOxygenTimer() {
void daAlink_c::offOxygenTimer() {
dComIfGp_offOxygenShowFlag();
s32 max = dComIfGp_getMaxOxygen();
dComIfGp_setOxygen(max);
dComIfGp_setOxygen(dComIfGp_getMaxOxygen());
field_0x2fbe = 90;
}
BOOL daAlink_c::checkPossibleWaterInMode() const {
return checkModeFlg(MODE_VINE_CLIMB) || dComIfGp_checkPlayerStatus1(0, 0x2000000) ||
return checkModeFlg(MODE_VINE_CLIMB) ||
dComIfGp_checkPlayerStatus1(0, 0x2000000) ||
mProcID == PROC_HOOKSHOT_FLY;
}
void daAlink_c::setWaterInAnmRate(daPy_frameCtrl_c* i_frameCtrl, f32 i_rate) {
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
if (checkNoResetFlg0(FLG0_WATER_IN_MOVE)) {
if (checkZoraWearAbility()) {
i_rate *= mpHIO->mItem.mIronBoots.m.mZoraWaterAnmSpeed;
} else {
@@ -121,24 +119,24 @@ void daAlink_c::swimBgCheck(f32 param_0) {
return;
}
cXyz start_pos(current.pos);
cXyz end_pos;
cXyz linechk_start(current.pos);
cXyz linechk_end;
s16 var_r29;
if (getZoraSwim()) {
var_r29 = field_0x3080;
} else {
var_r29 = mProcVar2.field_0x300c;
start_pos.y += mpHIO->mWolf.mWlWallHang.m.mAutoWalkHeight;
linechk_start.y += mpHIO->mWolf.mWlWallHang.m.mAutoWalkHeight;
}
f32 var_f28 = param_0 * cM_scos(var_r29);
end_pos.set(start_pos.x + (var_f28 * cM_ssin(shape_angle.y)),
start_pos.y - param_0 * cM_ssin(var_r29),
start_pos.z + (var_f28 * cM_scos(shape_angle.y)));
linechk_end.set(linechk_start.x + (var_f28 * cM_ssin(shape_angle.y)),
linechk_start.y - param_0 * cM_ssin(var_r29),
linechk_start.z + (var_f28 * cM_scos(shape_angle.y)));
if (!commonLineCheck(&start_pos, &end_pos)) {
if (!commonLineCheck(&linechk_start, &linechk_end)) {
return;
}
@@ -148,12 +146,9 @@ void daAlink_c::swimBgCheck(f32 param_0) {
if (cBgW_CheckBWall(tri.mNormal.y) &&
(mProcID != PROC_METAMORPHOSE || dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7))
{
cXyz sp14 = end_pos - mLinkLinChk.GetCross();
f32 temp_f1 = sp14.absXZ();
cXyz sp14 = linechk_end - mLinkLinChk.GetCross();
s16 var_r28 = sp14.atan2sX_Z();
f32 var_f26 = cM_scos(var_r28 - cM_atan2s(-tri.mNormal.x, -tri.mNormal.z));
f32 var_f29 = -temp_f1 * var_f26;
f32 var_f29 = -sp14.absXZ() * cM_scos(sp14.atan2sX_Z() - cM_atan2s(-tri.mNormal.x, -tri.mNormal.z));
f32 var_f31 = var_f29 * tri.mNormal.x;
f32 var_f30 = var_f29 * tri.mNormal.z;
@@ -165,21 +160,18 @@ void daAlink_c::swimBgCheck(f32 param_0) {
onNoResetFlg1(FLG1_UNK_20000000);
}
start_pos.x -= var_f31;
start_pos.z -= var_f30;
end_pos.x -= var_f31;
end_pos.z -= var_f30;
linechk_start.x -= var_f31;
linechk_start.z -= var_f30;
linechk_end.x -= var_f31;
linechk_end.z -= var_f30;
if (commonLineCheck(&start_pos, &end_pos)) {
if (commonLineCheck(&linechk_start, &linechk_end)) {
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &tri);
if (cBgW_CheckBWall(tri.mNormal.y)) {
sp14 = end_pos - mLinkLinChk.GetCross();
temp_f1 = sp14.absXZ();
sp14 = linechk_end - mLinkLinChk.GetCross();
var_r28 = sp14.atan2sX_Z();
var_f26 = cM_scos(var_r28 - cM_atan2s(-tri.mNormal.x, -tri.mNormal.z));
var_f29 = -temp_f1 * var_f26;
var_f29 = -sp14.absXZ() * cM_scos(sp14.atan2sX_Z() - cM_atan2s(-tri.mNormal.x, -tri.mNormal.z));
var_f31 += var_f29 * tri.mNormal.x;
var_f30 += var_f29 * tri.mNormal.z;
@@ -193,35 +185,36 @@ void daAlink_c::swimBgCheck(f32 param_0) {
}
void daAlink_c::setSpeedAndAngleSwim() {
if (!checkBootsOrArmorHeavy() && dComIfGp_getDoStatus() == 0 && (!checkHookshotAnime() || (checkHookshotItem(mEquipItem) && (mItemMode == 0 || mItemMode == 1)))) {
if (!checkBootsOrArmorHeavy() && dComIfGp_getDoStatus() == BUTTON_STATUS_NONE && (!checkHookshotAnime() || (checkHookshotItem(mEquipItem) && (mItemMode == 0 || mItemMode == 1)))) {
if (checkZoraWearAbility()) {
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
if (field_0x2fcd == 0) {
setDoStatus(0x41);
setDoStatus(BUTTON_STATUS_DIVE);
}
} else {
setDoStatus(0x4C);
setDoStatus(BUTTON_STATUS_SWIM);
}
} else if (!checkNoResetFlg0(FLG0_SWIM_UP)) {
setDoStatus(0x97);
setDoStatus(BUTTON_STATUS_UNK_151);
} else if (mProcID == PROC_SWIM_MOVE && checkUnderMove0BckNoArc(ANM_SWIM_A) && field_0x30d0 == 0 && field_0x30d2 == 0) {
setDoStatus(9);
setDoStatus(BUTTON_STATUS_DASH);
}
}
f32 var_f31;
f32 var_f30;
s16 temp_r29;
if (mProcID == PROC_SWIM_HOOKSHOT_MOVE && !checkHookshotWait()) {
var_f30 = 0.0f;
} else if (checkZoraSwimMove()) {
s16 temp_r29 = shape_angle.y;
temp_r29 = shape_angle.y;
if (mTargetedActor != NULL && current.pos.abs2XZ(mTargetedActor->eyePos) > 22500.0f) {
setShapeAngleToAtnActor(0);
} else if (checkInputOnR()) {
s16 var_r28;
if (checkEventRun()) {
var_r28 = field_0x2fe2;
var_r28 = mMoveAngle;
} else {
var_r28 = shape_angle.y + (16384.0f * cM_ssin(mStickAngle));
}
@@ -230,24 +223,24 @@ void daAlink_c::setSpeedAndAngleSwim() {
}
current.angle.y = shape_angle.y;
var_f30 = 3.0f * cM_scos((shape_angle.y - temp_r29));
var_f30 = 3.0f * cM_scos(shape_angle.y - temp_r29);
} else if (!checkAttentionLock()) {
if (checkInputOnR()) {
s16 temp_r29_2 = shape_angle.y;
temp_r29 = shape_angle.y;
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, mpHIO->mSwim.m.mTurnRate, mpHIO->mSwim.m.mMaxTurn, mpHIO->mSwim.m.mMinTurn);
cLib_addCalcAngleS(&shape_angle.y, mMoveAngle, mpHIO->mSwim.m.mTurnRate, mpHIO->mSwim.m.mMaxTurn, mpHIO->mSwim.m.mMinTurn);
} else {
cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, mpHIO->mSwim.m.mUnderwaterTurnRate, mpHIO->mSwim.m.mUnderwaterMaxTurn, mpHIO->mSwim.m.mUnderwaterMinTurn);
cLib_addCalcAngleS(&shape_angle.y, mMoveAngle, mpHIO->mSwim.m.mUnderwaterTurnRate, mpHIO->mSwim.m.mUnderwaterMaxTurn, mpHIO->mSwim.m.mUnderwaterMinTurn);
}
f32 var_f29;
if (checkUnderMove0BckNoArc(ANM_SWIM_DASH)) {
var_f29 = 1.0f;
} else {
var_f29 = field_0x33a8;
var_f29 = mStickValue;
}
var_f30 = 3.0f * var_f29 * cM_scos((shape_angle.y - temp_r29_2));
var_f30 = 3.0f * var_f29 * cM_scos(shape_angle.y - temp_r29);
cLib_addCalcAngleS(&current.angle.y, shape_angle.y, 2, 0x2000, 0x1000);
} else {
var_f30 = 0.0f;
@@ -266,17 +259,17 @@ void daAlink_c::setSpeedAndAngleSwim() {
}
if (checkZeroSpeedF()) {
current.angle.y = field_0x2fe2;
current.angle.y = mMoveAngle;
}
s16 temp_r29_3 = current.angle.y;
temp_r29 = current.angle.y;
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
cLib_addCalcAngleS(&current.angle.y, field_0x2fe2, mpHIO->mSwim.m.mTurnRate, mpHIO->mSwim.m.mMaxTurn, mpHIO->mSwim.m.mMinTurn);
cLib_addCalcAngleS(&current.angle.y, mMoveAngle, mpHIO->mSwim.m.mTurnRate, mpHIO->mSwim.m.mMaxTurn, mpHIO->mSwim.m.mMinTurn);
} else {
cLib_addCalcAngleS(&current.angle.y, field_0x2fe2, mpHIO->mSwim.m.mUnderwaterTurnRate, mpHIO->mSwim.m.mUnderwaterMaxTurn, mpHIO->mSwim.m.mUnderwaterMinTurn);
cLib_addCalcAngleS(&current.angle.y, mMoveAngle, mpHIO->mSwim.m.mUnderwaterTurnRate, mpHIO->mSwim.m.mUnderwaterMaxTurn, mpHIO->mSwim.m.mUnderwaterMinTurn);
}
var_f30 = mpHIO->mSwim.m.mAcceleration * field_0x33a8 * cM_scos((s16)(current.angle.y - temp_r29_3));
var_f30 = mpHIO->mSwim.m.mAcceleration * mStickValue * cM_scos((s16)(current.angle.y - temp_r29));
} else {
var_f30 = 0.0f;
}
@@ -322,7 +315,7 @@ int daAlink_c::checkNextActionSwim() {
field_0x3000 = 30;
}
if ((checkZoraWearAbility() && !checkHeavyStateOn(1, 1)) || checkNoResetFlg0(FLG0_SWIM_UP)) {
if ((checkZoraWearAbility() && !checkHeavyStateOn(TRUE, TRUE)) || checkNoResetFlg0(FLG0_SWIM_UP)) {
setTalkStatus();
}
@@ -333,7 +326,7 @@ int daAlink_c::checkNextActionSwim() {
if (mAttList != NULL && mAttList->mType == fopAc_attn_ETC_e && checkNoResetFlg0(FLG0_SWIM_UP) &&
fopAcM_GetName(field_0x27f4) == PROC_CANOE)
{
setDoStatus(0x17);
setDoStatus(BUTTON_STATUS_GET_ON);
if (doTrigger()) {
return procCanoeRideInit();
@@ -362,9 +355,15 @@ int daAlink_c::checkSwimAction(int param_0) {
var_f31 = mpHIO->mSwim.m.mStartHeight;
}
if (checkNoResetFlg0(FLG0_UNK_80) && !checkNoResetFlg0(FLG0_UNDERWATER) && !checkModeFlg(0x40000) && mProcID != PROC_MAGNE_BOOTS_FLY && ((mProcID != PROC_WOLF_LOCK_ATTACK && mProcID != PROC_WOLF_LOCK_ATTACK_TURN) || mProcVar5.field_0x3012 == 0) && mDemo.getDemoMode() != 0x11) {
f32 var_f28;
if (checkNoResetFlg0(FLG0_UNK_80)
&& !checkNoResetFlg0(FLG0_WATER_IN_MOVE)
&& !checkModeFlg(0x40000)
&& mProcID != PROC_MAGNE_BOOTS_FLY
&& ((mProcID != PROC_WOLF_LOCK_ATTACK && mProcID != PROC_WOLF_LOCK_ATTACK_TURN) || mProcVar5.field_0x3012 == 0)
&& mDemo.getDemoMode() != daPy_demo_c::DEMO_UNK_17_e)
{
f32 var_f29;
f32 var_f28;
f32 var_f30;
if (checkWolf()) {
@@ -393,14 +392,14 @@ int daAlink_c::checkSwimAction(int param_0) {
offNoResetFlg0(FLG0_SWIM_UP);
mZ2Link.setInWater(true);
field_0x594 = var_f29;
mMaxSpeed = var_f29;
if (!param_0) {
mNormalSpeed *= 0.75f;
}
if (mNormalSpeed >= field_0x594) {
mNormalSpeed = field_0x594;
if (mNormalSpeed >= mMaxSpeed) {
mNormalSpeed = mMaxSpeed;
}
swimDeleteItem();
@@ -421,7 +420,7 @@ int daAlink_c::checkSwimAction(int param_0) {
}
if (checkModeFlg(2) && !checkPossibleWaterInMode()) {
dComIfGp_getVibration().StartShock(2, 1, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 1, cXyz(0.0f, 1.0f, 0.0f));
current.pos.y = var_f30 + var_f31;
speed.y = 0.75f * field_0x3528.y;
@@ -433,15 +432,15 @@ int daAlink_c::checkSwimAction(int param_0) {
if (checkWolf()) {
if (checkNoResetFlg2(FLG2_UNK_8)) {
daAlink_WANM var_r29;
daAlink_WANM anm;
if (cM_rnd() < 0.5f) {
var_r29 = WANM_FLING_LEFT;
anm = WANM_FLING_LEFT;
onNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW);
} else {
var_r29 = WANM_FLING_RIGHT;
anm = WANM_FLING_RIGHT;
offNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW);
}
setWolfEnemyThrowUpperAnime(var_r29, 0.0f);
setWolfEnemyThrowUpperAnime(anm, 0.0f);
}
return procWolfSwimWaitInit(1);
@@ -460,7 +459,7 @@ int daAlink_c::checkSwimAction(int param_0) {
}
if (checkBootsOrArmorHeavy() || checkPossibleWaterInMode()) {
onNoResetFlg0(FLG0_UNDERWATER);
onNoResetFlg0(FLG0_WATER_IN_MOVE);
return 0;
}
@@ -541,7 +540,7 @@ int daAlink_c::checkSwimUpAction() {
} else {
current.pos.y = mLinkAcch.GetGroundH();
mLinkAcch.SetGroundHit();
onNoResetFlg0(FLG0_UNDERWATER);
onNoResetFlg0(FLG0_WATER_IN_MOVE);
procLandInit(0.0f);
field_0x2f99 = 0x90;
return 1;
@@ -559,12 +558,14 @@ int daAlink_c::checkSwimUpAction() {
}
void daAlink_c::swimOutAfter(int param_0) {
UNUSED(param_0);
onNoResetFlg0(FLG0_SWIM_UP);
onEndResetFlg1(ERFLG1_UNK_100);
mZ2Link.setInWater(false);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
if (checkNoResetFlg0(FLG0_WATER_IN_MOVE)) {
offNoResetFlg0(FLG0_WATER_IN_MOVE);
} else {
field_0x2b98 = 0.0f;
field_0x2f98 = 4;
@@ -630,12 +631,11 @@ int daAlink_c::checkSwimOutAction() {
}
void daAlink_c::setSwimMoveAnime() {
daPy_frameCtrl_c* temp_r28 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* temp_r27 = &mUpperFrameCtrl[2];
daPy_frameCtrl_c* framectrl_under0 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* framectrl_upper2 = &mUpperFrameCtrl[2];
f32 var_f31;
f32 temp_f25 = temp_r28->getEnd();
f32 var_f26 = temp_r28->getFrame() * temp_f25;
f32 var_f26 = framectrl_under0->getFrame() * framectrl_under0->getEnd();
if (field_0x3000 != 0 && !checkHookshotAnime()) {
field_0x2f98 = 4;
@@ -650,9 +650,9 @@ void daAlink_c::setSwimMoveAnime() {
field_0x2f98 = 0;
}
daAlink_ANM var_r29;
BOOL var_r26 = 1;
BOOL var_r25 = 0;
daAlink_ANM anm = (daAlink_ANM)field_0x3198;
BOOL var_r26 = TRUE;
BOOL var_r25 = FALSE;
if (field_0x2f98 == 4) {
f32 temp_f29 = mpHIO->mSwim.m.mUnderwaterMaxSpeed + mpHIO->mSwim.m.mUnderwaterButtonAdditionalSpeed;
@@ -660,12 +660,12 @@ void daAlink_c::setSwimMoveAnime() {
field_0x3478 = mpHIO->mSwim.m.mUnderwaterMinAnmSpeed;
field_0x347c = mpHIO->mSwim.m.mUnderwaterMaxAnmSpeed;
if (field_0x594 < mpHIO->mSwim.m.mUnderwaterMaxSpeed) {
field_0x594 = mpHIO->mSwim.m.mUnderwaterMaxSpeed;
if (mMaxSpeed < mpHIO->mSwim.m.mUnderwaterMaxSpeed) {
mMaxSpeed = mpHIO->mSwim.m.mUnderwaterMaxSpeed;
} else if (doTrigger()) {
field_0x594 += 0.75f;
if (field_0x594 > temp_f29) {
field_0x594 = temp_f29;
mMaxSpeed += 0.75f;
if (mMaxSpeed > temp_f29) {
mMaxSpeed = temp_f29;
}
if (!checkSwimMoveHandAnime() && !checkZoraSwimDamageAnime()) {
@@ -679,77 +679,77 @@ void daAlink_c::setSwimMoveAnime() {
setUpperAnime(0x23F, UPPER_2, 1.0f, 0.0f, 0x28, var_f28);
mProcVar5.field_0x3012 = 0;
var_r25 = 1;
} else if (temp_r27->getFrame() > 25.0f) {
} else if (framectrl_upper2->getFrame() > 25.0f) {
mProcVar5.field_0x3012 = 1;
}
} else if (!checkSwimMoveHandAnime()) {
cLib_chaseF(&field_0x594, mpHIO->mSwim.m.mUnderwaterMaxSpeed, 0.4f);
cLib_chaseF(&mMaxSpeed, mpHIO->mSwim.m.mUnderwaterMaxSpeed, 0.4f);
}
var_f31 = 1.0f / mpHIO->mSwim.m.mUnderwaterMaxSpeed;
if (checkZoraWearAbility() && (field_0x3198 == ANM_SWIM_DIVE || (field_0x3198 == ANM_SWIM_ZORA_START && !checkAnmEnd(temp_r28)))) {
var_r29 = ANM_SWIM_ZORA_START;
if (checkZoraWearAbility() && (field_0x3198 == ANM_SWIM_DIVE || (field_0x3198 == ANM_SWIM_ZORA_START && !checkAnmEnd(framectrl_under0)))) {
anm = ANM_SWIM_ZORA_START;
} else {
var_r29 = ANM_SWIM_C;
anm = ANM_SWIM_C;
if (field_0x3198 == ANM_SWIM_ZORA_START) {
var_r26 = 0;
var_r26 = FALSE;
if (mProcVar4.field_0x3010 == 1) {
mProcVar4.field_0x3010 = 0;
}
}
}
} else if (field_0x2f98 == 0) {
if (checkSwimDashMode() && checkUnderMove0BckNoArc(ANM_SWIM_DASH) && !checkAnmEnd(temp_r28)) {
var_r29 = ANM_SWIM_DASH;
if (checkSwimDashMode() && checkUnderMove0BckNoArc(ANM_SWIM_DASH) && !checkAnmEnd(framectrl_under0)) {
anm = ANM_SWIM_DASH;
} else if (mNormalSpeed < 3.0f || checkHookshotAnime()) {
var_r29 = ANM_SWIM_WAIT;
anm = ANM_SWIM_WAIT;
field_0x30d0 = 0;
} else {
var_r29 = ANM_SWIM_A;
anm = ANM_SWIM_A;
}
if (checkSwimDashMode()) {
field_0x3478 = mpHIO->mSwim.m.mDashMinAnmSpeed;
field_0x347c = mpHIO->mSwim.m.mDashMaxAnmSpeed;
field_0x594 = mpHIO->mSwim.m.mDashMaxSpeed;
mMaxSpeed = mpHIO->mSwim.m.mDashMaxSpeed;
} else {
field_0x3478 = mpHIO->mSwim.m.mForwardMinAnmSpeed;
field_0x347c = mpHIO->mSwim.m.mForwardMaxAnmSpeed;
field_0x594 = getSwimFrontMaxSpeed();
mMaxSpeed = getSwimFrontMaxSpeed();
}
var_f31 = 1.0f / field_0x594;
var_f31 = 1.0f / mMaxSpeed;
} else if (field_0x2f98 == 1) {
var_r29 = ANM_ATN_SWIM_BACK;
anm = ANM_ATN_SWIM_BACK;
field_0x3478 = mpHIO->mSwim.m.mBackwardMinAnmSpeed;
field_0x347c = mpHIO->mSwim.m.mBackwardMaxAnmSpeed;
if (checkZoraWearAbility()) {
field_0x594 = 10.0f;
mMaxSpeed = 10.0f;
} else {
field_0x594 = mpHIO->mSwim.m.mBackwardMaxSpeed;
mMaxSpeed = mpHIO->mSwim.m.mBackwardMaxSpeed;
}
var_f31 = 1.0f / field_0x594;
var_f31 = 1.0f / mMaxSpeed;
} else {
if (field_0x2f98 == 2) {
var_r29 = ANM_ATN_SWIM_LEFT;
anm = ANM_ATN_SWIM_LEFT;
} else {
var_r29 = ANM_ATN_SWIM_RIGHT;
anm = ANM_ATN_SWIM_RIGHT;
}
field_0x3478 = mpHIO->mSwim.m.mStrafeMinAnmSpeed;
field_0x347c = mpHIO->mSwim.m.mStrafeMaxAnmSpeed;
if (checkZoraWearAbility()) {
field_0x594 = 12.0f;
mMaxSpeed = 12.0f;
} else {
field_0x594 = mpHIO->mSwim.m.mStrafeMaxSpeed;
mMaxSpeed = mpHIO->mSwim.m.mStrafeMaxSpeed;
}
var_f31 = 1.0f / field_0x594;
var_f31 = 1.0f / mMaxSpeed;
}
field_0x347c -= field_0x3478;
@@ -759,55 +759,55 @@ void daAlink_c::setSwimMoveAnime() {
}
if (checkBootsOrArmorHeavy()) {
var_r29 = ANM_SWIM_WAIT;
field_0x594 = mpHIO->mSwim.m.mUnderwaterFallMaxSpeed;
anm = ANM_SWIM_WAIT;
mMaxSpeed = mpHIO->mSwim.m.mUnderwaterFallMaxSpeed;
if (mEquipItem != fpcNm_ITEM_NONE && !checkHookshotAnime()) {
setDoStatus(4);
setDoStatus(BUTTON_STATUS_PUT_AWAY);
}
}
if (var_r29 != field_0x3198) {
if (anm != field_0x3198) {
if (field_0x3198 == ANM_SWIM_ZORA_START) {
speed.y = 0.0f;
}
field_0x3198 = var_r29;
field_0x3198 = anm;
if (checkUnderMove0BckNoArc(ANM_SWIM_DASH)) {
field_0x30d2 = mpHIO->mSwim.m.field_0x5e;
}
if (var_r29 == ANM_SWIM_WAIT) {
if (anm == ANM_SWIM_WAIT) {
setSingleAnimeBaseSpeed(ANM_SWIM_WAIT, mpHIO->mSwim.m.mWaitAnmSpeed, mpHIO->mSwim.m.mWaitInterpolation);
} else {
f32 var_f27;
if (var_r26 != 0) {
var_f27 = mpHIO->mSwim.m.mMoveInterpolation;
f32 morf;
if (var_r26) {
morf = mpHIO->mSwim.m.mMoveInterpolation;
} else {
var_f27 = 0.0f;
morf = 0.0f;
}
setSingleAnimeBaseMorf(var_r29, var_f27);
setSingleAnimeBaseMorf(anm, morf);
}
}
if (var_r29 != ANM_SWIM_WAIT && var_r29 != ANM_SWIM_DASH) {
if (anm != ANM_SWIM_WAIT && anm != ANM_SWIM_DASH) {
f32 temp_f30 = var_f31 * fabsf(mNormalSpeed);
if (temp_f30 > 1.0f && field_0x2f98 == 4) {
temp_r28->setRate(mpHIO->mSwim.m.mUnderwaterMaxAnmSpeed + ((temp_f30 - 1.0f) * mpHIO->mSwim.m.mUnderwaterAdditionalAnmSpeed));
framectrl_under0->setRate(mpHIO->mSwim.m.mUnderwaterMaxAnmSpeed + ((temp_f30 - 1.0f) * mpHIO->mSwim.m.mUnderwaterAdditionalAnmSpeed));
} else {
temp_r28->setRate(field_0x3478 + (field_0x347c * temp_f30));
framectrl_under0->setRate(field_0x3478 + (field_0x347c * temp_f30));
}
}
if (checkSwimMoveHandAnime()) {
if (temp_r27->checkPass(17.0f)) {
if (framectrl_upper2->checkPass(17.0f)) {
seStartOnlyReverb(Z2SE_AL_WATER_STROKE_L);
}
if (var_r29 == ANM_SWIM_C) {
temp_r27->setRate(temp_r28->getRate());
if (anm == ANM_SWIM_C) {
framectrl_upper2->setRate(framectrl_under0->getRate());
if (var_r25 == 0 && temp_r27->checkPass(0.0f)) {
if (!var_r25 && framectrl_upper2->checkPass(0.0f)) {
if (mProcVar5.field_0x3012 != 0) {
mProcVar5.field_0x3012 = 0;
} else {
@@ -821,7 +821,7 @@ void daAlink_c::setSwimMoveAnime() {
maxFallSpeed = getSwimMaxFallSpeed();
if (var_r29 == ANM_SWIM_C || var_r29 == ANM_SWIM_ZORA_START) {
if (anm == ANM_SWIM_C || anm == ANM_SWIM_ZORA_START) {
if (!checkZoraWearAbility()) {
if (field_0x3080 != -0x3800) {
setOldRootQuaternion(0x4000, 0, 0);
@@ -854,11 +854,11 @@ void daAlink_c::setSwimMoveAnime() {
}
bool daAlink_c::checkSwimButtonAccept() {
return dComIfGp_getDoStatus() == 0x41 || dComIfGp_getDoStatus() == 0x4C;
return dComIfGp_getDoStatus() == BUTTON_STATUS_DIVE || dComIfGp_getDoStatus() == BUTTON_STATUS_SWIM;
}
bool daAlink_c::checkUpSwimButtonAccept() {
return dComIfGp_getDoStatus() == 0x97;
return dComIfGp_getDoStatus() == BUTTON_STATUS_UNK_151;
}
BOOL daAlink_c::checkSwimButtonMove() {
@@ -879,7 +879,7 @@ void daAlink_c::setSwimUpDownOffset() {
f32 var_f1;
if (checkWolf()) {
if (checkHeavyStateOn(1, 1)) {
if (checkHeavyStateOn(TRUE, TRUE)) {
var_f1 = mpHIO->mWolf.mWlSwim.m.mHeavyIdleUpDownSwayAmount;
} else {
var_f1 = mpHIO->mWolf.mWlSwim.m.mIdleUpDownSwayAmount;
@@ -946,10 +946,10 @@ int daAlink_c::procSwimUp() {
int daAlink_c::procSwimWaitInit(int param_0) {
daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl;
u32 mode_40000 = checkModeFlg(0x40000);
u32 is_mode40000 = checkModeFlg(0x40000);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
if (checkNoResetFlg0(FLG0_WATER_IN_MOVE)) {
offNoResetFlg0(FLG0_WATER_IN_MOVE);
current.pos.y += mpHIO->mSwim.m.mStartHeight;
}
@@ -959,7 +959,7 @@ int daAlink_c::procSwimWaitInit(int param_0) {
seStartMapInfo(Z2SE_AL_INTO_WATER);
mProcVar4.field_0x3010 = 0;
field_0x3480 = mpHIO->mSwim.m.mStartHeight;
} else if (!mode_40000) {
} else if (!is_mode40000) {
mProcVar4.field_0x3010 = 0;
field_0x3480 = mpHIO->mSwim.m.mStartHeight;
}
@@ -991,18 +991,18 @@ int daAlink_c::procSwimWaitInit(int param_0) {
mProcVar2.field_0x300c = 0;
mProcVar0.field_0x3008 = 0;
field_0x594 = getSwimFrontMaxSpeed();
mMaxSpeed = getSwimFrontMaxSpeed();
return 1;
}
int daAlink_c::procSwimWait() {
if (mDemo.getDemoMode() == 6 || mDemo.getDemoMode() == 8) {
if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK_6_e || mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK_8_e) {
setShapeAngleToTalkActor();
current.angle.y = shape_angle.y;
}
maxFallSpeed = getSwimMaxFallSpeed();
field_0x594 = getSwimFrontMaxSpeed();
mMaxSpeed = getSwimFrontMaxSpeed();
setSpeedAndAngleSwim();
@@ -1015,7 +1015,7 @@ int daAlink_c::procSwimWait() {
setSwimUpDownOffset();
if (checkEquipHeavyBoots() && mEquipItem != fpcNm_ITEM_NONE) {
setDoStatus(0x4);
setDoStatus(BUTTON_STATUS_PUT_AWAY);
}
if (checkSwimUpAction()) {
@@ -1047,25 +1047,25 @@ int daAlink_c::procSwimWait() {
}
int daAlink_c::procSwimMoveInit() {
u32 mode_40000 = checkModeFlg(0x40000);
bool proc_dive_jump = mProcID == PROC_DIVE_JUMP;
bool proc_swim_dive = mProcID == PROC_SWIM_DIVE;
u32 is_mode40000 = checkModeFlg(0x40000);
bool is_prev_dive_jump = mProcID == PROC_DIVE_JUMP;
bool is_prev_swim_dive = mProcID == PROC_SWIM_DIVE;
commonProcInit(PROC_SWIM_MOVE);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
if (checkNoResetFlg0(FLG0_WATER_IN_MOVE)) {
offNoResetFlg0(FLG0_WATER_IN_MOVE);
}
if (!mode_40000) {
if (!is_mode40000) {
field_0x3480 = mpHIO->mSwim.m.mStartHeight;
mProcVar4.field_0x3010 = 0;
}
if (proc_swim_dive || proc_dive_jump) {
if (is_prev_swim_dive || is_prev_dive_jump) {
field_0x3198 = 199;
if (proc_dive_jump) {
if (is_prev_dive_jump) {
field_0x3080 = 0x2800;
mProcVar3.field_0x300e = field_0x3080;
mProcVar4.field_0x3010 = 1;
@@ -1092,6 +1092,8 @@ int daAlink_c::procSwimMoveInit() {
int daAlink_c::procSwimMove() {
setSpeedAndAngleSwim();
daPy_frameCtrl_c* framectrl = mUnderFrameCtrl;
if (checkUpSwimButtonAccept() && doButton()) {
field_0x3000 = 30;
}
@@ -1113,7 +1115,7 @@ int daAlink_c::procSwimMove() {
if (checkSwimButtonAccept() && doTrigger() && !getZoraSwim()) {
procSwimDiveInit();
} else if (dComIfGp_getDoStatus() == 9 && doTrigger()) {
} else if (dComIfGp_getDoStatus() == BUTTON_STATUS_DASH && doTrigger()) {
onNoResetFlg1(FLG1_DASH_MODE);
field_0x30d0 = mpHIO->mSwim.m.field_0x5c;
setSingleAnimeParam(ANM_SWIM_DASH, &mpHIO->mSwim.m.mDashAnm);
@@ -1153,12 +1155,11 @@ int daAlink_c::procSwimDiveInit() {
return 1;
}
int daAlink_c::procSwimDive() {
daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl;
if (mProcVar2.field_0x300c == 0) {
setDoStatus(0x4C);
setDoStatus(BUTTON_STATUS_SWIM);
} else if (checkNoResetFlg0(FLG0_SWIM_UP) && frame_ctrl->getFrame() > 20.0f) {
offNoResetFlg0(FLG0_SWIM_UP);
mZ2Link.setInWater(true);
@@ -1178,8 +1179,8 @@ int daAlink_c::procSwimDive() {
fopKyM_createWpillar(&pos, 0.7f, 0);
}
if (mLinkAcch.GetGroundH() > current.pos.y - field_0x598 * 0.5f) {
current.pos.y = field_0x598 * 0.5f + mLinkAcch.GetGroundH();
if (mLinkAcch.GetGroundH() > current.pos.y - mHeight * 0.5f) {
current.pos.y = mHeight * 0.5f + mLinkAcch.GetGroundH();
}
if (checkAnmEnd(frame_ctrl)) {
@@ -1198,7 +1199,6 @@ int daAlink_c::procSwimDive() {
return 1;
}
int daAlink_c::procSwimHookshotSubjectInit() {
if (!commonProcInitNotSameProc(PROC_SWIM_HOOKSHOT_SUBJECT)) {
return 0;
@@ -1226,23 +1226,26 @@ int daAlink_c::procSwimHookshotSubjectInit() {
mProcVar2.field_0x300c = 0;
mProcVar0.field_0x3008 = 0;
field_0x594 = getSwimFrontMaxSpeed();
mMaxSpeed = getSwimFrontMaxSpeed();
field_0x3480 = mpHIO->mSwim.m.mStartHeight;
mProcVar4.field_0x3010 = 0;
field_0x30d0 = 0;
#if PLATFORM_GCN
setHookshotReadyMaterial();
#endif
dComIfGp_setPlayerStatus0(0, 0x104000);
return 1;
}
int daAlink_c::procSwimHookshotSubject() {
maxFallSpeed = getSwimMaxFallSpeed();
field_0x594 = getSwimFrontMaxSpeed();
mMaxSpeed = getSwimFrontMaxSpeed();
if (checkHookshotWait()) {
setDoStatus(0x12);
setDoStatus(BUTTON_STATUS_BACK);
}
setShapeAngleToAtnActor(0);
@@ -1316,7 +1319,7 @@ int daAlink_c::procSwimHookshotMove() {
cancelHookshotMove();
if (checkHookshotWait() && !checkZoraWearAbility()) {
setDoStatus(0x12);
setDoStatus(BUTTON_STATUS_BACK);
}
if (mItemVar0.field_0x3018 == 0) {
@@ -1364,48 +1367,50 @@ int daAlink_c::procSwimHookshotMove() {
return 1;
}
int daAlink_c::procSwimDamageInit(dCcD_GObjInf* param_0) {
int daAlink_c::procSwimDamageInit(dCcD_GObjInf* i_hitObj) {
seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL);
dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 31, cXyz(0.0f, 1.0f, 0.0f));
BOOL bvar4 =
checkNoResetFlg0(FLG0_SWIM_UP) || ((param_0 != NULL && param_0->GetTgHitAc() != NULL) &&
fopAcM_GetName(param_0->GetTgHitAc()) == PROC_E_SG);
BOOL bvar4 = checkNoResetFlg0(FLG0_SWIM_UP)
|| ((i_hitObj != NULL && i_hitObj->GetTgHitAc() != NULL)
&& fopAcM_GetName(i_hitObj->GetTgHitAc()) == PROC_E_SG);
if (!getZoraSwim() && bvar4 && mProcID != PROC_SWIM_WAIT) {
return 1;
}
cXyz* temp_r30;
cXyz sp30;
cXyz* dmg_vec;
cXyz work;
if (param_0 != NULL) {
temp_r30 = (cXyz*)getDamageVec(param_0);
if (i_hitObj != NULL) {
dmg_vec = (cXyz*)getDamageVec(i_hitObj);
} else {
sp30.set(-cM_ssin(current.angle.y), 0.0f, -cM_scos(current.angle.y));
temp_r30 = &sp30;
work.set(-cM_ssin(current.angle.y), 0.0f, -cM_scos(current.angle.y));
dmg_vec = &work;
}
f32 scale =
temp_r30->abs() * mpHIO->mDamage.mDamSwim.m.mAttackSpeedRate + mpHIO->mDamage.mDamSwim.m.mInitialSpeed;
f32 scale = dmg_vec->abs() * mpHIO->mDamage.mDamSwim.m.mAttackSpeedRate + mpHIO->mDamage.mDamSwim.m.mInitialSpeed;
if (scale > mpHIO->mDamage.mDamSwim.m.mMaxSpeed) {
scale = mpHIO->mDamage.mDamSwim.m.mMaxSpeed;
}
field_0x3750 = temp_r30->normZP();
field_0x3750 = dmg_vec->normZP();
field_0x3750 *= scale;
if (getZoraSwim()) {
setUpperAnimeParam(0xBF, UPPER_2, &mpHIO->mDamage.mDamSwim.m.mSinkAnm);
setFacePriBck(0xEA);
setFacePriTexture(FTANM_UNK_27);
setUpperAnimeParam(dRes_ID_ALANM_BCK_DAMSW_e, UPPER_2, &mpHIO->mDamage.mDamSwim.m.mSinkAnm);
setFacePriBck(dRes_ID_ALANM_BCK_FB_e);
setFacePriTexture(FTANM_B_A);
return 1;
}
commonProcInit(PROC_SWIM_DAMAGE);
cXyz sp24(temp_r30->z * -cM_ssin(shape_angle.y) + temp_r30->x * cM_scos(shape_angle.y),
temp_r30->y,
temp_r30->z * cM_scos(shape_angle.y) + temp_r30->x * cM_ssin(shape_angle.y));
f32 var_f30 = cM_ssin(shape_angle.y);
f32 var_f29 = cM_scos(shape_angle.y);
cXyz sp24(dmg_vec->z * -var_f30 + dmg_vec->x * var_f29,
dmg_vec->y,
dmg_vec->z * var_f29 + dmg_vec->x * var_f30);
mProcVar0.field_0x3008 =
cLib_minMaxLimit(cM_atan2s(sp24.z, sp24.y), (s16)-mpHIO->mDamage.mDamSwim.m.mFrontBackBodyMaxAngle,
@@ -1436,7 +1441,9 @@ int daAlink_c::procSwimDamageInit(dCcD_GObjInf* param_0) {
}
mNormalSpeed = 0.0f;
field_0x347c = M_PI / (mUnderFrameCtrl->getEnd() - mUnderFrameCtrl->getStart());
daPy_frameCtrl_c* framectrl = mUnderFrameCtrl;
field_0x347c = M_PI / (framectrl->getEnd() - framectrl->getStart());
field_0x3480 = mpHIO->mSwim.m.mStartHeight;
current.angle.y = shape_angle.y;
@@ -1470,13 +1477,12 @@ int daAlink_c::procSwimDamage() {
return 1;
}
int daAlink_c::procOctaIealSpitInit() {
u32 temp_r30 = checkModeFlg(MODE_SWIMMING);
commonProcInit(PROC_OCTAIEAL_SPIT);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
if (checkNoResetFlg0(FLG0_WATER_IN_MOVE)) {
offNoResetFlg0(FLG0_WATER_IN_MOVE);
}
setSingleAnimeBase(ANM_MORPHEEL_SPIT_OUT);
@@ -1519,14 +1525,14 @@ static f32 dummyFloat() {
}
int daAlink_c::procOctaIealSpit() {
if (mDemo.getDemoMode() == 0x2E) {
if (mDemo.getDemoMode() == daPy_demo_c::DEMO_CAUGHT_e) {
cancelOriginalDemo();
}
cLib_addCalc(&mNormalSpeed, 0.0f, 0.5f, field_0x3478, 0.1f);
field_0x2f99 = 7;
if (mUnderFrameCtrl[0].checkAnmEnd()) {
if (checkAnmEnd(mUnderFrameCtrl)) {
procSwimWaitInit(0);
}
+44 -44
View File
@@ -5,8 +5,9 @@
#include "d/actor/d_a_alink.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
static int daAlink_modelCallBack(J3DJoint* p_joint, int param_1);
static int daAlink_modelCallBack(J3DJoint* i_joint, int param_1);
static int daAlink_headModelCallBack(J3DJoint* i_joint, int param_1);
static int daAlink_wolfModelCallBack(J3DJoint* i_joint, int param_1);
@@ -24,14 +25,6 @@ void daAlink_c::setArcName(BOOL i_isWolf) {
}
}
inline bool checkCarvingWoodShieldEquip() {
return dComIfGs_getSelectEquipShield() == fpcNm_ITEM_WOOD_SHIELD;
}
inline bool checkShopWoodShieldEquip() {
return dComIfGs_getSelectEquipShield() == fpcNm_ITEM_SHIELD;
}
void daAlink_c::setShieldArcName() {
if (checkCarvingWoodShieldEquip() || !checkShieldGet()) {
mShieldArcName = l_cWShdArcName;
@@ -44,8 +37,13 @@ void daAlink_c::setShieldArcName() {
void daAlink_c::setOriginalHeap(JKRExpHeap** i_ppheap, u32 i_size) {
if (*i_ppheap == NULL) {
*i_ppheap =
JKRExpHeap::create(ROUND(i_size, 0x10) + 0xA0, mDoExt_getGameHeap(), true);
u32 var_r29 = 0x90;
u32 var_r28 = 0x10;
u32 size = ROUND(i_size, 16);
JKRHeap* parent = mDoExt_getGameHeap();
JKRExpHeap* heap = JKRExpHeap::create(size + (var_r29 + var_r28), parent, true);
*i_ppheap = heap;
}
}
@@ -91,7 +89,8 @@ int daAlink_c::loadModelDVD() {
mClothesChangeWaitTimer = 0;
changeLink(1);
} else {
if (dComIfG_resLoad(&mPhaseReq, mArcName, mpArcHeap) == cPhs_COMPLEATE_e) {
int phase_state = dComIfG_resLoad(&mPhaseReq, mArcName, mpArcHeap);
if (phase_state == cPhs_COMPLEATE_e) {
mClothesChangeWaitTimer = 0;
if (mProcID == PROC_METAMORPHOSE || mProcID == PROC_METAMORPHOSE_ONLY) {
@@ -134,8 +133,8 @@ int daAlink_c::loadShieldModelDVD() {
mpShieldArcHeap->freeAll();
setShieldArcName();
} else if (mShieldChangeWaitTimer == 1) {
if (dComIfG_resLoad(&mShieldPhaseReq, mShieldArcName, mpShieldArcHeap) == cPhs_COMPLEATE_e)
{
int phase_state = dComIfG_resLoad(&mShieldPhaseReq, mShieldArcName, mpShieldArcHeap);
if (phase_state == cPhs_COMPLEATE_e) {
mShieldChangeWaitTimer = 0;
setShieldModel();
} else {
@@ -151,6 +150,7 @@ int daAlink_c::loadShieldModelDVD() {
void daAlink_c::changeModelDataDirect(int param_0) {
u16 i;
J3DModelData* modelData;
field_0x064C = mpLinkModel->getModelData();
field_0x06c0 = mpLinkFaceModel->getModelData();
@@ -164,14 +164,14 @@ void daAlink_c::changeModelDataDirect(int param_0) {
field_0x064C->getJointNodePointer(i)->setCallBack(daAlink_modelCallBack);
}
J3DModelData* head_modelData = mpLinkHatModel->getModelData();
for (i = 1; i < head_modelData->getJointNum(); i++) {
head_modelData->getJointNodePointer(i)->setCallBack(daAlink_headModelCallBack);
modelData = mpLinkHatModel->getModelData();
for (i = 1; i < modelData->getJointNum(); i++) {
modelData->getJointNodePointer(i)->setCallBack(daAlink_headModelCallBack);
}
if (param_0) {
if (field_0x2154 != NULL) {
field_0x06c0->entryTexNoAnimator(field_0x2154);
if (mpFaceBtp != NULL) {
field_0x06c0->entryTexNoAnimator(mpFaceBtp);
}
if (mpFaceBtk != NULL) {
@@ -188,14 +188,14 @@ void daAlink_c::changeModelDataDirect(int param_0) {
field_0x064C->getJointNodePointer(i)->setCallBack(NULL);
}
J3DModelData* head_modelData = mpLinkHatModel->getModelData();
for (i = 1; i < head_modelData->getJointNum(); i++) {
head_modelData->getJointNodePointer(i)->setCallBack(NULL);
modelData = mpLinkHatModel->getModelData();
for (i = 1; i < modelData->getJointNum(); i++) {
modelData->getJointNodePointer(i)->setCallBack(NULL);
}
if (!checkNoResetFlg2(daPy_FLG2(FLG2_UNK_100000 | FLG2_UNK_80000))) {
for (i = 6; i < 8; i++) {
head_modelData->getJointNodePointer(i)->setCallBack(daAlink_headModelCallBack);
modelData->getJointNodePointer(i)->setCallBack(daAlink_headModelCallBack);
}
}
}
@@ -217,8 +217,8 @@ void daAlink_c::changeModelDataDirectWolf(int param_0) {
}
if (param_0) {
if (field_0x2154 != NULL) {
field_0x06c0->entryTexNoAnimator(field_0x2154);
if (mpFaceBtp != NULL) {
field_0x06c0->entryTexNoAnimator(mpFaceBtp);
}
if (mpFaceBtk != NULL) {
@@ -240,61 +240,61 @@ void daAlink_c::initStatusWindow() {
onNoResetFlg2(FLG2_STATUS_WINDOW_DRAW);
void* tmpBuffer = new (0x20) void*[0x500];
JUT_ASSERT(0x18A, tmpBuffer);
JUT_ASSERT(394, tmpBuffer);
u16 var_r28, var_r31, var_r30;
u16 bckResIdx, btpResIdx, btkResIdx;
if (checkWolf()) {
var_r28 = 0x2FF;
var_r31 = 0x408;
var_r30 = 0x3A7;
bckResIdx = dRes_ID_ALANM_BCK_WL_WAITA_e;
btpResIdx = dRes_ID_ALANM_BTP_WL_FA_e;
btkResIdx = dRes_ID_ALANM_BTK_WL_FA_e;
changeModelDataDirectWolf(0);
} else {
var_r28 = 0x26A;
var_r31 = 0x3AF;
var_r30 = 0x32C;
bckResIdx = dRes_ID_ALANM_BCK_WAITS_e;
btpResIdx = dRes_ID_ALANM_BTP_FA_e;
btkResIdx = dRes_ID_ALANM_BTK_FA_e;
if (checkZoraWearAbility() && !checkZoraWearMaskDraw()) {
field_0x06f0->hide();
}
changeModelDataDirect(0);
}
JKRReadIdxResource(tmpBuffer, 0x1400, var_r28, dComIfGp_getAnmArchive());
JKRReadIdxResource(tmpBuffer, 0x1400, bckResIdx, dComIfGp_getAnmArchive());
m_sWindowBck = new mDoExt_bckAnm();
JUT_ASSERT(0x1AC, m_sWindowBck);
JUT_ASSERT(428, m_sWindowBck);
J3DAnmTransform* bck = (J3DAnmTransform*)J3DAnmLoaderDataBase::load(tmpBuffer, J3DLOADER_UNK_FLAG0);
if (!m_sWindowBck->init(bck, 1, 2, 1.0f, 0, -1, false)) {
if (!m_sWindowBck->init((J3DAnmTransform*)J3DAnmLoaderDataBase::load(tmpBuffer), TRUE, 2, 1.0f, 0, -1, false)) {
JUT_ASSERT(433, FALSE);
}
tmpBuffer = new (0x20) void*[0x100];
JUT_ASSERT(0x1B5, tmpBuffer);
JUT_ASSERT(437, tmpBuffer);
JKRReadIdxResource(tmpBuffer, 0x400, var_r31, dComIfGp_getAnmArchive());
JKRReadIdxResource(tmpBuffer, 0x400, btpResIdx, dComIfGp_getAnmArchive());
J3DAnmTexPattern* btp = (J3DAnmTexPattern*)J3DAnmLoaderDataBase::load(tmpBuffer, J3DLOADER_UNK_FLAG0);
btp->setFrame(0.0f);
btp->searchUpdateMaterialID(field_0x06c0);
field_0x06c0->entryTexNoAnimator(btp);
tmpBuffer = new (0x20) void*[0x100];
JUT_ASSERT(0x1C1, tmpBuffer);
JUT_ASSERT(449, tmpBuffer);
JKRReadIdxResource(tmpBuffer, 0x400, var_r30, dComIfGp_getAnmArchive());
JKRReadIdxResource(tmpBuffer, 0x400, btkResIdx, dComIfGp_getAnmArchive());
J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)J3DAnmLoaderDataBase::load(tmpBuffer, J3DLOADER_UNK_FLAG0);
btk->setFrame(0.0f);
btk->searchUpdateMaterialID(field_0x06c0);
field_0x06c0->entryTexMtxAnimator(btk);
}
void daAlink_c::statusWindowExecute(const cXyz* i_pos, s16 i_angle) {
if (loadModelDVD()) {
if (mSwordChangeWaitTimer != 0) {
mSwordChangeWaitTimer--;
}
loadShieldModelDVD();
setSelectEquipItem(1);
setSelectEquipItem(TRUE);
if (mSwordChangeWaitTimer >= 30) {
mSwordChangeWaitTimer = 0;
@@ -367,7 +367,7 @@ void daAlink_c::resetStatusWindow() {
setMatrix();
mpLinkModel->calc();
onNoResetFlg2(FLG2_STATUS_WINDOW_DRAW);
setSelectEquipItem(0);
setSelectEquipItem(FALSE);
if (checkWolf()) {
setWolfItemMatrix();
+24 -22
View File
@@ -11,6 +11,8 @@
#include "d/actor/d_a_obj_yobikusa.h"
static fopAc_ac_c* daAlink_searchWhistle(fopAc_ac_c* i_actor, void* i_data) {
UNUSED(i_data);
if (daAlink_getAlinkActorClass()->getGrassHowlEventActor() == fopAcM_GetName(i_actor)) {
return i_actor;
}
@@ -19,6 +21,8 @@ static fopAc_ac_c* daAlink_searchWhistle(fopAc_ac_c* i_actor, void* i_data) {
}
static fopAc_ac_c* daAlink_searchHawk(fopAc_ac_c* i_actor, void* i_data) {
UNUSED(i_data);
if (fopAcM_GetName(i_actor) == PROC_NPC_TK) {
return i_actor;
}
@@ -26,7 +30,7 @@ static fopAc_ac_c* daAlink_searchHawk(fopAc_ac_c* i_actor, void* i_data) {
return NULL;
}
void daAlink_c::setGrassWhistleModel(int modelType) {
void daAlink_c::setGrassWhistleModel(int i_modelType) {
static const char* grassWhistleArcName[] = {
"J_Tobi",
"J_Umak",
@@ -38,8 +42,8 @@ void daAlink_c::setGrassWhistleModel(int modelType) {
JKRHeap* prev_heap = setItemHeap();
J3DModelData* modeldata = (J3DModelData*)dComIfG_getObjectRes(grassWhistleArcName[modelType],
grassWhistleIdx[modelType]);
J3DModelData* modeldata = (J3DModelData*)dComIfG_getObjectRes(grassWhistleArcName[i_modelType],
grassWhistleIdx[i_modelType]);
mHeldItemModel = mDoExt_J3DModel__create(modeldata, 0x80000, 0x11000084);
mDoExt_setCurrentHeap(prev_heap);
@@ -50,7 +54,7 @@ void daAlink_c::setGrassWhistleModel(int modelType) {
void daAlink_c::setHorseWhistleModel() {
JKRHeap* prev_heap = setItemHeap();
mHeldItemModel = initModel(loadAramBmd(0x31A, 0x3000), 0);
mHeldItemModel = initModel(loadAramBmd(dRes_ID_ALANM_BMD_AL_PEND_e, 0x3000), 0);
mDoExt_setCurrentHeap(prev_heap);
mEquipItem = fpcNm_ITEM_HORSE_FLUTE;
@@ -68,7 +72,7 @@ int daAlink_c::procGrassWhistleGetInit() {
field_0x2f98 = 4;
setSingleAnimeParam(ANM_BOTTLE_SWING_DOWN, &mpHIO->mItem.mBottle.m.mSwingDownAnm);
field_0x2f92 = 0xFE;
mLeftHandIndex = 0xFE;
field_0x280c.setData(field_0x27f4);
daObjYobikusa_c* yobikusa_p = (daObjYobikusa_c*)field_0x27f4;
@@ -83,11 +87,10 @@ int daAlink_c::procGrassWhistleGetInit() {
return 1;
}
int daAlink_c::procGrassWhistleGet() {
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
if (frameCtrl_p->checkAnmEnd()) {
if (checkAnmEnd(frameCtrl_p)) {
procGrassWhistleWaitInit(mProcVar2.field_0x300c, mProcVar3.field_0x300e,
mProcVar4.field_0x3010, mProcVar5.field_0x3012, &field_0x37c8);
} else if (mEquipItem == fpcNm_ITEM_NONE && frameCtrl_p->getFrame() >= 9.0f) {
@@ -104,14 +107,14 @@ int daAlink_c::procGrassWhistleGet() {
int daAlink_c::procGrassWhistleWaitInit(int param_0, int param_1, int param_2, s16 param_3,
cXyz* param_4) {
u16 var_r6;
u16 hindFlag;
if (param_0 == 3) {
var_r6 = 0xFFFF;
hindFlag = 0xFFFF;
} else {
var_r6 = 0xFFF9;
hindFlag = 0xFFF9;
}
if (!dComIfGp_event_compulsory(this, NULL, var_r6)) {
if (!dComIfGp_event_compulsory(this, NULL, hindFlag)) {
return checkNextAction(0);
}
@@ -167,7 +170,6 @@ int daAlink_c::procGrassWhistleWaitInit(int param_0, int param_1, int param_2, s
return 1;
}
int daAlink_c::procGrassWhistleWait() {
if (mProcVar5.field_0x3012 != 0) {
if (checkEndMessage(field_0x32cc)) {
@@ -216,16 +218,16 @@ int daAlink_c::procGrassWhistleWait() {
return procWaitInit();
}
setFaceBasicTexture(FTANM_UNK_0);
setFaceBasicTexture(FTANM_0);
mProcVar5.field_0x3012 = 1;
return 1;
}
}
setGrassCancelStatus(0);
setGrassCancelStatus(BUTTON_STATUS_NONE);
} else if (checkAnmEnd(&mUpperFrameCtrl[2])) {
setGrassCancelStatus(0x12);
setDoStatus(0x2C);
setGrassCancelStatus(BUTTON_STATUS_BACK);
setDoStatus(BUTTON_STATUS_BLOW);
if (mProcVar2.field_0x300c == 3 || doTrigger()) {
setSingleAnimeBaseMorf(ANM_GRASS_WHISTLE_PLAY, 0.0f);
@@ -256,7 +258,7 @@ int daAlink_c::procGrassWhistleWait() {
}
} else {
#if VERSION != VERSION_SHIELD_DEBUG
setGrassCancelStatus(0);
setGrassCancelStatus(BUTTON_STATUS_NONE);
#endif
}
@@ -280,13 +282,13 @@ int daAlink_c::procCoHorseCallWaitInit(int param_0) {
setSingleAnimeBaseSpeed(ANM_WAIT, mpHIO->mMove.m.mWaitAnmSpeed, 3.0f);
}
setGrassCancelStatus(0);
setGrassCancelStatus(BUTTON_STATUS_NONE);
dComIfGp_setPlayerStatus1(0, 0x4000000);
return 1;
}
int daAlink_c::procCoHorseCallWait() {
setGrassCancelStatus(0);
setGrassCancelStatus(BUTTON_STATUS_NONE);
mProcVar4.field_0x3010--;
if (mProcVar4.field_0x3010 > 2 && dComIfGp_getHorseActor() != NULL) {
@@ -322,7 +324,7 @@ int daAlink_c::procHawkCatchInit() {
}
int daAlink_c::procHawkCatch() {
if (mUnderFrameCtrl[0].checkAnmEnd()) {
if (checkAnmEnd(mUnderFrameCtrl)) {
dComIfGp_evmng_cutEnd(mAlinkStaffId);
procHawkSubjectInit();
}
@@ -360,8 +362,8 @@ int daAlink_c::procHawkSubject() {
dComIfGp_evmng_cutEnd(mAlinkStaffId);
} else {
fopAc_ac_c* temp_r29 = field_0x280c.getActor();
setGrassCancelStatus(0x12);
setDoStatus(0x31);
setGrassCancelStatus(BUTTON_STATUS_BACK);
setDoStatus(BUTTON_STATUS_SET_FREE);
if (doTrigger()) {
mProcVar2.field_0x300c = 2;
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -2306,7 +2306,7 @@ static int daB_BQ_Execute(b_bq_class* i_this) {
dComIfG_Ccsp()->Set(&i_this->mCcCoreSph);
sp50 = a_this->eyePos;
if (daPy_getPlayerActorClass()->getCutType() != 0x27 && i_this->mAction >= ACTION_DAMAGE) {
if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_DOWN && i_this->mAction >= ACTION_DAMAGE) {
sp50.y = player->current.pos.y + 70.0f + KREG_F(7);
} else {
sp50.x -= 20000.0f;
+1 -1
View File
@@ -1813,7 +1813,7 @@ void daB_DR_c::executeWeekHit() {
dComIfGp_particle_set(0x8999, &sp50, NULL, NULL);
dComIfGp_particle_set(0x899A, &sp50, NULL, NULL);
if (health <= 0 || player->getCutType() == 0x20) {
if (health <= 0 || player->getCutType() == daPy_py_c::CUT_TYPE_FINISH_STAB) {
health = 0;
mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x20);
+2 -2
View File
@@ -3300,8 +3300,8 @@ static void demo_camera(b_gnd_class* i_this) {
sp114.y = 0.0f;
sp114.z = 135.0f;
MtxPosition(&sp114, &sp108);
a_this->current.pos.x = sp108.x + player->field_0x5f8.x;
a_this->current.pos.z = sp108.z + player->field_0x5f8.z;
a_this->current.pos.x = sp108.x + player->mViewerCurrentPos.x;
a_this->current.pos.z = sp108.z + player->mViewerCurrentPos.z;
a_this->current.angle.y = player->shape_angle.y + 0x8000;
spF0 = a_this->current.pos + ((*player->getViewerCurrentPosP() - a_this->current.pos) * 0.5f);
+2 -2
View File
@@ -1115,8 +1115,8 @@ void daB_MGN_c::damage_check() {
dComIfGs_onOneZoneSwitch(6, fopAcM_GetRoomNo(this));
}
if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_WOLF_ATTACK) && player->getCutType() != 44 &&
player->getCutType() != 45 && player->onWolfEnemyHangBite(this))
if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_WOLF_ATTACK) && player->getCutType() != daPy_py_c::CUT_TYPE_WOLF_B_LEFT &&
player->getCutType() != daPy_py_c::CUT_TYPE_WOLF_B_RIGHT && player->onWolfEnemyHangBite(this))
{
setActionMode(ACTION_DOWN_BITE_DAMAGE_e, 0);
return;
+6 -6
View File
@@ -1121,7 +1121,7 @@ u32 daB_TN_c::getCutType() {
case daPy_py_c::CUT_TYPE_NM_RIGHT:
case daPy_py_c::CUT_TYPE_FINISH_LEFT:
case daPy_py_c::CUT_TYPE_FINISH_VERTICAL:
case daPy_py_c::CUT_TYPE_DASH_UNK_26:
case daPy_py_c::CUT_TYPE_DASH_RIGHT:
return rv | 0x12;
case daPy_py_c::CUT_TYPE_NM_STAB:
@@ -1129,7 +1129,7 @@ u32 daB_TN_c::getCutType() {
return rv | 0x02;
case daPy_py_c::CUT_TYPE_NM_LEFT:
case daPy_py_c::CUT_TYPE_DASH_UNK_25:
case daPy_py_c::CUT_TYPE_DASH_LEFT:
return rv | 0x21;
case daPy_py_c::CUT_TYPE_COMBO_STAB:
@@ -1344,8 +1344,8 @@ void daB_TN_c::damage_check() {
if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) {
return;
} else if (mActionMode1 < 8) {
if (cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_25 ||
cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_26 ||
if (cut_type == daPy_py_c::CUT_TYPE_DASH_LEFT ||
cut_type == daPy_py_c::CUT_TYPE_DASH_RIGHT ||
mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK))
{
setShieldEffect(&dStack_160);
@@ -1403,8 +1403,8 @@ void daB_TN_c::damage_check() {
if (mTimer10 != 0 ||
abs((s16)(fopAcM_searchPlayerAngleY(this) - shape_angle.y)) < 0x3000 ||
cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_25 ||
cut_type == daPy_py_c::CUT_TYPE_DASH_UNK_26)
cut_type == daPy_py_c::CUT_TYPE_DASH_LEFT ||
cut_type == daPy_py_c::CUT_TYPE_DASH_RIGHT)
{
field_0xaa8 = false;
setShieldEffect(&dStack_160);
+1 -1
View File
@@ -176,7 +176,7 @@ static void damage_check(e_bu_class* i_this) {
if (i_this->atInfo.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) {
actor->speedF = 0.0f;
i_this->head_rot_y = i_this->atInfo.mHitDirection.y;
} else if (player->getCutType() == 10 && player->checkCutJumpCancelTurn()) {
} else if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP && player->checkCutJumpCancelTurn()) {
i_this->invulnerabilityTimer = NREG_S(7) + 3;
actor->speedF = 0.0f;
} else {
+1 -1
View File
@@ -1301,7 +1301,7 @@ int daE_HM_c::Execute() {
cXyz bindEffectSize(1.0f, 1.0f, 1.0f);
u32 cutType = daPy_getPlayerActorClass()->getCutType();
if (cutType == 0x36 && mSph.ChkAtSet() != 0) {
if (cutType == daPy_py_c::CUT_TYPE_WOLF_LOCK && mSph.ChkAtSet() != 0) {
mSph.OffAtSetBit();
field_0x5ac = 1;
} else if (field_0x5ac != 0) {
+4 -4
View File
@@ -595,10 +595,10 @@ static void action(e_mm_mt_class* i_this) {
fopAc_ac_c* local_a4 = at_power_check(&i_this->m_atInfo);
if (i_this->m_atInfo.mHitType == 1) {
if (daPy_getPlayerActorClass()->getCutType() == 8 ||
daPy_getPlayerActorClass()->getCutType() == 9 ||
daPy_getPlayerActorClass()->getCutType() == 23 ||
daPy_getPlayerActorClass()->getCutType() == 24) {
if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT ||
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_UNK_9 ||
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT ||
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) {
actor->speedF = cM_rndF(10.0f) + 40.0f + TREG_F(16);
i_this->m_spin = (s16)(cM_rndF(2000.0f) + 5500.0f);
i_this->field_0x69C = (s16)(cM_rndF(1000.0f) + 5000.0f);
+4 -4
View File
@@ -613,13 +613,13 @@ int daE_OC_c::getCutType() {
case daPy_py_c::CUT_TYPE_NM_STAB:
case daPy_py_c::CUT_TYPE_NM_RIGHT:
case daPy_py_c::CUT_TYPE_FINISH_STAB:
case daPy_py_c::CUT_TYPE_DASH_UNK_26:
case daPy_py_c::CUT_TYPE_DASH_RIGHT:
case daPy_py_c::CUT_TYPE_NM_VERTICAL:
return 0;
case daPy_py_c::CUT_TYPE_COMBO_STAB:
case daPy_py_c::CUT_TYPE_HORSE_UNK_22:
case daPy_py_c::CUT_TYPE_HORSE_UNK_23:
case daPy_py_c::CUT_TYPE_DASH_UNK_25:
case daPy_py_c::CUT_TYPE_HORSE_LEFT_A:
case daPy_py_c::CUT_TYPE_HORSE_LEFT_B:
case daPy_py_c::CUT_TYPE_DASH_LEFT:
case daPy_py_c::CUT_TYPE_NM_LEFT:
return 1;
default:
+1 -1
View File
@@ -684,7 +684,7 @@ void daE_OctBg_c::damage_check() {
field_0x9f8.ChkAtHit())
{
if (field_0x9f8.ChkAtShieldHit()) {
if (daPy_getPlayerActorClass()->getCutType() == 41) {
if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
setAction(&daE_OctBg_c::damage);
return;
}
+4 -4
View File
@@ -265,14 +265,14 @@ u8 daE_PZ_c::getCutType() {
case daPy_py_c::CUT_TYPE_NM_STAB:
case daPy_py_c::CUT_TYPE_NM_RIGHT:
case daPy_py_c::CUT_TYPE_FINISH_VERTICAL:
case daPy_py_c::CUT_TYPE_DASH_UNK_26:
case daPy_py_c::CUT_TYPE_DASH_RIGHT:
return 1;
case daPy_py_c::CUT_TYPE_NM_LEFT:
case daPy_py_c::CUT_TYPE_FINISH_LEFT:
case daPy_py_c::CUT_TYPE_COMBO_STAB:
case daPy_py_c::CUT_TYPE_HORSE_UNK_22:
case daPy_py_c::CUT_TYPE_HORSE_UNK_23:
case daPy_py_c::CUT_TYPE_DASH_UNK_25:
case daPy_py_c::CUT_TYPE_HORSE_LEFT_A:
case daPy_py_c::CUT_TYPE_HORSE_LEFT_B:
case daPy_py_c::CUT_TYPE_DASH_LEFT:
return 2;
default:
return 3;
+1 -1
View File
@@ -607,7 +607,7 @@ void daE_SB_c::ActionCheck() {
if ( (s16) (shape_angle.y - tgt_ang) > -0x3000 && (s16) (shape_angle.y - tgt_ang) < 0x3000) {
if (temp_r27 > 1U) {
Hit();
} else if (temp_r29 == 1 || temp_r29 == 10 || temp_r29 == 0x29 || dComIfGp_checkPlayerStatus0(0, 0x4000U)) {
} else if (temp_r29 == daPy_py_c::CUT_TYPE_NM_VERTICAL || temp_r29 == daPy_py_c::CUT_TYPE_JUMP || temp_r29 == daPy_py_c::CUT_TYPE_GUARD_ATTACK || dComIfGp_checkPlayerStatus0(0, 0x4000U)) {
Hanekaeri();
} else {
Hit();
+1 -1
View File
@@ -171,7 +171,7 @@ int daE_TT_c::getCutType() {
case daPy_py_c::CUT_TYPE_NM_VERTICAL:
case daPy_py_c::CUT_TYPE_NM_STAB:
case daPy_py_c::CUT_TYPE_NM_RIGHT:
case daPy_py_c::CUT_TYPE_DASH_UNK_26:
case daPy_py_c::CUT_TYPE_DASH_RIGHT:
return 0;
default:
+2 -2
View File
@@ -2759,7 +2759,7 @@ void daE_VA_c::executeOpaciDown() {
break;
}
if (player->getCutCount() > 1 || player->getCutType() == 10) {
if (player->getCutCount() > 1 || player->getCutType() == daPy_py_c::CUT_TYPE_JUMP) {
if (mFadeAwayTimer < 30) {
mFadeAwayTimer = 30;
}
@@ -2773,7 +2773,7 @@ void daE_VA_c::executeOpaciDown() {
void daE_VA_c::executeOpaciDownDamage() {
daPy_py_c* player = daPy_getPlayerActorClass();
if (player->getCutCount() > 1 || player->getCutType() == 10) {
if (player->getCutCount() > 1 || player->getCutType() == daPy_py_c::CUT_TYPE_JUMP) {
if (mFadeAwayTimer < 30) {
mFadeAwayTimer = 30;
}
+1 -1
View File
@@ -2994,7 +2994,7 @@ void daE_YM_c::checkFrinedSamePos() {
void daE_YM_c::action() {
int reg_r27 = 0; // set but not used
if (daPy_getPlayerActorClass()->getCutType() == 0x36) {
if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_WOLF_LOCK) {
reg_r27 = 1;
field_0x700 = 0;
}
+1 -1
View File
@@ -30,7 +30,7 @@ static BOOL d_kytag12_cut_normal_check() {
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
BOOL var_r3 = true;
if (player != NULL &&
(player->getCutType() == 0x28 || player->getCutType() == daPy_py_c::CUT_TYPE_GUARD_ATTACK))
(player->getCutType() == daPy_py_c::CUT_TYPE_UNK_28 || player->getCutType() == daPy_py_c::CUT_TYPE_GUARD_ATTACK))
{
var_r3 = false;
}
+2 -2
View File
@@ -332,7 +332,7 @@ int daObj_Kanban2_c::getKanbanCutType() {
case daPy_py_c::CUT_TYPE_NM_VERTICAL:
case daPy_py_c::CUT_TYPE_NM_RIGHT:
case daPy_py_c::CUT_TYPE_FINISH_LEFT:
case daPy_py_c::CUT_TYPE_DASH_UNK_26:
case daPy_py_c::CUT_TYPE_DASH_RIGHT:
if (angle_to_player < 0x3800) {
return DAMAGE_TLBR_DIAGONAL;
}
@@ -351,7 +351,7 @@ int daObj_Kanban2_c::getKanbanCutType() {
}
return DAMAGE_HORIZONTAL_SPLIT;
case daPy_py_c::CUT_TYPE_NM_LEFT:
case daPy_py_c::CUT_TYPE_DASH_UNK_25:
case daPy_py_c::CUT_TYPE_DASH_LEFT:
return DAMAGE_HORIZONTAL_SPLIT;
case daPy_py_c::CUT_TYPE_TURN_RIGHT:
case daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT:
+126 -111
View File
@@ -33,8 +33,7 @@ void daPy_frameCtrl_c::updateFrame() {
offNowSetFlg();
}
void daPy_frameCtrl_c::setFrameCtrl(u8 i_attribute, s16 i_start, s16 i_end, f32 i_rate,
f32 i_frame) {
void daPy_frameCtrl_c::setFrameCtrl(u8 i_attribute, s16 i_start, s16 i_end, f32 i_rate, f32 i_frame) {
setAttribute(i_attribute);
setEnd(i_end);
setRate(i_rate);
@@ -50,15 +49,15 @@ void daPy_frameCtrl_c::setFrameCtrl(u8 i_attribute, s16 i_start, s16 i_end, f32
offEndFlg();
}
void daPy_boomerangMove_c::initOffset(cXyz const* i_offset) {
void daPy_boomerangMove_c::initOffset(const cXyz* i_pos) {
daBoomerang_c* boomerang_p = daPy_py_c::getThrowBoomerangActor();
if (boomerang_p != NULL) {
bgCheckAfterOffset(i_offset);
bgCheckAfterOffset(i_pos);
boomerang_p->onWindCatch();
} else {
field_0x4 = cM_rndF(70.0f) + 30.0f;
field_0x8 = cM_rndF(50.0f) + 50.0f;
m_offsetY = cM_rndF(70.0f) + 30.0f;
m_offsetXZ = cM_rndF(50.0f) + 50.0f;
field_0x2 = cM_rndF(65536.0f);
}
@@ -71,20 +70,20 @@ s16 daPy_boomerangMove_c::m_dropAngleY;
s16 daPy_boomerangMove_c::m_eventKeepFlg;
int daPy_boomerangMove_c::posMove(cXyz* param_0, s16* param_1, fopAc_ac_c* param_2, s16 param_3) {
int daPy_boomerangMove_c::posMove(cXyz* o_pos, s16* o_rotY, fopAc_ac_c* i_objActor, s16 i_rotStep) {
daBoomerang_c* boomerang_p = daPy_py_c::getThrowBoomerangActor();
field_0x2 -= param_3;
*param_1 -= param_3;
field_0x2 -= i_rotStep;
*o_rotY -= i_rotStep;
if (field_0x8 > 300.0f) {
field_0x8 = 300.0f;
if (m_offsetXZ > 300.0f) {
m_offsetXZ = 300.0f;
}
if (field_0x4 < -700.0f) {
field_0x4 = -700.0f;
} else if (field_0x4 > 50.0f) {
field_0x4 = 50.0f;
if (m_offsetY < -700.0f) {
m_offsetY = -700.0f;
} else if (m_offsetY > 50.0f) {
m_offsetY = 50.0f;
}
if (boomerang_p != NULL) {
@@ -98,39 +97,39 @@ int daPy_boomerangMove_c::posMove(cXyz* param_0, s16* param_1, fopAc_ac_c* param
return 0;
}
param_0->set(boomerang_p->current.pos.x + field_0x8 * cM_ssin(field_0x2),
boomerang_p->current.pos.y + field_0x4,
boomerang_p->current.pos.z + field_0x8 * cM_scos(field_0x2));
o_pos->set(boomerang_p->current.pos.x + m_offsetXZ * cM_ssin(field_0x2),
boomerang_p->current.pos.y + m_offsetY,
boomerang_p->current.pos.z + m_offsetXZ * cM_scos(field_0x2));
boomerang_p->onWindCatch();
return 1;
}
daAlink_c* player_p = daAlink_getAlinkActorClass();
if ((param_2 == NULL || !player_p->checkBoomerangCarry(param_2)) &&
if ((i_objActor == NULL || !player_p->checkBoomerangCarry(i_objActor)) &&
(m_eventKeepFlg == 0 || field_0x0 != 0))
{
s16 tmp = (m_dropAngleY + player_p->shape_angle.y) + cM_rndF(2048.0f);
param_0->x = player_p->current.pos.x + field_0x8 * cM_ssin(tmp);
param_0->z = player_p->current.pos.z + field_0x8 * cM_scos(tmp);
o_pos->x = player_p->current.pos.x + m_offsetXZ * cM_ssin(tmp);
o_pos->z = player_p->current.pos.z + m_offsetXZ * cM_scos(tmp);
m_dropAngleY += 0x2000;
}
return 0;
}
void daPy_boomerangMove_c::bgCheckAfterOffset(cXyz const* i_offset) {
void daPy_boomerangMove_c::bgCheckAfterOffset(const cXyz* i_pos) {
daBoomerang_c* boomerang_p = daPy_py_c::getThrowBoomerangActor();
if (boomerang_p != NULL) {
field_0x4 = i_offset->y - boomerang_p->current.pos.y;
field_0x8 = boomerang_p->current.pos.absXZ(*i_offset);
field_0x2 = cM_atan2s(i_offset->x - boomerang_p->current.pos.x,
i_offset->z - boomerang_p->current.pos.z);
m_offsetY = i_pos->y - boomerang_p->current.pos.y;
m_offsetXZ = boomerang_p->current.pos.absXZ(*i_pos);
field_0x2 = cM_atan2s(i_pos->x - boomerang_p->current.pos.x,
i_pos->z - boomerang_p->current.pos.z);
}
}
u32 daPy_py_c::setParamData(int param_0, int param_1, int param_2, int param_3) {
return param_3 | (param_0 & 0x3F | (param_1 & 0x1F) << 0xC | param_2 << 0x18);
u32 daPy_py_c::setParamData(int i_roomNo, int i_mode, int param_2, int param_3) {
return (i_roomNo & 0x3F) | (i_mode & 0x1F) << 0xC | ((param_2 & 0xFF) << 0x18) | param_3;
}
BOOL daPy_py_c::checkFishingRodItem(int i_itemNo) {
@@ -142,16 +141,23 @@ BOOL daPy_py_c::checkBombItem(int i_itemNo) {
}
BOOL daPy_py_c::checkBottleItem(int i_itemNo) {
return (i_itemNo >= fpcNm_ITEM_EMPTY_BOTTLE && i_itemNo <= fpcNm_ITEM_FAIRY) || i_itemNo == fpcNm_ITEM_BEE_CHILD ||
i_itemNo == fpcNm_ITEM_WORM || i_itemNo == fpcNm_ITEM_FAIRY_DROP || i_itemNo == fpcNm_ITEM_CHUCHU_BLACK ||
(i_itemNo >= fpcNm_ITEM_CHUCHU_RARE && i_itemNo <= fpcNm_ITEM_LV3_SOUP);
return (i_itemNo >= fpcNm_ITEM_EMPTY_BOTTLE && i_itemNo <= fpcNm_ITEM_FAIRY)
|| i_itemNo == fpcNm_ITEM_BEE_CHILD
|| i_itemNo == fpcNm_ITEM_WORM
|| i_itemNo == fpcNm_ITEM_FAIRY_DROP
|| i_itemNo == fpcNm_ITEM_CHUCHU_BLACK
|| (i_itemNo >= fpcNm_ITEM_CHUCHU_RARE && i_itemNo <= fpcNm_ITEM_LV3_SOUP);
}
BOOL daPy_py_c::checkDrinkBottleItem(int i_itemNo) {
return (i_itemNo >= fpcNm_ITEM_RED_BOTTLE && i_itemNo <= fpcNm_ITEM_HALF_MILK_BOTTLE) || i_itemNo == fpcNm_ITEM_RED_BOTTLE_2 ||
i_itemNo == fpcNm_ITEM_UGLY_SOUP || i_itemNo == fpcNm_ITEM_HOT_SPRING || i_itemNo == fpcNm_ITEM_BEE_CHILD ||
i_itemNo == fpcNm_ITEM_CHUCHU_BLACK || i_itemNo == fpcNm_ITEM_FAIRY_DROP ||
(i_itemNo >= fpcNm_ITEM_CHUCHU_RARE && i_itemNo != fpcNm_ITEM_CHUCHU_YELLOW && i_itemNo <= fpcNm_ITEM_LV3_SOUP);
return (i_itemNo >= fpcNm_ITEM_RED_BOTTLE && i_itemNo <= fpcNm_ITEM_HALF_MILK_BOTTLE)
|| i_itemNo == fpcNm_ITEM_RED_BOTTLE_2
|| i_itemNo == fpcNm_ITEM_UGLY_SOUP
|| i_itemNo == fpcNm_ITEM_HOT_SPRING
|| i_itemNo == fpcNm_ITEM_BEE_CHILD
|| i_itemNo == fpcNm_ITEM_CHUCHU_BLACK
|| i_itemNo == fpcNm_ITEM_FAIRY_DROP
|| (i_itemNo >= fpcNm_ITEM_CHUCHU_RARE && i_itemNo != fpcNm_ITEM_CHUCHU_YELLOW && i_itemNo <= fpcNm_ITEM_LV3_SOUP);
}
BOOL daPy_py_c::checkOilBottleItem(int i_itemNo) {
@@ -171,9 +177,13 @@ BOOL daPy_py_c::checkHookshotItem(int i_itemNo) {
}
BOOL daPy_py_c::checkTradeItem(int i_itemNo) {
return (i_itemNo >= fpcNm_ITEM_LETTER && i_itemNo <= fpcNm_ITEM_IRIAS_PENDANT) || i_itemNo == fpcNm_ITEM_ANCIENT_DOCUMENT ||
i_itemNo == fpcNm_ITEM_AIR_LETTER || i_itemNo == fpcNm_ITEM_ANCIENT_DOCUMENT2 || i_itemNo == fpcNm_ITEM_RAFRELS_MEMO ||
i_itemNo == fpcNm_ITEM_TKS_LETTER || i_itemNo == fpcNm_ITEM_ASHS_SCRIBBLING;
return (i_itemNo >= fpcNm_ITEM_LETTER && i_itemNo <= fpcNm_ITEM_IRIAS_PENDANT)
|| i_itemNo == fpcNm_ITEM_ANCIENT_DOCUMENT
|| i_itemNo == fpcNm_ITEM_AIR_LETTER
|| i_itemNo == fpcNm_ITEM_ANCIENT_DOCUMENT2
|| i_itemNo == fpcNm_ITEM_RAFRELS_MEMO
|| i_itemNo == fpcNm_ITEM_TKS_LETTER
|| i_itemNo == fpcNm_ITEM_ASHS_SCRIBBLING;
}
BOOL daPy_py_c::checkDungeonWarpItem(int i_itemNo) {
@@ -181,11 +191,10 @@ BOOL daPy_py_c::checkDungeonWarpItem(int i_itemNo) {
}
void daPy_actorKeep_c::setActor() {
if (mID != -1) {
if (mID != fpcM_ERROR_PROCESS_ID_e) {
mActor = fopAcM_SearchByID(mID);
if (mActor == NULL) {
mID = -1;
mID = fpcM_ERROR_PROCESS_ID_e;
}
} else {
mActor = NULL;
@@ -202,7 +211,7 @@ void daPy_actorKeep_c::setData(fopAc_ac_c* i_actor) {
}
void daPy_actorKeep_c::clearData() {
mID = 0xffffffff;
mID = fpcM_ERROR_PROCESS_ID_e;
mActor = NULL;
}
@@ -243,25 +252,44 @@ void daPy_anmHeap_c::createHeap(daPy_anmHeap_c::daAlinkHEAP_TYPE i_heapType) {
size = 0xA0;
}
char* tmpWork;
mDoExt_transAnmBas* tmpTransBas;
J3DAnmTransformKey* tmpTrans;
J3DAnmTexPattern* tmpTp;
J3DAnmTextureSRTKey* tmpTk;
JKRHeap* tmp;
mAnimeHeap = mDoExt_createSolidHeapFromGameToCurrent(&tmp, size, 0x20);
if (i_heapType == 4) {
char* tmpWork = new char[size];
tmpWork = new char[size];
JUT_ASSERT(669, tmpWork != NULL);
} else if (i_heapType == 3) {
mDoExt_transAnmBas* tmpTransBas = new mDoExt_transAnmBas(NULL);
tmpTransBas = new mDoExt_transAnmBas(NULL);
JUT_ASSERT(672, tmpTransBas != NULL);
} else if (i_heapType == 0) {
J3DAnmTransformKey* tmpTrans = new J3DAnmTransformKey();
tmpTrans = new J3DAnmTransformKey();
JUT_ASSERT(675, tmpTrans != NULL);
} else if (i_heapType == 1) {
J3DAnmTexPattern* tmpTp = new J3DAnmTexPattern();
tmpTp = new J3DAnmTexPattern();
JUT_ASSERT(678, tmpTp != NULL);
} else {
J3DAnmTextureSRTKey* tmpTk = new J3DAnmTextureSRTKey();
tmpTk = new J3DAnmTextureSRTKey();
JUT_ASSERT(681, tmpTk != NULL);
}
mDoExt_setCurrentHeap(tmp);
mDoExt_adjustSolidHeap(mAnimeHeap);
}
void daPy_aramBufferCheck(void* i_buffer, u32 i_size) {
daPy_anmHeap_c* heap = (daPy_anmHeap_c*)i_buffer;
if (heap->mBufferSize > i_size) {
OS_REPORT("%x, %x\n", heap->mBufferSize, i_size);
JUT_ASSERT(699, FALSE);
}
}
void* daPy_anmHeap_c::loadData(u16 i_resId) {
static const char twglArcName[] = "TWGate_Lk";
static const char twgwArcName[] = "TWGate_Wf";
@@ -278,7 +306,11 @@ void* daPy_anmHeap_c::loadData(u16 i_resId) {
};
if (mArcNo == 0xFFFF) {
dComIfGp_getAnmArchive()->readIdxResource(mBuffer, mBufferSize, i_resId);
JKRReadIdxResource(mBuffer, mBufferSize, i_resId, dComIfGp_getAnmArchive());
#if DEBUG
daPy_aramBufferCheck(mBuffer, mBufferSize);
#endif
JKRHeap* heap = setAnimeHeap();
void* data = J3DAnmLoaderDataBase::load(mBuffer, J3DLOADER_UNK_FLAG0);
mDoExt_setCurrentHeap(heap);
@@ -293,48 +325,36 @@ void* daPy_anmHeap_c::loadData(u16 i_resId) {
}
void* daPy_anmHeap_c::loadDataIdx(u16 i_resID) {
void* data;
if (i_resID == mIdx && mArcNo == 0xFFFF) {
data = NULL;
} else {
mIdx = i_resID;
mArcNo = 0xFFFF;
if (mPriIdx == 0xFFFF) {
data = loadData(i_resID);
} else {
data = NULL;
}
return NULL;
}
return data;
mIdx = i_resID;
mArcNo = 0xFFFF;
if (mPriIdx == 0xFFFF) {
return loadData(i_resID);
}
return NULL;
}
void* daPy_anmHeap_c::loadDataPriIdx(u16 i_resID) {
void* data;
if (i_resID == mPriIdx || mArcNo != 0xFFFF) {
data = NULL;
} else {
mPriIdx = i_resID;
data = loadData(i_resID);
return NULL;
}
return data;
mPriIdx = i_resID;
return loadData(i_resID);
}
void* daPy_anmHeap_c::loadDataDemoRID(u16 i_resID, u16 i_arcNo) {
void* data;
if (i_resID == mIdx && i_arcNo == mArcNo) {
data = NULL;
} else {
mIdx = i_resID;
mArcNo = i_arcNo;
data = loadData(i_resID);
return NULL;
}
return data;
mIdx = i_resID;
mArcNo = i_arcNo;
return loadData(i_resID);
}
JKRHeap* daPy_anmHeap_c::setAnimeHeap() {
@@ -370,13 +390,11 @@ void daPy_sightPacket_c::draw() {
GXSetTevColor(GX_TEVREG0, reg0);
GXSetTevColor(GX_TEVREG1, reg1);
u8 tmp2 = mpImg->mipmapCount;
tmp2 = tmp2 > 1;
GXInitTexObj(&texObj, mpData, mpImg->width, mpImg->height, (GXTexFmt)mpImg->format,
(GXTexWrapMode)mpImg->wrapS, (GXTexWrapMode)mpImg->wrapT, (GXBool)(tmp2));
(GXTexWrapMode)mpImg->wrapS, (GXTexWrapMode)mpImg->wrapT, mpImg->mipmapCount > 1 ? GX_ENABLE : GX_DISABLE);
GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXLoadTexObj(&texObj, GX_TEXMAP0);
GXLoadPosMtxImm(field_0x14, GX_PNMTX0);
GXLoadPosMtxImm(mProjMtx, GX_PNMTX0);
GXSetCurrentMtx(0);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXCallDisplayList(l_sightDL, 0x80);
@@ -389,7 +407,7 @@ void daPy_sightPacket_c::setSight() {
mDoLib_project(&mPos, &proj);
mDoMtx_stack_c::transS(proj.x, proj.y, proj.z);
mDoMtx_stack_c::scaleM(32.0f, 32.0f, 32.0f);
mDoMtx_copy(mDoMtx_stack_c::get(), field_0x14);
mDoMtx_copy(mDoMtx_stack_c::get(), mProjMtx);
dComIfGd_set2DXlu(this);
}
@@ -399,19 +417,12 @@ void daPy_sightPacket_c::setSightImage(ResTIMG* i_img) {
}
BOOL daPy_py_c::checkMasterSwordEquip() {
u32 equipSword = dComIfGs_getSelectEquipSword();
bool isMasterSword = false;
if (equipSword == fpcNm_ITEM_MASTER_SWORD || equipSword == fpcNm_ITEM_LIGHT_SWORD) {
isMasterSword = true;
}
return isMasterSword;
u16 equipSword = dComIfGs_getSelectEquipSword();
return equipSword == fpcNm_ITEM_MASTER_SWORD || equipSword == fpcNm_ITEM_LIGHT_SWORD;
}
BOOL daPy_py_c::checkWoodShieldEquip() {
u16 equipShield = dComIfGs_getSelectEquipShield();
return equipShield == fpcNm_ITEM_WOOD_SHIELD || equipShield == fpcNm_ITEM_SHIELD;
}
@@ -427,13 +438,12 @@ int daPy_py_c::checkNowWolfEyeUp() {
return daAlink_getAlinkActorClass()->checkWolfEyeUp();
}
void daAlink_c::startRestartRoomFromOut(int param_0, u32 param_1, int param_2) {
startRestartRoom(param_1, param_2, param_0, dComIfGp_event_runCheck());
void daAlink_c::startRestartRoomFromOut(int i_dmgAmount, u32 i_mode, int param_2) {
startRestartRoom(i_mode, param_2, i_dmgAmount, dComIfGp_event_runCheck());
}
void daPy_py_c::forceRestartRoom(int param_0, u32 param_1, int param_2) {
daAlink_getAlinkActorClass()->startRestartRoomFromOut(param_0, param_1, param_2);
void daPy_py_c::forceRestartRoom(int i_dmgAmount, u32 i_mode, int param_2) {
daAlink_getAlinkActorClass()->startRestartRoomFromOut(i_dmgAmount, i_mode, param_2);
}
BOOL daPy_py_c::setFmChainPos(fopAc_ac_c* param_0, cXyz* param_1, int param_2) {
@@ -448,14 +458,13 @@ void daPy_py_c::setLookPos(cXyz* i_pos) {
daAlink_getAlinkActorClass()->setLookPosFromOut(i_pos);
}
void daPy_py_c::setPlayerSe(u32 i_sfxID) {
daAlink_getAlinkActorClass()->seStartOnlyReverb(i_sfxID);
void daPy_py_c::setPlayerSe(u32 i_soundID) {
daAlink_getAlinkActorClass()->seStartOnlyReverb(i_soundID);
}
bool daPy_py_c::linkGrabSubjectNoDraw(fopAc_ac_c* i_actor) {
return (fopAcM_checkCarryNow(i_actor) &&
daPy_getPlayerActorClass()->getGrabActorID() == fopAcM_GetID(i_actor)) &&
dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), 2);
return (fopAcM_checkCarryNow(i_actor) && daPy_getPlayerActorClass()->getGrabActorID() == fopAcM_GetID(i_actor))
&& dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), 2);
}
bool daPy_py_c::wolfGrabSubjectNoDraw(fopAc_ac_c* i_actor) {
@@ -463,7 +472,7 @@ bool daPy_py_c::wolfGrabSubjectNoDraw(fopAc_ac_c* i_actor) {
}
bool daPy_py_c::checkRoomRestartStart() {
u8 mode = getLastSceneMode();
u32 mode = getLastSceneMode();
if (mode == 4 || mode == 8 || mode == 5) {
return true;
}
@@ -472,9 +481,10 @@ bool daPy_py_c::checkRoomRestartStart() {
}
u32 daPy_py_c::checkCarryStartLightBallA() {
if (checkRoomRestartStart() || !dComIfGp_getStage() ||
!dComIfGp_getStage()->getStagInfo() ||
dStage_stagInfo_GetSaveTbl(dComIfGp_getStage()->getStagInfo()) != 0x17)
if (checkRoomRestartStart()
|| !dComIfGp_getStage()
|| !dComIfGp_getStage()->getStagInfo()
|| dStage_stagInfo_GetSaveTbl(dComIfGp_getStage()->getStagInfo()) != dStage_SaveTbl_LV8)
{
return FALSE;
}
@@ -483,9 +493,10 @@ u32 daPy_py_c::checkCarryStartLightBallA() {
}
u32 daPy_py_c::checkCarryStartLightBallB() {
if (checkRoomRestartStart() || !dComIfGp_getStage() ||
!dComIfGp_getStage()->getStagInfo() ||
dStage_stagInfo_GetSaveTbl(dComIfGp_getStage()->getStagInfo()) != 0x17)
if (checkRoomRestartStart()
|| !dComIfGp_getStage()
|| !dComIfGp_getStage()->getStagInfo()
|| dStage_stagInfo_GetSaveTbl(dComIfGp_getStage()->getStagInfo()) != dStage_SaveTbl_LV8)
{
return FALSE;
}
@@ -516,22 +527,25 @@ bool daPy_py_c::checkBoomerangCharge() {
}
bool daPy_py_c::checkBoomerangChargeTime() {
return 0;
return daAlink_getAlinkActorClass()->checkBoomerangChargeNow();
}
daBoomerang_c* daPy_py_c::getThrowBoomerangActor() {
return static_cast<daBoomerang_c*>(
daAlink_getAlinkActorClass()->getThrowBoomerangAcKeep()->getActor());
return static_cast<daBoomerang_c*>(daAlink_getAlinkActorClass()->getThrowBoomerangAcKeep()->getActor());
}
void daPy_py_c::cancelBoomerangLockActor(fopAc_ac_c* i_actor) {
daAlink_getAlinkActorClass()->cancelBoomerangLock(i_actor);
}
void daPy_py_c::setPlayerDamage(int i_dmgAmount, int i_setDmgTimer) {
void daPy_py_c::setPlayerDamage(int i_dmgAmount, BOOL i_setDmgTimer) {
daAlink_getAlinkActorClass()->setDamagePoint(i_dmgAmount, FALSE, i_setDmgTimer, 0);
}
BOOL daPy_py_c::checkAcceptDungeonWarp() {
return daAlink_getAlinkActorClass()->checkAcceptDungeonWarpAlink(1);
}
void daPy_py_c::setMidnaMotionNum(int i_motionNum) {
if (m_midnaActor != NULL) {
m_midnaActor->setMotionNum(i_motionNum);
@@ -563,5 +577,6 @@ int daPy_addCalcShort(s16* i_value, s16 i_target, s16 i_scale, s16 i_maxStep, s1
}
}
}
return i_target - *i_value;
}
+1 -1
View File
@@ -68,7 +68,7 @@ int daSpinner_c::create() {
mAcchCir[0].SetWall(50.01f, 58.0f);
mAcchCir[1].SetWall(129.99f, 35.0f);
mAcchCir[2].SetWall(player->field_0x598, 35.0f);
mAcchCir[2].SetWall(player->mHeight, 35.0f);
mPaPo.init(&mAcch, 85.0f, 85.0f);
+1 -1
View File
@@ -188,7 +188,7 @@ void daTagKagoFall_c::actionWaitFall() {
if (dComIfGs_getLife() == 0) {
player->onSceneChangeAreaJump(mExitID, -1, NULL);
if (player->checkNoResetFlg2(daPy_py_c::FLG2_SCN_CHG_START) && !mPlayedSceneChangeSfx)
if (player->checkNoResetFlg2(daPy_py_c::FLG2_SCENE_CHANGE_START) && !mPlayedSceneChangeSfx)
{
Z2GetAudioMgr()->seStart(Z2SE_FORCE_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
player->voiceStart(Z2SE_WL_V_FALL_TO_RESTART);
+1 -1
View File
@@ -365,7 +365,7 @@ void dFlower_data_c::WorkAt(fopAc_ac_c* i_hitActor, u32 i_massFlg, int i_roomNo,
}
}
if ((daPy_getPlayerActorClass()->getCutType() >= 3) && (daPy_getPlayerActorClass()->getCutType() <= 7)) {
if ((daPy_getPlayerActorClass()->getCutType() >= daPy_py_c::CUT_TYPE_NM_RIGHT) && (daPy_getPlayerActorClass()->getCutType() <= daPy_py_c::CUT_TYPE_FINISH_VERTICAL)) {
if (m_pos.abs(temp_r26->current.pos) > 128.0f) {
if (m_pos.abs(temp_r26->current.pos) < 200.0f) {
WorkAt_NoCutAnim(i_hitActor, i_massFlg, i_roomNo, i_hitinf, hitobj_p);
+1 -1
View File
@@ -102,7 +102,7 @@ u16 cc_pl_cut_bit_get() {
} else if (player_p->getCutType() == daPy_py_c::CUT_TYPE_FINISH_VERTICAL) {
bit = 0x40;
} else if (player_p->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT ||
player_p->getCutType() == 9 || player_p->getCutType() == daPy_py_c::CUT_TYPE_HORSE_TURN ||
player_p->getCutType() == daPy_py_c::CUT_TYPE_UNK_9 || player_p->getCutType() == daPy_py_c::CUT_TYPE_HORSE_TURN ||
player_p->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT)
{
bit = 0x80;
+7 -7
View File
@@ -193,8 +193,8 @@ u16 dDemo_c::m_branchType;
const u8* dDemo_c::m_branchData;
int dDemo_actor_c::getDemoIDData(int* param_0, int* param_1, int* param_2, u16* param_3,
u8* param_4) {
int dDemo_actor_c::getDemoIDData(int* o_arg0, int* o_arg1, int* o_arg2, u16* o_resID,
u8* param_4) {
JStudio::stb::TParseData_fixed<51, TValueIterator_misaligned<u32> > data(getPrm()->getData());
static JStudio::stb::TParseData_fixed<51, TValueIterator_misaligned<u32> > dummy;
@@ -210,10 +210,10 @@ int dDemo_actor_c::getDemoIDData(int* param_0, int* param_1, int* param_2, u16*
}
u32 var_r31 = *it;
*param_0 = var_r31 >> 0x1E;
*param_1 = (var_r31 >> 0x18) & 0xF;
*param_2 = (var_r31 >> 0x10) & 0xF;
*param_3 = var_r31 & 0xFFFF;
*o_arg0 = var_r31 >> 0x1E;
*o_arg1 = (var_r31 >> 0x18) & 0xF;
*o_arg2 = (var_r31 >> 0x10) & 0xF;
*o_resID = var_r31 & 0xFFFF;
if (param_4 != NULL) {
*param_4 = (var_r31 >> 0x17) & 1;
@@ -224,7 +224,7 @@ int dDemo_actor_c::getDemoIDData(int* param_0, int* param_1, int* param_2, u16*
}
#if DEBUG
s16 dDemo_c::m_branchNum = 0;
u16 dDemo_c::m_branchNum = 0;
#endif
static void* dDemo_getJaiPointer(char const* arcName, u32 anmID, int param_2, u16* param_3) {
+4 -4
View File
@@ -1144,9 +1144,9 @@ void dMenu_Dmap_c::screenInit() {
field_0x88[0] = new CPaneMgr(mpDrawBg->mBaseScreen, 'map000', 3, NULL);
field_0x88[1] = new CPaneMgr(mpDrawBg->mBaseScreen, 'con000', 3, NULL);
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x11) {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV2) {
field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, 'i_key_n', 3, NULL);
} else if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x14) {
} else if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV5) {
field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, 'lv5_k_n', 3, NULL);
} else {
field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, 'nor_k_n', 3, NULL);
@@ -1156,7 +1156,7 @@ void dMenu_Dmap_c::screenInit() {
field_0x88[i]->scale(0.9f, 0.9f);
}
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x11) {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV2) {
mpDrawBg->mBaseScreen->search('lv5_k_n')->hide();
mpDrawBg->mBaseScreen->search('nor_k_n')->hide();
@@ -1195,7 +1195,7 @@ void dMenu_Dmap_c::screenInit() {
((J2DPicture*)mpDrawBg->mBaseScreen->search('c_n_1_s'))->changeTexture(tex, 0);
((J2DPicture*)mpDrawBg->mBaseScreen->search('c_n_1'))->changeTexture(tex, 0);
}
} else if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x14) {
} else if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV5) {
mpDrawBg->mBaseScreen->search('i_key_n')->hide();
mpDrawBg->mBaseScreen->search('nor_k_n')->hide();
mpDrawBg->mBaseScreen->search('key_n_n')->hide();
+1 -1
View File
@@ -1020,7 +1020,7 @@ void dMenu_Fmap_c::portal_warp_map_proc() {
}
} else if (mPortalNo == 3) {
if ((dMeter2Info_getMapStatus() == 3
&& dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 2
&& dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_FARON
&& dComIfGs_isOneZoneSwitch(0xf, -1))
/* dSv_event_flag_c::M_018 - Main Event - Brought Kakariko bridge back to original location */
|| dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x33]))
+4 -4
View File
@@ -360,7 +360,7 @@ void dMenu_ItemExplain_c::open_init() {
u8 itemNo = field_0xe1;
s32 iVar = -1;
if (itemNo == 0x26) {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x11) {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV2) {
s32 itemsObtained = 0;
for (int i = 0; i < 3; i++) {
if (checkItemGet(i + fpcNm_ITEM_L2_KEY_PIECES1, 1) != 0) {
@@ -377,7 +377,7 @@ void dMenu_ItemExplain_c::open_init() {
itemNo = 0xfd;
}
} else {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x14) {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV5) {
itemNo = 0xf6;
}
}
@@ -622,7 +622,7 @@ u8 dMenu_ItemExplain_c::openExplainDmap(u8 param_0, u8 param_1, u8 param_2, bool
u8 ret = 0;
s32 itemsObtained = 0;
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x11 && param_0 == 0x26) {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV2 && param_0 == 0x26) {
for (int i = 0; i < 3; i++) {
if (checkItemGet(i + fpcNm_ITEM_L2_KEY_PIECES1, 1) != 0) {
itemsObtained++;
@@ -644,7 +644,7 @@ u8 dMenu_ItemExplain_c::openExplainDmap(u8 param_0, u8 param_1, u8 param_2, bool
mStatus = 1;
field_0xe1 = param_0;
field_0xcc = itemNo + 0x165;
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x14 && itemNo == 0x23) {
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == dStage_SaveTbl_LV5 && itemNo == 0x23) {
field_0xcc = 0x5bf;
}
if (itemNo == 0x25 && dComIfGs_isDungeonItemWarp(0x16)) {