mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-24 06:50:43 -04:00
d_a_bg_obj equivalent + misc (#2509)
* d_a_bg_obj equivalent + misc * More Z2LinkMgr Matches
This commit is contained in:
+1
-1
@@ -1476,7 +1476,7 @@ config.libs = [
|
||||
Rel("f_pc_profile_lst", [Object(Matching, "f_pc/f_pc_profile_lst.cpp")]),
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_andsw"),
|
||||
ActorRel(NonMatching, "d_a_bg"),
|
||||
ActorRel(NonMatching, "d_a_bg_obj"),
|
||||
ActorRel(Equivalent, "d_a_bg_obj"),
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_dmidna"),
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_door_dbdoor00"),
|
||||
ActorRel(MatchingFor("GZ2E01"), "d_a_door_knob00"),
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef Z2AUDIOCS_H
|
||||
#define Z2AUDIOCS_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
class Z2AudioCS {
|
||||
public:
|
||||
static int startLevel(s32 param_1, s32 param_2);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void setInWater(bool status) { mInWater = status; }
|
||||
bool isInWater() { return mInWater; }
|
||||
u8 getLinkState() const { return mLinkState; }
|
||||
u8 getLinkState() { return mLinkState; }
|
||||
u8 getMoveSpeed() const { return mMoveSpeed; }
|
||||
bool isRiding() const { return mRiding; }
|
||||
void setLinkState(u8 i_state) { mLinkState = i_state; }
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
bool isSceneExist() { return sceneExist; }
|
||||
int getCurrentSceneNum() { return sceneNum; }
|
||||
s8 getCurrentRoomNum() { return roomNum; }
|
||||
bool isInGame() const { return inGame; }
|
||||
bool isInGame() { return inGame; }
|
||||
void setInGame(bool i_inGame) { inGame = i_inGame; }
|
||||
bool isInDarkness() const { return inDarkness; }
|
||||
s8 getRoomReverb() { return dComIfGp_getReverb(roomNum); }
|
||||
|
||||
@@ -21,12 +21,12 @@ struct Z2StatusMgr : public JASGlobalInstance<Z2StatusMgr> {
|
||||
void setCameraGroupInfo(u8);
|
||||
void setCameraInWaterDepth(float);
|
||||
|
||||
u8 getDemoStatus() const { return mDemoStatus; }
|
||||
u8 getDemoStatus() { return mDemoStatus; }
|
||||
void setHour(s32 hour) { mHour = hour; }
|
||||
void setMinute(s32 min) { mMinute = min; }
|
||||
void setWeekday(s32 day) { mWeekday = day; }
|
||||
f32 getCameraInWaterDepth() { return mUnderwaterDepth; }
|
||||
f32 getCameraInWaterDepthRatio() const { return mCameraInWaterDepthRatio; }
|
||||
f32 getCameraInWaterDepthRatio() { return mCameraInWaterDepthRatio; }
|
||||
u8 getHour() { return mHour; }
|
||||
bool isPaused() { return mPauseFlag; }
|
||||
bool isHeartGuageOn() { return mHeartGaugeOn; }
|
||||
|
||||
+14
-7
@@ -216,6 +216,13 @@ enum dKy_LIGHT_SIZE {
|
||||
LIGHT_SIZE_LL,
|
||||
};
|
||||
|
||||
struct dKy_Odour_Data {
|
||||
/* 0x0 */ u8 mOdourPacketStatus;
|
||||
/* 0x1 */ u8 field_0xf21;
|
||||
/* 0x4 */ int field_0xf24;
|
||||
/* 0x8 */ dKankyo_odour_Packet* mpOdourPacket;
|
||||
};
|
||||
|
||||
class dScnKy_env_light_c {
|
||||
public:
|
||||
/* 8019F2E8 */ dScnKy_env_light_c();
|
||||
@@ -325,10 +332,7 @@ public:
|
||||
/* 0x0ED4 */ EF_THUNDER mThunderEff;
|
||||
/* 0x0F18 */ u8 field_0xf18[4];
|
||||
/* 0x0F1C */ dKankyo_shstar_Packet* mpShstarPacket;
|
||||
/* 0x0F20 */ u8 mOdourPacketStatus;
|
||||
/* 0x0F21 */ u8 field_0xf21;
|
||||
/* 0x0F24 */ int field_0xf24;
|
||||
/* 0x0F28 */ dKankyo_odour_Packet* mpOdourPacket;
|
||||
/* 0x0F20 */ dKy_Odour_Data mOdourData;
|
||||
/* 0x0F2C */ u8 field_0xf2c;
|
||||
/* 0x0F30 */ J3DModel* undwater_ef_model;
|
||||
/* 0x0F34 */ f32 field_0xf34;
|
||||
@@ -503,9 +507,12 @@ inline dScnKy_env_light_c* dKy_getEnvlight() {
|
||||
|
||||
class dKankyo_HIO_c {
|
||||
public:
|
||||
u8 pad[0xB4];
|
||||
/* 0xB4 */ u8 field_0xB4;
|
||||
/* 0xB8 */ f32 field_0xB8;
|
||||
/* 0x000 */ u8 pad[0xB4];
|
||||
/* 0x0B4 */ u8 field_0xB4;
|
||||
/* 0x0B8 */ f32 field_0xB8;
|
||||
/* 0x0BC */ u8 field_0xBC[0x3F4 - 0xbc];
|
||||
/* 0x3F4 */ f32 field_0x3f4;
|
||||
/* 0x3F8 */ f32 field_0x3f8;
|
||||
};
|
||||
|
||||
extern dKankyo_HIO_c g_kankyoHIO;
|
||||
|
||||
@@ -186,26 +186,26 @@ bool JMessage::TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_
|
||||
|
||||
if (memcmp(oHeader.get_signature(), &data::ga4cSignature, sizeof(data::ga4cSignature)) != 0) {
|
||||
JGADGET_WARNMSG(355, "unknown signature");
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (oHeader.get_type() != 'bmg1') {
|
||||
JGADGET_WARNMSG(360, "unknown type");
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
u8 uEncoding = oHeader.get_encoding();
|
||||
if (uEncoding != 0) {
|
||||
if (!pContainer_->isEncodingSettable(uEncoding)) {
|
||||
JGADGET_WARNMSG(369, "encoding not acceptable");
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
pContainer_->setEncoding(uEncoding);
|
||||
}
|
||||
|
||||
if (param_2 & 0x10) {
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
TResourceContainer::TCResource* pResContainer = &pContainer_->resContainer_;
|
||||
@@ -214,14 +214,14 @@ bool JMessage::TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_
|
||||
if (pResource_ == NULL) {
|
||||
JGADGET_WARNMSG(384, "can't create resource");
|
||||
if (param_2 & 0x20) {
|
||||
return 1;
|
||||
return true;
|
||||
} else {
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
pResContainer->Push_back(pResource_);
|
||||
pResource_->setData_header(oHeader.getRaw());
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ bool Z2AudioArcLoader::readCommandMore(u32 param_0) {
|
||||
}
|
||||
|
||||
/* 802A9AC8-802A9B54 2A4408 008C+00 1/1 0/0 0/0 .text readBFCA__16Z2AudioArcLoaderFPCv */
|
||||
// NONMATCHING regalloc
|
||||
void Z2AudioArcLoader::readBFCA(void const* param_0) {
|
||||
JKRHeap* heap = JAUSectionHeap::getInstance()->getHeap();
|
||||
JKRArchive* archive = JKRMountArchive((void*)param_0, JKRGetCurrentHeap(), JKRArchive::MOUNT_DIRECTION_TAIL);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
//
|
||||
|
||||
#include "Z2AudioLib/Z2LinkMgr.h"
|
||||
#include "Z2AudioCSD\Z2AudioCS.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
|
||||
/* 802C321C-802C3220 2BDB5C 0004+00 0/0 1/1 0/0 .text setLinkGroupInfo__14Z2CreatureLinkFUc */
|
||||
@@ -272,13 +273,34 @@ Z2SoundHandlePool* Z2CreatureLink::startLinkSound(JAISoundID i_soundID, u32 para
|
||||
|
||||
/* 802C3E68-802C4320 2BE7A8 04B8+00 1/1 3/3 0/0 .text
|
||||
* startLinkSoundLevel__14Z2CreatureLinkF10JAISoundIDUlSc */
|
||||
// NONMATCHING - small issue with i_soundID in startCreatureSoundLevel call
|
||||
JAISoundHandle* Z2CreatureLink::startLinkSoundLevel(JAISoundID i_soundID, u32 param_1, s8 param_2) {
|
||||
#if VERSION == VERSION_SHIELD_DEBUG
|
||||
if (Z2GetSceneMgr()->isSceneExist()) {
|
||||
int iVar3 = -1;
|
||||
switch((u32)i_soundID) {
|
||||
case Z2SE_AL_REEL_SLOW_LOOP:
|
||||
iVar3 = 0x16;
|
||||
break;
|
||||
case Z2SE_AL_REEL_FAST_LOOP:
|
||||
iVar3 = 0x17;
|
||||
break;
|
||||
case Z2SE_LK_HS_WIND_UP:
|
||||
iVar3 = 0x19;
|
||||
break;
|
||||
}
|
||||
|
||||
if (iVar3 >= 0 && Z2AudioCS::startLevel(iVar3, 0) != 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (i_soundID == Z2SE_AL_LIGHTNING_SW_GLOW && (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame())) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Z2SoundHandlePool* temp_r3 = startCreatureSoundLevel(i_soundID, param_1, param_2);
|
||||
Z2SoundHandlePool* temp_r3 = startCreatureSoundLevel((u32)i_soundID, param_1, param_2);
|
||||
if (temp_r3 != NULL && *temp_r3) {
|
||||
f32 var_f31 = 1.0f;
|
||||
f32 var_f30 = 1.0f;
|
||||
@@ -311,7 +333,7 @@ JAISoundHandle* Z2CreatureLink::startLinkSoundLevel(JAISoundID i_soundID, u32 pa
|
||||
break;
|
||||
case Z2SE_AL_SNOBO_RIDE:
|
||||
case Z2SE_AL_SNOBO_BREAK:
|
||||
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[266]) && Z2GetSeqMgr()->getSubBgmID() != Z2BGM_SNOW_BOARD) {
|
||||
if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[266]) && Z2GetSeqMgr()->getSubBgmID() != Z2BGM_SNOW_BOARD) {
|
||||
var_f31 = 0.0f;
|
||||
var_r30 = 0;
|
||||
} else if (mMoveSpeed == 0) {
|
||||
@@ -558,6 +580,7 @@ bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_
|
||||
if (param_3 == 44) {
|
||||
param_3 = 23;
|
||||
} else {
|
||||
JUT_WARN_DEVICE(929, 1, "%s", "mapinfo > 26\n");
|
||||
param_3 = 0;
|
||||
}
|
||||
}
|
||||
@@ -664,9 +687,9 @@ bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_
|
||||
}
|
||||
|
||||
if (bVar3) {
|
||||
if (Z2GetLink()->mLinkState == 4) {
|
||||
if (Z2GetLink()->getLinkState() == 4) {
|
||||
Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_LIGHT_ADD, 0, param_4 * 127.0f);
|
||||
} else if (Z2GetLink()->mLinkState == 5) {
|
||||
} else if (Z2GetLink()->getLinkState() == 5) {
|
||||
Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_HEAVY_ADD, 0, param_4 * 127.0f);
|
||||
}
|
||||
}
|
||||
@@ -735,7 +758,7 @@ bool Z2RideSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_
|
||||
break;
|
||||
}
|
||||
|
||||
bool ret = Z2SoundStarter::startSound(i_soundID, param_1, param_2, param_3, param_4, param_5,
|
||||
bool ret = Z2SoundStarter::startSound((u32)i_soundID, param_1, param_2, param_3, param_4, param_5,
|
||||
param_6, param_7, param_8, param_9);
|
||||
|
||||
if (mRide->isLinkRiding() && uVar3 != 0) {
|
||||
|
||||
@@ -271,7 +271,9 @@ int daAlink_c::procGrassWhistleWait() {
|
||||
procWaitInit();
|
||||
}
|
||||
} else {
|
||||
#if VERSION != VERSION_SHIELD_DEBUG
|
||||
setGrassCancelStatus(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
+126
-71
@@ -9,6 +9,7 @@
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "d/actor/d_a_set_bgobj.h"
|
||||
#include "d/d_s_play.h"
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
|
||||
SECTION_DATA extern void* __vt__10cCcD_GStts[3];
|
||||
@@ -319,102 +320,116 @@ SECTION_DEAD static char const* const stringBase_8045CA7D = "spec.dat";
|
||||
*/
|
||||
// NONMATCHING - close-ish
|
||||
bool daBgObj_c::spec_data_c::Set(void* i_ptr) {
|
||||
spec_dat* data = (spec_dat*)i_ptr;
|
||||
JUT_ASSERT(496, i_ptr != 0);
|
||||
|
||||
mSpecType = data->field_0x0;
|
||||
u8* data = (u8*)i_ptr;
|
||||
|
||||
mSpecType = *(u16*)i_ptr;
|
||||
|
||||
u8 block_type;
|
||||
u16 temp_r3;
|
||||
|
||||
switch (mSpecType) {
|
||||
case 0: {
|
||||
u8 block_type = data->field_0x4;
|
||||
u8* block_p = (u8*)data + 4;
|
||||
block_type = data[4];
|
||||
data += 4;
|
||||
|
||||
do {
|
||||
switch (block_type) {
|
||||
case 0:
|
||||
break;
|
||||
case 3:
|
||||
block_p = initTexShareBlock(block_p);
|
||||
data = initTexShareBlock(data);
|
||||
break;
|
||||
case 4:
|
||||
block_p = initFarInfoBlock(block_p);
|
||||
data = initFarInfoBlock(data);
|
||||
break;
|
||||
default:
|
||||
// Invalid data block type
|
||||
OS_REPORT_ERROR("データブロックタイプが不正です<%d>\n", block_type);
|
||||
JUT_PANIC(527, "0");
|
||||
}
|
||||
|
||||
if (block_type == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
block_type = *block_p;
|
||||
block_type = *data;
|
||||
} while (1);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
u16 temp_r3 = data->field_0x2;
|
||||
temp_r3 = *(u16*)(data + 2);
|
||||
field_0x02 = temp_r3 & 0xF;
|
||||
field_0x03 = (temp_r3 >> 0xE) & 3;
|
||||
field_0x15 = (temp_r3 >> 0xC) & 3;
|
||||
field_0x14 = (temp_r3 >> 9) & 7;
|
||||
field_0x16 = (temp_r3 >> 8) & 1;
|
||||
|
||||
u8 block_type = data->field_0x4;
|
||||
u8* block_p = (u8*)i_ptr + 4;
|
||||
block_type = data[4];
|
||||
data += 4;
|
||||
|
||||
do {
|
||||
switch (block_type) {
|
||||
case 0:
|
||||
break;
|
||||
case 3:
|
||||
block_p = initTexShareBlock(block_p);
|
||||
data = initTexShareBlock(data);
|
||||
break;
|
||||
case 1:
|
||||
block_p = initParticleBlock(block_p);
|
||||
data = initParticleBlock(data);
|
||||
break;
|
||||
case 2:
|
||||
block_p = initSoundBlock(block_p);
|
||||
data = initSoundBlock(data);
|
||||
break;
|
||||
case 4:
|
||||
block_p = initFarInfoBlock(block_p);
|
||||
data = initFarInfoBlock(data);
|
||||
break;
|
||||
default:
|
||||
// Invalid data block type
|
||||
OS_REPORT_ERROR("データブロックタイプが不正です<%d>\n", block_type);
|
||||
JUT_PANIC(570, "0");
|
||||
}
|
||||
|
||||
if (block_type == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
block_type = *block_p;
|
||||
block_type = *data;
|
||||
} while (1);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
u16 temp_r3_2 = data->field_0x2;
|
||||
field_0x02 = temp_r3_2 & 0xF;
|
||||
field_0x03 = (temp_r3_2 >> 0xE) & 3;
|
||||
field_0x15 = (temp_r3_2 >> 0xC) & 3;
|
||||
field_0x14 = (temp_r3_2 >> 9) & 7;
|
||||
field_0x16 = (temp_r3_2 >> 8) & 1;
|
||||
temp_r3 = *(u16*)(data + 2);
|
||||
field_0x02 = temp_r3 & 0xF;
|
||||
field_0x03 = (temp_r3 >> 0xE) & 3;
|
||||
field_0x15 = (temp_r3 >> 0xC) & 3;
|
||||
field_0x14 = (temp_r3 >> 9) & 7;
|
||||
field_0x16 = (temp_r3 >> 8) & 1;
|
||||
|
||||
u8 block_type = data->field_0x4;
|
||||
u8* block_p = (u8*)i_ptr + 4;
|
||||
block_type = data[4];
|
||||
data += 4;
|
||||
|
||||
do {
|
||||
switch (block_type) {
|
||||
case 0:
|
||||
break;
|
||||
case 3:
|
||||
block_p = initTexShareBlock(block_p);
|
||||
data = initTexShareBlock(data);
|
||||
break;
|
||||
case 1:
|
||||
block_p = initParticleBlock(block_p);
|
||||
data = initParticleBlock(data);
|
||||
break;
|
||||
case 2:
|
||||
block_p = initSoundBlock(block_p);
|
||||
data = initSoundBlock(data);
|
||||
break;
|
||||
case 4:
|
||||
block_p = initFarInfoBlock(block_p);
|
||||
data = initFarInfoBlock(data);
|
||||
break;
|
||||
default:
|
||||
// "Data Block type invalid<%d>\n"
|
||||
OSReport_Error("データブロックタイプが不正です<%d>\n", block_type);
|
||||
JUT_PANIC(619, "0");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -422,11 +437,13 @@ bool daBgObj_c::spec_data_c::Set(void* i_ptr) {
|
||||
break;
|
||||
}
|
||||
|
||||
block_type = *block_p;
|
||||
block_type = *data;
|
||||
} while (1);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// Terrain unit MoveBG: performance undefined error<%d>!!!
|
||||
OS_REPORT_ERROR("地形ユニットMoveBG : 性能未定義エラー!!!<%d>\n\n", mSpecType);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -464,17 +481,44 @@ static const dCcD_SrcCyl l_cyl_src = {
|
||||
};
|
||||
|
||||
/* 80459BEC-80459D0C 00060C 0120+00 1/1 0/0 0/1 .text initAtt__9daBgObj_cFv */
|
||||
// NONMATCHING - missing nop instruction
|
||||
void daBgObj_c::initAtt() {
|
||||
u32 cd3_val = mSpecData.field_0x03 == 0 ? 3 : mSpecData.field_0x03 - 1;
|
||||
u32 ce5_val = mSpecData.field_0x15 == 0 ? 3 : mSpecData.field_0x15 - 1;
|
||||
u32 ce4_val = mSpecData.field_0x14 == 0 ? 7 : mSpecData.field_0x14 - 1;
|
||||
u32 actor_params = 0;
|
||||
u32 cd3_val;
|
||||
if (mSpecData.field_0x03 == 0) {
|
||||
cd3_val = 3;
|
||||
} else {
|
||||
cd3_val = mSpecData.field_0x03 - 1;
|
||||
}
|
||||
|
||||
u32 arg0 = (daBgObj_prm::getObjArg0(this) != 0) ? 1 : 0;
|
||||
u32 ce5_val;
|
||||
if (mSpecData.field_0x15 == 0) {
|
||||
ce5_val = 3;
|
||||
} else {
|
||||
ce5_val = mSpecData.field_0x15 - 1;
|
||||
}
|
||||
|
||||
u32 actor_params =
|
||||
(daBgObj_prm::getSwBit2(this) << 24) |
|
||||
(daBgObj_prm::getSwBit(this) << 16) |
|
||||
u32 ce4_val;
|
||||
if (mSpecData.field_0x14 == 0) {
|
||||
ce4_val = 7;
|
||||
} else {
|
||||
ce4_val = mSpecData.field_0x14 - 1;
|
||||
}
|
||||
|
||||
u32 arg0;
|
||||
if (daBgObj_prm::getObjArg0(this) == 0) {
|
||||
arg0 = 0;
|
||||
} else {
|
||||
arg0 = 1;
|
||||
}
|
||||
|
||||
u32 temp = 0;
|
||||
u32 swbit = daBgObj_prm::getSwBit(this);
|
||||
u32 swbit2 = daBgObj_prm::getSwBit2(this);
|
||||
|
||||
actor_params =
|
||||
(swbit2 << 24) |
|
||||
(swbit << 16) |
|
||||
(temp << 8) |
|
||||
(arg0 << 7) |
|
||||
(ce4_val << 4) |
|
||||
(ce5_val << 2) |
|
||||
@@ -485,9 +529,14 @@ void daBgObj_c::initAtt() {
|
||||
|
||||
if (actor != NULL) {
|
||||
setAttentionInfo(actor);
|
||||
} else {
|
||||
// Failed to generate focus actor
|
||||
OS_REPORT_ERROR("「注目点」生成失敗!!!\n");
|
||||
}
|
||||
|
||||
mAttnActorID = fopAcM_GetID(actor);
|
||||
eyePos.y += 0.5f * fopAcM_getCullSizeBoxMax(this)->y;
|
||||
const Vec* box = fopAcM_getCullSizeBoxMax(this);
|
||||
eyePos.y += 0.5f * box->y;
|
||||
}
|
||||
|
||||
/* 80459D0C-80459D3C 00072C 0030+00 2/2 0/0 0/0 .text setAttentionInfo__9daBgObj_cFP10fopAc_ac_c
|
||||
@@ -1078,13 +1127,14 @@ struct blockItem {
|
||||
};
|
||||
|
||||
/* 8045B17C-8045B3A0 001B9C 0224+00 3/3 0/0 0/0 .text setParticle__9daBgObj_cFv */
|
||||
// NONMATCHING - out-of-place addi insn
|
||||
void daBgObj_c::setParticle() {
|
||||
u32 partNum = mSpecData.mParticleNum;
|
||||
u8* partBlockItems = mSpecData.mpParticleBlock + 4;
|
||||
u32* partBlockItems = (u32*)mSpecData.mpParticleBlock;
|
||||
partBlockItems++;
|
||||
for (; partNum != 0; partNum--) {
|
||||
u32 flags = *(u32*)partBlockItems;
|
||||
u16 res_id = *(u32*)(partBlockItems + 4);
|
||||
u32 flags = *partBlockItems++;
|
||||
u16 res_id = *partBlockItems;
|
||||
*partBlockItems++;
|
||||
|
||||
GXColor prmColor = { 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
GXColor envColor = { 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
@@ -1095,20 +1145,22 @@ void daBgObj_c::setParticle() {
|
||||
|
||||
u8 hasColor = 0;
|
||||
|
||||
u8* pColors = (u8*)partBlockItems;
|
||||
if ((flags & 0x80000000) != 0) {
|
||||
prmColor.r = partBlockItems[9];
|
||||
prmColor.g = partBlockItems[10];
|
||||
prmColor.b = partBlockItems[11];
|
||||
prmColor.r = pColors[1];
|
||||
prmColor.g = pColors[2];
|
||||
prmColor.b = pColors[3];
|
||||
hasColor = 1;
|
||||
}
|
||||
if ((flags & 0x40000000) != 0) {
|
||||
alpha = partBlockItems[8];
|
||||
alpha = pColors[0];
|
||||
}
|
||||
pColors += 4;
|
||||
if ((flags & 0x20000000) != 0) {
|
||||
envColor.a = partBlockItems[12];
|
||||
envColor.r = partBlockItems[13];
|
||||
envColor.g = partBlockItems[14];
|
||||
envColor.b = partBlockItems[15];
|
||||
envColor.a = pColors[0];
|
||||
envColor.r = pColors[1];
|
||||
envColor.g = pColors[2];
|
||||
envColor.b = pColors[3];
|
||||
hasColor = 1;
|
||||
}
|
||||
f32 fVar2 = 0.0f;
|
||||
@@ -1119,40 +1171,43 @@ void daBgObj_c::setParticle() {
|
||||
}
|
||||
|
||||
dKy_tevstr_c* status;
|
||||
s32 someFlag = (flags >> 0x14 & 0xf);
|
||||
if (someFlag != 0) {
|
||||
J3DModelData* res_ptr = NULL;
|
||||
u8 modelNumber = (flags & 0xf00000) >> 20;
|
||||
u8 unusedFlag = (flags & 0xf0000) >> 16;
|
||||
if (modelNumber != 0) {
|
||||
J3DModelData* bmd = NULL;
|
||||
int unused_sp28 = 0;
|
||||
cXyz scale(1.0f, 1.0f, 1.0f);
|
||||
switch (someFlag) {
|
||||
switch (modelNumber) {
|
||||
case 1:
|
||||
res_ptr = (J3DModelData*)dComIfG_getObjectRes("Always", "BreakWoodBox.bmd");
|
||||
scale.x = 0.9f;
|
||||
scale.y = 0.9f;
|
||||
scale.z = 0.9f;
|
||||
bmd = (J3DModelData*)dComIfG_getObjectRes("Always", "BreakWoodBox.bmd");
|
||||
JUT_ASSERT(1683, bmd != 0);
|
||||
scale.setall(KREG_F(29) + 0.9f);
|
||||
break;
|
||||
default:
|
||||
// Multi MoveBG: Particle model number is invalid <%d>
|
||||
OS_REPORT_ERROR("マルチMoveBG:パーティクルモデル番号が不正<%d>\n", modelNumber);
|
||||
JUT_PANIC(1689, "0");
|
||||
break;
|
||||
}
|
||||
status = NULL;
|
||||
JPABaseEmitter* emitter = dComIfGp_particle_setColor(
|
||||
JPABaseEmitter* emitter = dComIfGp_particle_set(
|
||||
res_id,
|
||||
¤t.pos,
|
||||
status,
|
||||
NULL,
|
||||
NULL,
|
||||
1.0f,
|
||||
0xff,
|
||||
&mRotation,
|
||||
NULL,
|
||||
0xff,
|
||||
&dPa_modelEcallBack::getEcallback(),
|
||||
fopAcM_GetRoomNo(this),
|
||||
NULL,
|
||||
NULL,
|
||||
&scale
|
||||
);
|
||||
dPa_modelEcallBack::setModel(emitter, res_ptr, tevStr, 3, NULL, 0, 0);
|
||||
dPa_modelEcallBack::setModel(emitter, bmd, tevStr, 3, NULL, 0, 0);
|
||||
} else {
|
||||
status = dComIfGp_roomControl_getTevStr(fopAcM_GetRoomNo(this));
|
||||
fopAc_ac_c* unused_player = dComIfGp_getPlayer(0);
|
||||
dComIfGp_particle_setColor(
|
||||
res_id,
|
||||
¤t.pos,
|
||||
status,
|
||||
dComIfGp_roomControl_getTevStr(fopAcM_GetRoomNo(this)),
|
||||
prmColorPtr,
|
||||
envColorPtr,
|
||||
fVar2,
|
||||
@@ -1164,7 +1219,7 @@ void daBgObj_c::setParticle() {
|
||||
NULL
|
||||
);
|
||||
}
|
||||
partBlockItems += 0x10;
|
||||
partBlockItems += 2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1276,10 +1331,10 @@ void daBgObj_c::orderWait_tri() {
|
||||
|
||||
|
||||
/* 8045B7FC-8045B9C4 00221C 01C8+00 1/1 0/0 0/0 .text orderWait_cyl__9daBgObj_cFv */
|
||||
// NONMATCHING - r30/r31 swap
|
||||
void daBgObj_c::orderWait_cyl() {
|
||||
if (mCyl.ChkTgHit()) {
|
||||
if (checkHitAt(mCyl.GetTgHitObj())) {
|
||||
cCcD_Obj* hitObj = mCyl.GetTgHitObj();
|
||||
if (checkHitAt(hitObj)) {
|
||||
setSe();
|
||||
|
||||
fopAc_ac_c* hit_ac = mCyl.GetTgHitAc();
|
||||
@@ -1289,10 +1344,10 @@ void daBgObj_c::orderWait_cyl() {
|
||||
|
||||
mDoMtx_stack_c::YrotS(-shape_angle.y);
|
||||
mDoMtx_stack_c::multVec(&sp1C, &sp1C);
|
||||
cXyz sp28;
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(shape_angle.y);
|
||||
|
||||
cXyz sp28;
|
||||
if (sp1C.z > 0.0f) {
|
||||
sp28 = cXyz(0.0f, 0.0f, 1.0f);
|
||||
} else {
|
||||
|
||||
+50
-33
@@ -8,6 +8,7 @@
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_s_play.h"
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
|
||||
/* 80685638-8068563C 000008 0001+03 1/1 0/0 0/0 .bss @1109 */
|
||||
@@ -543,38 +544,53 @@ static void bee_start(e_bee_class* i_this, bee_s* i_bee) {
|
||||
/* 80684248-80684A94 001AC8 084C+00 1/1 0/0 0/0 .text bee_control__FP11e_bee_class */
|
||||
// NONMATCHING regalloc
|
||||
static void bee_control(e_bee_class* i_this) {
|
||||
s8 nest_health = 0;
|
||||
fopAc_ac_c* parent;
|
||||
s8 bees_in_nest;
|
||||
camera_class* camera;
|
||||
e_nest_class* nest;
|
||||
int i;
|
||||
fopAc_ac_c* a_this;
|
||||
cXyz* hit_pos_p;
|
||||
bee_s* bee;
|
||||
s8 nest_health;
|
||||
s8 active_bees;
|
||||
s8 bees_flying;
|
||||
|
||||
a_this = (fopAc_ac_c*)i_this;
|
||||
|
||||
nest_health = 0;
|
||||
|
||||
static cXyz non(-20000.0f, 30000.0f, -15000.0f);
|
||||
i_this->mCcSph.SetC(i_this->current.pos + non);
|
||||
i_this->mCcSph.SetC(a_this->current.pos + non);
|
||||
|
||||
fopAc_ac_c* parent = fopAcM_SearchByID(i_this->parentActorID);
|
||||
e_nest_class* nest = NULL;
|
||||
parent = fopAcM_SearchByID(a_this->parentActorID);
|
||||
nest = NULL;
|
||||
if (parent != NULL) {
|
||||
if (parent != NULL && parent->health != 0) {
|
||||
nest_health = parent->health;
|
||||
}
|
||||
nest = static_cast<e_nest_class*>(parent);
|
||||
i_this->home.pos = nest->mCenterPos;
|
||||
nest = (e_nest_class*)parent;
|
||||
a_this->home.pos = nest->mCenterPos;
|
||||
}
|
||||
|
||||
dComIfG_Ccsp()->Set(&i_this->mCcCyl);
|
||||
|
||||
hit_pos_p = NULL;
|
||||
cXyz hit_pos;
|
||||
cXyz* hit_pos_p = NULL;
|
||||
f32 hit_radius = 120.0f;
|
||||
|
||||
|
||||
if (i_this->mCcCyl.ChkTgHit()) {
|
||||
cXyz vec1, vec2;
|
||||
hit_pos_p = &hit_pos;
|
||||
cCcD_Obj* hit_obj = i_this->mCcCyl.GetTgHitObj();
|
||||
if (hit_obj->ChkAtType(AT_TYPE_BOMB) || hit_obj->ChkAtType(AT_TYPE_BOOMERANG)
|
||||
|| hit_obj->ChkAtType(AT_TYPE_IRON_BALL)) {
|
||||
fopAc_ac_c* hit_actor = dCc_GetAc(hit_obj->GetAc());
|
||||
if (hit_obj->ChkAtType(AT_TYPE_BOMB)) {
|
||||
hit_radius = 300.0f;
|
||||
hit_radius = 300.0f + TREG_F(19);
|
||||
hit_pos = hit_actor->current.pos;
|
||||
} else if (hit_obj->ChkAtType(AT_TYPE_IRON_BALL)) {
|
||||
hit_radius = 100.0f;
|
||||
hit_radius = 100.0f+ TREG_F(19);
|
||||
daPy_py_c* player = static_cast<daPy_py_c*>(dComIfGp_getPlayer(0));
|
||||
cXyz* center = player->getIronBallCenterPos();
|
||||
if (center != NULL) {
|
||||
@@ -582,18 +598,17 @@ static void bee_control(e_bee_class* i_this) {
|
||||
}
|
||||
} else {
|
||||
hit_pos = hit_actor->current.pos;
|
||||
hit_radius = 150.0f;
|
||||
hit_radius = 150.0f + TREG_F(19);
|
||||
}
|
||||
} else {
|
||||
cXyz vec1, vec2;
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
if (cc_pl_cut_bit_get() == 0x80) {
|
||||
i_this->mBoomerangAngle += 0x1400;
|
||||
vec1.z = 150.0f;
|
||||
i_this->mBoomerangAngle += (s16)0x1400;
|
||||
vec1.z = 150.0f + TREG_F(15);
|
||||
} else {
|
||||
vec1.z = 100.0f;
|
||||
vec1.z = 100.0f + TREG_F(12);
|
||||
}
|
||||
mDoMtx_YrotS(*calc_mtx, player->shape_angle.y + i_this->mBoomerangAngle);
|
||||
cMtx_YrotS(*calc_mtx, player->shape_angle.y + i_this->mBoomerangAngle);
|
||||
vec1.x = 0.0f;
|
||||
vec1.y = 100.0f;
|
||||
MtxPosition(&vec1, &vec2);
|
||||
@@ -603,12 +618,13 @@ static void bee_control(e_bee_class* i_this) {
|
||||
i_this->mBoomerangAngle = 0;
|
||||
}
|
||||
|
||||
bee_s* bee = i_this->mBees;
|
||||
s8 active_bees = 0;
|
||||
bee = i_this->mBees;
|
||||
active_bees = 0;
|
||||
cXyz vec3;
|
||||
ccCylSet = 0;
|
||||
s8 bees_in_nest = 0;
|
||||
s8 bees_flying = 0;
|
||||
camera_class* camera = dComIfGp_getCamera(0);
|
||||
bees_in_nest = 0;
|
||||
bees_flying = 0;
|
||||
camera = dComIfGp_getCamera(0);
|
||||
|
||||
if ((nest != NULL && nest->mDemoStage == 0 && dComIfGp_event_runCheck())
|
||||
|| !daPy_getPlayerActorClass()->checkSwimUp()
|
||||
@@ -622,16 +638,15 @@ static void bee_control(e_bee_class* i_this) {
|
||||
i_this->mHomeTimer = 10;
|
||||
}
|
||||
|
||||
for (int i = 0; i < i_this->mNumBees; i++, bee++) {
|
||||
for (i = 0; i < i_this->mNumBees; i++, bee++) {
|
||||
if (bee->mAction != bee_s::ACT_DEAD) {
|
||||
bee->mNoDraw = false;
|
||||
active_bees++;
|
||||
cXyz vec3;
|
||||
bee->mNoDraw = false;
|
||||
|
||||
if (dComIfGp_checkPlayerStatus0(0, 0x200000)) {
|
||||
vec3.x = bee->mPos.x - camera->lookat.eye.x;
|
||||
vec3.z = bee->mPos.z - camera->lookat.eye.z;
|
||||
if (JMAFastSqrt(vec3.x * vec3.x + vec3.z * vec3.z) > 2500.0f) {
|
||||
if (JMAFastSqrt(vec3.x * vec3.x + vec3.z * vec3.z) > NREG_F(0) + 2500.0f) {
|
||||
bee->mNoDraw = true;
|
||||
}
|
||||
}
|
||||
@@ -646,7 +661,7 @@ static void bee_control(e_bee_class* i_this) {
|
||||
} else if (bee->mAction <= bee_s::ACT_FLY_HOME_B) {
|
||||
bee->mCounter++;
|
||||
if (bee_fly_action(i_this, bee)) {
|
||||
i_this->current.pos = bee->mPos;
|
||||
a_this->current.pos = bee->mPos;
|
||||
bees_flying++;
|
||||
}
|
||||
if (hit_pos_p != NULL) {
|
||||
@@ -654,7 +669,7 @@ static void bee_control(e_bee_class* i_this) {
|
||||
if (vec3.abs() < hit_radius) {
|
||||
bee->mAction = bee_s::ACT_FAIL;
|
||||
bee->mMode = 0;
|
||||
mDoMtx_YrotS(*calc_mtx, cM_atan2s(vec3.x, vec3.z));
|
||||
cMtx_YrotS(*calc_mtx, cM_atan2s(vec3.x, vec3.z));
|
||||
vec3.x = 0.0f;
|
||||
vec3.y = cM_rndF(10.0f) + 20.0f;
|
||||
vec3.z = cM_rndF(10.0f) + 20.0f;
|
||||
@@ -664,7 +679,7 @@ static void bee_control(e_bee_class* i_this) {
|
||||
bee->mTimer = 0;
|
||||
bee->mSound.startSound(Z2SE_EN_BE_DEATH, 0, -1);
|
||||
cXyz hit_mark_scale(0.35f, 0.35f, 0.35f);
|
||||
dComIfGp_setHitMark(1, i_this, &bee->mPos, NULL, &hit_mark_scale, 0);
|
||||
dComIfGp_setHitMark(1, a_this, &bee->mPos, NULL, &hit_mark_scale, 0);
|
||||
}
|
||||
}
|
||||
} else if (bee->mAction == bee_s::ACT_FAIL) {
|
||||
@@ -673,12 +688,13 @@ static void bee_control(e_bee_class* i_this) {
|
||||
bees_flying++;
|
||||
bee_start(i_this, bee);
|
||||
}
|
||||
bee->mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this)));
|
||||
bee->mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
||||
}
|
||||
}
|
||||
|
||||
if (active_bees == 0) {
|
||||
fopAcM_delete(i_this);
|
||||
fopAcM_delete(a_this);
|
||||
OS_REPORT("E_BEE DELETED \n");
|
||||
} else {
|
||||
if (bees_flying != 0) {
|
||||
if (dComIfGp_event_runCheck()) {
|
||||
@@ -687,19 +703,20 @@ static void bee_control(e_bee_class* i_this) {
|
||||
i_this->mSound.playBeeGroupSound(Z2SE_EN_BE_FLY, bees_flying);
|
||||
}
|
||||
}
|
||||
i_this->mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this)));
|
||||
i_this->mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
||||
if (nest != NULL) {
|
||||
if (bees_in_nest != 0) {
|
||||
nest->mBeeSound.playBeeGroupSound(Z2SE_EN_BE_STAY, bees_in_nest);
|
||||
}
|
||||
nest->mBeeSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this)));
|
||||
nest->mBeeSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
||||
}
|
||||
}
|
||||
|
||||
if (!dComIfGp_event_runCheck()) {
|
||||
dComIfG_Ccsp()->Set(&i_this->mCcSph);
|
||||
if (i_this->mCcSph.ChkAtHit()) {
|
||||
fopAc_ac_c* hit_actor = dCc_GetAc(i_this->mCcSph.GetAtHitObj()->GetAc());
|
||||
cCcD_Obj* hitObj = i_this->mCcSph.GetAtHitObj();
|
||||
fopAc_ac_c* hit_actor = dCc_GetAc(hitObj->GetAc());
|
||||
if (hit_actor != NULL && fopAcM_GetName(hit_actor) == PROC_ALINK) {
|
||||
dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ static void odour_move(kytag03_class* i_this) {
|
||||
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
|
||||
|
||||
dPath* var_r27;
|
||||
dKankyo_odour_Packet* packet = kankyo->mpOdourPacket;
|
||||
dKankyo_odour_Packet* packet = kankyo->mOdourData.mpOdourPacket;
|
||||
dPath* var_r25;
|
||||
|
||||
cXyz sp94;
|
||||
@@ -449,7 +449,7 @@ static int daKytag03_Create(fopAc_ac_c* i_this) {
|
||||
a_this->mpPath = set_path_info(i_this);
|
||||
a_this->field_0x570 = 0.0f;
|
||||
a_this->field_0x580 = 0;
|
||||
g_env_light.field_0xf21 = 1;
|
||||
g_env_light.mOdourData.field_0xf21 = 1;
|
||||
} else {
|
||||
if (a_this->field_0x585 == 0xFF) {
|
||||
return cPhs_UNK3_e;
|
||||
|
||||
@@ -153,7 +153,7 @@ static int daKytag10_IsDelete(kytag10_class* i_this) {
|
||||
/* 8052917C-80529248 0005FC 00CC+00 1/0 0/0 0/0 .text daKytag10_Delete__FP13kytag10_class
|
||||
*/
|
||||
static int daKytag10_Delete(kytag10_class* i_this) {
|
||||
g_env_light.field_0xf21 = 0;
|
||||
g_env_light.mOdourData.field_0xf21 = 0;
|
||||
|
||||
if (i_this->mpEmitter1 != NULL) {
|
||||
i_this->mpEmitter1->deleteAllParticle();
|
||||
|
||||
+128
-111
@@ -1273,12 +1273,8 @@ void dKyr_snow_init() {
|
||||
}
|
||||
|
||||
/* 8005FD48-80061324 05A688 15DC+00 0/0 1/1 0/0 .text dKyr_snow_move__Fv */
|
||||
// NONMATCHING mostly matches, 1 out of order instruction
|
||||
void dKyr_snow_move() {
|
||||
f32* temp_r26;
|
||||
cXyz* temp_r25;
|
||||
dKankyo_snow_Packet* snow_packet = g_env_light.mpSnowPacket;
|
||||
SNOW_EFF* effect;
|
||||
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
|
||||
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
||||
|
||||
@@ -1315,9 +1311,7 @@ void dKyr_snow_move() {
|
||||
}
|
||||
|
||||
snow_packet->field_0x6d74 = camera->lookat.eye;
|
||||
spA0.z = 0.0f;
|
||||
spA0.y = 0.0f;
|
||||
spA0.x = 0.0f;
|
||||
spA0.x = spA0.y = spA0.z = 0.0f;
|
||||
|
||||
cXyz* temp_r21 = dKyw_get_wind_vec();
|
||||
f32 var_f20 = dKyw_get_wind_pow();
|
||||
@@ -1349,37 +1343,31 @@ void dKyr_snow_move() {
|
||||
f32 gravity = -(2.0f + cM_rndF(6.5f));
|
||||
f32 speed = 2.0f * (5.0f + (f32)(i & 15));
|
||||
|
||||
effect = &snow_packet->mSnowEff[i];
|
||||
switch (snow_packet->mSnowEff[i].mStatus) {
|
||||
case 0:
|
||||
effect->mWindSpeed = speed;
|
||||
effect->mGravity = gravity;
|
||||
effect->mTimer = 0;
|
||||
effect->mBasePos.x = spAC.x + cM_rndFX(1100.0f);
|
||||
effect->mBasePos.y = spAC.y + 1100.0f;
|
||||
effect->mBasePos.z = spAC.z + cM_rndFX(1100.0f);
|
||||
effect->mPosition.x = spB8.x + cM_rndFX(550.0f);
|
||||
effect->mPosition.y = spB8.y + 550.0f;
|
||||
effect->mPosition.z = spB8.z + cM_rndFX(550.0f);
|
||||
effect->mScale = 0.0f;
|
||||
effect->mPosWaveX = cM_rndF(65536.0f);
|
||||
effect->mPosWaveZ = cM_rndF(65536.0f);
|
||||
effect->mStatus++;
|
||||
snow_packet->mSnowEff[i].mWindSpeed = speed;
|
||||
snow_packet->mSnowEff[i].mGravity = gravity;
|
||||
snow_packet->mSnowEff[i].mTimer = 0;
|
||||
snow_packet->mSnowEff[i].mBasePos.x = spAC.x + cM_rndFX(1100.0f);
|
||||
snow_packet->mSnowEff[i].mBasePos.y = spAC.y + 1100.0f;
|
||||
snow_packet->mSnowEff[i].mBasePos.z = spAC.z + cM_rndFX(1100.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.x = spB8.x + cM_rndFX(550.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.y = spB8.y + 550.0f;
|
||||
snow_packet->mSnowEff[i].mPosition.z = spB8.z + cM_rndFX(550.0f);
|
||||
snow_packet->mSnowEff[i].mScale = 0.0f;
|
||||
snow_packet->mSnowEff[i].mPosWaveX = cM_rndF(65536.0f);
|
||||
snow_packet->mSnowEff[i].mPosWaveZ = cM_rndF(65536.0f);
|
||||
snow_packet->mSnowEff[i].mStatus++;
|
||||
break;
|
||||
case 1:
|
||||
f32 target = cM_rndFX(0.08f);
|
||||
temp_r26 = &effect->mWindSpeed;
|
||||
target = effect->mWindSpeed - target;
|
||||
|
||||
cLib_addCalc(temp_r26, target, 0.5f, 0.1f, 0.01f);
|
||||
cLib_addCalc(&snow_packet->mSnowEff[i].mWindSpeed, snow_packet->mSnowEff[i].mWindSpeed - cM_rndFX(0.08f), 0.5f, 0.1f, 0.01f);
|
||||
|
||||
cXyz sp4C;
|
||||
sp88 = sp94;
|
||||
temp_r25 = &effect->mPosition;
|
||||
if (camera->lookat.eye.abs(*temp_r25) < 500.0f &&
|
||||
effect->mPosition.y < temp_f19 + 250.0f)
|
||||
if (camera->lookat.eye.abs(snow_packet->mSnowEff[i].mPosition) < 500.0f &&
|
||||
snow_packet->mSnowEff[i].mPosition.y < temp_f19 + 250.0f)
|
||||
{
|
||||
f32 var_f1_3 = ((temp_f19 + 250.0f) - effect->mPosition.y) / 250.0f;
|
||||
f32 var_f1_3 = ((temp_f19 + 250.0f) - snow_packet->mSnowEff[i].mPosition.y) / 250.0f;
|
||||
if (var_f1_3 > 1.0f) {
|
||||
var_f1_3 = 1.0f;
|
||||
}
|
||||
@@ -1387,26 +1375,26 @@ void dKyr_snow_move() {
|
||||
sp88.y = var_f1_3 * 0.45f;
|
||||
}
|
||||
|
||||
s16 wave_x = effect->mPosWaveX;
|
||||
s16 wave_z = effect->mPosWaveZ;
|
||||
s16 wave_x = snow_packet->mSnowEff[i].mPosWaveX;
|
||||
s16 wave_z = snow_packet->mSnowEff[i].mPosWaveZ;
|
||||
|
||||
sp4C.x = cM_scos(wave_x) * cM_ssin(wave_z);
|
||||
sp4C.y = cM_ssin(wave_x);
|
||||
sp4C.z = cM_scos(wave_x) * cM_scos(wave_z);
|
||||
|
||||
effect->mPosition.x += sp88.x * *temp_r26;
|
||||
effect->mPosition.z += sp88.z * *temp_r26;
|
||||
effect->mPosition.y += effect->mGravity + (sp88.y * *temp_r26);
|
||||
snow_packet->mSnowEff[i].mPosition.x += sp88.x * snow_packet->mSnowEff[i].mWindSpeed;
|
||||
snow_packet->mSnowEff[i].mPosition.z += sp88.z * snow_packet->mSnowEff[i].mWindSpeed;
|
||||
snow_packet->mSnowEff[i].mPosition.y += snow_packet->mSnowEff[i].mGravity + (sp88.y * snow_packet->mSnowEff[i].mWindSpeed);
|
||||
|
||||
effect->mPosition.x += sp4C.x * 5.3f;
|
||||
effect->mPosition.y += sp4C.y * 5.3f;
|
||||
effect->mPosition.z += sp4C.z * 5.3f;
|
||||
snow_packet->mSnowEff[i].mPosition.x += sp4C.x * 5.3f;
|
||||
snow_packet->mSnowEff[i].mPosition.y += sp4C.y * 5.3f;
|
||||
snow_packet->mSnowEff[i].mPosition.z += sp4C.z * 5.3f;
|
||||
|
||||
sp88 = sp94;
|
||||
if (camera->lookat.eye.abs(*temp_r25) < 500.0f &&
|
||||
effect->mBasePos.y < temp_f19 + 250.0f)
|
||||
if (camera->lookat.eye.abs(snow_packet->mSnowEff[i].mPosition) < 500.0f &&
|
||||
snow_packet->mSnowEff[i].mBasePos.y < temp_f19 + 250.0f)
|
||||
{
|
||||
f32 var_f1_5 = ((temp_f19 + 250.0f) - effect->mBasePos.y) / 250.0f;
|
||||
f32 var_f1_5 = ((temp_f19 + 250.0f) - snow_packet->mSnowEff[i].mBasePos.y) / 250.0f;
|
||||
if (var_f1_5 > 1.0f) {
|
||||
var_f1_5 = 1.0f;
|
||||
}
|
||||
@@ -1414,73 +1402,74 @@ void dKyr_snow_move() {
|
||||
sp88.y = var_f1_5 * 0.35f;
|
||||
}
|
||||
|
||||
effect->mBasePos.x += sp88.x * *temp_r26;
|
||||
effect->mBasePos.z += sp88.z * *temp_r26;
|
||||
effect->mBasePos.y += effect->mGravity + (sp88.y * *temp_r26);
|
||||
snow_packet->mSnowEff[i].mBasePos.x += sp88.x * snow_packet->mSnowEff[i].mWindSpeed;
|
||||
snow_packet->mSnowEff[i].mBasePos.z += sp88.z * snow_packet->mSnowEff[i].mWindSpeed;
|
||||
snow_packet->mSnowEff[i].mBasePos.y += snow_packet->mSnowEff[i].mGravity + (sp88.y * snow_packet->mSnowEff[i].mWindSpeed);
|
||||
|
||||
effect->mBasePos.x += sp4C.x * 5.3f;
|
||||
effect->mBasePos.y += sp4C.y * 5.3f;
|
||||
effect->mBasePos.z += sp4C.z * 5.3f;
|
||||
snow_packet->mSnowEff[i].mBasePos.x += sp4C.x * 5.3f;
|
||||
snow_packet->mSnowEff[i].mBasePos.y += sp4C.y * 5.3f;
|
||||
snow_packet->mSnowEff[i].mBasePos.z += sp4C.z * 5.3f;
|
||||
|
||||
cLib_addCalc(&effect->mPosWaveX, effect->mPosWaveX + cM_rndF(3000.0f), 0.25f,
|
||||
cLib_addCalc(&snow_packet->mSnowEff[i].mPosWaveX, snow_packet->mSnowEff[i].mPosWaveX + cM_rndF(3000.0f), 0.25f,
|
||||
1500.0f, 0.001f);
|
||||
cLib_addCalc(&effect->mPosWaveZ, effect->mPosWaveZ + cM_rndF(3000.0f), 0.25f,
|
||||
cLib_addCalc(&snow_packet->mSnowEff[i].mPosWaveZ, snow_packet->mSnowEff[i].mPosWaveZ + cM_rndF(3000.0f), 0.25f,
|
||||
1500.0f, 0.001f);
|
||||
|
||||
sp7C = effect->mPosition;
|
||||
sp7C = snow_packet->mSnowEff[i].mPosition;
|
||||
f32 var_f1_6 = sp7C.abs(spB8);
|
||||
|
||||
if (effect->mTimer == 0) {
|
||||
if (snow_packet->mSnowEff[i].mTimer == 0) {
|
||||
if (var_f1_6 > 550.0f) {
|
||||
effect->mTimer = 10;
|
||||
*temp_r26 = speed;
|
||||
effect->mGravity = gravity;
|
||||
snow_packet->mSnowEff[i].mTimer = 10;
|
||||
snow_packet->mSnowEff[i].mWindSpeed = speed;
|
||||
snow_packet->mSnowEff[i].mGravity = gravity;
|
||||
|
||||
if (sp7C.abs(spB8) > 600.0f) {
|
||||
effect->mPosition.x = spB8.x + cM_rndFX(550.0f);
|
||||
effect->mPosition.y = spB8.y + cM_rndFX(550.0f);
|
||||
effect->mPosition.z = spB8.z + cM_rndFX(550.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.x = spB8.x + cM_rndFX(550.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.y = spB8.y + cM_rndFX(550.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.z = spB8.z + cM_rndFX(550.0f);
|
||||
} else {
|
||||
f32 temp_f26_2 = cM_rndFX(27.5f);
|
||||
get_vectle_calc(&sp7C, &spB8, &sp70);
|
||||
|
||||
effect->mPosition.x = spB8.x + sp70.x * (temp_f26_2 + 550.0f);
|
||||
effect->mPosition.y = spB8.y + sp70.y * (temp_f26_2 + 550.0f);
|
||||
effect->mPosition.z = spB8.z + sp70.z * (temp_f26_2 + 550.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.x = spB8.x + sp70.x * (temp_f26_2 + 550.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.y = spB8.y + sp70.y * (temp_f26_2 + 550.0f);
|
||||
snow_packet->mSnowEff[i].mPosition.z = spB8.z + sp70.z * (temp_f26_2 + 550.0f);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
effect->mTimer--;
|
||||
snow_packet->mSnowEff[i].mTimer--;
|
||||
}
|
||||
|
||||
sp7C = effect->mBasePos;
|
||||
if (sp7C.abs(spAC) > 1100.0f) {
|
||||
sp7C = snow_packet->mSnowEff[i].mBasePos;
|
||||
f32 sp18 = sp7C.abs(spAC);
|
||||
if (sp18 > 1100.0f) {
|
||||
if (sp7C.abs(spAC) > 1150.0f) {
|
||||
effect->mBasePos.x = spAC.x + cM_rndFX(1100.0f);
|
||||
effect->mBasePos.y = spAC.y + cM_rndFX(1100.0f);
|
||||
effect->mBasePos.z = spAC.z + cM_rndFX(1100.0f);
|
||||
snow_packet->mSnowEff[i].mBasePos.x = spAC.x + cM_rndFX(1100.0f);
|
||||
snow_packet->mSnowEff[i].mBasePos.y = spAC.y + cM_rndFX(1100.0f);
|
||||
snow_packet->mSnowEff[i].mBasePos.z = spAC.z + cM_rndFX(1100.0f);
|
||||
} else {
|
||||
f32 temp_f26_3 = cM_rndFX(55.0f);
|
||||
get_vectle_calc(&sp7C, &spAC, &sp70);
|
||||
|
||||
effect->mBasePos.x = spAC.x + sp70.x * (temp_f26_3 + 1100.0f);
|
||||
effect->mBasePos.y = spAC.y + sp70.y * (temp_f26_3 + 1100.0f);
|
||||
effect->mBasePos.z = spAC.z + sp70.z * (temp_f26_3 + 1100.0f);
|
||||
snow_packet->mSnowEff[i].mBasePos.x = spAC.x + sp70.x * (temp_f26_3 + 1100.0f);
|
||||
snow_packet->mSnowEff[i].mBasePos.y = spAC.y + sp70.y * (temp_f26_3 + 1100.0f);
|
||||
snow_packet->mSnowEff[i].mBasePos.z = spAC.z + sp70.z * (temp_f26_3 + 1100.0f);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
sp7C = effect->mPosition;
|
||||
sp7C = snow_packet->mSnowEff[i].mPosition;
|
||||
|
||||
f32 var_f26 = sp7C.abs(camera->lookat.eye) / 100.0f;
|
||||
f32 var_f1_11 = sp7C.abs(camera->lookat.eye);
|
||||
f32 var_f26 = var_f1_11 / 100.0f;
|
||||
if (var_f26 > 1.0) {
|
||||
var_f26 = 1.0;
|
||||
}
|
||||
|
||||
var_f26 *= 0.4f;
|
||||
|
||||
f32 var_f1_11 = sp7C.abs(spB8);
|
||||
var_f1_11 = sp7C.abs(spB8);
|
||||
if (var_f1_11 > 300.0f) {
|
||||
f32 var_f1_12 = (550.0f - var_f1_11) / 250.0f;
|
||||
if (var_f1_12 < 0.0f) {
|
||||
@@ -1491,12 +1480,13 @@ void dKyr_snow_move() {
|
||||
}
|
||||
|
||||
if (i > g_env_light.mSnowCount - 1) {
|
||||
cLib_addCalc(&effect->mScale, 0.0f, 0.2f, 0.1f, 0.01f);
|
||||
var_f26 = 0.0f;
|
||||
cLib_addCalc(&snow_packet->mSnowEff[i].mScale, var_f26, 0.2f, 0.1f, 0.01f);
|
||||
} else {
|
||||
effect->mScale = var_f26;
|
||||
snow_packet->mSnowEff[i].mScale = var_f26;
|
||||
}
|
||||
|
||||
if (i > g_env_light.mSnowCount - 1 && effect->mScale < 0.01f) {
|
||||
if (i > g_env_light.mSnowCount - 1 && snow_packet->mSnowEff[i].mScale < 0.01f) {
|
||||
if (i == snow_packet->field_0x6d88 - 1) {
|
||||
snow_packet->field_0x6d88--;
|
||||
}
|
||||
@@ -1504,46 +1494,48 @@ void dKyr_snow_move() {
|
||||
|
||||
if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) {
|
||||
if (sp7C.z > -340.0f) {
|
||||
effect->mScale = 0.0f;
|
||||
snow_packet->mSnowEff[i].mScale = 0.0f;
|
||||
}
|
||||
} else if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) {
|
||||
if (sp7C.z > 9800.0f) {
|
||||
effect->mScale = 0.0f;
|
||||
snow_packet->mSnowEff[i].mScale = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
sp7C = effect->mBasePos;
|
||||
sp7C = snow_packet->mSnowEff[i].mBasePos;
|
||||
|
||||
f32 var_f26_3 = sp7C.abs(camera->lookat.eye) / 100.0f;
|
||||
if (var_f26_3 > 1.0) {
|
||||
var_f26_3 = 1.0;
|
||||
var_f1_11 = sp7C.abs(camera->lookat.eye);
|
||||
f32 temp_f29 = var_f1_11 / 100.0f;
|
||||
if (temp_f29 > 1.0) {
|
||||
temp_f29 = 1.0;
|
||||
}
|
||||
|
||||
var_f26_3 *= 0.38f;
|
||||
temp_f29 *= 0.38f;
|
||||
|
||||
f32 var_f1_14 = sp7C.abs(spAC);
|
||||
if (var_f1_14 > 850.0f) {
|
||||
f32 var_f1_15 = (1100.0f - var_f1_14) / 250.0f;
|
||||
var_f1_11 = sp7C.abs(spAC);
|
||||
if (var_f1_11 > 850.0f) {
|
||||
f32 var_f1_15 = (1100.0f - var_f1_11) / 250.0f;
|
||||
if (var_f1_15 < 0.0f) {
|
||||
var_f1_15 = 0.0f;
|
||||
}
|
||||
|
||||
var_f26_3 *= var_f1_15;
|
||||
temp_f29 *= var_f1_15;
|
||||
}
|
||||
|
||||
if (i > g_env_light.mSnowCount - 1) {
|
||||
cLib_addCalc(&effect->field_0x30, 0.0f, 0.2f, 0.1f, 0.01f);
|
||||
temp_f29 = 0.0f;
|
||||
cLib_addCalc(&snow_packet->mSnowEff[i].field_0x30, temp_f29, 0.2f, 0.1f, 0.01f);
|
||||
} else {
|
||||
effect->field_0x30 = var_f26_3;
|
||||
snow_packet->mSnowEff[i].field_0x30 = temp_f29;
|
||||
}
|
||||
|
||||
if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) {
|
||||
if (sp7C.z > -340.0f) {
|
||||
effect->field_0x30 = 0.0f;
|
||||
snow_packet->mSnowEff[i].field_0x30 = 0.0f;
|
||||
}
|
||||
} else if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) {
|
||||
if (sp7C.z > 9800.0f) {
|
||||
effect->field_0x30 = 0.0f;
|
||||
snow_packet->mSnowEff[i].field_0x30 = 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1836,7 +1828,6 @@ void cloud_shadow_move() {
|
||||
}
|
||||
|
||||
/* 800620AC-80062ADC 05C9EC 0A30+00 0/0 1/1 0/0 .text vrkumo_move__Fv */
|
||||
// NONMATCHING - switch case issue, fsubs instead of fsub
|
||||
void vrkumo_move() {
|
||||
cXyz wind_vecpow = dKyw_get_wind_vecpow();
|
||||
dKankyo_vrkumo_Packet* vrkumo_packet = g_env_light.mpVrkumoPacket;
|
||||
@@ -1896,6 +1887,13 @@ void vrkumo_move() {
|
||||
|
||||
if (filelist != NULL) {
|
||||
sp2C = dStage_FileList_dt_SeaLevel(filelist);
|
||||
#ifdef DEBUG
|
||||
if (g_kankyoHIO.field_0xB4) {
|
||||
sp2C = g_kankyoHIO.field_0xB8;
|
||||
} else {
|
||||
g_kankyoHIO.field_0xB8 = sp2C;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
sp6C -= 0.09f * (camera->lookat.eye.y - sp2C);
|
||||
@@ -1911,7 +1909,8 @@ void vrkumo_move() {
|
||||
}
|
||||
|
||||
f32 var_f31 = sp34 * cM_ssin(sp8);
|
||||
if (fabsf(var_f31 < 5000.0f)) {
|
||||
// @bug - parenthesis should not be on the condition
|
||||
if ((f32)fabs(var_f31 < 5000.0f)) {
|
||||
if (var_f31 > 0.0f) {
|
||||
var_f31 += 5000.0f;
|
||||
} else {
|
||||
@@ -1923,7 +1922,8 @@ void vrkumo_move() {
|
||||
vrkumo_packet->mVrkumoEff[i].mPosition.y = 0.0f;
|
||||
|
||||
var_f31 = sp34 * cM_scos(sp8);
|
||||
if (fabsf(var_f31 < 5000.0f)) {
|
||||
// @bug - parenthesis should not be on the condition
|
||||
if ((f32)fabs(var_f31 < 5000.0f)) {
|
||||
if (var_f31 > 0.0f) {
|
||||
var_f31 += 5000.0f;
|
||||
} else {
|
||||
@@ -1951,7 +1951,8 @@ void vrkumo_move() {
|
||||
}
|
||||
var_f31 = sp34 * cM_ssin(sp8);
|
||||
|
||||
if (fabsf(var_f31 < 5000.0f)) {
|
||||
// @bug - parenthesis should not be on the condition
|
||||
if ((f32)fabs(var_f31 < 5000.0f)) {
|
||||
if (var_f31 > 0.0f) {
|
||||
var_f31 += 5000.0f;
|
||||
} else {
|
||||
@@ -1963,7 +1964,9 @@ void vrkumo_move() {
|
||||
vrkumo_packet->mVrkumoEff[i].mPosition.y = 0.0f;
|
||||
|
||||
var_f31 = sp34 * cM_scos(sp8);
|
||||
if (fabsf(var_f31 < 5000.0f)) {
|
||||
|
||||
// @bug - parenthesis should not be on the condition
|
||||
if ((f32)fabs(var_f31 < 5000.0f)) {
|
||||
if (var_f31 > 0.0f) {
|
||||
var_f31 += 5000.0f;
|
||||
} else {
|
||||
@@ -1994,7 +1997,7 @@ void vrkumo_move() {
|
||||
vrkumo_packet->mVrkumoEff[i].mPosition.z += wind_vecpow.z * (sp70 * vrkumo_packet->mVrkumoEff[i].mSpeed) * vrkumo_packet->mVrkumoEff[i].mDistFalloff;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2693,7 +2696,6 @@ void dKyr_drawSun(Mtx drawMtx, cXyz* ppos, GXColor& unused, u8** tex) {
|
||||
|
||||
/* 8006444C-8006562C 05ED8C 11E0+00 0/0 1/1 0/0 .text
|
||||
* dKyr_drawLenzflare__FPA4_fP4cXyzR8_GXColorPPUc */
|
||||
// NONMATCHING - some issue with sp5C and float to int conversions
|
||||
void dKyr_drawLenzflare(Mtx drawMtx, cXyz* ppos, GXColor& param_2, u8** tex) {
|
||||
dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
|
||||
dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
|
||||
@@ -2983,8 +2985,8 @@ void dKyr_drawLenzflare(Mtx drawMtx, cXyz* ppos, GXColor& param_2, u8** tex) {
|
||||
|
||||
GXColor sp60;
|
||||
sp60.r = 0xFF;
|
||||
sp60.g = 0xFF;
|
||||
sp60.b = 0xFF;
|
||||
sp60.a = 0xFF;
|
||||
|
||||
f32 sp5C = 0.12f;
|
||||
color_reg0.r = ((f32)spD0.r * (1.0f - sp5C)) + ((f32)sp60.r * sp5C);
|
||||
@@ -3750,7 +3752,6 @@ void dKyr_drawHousi(Mtx drawMtx, u8** tex) {
|
||||
}
|
||||
|
||||
/* 80067488-800685DC 061DC8 1154+00 0/0 1/1 0/0 .text dKyr_drawSnow__FPA4_fPPUc */
|
||||
// NONMATCHING - small branching issue
|
||||
void dKyr_drawSnow(Mtx drawMtx, u8** tex) {
|
||||
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
|
||||
dKankyo_snow_Packet* snow_packet = g_env_light.mpSnowPacket;
|
||||
@@ -3900,7 +3901,7 @@ void dKyr_drawSnow(Mtx drawMtx, u8** tex) {
|
||||
if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0) {
|
||||
if (dComIfGp_roomControl_getStayNo() == 4) {
|
||||
if ((sp7C.x > 2079.0f && sp7C.x < 3013.0f && sp7C.y < 864.0f && sp7C.z > -6000.0f && sp7C.z < -4145.0f) ||
|
||||
(sp7C.x > -2960.0f && sp7C.z > -880.0f && sp7C.z < -6000.0f) ||
|
||||
sp7C.x < -2960.0f || sp7C.z > -880.0f || sp7C.z < -6000.0f ||
|
||||
(sp7C.z < -4920.0f && sp7C.y < 864.0f && sp7C.x < -2000.0f))
|
||||
{
|
||||
continue;
|
||||
@@ -4610,6 +4611,14 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) {
|
||||
|
||||
if (filelist != NULL) {
|
||||
sp70 = dStage_FileList_dt_SeaLevel(filelist);
|
||||
|
||||
#ifdef DEBUG
|
||||
if (g_kankyoHIO.field_0xB4) {
|
||||
sp70 = g_kankyoHIO.field_0xB8;
|
||||
} else {
|
||||
g_kankyoHIO.field_0xB8 = sp70;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
unused = 1.0f - (0.09f * (camera->lookat.eye.y - sp70));
|
||||
@@ -4710,8 +4719,14 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) {
|
||||
|
||||
static f32 howa_loop_cnt = 0.0f;
|
||||
|
||||
#ifdef DEBUG
|
||||
spAC = g_kankyoHIO.field_0x3f4;
|
||||
spA8 = g_kankyoHIO.field_0x3f8;
|
||||
#else
|
||||
spAC = 0.6f;
|
||||
spA8 = 0.84f;
|
||||
#endif
|
||||
|
||||
if (dKy_darkworld_check()) {
|
||||
spAC = 0.8f;
|
||||
spA8 = 0.8f;
|
||||
@@ -5187,7 +5202,7 @@ void dKyr_shstar_move() {}
|
||||
/* 8006B8E4-8006B924 066224 0040+00 0/0 1/1 0/0 .text dKyr_odour_init__Fv */
|
||||
void dKyr_odour_init() {
|
||||
dScnKy_env_light_c* envlight = dKy_getEnvlight();
|
||||
dKankyo_odour_Packet* odour_packet = envlight->mpOdourPacket;
|
||||
dKankyo_odour_Packet* odour_packet = envlight->mOdourData.mpOdourPacket;
|
||||
|
||||
for (int i = 0; i < 2000; i++) {
|
||||
odour_packet->mOdourEff[i].mStatus = 0;
|
||||
@@ -5198,10 +5213,10 @@ void dKyr_odour_init() {
|
||||
}
|
||||
|
||||
/* 8006B924-8006BE0C 066264 04E8+00 0/0 1/1 0/0 .text dKyr_odour_move__Fv */
|
||||
// NONMATCHING - some small regalloc
|
||||
void dKyr_odour_move() {
|
||||
dScnKy_env_light_c* envlight = dKy_getEnvlight();
|
||||
dKankyo_odour_Packet* odour_packet = envlight->mpOdourPacket;
|
||||
dKy_Odour_Data* pOdourData = &envlight->mOdourData;
|
||||
dKankyo_odour_Packet* odour_packet = pOdourData->mpOdourPacket;
|
||||
|
||||
Mtx camMtx;
|
||||
cXyz sp20(0.0f, 1.0f, 0.0f);
|
||||
@@ -5213,8 +5228,8 @@ void dKyr_odour_move() {
|
||||
return;
|
||||
}
|
||||
|
||||
odour_packet->field_0x17724 -= (int)cM_rndF(150.0f) + 430;
|
||||
odour_packet->field_0x17726 -= (int)cM_rndF(50.0f) + 200;
|
||||
odour_packet->field_0x17724 -= ((int)cM_rndF(150.0f) + 430);
|
||||
odour_packet->field_0x17726 -= ((int)cM_rndF(50.0f) + 200);
|
||||
|
||||
for (int i = 0; i < 2000; i++) {
|
||||
EF_ODOUR_EFF* effect = &odour_packet->mOdourEff[i];
|
||||
@@ -5241,13 +5256,15 @@ void dKyr_odour_move() {
|
||||
}
|
||||
temp_f31 = 0.3f;
|
||||
|
||||
f32 temp_f30 = cM_scos(odour_packet->field_0x17724 + ((s16)(int)temp_f29 * 38));
|
||||
f32 temp_f30 = cM_scos(odour_packet->field_0x17724 + 38 * (s16)temp_f29);
|
||||
effect->mPosition.x = 60.0f * (temp_f30 * temp_f31);
|
||||
effect->mPosition.z = 60.0f * (temp_f30 * temp_f31);
|
||||
|
||||
if (effect->mStatus < 10) {
|
||||
effect->mPosition.y = 90.0f * ((0.8f + cM_scos(odour_packet->field_0x17724 + ((int)temp_f29 * 160))) * temp_f31);
|
||||
effect->mPosition.y += 110.0f * ((0.8f + cM_ssin(odour_packet->field_0x17726 + ((int)temp_f29 * 45))) * temp_f31);
|
||||
temp_f30 = cM_scos(odour_packet->field_0x17724 + ((s16)temp_f29 * 160));
|
||||
effect->mPosition.y = 90.0f * ((0.8f + temp_f30) * temp_f31);
|
||||
temp_f30 = cM_ssin(odour_packet->field_0x17726 + ((s16)temp_f29 * 45));
|
||||
effect->mPosition.y += 110.0f * ((0.8f + temp_f30) * temp_f31);
|
||||
} else {
|
||||
temp_f30 = cM_scos((int)(78.0f * temp_f29) + (int)(f32)odour_packet->field_0x17724);
|
||||
|
||||
@@ -5255,7 +5272,7 @@ void dKyr_odour_move() {
|
||||
effect->mPosition.x = 150.0f * (temp_f30 * temp_f31);
|
||||
effect->mPosition.z = 140.0f * (temp_f30 * temp_f31);
|
||||
|
||||
temp_f30 = cM_ssin(((int)temp_f29 * 45) + (int)(f32)odour_packet->field_0x17726);
|
||||
temp_f30 = cM_ssin(((s16)temp_f29 * 45) + (int)(f32)odour_packet->field_0x17726);
|
||||
effect->mPosition.x += 100.0f * (temp_f30 * temp_f31);
|
||||
effect->mPosition.z += 100.0f * (temp_f30 * temp_f31);
|
||||
}
|
||||
@@ -5288,7 +5305,7 @@ void dKyr_odour_move() {
|
||||
// NONMATCHING - regalloc
|
||||
void dKyr_odour_draw(Mtx drawMtx, u8** tex) {
|
||||
dScnKy_env_light_c* envlight = dKy_getEnvlight();
|
||||
dKankyo_odour_Packet* odour_packet = envlight->mpOdourPacket;
|
||||
dKankyo_odour_Packet* odour_packet = envlight->mOdourData.mpOdourPacket;
|
||||
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
|
||||
|
||||
static f32 rot = 0.0f;
|
||||
|
||||
+24
-24
@@ -266,7 +266,7 @@ static void dKyw_shstar_Draw() {
|
||||
|
||||
/* 800573E4-80057414 051D24 0030+00 1/1 0/0 0/0 .text dKyw_odour_packet__Fi */
|
||||
static void dKyw_odour_packet(int i_type) {
|
||||
dKyw_setDrawPacketListIndScreen(g_env_light.mpOdourPacket, i_type);
|
||||
dKyw_setDrawPacketListIndScreen(g_env_light.mOdourData.mpOdourPacket, i_type);
|
||||
}
|
||||
|
||||
/* 80057414-80057438 051D54 0024+00 1/1 0/0 0/0 .text dKyw_Odour_Draw__Fv */
|
||||
@@ -315,10 +315,10 @@ void dKyw_wether_init() {
|
||||
g_env_light.mMoyaMode = 0;
|
||||
g_env_light.mHousiInitialized = false;
|
||||
g_env_light.mHousiCount = 0;
|
||||
g_env_light.mOdourPacketStatus = 0;
|
||||
g_env_light.field_0xf24 = 0;
|
||||
g_env_light.field_0xf21 = 0;
|
||||
g_env_light.mpOdourPacket = NULL;
|
||||
g_env_light.mOdourData.mOdourPacketStatus = 0;
|
||||
g_env_light.mOdourData.field_0xf24 = 0;
|
||||
g_env_light.mOdourData.field_0xf21 = 0;
|
||||
g_env_light.mOdourData.mpOdourPacket = NULL;
|
||||
g_env_light.field_0x1038 = 0;
|
||||
g_env_light.field_0x103c = 0;
|
||||
g_env_light.mMudInitialized = 0;
|
||||
@@ -407,9 +407,9 @@ void dKyw_wether_delete() {
|
||||
g_env_light.mpCloudPacket = NULL;
|
||||
}
|
||||
|
||||
if (g_env_light.mOdourPacketStatus) {
|
||||
delete g_env_light.mpOdourPacket;
|
||||
g_env_light.mpOdourPacket = NULL;
|
||||
if (g_env_light.mOdourData.mOdourPacketStatus) {
|
||||
delete g_env_light.mOdourData.mpOdourPacket;
|
||||
g_env_light.mOdourData.mpOdourPacket = NULL;
|
||||
}
|
||||
|
||||
if (g_env_light.mMudInitialized) {
|
||||
@@ -840,35 +840,35 @@ static void wether_move_housi() {
|
||||
|
||||
/* 800593DC-80059580 053D1C 01A4+00 1/1 0/0 0/0 .text wether_move_odour__Fv */
|
||||
static void wether_move_odour() {
|
||||
switch (g_env_light.mOdourPacketStatus) {
|
||||
switch (g_env_light.mOdourData.mOdourPacketStatus) {
|
||||
case 0:
|
||||
if (g_env_light.field_0xf21 != 0) {
|
||||
g_env_light.mpOdourPacket = new (32) dKankyo_odour_Packet();
|
||||
if (g_env_light.mOdourData.field_0xf21 != 0) {
|
||||
g_env_light.mOdourData.mpOdourPacket = new (32) dKankyo_odour_Packet();
|
||||
|
||||
if (g_env_light.mpOdourPacket != NULL) {
|
||||
g_env_light.mpOdourPacket->mpResTex = (u8*)dComIfG_getObjectRes("Always", 0x53);
|
||||
if (g_env_light.mOdourData.mpOdourPacket != NULL) {
|
||||
g_env_light.mOdourData.mpOdourPacket->mpResTex = (u8*)dComIfG_getObjectRes("Always", 0x53);
|
||||
dKyr_odour_init();
|
||||
dKyr_odour_move();
|
||||
g_env_light.mOdourPacketStatus = 1;
|
||||
g_env_light.mOdourData.mOdourPacketStatus = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (g_env_light.field_0xf21 == 0) {
|
||||
g_env_light.mOdourPacketStatus = 0;
|
||||
if (g_env_light.mpOdourPacket != NULL) {
|
||||
delete g_env_light.mpOdourPacket;
|
||||
g_env_light.mpOdourPacket = NULL;
|
||||
if (g_env_light.mOdourData.field_0xf21 == 0) {
|
||||
g_env_light.mOdourData.mOdourPacketStatus = 0;
|
||||
if (g_env_light.mOdourData.mpOdourPacket != NULL) {
|
||||
delete g_env_light.mOdourData.mpOdourPacket;
|
||||
g_env_light.mOdourData.mpOdourPacket = NULL;
|
||||
}
|
||||
} else {
|
||||
dKyr_odour_move();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
g_env_light.field_0xf21 = 0;
|
||||
g_env_light.mOdourPacketStatus = 0;
|
||||
delete g_env_light.mpOdourPacket;
|
||||
g_env_light.mpOdourPacket = NULL;
|
||||
g_env_light.mOdourData.field_0xf21 = 0;
|
||||
g_env_light.mOdourData.mOdourPacketStatus = 0;
|
||||
delete g_env_light.mOdourData.mpOdourPacket;
|
||||
g_env_light.mOdourData.mpOdourPacket = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1153,7 +1153,7 @@ void dKyw_wether_draw() {
|
||||
dKyw_Housi_Draw();
|
||||
}
|
||||
|
||||
if (g_env_light.mOdourPacketStatus != 0) {
|
||||
if (g_env_light.mOdourData.mOdourPacketStatus != 0) {
|
||||
dKyw_Odour_Draw();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user