Files
dusklight/src/d/d_lib.cpp
T
jdflyer 73c4048b27 d_lib split and partially matched (#30)
* d_lib split and partially matched

* clang-format

* modify some extern labels

* clang-format

Co-authored-by: Pheenoh <pheenoh@gmail.com>
2020-12-29 17:39:36 -05:00

192 lines
4.8 KiB
C++

#include "d/d_lib/d_lib.h"
#include "d/d_event/d_event/d_event.h"
#include "os/OS.h"
STControl::STControl(s16 param_1, s16 param_2, s16 param_3, s16 param_4, f32 param_5, f32 param_6,
s16 param_7, s16 param_8) {
__vt = (STControl_vtable*)0x803a7260;
setWaitParm(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8);
init();
}
void STControl::setWaitParm(s16 param_1, s16 param_2, s16 param_3, s16 param_4, f32 param_5,
f32 param_6, s16 param_7, s16 param_8) {
field_0x12 = param_1;
field_0x14 = param_2;
field_0x16 = param_3;
field_0x1c = param_4;
field_0x4 = param_5;
field_0x8 = param_6;
field_0x24 = param_7;
field_0x26 = param_8;
}
STControl* STControl::init(void) {
field_0xe = 0;
field_0x10 = 0;
field_0xd = 0;
field_0xc = 0;
field_0x22 = 0;
field_0x18 = field_0x12;
field_0x1a = field_0x12;
field_0x1e = field_0x1c;
field_0x20 = field_0x1c;
field_0x28 = 0;
field_0x2a = field_0x28;
field_0x2c = field_0x28;
return this;
}
void STControl::Xinit(void) {
field_0xe = 0;
field_0xc = field_0xc & 0xfc;
field_0x18 = field_0x12;
field_0x1e = field_0x1c;
field_0x2a = field_0x28;
}
#ifdef NONMATCHING
void STControl::Yinit(void) { // produces andi. instead of rlwinm
field_0x10 = 0;
field_0xc = field_0xc & 0xf3;
field_0x1a = field_0x12;
field_0x20 = field_0x1c;
field_0x2c = field_0x28;
}
#else
asm void STControl::Yinit(void) {
nofralloc
#include "d/d_lib/asm/STControl_NS_Yinit.s"
}
#endif
double STControl::getValueStick() {
return lbl_803DD2E8.stickValue;
}
s16 STControl::getAngleStick() {
return lbl_803DD2E8.stickAngle;
}
double CSTControl::getValueStick() {
return lbl_803DD2E8.CstickValue;
}
s16 CSTControl::getAngleStick() {
return lbl_803DD2E8.CstickAngle;
}
asm u32 STControl::checkTrigger() {
nofralloc
#include "d/d_lib/asm/STControl_NS_checkTrigger.s"
}
bool STControl::checkLeftTrigger() {
if ((field_0xe == 0) && ((field_0xc & 1) != 0)) {
field_0xe = field_0x18 + field_0x2a;
field_0x2a = 0;
if ((int)field_0x1e == 0) {
field_0x18 = field_0x18 - field_0x16;
if (field_0x18 < field_0x14) {
field_0x18 = field_0x14;
}
} else {
field_0x1e = field_0x1e + -1;
}
return true;
}
return false;
}
bool STControl::checkRightTrigger() {
if ((field_0xe == 0) && ((field_0xc & 2) != 0)) {
field_0xe = field_0x18 + field_0x2a;
field_0x2a = 0;
if ((int)field_0x1e == 0) {
field_0x18 = field_0x18 - field_0x16;
if (field_0x18 < field_0x14) {
field_0x18 = field_0x14;
}
} else {
field_0x1e = field_0x1e + -1;
}
return true;
}
return false;
}
bool STControl::checkUpTrigger() {
if ((field_0x10 == 0) && ((field_0xc & 4) != 0)) {
field_0x10 = field_0x1a + field_0x2c;
field_0x2c = 0;
if ((int)field_0x20 == 0) {
field_0x1a = field_0x1a - field_0x16;
if (field_0x1a < field_0x14) {
field_0x1a = field_0x14;
}
} else {
field_0x20 = field_0x20 + -1;
}
return true;
}
return false;
}
bool STControl::checkDownTrigger() {
if ((field_0x10 == 0) && ((field_0xc & 8) != 0)) {
field_0x10 = field_0x1a + field_0x2c;
field_0x2c = 0;
if ((int)field_0x20 == 0) {
field_0x1a = field_0x1a - field_0x16;
if (field_0x1a < field_0x14) {
field_0x1a = field_0x14;
}
} else {
field_0x20 = field_0x20 + -1;
}
return true;
}
return false;
}
asm u32 dLib_getEventSwitchNo(int param_1) {
nofralloc
#include "d/d_lib/asm/dLib_getEventSwitchNo.s"
}
asm bool dLib_checkActorInRectangle(fopAc_ac_c* param_1, fopAc_ac_c* param_2, cXyz const* param_3,
cXyz const* param_4) {
nofralloc
#include "d/d_lib/asm/dLib_checkActorInRectangle.s"
}
asm u32 dLib_getExpandSizeFromAramArchive(JKRAramArchive* param_1, char const* param_2) {
nofralloc
#include "d/d_lib/asm/dLib_getExpandSizeFromAramArchive.s"
}
asm s64 dLib_time_c::getTime(void) {
nofralloc
#include "d/d_lib/asm/dLib_time_c_NS_getTime.s"
}
#ifdef NONMATCHING
void dLib_time_c::stopTime(void) { // way off
if (lbl_80450DE8 == 0) {
OSTime time = OSGetTime();
lbl_80450DE4 = time >> 0x20;
lbl_80450DE8 = 1;
lbl_80450DE0 = this;
}
}
#else
asm void dLib_time_c::stopTime(void) {
nofralloc
#include "d/d_lib/asm/dLib_time_c_NS_stopTime.s"
}
#endif
asm void dLib_time_c::startTime(void) {
nofralloc
#include "d/d_lib/asm/dLib_time_c_NS_startTime.s"
}