mirror of
https://github.com/HackerN64/HackerOoT.git
synced 2026-01-21 10:37:37 -08:00
Merge decomp/main (#141)
* Match retail BSS ordering (#1927) * Match retail BSS ordering * Revert moving some global variables to headers * Adjust block numbers after header changes * Fix debug build * Overlay bss ordering * Fix BSS ordering after header changes * gc-eu-mq OK * Implement preprocessor for #pragma increment_block_number * Transfer usage comment from reencode.sh * Use temporary directory instead of temporary file * Move ColChkMassType back * Player: Document "WaitForPutAway" (#1936) * document put away delay * functions.txt * add a note on delaying indefinitely * format * typo * delay -> wait for put away * revert unintended formatting change * add comment to struct member * format * fix functions.txt * Set up gc-eu and match all code (#1938) * Set up gc-eu and match all code * Format * Mark gc-eu-mq as WIP until it builds OK * Move original/MQ map mark data to separate files * Add #includes to .inc.c files to help out VS Code * Use #if in spec instead of .inc.c files * Delete disassembly data for gc-eu-mq (#1942) * Player Docs: "sUpperBodyIsBusy" (#1944) * document upperbodybusy * change wording for comment and rename upperanimblendweight * format * review * Fix miscategorized scenes (#1946) * Fix miscategorized scenes * Sort includes * Player Docs: Action Interrupt (#1947) * document action interrupt * format * new function comment * format * add a note about items * format * Add gc-eu-mq to CI (#1943) * Add gc-eu-mq to CI * Give up on scripting * Revert quotes changes * Player Docs: Name some high level update calls (#1593) * name some low hanging fruit * revert burn and shock, doing in seperate pr * add some function comments * yaw func * adjust comment * some review * unname UpdateZTarget * Player_DetectRumbleSecrets * fix dive do action name * Player Docs: Control stick buffers (#1945) * name vars and add enum * name some spin attack stuff * fix right and left * forward/backward * format * fix retail bss * sControlStickWorldYaw * Force string.o to be in boot for gcc builds (#1948) In retail builds, memcpy is linked in code, not boot, but GCC likes to call memcpy when copying structs so currently GCC builds immediately crash in __osInitialize_common. * Rename yDistToWater -> depthInWater (#1950) * Rename yDistToWater -> yDistUnderWater * yDistUnderWater -> depthInWater * Check baserom hash before decompression (#1952) * Remove Cygwin support (#1951) * Document pause page switching (#1550) * Document pause page switching * document initial scroll left setup, when opening the pause menu * `PAUSE_MAIN_STATE_1` -> `PAUSE_MAIN_STATE_SWITCHING_PAGE` * try a diagram of the pages layout in world space as a comment * expand `nextPageMode` comment * touch up pause camera header comments * expand comment on irrelevant init `mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE` * expand doc on `sKaleidoSetup*` data * expand docs on `gPageSwitchNextButtonStatus` * add some doc on `sPageSwitch*` arrays * SwitchPage -> PageSwitch * add `PAGE_SWITCH_NSTEPS` * `SWITCH_PAGE_*_PT` -> `PAGE_SWITCH_PT_*` * peepoArtist --------- Co-authored-by: fig02 <fig02srl@gmail.com> * Fix LensMode Enum Names (#1954) * Change linker script so gGameOverTimer can be in z_game_over.c (#1939) * Change linker script so gGameOverTimer can be in z_game_over.c * gGameOverTimer -> sGameOverTimer * include_data_only_with_rodata -> include_data_only_within_rodata * fix build issues * Check buffers segment in check_ordering.py (#1960) * Delete unused yaz0tool (#1959) * Revamp "AnimationContext" Docs, now called "AnimTaskQueue" (#1941) * start using task terminology * more docs * format * cleanups * MoveActor -> ActorMove * missed a couple * hopefully the last changes * comment explaining the group change * some review * dragorn review * remove accidental file * fix matching issue, now use while loop * Experiment: remove global.h dependency from sys_math, sys_math3d, z_lib (#1956) * split sys_math, sys_math3d, z_lib from global.h * suggestions * forgot this * more math stuff * nit fix * re-add ichain.h * resolve tharo's comments * Fix check_ordering.py checking for shifted/nonmatching-besides-relocs (#1961) * Run CC_CHECK with the correct CPP defines (#1963) * Run CC_CHECK with the correct CPP defines * Add "CPP_DEFINES ?=" --------- Co-authored-by: cadmic <cadmic24@gmail.com> Co-authored-by: fig02 <fig02srl@gmail.com> Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com> Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com> Co-authored-by: mzxrules <mzxrules@gmail.com>
This commit is contained in:
42
Makefile
42
Makefile
@@ -42,6 +42,7 @@ RUN_CC_CHECK := 1
|
||||
CFLAGS ?=
|
||||
CPPFLAGS ?=
|
||||
CFLAGS_IDO ?=
|
||||
CPP_DEFINES ?=
|
||||
|
||||
TARGET ?=
|
||||
|
||||
@@ -54,8 +55,7 @@ CPPFLAGS := -DCONSOLE_GC
|
||||
endif
|
||||
|
||||
ifeq ($(COMPILER),gcc)
|
||||
CFLAGS += -DCOMPILER_GCC -DNON_MATCHING -DAVOID_UB -std=gnu11
|
||||
CPPFLAGS += -DCOMPILER_GCC -DNON_MATCHING -DAVOID_UB -std=gnu11
|
||||
CPP_DEFINES += -DCOMPILER_GCC -DNON_MATCHING -DAVOID_UB -std=gnu11
|
||||
else
|
||||
$(error Unsupported compiler. Please use gcc as the COMPILER variable.)
|
||||
endif
|
||||
@@ -88,17 +88,14 @@ ifeq ($(VERSION),gc-eu)
|
||||
HACKEROOT := 0
|
||||
else ifeq ($(VERSION),gc-eu-mq)
|
||||
DEBUG := 0
|
||||
CFLAGS += -DOOT_MQ
|
||||
CPPFLAGS += -DOOT_MQ
|
||||
CPP_DEFINES += -DOOT_MQ
|
||||
HACKEROOT := 0
|
||||
else ifeq ($(VERSION),gc-eu-mq-dbg)
|
||||
DEBUG := 1
|
||||
CFLAGS += -DOOT_MQ
|
||||
CPPFLAGS += -DOOT_MQ
|
||||
CPP_DEFINES += -DOOT_MQ
|
||||
HACKEROOT := 0
|
||||
else ifeq ($(VERSION),hackeroot-mq)
|
||||
CFLAGS += -DOOT_MQ
|
||||
CPPFLAGS += -DOOT_MQ
|
||||
CPP_DEFINES += -DOOT_MQ
|
||||
HACKEROOT := 1
|
||||
else
|
||||
$(error Unsupported version $(VERSION))
|
||||
@@ -123,36 +120,25 @@ ifeq ($(origin PACKAGE_VERSION), undefined)
|
||||
endif
|
||||
|
||||
ifeq ($(VERSION),hackeroot-mq)
|
||||
CFLAGS += -DENABLE_HACKEROOT=1
|
||||
CPPFLAGS += -DENABLE_HACKEROOT=1
|
||||
CFLAGS_IDO += -DENABLE_HACKEROOT=1
|
||||
CPP_DEFINES += -DENABLE_HACKEROOT=1
|
||||
OPTFLAGS := -Os
|
||||
|
||||
ifeq ($(RELEASE),1)
|
||||
CFLAGS += -DRELEASE_ROM=1 -DOOT_DEBUG=0
|
||||
CPPFLAGS += -DRELEASE_ROM=1 -DOOT_DEBUG=0
|
||||
CPP_DEFINES += -DRELEASE_ROM=1 -DOOT_DEBUG=0
|
||||
CFLAGS_IDO += -DOOT_DEBUG=0
|
||||
else
|
||||
CFLAGS += -DRELEASE_ROM=0 -DOOT_DEBUG=1
|
||||
CPPFLAGS += -DRELEASE_ROM=0 -DOOT_DEBUG=1
|
||||
CFLAGS_IDO += -DRELEASE_ROM=0 -DOOT_DEBUG=1
|
||||
CPP_DEFINES += -DRELEASE_ROM=0 -DOOT_DEBUG=1
|
||||
endif
|
||||
else
|
||||
ifeq ($(DEBUG),1)
|
||||
CFLAGS += -DOOT_DEBUG=1
|
||||
CPPFLAGS += -DOOT_DEBUG=1
|
||||
CFLAGS_IDO += -DOOT_DEBUG=1
|
||||
CPP_DEFINES += -DOOT_DEBUG=1
|
||||
OPTFLAGS := -O2
|
||||
else
|
||||
CFLAGS += -DNDEBUG -DOOT_DEBUG=0
|
||||
CPPFLAGS += -DNDEBUG -DOOT_DEBUG=0
|
||||
CFLAGS_IDO += -DNDEBUG -DOOT_DEBUG=0
|
||||
CPP_DEFINES += -DNDEBUG -DOOT_DEBUG=0
|
||||
OPTFLAGS := -O2 -g3
|
||||
endif
|
||||
|
||||
CFLAGS += -DENABLE_HACKEROOT=0
|
||||
CPPFLAGS += -DENABLE_HACKEROOT=0
|
||||
CFLAGS_IDO += -DENABLE_HACKEROOT=0
|
||||
CPP_DEFINES += -DENABLE_HACKEROOT=0
|
||||
endif
|
||||
|
||||
# Override optimization flags if using GDB
|
||||
@@ -218,7 +204,7 @@ OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy
|
||||
OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump
|
||||
NM := $(MIPS_BINUTILS_PREFIX)nm
|
||||
|
||||
N64_EMULATOR ?=
|
||||
N64_EMULATOR ?=
|
||||
|
||||
INC := -Iinclude -Iinclude/libc -Isrc -I$(BUILD_DIR) -I. -I$(EXTRACTED_DIR)
|
||||
|
||||
@@ -242,6 +228,10 @@ CC_IDO := tools/ido_recomp/linux/5.3/cc
|
||||
# preprocessor for this because it won't substitute inside string literals.
|
||||
SPEC_REPLACE_VARS := sed -e 's|$$(BUILD_DIR)|$(BUILD_DIR)|g'
|
||||
|
||||
CFLAGS += $(CPP_DEFINES)
|
||||
CPPFLAGS += $(CPP_DEFINES)
|
||||
CFLAGS_IDO += $(CPP_DEFINES)
|
||||
|
||||
ASFLAGS := -march=vr4300 -32 -no-pad-sections -Iinclude
|
||||
|
||||
ifeq ($(COMPILER),gcc)
|
||||
|
||||
17
include/fp_math.h
Normal file
17
include/fp_math.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef FP_MATH_H
|
||||
#define FP_MATH_H
|
||||
|
||||
#include "ultra64.h"
|
||||
|
||||
f32 Math_FTanF(f32 angle);
|
||||
f32 Math_FFloorF(f32 x);
|
||||
f32 Math_FCeilF(f32 x);
|
||||
f32 Math_FRoundF(f32 x);
|
||||
f32 Math_FNearbyIntF(f32 x);
|
||||
f32 Math_FTruncF(f32 x);
|
||||
f32 Math_FAtanF(f32 x);
|
||||
f32 Math_FAtan2F(f32 y, f32 x);
|
||||
f32 Math_FAsinF(f32 x);
|
||||
f32 Math_FAcosF(f32 x);
|
||||
|
||||
#endif
|
||||
@@ -4,23 +4,6 @@
|
||||
#include "z64.h"
|
||||
#include "macros.h"
|
||||
|
||||
f32 fabsf(f32 f);
|
||||
#ifdef __sgi
|
||||
#pragma intrinsic(fabsf)
|
||||
#else
|
||||
#define fabsf(f) __builtin_fabsf((f32)(f))
|
||||
#endif
|
||||
|
||||
f32 sqrtf(f32 f);
|
||||
#ifdef __sgi
|
||||
#pragma intrinsic(sqrtf)
|
||||
#endif
|
||||
|
||||
f64 sqrt(f64 f);
|
||||
#ifdef __sgi
|
||||
#pragma intrinsic(sqrt)
|
||||
#endif
|
||||
|
||||
void cleararena(void);
|
||||
void bootproc(void);
|
||||
void Main_ThreadEntry(void* arg);
|
||||
@@ -834,41 +817,6 @@ s32 Environment_IsForcedSequenceDisabled(void);
|
||||
void Environment_PlayStormNatureAmbience(PlayState* play);
|
||||
void Environment_StopStormNatureAmbience(PlayState* play);
|
||||
void Environment_WarpSongLeave(PlayState* play);
|
||||
void Lib_MemSet(u8* dest, size_t len, u8 val);
|
||||
f32 Math_CosS(s16 angle);
|
||||
f32 Math_SinS(s16 angle);
|
||||
s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step);
|
||||
s32 Math_StepToS(s16* pValue, s16 target, s16 step);
|
||||
s32 Math_StepToF(f32* pValue, f32 target, f32 step);
|
||||
s32 Math_StepUntilAngleS(s16* pValue, s16 limit, s16 step);
|
||||
s32 Math_StepUntilS(s16* pValue, s16 limit, s16 step);
|
||||
s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step);
|
||||
s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step);
|
||||
s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep);
|
||||
void Lib_GetControlStickData(f32* outMagnitude, s16* outAngle, Input* input);
|
||||
s16 Rand_S16Offset(s16 base, s16 range);
|
||||
void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src);
|
||||
void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src);
|
||||
void Math_Vec3f_Sum(Vec3f* a, Vec3f* b, Vec3f* dest);
|
||||
void Math_Vec3f_Diff(Vec3f* a, Vec3f* b, Vec3f* dest);
|
||||
void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* a, Vec3s* b);
|
||||
void Math_Vec3f_Scale(Vec3f* vec, f32 scaleF);
|
||||
f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b);
|
||||
f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest);
|
||||
f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b);
|
||||
s16 Math_Vec3f_Yaw(Vec3f* origin, Vec3f* point);
|
||||
s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b);
|
||||
void Actor_ProcessInitChain(Actor* actor, InitChainEntry* ichain);
|
||||
f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep);
|
||||
void Math_ApproachF(f32* pValue, f32 target, f32 fraction, f32 step);
|
||||
void Math_ApproachZeroF(f32* pValue, f32 fraction, f32 step);
|
||||
f32 Math_SmoothStepToDegF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep);
|
||||
s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep);
|
||||
void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 step);
|
||||
void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src);
|
||||
void Sfx_PlaySfxCentered(u16 sfxId);
|
||||
void Sfx_PlaySfxCentered2(u16 sfxId);
|
||||
void Sfx_PlaySfxAtPos(Vec3f* projectedPos, u16 sfxId);
|
||||
void Health_InitMeter(PlayState* play);
|
||||
void Health_UpdateMeter(PlayState* play);
|
||||
void Health_DrawMeter(PlayState* play);
|
||||
@@ -1352,80 +1300,9 @@ void Main(void* arg);
|
||||
void SysCfb_Init(s32 n64dd);
|
||||
void* SysCfb_GetFbPtr(s32 idx);
|
||||
void* SysCfb_GetFbEnd(void);
|
||||
f32 Math_FactorialF(f32 n);
|
||||
f32 Math_Factorial(s32 n);
|
||||
f32 Math_PowF(f32 base, s32 exp);
|
||||
f32 Math_SinF(f32 angle);
|
||||
f32 Math_CosF(f32 angle);
|
||||
s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB,
|
||||
f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB,
|
||||
Vec3f* closestPoint);
|
||||
void Math3D_LineClosestToPoint(InfiniteLine* line, Vec3f* pos, Vec3f* closestPoint);
|
||||
s32 Math3D_PlaneVsPlaneVsLineClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA,
|
||||
f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* point, Vec3f* closestPoint);
|
||||
void Math3D_LineSplitRatio(Vec3f* v0, Vec3f* v1, f32 ratio, Vec3f* ret);
|
||||
f32 Math3D_Cos(Vec3f* a, Vec3f* b);
|
||||
s32 Math3D_CosOut(Vec3f* a, Vec3f* b, f32* dst);
|
||||
void Math3D_Vec3fReflect(Vec3f* vec, Vec3f* normal, Vec3f* reflVec);
|
||||
s32 Math3D_PointInSquare2D(f32 upperLeftX, f32 lowerRightX, f32 upperLeftY, f32 lowerRightY, f32 x, f32 y);
|
||||
f32 Math3D_Dist1DSq(f32 a, f32 b);
|
||||
f32 Math3D_Dist2DSq(f32 x0, f32 y0, f32 x1, f32 y1);
|
||||
f32 Math3D_Vec3fMagnitudeSq(Vec3f* vec);
|
||||
f32 Math3D_Vec3fMagnitude(Vec3f* vec);
|
||||
f32 Math3D_Vec3fDistSq(Vec3f* a, Vec3f* b);
|
||||
void Math3D_Vec3f_Cross(Vec3f* a, Vec3f* b, Vec3f* ret);
|
||||
void Math3D_SurfaceNorm(Vec3f* va, Vec3f* vb, Vec3f* vc, Vec3f* normal);
|
||||
f32 Math3D_Vec3f_DistXYZ(Vec3f* a, Vec3f* b);
|
||||
s32 Math3D_PointRelativeToCubeFaces(Vec3f* point, Vec3f* min, Vec3f* max);
|
||||
s32 Math3D_PointRelativeToCubeEdges(Vec3f* point, Vec3f* min, Vec3f* max);
|
||||
s32 Math3D_PointRelativeToCubeVertices(Vec3f* point, Vec3f* min, Vec3f* max);
|
||||
s32 Math3D_LineVsCube(Vec3f* min, Vec3f* max, Vec3f* a, Vec3f* b);
|
||||
void Math3D_RotateXZPlane(Vec3f* pointOnPlane, s16 angle, f32* a, f32* c, f32* d);
|
||||
void Math3D_DefPlane(Vec3f* va, Vec3f* vb, Vec3f* vc, f32* nx, f32* ny, f32* nz, f32* originDist);
|
||||
f32 Math3D_UDistPlaneToPos(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* p);
|
||||
f32 Math3D_DistPlaneToPos(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* p);
|
||||
s32 Math3D_TriChkPointParaYSlopedY(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 z, f32 x);
|
||||
s32 Math3D_TriChkPointParaYIntersectDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 z,
|
||||
f32 x, f32* yIntersect, f32 chkDist);
|
||||
s32 Math3D_TriChkPointParaYIntersectInsideTri(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist,
|
||||
f32 z, f32 x, f32* yIntersect, f32 chkDist);
|
||||
s32 Math3D_TriChkLineSegParaYIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 z,
|
||||
f32 x, f32* yIntersect, f32 y0, f32 y1);
|
||||
s32 Math3D_TriChkPointParaYDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, Plane* plane, f32 z, f32 x, f32 chkDist);
|
||||
s32 Math3D_TriChkPointParaXIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 y,
|
||||
f32 z, f32* xIntersect);
|
||||
s32 Math3D_TriChkLineSegParaXIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 y,
|
||||
f32 z, f32* xIntersect, f32 x0, f32 x1);
|
||||
s32 Math3D_TriChkPointParaXDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, Plane* plane, f32 y, f32 z, f32 chkDist);
|
||||
s32 Math3D_TriChkPointParaZIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 x,
|
||||
f32 y, f32* zIntersect);
|
||||
s32 Math3D_TriChkLineSegParaZIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 x,
|
||||
f32 y, f32* zIntersect, f32 z0, f32 z1);
|
||||
s32 Math3D_TriChkLineSegParaZDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, Plane* plane, f32 x, f32 y, f32 chkDist);
|
||||
s32 Math3D_LineSegVsPlane(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* linePointA, Vec3f* linePointB,
|
||||
Vec3f* intersect, s32 fromFront);
|
||||
void Math3D_TriNorm(TriNorm* tri, Vec3f* va, Vec3f* vb, Vec3f* vc);
|
||||
s32 Math3D_PointDistSqToLine2D(f32 x0, f32 y0, f32 x1, f32 y1, f32 x2, f32 y2, f32* lineLenSq);
|
||||
s32 Math3D_LineVsSph(Sphere16* sphere, Linef* line);
|
||||
s32 Math3D_TriVsSphIntersect(Sphere16* sphere, TriNorm* tri, Vec3f* intersectPoint);
|
||||
s32 Math3D_CylVsLineSeg(Cylinder16* cyl, Vec3f* linePointA, Vec3f* linePointB, Vec3f* intersectA, Vec3f* intersectB);
|
||||
s32 Math3D_CylVsTri(Cylinder16* cyl, TriNorm* tri);
|
||||
s32 Math3D_CylTriVsIntersect(Cylinder16* cyl, TriNorm* tri, Vec3f* intersect);
|
||||
s32 Math3D_SphVsSph(Sphere16* sphereA, Sphere16* sphereB);
|
||||
s32 Math3D_SphVsSphOverlap(Sphere16* sphereA, Sphere16* sphereB, f32* overlapSize);
|
||||
s32 Math3D_SphVsSphOverlapCenterDist(Sphere16* sphereA, Sphere16* sphereB, f32* overlapSize, f32* centerDist);
|
||||
s32 Math3D_SphVsCylOverlap(Sphere16* sph, Cylinder16* cyl, f32* overlapSize);
|
||||
s32 Math3D_SphVsCylOverlapCenterDist(Sphere16* sph, Cylinder16* cyl, f32* overlapSize, f32* centerDist);
|
||||
s32 Math3D_CylVsCylOverlap(Cylinder16* ca, Cylinder16* cb, f32* overlapSize);
|
||||
s32 Math3D_CylVsCylOverlapCenterDist(Cylinder16* ca, Cylinder16* cb, f32* overlapSize, f32* centerDist);
|
||||
s32 Math3D_TriVsTriIntersect(TriNorm* ta, TriNorm* tb, Vec3f* intersect);
|
||||
s32 Math3D_XZInSphere(Sphere16* sphere, f32 x, f32 z);
|
||||
s32 Math3D_XYInSphere(Sphere16* sphere, f32 x, f32 y);
|
||||
s32 Math3D_YZInSphere(Sphere16* sphere, f32 y, f32 z);
|
||||
|
||||
void Math3D_DrawSphere(PlayState* play, Sphere16* sph);
|
||||
void Math3D_DrawCylinder(PlayState* play, Cylinder16* cyl);
|
||||
s16 Math_Atan2S(f32 x, f32 y);
|
||||
f32 Math_Atan2F(f32 x, f32 y);
|
||||
void Matrix_Init(GameState* gameState);
|
||||
void Matrix_Push(void);
|
||||
void Matrix_Pop(void);
|
||||
@@ -1695,24 +1572,7 @@ void Audio_Init(void);
|
||||
void Audio_InitSound(void);
|
||||
void func_800F7170(void);
|
||||
void func_800F71BC(s32 arg0);
|
||||
void Audio_SetSfxBanksMute(u16 muteMask);
|
||||
void Audio_QueueSeqCmdMute(u8 channelIndex);
|
||||
void Audio_ClearBGMMute(u8 channelIndex);
|
||||
void Audio_PlaySfxGeneral(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* vol, s8* reverbAdd);
|
||||
void Audio_ProcessSfxRequest(void);
|
||||
void Audio_ChooseActiveSfx(u8 bankId);
|
||||
void Audio_PlayActiveSfx(u8 bankId);
|
||||
void Audio_StopSfxByBank(u8 bankId);
|
||||
void func_800F8884(u8 bankId, Vec3f* pos);
|
||||
void Audio_StopSfxByPosAndBank(u8 bankId, Vec3f* pos);
|
||||
void Audio_StopSfxByPos(Vec3f* pos);
|
||||
void Audio_StopSfxByPosAndId(Vec3f* pos, u16 sfxId);
|
||||
void Audio_StopSfxByTokenAndId(u8 token, u16 sfxId);
|
||||
void Audio_StopSfxById(u32 sfxId);
|
||||
void Audio_ProcessSfxRequests(void);
|
||||
void func_800F8F88(void);
|
||||
u8 Audio_IsSfxPlaying(u32 sfxId);
|
||||
void Audio_ResetSfx(void);
|
||||
|
||||
void Audio_StartSequence(u8 seqPlayerIndex, u8 seqId, u8 seqArgs, u16 fadeInDuration);
|
||||
void Audio_StopSequence(u8 seqPlayerIndex, u16 fadeOutDuration);
|
||||
void Audio_QueueSeqCmd(u32 cmd);
|
||||
@@ -1763,20 +1623,7 @@ s8 PadUtils_GetRelX(Input* input);
|
||||
s8 PadUtils_GetRelY(Input* input);
|
||||
void PadUtils_UpdateRelXY(Input* input);
|
||||
s32 PadSetup_Init(OSMesgQueue* mq, u8* outMask, OSContStatus* status);
|
||||
f32 Math_FTanF(f32 angle);
|
||||
f32 Math_FFloorF(f32 x);
|
||||
f32 Math_FCeilF(f32 x);
|
||||
f32 Math_FRoundF(f32 x);
|
||||
f32 Math_FNearbyIntF(f32 x);
|
||||
f32 Math_FTruncF(f32 x);
|
||||
f32 Math_FAtanF(f32 x);
|
||||
f32 Math_FAtan2F(f32 y, f32 x);
|
||||
f32 Math_FAsinF(f32 x);
|
||||
f32 Math_FAcosF(f32 x);
|
||||
f32 ceilf(f32 x);
|
||||
f32 truncf(f32 x);
|
||||
f32 roundf(f32 x);
|
||||
f32 nearbyintf(f32 x);
|
||||
|
||||
void* SystemArena_Malloc(u32 size);
|
||||
void* SystemArena_MallocR(u32 size);
|
||||
void* SystemArena_Realloc(void* ptr, u32 newSize);
|
||||
@@ -1795,14 +1642,6 @@ void SystemArena_FreeDebug(void* ptr, const char* file, int line);
|
||||
void SystemArena_Display(void);
|
||||
#endif
|
||||
|
||||
u32 Rand_Next(void);
|
||||
void Rand_Seed(u32 seed);
|
||||
f32 Rand_ZeroOne(void);
|
||||
f32 Rand_Centered(void);
|
||||
void Rand_Seed_Variable(u32* rndNum, u32 seed);
|
||||
u32 Rand_Next_Variable(u32* rndNum);
|
||||
f32 Rand_ZeroOne_Variable(u32* rndNum);
|
||||
f32 Rand_Centered_Variable(u32* rndNum);
|
||||
void __osMallocInit(Arena* arena, void* start, u32 size);
|
||||
void __osMallocAddBlock(Arena* arena, void* start, s32 size);
|
||||
void __osMallocCleanup(Arena* arena);
|
||||
@@ -1841,8 +1680,6 @@ s32 JpegDecoder_ParseNextSymbol(JpegHuffmanTable* hTable, s16* outCoeff, s8* out
|
||||
u16 JpegDecoder_ReadBits(u8 len);
|
||||
s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes);
|
||||
void guScale(Mtx* m, f32 x, f32 y, f32 z);
|
||||
f32 sinf(f32 angle);
|
||||
s16 sins(u16 angle);
|
||||
OSTask* _VirtualToPhysicalTask(OSTask* intp);
|
||||
void osSpTaskLoad(OSTask* intp);
|
||||
void osSpTaskStartGo(OSTask* tp);
|
||||
@@ -1906,8 +1743,6 @@ s32 osPfsDeleteFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8*
|
||||
s32 __osPfsReleasePages(OSPfs* pfs, __OSInode* inode, u8 initialPage, u8 bank, __OSInodeUnit* finalPage);
|
||||
void guOrthoF(f32[4][4], f32, f32, f32, f32, f32, f32, f32);
|
||||
void guOrtho(Mtx*, f32, f32, f32, f32, f32, f32, f32);
|
||||
f32 cosf(f32 angle);
|
||||
s16 coss(u16 angle);
|
||||
void osViSetEvent(OSMesgQueue* mq, OSMesg msg, u32 retraceCount);
|
||||
s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern);
|
||||
void __osPfsRequestData(u8 cmd);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#ifndef ICHAIN_H
|
||||
#define ICHAIN_H
|
||||
|
||||
#include "libc/stddef.h"
|
||||
#include "ultra64.h"
|
||||
|
||||
struct Actor;
|
||||
|
||||
typedef struct {
|
||||
u32 cont: 1;
|
||||
@@ -55,4 +57,6 @@ typedef enum {
|
||||
#define ICHAIN_CONTINUE 1
|
||||
#define ICHAIN_STOP 0
|
||||
|
||||
void Actor_ProcessInitChain(struct Actor* actor, InitChainEntry* ichain);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -34,6 +34,23 @@ double round(double);
|
||||
long lroundf(float);
|
||||
long lround(double);
|
||||
|
||||
f32 fabsf(f32 f);
|
||||
#ifdef __sgi
|
||||
#pragma intrinsic(fabsf)
|
||||
#else
|
||||
#define fabsf(f) __builtin_fabsf((f32)(f))
|
||||
#endif
|
||||
|
||||
f32 sqrtf(f32 f);
|
||||
#ifdef __sgi
|
||||
#pragma intrinsic(sqrtf)
|
||||
#endif
|
||||
|
||||
f64 sqrt(f64 f);
|
||||
#ifdef __sgi
|
||||
#pragma intrinsic(sqrt)
|
||||
#endif
|
||||
|
||||
extern float qNaN0x3FFFFF;
|
||||
extern float qNaN0x10000;
|
||||
extern float sNaN0x3FFFFF;
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - 0x80000000)
|
||||
#define SEGMENTED_TO_VIRTUAL(addr) PHYSICAL_TO_VIRTUAL(gSegments[SEGMENT_NUMBER(addr)] + SEGMENT_OFFSET(addr))
|
||||
|
||||
#define SQ(x) ((x)*(x))
|
||||
#define ABS(x) ((x) >= 0 ? (x) : -(x))
|
||||
#define DECR(x) ((x) == 0 ? 0 : --(x))
|
||||
#define CLAMP(x, min, max) ((x) < (min) ? (min) : (x) > (max) ? (max) : (x))
|
||||
|
||||
15
include/rand.h
Normal file
15
include/rand.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef RAND_H
|
||||
#define RAND_H
|
||||
|
||||
#include "ultra64.h"
|
||||
|
||||
u32 Rand_Next(void);
|
||||
void Rand_Seed(u32 seed);
|
||||
f32 Rand_ZeroOne(void);
|
||||
f32 Rand_Centered(void);
|
||||
void Rand_Seed_Variable(u32* rndNum, u32 seed);
|
||||
u32 Rand_Next_Variable(u32* rndNum);
|
||||
f32 Rand_ZeroOne_Variable(u32* rndNum);
|
||||
f32 Rand_Centered_Variable(u32* rndNum);
|
||||
|
||||
#endif
|
||||
@@ -112,6 +112,7 @@
|
||||
#define R_C_UP_ICON_Y YREG(89)
|
||||
#define R_EPONAS_SONG_PLAYED DREG(53)
|
||||
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + (i))
|
||||
#define R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON ZREG(13)
|
||||
#define R_C_BTN_COLOR(i) ZREG(39 + (i))
|
||||
#define R_B_BTN_COLOR(i) ZREG(43 + (i))
|
||||
#define R_START_LABEL_DD(i) ZREG(48 + (i))
|
||||
@@ -360,4 +361,17 @@ typedef enum {
|
||||
#define R_MOTION_BLUR_PRIORITY_ENABLED SREG(93)
|
||||
#define R_MOTION_BLUR_ENABLED SREG(95)
|
||||
|
||||
typedef struct {
|
||||
// ENABLE_REG_EDITOR
|
||||
/* 0x00 */ s32 regPage; // 0: no page selected (reg editor is not active); 1: first page; `REG_PAGES`: last page
|
||||
/* 0x04 */ s32 regGroup; // Indexed from 0 to `REG_GROUPS`-1. Each group has its own character to identify it.
|
||||
/* 0x08 */ s32 regCur; // Selected reg, indexed from 0 as the page start
|
||||
/* 0x0C */ s32 dPadInputPrev;
|
||||
/* 0x10 */ s32 inputRepeatTimer;
|
||||
|
||||
/* 0x14 */ s16 data[REG_GROUPS * REGS_PER_GROUP]; // Accessed through *REG macros, see regs.h
|
||||
} RegEditor; // size = 0x15D4
|
||||
|
||||
extern RegEditor* gRegEditor;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -125,4 +125,27 @@ typedef struct {
|
||||
#define SFX_DIST_SCALING 10.0f
|
||||
#endif
|
||||
|
||||
void Audio_SetSfxBanksMute(u16 muteMask);
|
||||
void Audio_QueueSeqCmdMute(u8 channelIndex);
|
||||
void Audio_ClearBGMMute(u8 channelIndex);
|
||||
void Audio_PlaySfxGeneral(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* vol, s8* reverbAdd);
|
||||
void Audio_ProcessSfxRequest(void);
|
||||
void Audio_ChooseActiveSfx(u8 bankId);
|
||||
void Audio_PlayActiveSfx(u8 bankId);
|
||||
void Audio_StopSfxByBank(u8 bankId);
|
||||
void func_800F8884(u8 bankId, Vec3f* pos);
|
||||
void Audio_StopSfxByPosAndBank(u8 bankId, Vec3f* pos);
|
||||
void Audio_StopSfxByPos(Vec3f* pos);
|
||||
void Audio_StopSfxByPosAndId(Vec3f* pos, u16 sfxId);
|
||||
void Audio_StopSfxByTokenAndId(u8 token, u16 sfxId);
|
||||
void Audio_StopSfxById(u32 sfxId);
|
||||
void Audio_ProcessSfxRequests(void);
|
||||
void func_800F8F88(void);
|
||||
u8 Audio_IsSfxPlaying(u32 sfxId);
|
||||
void Audio_ResetSfx(void);
|
||||
|
||||
extern Vec3f gSfxDefaultPos;
|
||||
extern f32 gSfxDefaultFreqAndVolScale;
|
||||
extern s8 gSfxDefaultReverb;
|
||||
|
||||
#endif
|
||||
|
||||
14
include/sys_math.h
Normal file
14
include/sys_math.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#ifndef SYS_MATH_H
|
||||
#define SYS_MATH_H
|
||||
|
||||
#include "ultra64.h"
|
||||
|
||||
f32 Math_FactorialF(f32 n);
|
||||
f32 Math_Factorial(s32 n);
|
||||
f32 Math_PowF(f32 base, s32 exp);
|
||||
f32 Math_SinF(f32 angle);
|
||||
f32 Math_CosF(f32 angle);
|
||||
s16 Math_Atan2S(f32 x, f32 y);
|
||||
f32 Math_Atan2F(f32 x, f32 y);
|
||||
|
||||
#endif
|
||||
73
include/sys_math3d.h
Normal file
73
include/sys_math3d.h
Normal file
@@ -0,0 +1,73 @@
|
||||
#ifndef SYS_MATH3D_H
|
||||
#define SYS_MATH3D_H
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "z64math.h"
|
||||
|
||||
s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB,
|
||||
f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB,
|
||||
Vec3f* closestPoint);
|
||||
void Math3D_LineClosestToPoint(InfiniteLine* line, Vec3f* pos, Vec3f* closestPoint);
|
||||
s32 Math3D_PlaneVsPlaneVsLineClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA,
|
||||
f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* point, Vec3f* closestPoint);
|
||||
void Math3D_LineSplitRatio(Vec3f* v0, Vec3f* v1, f32 ratio, Vec3f* ret);
|
||||
f32 Math3D_Cos(Vec3f* a, Vec3f* b);
|
||||
s32 Math3D_CosOut(Vec3f* a, Vec3f* b, f32* dst);
|
||||
void Math3D_Vec3fReflect(Vec3f* vec, Vec3f* normal, Vec3f* reflVec);
|
||||
s32 Math3D_PointInSquare2D(f32 upperLeftX, f32 lowerRightX, f32 upperLeftY, f32 lowerRightY, f32 x, f32 y);
|
||||
f32 Math3D_Dist1DSq(f32 a, f32 b);
|
||||
f32 Math3D_Dist2DSq(f32 x0, f32 y0, f32 x1, f32 y1);
|
||||
f32 Math3D_Vec3fMagnitudeSq(Vec3f* vec);
|
||||
f32 Math3D_Vec3fMagnitude(Vec3f* vec);
|
||||
f32 Math3D_Vec3fDistSq(Vec3f* a, Vec3f* b);
|
||||
void Math3D_Vec3f_Cross(Vec3f* a, Vec3f* b, Vec3f* ret);
|
||||
void Math3D_SurfaceNorm(Vec3f* va, Vec3f* vb, Vec3f* vc, Vec3f* normal);
|
||||
f32 Math3D_Vec3f_DistXYZ(Vec3f* a, Vec3f* b);
|
||||
s32 Math3D_PointRelativeToCubeFaces(Vec3f* point, Vec3f* min, Vec3f* max);
|
||||
s32 Math3D_PointRelativeToCubeEdges(Vec3f* point, Vec3f* min, Vec3f* max);
|
||||
s32 Math3D_PointRelativeToCubeVertices(Vec3f* point, Vec3f* min, Vec3f* max);
|
||||
s32 Math3D_LineVsCube(Vec3f* min, Vec3f* max, Vec3f* a, Vec3f* b);
|
||||
void Math3D_RotateXZPlane(Vec3f* pointOnPlane, s16 angle, f32* a, f32* c, f32* d);
|
||||
void Math3D_DefPlane(Vec3f* va, Vec3f* vb, Vec3f* vc, f32* nx, f32* ny, f32* nz, f32* originDist);
|
||||
f32 Math3D_UDistPlaneToPos(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* p);
|
||||
f32 Math3D_DistPlaneToPos(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* p);
|
||||
s32 Math3D_TriChkPointParaYSlopedY(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 z, f32 x);
|
||||
s32 Math3D_TriChkPointParaYIntersectDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 z,
|
||||
f32 x, f32* yIntersect, f32 chkDist);
|
||||
s32 Math3D_TriChkPointParaYIntersectInsideTri(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist,
|
||||
f32 z, f32 x, f32* yIntersect, f32 chkDist);
|
||||
s32 Math3D_TriChkLineSegParaYIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 z,
|
||||
f32 x, f32* yIntersect, f32 y0, f32 y1);
|
||||
s32 Math3D_TriChkPointParaYDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, Plane* plane, f32 z, f32 x, f32 chkDist);
|
||||
s32 Math3D_TriChkPointParaXIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 y,
|
||||
f32 z, f32* xIntersect);
|
||||
s32 Math3D_TriChkLineSegParaXIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 y,
|
||||
f32 z, f32* xIntersect, f32 x0, f32 x1);
|
||||
s32 Math3D_TriChkPointParaXDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, Plane* plane, f32 y, f32 z, f32 chkDist);
|
||||
s32 Math3D_TriChkPointParaZIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 x,
|
||||
f32 y, f32* zIntersect);
|
||||
s32 Math3D_TriChkLineSegParaZIntersect(Vec3f* v0, Vec3f* v1, Vec3f* v2, f32 nx, f32 ny, f32 nz, f32 originDist, f32 x,
|
||||
f32 y, f32* zIntersect, f32 z0, f32 z1);
|
||||
s32 Math3D_TriChkLineSegParaZDist(Vec3f* v0, Vec3f* v1, Vec3f* v2, Plane* plane, f32 x, f32 y, f32 chkDist);
|
||||
s32 Math3D_LineSegVsPlane(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* linePointA, Vec3f* linePointB,
|
||||
Vec3f* intersect, s32 fromFront);
|
||||
void Math3D_TriNorm(TriNorm* tri, Vec3f* va, Vec3f* vb, Vec3f* vc);
|
||||
s32 Math3D_PointDistSqToLine2D(f32 x0, f32 y0, f32 x1, f32 y1, f32 x2, f32 y2, f32* lineLenSq);
|
||||
s32 Math3D_LineVsSph(Sphere16* sphere, Linef* line);
|
||||
s32 Math3D_TriVsSphIntersect(Sphere16* sphere, TriNorm* tri, Vec3f* intersectPoint);
|
||||
s32 Math3D_CylVsLineSeg(Cylinder16* cyl, Vec3f* linePointA, Vec3f* linePointB, Vec3f* intersectA, Vec3f* intersectB);
|
||||
s32 Math3D_CylVsTri(Cylinder16* cyl, TriNorm* tri);
|
||||
s32 Math3D_CylTriVsIntersect(Cylinder16* cyl, TriNorm* tri, Vec3f* intersect);
|
||||
s32 Math3D_SphVsSph(Sphere16* sphereA, Sphere16* sphereB);
|
||||
s32 Math3D_SphVsSphOverlap(Sphere16* sphereA, Sphere16* sphereB, f32* overlapSize);
|
||||
s32 Math3D_SphVsSphOverlapCenterDist(Sphere16* sphereA, Sphere16* sphereB, f32* overlapSize, f32* centerDist);
|
||||
s32 Math3D_SphVsCylOverlap(Sphere16* sph, Cylinder16* cyl, f32* overlapSize);
|
||||
s32 Math3D_SphVsCylOverlapCenterDist(Sphere16* sph, Cylinder16* cyl, f32* overlapSize, f32* centerDist);
|
||||
s32 Math3D_CylVsCylOverlap(Cylinder16* ca, Cylinder16* cb, f32* overlapSize);
|
||||
s32 Math3D_CylVsCylOverlapCenterDist(Cylinder16* ca, Cylinder16* cb, f32* overlapSize, f32* centerDist);
|
||||
s32 Math3D_TriVsTriIntersect(TriNorm* ta, TriNorm* tb, Vec3f* intersect);
|
||||
s32 Math3D_XZInSphere(Sphere16* sphere, f32 x, f32 z);
|
||||
s32 Math3D_XYInSphere(Sphere16* sphere, f32 x, f32 y);
|
||||
s32 Math3D_YZInSphere(Sphere16* sphere, f32 y, f32 z);
|
||||
|
||||
#endif
|
||||
@@ -21,6 +21,12 @@ typedef union {
|
||||
f32 f;
|
||||
} fu;
|
||||
|
||||
f32 sinf(f32 angle);
|
||||
s16 sins(u16 angle);
|
||||
|
||||
f32 cosf(f32 angle);
|
||||
s16 coss(u16 angle);
|
||||
|
||||
extern f32 __libm_qnan_f;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -182,7 +182,6 @@ extern u8 gSequenceTable[];
|
||||
extern u8 gSampleBankTable[];
|
||||
|
||||
extern SaveContext gSaveContext;
|
||||
extern RegEditor* gRegEditor;
|
||||
|
||||
extern u8 gUseCutsceneCam;
|
||||
extern u16 D_8015FCCC;
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "sfx.h"
|
||||
#include "color.h"
|
||||
#include "gfxprint.h"
|
||||
#include "z_lib.h"
|
||||
#include "ichain.h"
|
||||
#include "regs.h"
|
||||
#include "irqmgr.h"
|
||||
@@ -58,6 +59,10 @@
|
||||
#include "gfx.h"
|
||||
#include "jpeg.h"
|
||||
#include "prerender.h"
|
||||
#include "rand.h"
|
||||
#include "sys_math.h"
|
||||
#include "sys_math3d.h"
|
||||
#include "fp_math.h"
|
||||
#include "widescreen.h"
|
||||
#include "rainbow.h"
|
||||
|
||||
@@ -123,17 +128,6 @@
|
||||
// NOTE: Once we start supporting other builds, this can be changed with an ifdef
|
||||
#define REGION_NATIVE REGION_EU
|
||||
|
||||
typedef struct {
|
||||
// ENABLE_REG_EDITOR
|
||||
/* 0x00 */ s32 regPage; // 0: no page selected (reg editor is not active); 1: first page; `REG_PAGES`: last page
|
||||
/* 0x04 */ s32 regGroup; // Indexed from 0 to `REG_GROUPS`-1. Each group has its own character to identify it.
|
||||
/* 0x08 */ s32 regCur; // Selected reg, indexed from 0 as the page start
|
||||
/* 0x0C */ s32 dPadInputPrev;
|
||||
/* 0x10 */ s32 inputRepeatTimer;
|
||||
|
||||
/* 0x14 */ s16 data[REG_GROUPS * REGS_PER_GROUP]; // Accessed through *REG macros, see regs.h
|
||||
} RegEditor; // size = 0x15D4
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 seqId;
|
||||
/* 0x01 */ u8 natureAmbienceId;
|
||||
@@ -252,8 +246,8 @@ typedef struct {
|
||||
} GameOverContext; // size = 0x2
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ LENS_MODE_HIDE_ACTORS, // lens actors are visible by default, and hidden by using lens (for example, fake walls)
|
||||
/* 1 */ LENS_MODE_SHOW_ACTORS // lens actors are invisible by default, and shown by using lens (for example, invisible enemies)
|
||||
/* 0 */ LENS_MODE_SHOW_ACTORS, // lens actors are invisible by default, and shown by using lens (for example, invisible enemies)
|
||||
/* 1 */ LENS_MODE_HIDE_ACTORS // lens actors are visible by default, and hidden by using lens (for example, fake walls)
|
||||
} LensMode;
|
||||
|
||||
typedef enum {
|
||||
@@ -430,7 +424,7 @@ typedef struct PlayState {
|
||||
/* 0x10760 */ PauseContext pauseCtx;
|
||||
/* 0x10A20 */ GameOverContext gameOverCtx;
|
||||
/* 0x10A24 */ EnvironmentContext envCtx;
|
||||
/* 0x10B20 */ AnimationContext animationCtx;
|
||||
/* 0x10B20 */ AnimTaskQueue animTaskQueue;
|
||||
/* 0x117A4 */ ObjectContext objectCtx;
|
||||
/* 0x11CBC */ RoomContext roomCtx;
|
||||
/* 0x11D34 */ TransitionActorContext transiActorCtx;
|
||||
|
||||
130
include/z64animation.h
Executable file → Normal file
130
include/z64animation.h
Executable file → Normal file
@@ -91,7 +91,7 @@ typedef enum {
|
||||
#define ANIM_FLAG_0 (1 << 0) // (no effect outside of player) Related to scaling an animation from/to child/adult
|
||||
#define ANIM_FLAG_UPDATE_Y (1 << 1)
|
||||
#define ANIM_FLAG_PLAYER_2 (1 << 2) // (player-only) Related to scaling an animation from/to child/adult
|
||||
#define ANIM_FLAG_PLAYER_SETMOVE (1 << 3) // (player-only) Call AnimationContext_SetMoveActor
|
||||
#define ANIM_FLAG_PLAYER_SETMOVE (1 << 3) // (player-only) Call AnimTaskQueue_AddActorMove
|
||||
#define ANIM_FLAG_NO_MOVE (1 << 4)
|
||||
#define ANIM_FLAG_PLAYER_7 (1 << 7) // (player-only)
|
||||
|
||||
@@ -239,95 +239,95 @@ s16 Animation_GetLength(void* animation);
|
||||
s16 Animation_GetLastFrame(void* animation);
|
||||
|
||||
/*
|
||||
* Animation requests
|
||||
* Animation Task Queue
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ ANIMENTRY_LOADFRAME,
|
||||
/* 1 */ ANIMENTRY_COPYALL,
|
||||
/* 2 */ ANIMENTRY_INTERP,
|
||||
/* 3 */ ANIMENTRY_COPYTRUE,
|
||||
/* 4 */ ANIMENTRY_COPYFALSE,
|
||||
/* 5 */ ANIMENTRY_MOVEACTOR
|
||||
} AnimationType;
|
||||
/* 0 */ ANIMTASK_LOAD_PLAYER_FRAME,
|
||||
/* 1 */ ANIMTASK_COPY,
|
||||
/* 2 */ ANIMTASK_INTERP,
|
||||
/* 3 */ ANIMTASK_COPY_USING_MAP,
|
||||
/* 4 */ ANIMTASK_COPY_USING_MAP_INVERTED,
|
||||
/* 5 */ ANIMTASK_ACTOR_MOVE
|
||||
} AnimTaskType;
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ DmaRequest req;
|
||||
/* 0x020 */ OSMesgQueue msgQueue;
|
||||
/* 0x038 */ OSMesg msg;
|
||||
} AnimEntryLoadFrame; // size = 0x3C
|
||||
/* 0x00 */ DmaRequest req;
|
||||
/* 0x20 */ OSMesgQueue msgQueue;
|
||||
/* 0x38 */ OSMesg msg;
|
||||
} AnimTaskLoadPlayerFrame; // size = 0x3C
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ u8 queueFlag;
|
||||
/* 0x001 */ u8 vecCount;
|
||||
/* 0x004 */ Vec3s* dst;
|
||||
/* 0x008 */ Vec3s* src;
|
||||
} AnimEntryCopyAll; // size = 0xC
|
||||
/* 0x00 */ u8 group;
|
||||
/* 0x01 */ u8 vecCount;
|
||||
/* 0x04 */ Vec3s* dest;
|
||||
/* 0x08 */ Vec3s* src;
|
||||
} AnimTaskCopy; // size = 0xC
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ u8 queueFlag;
|
||||
/* 0x001 */ u8 vecCount;
|
||||
/* 0x004 */ Vec3s* base;
|
||||
/* 0x008 */ Vec3s* mod;
|
||||
/* 0x00C */ f32 weight;
|
||||
} AnimEntryInterp; // size = 0x10
|
||||
/* 0x00 */ u8 group;
|
||||
/* 0x01 */ u8 vecCount;
|
||||
/* 0x04 */ Vec3s* base;
|
||||
/* 0x08 */ Vec3s* mod;
|
||||
/* 0x0C */ f32 weight;
|
||||
} AnimTaskInterp; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ u8 queueFlag;
|
||||
/* 0x001 */ u8 vecCount;
|
||||
/* 0x004 */ Vec3s* dst;
|
||||
/* 0x008 */ Vec3s* src;
|
||||
/* 0x00C */ u8* copyFlag;
|
||||
} AnimEntryCopyTrue; // size = 0x10
|
||||
/* 0x00 */ u8 group;
|
||||
/* 0x01 */ u8 vecCount;
|
||||
/* 0x04 */ Vec3s* dest;
|
||||
/* 0x08 */ Vec3s* src;
|
||||
/* 0x0C */ u8* limbCopyMap;
|
||||
} AnimTaskCopyUsingMap; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ u8 queueFlag;
|
||||
/* 0x001 */ u8 vecCount;
|
||||
/* 0x004 */ Vec3s* dst;
|
||||
/* 0x008 */ Vec3s* src;
|
||||
/* 0x00C */ u8* copyFlag;
|
||||
} AnimEntryCopyFalse; // size = 0x10
|
||||
/* 0x00 */ u8 group;
|
||||
/* 0x01 */ u8 vecCount;
|
||||
/* 0x04 */ Vec3s* dest;
|
||||
/* 0x08 */ Vec3s* src;
|
||||
/* 0x0C */ u8* limbCopyMap;
|
||||
} AnimTaskCopyUsingMapInverted; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ struct Actor* actor;
|
||||
/* 0x004 */ struct SkelAnime* skelAnime;
|
||||
/* 0x008 */ f32 diffScaleY;
|
||||
} AnimEntryMoveActor; // size = 0xC
|
||||
/* 0x00 */ struct Actor* actor;
|
||||
/* 0x04 */ struct SkelAnime* skelAnime;
|
||||
/* 0x08 */ f32 diffScaleY;
|
||||
} AnimTaskActorMove; // size = 0xC
|
||||
|
||||
typedef union {
|
||||
AnimEntryLoadFrame load;
|
||||
AnimEntryCopyAll copy;
|
||||
AnimEntryInterp interp;
|
||||
AnimEntryCopyTrue copy1;
|
||||
AnimEntryCopyFalse copy0;
|
||||
AnimEntryMoveActor move;
|
||||
} AnimationEntryData; // size = 0x3C
|
||||
AnimTaskLoadPlayerFrame loadPlayerFrame;
|
||||
AnimTaskCopy copy;
|
||||
AnimTaskInterp interp;
|
||||
AnimTaskCopyUsingMap copyUsingMap;
|
||||
AnimTaskCopyUsingMapInverted copyUsingMapInverted;
|
||||
AnimTaskActorMove actorMove;
|
||||
} AnimTaskData; // size = 0x3C
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 type;
|
||||
/* 0x04 */ AnimationEntryData data;
|
||||
} AnimationEntry; // size = 0x40
|
||||
/* 0x04 */ AnimTaskData data;
|
||||
} AnimTask; // size = 0x40
|
||||
|
||||
#define ANIMATION_ENTRY_MAX 50
|
||||
#define ANIM_TASK_QUEUE_MAX 50
|
||||
|
||||
typedef struct AnimationContext {
|
||||
s16 animationCount;
|
||||
AnimationEntry entries[ANIMATION_ENTRY_MAX];
|
||||
} AnimationContext; // size = 0xC84
|
||||
typedef struct AnimTaskQueue {
|
||||
s16 count;
|
||||
AnimTask tasks[ANIM_TASK_QUEUE_MAX];
|
||||
} AnimTaskQueue; // size = 0xC84
|
||||
|
||||
void AnimationContext_SetLoadFrame(struct PlayState* play, LinkAnimationHeader* animation, s32 frame, s32 limbCount,
|
||||
Vec3s* frameTable);
|
||||
void AnimationContext_SetCopyAll(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src);
|
||||
void AnimationContext_SetCopyTrue(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag);
|
||||
void AnimationContext_SetCopyFalse(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag);
|
||||
void AnimationContext_SetInterp(struct PlayState* play, s32 vecCount, Vec3s* base, Vec3s* mod, f32 weight);
|
||||
void AnimationContext_SetMoveActor(struct PlayState* play, struct Actor* actor, SkelAnime* skelAnime, f32 moveDiffScaleY);
|
||||
void AnimTaskQueue_AddLoadPlayerFrame(struct PlayState* play, LinkAnimationHeader* animation, s32 frame, s32 limbCount,
|
||||
Vec3s* frameTable);
|
||||
void AnimTaskQueue_AddCopy(struct PlayState* play, s32 vecCount, Vec3s* dest, Vec3s* src);
|
||||
void AnimTaskQueue_AddInterp(struct PlayState* play, s32 vecCount, Vec3s* base, Vec3s* mod, f32 weight);
|
||||
void AnimTaskQueue_AddCopyUsingMap(struct PlayState* play, s32 vecCount, Vec3s* dest, Vec3s* src, u8* limbCopyMap);
|
||||
void AnimTaskQueue_AddCopyUsingMapInverted(struct PlayState* play, s32 vecCount, Vec3s* dest, Vec3s* src, u8* limbCopyMap);
|
||||
void AnimTaskQueue_AddActorMove(struct PlayState* play, struct Actor* actor, SkelAnime* skelAnime, f32 moveDiffScaleY);
|
||||
|
||||
void AnimationContext_SetNextQueue(struct PlayState* play);
|
||||
void AnimationContext_DisableQueue(struct PlayState* play);
|
||||
void AnimTaskQueue_SetNextGroup(struct PlayState* play);
|
||||
void AnimTaskQueue_DisableTransformTasksForGroup(struct PlayState* play);
|
||||
|
||||
void AnimationContext_Reset(AnimationContext* animationCtx);
|
||||
void AnimationContext_Update(struct PlayState* play, AnimationContext* animationCtx);
|
||||
void AnimTaskQueue_Reset(AnimTaskQueue* animTaskQueue);
|
||||
void AnimTaskQueue_Update(struct PlayState* play, AnimTaskQueue* animTaskQueue);
|
||||
|
||||
/*
|
||||
* Link animations
|
||||
|
||||
@@ -8,10 +8,6 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
// these two angle conversion macros are slightly inaccurate
|
||||
#define CAM_DEG_TO_BINANG(degrees) (s16)TRUNCF_BINANG((degrees) * 182.04167f + .5f)
|
||||
#define CAM_BINANG_TO_DEG(binang) ((f32)(binang) * (360.0001525f / 65535.0f))
|
||||
|
||||
#define CAM_STAT_CUT 0
|
||||
#define CAM_STAT_WAIT 1
|
||||
#define CAM_STAT_UNK3 3
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
#define Z64MATH_H
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "math.h"
|
||||
|
||||
#define SQ(x) ((x)*(x))
|
||||
#define VEC_SET(V,X,Y,Z) (V).x=(X);(V).y=(Y);(V).z=(Z)
|
||||
|
||||
typedef struct {
|
||||
@@ -120,6 +122,11 @@ typedef VecSphGeo VecGeo;
|
||||
#define BINANG_TO_RAD_ALT(binang) (((f32)(binang) / (f32)0x8000) * M_PI)
|
||||
#define BINANG_TO_RAD_ALT2(binang) (((f32)(binang) * M_PI) / 0x8000)
|
||||
|
||||
// Angle conversion macros (Camera)
|
||||
// these two angle conversion macros are slightly inaccurate
|
||||
#define CAM_DEG_TO_BINANG(degrees) (s16)TRUNCF_BINANG((degrees) * 182.04167f + .5f)
|
||||
#define CAM_BINANG_TO_DEG(binang) ((f32)(binang) * (360.0001525f / 65535.0f))
|
||||
|
||||
// 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)
|
||||
|
||||
@@ -22,6 +22,33 @@ typedef enum {
|
||||
/* 0x04 */ PAUSE_WORLD_MAP
|
||||
} PauseMenuPage;
|
||||
|
||||
// The XZ coordinates in which direction each pause page is at
|
||||
// e.g. the item page is in the -z direction
|
||||
/*
|
||||
* < item >
|
||||
*
|
||||
* ^ ^
|
||||
* x
|
||||
* equip o--> map
|
||||
* |
|
||||
* v z v v
|
||||
*
|
||||
* < quest >
|
||||
*/
|
||||
#define PAUSE_ITEM_X (0)
|
||||
#define PAUSE_ITEM_Z (-1)
|
||||
#define PAUSE_MAP_X (1)
|
||||
#define PAUSE_MAP_Z (0)
|
||||
#define PAUSE_QUEST_X (0)
|
||||
#define PAUSE_QUEST_Z (1)
|
||||
#define PAUSE_EQUIP_X (-1)
|
||||
#define PAUSE_EQUIP_Z (0)
|
||||
|
||||
// The pause camera looks at x=0,z=0,
|
||||
// with the eye being PAUSE_EYE_DIST away in the direction opposite to the active page,
|
||||
// which results in the camera being pointed (through x=0,z=0) towards the active page.
|
||||
#define PAUSE_EYE_DIST (64.0f)
|
||||
|
||||
#define PAUSE_EQUIP_PLAYER_WIDTH 64
|
||||
#define PAUSE_EQUIP_PLAYER_HEIGHT 112
|
||||
|
||||
@@ -65,7 +92,7 @@ typedef enum {
|
||||
// Sub-states of PAUSE_STATE_MAIN
|
||||
typedef enum {
|
||||
/* 0 */ PAUSE_MAIN_STATE_IDLE,
|
||||
/* 1 */ PAUSE_MAIN_STATE_1,
|
||||
/* 1 */ PAUSE_MAIN_STATE_SWITCHING_PAGE,
|
||||
/* 2 */ PAUSE_MAIN_STATE_2,
|
||||
/* 3 */ PAUSE_MAIN_STATE_3,
|
||||
/* 4 */ PAUSE_MAIN_STATE_4,
|
||||
@@ -105,9 +132,9 @@ typedef struct {
|
||||
/* 0x01D6 */ u16 debugState; // ENABLE_INV_EDITOR || ENABLE_EVENT_EDITOR
|
||||
/* 0x01D8 */ Vec3f eye;
|
||||
/* 0x01E4 */ u16 mainState;
|
||||
/* 0x01E6 */ u16 mode;
|
||||
/* 0x01E6 */ u16 nextPageMode; // During a page switch, indicates the page before switching and the direction to scroll in. Value is `(2 * prev pageIndex) + (scroll left ? 1 : 0)`
|
||||
/* 0x01E8 */ u16 pageIndex; // "kscp_pos"
|
||||
/* 0x01EA */ u16 unk_1EA;
|
||||
/* 0x01EA */ u16 pageSwitchTimer;
|
||||
/* 0x01EC */ u16 unk_1EC;
|
||||
/* 0x01F0 */ f32 unk_1F0;
|
||||
/* 0x01F4 */ f32 unk_1F4;
|
||||
|
||||
44
include/z_lib.h
Normal file
44
include/z_lib.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef Z_LIB_H
|
||||
#define Z_LIB_H
|
||||
|
||||
#include "libc/stddef.h"
|
||||
#include "padmgr.h"
|
||||
#include "z64math.h"
|
||||
#include "color.h"
|
||||
|
||||
void Lib_MemSet(u8* dest, size_t len, u8 val);
|
||||
f32 Math_CosS(s16 angle);
|
||||
f32 Math_SinS(s16 angle);
|
||||
s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step);
|
||||
s32 Math_StepToS(s16* pValue, s16 target, s16 step);
|
||||
s32 Math_StepToF(f32* pValue, f32 target, f32 step);
|
||||
s32 Math_StepUntilAngleS(s16* pValue, s16 limit, s16 step);
|
||||
s32 Math_StepUntilS(s16* pValue, s16 limit, s16 step);
|
||||
s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step);
|
||||
s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step);
|
||||
s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep);
|
||||
void Lib_GetControlStickData(f32* outMagnitude, s16* outAngle, Input* input);
|
||||
s16 Rand_S16Offset(s16 base, s16 range);
|
||||
void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src);
|
||||
void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src);
|
||||
void Math_Vec3f_Sum(Vec3f* a, Vec3f* b, Vec3f* dest);
|
||||
void Math_Vec3f_Diff(Vec3f* a, Vec3f* b, Vec3f* dest);
|
||||
void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* a, Vec3s* b);
|
||||
void Math_Vec3f_Scale(Vec3f* vec, f32 scaleF);
|
||||
f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b);
|
||||
f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest);
|
||||
f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b);
|
||||
s16 Math_Vec3f_Yaw(Vec3f* origin, Vec3f* point);
|
||||
s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b);
|
||||
f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep);
|
||||
void Math_ApproachF(f32* pValue, f32 target, f32 fraction, f32 step);
|
||||
void Math_ApproachZeroF(f32* pValue, f32 fraction, f32 step);
|
||||
f32 Math_SmoothStepToDegF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep);
|
||||
s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep);
|
||||
void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 step);
|
||||
void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src);
|
||||
void Sfx_PlaySfxCentered(u16 sfxId);
|
||||
void Sfx_PlaySfxCentered2(u16 sfxId);
|
||||
void Sfx_PlaySfxAtPos(Vec3f* projectedPos, u16 sfxId);
|
||||
|
||||
#endif
|
||||
13
spec
13
spec
@@ -448,6 +448,9 @@ beginseg
|
||||
include "$(BUILD_DIR)/src/code/sys_cfb.o"
|
||||
include "$(BUILD_DIR)/src/code/sys_math.o"
|
||||
include "$(BUILD_DIR)/src/code/sys_math3d.o"
|
||||
#if OOT_DEBUG
|
||||
include "$(BUILD_DIR)/src/code/sys_math3d_draw.o"
|
||||
#endif
|
||||
include "$(BUILD_DIR)/src/code/sys_math_atan.o"
|
||||
include "$(BUILD_DIR)/src/code/sys_matrix.o"
|
||||
include "$(BUILD_DIR)/src/code/sys_ucode.o"
|
||||
@@ -495,7 +498,7 @@ beginseg
|
||||
include "$(BUILD_DIR)/src/code/code_800FC620.o"
|
||||
include "$(BUILD_DIR)/src/code/padutils.o"
|
||||
include "$(BUILD_DIR)/src/code/padsetup.o"
|
||||
include "$(BUILD_DIR)/src/code/code_800FCE80.o"
|
||||
include "$(BUILD_DIR)/src/code/fp_math.o"
|
||||
include "$(BUILD_DIR)/src/code/fp.o"
|
||||
include "$(BUILD_DIR)/src/code/system_malloc.o"
|
||||
include "$(BUILD_DIR)/src/code/rand.o"
|
||||
@@ -611,8 +614,12 @@ beginseg
|
||||
include "$(BUILD_DIR)/src/code/fmodf.o"
|
||||
include "$(BUILD_DIR)/src/code/__osMemset.o"
|
||||
include "$(BUILD_DIR)/src/code/__osMemmove.o"
|
||||
include_data_with_rodata "$(BUILD_DIR)/src/code/z_message_PAL.o"
|
||||
include "$(BUILD_DIR)/src/code/z_game_over.o"
|
||||
// For some reason, the data sections of these files are placed here near the
|
||||
// rodata sections of the other files
|
||||
include_data_only_within_rodata "$(BUILD_DIR)/src/code/z_message_PAL.o"
|
||||
include_data_only_within_rodata "$(BUILD_DIR)/src/code/z_game_over.o"
|
||||
include_no_data "$(BUILD_DIR)/src/code/z_message_PAL.o"
|
||||
include_no_data "$(BUILD_DIR)/src/code/z_game_over.o"
|
||||
include "$(BUILD_DIR)/src/code/z_construct.o"
|
||||
include "$(BUILD_DIR)/data/audio_tables.rodata.o"
|
||||
include "$(BUILD_DIR)/data/rsp.rodata.o"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user