mirror of
https://github.com/pret/pokestadium.git
synced 2026-03-21 17:24:20 -05:00
decompile math_util
This commit is contained in:
parent
9116960fd6
commit
a67fbd2dce
1424
include/trig_tables.inc.c
Normal file
1424
include/trig_tables.inc.c
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -48,7 +48,7 @@ segments:
|
|||
- [0x75F0, asm] # stage loader
|
||||
- [0x8EC0, c, crash_screen] # crash handler
|
||||
- [0x9D20, c, profiler]
|
||||
- [0xAF00, asm] # camera code
|
||||
- [0xAF00, c, math_util]
|
||||
- [0xB130, c, hal_libc]
|
||||
- [0xB230, c, gb_tower]
|
||||
- [0xC030, c] # extra sprites loader
|
||||
|
|
@ -331,6 +331,8 @@ segments:
|
|||
- [0x6A3B0, .data, profiler]
|
||||
- [0x6A3D0, .data, gb_tower]
|
||||
- [0x6A3E0, data, rom_data_6A3E0]
|
||||
- [0x6A3F0, .data, math_util]
|
||||
- [0x6FC00, data, rom_data_6FC00]
|
||||
- [0x7A180, .data, libleo/driverominit]
|
||||
- [0x7A190, data, rom_data_7A190]
|
||||
- [0x7A2A0, .data, libultra/os/initialize]
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
#include <ultra64.h>
|
||||
#include "controller.h"
|
||||
#include "gb_tower.h"
|
||||
|
||||
// TODO: Identify/move to header
|
||||
extern s16 func_8000A360(float, float);
|
||||
#include "math_util.h"
|
||||
|
||||
struct Controller gControllers[4];
|
||||
OSMesgQueue gSIEventMesgQueue;
|
||||
|
|
@ -77,7 +75,7 @@ void Cont_AdjustAnalogStick(struct Controller* controller) {
|
|||
}
|
||||
|
||||
if (controller->stickMag > 0.0f) {
|
||||
controller->unkE = func_8000A360(-controller->stickY, controller->stickX);
|
||||
controller->unkE = MathUtil_Atan2s(-controller->stickY, controller->stickX);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
77
src/math_util.c
Normal file
77
src/math_util.c
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#include <ultra64.h>
|
||||
#include "math_util.h"
|
||||
|
||||
// this file might be the leftovers of math_util.c from sm64/mk64.
|
||||
|
||||
#include "trig_tables.inc.c"
|
||||
|
||||
/**
|
||||
* Helper function for atan2s. Does a look up of the arctangent of y/x assuming
|
||||
* the resulting angle is in range [0, 0x2000] (1/8 of a circle).
|
||||
*/
|
||||
u16 MathUtil_Atan2Lookup(f32 y, f32 x) {
|
||||
u16 ret;
|
||||
|
||||
if (x == 0) {
|
||||
ret = gArctanTable[0];
|
||||
} else {
|
||||
ret = gArctanTable[(s32)(y / x * 1024 + 0.5f)];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the angle from (0, 0) to (x, y) as a s16. Given that terrain is in
|
||||
* the xz-plane, this is commonly called with (z, x) to get a yaw angle.
|
||||
*/
|
||||
s16 MathUtil_Atan2s(f32 y, f32 x) {
|
||||
u16 ret;
|
||||
|
||||
if (x >= 0) {
|
||||
if (y >= 0) {
|
||||
if (y >= x) {
|
||||
ret = MathUtil_Atan2Lookup(x, y);
|
||||
} else {
|
||||
ret = 0x4000 - MathUtil_Atan2Lookup(y, x);
|
||||
}
|
||||
} else {
|
||||
y = -y;
|
||||
if (y < x) {
|
||||
ret = 0x4000 + MathUtil_Atan2Lookup(y, x);
|
||||
} else {
|
||||
ret = 0x8000 - MathUtil_Atan2Lookup(x, y);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
x = -x;
|
||||
if (y < 0) {
|
||||
y = -y;
|
||||
if (y >= x) {
|
||||
ret = 0x8000 + MathUtil_Atan2Lookup(x, y);
|
||||
} else {
|
||||
ret = 0xC000 - MathUtil_Atan2Lookup(y, x);
|
||||
}
|
||||
} else {
|
||||
if (y < x) {
|
||||
ret = 0xC000 + MathUtil_Atan2Lookup(y, x);
|
||||
} else {
|
||||
ret = -MathUtil_Atan2Lookup(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a random 16-bit value determined by the guRandom call.
|
||||
*/
|
||||
s32 MathUtil_Random16(void) {
|
||||
return guRandom() & 0xFFFF; // would prototype this as u16, but doesnt match with other calls.
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a random float between 0.0 to 1.0.
|
||||
*/
|
||||
f32 MathUtil_Random_ZeroOne(void) {
|
||||
return MathUtil_Random16() / 65536.0f;
|
||||
}
|
||||
13
src/math_util.h
Normal file
13
src/math_util.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef _MATH_UTIL_H_
|
||||
#define _MATH_UTIL_H_
|
||||
|
||||
extern f32 gSineTable[];
|
||||
extern f32 gCosineTable[0x1000];
|
||||
extern s16 gArctanTable[0x401];
|
||||
|
||||
u16 MathUtil_Atan2Lookup(f32 y, f32 x);
|
||||
s16 MathUtil_Atan2s(f32 y, f32 x);
|
||||
s32 MathUtil_Random16(void);
|
||||
f32 MathUtil_Random_ZeroOne(void);
|
||||
|
||||
#endif // _MATH_UTIL_H_
|
||||
|
|
@ -592,4 +592,11 @@ mem_pool_alloc = 0x80002AF8;
|
|||
mem_pool_free = 0x80002BD0;
|
||||
Util_DrawMemProfiler = 0x8000310C;
|
||||
Util_Malloc = 0x80002FDC;
|
||||
Util_Free = 0x80003004;
|
||||
Util_Free = 0x80003004;
|
||||
MathUtil_Atan2Lookup = 0x8000A300;
|
||||
MathUtil_Atan2s = 0x8000A360;
|
||||
gArctanTable = 0x8006E7F0;
|
||||
gSineTable = 0x800697F0;
|
||||
gCosineTable = 0x8006A7F0;
|
||||
MathUtil_Random16 = 0x8000A4D4;
|
||||
MathUtil_Random_ZeroOne = 0x8000A4F8;
|
||||
Loading…
Reference in New Issue
Block a user