diff options
Diffstat (limited to 'src/object/object1A.c')
| -rw-r--r-- | src/object/object1A.c | 64 |
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; +} |
