summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrozlette <uberpanzermensch@gmail.com>2019-12-18 01:31:47 -0600
committerrozlette <uberpanzermensch@gmail.com>2019-12-18 01:31:47 -0600
commit962a957166efdba439771cf3925905c5c58dd2bc (patch)
tree3fdf1ba0702fd6e06970db613af7b859dc25e964
parent82ad58e489e2b49064f1834462071433cc2da10f (diff)
Decompile code_0x800E8EA0.c
-rw-r--r--include/functions.h28
-rw-r--r--include/structs.h27
-rw-r--r--linker_scripts/code_script.txt2
-rw-r--r--src/code/code_0x800E8EA0.c110
-rw-r--r--src/code/code_0x800E8EA0.c.ignore44
-rw-r--r--src/code/z_lib.c4
-rw-r--r--tables/functions.py28
7 files changed, 141 insertions, 102 deletions
diff --git a/include/functions.h b/include/functions.h
index 42ff3f747..392fcd0f3 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -1518,15 +1518,15 @@ void func_800E8690(void); // func_800E8690
void func_800E86C0(void); // func_800E86C0
void func_800E86E0(void); // func_800E86E0
void func_800E8784(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); // func_800E8784
-void func_800E8EA0(void); // func_800E8EA0
-void func_800E8ED0(void); // func_800E8ED0
-void func_800E8EE0(void); // func_800E8EE0
-void func_800E8EEC(void); // func_800E8EEC
-void func_800E8EFC(void); // func_800E8EFC
-void func_800E8F08(void); // func_800E8F08
-void func_800E8FA4(void); // func_800E8FA4
-void func_800E9138(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_800E9138
-void func_800E9250(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); // func_800E9250
+void func_800E8EA0(GlobalContext* ctxt, Actor* actor, u16 param_3); // func_800E8EA0
+s32 nop_800E8ED0(UNK_TYPE4 param_1); // func_800E8ED0
+void nop_800E8EE0(UNK_TYPE4 param_1); // func_800E8EE0
+s32 nop_800E8EEC(UNK_TYPE4 param_1); // func_800E8EEC
+void nop_800E8EFC(UNK_TYPE4 param_1); // func_800E8EFC
+s32 func_800E8F08(Vector3s* param_1, Vector3s* param_2); // func_800E8F08
+s32 func_800E8FA4(Actor* actor, Vector3f* param_2, Vector3s* param_3, Vector3s* param_4); // func_800E8FA4
+s32 func_800E9138(GlobalContext* ctxt, Actor* actor, Vector3s* param_3, Vector3s* param_4, f32 param_5); // func_800E9138
+s32 func_800E9250(GlobalContext* ctxt, Actor* actor, Vector3s* param_3, Vector3s* param_4, Vector3f param_5); // func_800E9250
void func_800E9360(void); // func_800E9360
void static_context_init(void); // func_800E93E0
void func_800E9470(void); // func_800E9470
@@ -1834,8 +1834,8 @@ f32 Lib_DistanceXZVec3f(Vector3f* a, Vector3f* b); // func_800FF92C
f32 Lib_DistanceAndDifferenceXZVec3f(Vector3f* a, Vector3f* b, f32* xDiff, f32* zDiff); // func_800FF960
f32 Lib_PushAwayXZVec3f(Vector3f* start, Vector3f* pusher, f32 distanceToApproach); // func_800FF9A4
f32 Lib_DistanceYVec3f(Vector3f* a, Vector3f* b); // func_800FFA4C
-s32 Lib_YawVec3f(Vector3f* from, Vector3f* to); // func_800FFA60
-s32 Lib_PitchVec3f(Vector3f* from, Vector3f* to); // func_800FFA94
+s16 Lib_YawVec3f(Vector3f* from, Vector3f* to); // func_800FFA60
+s16 Lib_PitchVec3f(Vector3f* from, Vector3f* to); // func_800FFA94
void Lib_ApplyActorInitVars(Actor* actor, ActorInitVar* init); // func_800FFADC
void Lib_ApplyActorInitVarByte1(u8* actor, ActorInitVar* init); // func_800FFB54
void Lib_ApplyActorInitVarByte2(u8* actor, ActorInitVar* init); // func_800FFB70
@@ -2833,7 +2833,7 @@ void func_80150A84(void); // func_80150A84
void func_80150D08(GlobalContext* ctxt, unsigned int uParm2); // func_80150D08
void func_801514B0(void); // func_801514B0
void func_801518B0(GlobalContext* ctxt, u32 uParm2, UNK_TYPE4 uParm3); // func_801518B0
-void func_80151938(void); // func_80151938
+void func_80151938(GlobalContext* ctxt, u16 param_2); // func_80151938
void func_80151A68(void); // func_80151A68
void func_80151BB4(s32 iParm1, u32 uParm2); // func_80151BB4
void func_80151C9C(void); // func_80151C9C
@@ -3328,9 +3328,9 @@ void func_8017FAA8(void); // func_8017FAA8
void func_8017FB1C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); // func_8017FB1C
void func_8017FD44(void); // func_8017FD44
s16 atans_first_8th(f32 opposite, f32 adjacent); // func_8017FEB0
-s32 atans(f32 opposite, f32 adjacent); // func_8017FEE4
+s16 atans(f32 opposite, f32 adjacent); // func_8017FEE4
f32 atan(f32 opposite, f32 adjacent); // func_801800CC
-s32 atans_flip(f32 adjacent, f32 opposite); // func_80180100
+s16 atans_flip(f32 adjacent, f32 opposite); // func_80180100
void atan_flip(f32 adjacent, f32 opposite); // func_8018012C
void SysMatrix_StateAlloc(ContextCommon* ctxt); // func_80180160
void SysMatrix_StatePush(void); // func_8018019C
diff --git a/include/structs.h b/include/structs.h
index 1df7492c1..5632c54ae 100644
--- a/include/structs.h
+++ b/include/structs.h
@@ -706,33 +706,6 @@ typedef struct {
} s80083BC4;
typedef struct {
-/* 0x00 */ UNK_TYPE4 unk0;
-/* 0x04 */ UNK_TYPE4 unk4;
-/* 0x08 */ UNK_TYPE4 unk8;
-/* 0x0C */ UNK_TYPE1 padC[92];
-/* 0x68 */ f32 unk68;
-/* 0x6C */ f32 unk6C;
-/* 0x70 */ f32 unk70;
-/* 0x74 */ u16 unk74;
-/* 0x76 */ u16 unk76;
-/* 0x78 */ u16 unk78;
-/* 0x7A */ UNK_TYPE1 pad7A[2];
-/* 0x7C */ f32 unk7C;
-/* 0x80 */ f32 unk80;
-/* 0x84 */ f32 unk84;
-/* 0x88 */ f32 unk88;
-/* 0x8C */ f32 unk8C;
-/* 0x90 */ f32 unk90;
-/* 0x94 */ u16 unk94;
-/* 0x96 */ u16 unk96;
-/* 0x98 */ u16 unk98;
-/* 0x9A */ UNK_TYPE1 pad9A[2];
-/* 0x9C */ f32 unk9C;
-/* 0xA0 */ f32 unkA0;
-/* 0xA4 */ f32 unkA4;
-} s800CAAD0;
-
-typedef struct {
/* 0x00 */ UNK_TYPE1 pad0[32];
} s800E03A0;
diff --git a/linker_scripts/code_script.txt b/linker_scripts/code_script.txt
index 48992a308..77640d938 100644
--- a/linker_scripts/code_script.txt
+++ b/linker_scripts/code_script.txt
@@ -219,7 +219,7 @@ SECTIONS
build/src/code/code_0x800E03A0.o(.text)
. += 0x10; /* XXX pad with NOPs*/
build/asm/z_collision_check.o(.text)
- build/asm/code_0x800E8EA0.o(.text)
+ build/src/code/code_0x800E8EA0.o(.text)
build/asm/code_0x800E9360.o(.text)
build/asm/z_debug.o(.text)
build/asm/z_debug_display.o(.text)
diff --git a/src/code/code_0x800E8EA0.c b/src/code/code_0x800E8EA0.c
new file mode 100644
index 000000000..74ebbcb70
--- /dev/null
+++ b/src/code/code_0x800E8EA0.c
@@ -0,0 +1,110 @@
+#include <ultra64.h>
+#include <global.h>
+
+void func_800E8EA0(GlobalContext* ctxt, Actor* actor, u16 param_3) {
+ func_80151938(ctxt, param_3);
+ actor->textId = param_3;
+}
+
+s32 nop_800E8ED0(UNK_TYPE4 param_1) {
+ return 0;
+}
+
+void nop_800E8EE0(UNK_TYPE4 param_1) {}
+
+s32 nop_800E8EEC(UNK_TYPE4 param_1) {
+ return 0;
+}
+
+void nop_800E8EFC(UNK_TYPE4 param_1) {}
+
+s32 func_800E8F08(Vector3s* param_1, Vector3s* param_2) {
+ Lib_ScaleMaxMin_s(&param_1->y, 0, 6, 6200, 100);
+ Lib_ScaleMaxMin_s(&param_1->x, 0, 6, 6200, 100);
+ Lib_ScaleMaxMin_s(&param_2->y, 0, 6, 6200, 100);
+ Lib_ScaleMaxMin_s(&param_2->x, 0, 6, 6200, 100);
+ return 1;
+}
+
+s32 func_800E8FA4(Actor* actor, Vector3f* param_2, Vector3s* param_3, Vector3s* param_4) {
+ s16 targetPitch;
+ s16 targetYaw;
+ s16 yawDiffFromTarget;
+
+ targetPitch = Lib_PitchVec3f(&actor->unk3C.pos,param_2);
+ targetYaw = Lib_YawVec3f(&actor->unk3C.pos,param_2) - actor->unk24.rot.y;
+
+ Lib_ScaleMaxMin_s(&param_3->x, targetPitch, 6, 2000, 1);
+ param_3->x = (param_3->x < -6000)? -6000 : ((6000 < param_3->x)? 6000 : param_3->x);
+
+ yawDiffFromTarget = Lib_ScaleMaxMin_s(&param_3->y, targetYaw, 6, 2000, 1);
+ param_3->y = (param_3->y < -8000)? -8000 : ((8000 < param_3->y)? 8000 : param_3->y);
+
+ if (yawDiffFromTarget != 0) {
+ if ((param_3->y < 0? -param_3->y : param_3->y) < 8000) {
+ return 0;
+ }
+ }
+
+ Lib_ScaleMaxMin_s(&param_4->y, targetYaw - param_3->y, 4, 2000, 1);
+ param_4->y = (param_4->y < -12000)? -12000 : ((12000 < param_4->y)? 12000 : param_4->y);
+
+ return 1;
+}
+
+s32 func_800E9138(GlobalContext* ctxt, Actor* actor, Vector3s* param_3, Vector3s* param_4, f32 param_5) {
+ s16 sVar3;
+ Actor *player;
+ Vector3f local_14;
+
+ player = (ctxt->actorContext).actorTypeLists[2].head;
+ actor->unk3C.pos = actor->unk24.pos;
+ actor->unk3C.pos.y += param_5;
+
+ if (((ctxt->cutsceneContext).state == 0) && (D_801D0D50 == 0)) {
+ sVar3 = actor->unk92 - actor->postDrawParams.rotation.y;
+ // TODO is this shifting because of a missing cast?
+ if (0x42ff < (sVar3 < 0? ((-sVar3 << 0x10) >> 0x10) : ((sVar3 << 0x10) >> 0x10))) {
+ func_800E8F08(param_3,param_4);
+ return 0;
+ }
+ }
+
+ if (((ctxt->cutsceneContext).state != 0) || (D_801D0D50 != 0)) {
+ local_14 = ctxt->view.eye;
+ } else {
+ local_14 = player->unk3C.pos;
+ }
+
+ func_800E8FA4(actor,&local_14,param_3,param_4);
+
+ return 1;
+}
+s32 func_800E9250(GlobalContext* ctxt, Actor* actor, Vector3s* param_3, Vector3s* param_4, Vector3f param_5) {
+ s16 sVar3;
+ Actor *player;
+ Vector3f local_14;
+
+ player = (ctxt->actorContext).actorTypeLists[2].head;
+ actor->unk3C.pos = param_5;
+
+ if (((ctxt->cutsceneContext).state == 0) && (D_801D0D50 == 0)) {
+ sVar3 = actor->unk92 - actor->postDrawParams.rotation.y;
+ // TODO is this shifting because of a missing cast?
+ if (0x42ff < (sVar3 < 0? ((-sVar3 << 0x10) >> 0x10) : ((sVar3 << 0x10) >> 0x10))) {
+ func_800E8F08(param_3,param_4);
+ return 0;
+ }
+ }
+
+ if (((ctxt->cutsceneContext).state != 0) || (D_801D0D50 != 0)) {
+ local_14 = ctxt->view.eye;
+ } else {
+ local_14 = player->unk3C.pos;
+ }
+
+ func_800E8FA4(actor,&local_14,param_3,param_4);
+
+ return 1;
+}
+
diff --git a/src/code/code_0x800E8EA0.c.ignore b/src/code/code_0x800E8EA0.c.ignore
deleted file mode 100644
index 1bc5b38f8..000000000
--- a/src/code/code_0x800E8EA0.c.ignore
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <ultra64.h>
-#include <global.h>
-
-void func_800E8EA0(z_GlobalContext* a0, z_Actor* a1, u16 a2) {
- func_80151938(a0, a2);
- a1->unk116 = a2;
-}
-
-UNK_TYPE func_800E8ED0(UNK_TYPE a0) {
- return 0;
-}
-
-void func_800E8EE0(UNK_TYPE a0) {
- return;
-}
-
-UNK_TYPE func_800E8EEC(UNK_TYPE a0) {
- return 0;
-}
-
-void func_800E8EFC(UNK_TYPE a0) {
- return;
-}
-
-UNK_TYPE func_800E8F08(s16* a0, s16* a1) {
- func_800FFEBC(a0 + 1, 0, 6, 6200, 100);
- func_800FFEBC(a1 , 0, 6, 6200, 100);
- func_800FFEBC(a0 + 1, 0, 6, 6200, 100);
- func_800FFEBC(a1 , 0, 6, 6200, 100);
-
- return 1;
-}
-
-UNK_RET func_800E8FA4(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2, UNK_TYPE a3) {
-
-}
-
-UNK_RET func_800E9138(UNK_ARGS) {
-
-}
-
-UNK_RET func_800E9250(UNK_ARGS) {
-
-}
diff --git a/src/code/z_lib.c b/src/code/z_lib.c
index f8124709b..a3695dc9e 100644
--- a/src/code/z_lib.c
+++ b/src/code/z_lib.c
@@ -409,13 +409,13 @@ f32 Lib_DistanceYVec3f(Vector3f* a, Vector3f* b) {
return b->y - a->y;
}
-s32 Lib_YawVec3f(Vector3f* from, Vector3f* to) {
+s16 Lib_YawVec3f(Vector3f* from, Vector3f* to) {
f32 f14 = to->x - from->x;
f32 f12 = to->z - from->z;
return atans_flip(f12, f14);
}
-s32 Lib_PitchVec3f(Vector3f* from, Vector3f* to) {
+s16 Lib_PitchVec3f(Vector3f* from, Vector3f* to) {
return atans_flip(Lib_DistanceXZVec3f(from, to), from->y - to->y);
}
diff --git a/tables/functions.py b/tables/functions.py
index b875967bd..3de20c80d 100644
--- a/tables/functions.py
+++ b/tables/functions.py
@@ -1507,15 +1507,15 @@
0x800E86C0:("func_800E86C0","void","void"),
0x800E86E0:("func_800E86E0","void","void"),
0x800E8784:("func_800E8784","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8"),
- 0x800E8EA0:("func_800E8EA0","void","void"),
- 0x800E8ED0:("func_800E8ED0","void","void"),
- 0x800E8EE0:("func_800E8EE0","void","void"),
- 0x800E8EEC:("func_800E8EEC","void","void"),
- 0x800E8EFC:("func_800E8EFC","void","void"),
- 0x800E8F08:("func_800E8F08","void","void"),
- 0x800E8FA4:("func_800E8FA4","void","void"),
- 0x800E9138:("func_800E9138","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5"),
- 0x800E9250:("func_800E9250","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7"),
+ 0x800E8EA0:("func_800E8EA0","void","GlobalContext* ctxt, Actor* actor, u16 param_3"),
+ 0x800E8ED0:("nop_800E8ED0","s32","UNK_TYPE4 param_1"),
+ 0x800E8EE0:("nop_800E8EE0","void","UNK_TYPE4 param_1"),
+ 0x800E8EEC:("nop_800E8EEC","s32","UNK_TYPE4 param_1"),
+ 0x800E8EFC:("nop_800E8EFC","void","UNK_TYPE4 param_1"),
+ 0x800E8F08:("func_800E8F08","s32","Vector3s* param_1, Vector3s* param_2"),
+ 0x800E8FA4:("func_800E8FA4","s32","Actor* actor, Vector3f* param_2, Vector3s* param_3, Vector3s* param_4"),
+ 0x800E9138:("func_800E9138","s32","GlobalContext* ctxt, Actor* actor, Vector3s* param_3, Vector3s* param_4, f32 param_5"),
+ 0x800E9250:("func_800E9250","s32","GlobalContext* ctxt, Actor* actor, Vector3s* param_3, Vector3s* param_4, Vector3f param_5"),
0x800E9360:("func_800E9360","void","void"),
0x800E93E0:("static_context_init","void","void"),
0x800E9470:("func_800E9470","void","void"),
@@ -1823,8 +1823,8 @@
0x800FF960:("Lib_DistanceAndDifferenceXZVec3f","f32","Vector3f* a, Vector3f* b, f32* xDiff, f32* zDiff"),
0x800FF9A4:("Lib_PushAwayXZVec3f","f32","Vector3f* start, Vector3f* pusher, f32 distanceToApproach"),
0x800FFA4C:("Lib_DistanceYVec3f","f32","Vector3f* a, Vector3f* b"),
- 0x800FFA60:("Lib_YawVec3f","s32","Vector3f* from, Vector3f* to"),
- 0x800FFA94:("Lib_PitchVec3f","s32","Vector3f* from, Vector3f* to"),
+ 0x800FFA60:("Lib_YawVec3f","s16","Vector3f* from, Vector3f* to"),
+ 0x800FFA94:("Lib_PitchVec3f","s16","Vector3f* from, Vector3f* to"),
0x800FFADC:("Lib_ApplyActorInitVars","void","Actor* actor, ActorInitVar* init"),
0x800FFB54:("Lib_ApplyActorInitVarByte1","void","u8* actor, ActorInitVar* init"),
0x800FFB70:("Lib_ApplyActorInitVarByte2","void","u8* actor, ActorInitVar* init"),
@@ -2822,7 +2822,7 @@
0x80150D08:("func_80150D08","void","GlobalContext* ctxt, unsigned int uParm2"),
0x801514B0:("func_801514B0","void","void"),
0x801518B0:("func_801518B0","void","GlobalContext* ctxt, u32 uParm2, UNK_TYPE4 uParm3"),
- 0x80151938:("func_80151938","void","void"),
+ 0x80151938:("func_80151938","void","GlobalContext* ctxt, u16 param_2"),
0x80151A68:("func_80151A68","void","void"),
0x80151BB4:("func_80151BB4","void","s32 iParm1, u32 uParm2"),
0x80151C9C:("func_80151C9C","void","void"),
@@ -3317,9 +3317,9 @@
0x8017FB1C:("func_8017FB1C","void","UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11"),
0x8017FD44:("func_8017FD44","void","void"),
0x8017FEB0:("atans_first_8th","s16","f32 opposite, f32 adjacent"),
- 0x8017FEE4:("atans","s32","f32 opposite, f32 adjacent"),
+ 0x8017FEE4:("atans","s16","f32 opposite, f32 adjacent"),
0x801800CC:("atan","f32","f32 opposite, f32 adjacent"),
- 0x80180100:("atans_flip","s32","f32 adjacent, f32 opposite"),
+ 0x80180100:("atans_flip","s16","f32 adjacent, f32 opposite"),
0x8018012C:("atan_flip","void","f32 adjacent, f32 opposite"),
0x80180160:("SysMatrix_StateAlloc","void","ContextCommon* ctxt"),
0x8018019C:("SysMatrix_StatePush","void","void"),