Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions include/JSystem/CastedMath.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#ifndef _CASTED_MATH_H_
#define _CASTED_MATH_H_

#include "global.h"
#include "types.h"

#define ADD_VAR(x, y) ((x) += (y))
#define SUB_VAR(x, y) ((x) -= (y))
#define MULT_VAR(x, y) ((x) *= (y))

#define ADD_VAR_CAST(x, y, t) ((x) += (t)(y))
#define SUB_VAR_CAST(x, y, t) ((x) -= (t)(y))
#define MULT_VAR_CAST(x, y, t) ((x) *= (t)(y))

#define ADD_S8(x, y) ADD_VAR_CAST(x, y, s8)
#define ADD_U8(x, y) ADD_VAR_CAST(x, y, u8)
#define ADD_S16(x, y) ADD_VAR_CAST(x, y, s16)
#define ADD_U16(x, y) ADD_VAR_CAST(x, y, u16)
#define ADD_S32(x, y) ADD_VAR_CAST(x, y, s32)
#define ADD_U32(x, y) ADD_VAR_CAST(x, y, u32)

#define SUB_S8(x, y) SUB_VAR_CAST(x, y, s8)
#define SUB_U8(x, y) SUB_VAR_CAST(x, y, u8)
#define SUB_S16(x, y) SUB_VAR_CAST(x, y, s16)
#define SUB_U16(x, y) SUB_VAR_CAST(x, y, u16)
#define SUB_S32(x, y) SUB_VAR_CAST(x, y, s32)
#define SUB_U32(x, y) SUB_VAR_CAST(x, y, u32)

#define MULT_S8(x, y) MULT_VAR_CAST(x, y, s8)
#define MULT_U8(x, y) MULT_VAR_CAST(x, y, u8)
#define MULT_S16(x, y) MULT_VAR_CAST(x, y, s16)
#define MULT_U16(x, y) MULT_VAR_CAST(x, y, u16)
#define MULT_S32(x, y) MULT_VAR_CAST(x, y, s32)
#define MULT_U32(x, y) MULT_VAR_CAST(x, y, u32)

#define ADD_ANGLE(x, y) ADD_S16(x, y)
#define SUB_ANGLE SUB_S16
#define MULT_ANGLE MULT_S16

// There are some angles that weren't sign-extended until the shield version
#if !PLATFORM_SHIELD
#define ADD_S8_2 ADD_VAR
#define ADD_U8_2 ADD_VAR
#define ADD_S16_2 ADD_VAR
#define ADD_U16_2 ADD_VAR
#define ADD_S32_2 ADD_VAR
#define ADD_U32_2 ADD_VAR

#define SUB_S8_2 SUB_VAR
#define SUB_U8_2 SUB_VAR
#define SUB_S16_2 SUB_VAR
#define SUB_U16_2 SUB_VAR
#define SUB_S32_2 SUB_VAR
#define SUB_U32_2 SUB_VAR

#define MULT_S8_2 MULT_VAR
#define MULT_U8_2 MULT_VAR
#define MULT_S16_2 MULT_VAR
#define MULT_U16_2 MULT_VAR
#define MULT_S32_2 MULT_VAR
#define MULT_U32_2 MULT_VAR
#else
#define ADD_S8_2 ADD_S8
#define ADD_U8_2 ADD_U8
#define ADD_S16_2 ADD_S16
#define ADD_U16_2 ADD_U16
#define ADD_S32_2 ADD_S32
#define ADD_U32_2 ADD_U32

#define SUB_S8_2 SUB_S8
#define SUB_U8_2 SUB_U8
#define SUB_S16_2 SUB_S16
#define SUB_U16_2 SUB_U16
#define SUB_S32_2 SUB_S32
#define SUB_U32_2 SUB_U32

#define MULT_S8_2 MULT_S8
#define MULT_U8_2 MULT_U8
#define MULT_S16_2 MULT_S16
#define MULT_U16_2 MULT_U16
#define MULT_S32_2 MULT_S32
#define MULT_U32_2 MULT_U32
#endif

#define ADD_ANGLE_2 ADD_S16_2
#define SUB_ANGLE_2 SUB_S16_2
#define MULT_ANGLE_2 MULT_S16_2

#endif // !_CASTED_MATH_H_
27 changes: 1 addition & 26 deletions include/SSystem/SComponent/c_angle.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,8 @@
#define C_ANGLE_H

#include "SSystem/SComponent/c_xyz.h"
#include "JSystem/CastedMath.h"

#define ADD_VAR(x, y) ((x) += (y))
#define SUB_VAR(x, y) ((x) -= (y))
#define MULT_VAR(x, y) ((x) *= (y))

#define ADD_VAR_CAST(x, y, t) ((x) += (t)(y))
#define SUB_VAR_CAST(x, y, t) ((x) -= (t)(y))
#define MULT_VAR_CAST(x, y, t) ((x) *= (t)(y))

#define ADD_ANGLE(x, y) ADD_VAR_CAST(x, y, s16)
#define SUB_ANGLE(x, y) SUB_VAR_CAST(x, y, s16)
#define MULT_ANGLE(x, y) MULT_VAR_CAST(x, y, s16)

// There are some angles that weren't sign-extended until the shield version
#if !PLATFORM_SHIELD
#define ADD_ANGLE_2 ADD_VAR
#define SUB_ANGLE_2 SUB_VAR
#define MULT_ANGLE_2 MULT_VAR

#define ADD_S8_2 ADD_VAR
#else
#define ADD_ANGLE_2 ADD_ANGLE
#define SUB_ANGLE_2 SUB_ANGLE
#define MULT_ANGLE_2 MULT_ANGLE

#define ADD_S8_2(x, y) ADD_VAR_CAST(x, y, s8)
#endif

#define DEG2S_CONSTANT (0x8000 / 180.0f)
#define S2DEG_CONSTANT (180.0f / 0x8000)
Expand Down
2 changes: 1 addition & 1 deletion include/d/actor/d_a_npc.h
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ class daNpcT_JntAnm_c {
cXyz cStack_50 = *mAttnPosP - param_1;
sVar3 += cM_atan2s(cStack_50.x, cStack_50.z);
sVar3 -= param_2;
sVar3 -= (s16)(field_0x150.y - param_2);
SUB_ANGLE(sVar3, field_0x150.y - param_2);
sVar3 += param_5;
}
if (param_3) {
Expand Down
7 changes: 2 additions & 5 deletions src/JSystem/JUtility/JUTCacheFont.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "JSystem/JKernel/JKRAram.h"
#include <dolphin/gx.h>
#include <stdint.h>
#include "JSystem/CastedMath.h"

JUTCacheFont::JUTCacheFont(ResFONT const* p_fontRes, u32 cacheSize, JKRHeap* p_heap) {
initialize_state();
Expand Down Expand Up @@ -343,11 +344,7 @@ void JUTCacheFont::getGlyphFromAram(JUTCacheFont::TGlyphCacheInfo* param_0,
prepend(pGylphCacheInfo);
int iVar3 = pGylphCacheInfo->field_0x16 * pGylphCacheInfo->field_0x18;
int iVar2 = *r30 / iVar3;
#if PLATFORM_SHIELD
pGylphCacheInfo->field_0x8 += (u16)(iVar2 * iVar3);
#else
pGylphCacheInfo->field_0x8 += iVar2 * iVar3;
#endif
ADD_U16_2(pGylphCacheInfo->field_0x8, iVar2 * iVar3);
u16 local_30 = pGylphCacheInfo->field_0x8 + iVar3 - 1;
pGylphCacheInfo->field_0xa = pGylphCacheInfo->field_0xa < local_30 ? pGylphCacheInfo->field_0xa : local_30;
*param_3 = iVar2;
Expand Down
13 changes: 3 additions & 10 deletions src/JSystem/JUtility/JUTDirectPrint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <cstdio>
#include <dolphin/os.h>
#include "global.h"
#include "JSystem/CastedMath.h"

JUTDirectPrint* JUTDirectPrint::sDirectPrint;

Expand Down Expand Up @@ -160,23 +161,15 @@ void JUTDirectPrint::printSub(u16 position_x, u16 position_y, char const* format
for (; 0 < buffer_length; buffer_length--, ptr++) {
int codepoint = sAsciiTable[*ptr & 0x7f];
if (codepoint == 0xfe) {
#if PLATFORM_SHIELD
position_y += (u16)7;
#else
position_y += 7;
#endif
ADD_U16_2(position_y, 7);
position_x = x;
} else if (codepoint == 0xfd) {
position_x = position_x + 0x30 - ((position_x - x + 0x2f) % 0x30);
} else {
if (codepoint != 0xff) {
drawChar(position_x, position_y, codepoint);
}
#if PLATFORM_SHIELD
position_x += (u16)6;
#else
position_x += 6;
#endif
ADD_U16_2(position_x, 6);
}
}
}
Expand Down
18 changes: 9 additions & 9 deletions src/d/actor/d_a_alink.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2812,10 +2812,10 @@ void daAlink_c::setHairAngle(cXyz* param_0, f32 param_1, f32 param_2) {

var_f31 = 0.15f + (0.85f * var_f31);

field_0x3070 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (3000.0f + cM_rndF(1000.0f))));
field_0x3072 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (3000.0f + cM_rndF(1000.0f))));
field_0x3074 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (5000.0f + cM_rndF(1500.0f))));
field_0x3076 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (5000.0f + cM_rndF(1500.0f))));
ADD_ANGLE(field_0x3070, 1000.0f + cM_rndF(500.0f) + (var_f31 * (3000.0f + cM_rndF(1000.0f))));
ADD_ANGLE(field_0x3072, 1000.0f + cM_rndF(500.0f) + (var_f31 * (3000.0f + cM_rndF(1000.0f))));
ADD_ANGLE(field_0x3074, 1000.0f + cM_rndF(500.0f) + (var_f31 * (5000.0f + cM_rndF(1500.0f))));
ADD_ANGLE(field_0x3076, 1000.0f + cM_rndF(500.0f) + (var_f31 * (5000.0f + cM_rndF(1500.0f))));

temp_f27 = 1.0f / temp_f27;
param_0->x *= temp_f27;
Expand Down Expand Up @@ -3233,8 +3233,8 @@ s16 daAlink_c::getNeckAimAngle(cXyz* param_0, s16* param_1, s16* param_2, s16* p
*param_4 = sp8;
}

*param_3 += (s16)(sp10 - temp_r24);
*param_4 += (s16)(spE - var_r28);
ADD_ANGLE(*param_3, sp10 - temp_r24);
ADD_ANGLE(*param_4, spE - var_r28);

if (checkEndResetFlg0(ERFLG0_UNK_4000)) {
*param_3 = (sp10 + 0x8000) - sp14;
Expand Down Expand Up @@ -3302,7 +3302,7 @@ void daAlink_c::setEyeMove(cXyz* param_0, s16 param_1, s16 param_2) {
field_0x341c = 0.0f;
} else {
s16 temp_r29_2 = cM_atan2s(field_0x3418, field_0x341c);
temp_r29_2 += (s16)(((int)cM_rndF(3.0f) << 13) + 0x6000);
ADD_ANGLE(temp_r29_2, ((int)cM_rndF(3.0f) << 13) + 0x6000);

field_0x3418 = cM_ssin(temp_r29_2);
field_0x341c = cM_scos(temp_r29_2);
Expand Down Expand Up @@ -3929,9 +3929,9 @@ void daAlink_c::footBgCheck() {

if ((sp10 * var_r29->field_0x6) < 0 && abs(sp10 - var_r29->field_0x6) >= 0x8000) {
if (sp10 >= 0) {
sp10 -= (s16)0x4000;
SUB_ANGLE(sp10, 0x4000);
} else {
sp10 += (s16)0x4000;
ADD_ANGLE(sp10, 0x4000);
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/d/actor/d_a_alink_canoe.inc
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ int daAlink_c::procCanoeRide() {
if (checkAnmEnd(frameCtrl)) {
procCanoeWaitInit(1);
} else if (frameCtrl->getFrame() < 9.0f) {
mProcVar3.field_0x300e += (s16)0x180;
ADD_ANGLE(mProcVar3.field_0x300e, 0x180);

if (mProcVar0.field_0x3008 == 0) {
canoe->incShapeAngleZ(-mProcVar3.field_0x300e);
Expand Down Expand Up @@ -483,11 +483,11 @@ int daAlink_c::procCanoeGetOffInit() {
}

if (var_r27) {
shape_angle.y -= (s16)0x4000;
SUB_ANGLE(shape_angle.y, 0x4000);
setOldRootQuaternion(0, 0x4000, 0);
var_r28->mTranslate.x -= 100.0f;
} else {
shape_angle.y += (s16)0x4000;
ADD_ANGLE(shape_angle.y, 0x4000);
setOldRootQuaternion(0, -0x4000, 0);
var_r28->mTranslate.x += 100.0f;
}
Expand Down
8 changes: 4 additions & 4 deletions src/d/actor/d_a_alink_damage.inc
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,11 @@ void daAlink_c::freezeTimerDamage() {
}

if (escapeTrigger()) {
mProcVar0.field_0x3008 -= (s16)2;
SUB_S16(mProcVar0.field_0x3008, 2);
}

if (checkInputOnR() && abs((s16)(mStickAngle - mPrevStickAngle)) > 0x1000) {
mProcVar0.field_0x3008 -= (s16)2;
SUB_S16(mProcVar0.field_0x3008, 2);
}

if (mProcVar0.field_0x3008 < 0) {
Expand Down Expand Up @@ -504,7 +504,7 @@ BOOL daAlink_c::checkDamageAction() {
poly_dmg_flags = 0;
}
} else if (mIceDamageWaitTimer > 3) {
mIceDamageWaitTimer -= (s16)3;
SUB_S16(mIceDamageWaitTimer, 3);
} else {
mIceDamageWaitTimer = 0;
}
Expand Down Expand Up @@ -1656,7 +1656,7 @@ int daAlink_c::procCoElecDamageInit(fopAc_ac_c* i_tgHitActor, dCcD_GObjInf* i_tg

if (getZoraSwim()) {
current.pos.y += 50.0f;
field_0x3080 += (s16)0x4000;
ADD_ANGLE(field_0x3080, 0x4000);
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/d/actor/d_a_alink_demo.inc
Original file line number Diff line number Diff line change
Expand Up @@ -4148,7 +4148,7 @@ int daAlink_c::procDungeonWarpInit() {
}

int daAlink_c::procDungeonWarp() {
mProcVar2.field_0x300c += (s16)0x200;
ADD_ANGLE(mProcVar2.field_0x300c, 0x200);

if (mProcVar2.field_0x300c > 0x4000) {
mProcVar2.field_0x300c = 0x4000;
Expand All @@ -4157,7 +4157,7 @@ int daAlink_c::procDungeonWarp() {
}

f32 sin = cM_ssin(mProcVar2.field_0x300c);
shape_angle.y += (s16)(14336.0f * sin);
ADD_ANGLE(shape_angle.y, 0x3800 * sin);
mProcVar3.field_0x300e = 8.0f * sin + 24.0f * (1.0f - scale.x);

if (mProcVar5.field_0x3012 != 0) {
Expand Down Expand Up @@ -4256,7 +4256,7 @@ int daAlink_c::procDungeonWarpSceneStart() {
}

f32 sin = cM_ssin(mProcVar2.field_0x300c);
shape_angle.y += (s16)(sin * 14336.0f);
ADD_ANGLE(shape_angle.y, sin * (f32)0x3800);
mProcVar3.field_0x300e = (sin * 8.0f) + ((1.0f - scale.x) * 24.0f);
return 1;
}
Expand Down
6 changes: 3 additions & 3 deletions src/d/actor/d_a_alink_grab.inc
Original file line number Diff line number Diff line change
Expand Up @@ -492,10 +492,10 @@ void daAlink_c::setCarryArmAngle(f32 param_0, f32 param_1) {
field_0x3136[1].set(0, 0, temp_r29 - (3500.0f * param_1));

if (param_1 < 0.0f) {
field_0x312a[0].z += (s16)(2500.0f * param_1);
field_0x3136[0].y += (s16)(2000.0f * param_1);
ADD_ANGLE(field_0x312a[0].z, 2500.0f * param_1);
ADD_ANGLE(field_0x3136[0].y, 2000.0f * param_1);
} else {
field_0x3136[0].y += (s16)(4000.0f * param_1);
ADD_ANGLE(field_0x3136[0].y, 4000.0f * param_1);
}
} else if (checkGrabRooster()) {
field_0x3136[0].y = -5000.0f * param_1;
Expand Down
2 changes: 1 addition & 1 deletion src/d/actor/d_a_alink_guard.inc
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ int daAlink_c::procGuardSlip() {
setShapeAngleToAtnActor(0);

if (mProcVar1.field_0x300a != 0) {
mProcVar1.field_0x300a -= (s16)1;
SUB_S16(mProcVar1.field_0x300a, 1);
mBodyAngle.y += mProcVar2.field_0x300c;
mBodyAngle.x += mProcVar3.field_0x300e;
}
Expand Down
4 changes: 2 additions & 2 deletions src/d/actor/d_a_alink_hang.inc
Original file line number Diff line number Diff line change
Expand Up @@ -1835,8 +1835,8 @@ int daAlink_c::setMoveBGClimbCorrect() {

current.pos.x = mLinkLinChk.GetCross().x;
current.pos.z = mLinkLinChk.GetCross().z;
current.angle.y += (s16)(shape_angle.y - temp_r28);
field_0x308c += (s16)(temp_r28 - shape_angle.y);
ADD_ANGLE(current.angle.y, shape_angle.y - temp_r28);
ADD_ANGLE(field_0x308c, temp_r28 - shape_angle.y);

mPolyInfo1.SetPolyInfo(mLinkLinChk);
}
Expand Down
2 changes: 1 addition & 1 deletion src/d/actor/d_a_alink_hook.inc
Original file line number Diff line number Diff line change
Expand Up @@ -732,7 +732,7 @@ int daAlink_c::setHookshotHangMoveBGCollect() {
mDoMtx_stack_c::multVec(&field_0x37c8, &mIronBallBgChkPos);

current.pos += mIronBallBgChkPos - sp28;
shape_angle.y += (s16)(mProcVar0.field_0x3008 - carry_actor->shape_angle.y);
ADD_ANGLE(shape_angle.y, mProcVar0.field_0x3008 - carry_actor->shape_angle.y);
current.angle.y = shape_angle.y;
mProcVar0.field_0x3008 = carry_actor->shape_angle.y;
} else if (dComIfG_Bgsp().ChkPolySafe(*polyinfo)) {
Expand Down
Loading