summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_wchain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/d/actor/d_a_obj_wchain.cpp')
-rw-r--r--src/d/actor/d_a_obj_wchain.cpp47
1 files changed, 24 insertions, 23 deletions
diff --git a/src/d/actor/d_a_obj_wchain.cpp b/src/d/actor/d_a_obj_wchain.cpp
index 909c6277a2..720ff26db0 100644
--- a/src/d/actor/d_a_obj_wchain.cpp
+++ b/src/d/actor/d_a_obj_wchain.cpp
@@ -130,10 +130,14 @@ s16 daObjWchain_c::getChainAngleZ(cXyz* param_0, int param_1) {
}
/* 80D3080C-80D310AC 00098C 08A0+00 1/1 0/0 0/0 .text setChainPos__13daObjWchain_cFv */
-// NONMATCHING instruction ordering
void daObjWchain_c::setChainPos() {
cXyz prev_pos, vec1;
+ int i;
+ cXyz* chain_pos; // dbg r27
+ cXyz* chain_speed; // dbg sp_0x1C
+ csXyz* chain_angle; // dbg r28
+ s16* chain_rotation; // dbg r26
if (mRide) {
shape_angle.y = daPy_getLinkPlayerActorClass()->shape_angle.y;
shape_angle.z = 0;
@@ -151,17 +155,12 @@ void daObjWchain_c::setChainPos() {
static Vec const currentOffset = {0.0f, 0.0f, -53.75f};
mDoMtx_stack_c::multVec(&currentOffset, &current.pos);
- csXyz* chain_angle;
- cXyz* chain_speed;
- cXyz* chain_pos;
- int i;
- s16* chain_rotation;
chain_pos = &mChainPos[0xf];
chain_angle = &mChainAngle[0xf];
chain_speed = &mChainSpeed[0xf];
chain_rotation = &mChainRotation[0xf];
prev_pos = current.pos;
- int svar7 = shape_angle.z;
+ s16 svar7 = shape_angle.z;
for (i = 0xf; i >= 0; i--, chain_pos--, chain_angle--, chain_speed--, chain_rotation--) {
chain_angle->z += getChainAngleZ(chain_speed, abs((s16)(chain_angle->z - svar7)));
*chain_speed = (prev_pos - *chain_pos) * 0.75;
@@ -192,38 +191,40 @@ void daObjWchain_c::setChainPos() {
}
f32 fvar2 = mInitOutLength + mPullLength - 53.75f;
int local_68 = fvar2 * (1.0f / 17.5f);
- int ivar5 = local_68 <= 0xf ? local_68 + 1 : 0x10;
- int chain_no = 0x10 - ivar5;
+ if (local_68 > 0xF) {
+ local_68 = 0x10;
+ } else {
+ ++local_68;
+ }
- s16* chain_rotation;
- cXyz* chain_speed;
- cXyz* chain_pos;
- csXyz* chain_angle;
+ f32 reg_f28 = (17.5f - (local_68 * 17.5f - fvar2));
+ int chain_no = 0x10 - local_68;
chain_pos = &mChainPos[chain_no];
chain_angle = &mChainAngle[chain_no];
+ chain_speed = &mChainSpeed[chain_no];
chain_rotation = &mChainRotation[chain_no];
chain_pos->set(
mRoofPos.x,
- field_0x7a8 + (mRoofPos.y - (17.5f - (ivar5 * 17.5f - fvar2))),
+ field_0x7a8 + (mRoofPos.y - reg_f28),
mRoofPos.z
);
chain_angle->x = 0x4000;
*chain_rotation = 0;
- chain_pos = mChainPos + 1 + chain_no;
- chain_angle++;
- chain_speed = mChainSpeed + 1 + chain_no;
- chain_rotation++;
+ ++chain_pos;
+ ++chain_angle;
+ ++chain_speed;
+ ++chain_rotation;
mDoMtx_stack_c::YrotS(-shape_angle.y);
- f32 prob = 0.2f;
cXyz local_90;
- if (!mEnd && cM_rnd() < prob) {
- f32 ang = cM_rnd() * 6.283185f;
+ f32 prob = 0.2f;
+ if (!mEnd && cM_rnd() < 0.2f) {
+ f32 ang = cM_rnd() * 6.2831855f;
local_90.set(cM_fsin(ang), 0.0f, cM_fcos(ang));
} else {
local_90 = cXyz::Zero;
}
- for (int i = chain_no + 1; i < 0x10; i++, chain_pos++, chain_angle++, chain_speed++, chain_rotation++) {
+ for (i = chain_no + 1; i < 0x10; i++, chain_pos++, chain_angle++, chain_speed++, chain_rotation++) {
prev_pos = *chain_pos;
vec1 = *chain_pos - chain_pos[-1];
if (chain_speed->abs2XZ() < 0.04f && cM_rnd() < prob) {
@@ -284,7 +285,7 @@ int daObjWchain_c::execute() {
attention_info.flags &= ~fopAc_AttnFlag_LOCK_e;
}
attention_info.position = current.pos;
- attention_info.position.y += 150.0f;
+ attention_info.position.y += 15.0f;
setMatrix();