c_damagereaction 20%

This commit is contained in:
LagoLunatic
2023-10-10 17:26:00 -04:00
parent e7a2f4c209
commit 7e226cc930
15 changed files with 629 additions and 62 deletions
+11
View File
@@ -88,6 +88,12 @@ struct TVec3<f32> {
z = other.z;
}
void set(const Vec& vec) {
x = vec.x;
y = vec.y;
z = vec.z;
}
void set(f32 x_, f32 y_, f32 z_) {
x = x_;
y = y_;
@@ -140,6 +146,11 @@ struct TVec3<f32> {
return *this;
}
inline TVec3<f32>& operator=(const Vec& vec) {
set(vec);
return *this;
}
f32 squared() const {
return C_VECSquareMag((Vec*)&x);
}
+6 -3
View File
@@ -93,10 +93,13 @@ public:
mGlobalScale2D.set(scale);
}
void setGlobalParticleScale(const JGeometry::TVec3<float>& scale) {
mGlobalScale.set(scale);
mGlobalScale2D.set(scale);
}
void setGlobalDynamicsScale(const JGeometry::TVec3<float>& scale) {
mGlobalScale2D.set(scale);
mGlobalScale.set(scale);
}
void setDirection(const JGeometry::TVec3<float>& dir) {
mEmitterDir.set(dir);
}
void setMaxFrame(s32 maxFrame) { mMaxFrame = maxFrame; }
@@ -126,7 +129,7 @@ public:
/* 0x024 */ csXyz mEmitterRot;
/* 0x02A */ u8 mVolumeType;
/* 0x02B */ u8 mRateStep;
/* 0x02C */ cXyz mEmitterDir;
/* 0x02C */ JGeometry::TVec3<f32> mEmitterDir;
/* 0x038 */ f32 mRate;
/* 0x03C */ f32 mRateRndm;
/* 0x040 */ f32 mAccel;
+1
View File
@@ -40,6 +40,7 @@ enum cCcD_ObjAtType {
/* 0x04000000 */ AT_TYPE_DARKNUT_SWORD = (1 << 26),
/* 0x08000000 */ AT_TYPE_GRAPPLING_HOOK = (1 << 27),
/* 0x10000000 */ AT_TYPE_MOBLIN_SPEAR = (1 << 28),
/* 0xFFFFFFFF */ AT_TYPE_ALL = ~0,
};
class cCcD_ShapeAttr {
+1 -1
View File
@@ -102,7 +102,7 @@ T cLib_calcTimer(T* value) {
void MtxInit(void);
void MtxTrans(f32, f32, f32, u8);
void MtxScale(f32, f32, f32, u8);
void MtxPosition(cXyz*, cXyz*);
void MtxPosition(cXyz* src, cXyz* dest);
void MtxPush(void);
Mtx* MtxPull(void);
+18 -19
View File
@@ -11,19 +11,19 @@
struct enemyice {
public:
/* 0x000 */ fopAc_ac_c* mpActor;
/* 0x004 */ s16 mTotalNumFramesToRemainFrozen;
/* 0x006 */ u8 mNumFramesDyingToLightArrowsSoFar;
/* 0x004 */ s16 mFreezeDuration;
/* 0x006 */ s8 mLightShrinkTimer;
/* 0x007 */ u8 m007[0x008 - 0x007];
/* 0x008 */ f32 mYOffset;
/* 0x00C */ u8 m00C;
/* 0x00D */ u8 mState;
/* 0x00E */ s16 mNumFramesLeftToRemainFrozen;
/* 0x00C */ s8 m00C;
/* 0x00D */ s8 mState;
/* 0x00E */ s16 mFreezeTimer;
/* 0x010 */ s16 m010;
/* 0x012 */ s16 m012;
/* 0x014 */ s16 m014;
/* 0x012 */ s16 mAngleY;
/* 0x014 */ s16 mAngularVelY;
/* 0x016 */ u8 m016[0x018 - 0x016];
/* 0x018 */ cXyz m018;
/* 0x024 */ f32 m024;
/* 0x018 */ cXyz mSpeed;
/* 0x024 */ f32 mSpeedF;
/* 0x028 */ f32 m028;
/* 0x02C */ f32 m02C;
/* 0x030 */ dCcD_Stts mStts;
@@ -32,7 +32,7 @@ public:
/* 0x1A0 */ f32 mWallRadius;
/* 0x1A4 */ f32 mScaleXZ;
/* 0x1A8 */ f32 mScaleY;
/* 0x1AC */ f32 m1AC;
/* 0x1AC */ f32 mParticleScale;
/* 0x1B0 */ u8 m1B0;
/* 0x1B1 */ u8 mDeathSwitch;
/* 0x1B2 */ u8 m1B2[0x1B4 - 0x1B2];
@@ -45,22 +45,21 @@ struct enemyfire {
public:
/* 0x000 */ fopAc_ac_c* mpActor;
/* 0x004 */ s16 m004;
/* 0x006 */ u8 m006;
/* 0x006 */ s8 m006;
/* 0x007 */ u8 m007[0x008 - 0x007];
/* 0x008 */ s16 m008;
/* 0x00A */ u8 m00A[0x00C - 0x00A];
/* 0x00C */ mDoExt_McaMorf* mpMcaMorf;
/* 0x010 */ u8 m010[10];
/* 0x010 */ s8 m010[10];
/* 0x01A */ u8 m01A[0x01C - 0x01A];
/* 0x01C */ f32 m01C[10];
/* 0x044 */ u8 m044[0x080 - 0x044];
/* 0x044 */ s16 m044[10];
/* 0x058 */ JPABaseEmitter* mpFireEmitters[10];
/* 0x080 */ cXyz m080;
/* 0x08C */ f32 m08C;
/* 0x090 */ f32 m090;
/* 0x094 */ f32 m094;
/* 0x08C */ JGeometry::TVec3<f32> m08C;
/* 0x098 */ f32 m098;
/* 0x09C */ u8 m09C[0x09D - 0x09C];
/* 0x09D */ char m09D;
/* 0x09D */ u8 m09D;
/* 0x09E */ u8 m09E[0x0A0 - 0x09E];
/* 0x0A0 */ dCcD_Stts mStts;
/* 0x0DC */ dCcD_Sph mSph;
@@ -184,12 +183,12 @@ public:
};
// STATIC_ASSERT(sizeof(damagereaction) == 0x7BC);
void ice_bg_check(enemyice*);
BOOL ice_bg_check(enemyice*);
BOOL enemy_ice(enemyice*);
void enemy_fire(enemyfire*);
void enemy_fire_remove(enemyfire*);
void enemy_piyo_set(fopAc_ac_c*);
void wall_angle_get(fopAc_ac_c*, short);
void wall_angle_get(fopAc_ac_c*, s16);
void dr_body_bg_check(damagereaction*);
void dr_joint_bg_check(damagereaction*);
void kado_check(damagereaction*);
+2 -1
View File
@@ -80,7 +80,8 @@ public:
dBgS_Acch();
void Init();
void Set(fopAc_ac_c*, int, dBgS_AcchCir*);
void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*);
void Set(cXyz* pos, cXyz* old_pos, fopAc_ac_c* actor, int tbl_size, dBgS_AcchCir* acchCir, cXyz* speed,
csXyz* angle, csXyz* shape_angle);
void GroundCheckInit(dBgS&);
void GroundCheck(dBgS&);
void GroundRoofProc(dBgS&);
+5
View File
@@ -5,6 +5,11 @@
#include "f_op/f_op_actor.h"
struct CcAtInfo {
public:
CcAtInfo() {}
~CcAtInfo() {}
public:
/* 0x00 */ cCcD_Obj* mpObj;
/* 0x04 */ fopAc_ac_c* mpActor;
/* 0x08 */ u8 mDamage;
+1 -1
View File
@@ -13,7 +13,7 @@ public:
void offReset();
static bool isPause() { return pauseTimer != 0; }
static void setPauseTimer(s8 time) { pauseTimer = time; }
static void setPauseTimer(s8 time) { nextPauseTimer = time; }
static s8 pauseTimer;
static s8 nextPauseTimer;
+1
View File
@@ -29,6 +29,7 @@ enum fopAc_Status_e {
fopAcStts_UNK200000_e = 0x00200000,
fopAcStts_NODRAW_e = 0x01000000,
fopAcStts_BOSS_e = 0x04000000,
fopAcStts_UNK8000000_e = 0x08000000,
};
enum fopAc_Condition_e {
+4 -4
View File
@@ -87,7 +87,7 @@ inline bool fopAcM_checkStatus(fopAc_ac_c* pActor, u32 status) {
}
inline u32 fopAcM_checkCarryNow(fopAc_ac_c* pActor) {
return pActor->mStatus & 0x2000;
return pActor->mStatus & fopAcStts_CARRY_e;
}
enum fopAcM_CARRY {
@@ -442,13 +442,13 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_tableNo, int i_itemBitNo, int
csXyz* p_angle, int param_5, cXyz * p_scale, f32* speedF,
f32* speedY, bool createDirect);
s32 fopAcM_createShopItem(cXyz* pos, int i_itemNo, csXyz* rot, int roomNo, cXyz* scale,
s32 fopAcM_createShopItem(cXyz* p_pos, int i_itemNo, csXyz* rot, int roomNo, cXyz* scale,
createFunc createFunc);
s32 fopAcM_createRaceItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* rot, int roomNo,
s32 fopAcM_createRaceItem(cXyz* p_pos, int i_itemNo, int i_itemBitNo, csXyz* rot, int roomNo,
cXyz* scale, int param_7);
s32 fopAcM_createIball(cXyz*, int, int, csXyz*, int);
s32 fopAcM_createIball(cXyz* p_pos, int itemTableIdx, int roomNo, csXyz* rot, int itemStealNum);
s32 fopAcM_createDemoItem(cXyz* p_pos, int itemNo, int itemBitNo, csXyz* p_angle,
int roomNo, cXyz* scale, u8 param_7);
+563 -18
View File
@@ -5,73 +5,618 @@
#include "c/c_damagereaction.h"
#include "dolphin/types.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_sea.h"
#include "d/d_s_play.h"
#include "JAZelAudio/JAZelAudio_SE.h"
#include "f_op/f_op_actor_mng.h"
#include "m_Do/m_Do_mtx.h"
#include "d/d_cc_uty.h"
#include "d/d_procname.h"
cXyz non_pos(-20000.0f, -20000.0f, 20000.0f);
/* 8001BEDC-8001C0B4 .text ice_bg_check__FP8enemyice */
void ice_bg_check(enemyice*) {
/* Nonmatching */
BOOL ice_bg_check(enemyice* ei) {
fopAc_ac_c* ac = ei->mpActor;
BOOL ret = FALSE;
f32 speedY = ei->mSpeed.y;
ei->mBgAcch.CrrPos(*dComIfG_Bgsp());
if (ei->mBgAcch.ChkWaterHit()) {
f32 waterH = ei->mBgAcch.m_wtr.GetHeight();
if (ac->current.pos.y < waterH + 100.0f) {
if (speedY < -20.0f) {
ei->mSpeed.y = 0.0f;
} else {
ei->mSpeed.y = 0.0f;
}
if (ac->mHealth <= 0) {
ret = TRUE;
}
}
} else if (ei->mBgAcch.ChkGroundHit()) {
ei->mSpeedF *= 0.5f;
if (ac->mHealth <= 0 || speedY < -40.0f + g_regHIO.mChild[0].mFloatRegs[14]) {
ret = TRUE;
}
if (speedY < -20.0f) {
ei->mSpeed.y = 10.0f;
} else {
ei->mSpeed.y = 0.0f;
}
ei->mAngularVelY = 0;
} else if (daSea_ChkArea(ac->current.pos.x, ac->current.pos.z)) {
f32 seaH = daSea_calcWave(ac->current.pos.x, ac->current.pos.z);
if (ac->current.pos.y < seaH + 100.0f) {
if (speedY < -20.0f) {
ei->mSpeed.y = 0.0f;
} else {
ei->mSpeed.y = 0.0f;
}
if (ac->mHealth <= 0) {
ret = TRUE;
}
}
}
if (ei->mBgAcch.ChkWallHit()) {
if (fabsf(ei->mSpeedF) > 10.0f) {
ret = TRUE;
}
ei->mSpeedF *= 0.5f;
ei->mAngleY += 0x8000;
}
return ret;
}
dCcD_SrcCyl cc_cyl_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ AT_TYPE_SKULL_HAMMER,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0x0F,
/* SrcObjTg Type */ AT_TYPE_ALL,
/* SrcObjTg SPrm */ 0x03,
/* SrcObjCo SPrm */ 0x75,
/* SrcGObjAt Se */ 0,
/* SrcGObjAt HitMark */ 0,
/* SrcGObjAt Spl */ 0,
/* SrcGObjAt Mtrl */ 0,
/* SrcGObjAt GFlag */ 0,
/* SrcGObjTg Se */ 0x05,
/* SrcGObjTg HitMark */ 0x0C,
/* SrcGObjTg Spl */ 0,
/* SrcGObjTg Mtrl */ 0,
/* SrcGObjTg GFlag */ 0x03,
/* SrcGObjCo GFlag */ 0,
},
// cM3dGCylS
{
/* Center */ 0.0f, 0.0f, 0.0f,
/* Radius */ 250.0f,
/* Height */ 400.0f,
},
};
/* 8001C0B4-8001CD7C .text enemy_ice__FP8enemyice */
BOOL enemy_ice(enemyice*) {
/* Nonmatching */
BOOL enemy_ice(enemyice* ei) {
fopAc_ac_c* player = dComIfGp_getPlayer(0);
fopAc_ac_c* ac = ei->mpActor;
s8 temp13 = 0;
cXyz temp;
cXyz temp11;
cXyz particleScale;
cXyz pos;
if (ei->mLightShrinkTimer != 0) {
particleScale.setAll(ei->mParticleScale);
pos = ac->current.pos;
pos.y += ei->mYOffset;
if (ei->mLightShrinkTimer == 1) {
ei->mLightShrinkTimer++;
dComIfGp_particle_set(0x272, &pos, NULL, &particleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
ac->mTevStr.mFogColor.b = 0xFF;
ac->mTevStr.mFogColor.g = 0xFF;
ac->mTevStr.mFogColor.r = 0xFF;
ac->mTevStr.mFogStartZ = 0.0f;
ac->mTevStr.mFogEndZ = 2000.0f;
fopAcM_seStart(ac, JA_SE_CM_L_ARROW_SHRINK, 0);
ac->mAttentionInfo.mFlags &= ~4;
} else {
ei->mLightShrinkTimer++;
cLib_addCalc2(&ac->mTevStr.mFogEndZ, 10.0f, 1.0f, 80.0f);
mDoMtx_stack_c::transS(ac->current.pos);
mDoMtx_stack_c::transM(0, ei->mYOffset, 0);
mDoMtx_stack_c::scaleM(ei->mScaleXZ, ei->mScaleY, ei->mScaleXZ);
mDoMtx_stack_c::transM(0, -ei->mYOffset, 0);
mDoMtx_stack_c::YrotM(ac->shape_angle.y);
mDoMtx_stack_c::XrotM(ac->shape_angle.x);
mDoMtx_stack_c::ZrotM(ac->shape_angle.z);
mDoMtx_stack_c::scaleM(ac->mScale);
s8 temp15 = 70 + g_regHIO.mChild[14].mShortRegs[1];
if (ei->mLightShrinkTimer < temp15) {
cLib_addCalc0(&ei->mScaleXZ, 0.1f, 0.01f + g_regHIO.mChild[14].mFloatRegs[0]);
cLib_addCalc0(&ei->mScaleY, 0.1f, 0.01f + g_regHIO.mChild[14].mFloatRegs[0]);
} else {
s8 temp16 = 70 + g_regHIO.mChild[14].mShortRegs[1];
if (ei->mLightShrinkTimer == temp16) {
fopAcM_seStart(ac, JA_SE_CM_L_ARROW_PASS_AWAY, 0);
}
cLib_addCalc2(&ei->mScaleY, 5.0f + g_regHIO.mChild[14].mFloatRegs[1], 0.1f, 1.0f + g_regHIO.mChild[14].mFloatRegs[2]);
cLib_addCalc0(&ei->mScaleXZ, 0.1f + g_regHIO.mChild[14].mFloatRegs[3], 0.05f + g_regHIO.mChild[14].mFloatRegs[4]);
s8 temp5 = 90 + g_regHIO.mChild[14].mShortRegs[2];
if (ei->mLightShrinkTimer > temp5) {
fopAcM_delete(ac);
fopAcM_onActor(ac);
if (fopAcM_GetName(ac) != PROC_PZ) {
// If the actor is not Princess Zelda, drop an item ball.
// TODO: Why the Zelda check? Is she coded to be able to die to Light Arrows?
fopAcM_createIball(&pos, ac->mItemTableIdx, fopAcM_GetRoomNo(ac), &ac->current.angle, ac->mItemStealNum);
}
if (ei->mDeathSwitch != 0) {
dComIfGs_onSwitch(ei->mDeathSwitch, fopAcM_GetRoomNo(ac));
}
ac->mHealth = -0x80;
}
}
}
return TRUE;
}
BOOL temp12 = FALSE;
BOOL temp6 = FALSE;
switch (ei->mState) {
case 0:
ei->mStts.Init(0xFA, 0xFF, ac);
ei->mCyl.Set(cc_cyl_src);
ei->mCyl.SetStts(&ei->mStts);
ei->mCyl.SetR(ei->mWallRadius);
ei->mCyl.SetH(ei->mCylHeight);
ei->mBgAcch.Set(&ac->current.pos, &ac->next.pos, ac, 1, &ei->mBgAcchCir, &ei->mSpeed, NULL, NULL);
ei->mBgAcchCir.SetWall(40.0f, ei->mWallRadius);
if (ei->mParticleScale < 0.1f) {
ei->mParticleScale = 1.0f;
}
if (fabsf(ei->mYOffset) < 0.1f) {
ei->mYOffset = 80.0f;
}
ei->mState = 1;
ei->mScaleY = 1.0f;
ei->mScaleXZ = 1.0f;
fopAcM_OnStatus(ac, fopAcStts_UNK8000000_e);
break;
case 1:
if (ei->mFreezeDuration != 0) {
ei->mFreezeTimer = ei->mFreezeDuration;
ei->mFreezeDuration = 0;
ei->mState = 2;
if (ei->m00C == 0) {
ei->mSpeed.y = 30.0f;
ei->mAngularVelY = cM_rndFX(3000.0f);
}
ac->mHealth -= 4;
if (ac->mHealth <= 0) {
ei->m010 = 40;
ei->mSpeed.y = 0.0f;
}
fopAcM_seStart(ac, JA_SE_CM_FREEZE, 0);
particleScale.setAll(ei->mParticleScale);
pos = ac->current.pos;
pos.y += ei->mYOffset;
dComIfGp_particle_set(0x274, &pos, NULL, &particleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
} else {
return FALSE;
}
// Fall-through
case 2:
temp12 = TRUE;
temp6 = TRUE;
if (ei->m00C != 1) {
ac->mAttentionInfo.mFlags |= 0x10;
ac->mAttentionInfo.mDistances[4] = 0x12;
if (fopAcM_checkStatus(ac, fopAcStts_CARRY_e)) {
ac->mAttentionInfo.mFlags &= ~0x10;
ei->mState = 3;
if (ei->m00C == 2) {
ei->m00C = 0;
}
}
}
break;
case 3:
temp12 = TRUE;
if (!fopAcM_checkStatus(ac, fopAcStts_CARRY_e)) {
if (fopAcM_GetSpeedF(ac) > 0.0f) {
ei->mSpeedF = 25.0f + g_regHIO.mChild[0].mFloatRegs[5];
ei->mSpeed.y = 20.0f + g_regHIO.mChild[0].mFloatRegs[6];
} else {
ei->mSpeedF = 5.0f;
ei->mSpeed.y = -15.0;
}
ei->mAngleY = player->shape_angle.y;
ei->mState = 2;
}
break;
}
if (temp6) {
if (ei->m010 == 0) {
cMtx_YrotS(*calc_mtx, ei->mAngleY);
temp.x = 0.0f;
temp.y = 0.0f;
temp.z = ei->mSpeedF;
MtxPosition(&temp, &temp11);
ei->mSpeed.x = temp11.x;
ei->mSpeed.z = temp11.z;
if (ei->m00C == 2) {
ei->mSpeed.y = 0.0f;
} else {
ac->current.pos += ei->mSpeed;
ei->mSpeed.y -= 5.0f;
}
ac->shape_angle.y += ei->mAngularVelY;
if (ice_bg_check(ei)) {
ei->mFreezeTimer = -1;
}
} else {
ei->m010--;
}
cXyz* temp11 = ei->mStts.GetCCMoveP();
if (temp11) {
ac->current.pos += *temp11;
}
if (fabsf(ei->mSpeedF) > 5.0f) {
ei->mCyl.OnAtSetBit();
} else {
ei->mCyl.OffAtSetBit();
}
ei->mCyl.SetC(ac->current.pos);
dComIfG_Ccsp()->Set(&ei->mCyl);
if (ei->mFreezeTimer >= 23 && ei->mCyl.ChkTgHit()) {
CcAtInfo atInfo;
atInfo.mpObj = ei->mCyl.GetTgHitObj();
if (atInfo.mpObj->ChkAtType(AT_TYPE_LIGHT_ARROW)) {
ei->mFreezeTimer = 1;
ei->mLightShrinkTimer = 1;
} else if (atInfo.mpObj->ChkAtType(AT_TYPE_FIRE)) {
ei->mFreezeTimer = 1;
} else if (atInfo.mpObj->ChkAtType(AT_TYPE_BOMB | AT_TYPE_SKULL_HAMMER | AT_TYPE_FIRE_ARROW)) {
if (atInfo.mpObj->ChkAtType(AT_TYPE_SKULL_HAMMER)) {
ei->mFreezeTimer = -2;
} else {
ei->mFreezeTimer = -1;
}
} else {
def_se_set(ac, atInfo.mpObj, 0x42);
}
}
}
if (temp12) {
// NOTE: Usage of uninitialized variables.
f32 temp_f31;
f32 temp_f30;
if (ei->mFreezeTimer != 0) {
if (ei->mFreezeTimer < 0) {
// Shattered.
particleScale.setAll(ei->mParticleScale);
pos = ac->current.pos;
pos.y += ei->mYOffset;
dComIfGp_particle_set(0x273, &pos, NULL, &particleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
dComIfGp_particle_set(0x274, &pos, NULL, &particleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
if (ei->mFreezeTimer == -2) {
// Skull Hammer shattered.
dComIfGp_particle_set(0x10, &pos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL);
csXyz temp14(0, fopAcM_searchPlayerAngleY(ac), 0);
particleScale.setAll(2.0f);
dComIfGp_particle_set(0xD, &pos, &temp14, &particleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
dScnPly_ply_c::setPauseTimer(8);
}
fopAcM_seStart(ac, JA_SE_CM_ICE_BREAK, 0);
fopAcM_createIball(&pos, ac->mItemTableIdx, fopAcM_GetRoomNo(ac), &ac->current.angle, ac->mItemStealNum);
ei->mFreezeTimer = 0;
if (ei->mDeathSwitch != 0) {
dComIfGs_onSwitch(ei->mDeathSwitch, fopAcM_GetRoomNo(ac));
}
temp13 = 1;
} else {
ei->mFreezeTimer--;
}
if (ei->mFreezeTimer == 0) {
ei->mState = 1;
ei->mCyl.SetC(non_pos);
dComIfG_Ccsp()->Set(&ei->mCyl);
if (fopAcM_checkCarryNow(ac)) {
fopAcM_cancelCarryNow(ac);
}
if (!temp13) {
temp12 = FALSE;
} else {
fopAcM_delete(ac);
fopAcM_onActor(ac);
ac->mHealth = -0x80;
}
}
if (ei->mFreezeTimer < 50) {
temp_f31 = (ei->mFreezeTimer & 1)*2 - 1;
temp_f30 = (ei->mFreezeTimer+1 & 1)*2 - 1;
} else {
temp_f30 = 0.0f;
temp_f31 = 0.0f;
}
if (ei->mFreezeTimer == 20) {
particleScale.setAll(ei->mParticleScale);
pos = ac->current.pos;
pos.y += ei->mYOffset;
dComIfGp_particle_set(0x277, &pos, NULL, &particleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
fopAcM_seStart(ac, JA_SE_CM_ICE_RECOVER, 0);
}
}
ac->current.angle = ac->shape_angle;
cLib_addCalc2(&ei->m028, ei->m02C, 1.0f, 3.0f);
mDoMtx_stack_c::transS(ac->current.pos.x + temp_f31, ac->current.pos.y + ei->m02C, ac->current.pos.z + temp_f30);
mDoMtx_stack_c::YrotM(ac->shape_angle.y);
mDoMtx_stack_c::XrotM(ac->shape_angle.x);
mDoMtx_stack_c::ZrotM(ac->shape_angle.z);
mDoMtx_stack_c::scaleM(ac->mScale);
fopAcM_OnStatus(ac, fopAcStts_FREEZE_e);
} else {
fopAcM_OffStatus(ac, fopAcStts_FREEZE_e);
cLib_addCalc0(&ei->m028, 1.0f, 3.0f);
}
return temp12;
}
dCcD_SrcSph fire_at_sph_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ AT_TYPE_FIRE,
/* SrcObjAt Atp */ 0x02,
/* SrcObjAt SPrm */ 0x0F,
/* SrcObjTg Type */ 0,
/* SrcObjTg SPrm */ 0,
/* SrcObjCo SPrm */ 0,
/* SrcGObjAt Se */ 0,
/* SrcGObjAt HitMark */ 0,
/* SrcGObjAt Spl */ 0,
/* SrcGObjAt Mtrl */ 0,
/* SrcGObjAt GFlag */ 0x01,
/* SrcGObjTg Se */ 0,
/* SrcGObjTg HitMark */ 0,
/* SrcGObjTg Spl */ 0,
/* SrcGObjTg Mtrl */ 0,
/* SrcGObjTg GFlag */ 0,
/* SrcGObjCo GFlag */ 0,
},
// cM3dGSphS
{
/* Center */ 0.0f, 0.0f, 0.0f,
/* Radius */ 50.0f,
},
};
/* 8001CDB8-8001D3B0 .text enemy_fire__FP9enemyfire */
void enemy_fire(enemyfire*) {
void enemy_fire(enemyfire* ef) {
/* Nonmatching */
fopAc_ac_c* ac = ef->mpActor;
cXyz temp;
cXyz temp4;
JGeometry::TVec3<f32> scale;
temp.setAll(0.0f);
// scale = temp; // ??
switch (ef->m006) {
case 0:
if (ef->m004 == 0) {
return;
}
ef->m008 = ef->m004;
ef->m004 = 0;
ef->m006 = 1;
dKy_plight_set(&ef->mLight);
for (int i = 0; i < 10; i++) {
if (ef->m010[i] < 0) {
continue;
}
if (ef->mpFireEmitters[i]) {
continue;
}
cXyz scale2;
scale2.setAll(ef->m01C[i]);
ef->mpFireEmitters[i] = dComIfGp_particle_set(0x3F1, &ac->current.pos, NULL, &scale2, 0xFF, NULL, -1, NULL, NULL, NULL);
ef->m044[i] = ef->m008 - (s16)cM_rndF(60.0f);
if (ef->m044[i] < 10) {
ef->m044[i] = 10;
}
ef->m098 = 2.0f;
}
ef->mStts.Init(0xFA, 0xFF, ac);
ef->mSph.Set(fire_at_sph_src);
ef->mSph.SetStts(&ef->mStts);
break;
case 1:
ef->mLight.mPos = ac->current.pos;
ef->mLight.mColor.r = 600;
ef->mLight.mColor.g = 400;
ef->mLight.mColor.b = 120;
s16 power = ef->m098 * 150.0f;
ef->mLight.mPower = power;
ef->mLight.mFluctuation = 250.0f;
JGeometry::TVec3<f32> temp10;
temp10 = ac->current.pos - ef->m080;
ef->m080 = ac->current.pos;
f32 temp2x = temp10.x * (-0.02f + g_regHIO.mChild[0].mFloatRegs[4]);
f32 temp3x = 1.0f;
if (temp2x > 1.0f) {
temp2x = 1.0f;
} else if (temp2x < -1.0f) {
temp2x = -1.0f;
}
f32 temp2z = temp10.z * (-0.02f + g_regHIO.mChild[0].mFloatRegs[4]);
if (temp2z > 1.0f) {
temp2z = 1.0f;
} else if (temp2z < -1.0f) {
temp2z = -1.0f;
}
cLib_addCalc2(&ef->m08C.x, temp2x, 0.5f, 0.05f);
cLib_addCalc2(&ef->m08C.z, temp2z, 0.5f, 0.05f);
ef->m08C.y = 0.2f + g_regHIO.mChild[0].mFloatRegs[11];
f32 temp6 = sqrtf(temp10.x * temp10.x + temp10.y * temp10.y + temp10.z * temp10.z);
temp6 = (0.03f + g_regHIO.mChild[0].mFloatRegs[12]) * temp6 + 1.0f;
if (temp6 > 1.5f + g_regHIO.mChild[0].mFloatRegs[13]) {
temp6 = 1.5f + g_regHIO.mChild[0].mFloatRegs[13];
}
cLib_addCalc2(&ef->m098, temp6, 0.5f, 0.05f);
u8 temp5 = 0;
for (int i = 0; i < 10; i++) {
if (ef->m010[i] < 0) {
continue;
}
if (!ef->mpFireEmitters[i]) {
continue;
}
if (ef->m044[i] == 0) {
ef->mpFireEmitters[i]->becomeInvalidEmitter();
ef->mpFireEmitters[i] = NULL;
} else {
ef->m044[i]--;
cMtx_copy(ef->mpMcaMorf->getModel()->getAnmMtx(ef->m010[i]), *calc_mtx);
MtxPosition(&temp, &temp4);
ef->mpFireEmitters[i]->setGlobalTranslation(temp4.x, temp4.y, temp4.z);
ef->mpFireEmitters[i]->setDirection(ef->m08C);
scale.set(ef->m01C[i], ef->m098 * ef->m01C[i], ef->m01C[i]);
ef->mpFireEmitters[i]->setGlobalParticleScale(scale);
if (ef->m09D == temp5) {
ef->mSph.SetC(temp4);
dComIfG_Ccsp()->Set(&ef->mSph);
}
temp5++;
}
}
ef->m09D++;
if (ef->m09D >= temp5) {
ef->m09D = 0;
}
fopAcM_seStart(ac, JA_SE_OBJ_TORCH_BURNING, 0);
if (ef->m008 == 0) {
ef->m006 = 0;
dKy_plight_cut(&ef->mLight);
ef->mSph.SetC(non_pos);
dComIfG_Ccsp()->Set(&ef->mSph);
} else {
fopAcM_seStart(ac, JA_SE_CM_FIRE_ARROW_BURNING, 0);
}
if (ef->m008 != 0) {
ef->m008--;
}
break;
}
}
/* 8001D3B0-8001D428 .text enemy_fire_remove__FP9enemyfire */
void enemy_fire_remove(enemyfire*) {
/* Nonmatching */
void enemy_fire_remove(enemyfire* ef) {
ef->m006 = 0;
dKy_plight_cut(&ef->mLight);
for (int i = 0; i < 10; i++) {
if (ef->mpFireEmitters[i]) {
ef->mpFireEmitters[i]->becomeInvalidEmitter();
ef->mpFireEmitters[i] = NULL;
}
}
}
/* 8001D428-8001D48C .text enemy_piyo_set__FP10fopAc_ac_c */
void enemy_piyo_set(fopAc_ac_c*) {
/* Nonmatching */
void enemy_piyo_set(fopAc_ac_c* enemy) {
// Creates the rotating stars particle for when an enemy is stunned.
dComIfGp_particle_set(0x27A, &enemy->mAttentionInfo.mPosition, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL);
}
/* 8001D48C-8001D890 .text wall_angle_get__FP10fopAc_ac_cs */
void wall_angle_get(fopAc_ac_c*, short) {
void wall_angle_get(fopAc_ac_c*, s16) {
/* Nonmatching */
}
/* 8001DCC8-8001E244 .text dr_body_bg_check__FP14damagereaction */
void dr_body_bg_check(damagereaction*) {
void dr_body_bg_check(damagereaction* dr) {
/* Nonmatching */
}
/* 8001E684-8001F6A0 .text dr_joint_bg_check__FP14damagereaction */
void dr_joint_bg_check(damagereaction*) {
void dr_joint_bg_check(damagereaction* dr) {
/* Nonmatching */
}
/* 8001F808-8001FBA8 .text kado_check__FP14damagereaction */
void kado_check(damagereaction*) {
void kado_check(damagereaction* dr) {
/* Nonmatching */
}
/* 8001FBA8-8001FFEC .text hang_ang_get__FP14damagereaction */
void hang_ang_get(damagereaction*) {
void hang_ang_get(damagereaction* dr) {
/* Nonmatching */
}
/* 8001FFEC-80020FD8 .text dr_damage_set__FP14damagereaction */
void dr_damage_set(damagereaction*) {
void dr_damage_set(damagereaction* dr) {
/* Nonmatching */
}
/* 80020FD8-80022460 .text dr_damage_anime__FP14damagereaction */
void dr_damage_anime(damagereaction*) {
void dr_damage_anime(damagereaction* dr) {
/* Nonmatching */
}
/* 80022460-800225D0 .text dr_matrix_set__FP14damagereaction */
void dr_matrix_set(damagereaction*) {
void dr_matrix_set(damagereaction* dr) {
/* Nonmatching */
}
/* 800225D0-800226C8 .text damage_reaction__FP14damagereaction */
void damage_reaction(damagereaction*) {
void damage_reaction(damagereaction* dr) {
/* Nonmatching */
}
+2 -2
View File
@@ -335,8 +335,8 @@ static BOOL medama_atari_check(am_class* i_this) {
break;
case AT_TYPE_LIGHT_ARROW:
ret = true;
i_this->mEnemyIce.mNumFramesDyingToLightArrowsSoFar = 1;
i_this->mEnemyIce.m1AC = 1.0f;
i_this->mEnemyIce.mLightShrinkTimer = 1;
i_this->mEnemyIce.mParticleScale = 1.0f;
i_this->mEnemyIce.mYOffset = 80.0f;
i_this->mAttentionInfo.mFlags = 0;
break;
+1 -1
View File
@@ -810,7 +810,7 @@ BOOL daItem_c::checkItemDisappear() {
if (mCurState == 4) {
disappearing = false;
}
if ((mStatusFlags & 0x08) || (mStatusFlags & 0x40) || (mStatus & 0x100000)) {
if ((mStatusFlags & 0x08) || (mStatusFlags & 0x40) || (mStatus & fopAcStts_HOOK_CARRY_e)) {
disappearing = false;
show();
}
+2 -2
View File
@@ -758,10 +758,10 @@ bool daObjMknjD::Act_c::daObjMknjD_break() {
JGeometry::TVec3<f32> vec;
vec.set(3.0f, 3.0f, 3.0f);
mEmitters[3]->setGlobalParticleScale(vec);
mEmitters[3]->setGlobalDynamicsScale(vec);
vec.set(6.0f, 6.0f, 6.0f);
mEmitters[3]->setGlobalDynamicsScale(vec);
mEmitters[3]->setGlobalParticleScale(vec);
}
}
// After 255 frames, the cutscene ends.
+11 -10
View File
@@ -81,19 +81,20 @@ void dBgS_Acch::Init() {
}
/* 800A2D78-800A2E80 .text Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz */
void dBgS_Acch::Set(cXyz* param_1, cXyz* param_2, fopAc_ac_c* param_3, int param_4, dBgS_AcchCir* param_5, cXyz* param_6, csXyz* param_7, csXyz* param_8) {
pm_pos = param_1;
pm_old_pos = param_2;
void dBgS_Acch::Set(cXyz* pos, cXyz* old_pos, fopAc_ac_c* actor, int tbl_size, dBgS_AcchCir* acchCir, cXyz* speed,
csXyz* angle, csXyz* shape_angle) {
pm_pos = pos;
pm_old_pos = old_pos;
JUT_ASSERT(221, pm_pos != 0);
JUT_ASSERT(222, pm_old_pos != 0);
m_my_ac = param_3;
SetActorPid(fopAcM_GetID(param_3));
pm_speed = param_6;
m_tbl_size = param_4;
pm_acch_cir = param_5;
pm_angle = param_7;
pm_shape_angle = param_8;
m_my_ac = actor;
SetActorPid(fopAcM_GetID(actor));
pm_speed = speed;
m_tbl_size = tbl_size;
pm_acch_cir = acchCir;
pm_angle = angle;
pm_shape_angle = shape_angle;
}
/* 800A2E80-800A2EE8 .text GroundCheckInit__9dBgS_AcchFR4dBgS */