summaryrefslogtreecommitdiff
path: root/src/d/d_lib.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/d/d_lib.cpp')
-rw-r--r--src/d/d_lib.cpp193
1 files changed, 192 insertions, 1 deletions
diff --git a/src/d/d_lib.cpp b/src/d/d_lib.cpp
index 4bf93c8658..3cb22138e8 100644
--- a/src/d/d_lib.cpp
+++ b/src/d/d_lib.cpp
@@ -1 +1,192 @@
-// ok
+#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"
+} \ No newline at end of file