match some Z2Calc functions (#72)

* Z2Calc OK

* inline definitions in random.h and format

* set -enum int compiler flag and fix enum hacks

* note for get_ufloat_1 inline

* PR suggestions and UB note

Co-authored-by: Pheenoh <pheenoh@gmail.com>
This commit is contained in:
lepelog 2021-01-07 02:39:56 +01:00 committed by GitHub
parent b8ecef0ddb
commit 6d946e8330
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 93 additions and 247 deletions

View File

@ -70,7 +70,7 @@ ASFLAGS := -mgekko -I include
LDFLAGS := -map $(MAP) -fp hard -nodefaults -w off
# Compiler flags
CFLAGS := -Cpp_exceptions off -proc gekko -fp hard -O3 -nodefaults -msgstyle gcc $(INCLUDES)
CFLAGS := -Cpp_exceptions off -proc gekko -fp hard -O3 -nodefaults -msgstyle gcc -enum int $(INCLUDES)
# for postprocess.py
PROCFLAGS := -fprologue-fixup=old_stack

View File

@ -10,9 +10,6 @@ public:
enum EAllocMode {
HEAD = 0,
TAIL = 1,
__EALLOCMODE_FORCE_ENUM_S32 = INT32_MAX,
__EALLOCMODE_FORCE_ENUM_SIGNED = -1,
};
public:

View File

@ -74,17 +74,12 @@ public:
MOUNT_ARAM = 2,
MOUNT_DVD = 3,
MOUNT_COMP = 4,
__EMOUNT_MODE_FORCE_32BIT = UINT32_MAX,
};
enum EMountDirection {
UNKNOWN_MOUNT_DIRECTION = 0,
HEAD = 1,
TAIL = 2,
__EMOUNT_DIRECTION_FORCE_32BIT = INT32_MAX,
__EMOUNT_DIRECTION_FORCE_SIGNED = -1,
};
class CArcName {
@ -120,7 +115,7 @@ public:
u32 countResource(void) const;
u32 getFileAttribute(u32) const;
EMountMode getMountMode() const { return (EMountMode)mMountMode; }
u32 getMountMode() const { return mMountMode; }
protected:
bool isSameName(CArcName&, u32, u16) const;

View File

@ -41,9 +41,6 @@ enum JKRCompression {
COMPRESSION_YAY0 = 1,
COMPRESSION_YAZ0 = 2,
COMPRESSION_ASR = 3,
__COMPRESSION_ENUM_FORCE_S32 = INT32_MAX,
__COMPRESSION_ENUM_FORCE_SIGNED = -1,
};
class JKRDecomp : public JKRThread {

View File

@ -8,7 +8,6 @@ enum JKRExpandSwitch {
EXPAND_SWITCH_UNKNOWN0 = 0,
EXPAND_SWITCH_UNKNOWN1 = 1,
EXPAND_SWITCH_UNKNOWN2 = 2,
__FORCE_EXPAND_SWITCH_32BIT = UINT32_MAX,
};
class JKRHeap;
@ -19,8 +18,6 @@ public:
UNKNOWN_EALLOC_DIRECTION = 0,
FORWARD = 1,
BACKWARD = 2,
__FORCE_EALLOC_DIRECTION_32BIT = UINT32_MAX,
};
static void* loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection,

View File

@ -7,7 +7,6 @@
enum JKRMemBreakFlag {
JKRMEMBREAK_FLAG_UNKNOWN0 = 0,
JKRMEMBREAK_FLAG_UNKNOWN1 = 1,
_JKRMemBreakFlag_PADDING_32BIT = 0xFFFFFFFF,
};
class JKRMemArchive : public JKRArchive {

View File

@ -8,6 +8,27 @@ struct TRandom_fast_ {
u32 value;
TRandom_fast_(u32 value);
u32 get(void) {
value = (value * 0x19660d) + 0x3c6ef35f;
return value;
}
u32 get_bit32(void) { return this->get(); }
// due to the float constant, having this function inlined adds that float to data,
// making it not match
float get_ufloat_1(void) {
// !@bug UB: in C++ it's not legal to read from an union member other
// than the last one that was written to.
union {
f32 f;
u32 s;
} out;
out.s = (this->get() >> 9) | 0x3f800000;
return out.f - 1;
}
void setSeed(u32 seed) { value = seed; }
};
} // namespace JMath

View File

@ -1,8 +1,10 @@
#include "JSystem/JMath/random.h"
#include "global.h"
namespace Z2Calc {
struct CurveSign {
// temp
enum CurveSign {
CURVE_SIGN_0 = 0,
CURVE_SIGN_1 = 1,
};
struct FNoise1f {
@ -20,4 +22,4 @@ float linearTransform(float, float, float, float, float, bool);
float getParamByExp(float, float, float, float, float, float, Z2Calc::CurveSign);
float getRandom(float, float, float);
float getRandom_0_1(void);
} // namespace Z2Calc
} // namespace Z2Calc

View File

@ -1,29 +0,0 @@
/* 802A968C 002A65CC EC C1 10 28 */ fsubs f6, f1, f2
/* 802A9690 002A65D0 EC 25 20 28 */ fsubs f1, f5, f4
/* 802A9694 002A65D4 EC 03 10 28 */ fsubs f0, f3, f2
/* 802A9698 002A65D8 EC 01 00 24 */ fdivs f0, f1, f0
/* 802A969C 002A65DC EC 06 00 32 */ fmuls f0, f6, f0
/* 802A96A0 002A65E0 EC 24 00 2A */ fadds f1, f4, f0
/* 802A96A4 002A65E4 54 60 06 3F */ clrlwi. r0, r3, 0x18
/* 802A96A8 002A65E8 4C 82 00 20 */ bnelr
/* 802A96AC 002A65EC FC 04 28 40 */ fcmpo cr0, f4, f5
/* 802A96B0 002A65F0 40 80 00 24 */ bge lbl_802A96D4
/* 802A96B4 002A65F4 FC 01 28 40 */ fcmpo cr0, f1, f5
/* 802A96B8 002A65F8 40 81 00 0C */ ble lbl_802A96C4
/* 802A96BC 002A65FC FC 20 28 90 */ fmr f1, f5
/* 802A96C0 002A6600 4E 80 00 20 */ blr
lbl_802A96C4:
/* 802A96C4 002A6604 FC 01 20 40 */ fcmpo cr0, f1, f4
/* 802A96C8 002A6608 4C 80 00 20 */ bgelr
/* 802A96CC 002A660C FC 20 20 90 */ fmr f1, f4
/* 802A96D0 002A6610 4E 80 00 20 */ blr
lbl_802A96D4:
/* 802A96D4 002A6614 FC 01 20 40 */ fcmpo cr0, f1, f4
/* 802A96D8 002A6618 40 81 00 0C */ ble lbl_802A96E4
/* 802A96DC 002A661C FC 20 20 90 */ fmr f1, f4
/* 802A96E0 002A6620 4E 80 00 20 */ blr
lbl_802A96E4:
/* 802A96E4 002A6624 FC 01 28 40 */ fcmpo cr0, f1, f5
/* 802A96E8 002A6628 4C 80 00 20 */ bgelr
/* 802A96EC 002A662C FC 20 28 90 */ fmr f1, f5
/* 802A96F0 002A6630 4E 80 00 20 */ blr

View File

@ -1,77 +0,0 @@
/* 802A96F4 002A6634 94 21 FF B0 */ stwu r1, -0x50(r1)
/* 802A96F8 002A6638 7C 08 02 A6 */ mflr r0
/* 802A96FC 002A663C 90 01 00 54 */ stw r0, 0x54(r1)
/* 802A9700 002A6640 DB E1 00 40 */ stfd f31, 0x40(r1)
/* 802A9704 002A6644 F3 E1 00 48 */ psq_st f31, 72(r1), 0, 0
/* 802A9708 002A6648 DB C1 00 30 */ stfd f30, 0x30(r1)
/* 802A970C 002A664C F3 C1 00 38 */ psq_st f30, 56(r1), 0, 0
/* 802A9710 002A6650 DB A1 00 20 */ stfd f29, 0x20(r1)
/* 802A9714 002A6654 F3 A1 00 28 */ psq_st f29, 40(r1), 0, 0
/* 802A9718 002A6658 DB 81 00 10 */ stfd f28, 0x10(r1)
/* 802A971C 002A665C F3 81 00 18 */ psq_st f28, 24(r1), 0, 0
/* 802A9720 002A6660 FF 80 20 90 */ fmr f28, f4
/* 802A9724 002A6664 FF A0 28 90 */ fmr f29, f5
/* 802A9728 002A6668 FF C0 30 90 */ fmr f30, f6
/* 802A972C 002A666C 2C 03 00 01 */ cmpwi r3, 1
/* 802A9730 002A6670 40 82 00 44 */ bne lbl_802A9774
/* 802A9734 002A6674 C0 82 BE 28 */ lfs f4, lbl_80455828-_SDA2_BASE_(r2)
/* 802A9738 002A6678 FC A0 E0 90 */ fmr f5, f28
/* 802A973C 002A667C 38 60 00 01 */ li r3, 1
/* 802A9740 002A6680 4B FF FF 4D */ bl linearTransform__6Z2CalcFfffffb
/* 802A9744 002A6684 48 0C 2F FD */ bl func_8036C740
/* 802A9748 002A6688 FF E0 08 18 */ frsp f31, f1
/* 802A974C 002A668C FC 20 E0 90 */ fmr f1, f28
/* 802A9750 002A6690 48 0C 2F F1 */ bl func_8036C740
/* 802A9754 002A6694 FC 60 08 18 */ frsp f3, f1
/* 802A9758 002A6698 FC 20 F8 90 */ fmr f1, f31
/* 802A975C 002A669C C0 42 BE 2C */ lfs f2, lbl_8045582C-_SDA2_BASE_(r2)
/* 802A9760 002A66A0 FC 80 E8 90 */ fmr f4, f29
/* 802A9764 002A66A4 FC A0 F0 90 */ fmr f5, f30
/* 802A9768 002A66A8 38 60 00 01 */ li r3, 1
/* 802A976C 002A66AC 4B FF FF 21 */ bl linearTransform__6Z2CalcFfffffb
/* 802A9770 002A66B0 48 00 00 58 */ b lbl_802A97C8
lbl_802A9774:
/* 802A9774 002A66B4 2C 03 00 00 */ cmpwi r3, 0
/* 802A9778 002A66B8 40 82 00 40 */ bne lbl_802A97B8
/* 802A977C 002A66BC C0 A2 BE 28 */ lfs f5, lbl_80455828-_SDA2_BASE_(r2)
/* 802A9780 002A66C0 38 60 00 01 */ li r3, 1
/* 802A9784 002A66C4 4B FF FF 09 */ bl linearTransform__6Z2CalcFfffffb
/* 802A9788 002A66C8 48 0C 2F B9 */ bl func_8036C740
/* 802A978C 002A66CC FF E0 08 18 */ frsp f31, f1
/* 802A9790 002A66D0 FC 20 E0 90 */ fmr f1, f28
/* 802A9794 002A66D4 48 0C 2F AD */ bl func_8036C740
/* 802A9798 002A66D8 FC 40 08 18 */ frsp f2, f1
/* 802A979C 002A66DC FC 20 F8 90 */ fmr f1, f31
/* 802A97A0 002A66E0 C0 62 BE 2C */ lfs f3, lbl_8045582C-_SDA2_BASE_(r2)
/* 802A97A4 002A66E4 FC 80 E8 90 */ fmr f4, f29
/* 802A97A8 002A66E8 FC A0 F0 90 */ fmr f5, f30
/* 802A97AC 002A66EC 38 60 00 01 */ li r3, 1
/* 802A97B0 002A66F0 4B FF FE DD */ bl linearTransform__6Z2CalcFfffffb
/* 802A97B4 002A66F4 48 00 00 14 */ b lbl_802A97C8
lbl_802A97B8:
/* 802A97B8 002A66F8 FC 80 E8 90 */ fmr f4, f29
/* 802A97BC 002A66FC FC A0 F0 90 */ fmr f5, f30
/* 802A97C0 002A6700 38 60 00 00 */ li r3, 0
/* 802A97C4 002A6704 4B FF FE C9 */ bl linearTransform__6Z2CalcFfffffb
lbl_802A97C8:
/* 802A97C8 002A6708 FC 01 F0 40 */ fcmpo cr0, f1, f30
/* 802A97CC 002A670C 40 81 00 0C */ ble lbl_802A97D8
/* 802A97D0 002A6710 FC 20 F0 90 */ fmr f1, f30
/* 802A97D4 002A6714 48 00 00 10 */ b lbl_802A97E4
lbl_802A97D8:
/* 802A97D8 002A6718 FC 01 E8 40 */ fcmpo cr0, f1, f29
/* 802A97DC 002A671C 40 80 00 08 */ bge lbl_802A97E4
/* 802A97E0 002A6720 FC 20 E8 90 */ fmr f1, f29
lbl_802A97E4:
/* 802A97E4 002A6724 E3 E1 00 48 */ psq_l f31, 72(r1), 0, 0
/* 802A97E8 002A6728 CB E1 00 40 */ lfd f31, 0x40(r1)
/* 802A97EC 002A672C E3 C1 00 38 */ psq_l f30, 56(r1), 0, 0
/* 802A97F0 002A6730 CB C1 00 30 */ lfd f30, 0x30(r1)
/* 802A97F4 002A6734 E3 A1 00 28 */ psq_l f29, 40(r1), 0, 0
/* 802A97F8 002A6738 CB A1 00 20 */ lfd f29, 0x20(r1)
/* 802A97FC 002A673C E3 81 00 18 */ psq_l f28, 24(r1), 0, 0
/* 802A9800 002A6740 CB 81 00 10 */ lfd f28, 0x10(r1)
/* 802A9804 002A6744 80 01 00 54 */ lwz r0, 0x54(r1)
/* 802A9808 002A6748 7C 08 03 A6 */ mtlr r0
/* 802A980C 002A674C 38 21 00 50 */ addi r1, r1, 0x50
/* 802A9810 002A6750 4E 80 00 20 */ blr

View File

@ -1,50 +0,0 @@
/* 802A9814 002A6754 94 21 FF A0 */ stwu r1, -0x60(r1)
/* 802A9818 002A6758 7C 08 02 A6 */ mflr r0
/* 802A981C 002A675C 90 01 00 64 */ stw r0, 0x64(r1)
/* 802A9820 002A6760 DB E1 00 50 */ stfd f31, 0x50(r1)
/* 802A9824 002A6764 F3 E1 00 58 */ psq_st f31, 88(r1), 0, 0
/* 802A9828 002A6768 DB C1 00 40 */ stfd f30, 0x40(r1)
/* 802A982C 002A676C F3 C1 00 48 */ psq_st f30, 72(r1), 0, 0
/* 802A9830 002A6770 DB A1 00 30 */ stfd f29, 0x30(r1)
/* 802A9834 002A6774 F3 A1 00 38 */ psq_st f29, 56(r1), 0, 0
/* 802A9838 002A6778 DB 81 00 20 */ stfd f28, 0x20(r1)
/* 802A983C 002A677C F3 81 00 28 */ psq_st f28, 40(r1), 0, 0
/* 802A9840 002A6780 DB 61 00 10 */ stfd f27, 0x10(r1)
/* 802A9844 002A6784 F3 61 00 18 */ psq_st f27, 24(r1), 0, 0
/* 802A9848 002A6788 FF 60 08 90 */ fmr f27, f1
/* 802A984C 002A678C FF 80 10 90 */ fmr f28, f2
/* 802A9850 002A6790 FF A0 18 90 */ fmr f29, f3
/* 802A9854 002A6794 C0 02 BE 30 */ lfs f0, lbl_80455830-_SDA2_BASE_(r2)
/* 802A9858 002A6798 EF E0 07 72 */ fmuls f31, f0, f29
/* 802A985C 002A679C C0 22 BE 34 */ lfs f1, lbl_80455834-_SDA2_BASE_(r2)
/* 802A9860 002A67A0 C0 02 BE 2C */ lfs f0, lbl_8045582C-_SDA2_BASE_(r2)
/* 802A9864 002A67A4 EC 00 E8 28 */ fsubs f0, f0, f29
/* 802A9868 002A67A8 EF C1 00 32 */ fmuls f30, f1, f0
/* 802A986C 002A67AC 48 00 00 69 */ bl getRandom_0_1__6Z2CalcFv
/* 802A9870 002A67B0 FC 01 E8 40 */ fcmpo cr0, f1, f29
/* 802A9874 002A67B4 40 80 00 0C */ bge lbl_802A9880
/* 802A9878 002A67B8 FC 00 F8 90 */ fmr f0, f31
/* 802A987C 002A67BC 48 00 00 08 */ b lbl_802A9884
lbl_802A9880:
/* 802A9880 002A67C0 FC 00 F0 90 */ fmr f0, f30
lbl_802A9884:
/* 802A9884 002A67C4 EF 7B 00 32 */ fmuls f27, f27, f0
/* 802A9888 002A67C8 48 00 00 4D */ bl getRandom_0_1__6Z2CalcFv
/* 802A988C 002A67CC FC 40 E0 90 */ fmr f2, f28
/* 802A9890 002A67D0 48 0C 2E F1 */ bl func_8036C780
/* 802A9894 002A67D4 FC 00 08 18 */ frsp f0, f1
/* 802A9898 002A67D8 EC 20 06 F2 */ fmuls f1, f0, f27
/* 802A989C 002A67DC E3 E1 00 58 */ psq_l f31, 88(r1), 0, 0
/* 802A98A0 002A67E0 CB E1 00 50 */ lfd f31, 0x50(r1)
/* 802A98A4 002A67E4 E3 C1 00 48 */ psq_l f30, 72(r1), 0, 0
/* 802A98A8 002A67E8 CB C1 00 40 */ lfd f30, 0x40(r1)
/* 802A98AC 002A67EC E3 A1 00 38 */ psq_l f29, 56(r1), 0, 0
/* 802A98B0 002A67F0 CB A1 00 30 */ lfd f29, 0x30(r1)
/* 802A98B4 002A67F4 E3 81 00 28 */ psq_l f28, 40(r1), 0, 0
/* 802A98B8 002A67F8 CB 81 00 20 */ lfd f28, 0x20(r1)
/* 802A98BC 002A67FC E3 61 00 18 */ psq_l f27, 24(r1), 0, 0
/* 802A98C0 002A6800 CB 61 00 10 */ lfd f27, 0x10(r1)
/* 802A98C4 002A6804 80 01 00 64 */ lwz r0, 0x64(r1)
/* 802A98C8 002A6808 7C 08 03 A6 */ mtlr r0
/* 802A98CC 002A680C 38 21 00 60 */ addi r1, r1, 0x60
/* 802A98D0 002A6810 4E 80 00 20 */ blr

View File

@ -1,29 +0,0 @@
/* 802A98D4 002A6814 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802A98D8 002A6818 7C 08 02 A6 */ mflr r0
/* 802A98DC 002A681C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802A98E0 002A6820 88 0D 8D B0 */ lbz r0, lbl_80451330-_SDA_BASE_(r13)
/* 802A98E4 002A6824 7C 00 07 75 */ extsb. r0, r0
/* 802A98E8 002A6828 40 82 00 18 */ bne lbl_802A9900
/* 802A98EC 002A682C 38 6D 8D B4 */ subi r3, r13, 0x724c
/* 802A98F0 002A6830 38 80 00 00 */ li r4, 0
/* 802A98F4 002A6834 48 09 01 F1 */ bl __ct__Q25JMath13TRandom_fast_FUl
/* 802A98F8 002A6838 38 00 00 01 */ li r0, 1
/* 802A98FC 002A683C 98 0D 8D B0 */ stb r0, lbl_80451330-_SDA_BASE_(r13)
lbl_802A9900:
/* 802A9900 002A6840 80 8D 8D B4 */ lwz r4, lbl_80451334-_SDA_BASE_(r13)
/* 802A9904 002A6844 3C 60 00 19 */ lis r3, 0x0019660D@ha
/* 802A9908 002A6848 38 03 66 0D */ addi r0, r3, 0x0019660D@l
/* 802A990C 002A684C 7C 64 01 D6 */ mullw r3, r4, r0
/* 802A9910 002A6850 3C 63 3C 6F */ addis r3, r3, 0x3c6f
/* 802A9914 002A6854 38 03 F3 5F */ addi r0, r3, -3233
/* 802A9918 002A6858 90 0D 8D B4 */ stw r0, lbl_80451334-_SDA_BASE_(r13)
/* 802A991C 002A685C 54 00 BA 7E */ srwi r0, r0, 9
/* 802A9920 002A6860 64 00 3F 80 */ oris r0, r0, 0x3f80
/* 802A9924 002A6864 90 01 00 08 */ stw r0, 8(r1)
/* 802A9928 002A6868 C0 21 00 08 */ lfs f1, 8(r1)
/* 802A992C 002A686C C0 02 BE 2C */ lfs f0, lbl_8045582C-_SDA2_BASE_(r2)
/* 802A9930 002A6870 EC 21 00 28 */ fsubs f1, f1, f0
/* 802A9934 002A6874 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802A9938 002A6878 7C 08 03 A6 */ mtlr r0
/* 802A993C 002A687C 38 21 00 10 */ addi r1, r1, 0x10
/* 802A9940 002A6880 4E 80 00 20 */ blr

View File

@ -16,7 +16,6 @@ typedef enum DVDState {
DVD_STATE_CANCELED = 0xa, // lmao they skipped 9
DVD_STATE_RETRY = 0xb,
DVD_STATE_FATAL_ERROR = -1,
__DVD_STATE_ENUM_FORCE_S32 = INT32_MAX,
} DVDState;
}

View File

@ -587,8 +587,10 @@ void Z2SeqMgr_NS_setBattleLastHit(void);
// Z2Calc
extern "C" {
void linearTransform__6Z2CalcFfffffb(void);
void func_8036C740(void);
void func_8036C780(void);
// MSL_C.PPCEABI.bare.H::exp
double func_8036C740(double);
// MSL_C.PPCEABI.bare.H::pow
double func_8036C780(double, double);
void getRandom_0_1__6Z2CalcFv(void);
void getParamByExp__6Z2CalcFffffffQ26Z2Calc9CurveSign(void);
}
@ -5601,7 +5603,6 @@ void mDoMtx_stack_c_NS_transM(float, float, float);
void setCameraPolygonPos__11Z2StatusMgrFP3Vec(Vec*);
void setCameraGroupInfo__11Z2StatusMgrFUc(u8);
void Set__8cM3dGSphFRC4cXyzf(void);
void __pl__FsRC7cSAngle(void);
void __mi__FsRC7cSAngle(void);

View File

@ -93,8 +93,6 @@ typedef s32 OSHeapHandle;
typedef enum OSSoundMode {
SOUND_MODE_MONO = 0,
SOUND_MODE_STEREO = 1,
__SOUND_MODE_FORCE_ENUM_U32 = 0xffffffff,
} OSSoundMode;
typedef u16 OSThreadState;
@ -151,7 +149,7 @@ BOOL OSJamMessage(OSMessageQueue* queue, OSMessage message, int flags);
s32 OSGetConsoleType(void);
s32 OSGetResetCode(void);
OSSoundMode OSGetSoundMode(void);
u32 OSGetSoundMode(void);
void OSSetSoundMode(OSSoundMode mode);
void OSReportInit(void);

View File

@ -12,8 +12,6 @@ typedef enum PADMask {
PAD_CHAN2_BIT = (1 << 29),
PAD_CHAN1_BIT = (1 << 30),
PAD_CHAN0_BIT = (1 << 31),
__PAD_MASK_FORCE_ENUM_U32 = 0xffffffff,
} PADMask;
typedef struct PADStatus {

View File

@ -167,16 +167,16 @@ extern u32 lbl_80455D0C;
extern u32 lbl_80455D18;
// func_802A96F4
extern u32 lbl_80455828;
extern float lbl_8045582C;
// Z2AudioLib::@380, 0.0
extern f32 lbl_80455828;
// Z2AudioLib::@381, 1.0
extern f32 lbl_8045582C;
// func_802A9814
extern u32 lbl_80455830;
extern u32 lbl_80455834;
// func_802A98D4
extern u32 lbl_80451330;
extern u32 lbl_80451334;
// Z2AudioLib::@396, 2.0
extern f32 lbl_80455830;
// Z2AudioLib::@397, -2.0
extern f32 lbl_80455834;
// Z2SoundLib SInstance
struct Z2SceneMgr;

View File

@ -1,8 +1,10 @@
#include "Z2AudioLib/Z2Calc/Z2calc.h"
#include "JSystem/JMath/random.h"
#include "Z2AudioLib/Z2Calc/Z2Calc.h"
// s_is_oRandom_initialized
extern s8 lbl_80451330;
// Z2AudioLib::oRandom$401
extern JMath::TRandom_fast_ lbl_80451334;
// 1 instruction off
#ifdef NONMATCHING
float Z2Calc::linearTransform(float param1, float param2, float param3, float param4, float param5,
bool param6) {
float temp;
@ -14,10 +16,10 @@ float Z2Calc::linearTransform(float param1, float param2, float param3, float pa
} else if (param4 < param5) {
if (temp > param5) {
return param5;
} else if (temp >= param4) { // something wrong here idk
return temp;
} else {
} else if (temp < param4) {
return param4;
} else {
return temp;
}
} else if (temp > param4) {
return param4;
@ -27,27 +29,52 @@ float Z2Calc::linearTransform(float param1, float param2, float param3, float pa
return temp;
}
}
#else
asm float Z2Calc::linearTransform(float param1, float param2, float param3, float param4,
float param5, bool param6) {
nofralloc
#include "Z2AudioLib/Z2Calc/asm/func_802A968C.s"
}
#endif
asm float Z2Calc::getParamByExp(float, float, float, float, float, float, Z2Calc::CurveSign) {
nofralloc
#include "Z2AudioLib/Z2Calc/asm/func_802A96F4.s"
float Z2Calc::getParamByExp(float f1, float f2, float f3, float f4, float f5, float f6,
Z2Calc::CurveSign sign) {
float out;
if (sign == Z2Calc::CURVE_SIGN_1) {
float tmp =
func_8036C740(Z2Calc::linearTransform(f1, f2, f3, /* 0.0 */ lbl_80455828, f4, true));
out = Z2Calc::linearTransform(tmp, /* 1.0 */ lbl_8045582C, func_8036C740(f4), f5, f6, true);
} else if (sign == Z2Calc::CURVE_SIGN_0) {
float tmp =
func_8036C740(Z2Calc::linearTransform(f1, f2, f3, f4, /* 0.0 */ lbl_80455828, true));
out = Z2Calc::linearTransform(tmp, func_8036C740(f4), /* 1.0 */ lbl_8045582C, f5, f6, true);
} else {
out = Z2Calc::linearTransform(f1, f2, f3, f5, f6, false);
}
if (out > f6) {
return f6;
}
if (out < f5) {
return f5;
}
return out;
}
asm float Z2Calc::getRandom(float, float, float) {
nofralloc
#include "Z2AudioLib/Z2Calc/asm/func_802A9814.s"
float Z2Calc::getRandom(float f1, float f2, float f3) {
float tmp = /* 2.0 */ lbl_80455830 * f3;
float tmp2 = (/* 1.0 */ lbl_8045582C - f3) * /* -2.0 */ lbl_80455834;
f1 *= Z2Calc::getRandom_0_1() < f3 ? tmp : tmp2;
float tmp3 = func_8036C780(Z2Calc::getRandom_0_1(), f2);
return tmp3 * f1;
}
asm float Z2Calc::getRandom_0_1(void) {
nofralloc
#include "Z2AudioLib/Z2Calc/asm/func_802A98D4.s"
float Z2Calc::getRandom_0_1(void) {
// this is really just
// static JMath::TRandom_fast_ lbl_80451334(0);
if (!lbl_80451330) {
__ct__Q25JMath13TRandom_fast_FUl(&lbl_80451334, 0);
lbl_80451330 = true;
}
// this is really just lbl_80451334.get_ufloat_1()
union {
f32 f;
u32 s;
} out;
out.s = (lbl_80451334.get() >> 9) | 0x3f800000;
return out.f - lbl_8045582C;
}
void Z2Calc::FNoise1f::setParam(float param1, float param2, float param3) {
@ -102,4 +129,4 @@ float Z2Calc::FNoise1f::calcNoise1f(void) {
this->unk4 = temp2;
return this->unk0;
}
}

View File

@ -919,7 +919,7 @@ asm void dSv_player_info_c::init(void) {
#endif
void dSv_player_config_c::init(void) {
OSSoundMode os_mSoundMode;
u32 os_mSoundMode;
this->unk0 = 1;
os_mSoundMode = OSGetSoundMode();