More detail work

This commit is contained in:
robojumper
2024-05-04 22:01:55 +02:00
parent ee92f6bb83
commit 126d5bc7b3
6 changed files with 130 additions and 108 deletions
+2 -1
View File
@@ -336,7 +336,7 @@ egg/core/eggAssertHeap.cpp:
egg/core/eggDisposer.cpp:
.text start:0x80496830 end:0x80496904
.data start:0x8056EA30 end:0x8056EA40
.data start:0x8056EA30 end:0x8056EA3C
egg/core/eggThread.cpp:
.text start:0x80496910 end:0x80496DD8
@@ -392,6 +392,7 @@ egg/core/eggController.cpp:
.ctors start:0x804DB98C end:0x804DB990
.rodata start:0x804FBA20 end:0x804FBA30
.data start:0x8056EB90 end:0x8056EC88
.sbss start:0x805767A8 end:0x805767C0
.sdata2 start:0x8057F338 end:0x8057F360
.bss start:0x80673B40 end:0x80674C00
+13 -13
View File
@@ -26334,9 +26334,9 @@ createInstance__Q23EGG17CoreControllerMgrFv = .text:0x80499B80; // type:function
deleteInstance__Q23EGG17CoreControllerMgrFv = .text:0x80499BD0; // type:function size:0x10
getNthController__Q23EGG17CoreControllerMgrFi = .text:0x80499BE0; // type:function size:0x74
errRangeOver__Q23EGG32TBuffer<PQ23EGG14CoreController>Fv = .text:0x80499C60; // type:function size:0x4
alloc__Q23EGG27@unnamed@eggController_cpp@FUl = .text:0x80499C70; // type:function size:0x18
free__Q23EGG27@unnamed@eggController_cpp@FPv = .text:0x80499C90; // type:function size:0x38
connectCallback__Q23EGG17CoreControllerMgrFll = .text:0x80499CD0; // type:function size:0x3C
allocThunk__Q23EGG17CoreControllerMgrFUl = .text:0x80499C70; // type:function size:0x18
deleteThunk__Q23EGG17CoreControllerMgrFPv = .text:0x80499C90; // type:function size:0x38
connectCallback__Q23EGG17CoreControllerMgrFii = .text:0x80499CD0; // type:function size:0x3C
__ct__Q23EGG17CoreControllerMgrFv = .text:0x80499D10; // type:function size:0x320
__dt__Q23EGG32TBuffer<PQ23EGG14CoreController>Fv = .text:0x8049A030; // type:function size:0x78
__dt__Q23EGG29TBuffer<Q23EGG12eCoreDevType>Fv = .text:0x8049A0B0; // type:function size:0x78
@@ -37114,10 +37114,10 @@ lbl_8056EB90 = .data:0x8056EB90; // type:object size:0x18
__vt__Q23EGG19ControllerRumbleMgr = .data:0x8056EBA8; // type:object size:0xC
__vt__Q23EGG20ControllerRumbleUnit = .data:0x8056EBB4; // type:object size:0xC
__vt__Q23EGG14NullController = .data:0x8056EBC0; // type:object size:0x38
lbl_8056EBF8 = .data:0x8056EBF8; // type:object size:0x10
lbl_8056EC08 = .data:0x8056EC08; // type:object size:0x1C
lbl_8056EC24 = .data:0x8056EC24; // type:object size:0x1C
lbl_8056EC40 = .data:0x8056EC40; // type:object size:0x10
__vt__Q23EGG17CoreControllerMgr = .data:0x8056EBF8; // type:object size:0x10
__vt__Q23EGG29TBuffer<Q23EGG12eCoreDevType> = .data:0x8056EC08; // type:object size:0x1C
__vt__Q23EGG32TBuffer<PQ23EGG14CoreController> = .data:0x8056EC24; // type:object size:0x1C
__vt__Q33EGG17CoreControllerMgr11T__Disposer = .data:0x8056EC40; // type:object size:0x10
__vt__Q23EGG14CoreController = .data:0x8056EC50; // type:object size:0x38
lbl_8056EC88 = .data:0x8056EC88; // type:object size:0x78
lbl_8056ED00 = .data:0x8056ED00; // type:object size:0x30
@@ -40897,12 +40897,12 @@ sTickPeriod__Q23EGG7Display = .sbss:0x80576788; // type:object size:0x4 data:4by
spSelector = .sbss:0x80576790; // type:object size:0x4 data:4byte
lbl_80576798 = .sbss:0x80576798; // type:object size:0x4 data:4byte
lbl_8057679C = .sbss:0x8057679C; // type:object size:0xC
lbl_805767A8 = .sbss:0x805767A8; // type:object size:0x4 data:4byte
lbl_805767AC = .sbss:0x805767AC; // type:object size:0x4 data:4byte
lbl_805767B0 = .sbss:0x805767B0; // type:object size:0x4 data:4byte
lbl_805767B4 = .sbss:0x805767B4; // type:object size:0x4 data:4byte
lbl_805767B8 = .sbss:0x805767B8; // type:object size:0x1 data:byte
lbl_805767BC = .sbss:0x805767BC; // type:object size:0x4 data:4byte
sInstance__Q23EGG17CoreControllerMgr = .sbss:0x805767A8; // type:object size:0x4 data:4byte
sStaticDisposer__Q33EGG17CoreControllerMgr11T__Disposer = .sbss:0x805767AC; // type:object size:0x4 data:4byte
CoreControllerFactory__3EGG = .sbss:0x805767B0; // type:object size:0x4 data:4byte
sConnectCallback__Q23EGG17CoreControllerMgr = .sbss:0x805767B4; // type:object size:0x4 data:4byte
sUseBuiltinWpadAllocator__Q23EGG17CoreControllerMgr = .sbss:0x805767B8; // type:object size:0x1 data:byte
TODO_Allocator__3EGG = .sbss:0x805767BC; // type:object size:0x4 data:4byte
zero__Q23EGG8Vector2f = .sbss:0x805767C0; // type:object size:0x8 data:float
ex__Q23EGG8Vector2f = .sbss:0x805767C8; // type:object size:0x8 data:float
ey__Q23EGG8Vector2f = .sbss:0x805767D0; // type:object size:0x8 data:float
+1 -2
View File
@@ -358,11 +358,10 @@ config.libs = [
Object(Matching, "egg/core/eggExpHeap.cpp"),
Object(NonMatching, "egg/core/eggFrmHeap.cpp"),
Object(NonMatching, "egg/core/eggAssertHeap.cpp"),
Object(NonMatching, "egg/core/eggDisposer.cpp"),
Object(Matching, "egg/core/eggDisposer.cpp"),
Object(Matching, "egg/core/eggThread.cpp"),
Object(NonMatching, "egg/core/eggUnk.cpp"),
Object(NonMatching, "egg/core/eggSystem.cpp"),
Object(Matching, "egg/core/eggDisposer.cpp"),
Object(Matching, "egg/core/eggDisplay.cpp"),
Object(Matching, "egg/core/eggColorFader.cpp"),
Object(Matching, "egg/core/eggAsyncDisplay.cpp"),
+18 -14
View File
@@ -17,6 +17,8 @@ class ControllerRumbleMgr;
// To Be Filled out
enum eCoreDevType {};
typedef void (*ConnectCallback)(int args[]);
class CoreStatus {
public:
/* 0x00 */ u8 field_0x00[0x0C];
@@ -40,9 +42,9 @@ class CoreController {
public:
// vtable 0x000 | 8056ec50
/* vt 0x08 | 80064920 */ virtual void setPosParam(f32, f32);
/* vt 0x0C | 8049a940 */ virtual void setHoriParam(f32, f32);
/* vt 0x10 | 8049a930 */ virtual void setDistParam(f32, f32);
/* vt 0x14 | 8049a920 */ virtual void setAccParam(f32, f32);
/* vt 0x0C | 8049a940 */ virtual void setHoriParam(f32, f32) {}
/* vt 0x10 | 8049a930 */ virtual void setDistParam(f32, f32) {}
/* vt 0x14 | 8049a920 */ virtual void setAccParam(f32, f32) {}
/* vt 0x18 | 80059820 */ virtual bool isPressed(u32 mask);
/* vt 0x1C | 80059a60 */ virtual bool isAnyPressed(u32 mask);
/* vt 0x20 | 80014e30 */ virtual bool isTriggered(u32 mask);
@@ -99,7 +101,6 @@ public:
class NullController : public CoreController {
public:
NullController() {
// This could also be in CoreController
unk[92] = 0xfe;
}
// idk this has NO effect on anything
@@ -110,7 +111,7 @@ class ControllerRumbleUnit {
public:
// 0x00 vtable | 8056ebb4
inline ControllerRumbleUnit() { init(); }
/* vt 0x08 | 8049a8e0 */ virtual ~ControllerRumbleUnit();
/* vt 0x08 | 8049a8e0 */ virtual ~ControllerRumbleUnit() {}
public:
/* 0x04 */ const char *mPattern;
@@ -130,7 +131,7 @@ public:
class ControllerRumbleMgr {
public:
// 0x00 vtable | 8056eba8
/* vt 0x08 | 8049a8a0 */ virtual ~ControllerRumbleMgr();
/* vt 0x08 | 8049a8a0 */ virtual ~ControllerRumbleMgr() {}
public:
/* 0x04 */ nw4r::ut::List mActiveUnitList;
@@ -147,17 +148,16 @@ public:
};
class CoreControllerMgr {
public:
struct T__Disposer {
Disposer mDisposer;
/* vt 0x08 | 80499b00 */ virtual ~T__Disposer() {}
struct T__Disposer : Disposer {
/* vt 0x08 | 80499b00 */ virtual ~T__Disposer();
/* 805767ac */ static T__Disposer *sStaticDisposer;
};
// Disposer Vtable: 8056ec40
/* 0x0000 */ T__Disposer mDisposer; // for the static T__Disposer
public:
// 0x0010 vtable | 8056ebf8
/* vt 0x08 | 8049a130 */ void beginFrame();
/* vt 0x0C | 8049a1e0 */ void endFrame();
/* vt 0x08 | 8049a130 */ virtual void beginFrame();
/* vt 0x0C | 8049a1e0 */ virtual void endFrame();
public:
/* 0x0014 */ TBuffer<CoreController *> mControllers;
@@ -169,14 +169,18 @@ public:
/* 80499b80 */ static CoreControllerMgr *createInstance();
/* 80499bd0 */ static void deleteInstance();
/* 80499be0 */ CoreController *getNthController(s32);
/* 80499cd0 */ void connectCallback(s32, s32);
static void *allocThunk(size_t size);
static void deleteThunk(void *ptr);
/* 80499cd0 */ static void connectCallback(s32, s32);
/* 80499d10 */ CoreControllerMgr();
public:
/* 805767a8 */ static CoreControllerMgr *sInstance;
/* 805767b0 */ static CoreController *(*sCoreControllerFactory)();
/* 805767b4 */ static void (*sConnectCallback)(s32, s32);
/* 805767b8 */ static bool sUnk;
/* 805767b4 */ static ConnectCallback sConnectCallback;
/* 805767b8 */ static bool sUseBuiltinWpadAllocator;
// /* 805767bc */ static sAllocator; // defined in cpp file
// Other Stuff thats autogen (buffers/sinit/etc)
+4 -2
View File
@@ -11,8 +11,10 @@ class TBuffer {
public:
// vtable 0x00
/* vt 0x08 */ virtual ~TBuffer() {
delete[] mBuffer;
mBuffer = nullptr;
if (mBuffer != nullptr) {
delete[] mBuffer;
mBuffer = nullptr;
}
}
/* vt 0x0C */ virtual void allocate(int n, int) {
mSize = n;
+92 -76
View File
@@ -1,21 +1,29 @@
#include "egg/core/eggController.h"
#include "MSL_C/string.h"
#include "rvl/VI.h"
extern EGG::CoreControllerMgr *lbl_805767A8;
extern EGG::CoreControllerMgr *lbl_805767AC;
const char *str = "EGG::CoreControllerMgr"; // TODO
EGG::NullController null_controller;
namespace EGG
{
// TODO vtable order in this TU is still messed up
// TODO NullController implementation
void CoreStatus::init() {
namespace EGG {
CoreControllerMgr *CoreControllerMgr::sInstance;
CoreControllerMgr::T__Disposer *CoreControllerMgr::T__Disposer::sStaticDisposer;
void *CoreControllerFactory; // TODO
ConnectCallback CoreControllerMgr::sConnectCallback;
// This controls whether EggController registers an allocator within the WPAD driver
bool CoreControllerMgr::sUseBuiltinWpadAllocator;
void *TODO_Allocator; // TODO
/* 0x80498F90 */ void CoreStatus::init() {
memset(this, 0, sizeof(CoreStatus));
}
u32 CoreStatus::getFSStickButton() const {
/* 0x80498FA0 */ u32 CoreStatus::getFSStickButton() const {
f32 button = this->fsStickButton;
u32 result = 0;
// TODO what are these flags and why is this code so weird?
@@ -44,7 +52,7 @@ u32 CoreStatus::getFSStickButton() const {
return result;
}
CoreController::CoreController(): mDpdPos(), mAccel(), mAccelFlags(nullptr) {
/* 0x80499050 */ CoreController::CoreController() : mDpdPos(), mAccel(), mAccelFlags(nullptr) {
this->mRumbleMgr = nullptr;
this->mButtonHeld = 0;
this->mButtonTriggered = 0;
@@ -53,7 +61,7 @@ CoreController::CoreController(): mDpdPos(), mAccel(), mAccelFlags(nullptr) {
this->mFlag.makeAllZero();
}
void CoreController::sceneReset() {
/* 0x804990B0 */ void CoreController::sceneReset() {
this->mAccel.set(0.0, 0.0, 0.0);
this->mDpdPos.x = 0.0;
this->mDpdPos.y = 0.0;
@@ -75,117 +83,147 @@ void CoreController::sceneReset() {
this->stopRumbleMgr();
}
Vector2f CoreController::getDpdRawPos() const {
/* 0x80499170 */ Vector2f CoreController::getDpdRawPos() const {
return Vector2f(this->coreStatus[0].dpdRawX, this->coreStatus[0].dpdRawY);
}
s32 CoreController::getDpdDistance() const {
/* 0x80499190 */ s32 CoreController::getDpdDistance() const {
return this->coreStatus[0].dpdDistance;
}
// TODO
extern "C" void fn_803DB1E0(s32 channel, bool arg);
void CoreController::startMotor() {
/* 0x804991A0 */ void CoreController::startMotor() {
fn_803DB1E0(mChannelID, true);
}
void CoreController::stopMotor() {
/* 0x804991B0 */ void CoreController::stopMotor() {
fn_803DB1E0(mChannelID, false);
}
void CoreController::createRumbleMgr(u8 numUnits) {
/* 0x804991C0 */ void CoreController::createRumbleMgr(u8 numUnits) {
this->mRumbleMgr = new ControllerRumbleMgr();
this->mRumbleMgr->createUnit(numUnits, this);
}
void CoreController::startPatternRumble(const char *pattern, int duration, bool bGrabActive) {
/* 0x80499220 */ void CoreController::startPatternRumble(const char *pattern, int duration, bool bGrabActive) {
if (this->mRumbleMgr) {
this->mRumbleMgr->startPattern(pattern, duration, bGrabActive);
}
}
void CoreController::stopRumbleMgr() {
/* 0x80499240 */ void CoreController::stopRumbleMgr() {
if (this->mRumbleMgr) {
this->mRumbleMgr->stop();
}
}
CoreStatus *CoreController::getCoreStatus(s32 idx) {
/* 0x80499260 */ CoreStatus *CoreController::getCoreStatus(s32 idx) {
return &this->coreStatus[idx];
}
void CoreController::calc_posture_matrix(Matrix34f &mat, bool someBool) {
/* 0x80499270 */ void CoreController::calc_posture_matrix(Matrix34f &mat, bool someBool) {
if (!someBool || this->mAccelFlags.onBit(7)) {
Vector3f vec = Vector3f(-mat(2, 3), -mat(2, 2), -mat(2, 1));
Vector3f vec3 = vec;
vec.normalise();
// TODO
// TODO lots of inlined math
}
}
void CoreController::beginFrame(void *padStatus) {
/* 0x80499660 */ void CoreController::beginFrame(void *padStatus) {}
}
void CoreController::endFrame() {
/* 0x80499A60 */ void CoreController::endFrame() {
this->mAccel(0) = this->coreStatus[0].accel[0];
this->mAccel(1) = this->coreStatus[0].accel[1];
this->mAccel(2) = this->coreStatus[0].accel[2];
this->mDpdPos = this->getDpdRawPos();
}
f32 CoreController::getFreeStickX() const {
/* 0x80499AC0 */ f32 CoreController::getFreeStickX() const {
if (this->coreStatus[0].field_0x00[0x5C] == 0) {
return 0.0;
}
return ((f32*)(&this->coreStatus[0].field_0x00))[0x18];
return ((f32 *)(&this->coreStatus[0].field_0x00))[0x18];
}
f32 CoreController::getFreeStickY() const {
/* 0x80499AE0 */ f32 CoreController::getFreeStickY() const {
if (this->coreStatus[0].field_0x00[0x5C] == 0) {
return 0.0;
}
return ((f32*)(&this->coreStatus[0].field_0x00))[0x19];
return ((f32 *)(&this->coreStatus[0].field_0x00))[0x19];
}
CoreControllerMgr *CoreControllerMgr::createInstance() {
if (lbl_805767A8 == nullptr) {
/* 0x80499B00 */ CoreControllerMgr::T__Disposer::~T__Disposer() {
if (this == CoreControllerMgr::T__Disposer::sStaticDisposer) {
deleteInstance();
}
}
/* 0x80499B80 */ CoreControllerMgr *CoreControllerMgr::createInstance() {
if (CoreControllerMgr::sInstance == nullptr) {
CoreControllerMgr *mgr = new CoreControllerMgr();
lbl_805767A8 = mgr;
CoreControllerMgr::sInstance = mgr;
lbl_805767AC = mgr;
}
return lbl_805767A8;
return CoreControllerMgr::sInstance;
}
void CoreControllerMgr::deleteInstance() {
lbl_805767A8 = nullptr;
/* 0x80499BD0 */ void CoreControllerMgr::deleteInstance() {
CoreControllerMgr::sInstance = nullptr;
lbl_805767AC = nullptr;
}
EGG::CoreController *CoreControllerMgr::getNthController(s32 n) {
/* 0x80499BE0 */ EGG::CoreController *CoreControllerMgr::getNthController(s32 n) {
return this->mControllers(n);
}
void CoreControllerMgr::connectCallback(int a1, int a2) {
/* 0x80499C70 */ void *CoreControllerMgr::allocThunk(size_t size) {
return nullptr; // TODO
}
/* 0x80499C90 */ void CoreControllerMgr::deleteThunk(void *ptr) {
// TODO
}
CoreControllerMgr::CoreControllerMgr() {
/* 0x80499CD0 */ void CoreControllerMgr::connectCallback(int a1, int a2) {
int args[] = {a1, a2};
if (sConnectCallback != nullptr) {
(sConnectCallback)(args);
}
}
void CoreControllerMgr::beginFrame() {
/* 0x80499D10 */ CoreControllerMgr::CoreControllerMgr() {
const int idxes[] = {0, 1, 2, 3};
if (sUseBuiltinWpadAllocator == false) {
// TODO create heap, register allocator thunks
}
// init KPAD
beginFrame();
endFrame();
VIWaitForRetrace();
// TODO there's likely an allocate call here but it shifts the
// inline buffer methods up in the TU :(
// mControllers.allocate(4, 0);
// TODO moar
}
/* 0x8049A130 */ void CoreControllerMgr::beginFrame() {
for (int i = 0; i < mControllers.getSize(); ++i) {
mControllers(i)->beginFrame(NULL);
}
}
void CoreControllerMgr::endFrame() {
/* 0x8049A1E0 */ void CoreControllerMgr::endFrame() {
for (int i = 0; i < mControllers.mSize; i++) {
mControllers(i)->endFrame();
// TODO WPADprobe
// Update device type after probe?
}
}
void ControllerRumbleUnit::init() {
/* 0x8049A3B0 */ void ControllerRumbleUnit::init() {
this->mPattern = nullptr;
this->mPatternPos = nullptr;
this->mTimer = 0;
@@ -194,7 +232,7 @@ void ControllerRumbleUnit::init() {
this->mFlag.makeAllZero();
}
void ControllerRumbleUnit::startPattern(const char *pattern, int duration) {
/* 0x8049A3E0 */ void ControllerRumbleUnit::startPattern(const char *pattern, int duration) {
this->mPattern = pattern;
this->mPatternPos = pattern;
@@ -211,7 +249,7 @@ void ControllerRumbleUnit::startPattern(const char *pattern, int duration) {
this->mFlag.value = ((this->mFlag.value | 0x01) & 0xfd) | 0x8;
}
f32 ControllerRumbleUnit::calc() {
/* 0x8049A440 */ f32 ControllerRumbleUnit::calc() {
f32 result = 0.0f;
if (this->mFlag.onBit(3)) {
if (this->mFlag.onBit(0)) {
@@ -259,14 +297,14 @@ f32 ControllerRumbleUnit::calc() {
}
}
ControllerRumbleMgr::ControllerRumbleMgr() {
/* 0x8049A530 */ ControllerRumbleMgr::ControllerRumbleMgr() {
this->mController = nullptr;
// TODO offsetof macro
List_Init(&this->mActiveUnitList, 0x1c);
List_Init(&this->mInactiveUnitList, 0x1c);
}
void ControllerRumbleMgr::createUnit(u8 numUnits, CoreController *ctrl) {
/* 0x8049A590 */ void ControllerRumbleMgr::createUnit(u8 numUnits, CoreController *ctrl) {
for (u8 created = 0; created < numUnits; created++) {
ControllerRumbleUnit *unit = new ControllerRumbleUnit();
List_Append(&this->mInactiveUnitList, unit);
@@ -274,22 +312,22 @@ void ControllerRumbleMgr::createUnit(u8 numUnits, CoreController *ctrl) {
this->mController = ctrl;
}
void ControllerRumbleMgr::stop() {
/* 0x8049A620 */ void ControllerRumbleMgr::stop() {
this->mController->stopMotor();
while (List_GetSize(&this->mActiveUnitList) != 0) {
ControllerRumbleUnit *unit = static_cast<ControllerRumbleUnit*>(List_GetNext(&this->mActiveUnitList, nullptr));
ControllerRumbleUnit *unit = static_cast<ControllerRumbleUnit *>(List_GetNext(&this->mActiveUnitList, nullptr));
List_Remove(&this->mActiveUnitList, unit);
List_Append(&this->mInactiveUnitList, unit);
}
}
void ControllerRumbleMgr::calc() {
/* 0x8049A690 */ void ControllerRumbleMgr::calc() {
if (List_GetSize(&this->mActiveUnitList) != 0) {
void *object = List_GetFirst(&this->mActiveUnitList);
f32 acc = 0.0f;
while (object != nullptr) {
ControllerRumbleUnit *unit = static_cast<ControllerRumbleUnit*>(object);
ControllerRumbleUnit *unit = static_cast<ControllerRumbleUnit *>(object);
f32 x = unit->calc();
void *nextObject = List_GetNext(&this->mActiveUnitList, object);
if (x < 0.0f) {
@@ -307,48 +345,26 @@ void ControllerRumbleMgr::calc() {
this->mController->stopMotor();
}
}
}
void ControllerRumbleMgr::startPattern(const char *pattern, int duration, bool bGrabActive) {
/* 0x8049A7A0 */ void ControllerRumbleMgr::startPattern(const char *pattern, int duration, bool bGrabActive) {
EGG::ControllerRumbleUnit *unit = getUnitFromList(bGrabActive);
if (unit != nullptr) {
unit->startPattern(pattern, duration);
}
}
ControllerRumbleUnit *ControllerRumbleMgr::getUnitFromList(bool bGrabActive) {
/* 0x8049A7F0 */ ControllerRumbleUnit *ControllerRumbleMgr::getUnitFromList(bool bGrabActive) {
void *first = List_GetFirst(&this->mInactiveUnitList);
if (first != nullptr) {
List_Remove(&this->mInactiveUnitList, first);
List_Append(&this->mActiveUnitList, first);
} else if (bGrabActive && (first = List_GetFirst(&this->mActiveUnitList), first != nullptr)) {
} else if (bGrabActive && (first = List_GetFirst(&this->mActiveUnitList), first != nullptr)) {
List_Remove(&this->mActiveUnitList, first);
List_Append(&this->mActiveUnitList, first);
}
return static_cast<ControllerRumbleUnit*>(first);
return static_cast<ControllerRumbleUnit *>(first);
}
ControllerRumbleMgr::~ControllerRumbleMgr() {
}
ControllerRumbleUnit::~ControllerRumbleUnit() {
}
void CoreController::setAccParam(f32 param1, f32 param2) {
}
void CoreController::setDistParam(f32 param1, f32 param2) {
}
void CoreController::setHoriParam(f32 param1, f32 param2) {
}
} // namespace EGG