diff --git a/include/functions.h b/include/functions.h index 46f74926eb..8f5d13efb4 100644 --- a/include/functions.h +++ b/include/functions.h @@ -185,7 +185,7 @@ s32 func_80086620(OSMesgQueue* param_1, PadmgrThreadStruct* param_2, OSContStatu // void func_80086880(void); // void func_800869A4(void); // void func_80086AF0(void); -// void func_80086B30(void); +f32 func_80086B30(f32 y, f32 x); // void func_80086C18(void); f32 func_80086C48(f32 param_1); // void func_80086C70(void); @@ -2104,24 +2104,24 @@ void func_8010A33C(GlobalContext* globalCtx, s16 param_2); // void Nmi_SetPrenmiStart(void); // s32 Nmi_GetPrenmiHasStarted(void); // void func_8010C1B0(void); -f32 CamMath_Distance(Vec3f* a, Vec3f* b); -f32 CamMath_DistanceAndDiff(Vec3f* a, Vec3f* b, Vec3f* diff); -f32 CamMath_DistanceXZ(Vec3f* a, Vec3f* b); -f32 func_8010C304(f32 a, f32 b); -f32 func_8010C36C(f32 a, f32 b); -// void func_8010C3D4(void); -// void func_8010C484(void); -// void func_8010C530(void); -// void func_8010C574(void); -// void func_8010C6C8(void); -// void func_8010C710(void); -// void func_8010C764(void); -// void func_8010C7B8(void); -// void func_8010C838(void); -// void func_8010C8C8(void); -// void func_8010C930(void); -// void func_8010C9C8(void); -// void func_8010CAA0(void); +f32 OLib_Vec3fDist(Vec3f* a, Vec3f* b); +f32 OLib_Vec3fDistOutDiff(Vec3f* a, Vec3f* b, Vec3f* dest); +f32 OLib_Vec3fDistXZ(Vec3f* a, Vec3f* b); +f32 OLib_ClampMinDist(f32 val, f32 min); +f32 OLib_ClampMaxDist(f32 val, f32 max); +Vec3f* OLib_Vec3fDistNormalize(Vec3f* dest, Vec3f* a, Vec3f* b); +Vec3f* OLib_VecSphToVec3f(Vec3f* dest, VecSph* sph); +Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph); +VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec); +VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec); +VecSph* OLib_Vec3fDiffToVecSph(VecSph* dest, Vec3f* a, Vec3f* b); +VecSph* OLib_Vec3fDiffToVecSphGeo(VecSph* dest, Vec3f* a, Vec3f* b); +Vec3f* OLib_VecSphToVec3fSum(Vec3f* dest, Vec3f* a, VecSph* sph); +Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b); +Vec3f* OLib_Vec3fDiffDegF(Vec3f* dest, Vec3f* a, Vec3f* b); +Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b); +void OLib_DbCameraVec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); +void OLib_DbCameraVec3fSum(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); // void func_8010CB80(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10); // void func_8010CD98(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10); // void func_8010CFBC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE2 param_11, UNK_TYPE2 param_12, UNK_TYPE2 param_13, UNK_TYPE2 param_14); diff --git a/include/io/controller.h b/include/io/controller.h index 12dab1c746..52ebc9914d 100644 --- a/include/io/controller.h +++ b/include/io/controller.h @@ -97,22 +97,6 @@ #define BTN_B 0x4000 #define BTN_A 0x8000 -/* Buttons */ -#define BTN_CRIGHT 0x0001 -#define BTN_CLEFT 0x0002 -#define BTN_CDOWN 0x0004 -#define BTN_CUP 0x0008 -#define BTN_R 0x0010 -#define BTN_L 0x0020 -#define BTN_DRIGHT 0x0100 -#define BTN_DLEFT 0x0200 -#define BTN_DDOWN 0x0400 -#define BTN_DUP 0x0800 -#define BTN_START 0x1000 -#define BTN_Z 0x2000 -#define BTN_B 0x4000 -#define BTN_A 0x8000 - typedef struct { /* 0x00 */ u32 ramarray[15]; /* 0x3C */ u32 pifstatus; diff --git a/include/z64math.h b/include/z64math.h index 2b9e6496aa..43e8f5a0a0 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -3,9 +3,6 @@ #include -#define SHT_MAX 32767.0f -#define M_PI 3.14159265358979323846f - #define VEC_SET(V,X,Y,Z) V.x=X;V.y=Y;V.z=Z typedef struct { @@ -88,8 +85,31 @@ typedef struct { /* 0x06 */ s16 yaw; // azimuthal angle } VecSph; // size = 0x08 +#define F32_LERP(v0,v1,t) ((1.0f - (t)) * (v0) + (t) * (v1)) +#define F32_LERPIMP(v0, v1, t) (v0 + ((v1 - v0) * t)) +#define F32_LERPIMPINV(v0, v1, t) ((v0) + (((v1) - (v0)) / (t))) +#define BINANG_LERPIMP(v0, v1, t) ((v0) + (s16)(BINANG_SUB((v1), (v0)) * (t))) +#define BINANG_LERPIMPINV(v0, v1, t) ((v0) + BINANG_SUB((v1), (v0)) / (t)) + +#define VEC3F_LERPIMPDST(dst, v0, v1, t){ \ + (dst)->x = (v0)->x + (((v1)->x - (v0)->x) * t); \ + (dst)->y = (v0)->y + (((v1)->y - (v0)->y) * t); \ + (dst)->z = (v0)->z + (((v1)->z - (v0)->z) * t); \ +} + #define IS_ZERO(f) (fabsf(f) < 0.008f) +// Trig macros +#define DEGF_TO_BINANG(degreesf) (s16)(degreesf * 182.04167f + .5f) +#define RADF_TO_BINANG(radf) (s16)(radf * (32768.0f / M_PI)) +#define RADF_TO_DEGF(radf) (radf * (180.0f / M_PI)) +#define DEGF_TO_RADF(degf) (degf * (M_PI / 180.0f)) +#define BINANG_ROT180(angle) ((s16)(angle + 0x8000)) +#define BINANG_SUB(a, b) ((s16)(a - b)) +#define DEG_TO_RAD(degrees) ((degrees) * (M_PI / 180.0f)) +#define BINANG_TO_DEGF(binang) ((f32)binang * (360.0001525f / 65535.0f)) +#define BINANG_TO_RAD(binang) (((f32)binang / 32768.0f) * M_PI) + // Vector macros #define SQXZ(vec) ((vec.x) * (vec.x) + (vec.z) * (vec.z)) #define DOTXZ(vec1, vec2) ((vec1.x) * (vec2.x) + (vec1.z) * (vec2.z)) diff --git a/linker_scripts/code_script.txt b/linker_scripts/code_script.txt index 1ae1c28f6a..132b868823 100644 --- a/linker_scripts/code_script.txt +++ b/linker_scripts/code_script.txt @@ -397,7 +397,8 @@ SECTIONS build/asm/code/z_map_exp.o(.text) build/asm/code/z_msgevent.o(.text) build/asm/code/code_0x8010C0C0.o(.text) - build/asm/code/code_0x8010C230.o(.text) + build/src/code/z_olib.o(.text) + . += 0x10; build/asm/code/z_parameter.o(.text) build/asm/code/code_0x801224E0.o(.text) build/asm/code/code_0x80122660.o(.text) @@ -596,7 +597,7 @@ SECTIONS build/asm/code/code_rodata_z_lifemeter.o(.rodata) build/src/code/z_lights.o(.rodata) build/asm/code/code_rodata_z_map_disp.o(.rodata) - build/asm/code/code_rodata_0x8010C230.o(.rodata) + build/src/code/z_olib.o(.rodata) build/asm/code/code_rodata_z_parameter.o(.rodata) build/asm/code/code_rodata_z_player_lib.o(.rodata) build/asm/code/code_rodata_0x8012A080.o(.rodata) diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 94b941c564..99679f1c72 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -520,7 +520,7 @@ s32 Actor_IsActorFacedByActor(Actor* actor, Actor* other, s16 tolerance) { s16 angle; s16 dist; - angle = Actor_YawBetweenActors(actor, other) + 0x8000; + angle = BINANG_ROT180(Actor_YawBetweenActors(actor, other)); dist = angle - other->shape.rot.y; if (ABS_ALT(dist) < tolerance) { return 1; diff --git a/src/code/z_olib.c b/src/code/z_olib.c new file mode 100644 index 0000000000..9c8010b6cb --- /dev/null +++ b/src/code/z_olib.c @@ -0,0 +1,293 @@ +#include "global.h" + +/** + * Calculates the distances between `a` and `b` + */ +f32 OLib_Vec3fDist(Vec3f* a, Vec3f* b) { + f32 dx = a->x - b->x; + f32 dy = a->y - b->y; + f32 dz = a->z - b->z; + + return sqrtf(SQ(dx) + SQ(dy) + SQ(dz)); +} + +/** + * Calculates the distances between `a` and `b`, and outputs the vector + * created by the difference into `dest` + */ +f32 OLib_Vec3fDistOutDiff(Vec3f* a, Vec3f* b, Vec3f* dest) { + dest->x = a->x - b->x; + dest->y = a->y - b->y; + dest->z = a->z - b->z; + + return sqrtf(SQ(dest->x) + SQ(dest->y) + SQ(dest->z)); +} + +/** + * Calculates the distances on the xz plane between `a` and `b` + */ +f32 OLib_Vec3fDistXZ(Vec3f* a, Vec3f* b) { + return sqrtf(SQ(a->x - b->x) + SQ(a->z - b->z)); +} + +/** + * Clamps `val` to a maximum of -`min` as `val` approaches zero, and a minimum of + * `min` as `val` approaches zero + */ +f32 OLib_ClampMinDist(f32 val, f32 min) { + if (val < 0.0f) { + return CLAMP_MAX(val, -min); + } else { + return CLAMP_MIN(val, min); + } +} + +/** + * Clamps `val` to a minimum of -`max` as `val` approaches -`max`, and a maximum of `max` + * as `val` approaches `max` + */ +f32 OLib_ClampMaxDist(f32 val, f32 max) { + if (val < 0.0f) { + return CLAMP_MIN(val, -max); + } else { + return CLAMP_MAX(val, max); + } +} + +/** + * Takes the difference of points b and a, and creates a normal vector + */ +Vec3f* OLib_Vec3fDistNormalize(Vec3f* dest, Vec3f* a, Vec3f* b) { + Vec3f v1; + Vec3f v2; + f32 dist; + + v1.x = b->x - a->x; + v1.y = b->y - a->y; + v1.z = b->z - a->z; + + dist = OLib_ClampMinDist(sqrtf(SQ(v1.x) + SQ(v1.y) + SQ(v1.z)), 0.01f); + + v2.x = v1.x / dist; + v2.y = v1.y / dist; + v2.z = v1.z / dist; + + *dest = v2; + + return dest; +} + +/** + * Takes the spherical coordinate `sph`, and converts it into a x,y,z position + */ +Vec3f* OLib_VecSphToVec3f(Vec3f* dest, VecSph* sph) { + Vec3f v; + f32 sinPitch; + f32 cosPitch = Math_CosS(sph->pitch); + f32 sinYaw; + f32 cosYaw = Math_CosS(sph->yaw); + + sinPitch = Math_SinS(sph->pitch); + sinYaw = Math_SinS(sph->yaw); + + v.x = sph->r * sinPitch * sinYaw; + v.y = sph->r * cosPitch; + v.z = sph->r * sinPitch * cosYaw; + + *dest = v; + + return dest; +} + +/** + * Takes the geographic point `sph` and converts it into a x,y,z position + */ +Vec3f* OLib_VecSphGeoToVec3f(Vec3f* dest, VecSph* sph) { + VecSph geo; + + geo.r = sph->r; + geo.pitch = 0x4000 - sph->pitch; + geo.yaw = sph->yaw; + + return OLib_VecSphToVec3f(dest, &geo); +} + +/** + * Takes the point `vec`, and converts it into a spherical coordinate + */ +VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) { + VecSph sph; + f32 distSquared = SQ(vec->x) + SQ(vec->z); + f32 dist = sqrtf(distSquared); + + if ((dist == 0.0f) && (vec->y == 0.0f)) { + sph.pitch = 0; + } else { + sph.pitch = DEGF_TO_BINANG(RADF_TO_DEGF(func_80086B30(dist, vec->y))); + } + + sph.r = sqrtf(SQ(vec->y) + distSquared); + if ((vec->x == 0.0f) && (vec->z == 0.0f)) { + sph.yaw = 0; + } else { + sph.yaw = DEGF_TO_BINANG(RADF_TO_DEGF(func_80086B30(vec->x, vec->z))); + } + + *dest = sph; + + return dest; +} + +/** + * Takes the point `vec`, and converts it to a geographic coordinate + */ +VecSph* OLib_Vec3fToVecSphGeo(VecSph* dest, Vec3f* vec) { + VecSph sph; + + OLib_Vec3fToVecSph(&sph, vec); + sph.pitch = 0x4000 - sph.pitch; + + *dest = sph; + + return dest; +} + +/** + * Takes the differences of positions `a` and `b`, and converts them to spherical coordinates + */ +VecSph* OLib_Vec3fDiffToVecSph(VecSph* dest, Vec3f* a, Vec3f* b) { + Vec3f sph; + + sph.x = b->x - a->x; + sph.y = b->y - a->y; + sph.z = b->z - a->z; + + return OLib_Vec3fToVecSph(dest, &sph); +} + +/** + * Takes the difference of positions `a` and `b`, and converts them to geographic coordinates + */ +VecSph* OLib_Vec3fDiffToVecSphGeo(VecSph* dest, Vec3f* a, Vec3f* b) { + Vec3f sph; + + sph.x = b->x - a->x; + sph.y = b->y - a->y; + sph.z = b->z - a->z; + + return OLib_Vec3fToVecSphGeo(dest, &sph); +} + +/** + * Takes the sum of positions `a` (x,y,z coordinates) and `sph` (geographic coordinates), result is in x,y,z position + */ +Vec3f* OLib_VecSphToVec3fSum(Vec3f* dest, Vec3f* a, VecSph* sph) { + Vec3f vec; + Vec3f b; + + OLib_VecSphGeoToVec3f(&b, sph); + vec.x = a->x + b.x; + vec.y = a->y + b.y; + vec.z = a->z + b.z; + + *dest = vec; + + return dest; +} + +/** + * Gets the pitch/yaw of the vector formed from `b`-`a`, result is in radians + */ +Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b) { + Vec3f anglesRad; + + anglesRad.x = func_80086B30(b->z - a->z, b->y - a->y); + anglesRad.y = func_80086B30(b->x - a->x, b->z - a->z); + anglesRad.z = 0; + + *dest = anglesRad; + + return dest; +} + +/** + * Gets the pitch/yaw of the vector formed from `b`-`a`, result is in degrees + */ +Vec3f* OLib_Vec3fDiffDegF(Vec3f* dest, Vec3f* a, Vec3f* b) { + Vec3f anglesRad; + Vec3f anglesDegrees; + + OLib_Vec3fDiffRad(&anglesRad, a, b); + + anglesDegrees.x = RADF_TO_DEGF(anglesRad.x); + anglesDegrees.y = RADF_TO_DEGF(anglesRad.y); + anglesDegrees.z = 0.0f; + + *dest = anglesDegrees; + + return dest; +} + +/** + * Gets the pitch/yaw of the vector formed from `b`-`a`, result is in binary degrees + */ +Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b) { + Vec3f anglesRad; + Vec3s anglesBinAng; + + OLib_Vec3fDiffRad(&anglesRad, a, b); + + anglesBinAng.x = DEGF_TO_BINANG(RADF_TO_DEGF(anglesRad.x)); + anglesBinAng.y = DEGF_TO_BINANG(RADF_TO_DEGF(anglesRad.y)); + anglesBinAng.z = 0.0f; + + *dest = anglesBinAng; + + return dest; +} + +/** + * Gets a x,y,z position diff depending on the dbCamera mode + */ +void OLib_DbCameraVec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode) { + VecSph sph; + + switch (mode) { + case 1: + OLib_Vec3fDiffToVecSphGeo(&sph, &a->pos, b); + sph.yaw -= a->rot.y; + OLib_VecSphGeoToVec3f(dest, &sph); + break; + case 2: + dest->x = b->x - a->pos.x; + dest->y = b->y - a->pos.y; + dest->z = b->z - a->pos.z; + break; + default: + *dest = *b; + break; + } +} + +/** + * Gets a x,y,z position sum depending on the dbCamera mode + */ +void OLib_DbCameraVec3fSum(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode) { + VecSph sph; + + switch (mode) { + case 1: + OLib_Vec3fToVecSphGeo(&sph, b); + sph.yaw += a->rot.y; + OLib_VecSphToVec3fSum(dest, &a->pos, &sph); + break; + case 2: + dest->x = a->pos.x + b->x; + dest->y = a->pos.y + b->y; + dest->z = a->pos.z + b->z; + break; + default: + *dest = *b; + break; + } +} diff --git a/src/code/z_snap.c b/src/code/z_snap.c index 910b28a3cc..3ecb266111 100644 --- a/src/code/z_snap.c +++ b/src/code/z_snap.c @@ -122,7 +122,7 @@ s32 func_8013A530(GlobalContext* globalCtx, Actor* actor, s32 flag, Vec3f* pos, camera = ACTIVE_CAM; - distance = CamMath_Distance(pos, &camera->eye); + distance = OLib_Vec3fDist(pos, &camera->eye); if ((distance < distanceMin) || (distanceMax < distance)) { func_8013A41C(0x3f); ret = 0x3f; diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index dc5cf1d373..9370c4b141 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -197,7 +197,7 @@ void DoorAna_Update(Actor* thisx, GlobalContext* globalCtx) { DoorAna* this = THIS; this->actionFunc(this, globalCtx); - this->actor.shape.rot.y = func_800DFCDC(globalCtx->cameraPtrs[globalCtx->activeCamera]) + 0x8000; + this->actor.shape.rot.y = BINANG_ROT180(func_800DFCDC(globalCtx->cameraPtrs[globalCtx->activeCamera])); } void DoorAna_Draw(Actor* thisx, GlobalContext* globalCtx) { diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index c15d8d5141..00f5941f21 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -106,7 +106,7 @@ void EnNutsball_Update(Actor* thisx, GlobalContext* globalCtx) { (this->collider.base.atFlags & AT_TYPE_ENEMY) && (this->collider.base.atFlags & AT_BOUNCED)) { EnNutsball_InitColliderParams(this); func_8018219C(&player->shieldMf, &worldRot, 0); - this->actor.world.rot.y = worldRot.y + 0x8000; + this->actor.world.rot.y = BINANG_ROT180(worldRot.y); this->timer = 20; } else { spawnBurstPos.x = this->actor.world.pos.x; diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c index c7043f7655..1db62df5a4 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -310,7 +310,7 @@ void EnPametfrog_ShakeCamera(EnPametfrog* this, GlobalContext* globalCtx, f32 ma s16 y; Vec3f eye; - y = func_800DFCDC(camera) + 0x8000; + y = BINANG_ROT180(func_800DFCDC(camera)); eye.x = (Math_SinS(y) * magShakeXZ) + camera->focalPoint.x; eye.y = camera->focalPoint.y + magShakeY; eye.z = (Math_CosS(y) * magShakeXZ) + camera->focalPoint.z; @@ -340,7 +340,7 @@ void EnPametfrog_PlaceSnapper(EnPametfrog* this, GlobalContext* globalCtx) { poly = NULL; this->actor.child->world.pos.x = (Math_SinS(this->actor.shape.rot.y) * 300.0f) + this->actor.world.pos.x; this->actor.child->world.pos.z = (Math_CosS(this->actor.shape.rot.y) * 300.0f) + this->actor.world.pos.z; - this->actor.child->shape.rot.y = this->actor.shape.rot.y + 0x8000; + this->actor.child->shape.rot.y = BINANG_ROT180(this->actor.shape.rot.y); vec2.x = this->actor.child->world.pos.x; vec2.y = this->actor.child->world.pos.y + 50.0f; vec2.z = this->actor.child->world.pos.z; @@ -482,7 +482,7 @@ void EnPametfrog_SetupFallOffSnapper(EnPametfrog* this, GlobalContext* globalCtx this->actor.params = ENPAMETFROG_FALL_OFF_SNAPPER; this->actor.speedXZ = 7.0f; this->actor.velocity.y = 15.0f; - this->actor.world.rot.y = this->actor.child->world.rot.y + 0x8000; + this->actor.world.rot.y = BINANG_ROT180(this->actor.child->world.rot.y); this->actor.shape.rot.y = this->actor.world.rot.y; this->actor.flags |= 1; this->timer = 30; @@ -506,7 +506,7 @@ void EnPametfrog_FallOffSnapper(EnPametfrog* this, GlobalContext* globalCtx) { this->timer--; } - sin = sin_rad(this->timer * (M_PI / 3.0f)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f; + sin = sin_rad(this->timer * (M_PI / 3)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f; EnPametfrog_ShakeCamera(this, globalCtx, 300.0f * sin, 100.0f * sin); if (this->actor.bgCheckFlags & 1) { EnPametfrog_StopCutscene(this, globalCtx); @@ -644,7 +644,7 @@ void EnPametfrog_SetupWallPause(EnPametfrog* this) { this->actor.speedXZ = 0.0f; this->skelAnime.animPlaybackSpeed = 1.5f; if (this->timer != 0) { - this->wallRotation = this->unk_2E8.y > 0.0f ? (M_PI / 30.0f) : (-M_PI / 30.0f); + this->wallRotation = this->unk_2E8.y > 0.0f ? (M_PI / 30) : (-M_PI / 30); } else { randFloat = Rand_ZeroFloat(0x2000); this->wallRotation = (Rand_ZeroOne() < 0.5f ? -1 : 1) * (0x1000 + randFloat) * (M_PI / (15 * 0x8000)); @@ -931,7 +931,7 @@ void EnPametfrog_SetupSpawnFrog(EnPametfrog* this, GlobalContext* globalCtx) { static Vec3f sAccel = { 0.0f, -0.5f, 0.0f }; static Color_RGBA8 primColor = { 250, 250, 250, 255 }; static Color_RGBA8 envColor = { 180, 180, 180, 255 }; - s16 yaw = func_800DFCDC(ACTIVE_CAM) + 0x8000; + s16 yaw = BINANG_ROT180(func_800DFCDC(ACTIVE_CAM)); Vec3f vec1; Vec3f vel; s32 i; @@ -961,7 +961,7 @@ void EnPametfrog_SpawnFrog(EnPametfrog* this, GlobalContext* globalCtx) { f32 magShake; this->timer--; - magShake = (sin_rad(this->timer * (M_PI / 5.0f)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f; + magShake = (sin_rad(this->timer * (M_PI / 5)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f; EnPametfrog_ShakeCamera(this, globalCtx, 75.0f * magShake, 10.0f * magShake); if (this->timer == 0) { EnPametfrog_StopCutscene(this, globalCtx); @@ -1099,7 +1099,7 @@ void func_8086CB4C(EnPametfrog* this) { Audio_PlayActorSound2(&this->actor, NA_SE_EN_FROG_DAMAGE); func_800BCB70(&this->actor, 0x4000, 0xFF, 0, 20); func_800BE5CC(&this->actor, &this->collider, 0); - this->actor.shape.rot.y = this->actor.world.rot.y + 0x8000; + this->actor.shape.rot.y = BINANG_ROT180(this->actor.world.rot.y); this->actionFunc = func_8086CC04; } diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c index 384435258c..3788ad656f 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -218,7 +218,7 @@ void EnSb_WaitOpen(EnSb* this, GlobalContext* globalCtx) { } void EnSb_TurnAround(EnSb* this, GlobalContext* globalCtx) { - s16 invertedYaw = this->yawAngle + 0x8000; + s16 invertedYaw = BINANG_ROT180(this->yawAngle); Math_SmoothStepToS(&this->actor.shape.rot.y, invertedYaw, 1, 0x1F40, 0xA); if (this->actor.shape.rot.y == invertedYaw) { diff --git a/tables/functions.txt b/tables/functions.txt index 8a6a331140..1ff983ab84 100644 --- a/tables/functions.txt +++ b/tables/functions.txt @@ -2074,24 +2074,24 @@ 0x8010C164:("Nmi_SetPrenmiStart",), 0x8010C19C:("Nmi_GetPrenmiHasStarted",), 0x8010C1B0:("func_8010C1B0",), - 0x8010C230:("CamMath_Distance",), - 0x8010C274:("CamMath_DistanceAndDiff",), - 0x8010C2D0:("CamMath_DistanceXZ",), - 0x8010C304:("func_8010C304",), - 0x8010C36C:("func_8010C36C",), - 0x8010C3D4:("func_8010C3D4",), - 0x8010C484:("func_8010C484",), - 0x8010C530:("func_8010C530",), - 0x8010C574:("func_8010C574",), - 0x8010C6C8:("func_8010C6C8",), - 0x8010C710:("func_8010C710",), - 0x8010C764:("func_8010C764",), - 0x8010C7B8:("func_8010C7B8",), - 0x8010C838:("func_8010C838",), - 0x8010C8C8:("func_8010C8C8",), - 0x8010C930:("func_8010C930",), - 0x8010C9C8:("func_8010C9C8",), - 0x8010CAA0:("func_8010CAA0",), + 0x8010C230:("OLib_Vec3fDist",), + 0x8010C274:("OLib_Vec3fDistOutDiff",), + 0x8010C2D0:("OLib_Vec3fDistXZ",), + 0x8010C304:("OLib_ClampMinDist",), + 0x8010C36C:("OLib_ClampMaxDist",), + 0x8010C3D4:("OLib_Vec3fDistNormalize",), + 0x8010C484:("OLib_VecSphToVec3f",), + 0x8010C530:("OLib_VecSphGeoToVec3f",), + 0x8010C574:("OLib_Vec3fToVecSph",), + 0x8010C6C8:("OLib_Vec3fToVecSphGeo",), + 0x8010C710:("OLib_Vec3fDiffToVecSph",), + 0x8010C764:("OLib_Vec3fDiffToVecSphGeo",), + 0x8010C7B8:("OLib_VecSphToVec3fSum",), + 0x8010C838:("OLib_Vec3fDiffRad",), + 0x8010C8C8:("OLib_Vec3fDiffDegF",), + 0x8010C930:("OLib_Vec3fDiffBinAng",), + 0x8010C9C8:("OLib_DbCameraVec3fDiff",), + 0x8010CAA0:("OLib_DbCameraVec3fSum",), 0x8010CB80:("func_8010CB80",), 0x8010CD98:("func_8010CD98",), 0x8010CFBC:("func_8010CFBC",), diff --git a/tables/objects.txt b/tables/objects.txt index 78f5f3c040..939035e7b9 100644 --- a/tables/objects.txt +++ b/tables/objects.txt @@ -302,7 +302,8 @@ 0x8010A000:"z_map_exp", 0x8010A760:"z_msgevent", 0x8010C0C0:"", - 0x8010C230:"", + 0x8010C230:"z_olib", + 0x8010CB70:"", 0x8010CB80:"z_parameter", 0x801224E0:"", 0x80122660:"",