summaryrefslogtreecommitdiff
path: root/src/object/titleScreenObject.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/object/titleScreenObject.c')
-rw-r--r--src/object/titleScreenObject.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/object/titleScreenObject.c b/src/object/titleScreenObject.c
new file mode 100644
index 00000000..27f15290
--- /dev/null
+++ b/src/object/titleScreenObject.c
@@ -0,0 +1,107 @@
+/**
+ * @file titleScreenObject.c
+ * @ingroup Objects
+ *
+ * @brief Title Screen object
+ */
+#define NENT_DEPRECATED
+#include "functions.h"
+#include "global.h"
+#include "object.h"
+
+void TitleScreenObject_Type0(Entity*);
+void TitleScreenObject_Type1(Entity*);
+void TitleScreenObject_Type4(Entity*);
+void sub_080A2340(Entity*);
+
+typedef struct {
+ u16 unk_0;
+ u16 unk_2;
+ u16 unk_4;
+ u8 unk_6;
+ u8 pad;
+} struct_08125014;
+
+const struct_08125014 gUnk_08125014[] = {
+ { 120, 48, 16, 4, 0 }, { 136, 81, 22, 3, 0 }, { 190, 20, 25, 2, 0 }, { 192, 81, 26, 2, 0 }, { 32, 104, 27, 3, 0 },
+};
+
+void TitleScreenObject(Entity* this) {
+ static void (*const TitleScreenObject_Types[])(Entity*) = {
+ TitleScreenObject_Type0, TitleScreenObject_Type1, TitleScreenObject_Type1,
+ TitleScreenObject_Type1, TitleScreenObject_Type4,
+ };
+ TitleScreenObject_Types[this->type](this);
+}
+
+void TitleScreenObject_Type0(Entity* this) {
+ u32 addr;
+ u32 type;
+
+ if (this->action == 0) {
+ sub_080A2340(this);
+ CreateObject(TITLE_SCREEN_OBJECT, 1, 0);
+ addr = 0x02000000; // TODO write to 0x2000007
+ if (*(u8*)(addr + 7) == 1) {
+ type = 2;
+ } else {
+ type = 3;
+ }
+ CreateObject(TITLE_SCREEN_OBJECT, type, 0);
+ CreateObject(TITLE_SCREEN_OBJECT, 4, 0);
+ }
+}
+
+void TitleScreenObject_Type1(Entity* this) {
+ if (this->action == 0) {
+ sub_080A2340(this);
+ }
+}
+
+void TitleScreenObject_Type4(Entity* this) {
+ u32 tmp1, tmp2, tmp3;
+
+ switch (this->action) {
+ case 0:
+ sub_080A2340(this);
+ this->timer = 8;
+ this->subtimer = 0;
+ this->subAction = this->frameIndex;
+ this->speed = ((Random() & 3) << 4) + 0x1e;
+ break;
+ case 1:
+ if (--this->speed != 0) {
+ return;
+ }
+ this->speed = ((Random() & 7) << 4) + 0x1e;
+ this->action = 2;
+ break;
+ default:
+ if (--this->timer != 0) {
+ return;
+ }
+ this->timer = 8;
+ this->subtimer = tmp2 = (this->subtimer + 1) & 3;
+ tmp3 = this->subAction;
+ tmp1 = tmp3 + tmp2;
+ this->frameIndex = tmp1;
+ if (tmp3 * 0x1000000 != tmp1 * 0x1000000) {
+ return;
+ }
+ this->action = 1;
+ break;
+ }
+}
+
+void sub_080A2340(Entity* this) {
+ const struct_08125014* ptr;
+ ptr = &gUnk_08125014[this->type];
+ this->x.HALF.HI = ptr->unk_0;
+ this->y.HALF.HI = ptr->unk_2;
+ this->frameIndex = ptr->unk_4;
+ this->spritePriority.b0 = ptr->unk_6;
+ this->spriteRendering.b3 = 1;
+ this->spriteOrientation.flipY = 1;
+ this->spriteSettings.draw = 2;
+ this->action = 1;
+}