summaryrefslogtreecommitdiff
path: root/src/code/code_800D2E30.c
diff options
context:
space:
mode:
authorSynray <31429825+Synray@users.noreply.github.com>2020-04-18 19:56:53 -0700
committerGitHub <noreply@github.com>2020-04-18 22:56:53 -0400
commiteefbe9afe1891ea27eb39315a3c87e87abef0828 (patch)
tree754338c5f5fea1687d4bdb0b9b6025e3311d7b95 /src/code/code_800D2E30.c
parent21750d5aee057f5352d945b7cad3c9394efe25b7 (diff)
Decompile code_800D2E30 and use struct in code_800A9F30 (#80)
* Match func_800AA000 * Match z_camera/func_800437F0 * Decompile code_800D2E30, use struct in 800A9F30 * Format * Remove 'U' from literals * Remove bss, cleanup z_camera * Review changes, rename temp * Move externs to variables.h
Diffstat (limited to 'src/code/code_800D2E30.c')
-rw-r--r--src/code/code_800D2E30.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/code/code_800D2E30.c b/src/code/code_800D2E30.c
new file mode 100644
index 000000000..e7e67f0a0
--- /dev/null
+++ b/src/code/code_800D2E30.c
@@ -0,0 +1,124 @@
+#include <ultra64.h>
+#include <global.h>
+
+void func_800D2E30(UnkRumbleStruct* arg0) {
+ s32 i;
+ s32 unk_a3;
+ s32 index = -1;
+ UnkRumbleStruct* new_var;
+
+ for (i = 0; i < 4; i++) {
+ arg0->rumbleEnable[i] = 0;
+ }
+
+ if (arg0->unk_105 == 0) {
+ new_var = arg0;
+ if (D_8012DBB0 != 0) {
+ for (i = 0; i < 4; i++) {
+ gPadMgr.pakType[i] = 0;
+ }
+ }
+ D_8012DBB0 = new_var->unk_105;
+ return;
+ }
+ D_8012DBB0 = arg0->unk_105;
+
+ if (arg0->unk_104 == 2) {
+ for (i = 0; i < 4; ++i) {
+ gPadMgr.pakType[i] = 0;
+ }
+
+ for (i = 0; i < 0x40; i++) {
+ arg0->unk_C4[i] = 0;
+ arg0->unk_84[i] = 0;
+ arg0->unk_44[i] = 0;
+ arg0->unk_04[i] = 0;
+ }
+ arg0->unk_106 = arg0->unk_108 = arg0->unk_10A = arg0->unk_10B = arg0->unk_10C = arg0->unk_10D = 0;
+ arg0->unk_104 = 1;
+ }
+ if (arg0->unk_104 != 0) {
+ for (i = 0; i < 0x40; i++) {
+
+ if (arg0->unk_04[i] != 0) {
+ if (arg0->unk_44[i] > 0) {
+ arg0->unk_44[i]--;
+ } else {
+ unk_a3 = arg0->unk_04[i] - arg0->unk_84[i];
+ if (unk_a3 > 0) {
+ arg0->unk_04[i] = unk_a3;
+ } else {
+ arg0->unk_04[i] = 0;
+ }
+ }
+
+ unk_a3 = arg0->unk_C4[i] + arg0->unk_04[i];
+ arg0->unk_C4[i] = unk_a3;
+ if (index == -1) {
+ index = i;
+ arg0->rumbleEnable[0] = (unk_a3 >= 0x100);
+ } else {
+
+ if (arg0->unk_04[index] < arg0->unk_04[i]) {
+ index = i;
+ arg0->rumbleEnable[0] = (unk_a3 >= 0x100);
+ }
+ }
+ }
+ }
+ if (arg0->unk_10A != 0) {
+ if (arg0->unk_10B > 0) {
+ arg0->unk_10B--;
+ } else {
+ unk_a3 = arg0->unk_10A - arg0->unk_10C;
+ if (unk_a3 > 0) {
+ arg0->unk_10A = unk_a3;
+ } else {
+ arg0->unk_10A = 0;
+ }
+ }
+ unk_a3 = arg0->unk_10D + arg0->unk_10A;
+ arg0->unk_10D = unk_a3;
+ arg0->rumbleEnable[0] = (unk_a3 >= 0x100);
+ }
+ if (arg0->unk_10A != 0) {
+ unk_a3 = arg0->unk_10A;
+ } else {
+ if (index == -1) {
+ unk_a3 = 0;
+ } else {
+ unk_a3 = arg0->unk_04[index];
+ }
+ }
+ if (unk_a3 == 0) {
+ if ((++arg0->unk_108) >= 6) {
+ arg0->unk_106 = 0;
+ arg0->unk_108 = 5;
+ }
+ } else {
+ arg0->unk_108 = 0;
+ if ((++arg0->unk_106) >= 0x1C21) {
+ arg0->unk_104 = 0;
+ }
+ }
+ } else {
+ for (i = 0; i < 0x40; i++) {
+ arg0->unk_C4[i] = 0;
+ arg0->unk_84[i] = 0;
+ arg0->unk_44[i] = 0;
+ arg0->unk_04[i] = 0;
+ }
+
+ arg0->unk_106 = arg0->unk_108 = arg0->unk_10A = arg0->unk_10B = arg0->unk_10C = arg0->unk_10D = 0;
+ }
+}
+
+void func_800D3140(UnkRumbleStruct* arg0) {
+ bzero(arg0, sizeof(UnkRumbleStruct));
+ arg0->unk_104 = 2;
+ arg0->unk_105 = 1;
+}
+
+void func_800D3178(UnkRumbleStruct* arg0) {
+ bzero(arg0, sizeof(UnkRumbleStruct));
+}