summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2020-07-22 23:05:12 -0700
committertheo3 <arisstephenson2@gmail.com>2020-07-22 23:05:12 -0700
commit67da19b92c320c282ad9857da4bc41cd042b2b8f (patch)
treed6b8b48da1c9be590c429a5bae5cc64e2f1d1684
parentcb24f8f9b14128f67335f8c4dfe65fa345039e3d (diff)
structures.h
-rw-r--r--asm/code_08050038.s151
-rw-r--r--asm/drawKinstoneMenu.s37
-rw-r--r--asm/palaceArchway.s69
-rw-r--r--include/functions.h7
-rw-r--r--include/structures.h43
-rw-r--r--linker.ld4
-rw-r--r--src/object/palaceArchway.c21
-rw-r--r--src/room.c34
-rw-r--r--src/sub_08050024.c104
-rw-r--r--src/sub_080A3B84.c21
10 files changed, 188 insertions, 303 deletions
diff --git a/asm/code_08050038.s b/asm/code_08050038.s
index 880da10c..24320ebe 100644
--- a/asm/code_08050038.s
+++ b/asm/code_08050038.s
@@ -5,157 +5,6 @@
.text
- thumb_func_start sub_08050038
-sub_08050038: @ 0x08050038
- push {lr}
- adds r3, r0, #0
- ldr r2, _0805004C @ =gUnk_03000FD0
- ldrh r1, [r2, #8]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _08050050
- strh r3, [r2, #0xe]
- b _08050052
- .align 2, 0
-_0805004C: .4byte gUnk_03000FD0
-_08050050:
- strh r3, [r2, #0xc]
-_08050052:
- pop {pc}
-
- thumb_func_start DoFade
-DoFade: @ 0x08050054
- push {r4, r5, lr}
- adds r5, r0, #0
- ldr r2, _08050078 @ =gUnk_03000FD0
- movs r3, #0
- strh r1, [r2, #0xa]
- strh r5, [r2, #8]
- movs r0, #1
- strb r0, [r2]
- adds r0, #0xff
- strh r0, [r2, #0xc]
- strh r3, [r2, #0xe]
- movs r0, #2
- ands r0, r5
- adds r4, r2, #0
- cmp r0, #0
- beq _0805007C
- movs r0, #0xf8
- b _0805007E
- .align 2, 0
-_08050078: .4byte gUnk_03000FD0
-_0805007C:
- movs r0, #0
-_0805007E:
- strb r0, [r4, #2]
- movs r0, #8
- ands r0, r5
- cmp r0, #0
- beq _080500A4
- ldr r1, _080500E4 @ =gUnk_03000000
- movs r0, #1
- strb r0, [r1, #2]
- ldr r2, _080500E8 @ =gScreen
- ldrh r0, [r2, #0x14]
- movs r1, #0x40
- orrs r0, r1
- strh r0, [r2, #0x14]
- ldrh r0, [r2, #0x20]
- orrs r0, r1
- strh r0, [r2, #0x20]
- ldrh r0, [r2, #0x2c]
- orrs r1, r0
- strh r1, [r2, #0x2c]
-_080500A4:
- movs r0, #0x10
- ands r0, r5
- cmp r0, #0
- beq _080500E0
- ldrh r0, [r4, #0x16]
- ldrh r1, [r4, #0x18]
- bl sub_0801E1B8
- movs r1, #0x12
- ldrsh r0, [r4, r1]
- movs r2, #0x14
- ldrsh r1, [r4, r2]
- movs r3, #0x10
- ldrsh r2, [r4, r3]
- bl sub_0801E1EC
- movs r0, #1
- ands r0, r5
- cmp r0, #0
- bne _080500E0
- ldrh r1, [r4, #8]
- ldr r0, _080500EC @ =0x0000FFFB
- ands r0, r1
- strh r0, [r4, #8]
- bl sub_08050008
- ldr r1, _080500F0 @ =gUnk_0200B644
- movs r0, #1
- rsbs r0, r0, #0
- str r0, [r1]
-_080500E0:
- pop {r4, r5, pc}
- .align 2, 0
-_080500E4: .4byte gUnk_03000000
-_080500E8: .4byte gScreen
-_080500EC: .4byte 0x0000FFFB
-_080500F0: .4byte gUnk_0200B644
-
- thumb_func_start sub_080500F4
-sub_080500F4: @ 0x080500F4
- ldr r1, _0805010C @ =gUnk_03000FD0
- strh r0, [r1, #0xa]
- ldrh r0, [r1, #8]
- movs r2, #1
- eors r0, r2
- strh r0, [r1, #8]
- strb r2, [r1]
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r1, #0xc]
- bx lr
- .align 2, 0
-_0805010C: .4byte gUnk_03000FD0
-
- thumb_func_start sub_08050110
-sub_08050110: @ 0x08050110
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- adds r6, r1, #0
- adds r4, r2, #0
- movs r1, #1
- ands r1, r4
- cmp r1, #0
- beq _08050130
- ldr r1, _0805012C @ =gUnk_03000FD0
- movs r0, #0x96
- strh r0, [r1, #0x10]
- adds r2, r1, #0
- b _08050136
- .align 2, 0
-_0805012C: .4byte gUnk_03000FD0
-_08050130:
- ldr r0, _0805014C @ =gUnk_03000FD0
- strh r1, [r0, #0x10]
- adds r2, r0, #0
-_08050136:
- movs r1, #0
- strh r5, [r2, #0x12]
- strh r6, [r2, #0x14]
- ldr r0, _08050150 @ =0x00003F3F
- strh r0, [r2, #0x16]
- strh r1, [r2, #0x18]
- adds r0, r4, #0
- adds r1, r3, #0
- bl DoFade
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0805014C: .4byte gUnk_03000FD0
-_08050150: .4byte 0x00003F3F
-
thumb_func_start sub_08050154
sub_08050154: @ 0x08050154
push {r4, r5, r6, lr}
diff --git a/asm/drawKinstoneMenu.s b/asm/drawKinstoneMenu.s
deleted file mode 100644
index f5c49d5b..00000000
--- a/asm/drawKinstoneMenu.s
+++ /dev/null
@@ -1,37 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_080A3B84
-sub_080A3B84: @ 0x080A3B84
- push {r4, r5, lr}
- ldr r4, _080A3BC4 @ =gUnk_030010A0
- adds r4, #0x2c
- movs r5, #0
- movs r0, #2
- strb r0, [r4]
- bl sub_080AD90C
- ldr r1, _080A3BC8 @ =gUnk_081280C4
- ldr r0, _080A3BCC @ =gMenu
- ldrb r0, [r0, #5]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- bl sub_080A3B74
- bl sub_080A4054
- bl sub_0801C1D4
- bl sub_0801C208
- bl sub_0805E5C0
- bl sub_080AD9B0
- bl sub_080AD918
- strb r5, [r4]
- pop {r4, r5, pc}
- .align 2, 0
-_080A3BC4: .4byte gUnk_030010A0
-_080A3BC8: .4byte gUnk_081280C4
-_080A3BCC: .4byte gMenu \ No newline at end of file
diff --git a/asm/palaceArchway.s b/asm/palaceArchway.s
deleted file mode 100644
index a849a4b6..00000000
--- a/asm/palaceArchway.s
+++ /dev/null
@@ -1,69 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start PalaceArchway
-PalaceArchway: @ 0x0809F288
- push {lr}
- ldr r2, _0809F29C @ =gUnk_081246EC
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809F29C: .4byte gUnk_081246EC
-
- thumb_func_start sub_0809F2A0
-sub_0809F2A0: @ 0x0809F2A0
- push {r4, r5, r6, lr}
- movs r1, #1
- strb r1, [r0, #0xc]
- ldrb r1, [r0, #0xb]
- strb r1, [r0, #0x1e]
- ldrb r1, [r0, #0x19]
- movs r2, #0xc0
- orrs r1, r2
- strb r1, [r0, #0x19]
- adds r3, r0, #0
- adds r3, #0x29
- ldrb r1, [r3]
- movs r2, #7
- orrs r1, r2
- strb r1, [r3]
- ldr r5, _0809F2EC @ =0x00004069
- movs r2, #0x2e
- ldrsh r1, [r0, r2]
- ldr r3, _0809F2F0 @ =gRoomControls
- ldrh r2, [r3, #6]
- subs r1, r1, r2
- asrs r1, r1, #4
- movs r4, #0x3f
- ands r1, r4
- movs r6, #0x32
- ldrsh r2, [r0, r6]
- ldrh r3, [r3, #8]
- subs r2, r2, r3
- asrs r2, r2, #4
- ands r2, r4
- lsls r2, r2, #6
- orrs r1, r2
- adds r0, #0x38
- ldrb r2, [r0]
- adds r0, r5, #0
- bl SetTile
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0809F2EC: .4byte 0x00004069
-_0809F2F0: .4byte gRoomControls
-
- thumb_func_start nullsub_537
-nullsub_537: @ 0x0809F2F4
- bx lr
- .align 2, 0
diff --git a/include/functions.h b/include/functions.h
index caace6ff..2ba8c186 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -169,4 +169,11 @@ extern void sub_080AD76C();
extern void sub_080AD644();
extern void sub_080ADA14(u32, u32);
extern void sub_080AD89C();
+extern void sub_0801E1B8(u32, u32);
+extern void sub_0801E1EC(s32, s32, s32);
+extern void sub_08050008(void);
+extern void sub_080A3B74(void);
+extern void sub_080A4054(void);
+extern void sub_0801C1D4(void);
+extern void sub_0801C208(void);
#endif
diff --git a/include/structures.h b/include/structures.h
new file mode 100644
index 00000000..fb96345d
--- /dev/null
+++ b/include/structures.h
@@ -0,0 +1,43 @@
+#ifndef STRUCTURES_H
+#define STRUCTURES_H
+
+#include "global.h"
+#include "entity.h"
+#include "link.h"
+
+typedef struct {
+ u8 filler[8];
+ u8 field_0x8;
+ u8 field_0x9[0x34];
+ u32 windcrests;
+ u8 field_0x44[0x64];
+ Stats stats;
+} struct_02002A40;
+
+extern struct_02002A40 gUnk_02002A40;
+
+typedef struct {
+ u8 field_0x0[8];
+ u8 field_0x8;
+ u8 field_0x9;
+ u8 field_0xa[6];
+ union SplitWord field_0x10;
+ u8 field_0x14[0xc];
+ u16 field_0x20;
+ u16 field_0x22;
+ u8 field_0x24[0x14];
+ u8 field_0x38;
+ u8 field_0x39;
+ u16 field_0x3a;
+ u8 field_0x3c;
+ u8 filler[6];
+ u16 field_0x44;
+ u16 field_0x46;
+ u16 field_0x48;
+ u16 field_0x4a;
+} struct_030010A0;
+
+extern struct_030010A0 gUnk_030010A0;
+
+
+#endif \ No newline at end of file
diff --git a/linker.ld b/linker.ld
index f48d2678..09c9c7a4 100644
--- a/linker.ld
+++ b/linker.ld
@@ -832,7 +832,7 @@ SECTIONS {
src/object/fan.o(.text);
asm/fan.o(.text);
asm/objectA0.o(.text);
- asm/palaceArchway.o(.text);
+ src/object/palaceArchway.o(.text);
asm/objectA2.o(.text);
src/object/cloud.o(.text);
asm/minishLight.o(.text);
@@ -878,7 +878,7 @@ SECTIONS {
asm/code_080A29BC.o(.text);
asm/playSFX.o(.text);
asm/code_080A3480.o(.text);
- asm/drawKinstoneMenu.o(.text);
+ src/sub_080A3B84.o(.text);
asm/code_080A3BD0.o(.text);
src/sub_080A554C.o(.text);
asm/code_080A5574.o(.text);
diff --git a/src/object/palaceArchway.c b/src/object/palaceArchway.c
new file mode 100644
index 00000000..1580c20b
--- /dev/null
+++ b/src/object/palaceArchway.c
@@ -0,0 +1,21 @@
+#include "global.h"
+#include "entity.h"
+#include "room.h"
+#include "functions.h"
+
+extern void (*const gUnk_081246EC[])(Entity*);
+
+void PalaceArchway(Entity* this) {
+ gUnk_081246EC[this->action](this);
+}
+
+void sub_0809F2A0(Entity *this)
+{
+ this->action = 1;
+ this->frameIndex = this->entityType.parameter;
+ this->spriteRendering.b3 = 3;
+ this->spritePriority.b0 = 7;
+ SetTile(0x4069, COORD_TO_TILE(this), this->collisionLayer);
+}
+
+void nullsub_537() {} \ No newline at end of file
diff --git a/src/room.c b/src/room.c
index f17aca03..0bef2ef3 100644
--- a/src/room.c
+++ b/src/room.c
@@ -7,39 +7,7 @@
#include "link.h"
#include "screen.h"
#include "main.h"
-
-typedef struct {
- u8 field_0x0[8];
- u8 field_0x8;
- u8 field_0x9;
- u8 field_0xa[6];
- union SplitWord field_0x10;
- u8 field_0x14[0xc];
- u16 field_0x20;
- u16 field_0x22;
- u8 field_0x24[0x14];
- u8 field_0x38;
- u8 field_0x39;
- u16 field_0x3a;
- u8 field_0x3c;
- u8 filler[6];
- u16 field_0x44;
- u16 field_0x46;
- u16 field_0x48;
- u16 field_0x4a;
-} struct_030010A0;
-
-typedef struct {
- u8 filler[8];
- u8 field_0x8;
- u8 field_0x9[0x34];
- u32 windcrests;
- u8 field_0x44[0x64];
- Stats stats;
-} struct_02002A40;
-
-extern struct_030010A0 gUnk_030010A0;
-extern struct_02002A40 gUnk_02002A40;
+#include "structures.h"
void sub_0804B3C4(u32 arg0) {
sub_0804B29C(arg0);
diff --git a/src/sub_08050024.c b/src/sub_08050024.c
index 23f50e01..59601810 100644
--- a/src/sub_08050024.c
+++ b/src/sub_08050024.c
@@ -1,4 +1,35 @@
#include "global.h"
+#include "functions.h"
+#include "screen.h"
+
+typedef struct {
+ u8 field_0x0;
+ u8 field_0x1;
+ u8 field_0x2;
+ u8 field_0x3;
+ u32 field_0x4;
+ u16 fadeType; // fade in or out, are there others?
+ u16 fadeSpeed; // subtracted from duration
+ u16 fadeDuration;
+ u16 field_0xe;
+ s16 field_0x10;
+ s16 field_0x12;
+ s16 field_0x14;
+ u16 field_0x16;
+ u16 field_0x18;
+} struct_03000FD0;
+
+extern struct_03000FD0 gUnk_03000FD0;
+
+typedef struct {
+ u8 field_0x0;
+ u8 field_0x1;
+ u8 spritesOffset;
+} struct_03000000;
+
+extern struct_03000000 gUnk_03000000;
+
+extern u32 gUnk_0200B644;
extern void sub_0801E104();
extern void DoFade(u32, u32);
@@ -9,14 +40,65 @@ void sub_08050024() {
return;
}
-/* thumb_func_start sub_08050024
-sub_08050024: @ 0x08050024
- push {lr}
- bl sub_0801E104
- movs r1, #0x80
- lsls r1, r1, #1
- movs r0, #5
- bl DoFade
- pop {pc}
- .align 2, 0
- */
+void sub_08050038(u32 arg0)
+{
+ if ((gUnk_03000FD0.fadeType & 1) != 0) {
+ gUnk_03000FD0.field_0xe = arg0;
+ }
+ else {
+ gUnk_03000FD0.fadeDuration = arg0;
+ }
+}
+
+void DoFade(u32 fadeType, u32 fadeSpeed)
+{
+ gUnk_03000FD0.fadeSpeed = fadeSpeed;
+ gUnk_03000FD0.fadeType = fadeType;
+ gUnk_03000FD0.field_0x0 = 1;
+ gUnk_03000FD0.fadeDuration = 0x100;
+ gUnk_03000FD0.field_0xe = 0;
+ if ((gUnk_03000FD0.fadeType & 2) != 0) {
+ gUnk_03000FD0.field_0x2 = 0xf8;
+ }
+ else {
+ gUnk_03000FD0.field_0x2 = 0;
+ }
+ if ((fadeType & 8) != 0) {
+ gUnk_03000000.spritesOffset = 1;
+ gScreen.bg1.unk |= 0x40;
+ gScreen.bg2.unk |= 0x40;
+ gScreen.affine.unk2 |= 0x40;
+ }
+ if ((fadeType & 0x10) != 0) {
+ sub_0801E1B8(gUnk_03000FD0.field_0x16, gUnk_03000FD0.field_0x18);
+ sub_0801E1EC(gUnk_03000FD0.field_0x12, gUnk_03000FD0.field_0x14, gUnk_03000FD0.field_0x10);
+ if ((fadeType & 1) == 0) {
+ gUnk_03000FD0.fadeType &= 0xfffb;
+ sub_08050008();
+ gUnk_0200B644 = 0xffffffff;
+ }
+ }
+}
+
+void sub_080500F4(u32 arg0)
+{
+ gUnk_03000FD0.fadeSpeed = arg0;
+ gUnk_03000FD0.fadeType ^= 1;
+ gUnk_03000FD0.field_0x0 = 1;
+ gUnk_03000FD0.fadeDuration = 0x100;
+}
+
+void sub_08050110(u32 param_1, u32 param_2, u32 fadeType, u32 fadeSpeed)
+{
+ if ((fadeType & 1) != 0) {
+ gUnk_03000FD0.field_0x10 = 0x96;
+ }
+ else {
+ gUnk_03000FD0.field_0x10 = 0;
+ }
+ gUnk_03000FD0.field_0x12 = param_1;
+ gUnk_03000FD0.field_0x14 = param_2;
+ gUnk_03000FD0.field_0x16 = 0x3f3f;
+ gUnk_03000FD0.field_0x18 = 0;
+ DoFade(fadeType, fadeSpeed);
+} \ No newline at end of file
diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c
new file mode 100644
index 00000000..1a605c2a
--- /dev/null
+++ b/src/sub_080A3B84.c
@@ -0,0 +1,21 @@
+#include "global.h"
+#include "functions.h"
+#include "menu.h"
+#include "structures.h"
+
+extern void (*const gUnk_081280C4[])();
+
+void DrawKinstoneMenu(void)
+{
+ gUnk_030010A0.field_0x24[8] = 2;
+ sub_080AD90C();
+ gUnk_081280C4[gMenu.menuType]();
+ sub_080A3B74();
+ sub_080A4054();
+ sub_0801C1D4();
+ sub_0801C208();
+ sub_0805E5C0();
+ sub_080AD9B0();
+ sub_080AD918();
+ gUnk_030010A0.field_0x24[8] = 0;
+} \ No newline at end of file