summaryrefslogtreecommitdiff
path: root/src/object/object1A.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/object/object1A.c')
-rw-r--r--src/object/object1A.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/object/object1A.c b/src/object/object1A.c
new file mode 100644
index 00000000..f7d9e469
--- /dev/null
+++ b/src/object/object1A.c
@@ -0,0 +1,64 @@
+#include "global.h"
+#include "entity.h"
+
+extern void CopyPosition();
+extern void sub_08086A6C();
+extern s32 sub_080044EC();
+extern void sub_080AEF88();
+extern void DeleteThisEntity();
+extern u32 Random(void);
+
+extern void (*gUnk_081206C4[99])(Entity*);
+
+extern BoundingBox gUnk_080FD1A8;
+
+// Main
+void Object1A(Entity* ent) {
+ gUnk_081206C4[ent->action](ent);
+}
+
+void sub_080869DC(Entity* ent) {
+ Entity* itemEntity;
+
+ ent->action = 1;
+ ent->spriteSettings.b.draw = 0;
+ ent->boundingBox = &gUnk_080FD1A8;
+ ent->field_0x3c |= 16;
+ itemEntity = CreateObject(0, ent->entityType.form, 0);
+ if (itemEntity != NULL) {
+ itemEntity->actionDelay = 10;
+ itemEntity->parent = ent;
+ ent->attachedEntity = itemEntity;
+ CopyPosition(ent, itemEntity);
+ sub_08086A6C(ent);
+ }
+}
+
+void sub_08086A28(Entity* ent) {
+ s32 iVar1;
+
+ if (ent->attachedEntity->field_0x4 == NULL) {
+ ent->action = 2;
+ } else {
+ iVar1 = sub_080044EC(ent, 10240);
+ if (iVar1 == 0) {
+ ent->action = 2;
+ }
+ sub_080AEF88(ent);
+ CopyPosition(ent, ent->attachedEntity);
+ }
+}
+
+void sub_08086A5C(Entity* ent) {
+ ent->attachedEntity->parent = NULL;
+ DeleteThisEntity();
+}
+
+void sub_08086A6C(Entity* ent) {
+ u32 uVar1;
+
+ uVar1 = Random();
+ ent->field_0x20 = 163840;
+ ent->direction = (uVar1 >> 16) & 31;
+ ent->nonPlanarMovement = uVar1 & 480;
+}