From 0e9a7a5e664f0e7de1477ca36a8184dd0556ef8c Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 29 Dec 2021 02:59:02 -0800 Subject: [PATCH 1/3] strip fake linker symbols --- asm/beanstalkSubtask.s | 2 +- asm/code_08003FC4.s | 8 +-- asm/code_08077B98.s | 4 +- asm/enemy.s | 6 +- asm/enemy/armos.s | 4 +- asm/enemy/enemy4D.s | 4 +- asm/fileScreen.s | 8 +-- asm/intr.s | 4 +- asm/non_matching/manager16/sub_0805ACC0.inc | 4 +- asm/non_matching/sub_0806FOA4.inc | 4 +- asm/non_matching/sub_08077F24.inc | 2 +- asm/non_matching/textbox/sub_08056750.inc | 2 +- asm/object/enemyItem.s | 4 +- asm/object/fan.s | 4 +- asm/object/object36.s | 4 +- asm/player.s | 8 +-- asm/playerUtils.s | 4 +- asm/scroll.s | 2 +- data/data_081320FC.s | 10 --- include/entity.h | 3 - include/fileScreen.h | 1 - include/player.h | 1 - include/room.h | 26 ++++++-- include/save.h | 3 +- include/screen.h | 1 - linker.ld | 37 ----------- src/demoScreen.c | 2 - src/enemy/code_080300AC.c | 18 ++--- src/fileScreen.c | 2 +- src/flags.c | 8 +-- src/game.c | 25 ++++--- src/interrupts.c | 3 +- src/manager/manager1A.c | 12 ++-- src/manager/manager27.c | 4 +- src/manager/manager28.c | 2 +- src/manager/manager2C.c | 4 +- src/manager/manager2D.c | 3 - src/manager/managerB.c | 4 +- src/manager/managerC.c | 4 +- src/message.c | 3 - src/npc/phonograph.c | 2 - src/object/fileScreenObjects.c | 2 +- src/object/minecart.c | 12 +--- src/object/warpPoint.c | 4 +- src/roomInit.c | 4 +- src/sub_0807CA18.c | 4 +- src/title.c | 73 +++++++++++++++++++-- 47 files changed, 172 insertions(+), 183 deletions(-) delete mode 100755 data/data_081320FC.s diff --git a/asm/beanstalkSubtask.s b/asm/beanstalkSubtask.s index 47feec01..601a47e1 100644 --- a/asm/beanstalkSubtask.s +++ b/asm/beanstalkSubtask.s @@ -168,7 +168,7 @@ sub_080197AC: @ 0x080197AC bx lr .align 2, 0 _080197C4: .4byte gUnk_02025EB0 -_080197C8: .4byte gBGAffSettings +_080197C8: .4byte gScreen + 0x20 _080197CC: .4byte gUnk_080B77C0 _080197D0: .4byte gUnk_0200B650 diff --git a/asm/code_08003FC4.s b/asm/code_08003FC4.s index 9b66ce10..718c0306 100644 --- a/asm/code_08003FC4.s +++ b/asm/code_08003FC4.s @@ -195,10 +195,10 @@ sub_080040EC: @ 0x080040EC b _080040F2 _080040F2: push {r2, r3, r4, lr} - ldr r4, _08004374 @ =gUnk_03000BF6 + ldr r4, _08004374 @ =gRoomControls + 6 ldrh r4, [r4] subs r2, r2, r4 - ldr r4, _08004378 @ =gUnk_03000BF8 + ldr r4, _08004378 @ =gRoomControls + 8 ldrh r4, [r4] subs r3, r3, r4 ldr r4, _0800437C @ =0x000003F0 @@ -607,8 +607,8 @@ _08004364: .4byte gUnk_02024048 _08004368: .4byte gRoomControls _0800436C: .4byte 0x0000016E _08004370: .4byte 0x0000011E -_08004374: .4byte gUnk_03000BF6 -_08004378: .4byte gUnk_03000BF8 +_08004374: .4byte gRoomControls + 6 +_08004378: .4byte gRoomControls + 8 _0800437C: .4byte 0x000003F0 _08004380: .4byte gUnk_08000248 _08004384: .4byte 0x000FFFFF diff --git a/asm/code_08077B98.s b/asm/code_08077B98.s index 6143589a..8228eaf7 100644 --- a/asm/code_08077B98.s +++ b/asm/code_08077B98.s @@ -9,7 +9,7 @@ thumb_func_start sub_08077FEC sub_08077FEC: @ 0x08077FEC push {lr} - ldr r0, _08078000 @ =gUnk_03004020 + ldr r0, _08078000 @ =gPlayerState + 0xA0 ldr r2, _08078004 @ =gUnk_0811BFE8 ldrb r1, [r0] lsls r1, r1, #2 @@ -18,7 +18,7 @@ sub_08077FEC: @ 0x08077FEC bl _call_via_r1 pop {pc} .align 2, 0 -_08078000: .4byte gUnk_03004020 +_08078000: .4byte gPlayerState + 0xA0 _08078004: .4byte gUnk_0811BFE8 thumb_func_start sub_08078008 diff --git a/asm/enemy.s b/asm/enemy.s index 45532f9d..d8bdd174 100644 --- a/asm/enemy.s +++ b/asm/enemy.s @@ -1135,12 +1135,12 @@ _080026A0: .4byte gUnk_08002342 gUnk_080026A4:: @ normal entities .4byte gUnk_020000B0 @ enemy target? (player) - .4byte gUnk_03003D68 @ first linked list - .4byte gUnk_03003DB0 @ last linked list + .4byte gEntityLists - 8 @ first linked list + .4byte gEntityLists + 64 @ last linked list .4byte gUnk_03005FBC @ entity table @ managers .4byte gUnk_020000B0 - .4byte gUnk_03003DA8 + .4byte gEntityLists + 56 .4byte gCollidableCount .4byte gUnk_03005FBC diff --git a/asm/enemy/armos.s b/asm/enemy/armos.s index 6063bff6..c6f036f6 100644 --- a/asm/enemy/armos.s +++ b/asm/enemy/armos.s @@ -130,7 +130,7 @@ sub_0803026C: @ 0x0803026C strb r0, [r3] ldrb r2, [r3] lsls r0, r2, #2 - ldr r5, _080302A8 @ =gUnk_0300110C + ldr r5, _080302A8 @ =armos_data adds r0, r0, r5 ldrh r1, [r0] cmp r1, #0 @@ -150,7 +150,7 @@ sub_0803026C: @ 0x0803026C str r0, [r2] b _080302BA .align 2, 0 -_080302A8: .4byte gUnk_0300110C +_080302A8: .4byte gScreenTransition + 0x6c _080302AC: adds r0, r4, #0 adds r0, #0x84 diff --git a/asm/enemy/enemy4D.s b/asm/enemy/enemy4D.s index f7b116a9..14c588b4 100644 --- a/asm/enemy/enemy4D.s +++ b/asm/enemy/enemy4D.s @@ -474,7 +474,7 @@ _0803EF1C: .4byte gUnk_020000B0 sub_0803EF20: @ 0x0803EF20 push {r4, r5, r6, r7, lr} adds r5, r0, #0 - ldr r6, _0803EF5C @ =gUnk_03003D80 + ldr r6, _0803EF5C @ =gEntityLists + 16 ldr r4, [r6, #4] cmp r4, r6 beq _0803EF6A @@ -503,7 +503,7 @@ _0803EF2E: strb r0, [r1] b _0803EF6C .align 2, 0 -_0803EF5C: .4byte gUnk_03003D80 +_0803EF5C: .4byte gEntityLists + 16 _0803EF60: .4byte gUnk_080D08C8 _0803EF64: ldr r4, [r4, #4] diff --git a/asm/fileScreen.s b/asm/fileScreen.s index c7b8a3ed..699cf86a 100755 --- a/asm/fileScreen.s +++ b/asm/fileScreen.s @@ -39,10 +39,10 @@ HandleGameplayScreen: @ 08051A28 _08051A64: pop {r4, pc} .byte 0x00, 0x00 -_08051A68: .4byte gUnk_030010A0 +_08051A68: .4byte gScreenTransition _08051A6C: .4byte gUnk_080FC9D8 _08051A70x: .4byte gMain -_08051A74x: .4byte gUnk_02002A40 +_08051A74x: .4byte gSave .else thumb_func_start HandleGameplayScreen HandleGameplayScreen: @ 0x08051988 @@ -341,7 +341,7 @@ _08051B5A: ldr r0, _08051BC8 @ =gUnk_02034490 strb r4, [r0] .ifdef DEMO_JP - ldr r0, _08051C30 @ =gUnk_030010A0 + ldr r0, _08051C30 @ =gScreenTransition adds r0,#0x31 ldrb r0,[r0,#0x0] cmp r0,#0x0 @@ -408,7 +408,7 @@ _08051BC0: .4byte 0x800B0000 _08051BC4: .4byte gMain _08051BC8: .4byte gUnk_02034490 .ifdef DEMO_JP -_08051C30: .4byte gUnk_030010A0 +_08051C30: .4byte gScreenTransition .endif _08051BCC: .4byte gRoomVars .endif diff --git a/asm/intr.s b/asm/intr.s index 64f46e95..e2da5340 100644 --- a/asm/intr.s +++ b/asm/intr.s @@ -623,7 +623,7 @@ MakeFadeBuff256: @ 0x080B2124 mul r3, r2, r3 mov r4, #0x400 sub r2, r4, r2, lsl #2 - ldr r7, _080B21A8 @ =gUnk_02000006 + ldr r7, _080B21A8 @ =0x02000006 ldrb r7, [r7] ldr ip, _080B21AC @ =gUnk_08000F54 add ip, ip, r7, lsl #4 @@ -654,7 +654,7 @@ _080B2150: bx lr .align 2, 0 _080B21A4: .4byte 0x01010101 -_080B21A8: .4byte gUnk_02000006 +_080B21A8: .4byte 0x02000000 + 6 @ brightness preference _080B21AC: .4byte gUnk_08000F54 ldr r11, _080B2270 @ =gUpdateContext diff --git a/asm/non_matching/manager16/sub_0805ACC0.inc b/asm/non_matching/manager16/sub_0805ACC0.inc index df4f3ff6..dcf66b6b 100644 --- a/asm/non_matching/manager16/sub_0805ACC0.inc +++ b/asm/non_matching/manager16/sub_0805ACC0.inc @@ -28,7 +28,7 @@ _0805ACF0: movs r0, #0x7f ands r0, r1 subs r5, r0, #1 - ldr r6, _0805AD3C @ =gUnk_03003DA0 + ldr r6, _0805AD3C @ =gEntityLists + 48 ldr r4, [r6, #4] cmp r4, r6 beq _0805AD32 @@ -66,7 +66,7 @@ _0805AD34: mov r8, r3 pop {r4, r5, r6, r7, pc} .align 2, 0 -_0805AD3C: .4byte gUnk_03003DA0 +_0805AD3C: .4byte gEntityLists + 48 _0805AD40: .4byte 0x00001609 _0805AD44: .4byte 0x0000FFFF .syntax divided diff --git a/asm/non_matching/sub_0806FOA4.inc b/asm/non_matching/sub_0806FOA4.inc index 53a92f93..18771681 100644 --- a/asm/non_matching/sub_0806FOA4.inc +++ b/asm/non_matching/sub_0806FOA4.inc @@ -1,7 +1,7 @@ .syntax unified push {r4, r5, r6, r7, lr} sub sp, #4 - ldr r7, _0806F114 @ =gUnk_03003DA8 + ldr r7, _0806F114 @ =gEntityLists + 56 ldr r5, [r7, #4] movs r0, #0 cmp r5, r7 @@ -61,5 +61,5 @@ _0806F10E: add sp, #4 pop {r4, r5, r6, r7, pc} .align 2, 0 -_0806F114: .4byte gUnk_03003DA8 +_0806F114: .4byte gEntityLists + 56 .syntax divided diff --git a/asm/non_matching/sub_08077F24.inc b/asm/non_matching/sub_08077F24.inc index 051ccf7a..57df9815 100644 --- a/asm/non_matching/sub_08077F24.inc +++ b/asm/non_matching/sub_08077F24.inc @@ -8,7 +8,7 @@ movs r2, #1 b _08077F42 .align 2, 0 -_08077F34: .4byte gStats +_08077F34: .4byte gSave + 0xa8 _08077F38: ldrb r0, [r2, #0xd] movs r2, #0 diff --git a/asm/non_matching/textbox/sub_08056750.inc b/asm/non_matching/textbox/sub_08056750.inc index 7ed352b6..9939daf0 100644 --- a/asm/non_matching/textbox/sub_08056750.inc +++ b/asm/non_matching/textbox/sub_08056750.inc @@ -124,7 +124,7 @@ _08056844: bl WriteBit b _08056942 .align 2, 0 -_08056854: .4byte gUnk_0200005C +_08056854: .4byte gMessage+0xc _08056858: ldrh r3, [r5, #0x22] cmp r3, #0xe diff --git a/asm/object/enemyItem.s b/asm/object/enemyItem.s index 05916ae8..4ed584b2 100644 --- a/asm/object/enemyItem.s +++ b/asm/object/enemyItem.s @@ -28,7 +28,7 @@ _080A245E: ldrb r0, [r5, #0xe] strb r0, [r5, #0xa] str r1, [r5, #0x54] - ldr r2, _080A24B4 @ =gUnk_03003D90 + ldr r2, _080A24B4 @ =gEntityLists + 32 ldr r4, [r2, #4] cmp r4, r2 beq _080A24BE @@ -63,7 +63,7 @@ _080A2478: str r4, [r5, #0x54] b _080A24BE .align 2, 0 -_080A24B4: .4byte gUnk_03003D90 +_080A24B4: .4byte gEntityLists + 32 _080A24B8: ldr r4, [r4, #4] cmp r4, r2 diff --git a/asm/object/fan.s b/asm/object/fan.s index 86fedf65..42657bff 100644 --- a/asm/object/fan.s +++ b/asm/object/fan.s @@ -37,7 +37,7 @@ _0809EE60: ldrb r1, [r5, #0x15] bl sub_08079E58 _0809EE80: - ldr r6, _0809EEA8 @ =gUnk_03003D80 + ldr r6, _0809EEA8 @ =gEntityLists + 16 ldr r4, [r6, #4] cmp r6, r4 beq _0809EF74 @@ -57,7 +57,7 @@ _0809EE88: mov pc, r0 .align 2, 0 _0809EEA4: .4byte gPlayerEntity -_0809EEA8: .4byte gUnk_03003D80 +_0809EEA8: .4byte gEntityLists + 16 _0809EEAC: .4byte _0809EEB0 _0809EEB0: @ jump table .4byte _0809EF1E @ case 0 diff --git a/asm/object/object36.s b/asm/object/object36.s index 5c47e400..f87da0a8 100644 --- a/asm/object/object36.s +++ b/asm/object/object36.s @@ -342,7 +342,7 @@ _0808BDAE: sub_0808BDB0: @ 0x0808BDB0 push {r4, r5, r6, lr} adds r3, r0, #0 - ldr r4, _0808BDD4 @ =gUnk_03003DA0 + ldr r4, _0808BDD4 @ =gEntityLists + 48 ldr r2, [r4, #4] movs r0, #0 str r0, [r3, #0x50] @@ -359,7 +359,7 @@ _0808BDC4: str r2, [r3, #0x50] b _0808BDE6 .align 2, 0 -_0808BDD4: .4byte gUnk_03003DA0 +_0808BDD4: .4byte gEntityLists + 48 _0808BDD8: .4byte 0x0000FFFF _0808BDDC: .4byte 0x00000C09 _0808BDE0: diff --git a/asm/player.s b/asm/player.s index cd443b88..0811e08e 100644 --- a/asm/player.s +++ b/asm/player.s @@ -101,10 +101,10 @@ _0800861A: ldrh r4, [r0, r2] movs r2, #0x48 ldr r5, [r0, r2] - ldr r1, _080088B4 @ =gUnk_03000BF6 + ldr r1, _080088B4 @ =gRoomControls + 6 ldrh r1, [r1] subs r3, r3, r1 - ldr r1, _080088B8 @ =gUnk_03000BF8 + ldr r1, _080088B8 @ =gRoomControls + 8 ldrh r1, [r1] subs r4, r4, r1 eors r2, r2 @@ -439,8 +439,8 @@ _080088A4: .4byte gUnk_080084BC _080088A8: .4byte gPlayerState _080088AC: .4byte gUnk_0800851C _080088B0: .4byte gUnk_080082DC -_080088B4: .4byte gUnk_03000BF6 -_080088B8: .4byte gUnk_03000BF8 +_080088B4: .4byte gRoomControls + 6 +_080088B8: .4byte gRoomControls + 8 _080088BC: .4byte gPlayerEntity _080088C0: .4byte 0x000003F0 _080088C4: .4byte gUnk_08000248 diff --git a/asm/playerUtils.s b/asm/playerUtils.s index 4203ca77..b9a53489 100644 --- a/asm/playerUtils.s +++ b/asm/playerUtils.s @@ -275,7 +275,7 @@ sub_08077880: @ 0x08077880 lsls r0, r0, #2 ldr r1, _080778C4 @ =gUnk_0811BE48 adds r5, r0, r1 - ldr r1, _080778C8 @ =gUnk_03004010 + ldr r1, _080778C8 @ =gPlayerState + 0x90 ldrb r0, [r5] cmp r0, #0 beq _080778A0 @@ -301,7 +301,7 @@ _080778C0: pop {r4, r5, r6, pc} .align 2, 0 _080778C4: .4byte gUnk_0811BE48 -_080778C8: .4byte gUnk_03004010 +_080778C8: .4byte gPlayerState + 0x90 thumb_func_start sub_080778CC sub_080778CC: @ 0x080778CC diff --git a/asm/scroll.s b/asm/scroll.s index 6a767881..d66162ec 100644 --- a/asm/scroll.s +++ b/asm/scroll.s @@ -379,7 +379,7 @@ sub_0807FEC8: @ 0x0807FEC8 strh r0, [r4, #0x18] pop {r4, r5, pc} .align 2, 0 -_0807FEEC: .4byte gUnk_03003FC0 +_0807FEEC: .4byte gPlayerState+0x40 thumb_func_start sub_0807FEF0 sub_0807FEF0: @ 0x0807FEF0 diff --git a/data/data_081320FC.s b/data/data_081320FC.s deleted file mode 100755 index 7226b9da..00000000 --- a/data/data_081320FC.s +++ /dev/null @@ -1,10 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -.ifdef DEMO_JP - @ TODO check whether this is the same save as one of the DEMO_USA ones - .incbin "data_081320FC/_DEMO_JP.bin" -.endif diff --git a/include/entity.h b/include/entity.h index 9afeafe1..4f163a72 100644 --- a/include/entity.h +++ b/include/entity.h @@ -155,9 +155,6 @@ typedef struct LinkedList { } LinkedList; extern LinkedList gEntityLists[9]; -extern LinkedList gUnk_03003D90; - -extern LinkedList gUnk_03003DA0; enum { ENT_DID_INIT = 0x1, diff --git a/include/fileScreen.h b/include/fileScreen.h index 78a36f90..86f4e8d0 100644 --- a/include/fileScreen.h +++ b/include/fileScreen.h @@ -78,7 +78,6 @@ extern const u8 gGlobalGfxAndPalettes[]; extern void (*const gUnk_080FC93C[])(); extern u32 gUsedPalettes; extern u8 gTextGfxBuffer[]; -extern u8 gUnk_02001B40; extern u8 gUnk_02022030; #endif \ No newline at end of file diff --git a/include/player.h b/include/player.h index 76350008..be58a279 100644 --- a/include/player.h +++ b/include/player.h @@ -274,7 +274,6 @@ extern u8 gQuiverSizes[]; extern u16 gWalletSizes[]; extern PlayerState gPlayerState; -extern Stats gStats; extern Entity gPlayerEntity; void SetPlayerControl(PlayerControlMode mode); diff --git a/include/room.h b/include/room.h index 08742d2d..59c6e094 100644 --- a/include/room.h +++ b/include/room.h @@ -72,7 +72,7 @@ typedef struct { s16 lightLevel; u8 filler3[2]; u8 unk_10[4]; - u32 roomFlags; + u32 flags; u32 unk3; u8 filler4[48]; u8 filler5[28]; @@ -95,13 +95,29 @@ typedef struct { u32 spritePtr; } EntityData; +typedef struct { + u16 field_0x0; + u16 field_0x2; + u8 field_0x4; + u8 field_0x5; + u8 field_0x6; + u8 field_0x7; +} struct_030010EC; + +typedef struct { + u16 data[32]; + u16 field_0xac; + u16 field_0xae; +} struct_0300110C; + // Status of the player's positioning within the scene. typedef struct { u8 area_next; u8 room_next; u8 start_anim; u8 spawn_type; - Coords start_pos; + s16 start_pos_x; + s16 start_pos_y; u8 layer; u8 field_0x15; u8 dungeon_area; @@ -140,10 +156,8 @@ typedef struct { u16 field_0x46; u16 field_0x48; u16 field_0x4a; - u8 minecart_data[0x20]; - u8 field_0x6c[0x40]; - u16 field_0xac; - u16 field_0xae; + struct_030010EC minecart_data[4]; + struct_0300110C armos_data; } ScreenTransition; extern ScreenTransition gScreenTransition; diff --git a/include/save.h b/include/save.h index 90e00e60..5df71806 100644 --- a/include/save.h +++ b/include/save.h @@ -43,7 +43,8 @@ typedef struct { /*0x0A8*/ Stats stats; /*0x0D0*/ u8 fillerD0[0x71]; /*0x141*/ u8 unk141[128]; - /*0x1C1*/ u8 unk1C1[667]; + /*0x1C1*/ u8 unk1C1[155]; + /*0x25C*/ u8 flags[0x200]; /*0x45C*/ u8 unk45C[0x10]; /*0x46C*/ u8 unk46C[0x20]; /*0x48C*/ u32 unk48C[8]; diff --git a/include/screen.h b/include/screen.h index e057442a..f308f19d 100644 --- a/include/screen.h +++ b/include/screen.h @@ -78,7 +78,6 @@ typedef struct { u16 _8; } OAMCommand; -extern BgControls gBgControls; extern Screen gScreen; extern OAMCommand gOamCmd; diff --git a/linker.ld b/linker.ld index 24bb0cea..eee68274 100644 --- a/linker.ld +++ b/linker.ld @@ -11,13 +11,11 @@ MEMORY { SECTIONS { ewram (NOLOAD) : ALIGN(4) { - . = 0x00000006; gUnk_02000006 = .; . = 0x00000010; gUnk_02000010 = .; . = 0x00000020; gUnk_02000020 = .; . = 0x00000030; gUnk_02000030 = .; . = 0x00000040; gUnk_02000040 = .; . = 0x00000050; gMessage = .; - . = 0x0000005C; gUnk_0200005C = .; . = 0x00000070; gUpdateVisibleTiles = .; . = 0x00000080; gMenu = .; . = 0x00000080; gIntroState = .; @@ -30,13 +28,9 @@ SECTIONS { . = 0x00001A00; gPaletteList = .; . = 0x00001A3C; gUnk_02001A3C = .; . = 0x00001A40; gBG3Buffer = .; - . = 0x00001B40; gUnk_02001B40 = .; . = 0x00002A40; gSave = .; - . = 0x00002A40; gUnk_02002A40 = .; - . = 0x00002AA0; gUnk_02002AA0 = .; . = 0x00002AC0; gUnk_02002AC0 = .; . = 0x00002AC8; gUnk_02002AC8 = .; - . = 0x00002AE8; gStats = .; . = 0x00002B0E; gUnk_02002B0E = .; . = 0x00002B32; gUnk_02002B32 = .; . = 0x00002B54; gUnk_02002B54 = .; @@ -46,8 +40,6 @@ SECTIONS { . = 0x00002C81; gUnk_02002C81 = .; . = 0x00002C8E; gUnk_02002C8E = .; . = 0x00002C9C; gGlobalFlags = .; - . = 0x00002E9C; gUnk_02002E9C = .; - . = 0x00002ECC; gUnk_02002ECC = .; . = 0x00002F00; gMapDataTopSpecial = .; . = 0x00006F00; gUnk_02006F00 = .; . = 0x0000AF00; gUnk_0200AF00 = .; @@ -78,7 +70,6 @@ SECTIONS { . = 0x00018EB0; gUnk_02018EB0 = .; . = 0x00018EE0; gUnk_02018EE0 = .; . = 0x00019EE0; gUnk_02019EE0 = .; - . = 0x00019F6C; gUnk_02019F6C = .; . = 0x0001AEE0; gUnk_0201AEE0 = .; . = 0x00021EE0; gSoundPlayingInfo = .; . = 0x00021F00; gUnk_02021F00 = .; @@ -96,7 +87,6 @@ SECTIONS { . = 0x000227F0; gUnk_020227F0 = .; . = 0x000227F8; gUnk_020227F8 = .; . = 0x00022800; gUnk_02022800 = .; - . = 0x0002281E; gUnk_0202281E = .; . = 0x00022830; gUnk_02022830 = .; . = 0x00024030; gMessageChoices = .; . = 0x00024048; gUnk_02024048 = .; @@ -122,11 +112,9 @@ SECTIONS { . = 0x00033A90; gArea = .; . = 0x00033AB8; gUnk_02033AB8 = .; . = 0x00033ACC; gUnk_02033ACC = .; - . = 0x000342CC; gUnk_020342CC = .; . = 0x000342F8; gUnk_020342F8 = .; . = 0x00034330; gUnk_02034330 = .; . = 0x00034350; gRoomVars = .; - . = 0x00034364; gRoomFlags = .; . = 0x00034398; gUnk_02034398 = .; . = 0x00034480; gUnk_02034480 = .; . = 0x00034490; gUnk_02034490 = .; @@ -135,7 +123,6 @@ SECTIONS { . = 0x000344B0; gBG2Buffer = .; . = 0x000344F0; gUnk_020344F0 = .; . = 0x00034CB0; gBG0Buffer = .; - . = 0x00034CB2; gUnk_02034CB2 = .; . = 0x00034CF0; gUnk_02034CF0 = .; . = 0x00034D30; gUnk_02034D30 = .; . = 0x00034DF0; gUnk_02034DF0 = .; @@ -177,41 +164,23 @@ SECTIONS { . = 0x00000B80; gUnk_03000B80 = .; . = 0x00000BD4; gUnk_03000BD4 = .; . = 0x00000BF0; gRoomControls = .; - . = 0x00000BF6; gUnk_03000BF6 = .; - . = 0x00000BF8; gUnk_03000BF8 = .; . = 0x00000C24; gUnk_03000C24 = .; . = 0x00000C30; gUnk_03000C30 = .; . = 0x00000E10; gCollidableList = .; . = 0x00000F50; gScreen = .; - . = 0x00000F58; gBG0Settings = .; - . = 0x00000F64; gBG1Settings = .; - . = 0x00000F70; gBGAffSettings = .; - . = 0x00000F88; gBgControls = .; - . = 0x00000FBC; gUnk_03000FBC = .; . = 0x00000FD0; gFadeControl = .; . = 0x00000FF0; gInput = .; . = 0x00001000; gMain = .; . = 0x00001010; gOamCmd = .; . = 0x00001020; gUnk_03001020 = .; . = 0x000010A0; gScreenTransition = .; - . = 0x000010A0; gUnk_030010A0 = .; - . = 0x000010AC; gUnk_030010AC = .; - . = 0x000010EC; gUnk_030010EC = .; - . = 0x0000110C; gUnk_0300110C = .; . = 0x00001150; gRand = .; . = 0x00001160; gPlayerEntity = .; - . = 0x00001198; gUnk_03001198 = .; . = 0x000011E8; gUnk_030011E8 = .; . = 0x000015A0; gUnk_030015A0 = .; . = 0x00003BE0; gUnk_03003BE0 = .; . = 0x00003C70; gUnk_03003C70 = .; - . = 0x00003D68; gUnk_03003D68 = .; . = 0x00003D70; gEntityLists = .; - . = 0x00003D80; gUnk_03003D80 = .; - . = 0x00003D90; gUnk_03003D90 = .; - . = 0x00003DA0; gUnk_03003DA0 = .; - . = 0x00003DA8; gUnk_03003DA8 = .; - . = 0x00003DB0; gUnk_03003DB0 = .; . = 0x00003DB8; gCollidableCount = .; . = 0x00003DBC; gEntCount = .; . = 0x00003DC0; gPriorityHandler = .; @@ -221,18 +190,12 @@ SECTIONS { . = 0x00003DF0; gUnk_03003DF0 = .; . = 0x00003DF8; gUnk_03003DF8 = .; . = 0x00003F80; gPlayerState = .; - . = 0x00003FC0; gUnk_03003FC0 = .; - . = 0x00004010; gUnk_03004010 = .; - . = 0x00004020; gUnk_03004020 = .; . = 0x00004030; gUnk_03004030 = .; . = 0x00004040; gPlayerClones = .; . = 0x0000404C; SoundMainRAM_Buffer = .; . = 0x0000404D; gUnk_0300404D = .; . = 0x000043D0; gSoundInfo = .; . = 0x00004D50; gMPlayJumpTable = .; - . = 0x00004D54; gUnk_03004D54 = .; - . = 0x00004DD8; gUnk_03004DD8 = .; - . = 0x00004DDC; gUnk_03004DDC = .; . = 0x00004DE0; gCgbChans = .; . = 0x00004EE0; gMPlayInfos = .; . = 0x000055E0; gMPlayMemAccArea = .; diff --git a/src/demoScreen.c b/src/demoScreen.c index e2d7c911..daec74d7 100644 --- a/src/demoScreen.c +++ b/src/demoScreen.c @@ -19,8 +19,6 @@ extern u8 gUnk_08A05751[]; extern void gUnk_089FD1B4; extern void gUnk_089FD2F4; -extern u8 gUnk_02000006; - extern u16 gUnk_08127CC8[4]; extern void* gUnk_08127C98; extern u8 gUnk_08A068BF[129]; diff --git a/src/enemy/code_080300AC.c b/src/enemy/code_080300AC.c index 612df34a..d1af8248 100644 --- a/src/enemy/code_080300AC.c +++ b/src/enemy/code_080300AC.c @@ -2,22 +2,14 @@ #include "utils.h" #include "functions.h" -typedef struct { - u16 unk0; - u16 filler2[32]; - u16 unk66; -} struct_0300110C; - -extern struct_0300110C gUnk_0300110C; - void sub_080300AC(void) { - MemClear(&gUnk_0300110C.unk0, 0x44); - gUnk_0300110C.unk66 = 0xff; + MemClear(&gScreenTransition.armos_data, sizeof(gScreenTransition.armos_data)); + gScreenTransition.armos_data.field_0xae = 0xff; } void sub_080300C4(void) { - if (gScreenTransition.field_0xae == 0xff) { - gScreenTransition.field_0xac = 0; - MemClear(gScreenTransition.field_0x6c, sizeof gScreenTransition.field_0x6c); + if (gScreenTransition.armos_data.field_0xae == 0xff) { + gScreenTransition.armos_data.field_0xac = 0; + MemClear(&gScreenTransition.armos_data.data, sizeof(gScreenTransition.armos_data.data)); } } diff --git a/src/fileScreen.c b/src/fileScreen.c index 8d221ccd..ae44ecb0 100644 --- a/src/fileScreen.c +++ b/src/fileScreen.c @@ -921,7 +921,7 @@ void sub_0805144C(void) { void sub_08051458(void) { sub_080503A8(gMenu.column_idx + 9); - MemCopy(&gUnk_02001B40, &gUnk_02022030, 0x400); + MemCopy(gBG3Buffer + 0x80, &gUnk_02022030, 0x400); } u32 sub_080514BC(u32); diff --git a/src/flags.c b/src/flags.c index ec58ec19..1c153b5a 100644 --- a/src/flags.c +++ b/src/flags.c @@ -36,7 +36,7 @@ u32 CheckGlobalFlag(u32 flag) { } u32 CheckRoomFlag(u32 flag) { - return ReadBit(&gRoomVars.roomFlags, flag); + return ReadBit(&gRoomVars.flags, flag); } u32 CheckLocalFlagsByBank(u32 offset, u32 flag, u32 length) { @@ -53,7 +53,7 @@ u32 CheckGlobalFlags(u32 flag, u32 length) { } u32 CheckRoomFlags(u32 flag, u32 length) { - return CheckBits(&gRoomVars.roomFlags, flag, length); + return CheckBits(&gRoomVars.flags, flag, length); } void SetLocalFlagByBank(u32 offset, u32 flag) { @@ -92,7 +92,7 @@ void SetGlobalFlag(u32 flag) { } void SetRoomFlag(u32 flag) { - WriteBit(&gRoomFlags, flag); + WriteBit(&gRoomVars.flags, flag); } void ClearLocalFlagByBank(u32 offset, u32 flag) { @@ -127,5 +127,5 @@ void ClearGlobalFlag(u32 flag) { } void ClearRoomFlag(u32 flag) { - ClearBit(&gRoomFlags, flag); + ClearBit(&gRoomVars.flags, flag); } diff --git a/src/game.c b/src/game.c index 72fd56c0..33054701 100644 --- a/src/game.c +++ b/src/game.c @@ -15,8 +15,6 @@ #include "message.h" #include "game.h" -extern u32 gUnk_03003FC0; - extern u8 gUnk_080FCA84[]; extern u8 gUnk_080FCAC8[]; extern u8 gUnk_02024090[]; @@ -379,8 +377,8 @@ void InitializePlayer(void) { pl->flags |= ENT_COLLIDE | ENT_20; pl->spritePriority.b0 = 4; pl->health = gSave.stats.health; - pl->x.HALF.HI = gScreenTransition.player_status.start_pos.HALF.x; - pl->y.HALF.HI = gScreenTransition.player_status.start_pos.HALF.y; + pl->x.HALF.HI = gScreenTransition.player_status.start_pos_x; + pl->y.HALF.HI = gScreenTransition.player_status.start_pos_y; pl->animationState = gScreenTransition.player_status.start_anim; pl->collisionLayer = gScreenTransition.player_status.layer; UpdateSpriteForCollisionLayer(pl); @@ -428,22 +426,23 @@ u32 CheckHasMap(void) { s32 ModHealth(s32 delta) { s32 newHealth; + Stats* stats = &gSave.stats; - newHealth = gStats.health + delta; + newHealth = stats->health + delta; if (newHealth < 0) { newHealth = 0; } - if (gStats.maxHealth < newHealth) { - newHealth = (u32)gStats.maxHealth; + if (stats->maxHealth < newHealth) { + newHealth = (u32)stats->maxHealth; } - gStats.health = newHealth; + stats->health = newHealth; gPlayerEntity.health = newHealth; return newHealth; } void ModRupees(s32 delta) { s32 newRupeeCount; - Stats* s = &gStats; + Stats* s = &gSave.stats; newRupeeCount = s->rupees + delta; if (newRupeeCount < 0) { @@ -614,8 +613,8 @@ static u32 StairsAreValid(void) { void InitParachuteRoom(void) { gScreenTransition.transitioningOut = 1; - gScreenTransition.player_status.start_pos.HALF.x = (gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX) & 0x3F8; - gScreenTransition.player_status.start_pos.HALF.y = (gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) & 0x3F8; + gScreenTransition.player_status.start_pos_x = (gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX) & 0x3F8; + gScreenTransition.player_status.start_pos_y = (gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) & 0x3F8; gScreenTransition.player_status.start_anim = 4; gScreenTransition.player_status.spawn_type = PL_SPAWN_PARACHUTE_FORWARD; gScreenTransition.player_status.area_next = gRoomControls.areaID; @@ -983,8 +982,8 @@ void sub_080531F8(void) { void sub_08053250(void) { gScreenTransition.player_status.spawn_type = PL_SPAWN_DEFAULT; - gScreenTransition.player_status.start_pos.HALF.x = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX; - gScreenTransition.player_status.start_pos.HALF.y = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY; + gScreenTransition.player_status.start_pos_x = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX; + gScreenTransition.player_status.start_pos_y = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY; gScreenTransition.player_status.start_anim = gPlayerEntity.animationState; gScreenTransition.player_status.layer = gPlayerEntity.collisionLayer; gScreenTransition.player_status.area_next = gRoomControls.areaID; diff --git a/src/interrupts.c b/src/interrupts.c index 53463318..85c3c16c 100644 --- a/src/interrupts.c +++ b/src/interrupts.c @@ -20,7 +20,6 @@ extern u8 gUnk_03003DF0[]; extern u8 gUnk_03003BE0; extern Entity* gPlayerClones[3]; extern u16 gUnk_080B2CD8[]; -extern u32 gUnk_03000FBC; extern void sub_080ADD70(); extern void sub_0801C25C(); @@ -69,7 +68,7 @@ void VBlankIntr(void) { m4aSoundVSync(); if (gMain.interruptFlag == 0) { DispCtrlSet(); - DmaCopy32(0, &gUnk_03000FBC, &gUnk_02022730, 16); + DmaCopy32(0, &gScreen._6c, &gUnk_02022730, 16); gMain.interruptFlag = 1; } sub_08016BF8(); diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index dd047611..a0eb2a8b 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -161,18 +161,18 @@ void sub_0805B210(Manager1A* this) { } switch (tmp->unk_00) { case 0: - gScreenTransition.player_status.start_pos.HALF.x = tmp->unk_04; - gScreenTransition.player_status.start_pos.HALF.y = tmp->unk_06; + gScreenTransition.player_status.start_pos_x = tmp->unk_04; + gScreenTransition.player_status.start_pos_y = tmp->unk_06; break; case 1: - gScreenTransition.player_status.start_pos.HALF.x = + gScreenTransition.player_status.start_pos_x = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX + tmp->unk_04; - gScreenTransition.player_status.start_pos.HALF.y = + gScreenTransition.player_status.start_pos_y = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY + tmp->unk_06; break; case 2: - gScreenTransition.player_status.start_pos.HALF.x = tmp->unk_04; - gScreenTransition.player_status.start_pos.HALF.y = tmp->unk_06; + gScreenTransition.player_status.start_pos_x = tmp->unk_04; + gScreenTransition.player_status.start_pos_y = tmp->unk_06; gScreenTransition.player_status.spawn_type = 6; break; } diff --git a/src/manager/manager27.c b/src/manager/manager27.c index a8e66939..e8a2842d 100644 --- a/src/manager/manager27.c +++ b/src/manager/manager27.c @@ -19,9 +19,9 @@ void Manager27_Main(Entity* this) { gUnk_08108D10[this->action](this); if (CheckLocalFlagByBank(0x300, this->type + 0x67)) { - gScreenTransition.field_0xac |= (1 << this->type); + gScreenTransition.armos_data.field_0xac |= (1 << this->type); } else { - gScreenTransition.field_0xac &= ~(1 << this->type); + gScreenTransition.armos_data.field_0xac &= ~(1 << this->type); } } diff --git a/src/manager/manager28.c b/src/manager/manager28.c index 43e4e8d9..6280bc6e 100644 --- a/src/manager/manager28.c +++ b/src/manager/manager28.c @@ -111,7 +111,7 @@ Entity* Manager28_FindMatchingEntity(EntityData* unk1) { LinkedList* tmp; x = unk1->xPos + gRoomControls.roomOriginX; y = unk1->yPos + gRoomControls.roomOriginY; - tmp = &gUnk_03003D90; + tmp = &gEntityLists[4]; for (i = tmp->first; (u32)i != (u32)tmp; i = i->next) { if (x == i->x.HALF.HI && y == i->y.HALF.HI && unk1->id == i->id && 3 == i->kind && unk1->type == i->type) { return i; diff --git a/src/manager/manager2C.c b/src/manager/manager2C.c index f42c0844..125dcc5b 100644 --- a/src/manager/manager2C.c +++ b/src/manager/manager2C.c @@ -29,8 +29,8 @@ void Manager2C_Main(Manager2C* manager) { gScreenTransition.player_status.area_next = manager->manager.unk_0b; gScreenTransition.player_status.room_next = manager->manager.unk_0e; gScreenTransition.player_status.start_anim = manager->field_0x37; - gScreenTransition.player_status.start_pos.HALF.x = manager->field_0x3c; - gScreenTransition.player_status.start_pos.HALF.y = manager->field_0x3e; + gScreenTransition.player_status.start_pos_x = manager->field_0x3c; + gScreenTransition.player_status.start_pos_y = manager->field_0x3e; gScreenTransition.player_status.layer = manager->field_0x36; } } diff --git a/src/manager/manager2D.c b/src/manager/manager2D.c index 20d448e6..8e1b7f65 100644 --- a/src/manager/manager2D.c +++ b/src/manager/manager2D.c @@ -2,9 +2,6 @@ #include "entity.h" #include "functions.h" -extern u32 gUnk_03000BF8; -extern u32 gUnk_03000BF6; - void Manager2D_Main(Entity* this) { SetTile(0x4014, 0x5c3, 1); if ((gRoomControls.roomOriginY + 200 < gPlayerEntity.y.HALF.HI) && diff --git a/src/manager/managerB.c b/src/manager/managerB.c index 9bf28b87..2219470c 100644 --- a/src/manager/managerB.c +++ b/src/manager/managerB.c @@ -165,14 +165,12 @@ void ManagerBHelper_Main(Manager* this) { } } -extern Manager gUnk_03003DB0; - /* * Replace an entity that is currently being monitored with a new one */ void ReplaceMonitoredEntity(Entity* old, Entity* new) { ManagerBHelper* current; - Manager* end = &gUnk_03003DB0; + Manager* end = (Manager*)&gEntityLists[8]; u32 i; for (current = (ManagerBHelper*)end->next; (Manager*)current != end; current = (ManagerBHelper*)current->manager.next) { diff --git a/src/manager/managerC.c b/src/manager/managerC.c index 8f467f8e..d7c3f867 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -209,8 +209,8 @@ void sub_08058B5C(ManagerC* this, u32 unk1) { gScreenTransition.player_status.area_next = gRoomControls.areaID; gScreenTransition.player_status.room_next = 6; gScreenTransition.player_status.start_anim = unk1 & 1 ? 4 : 0; - gScreenTransition.player_status.start_pos.HALF.x = gUnk_081082E8[unk1 * 3]; - gScreenTransition.player_status.start_pos.HALF.y = gUnk_081082E8[unk1 * 3 + 1]; + gScreenTransition.player_status.start_pos_x = gUnk_081082E8[unk1 * 3]; + gScreenTransition.player_status.start_pos_y = gUnk_081082E8[unk1 * 3 + 1]; gSave.unk7 = gUnk_081082E8[unk1 * 3 + 2]; SoundReq(SFX_STAIRS); } diff --git a/src/message.c b/src/message.c index 085f0011..8f2ff53e 100644 --- a/src/message.c +++ b/src/message.c @@ -700,9 +700,6 @@ static void CreateWindow(void) { ASM_FUNC("asm/non_matching/textbox/DispMessageFrame.inc", void DispMessageFrame(u16* buffer, u32 width_, u32 height_, u32 flags_)) -extern u16 gUnk_02034CB2[]; -extern u16 gUnk_0202281E[]; - /* Each character is two tiles tall. They are stored in VRAM in the following order: diff --git a/src/npc/phonograph.c b/src/npc/phonograph.c index 38aa8569..9a471b6c 100644 --- a/src/npc/phonograph.c +++ b/src/npc/phonograph.c @@ -7,8 +7,6 @@ extern void sub_08057044(u32, struct_020227E8*, u32); extern u32 gUnk_081146B8; -extern u16 gBG0Settings[]; - void Phonograph(Entity* this) { if (this->action == 0) { this->action += 1; diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c index ab9e6567..a4b216bc 100644 --- a/src/object/fileScreenObjects.c +++ b/src/object/fileScreenObjects.c @@ -319,7 +319,7 @@ void sub_0808EBB8(Entity* this) { } static Entity* sub_0808EC80(int form) { - Entity* entityA = (Entity*)&gUnk_03003DA0; + Entity* entityA = (Entity*)&gEntityLists[6]; Entity* entityB = entityA->next; while (entityB != entityA) { if ((entityB->kind == 0x6 && entityB->id == 0x48) && form == entityB->type) { diff --git a/src/object/minecart.c b/src/object/minecart.c index 39d1ce44..bf03dfc9 100644 --- a/src/object/minecart.c +++ b/src/object/minecart.c @@ -7,18 +7,8 @@ extern u32 sub_08007DD6(u32, u32); extern void sub_08017744(Entity*); extern void sub_08091C0C(Entity*); -typedef struct { - u16 field_0x0; - u16 field_0x2; - u8 field_0x4; - u8 field_0x5; - u8 field_0x6; - u8 field_0x7; -} struct_030010EC; - extern void (*const gUnk_081223A8[])(Entity*); -extern struct_030010EC gUnk_030010EC[]; extern Hitbox gUnk_080FD310; extern const s8 gUnk_081223C8[]; @@ -30,7 +20,7 @@ void Minecart(Entity* this) { } void sub_080916EC(Entity* this) { - struct_030010EC* unk = &gUnk_030010EC[this->actionDelay]; + struct_030010EC* unk = &gScreenTransition.minecart_data[this->actionDelay]; *(struct_030010EC**)&this->cutsceneBeh.HWORD = unk; if ((gRoomControls.roomID != unk->field_0x4) || (gPlayerState.flags & 0x1000) != 0) { diff --git a/src/object/warpPoint.c b/src/object/warpPoint.c index bfa09ca0..f95971e0 100644 --- a/src/object/warpPoint.c +++ b/src/object/warpPoint.c @@ -148,8 +148,8 @@ void sub_0808B684(Entity* this) { gScreenTransition.transitionType = TRANSITION_DEFAULT; gScreenTransition.player_status.area_next = this->field_0x7c.BYTES.byte0; gScreenTransition.player_status.room_next = this->field_0x7c.BYTES.byte1; - gScreenTransition.player_status.start_pos.HALF.x = ((this->cutsceneBeh.HWORD & 0x3f) << 4) + 8; - gScreenTransition.player_status.start_pos.HALF.y = ((this->cutsceneBeh.HWORD & 0xfc0) >> 2) + 8; + gScreenTransition.player_status.start_pos_x = ((this->cutsceneBeh.HWORD & 0x3f) << 4) + 8; + gScreenTransition.player_status.start_pos_y = ((this->cutsceneBeh.HWORD & 0xfc0) >> 2) + 8; gScreenTransition.player_status.layer = 0; gScreenTransition.player_status.start_anim = 4; gScreenTransition.player_status.spawn_type = 0; diff --git a/src/roomInit.c b/src/roomInit.c index 8c0557c2..384c7b79 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -233,7 +233,7 @@ extern EntityData Entities_HouseInteriors1_Mayor_080D6210; void sub_StateChange_HouseInteriors1_Mayor(void) { - if ((u16)gScreenTransition.player_status.start_pos.HALF.y > 0x40) + if ((u16)gScreenTransition.player_status.start_pos_y > 0x40) LoadRoomEntityList(&Entities_HouseInteriors1_Mayor_080D6210); } @@ -1049,7 +1049,7 @@ void sub_StateChange_RoyalValley_Main(void) { SetTile(0x4072, 0xc47, 1); if (CheckGlobalFlag(MAZE_CLEAR)) - if (gScreenTransition.player_status.start_pos.WORD == 0x2780078) // todo: wtf + if (gScreenTransition.player_status.start_pos_x == 0x78 && gScreenTransition.player_status.start_pos_y == 0x278) SoundReq(SFX_SECRET); ClearGlobalFlag(MAZE_CLEAR); diff --git a/src/sub_0807CA18.c b/src/sub_0807CA18.c index 9c823e2d..6a342989 100644 --- a/src/sub_0807CA18.c +++ b/src/sub_0807CA18.c @@ -53,8 +53,8 @@ u8 sub_0807CA18() { gSave.saved_status.start_anim = 0; gSave.saved_status.spawn_type = 0; gSave.saved_status.layer = 1; - gSave.saved_status.start_pos.HALF.x = 0x90; - gSave.saved_status.start_pos.HALF.y = 0x38; + gSave.saved_status.start_pos_x = 0x90; + gSave.saved_status.start_pos_y = 0x38; } if (gSave.playerName[0] == '\0') { MemCopy(gUnk_0811E470, &gSave.playerName, FILENAME_LENGTH - 1); diff --git a/src/title.c b/src/title.c index c9eb0f73..b31c67e8 100644 --- a/src/title.c +++ b/src/title.c @@ -6,6 +6,9 @@ #include "object.h" #include "message.h" #include "functions.h" +#include "save.h" +#include "area.h" +#include "item.h" typedef struct { u8 filler0[0x4]; @@ -52,6 +55,67 @@ static const u16 sLightRaysAlphaBlends[] = { BLDALPHA_BLEND(5, 13), BLDALPHA_BLEND(6, 12), BLDALPHA_BLEND(7, 11), BLDALPHA_BLEND(8, 10), }; +#define FLAG_BYTE(bank, flag) (((bank) + (flag)) >> 3) +#define FLAG_X(flag) (1 << ((flag)&7)) + +#ifdef DEMO_JP +static const SaveFile gDemoSave = { + .unk_01 = 1, + .messageSpeed = 1, + .brightnessPref = 1, + .global_progress = 1, + .field_0x9 = { [23] = 0x1F }, + .windcrests = 0x00013780, + .unk50 = 7, + .areaVisitFlags = { 0x0114C300 }, + .playerName = "\x97\x7f\xdd", + .saved_status = { + .area_next = AREA_DEEPWOOD_SHRINE, + .room_next = 0xb, + .start_pos_x = 0xa8, + .start_pos_y = 0xc8, + .layer = 1, + .overworld_map_x = 0xd66, + .overworld_map_y = 0xae0, + }, + .stats = { + .health = 40, + .maxHealth = 40, + .itemOnA = ITEM_SHIELD, + .itemOnB = ITEM_SMITH_SWORD, + .rupees = 5, + }, + .fillerD0 = { + [34] = 5, + [37] = 4, + [47] = 6, + [51] = 0x40, + [56] = 0x40, + }, + .flags = { + [FLAG_BYTE(FLAG_BANK_G, START)] = FLAG_X(START) | FLAG_X(EZERO_1ST) | FLAG_X(TABIDACHI), + [FLAG_BYTE(FLAG_BANK_G, OUTDOOR)] = FLAG_X(OUTDOOR), + [FLAG_BYTE(FLAG_BANK_G, ENTRANCE_0)] = FLAG_X(ENTRANCE_0), + [FLAG_BYTE(FLAG_BANK_1, MORI_00_KOBITO)] = FLAG_X(MORI_00_KOBITO) | FLAG_X(MORI_ENTRANCE_1ST), + [FLAG_BYTE(FLAG_BANK_1, SOUGEN_01_ZELDA)] = FLAG_X(SOUGEN_01_ZELDA), + [FLAG_BYTE(FLAG_BANK_1, SOUGEN_06_WAKAGI_1)] = FLAG_X(SOUGEN_06_WAKAGI_1) | FLAG_X(SOUGEN_06_WAKAGI_2) | FLAG_X(SOUGEN_06_WAKAGI_3), + [FLAG_BYTE(FLAG_BANK_1, SOUGEN_06_AKINDO)] = FLAG_X(SOUGEN_06_AKINDO), + [FLAG_BYTE(FLAG_BANK_1, CASTLE_04_MEZAME)] = FLAG_X(CASTLE_04_MEZAME), + [FLAG_BYTE(FLAG_BANK_1, MACHI_01_DEMO)] = FLAG_X(MACHI_01_DEMO), + [FLAG_BYTE(FLAG_BANK_2, MHOUSE15_OP1ST)] = FLAG_X(MHOUSE15_OP1ST), + [FLAG_BYTE(FLAG_BANK_2, M_PRIEST_TALK)] = FLAG_X(M_PRIEST_TALK) | FLAG_X(M_ELDER_TALK1ST) | FLAG_X(M_PRIEST_MOVE), + [FLAG_BYTE(FLAG_BANK_2, KOBITO_MORI_1ST)] = FLAG_X(KOBITO_MORI_1ST), + [FLAG_BYTE(FLAG_BANK_5, LV1_0B_WALK)] = FLAG_X(LV1_0B_WALK), + }, +}; +static const u8 unk[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, + 0xc2, 0xd1, 0xc2, 0xd2, 0xc2, 0xd3, 0xc2, 0xd4, 0xc2, 0xd5, 0xc2, 0xd6, 0xc2, + 0xd7, 0xc2, 0xd8, 0xc2, 0x00, 0xf0, 0x11, 0x90, 0x11, 0x90, 0x05, 0xd3, 0x49, + 0xd3, 0x26, 0xd3, 0x65, 0xdf, 0x11, 0x90, 0x11, 0x90, 0x11, 0x90, 0x11, 0x90, + 0x11, 0x90, 0x11, 0x90, 0x11, 0x90, 0x11, 0x90, 0x11, 0x90, 0x11, 0x90, 0x11, + 0x90, 0x11, 0x90, 0x8a, 0xc2, 0x8b, 0xc2, 0x8c, 0xc2, 0x8d, 0xc2 }; +#endif + static u32 AdvanceIntroSequence(u32 transition) { gUnk_02032EC0.lastState = transition; gMain.funcIndex = 2; @@ -266,7 +330,7 @@ static void UpdateSwordBgAffineData(void) { aff.scrY = DISPLAY_HEIGHT / 2 - 8; aff.alpha = 0; aff.sy = aff.sx = gIntroState.swordBgScaleRatio; - BgAffineSet(&aff, (struct BgAffineDstData*)&gBgControls, 1); + BgAffineSet(&aff, (struct BgAffineDstData*)&gScreen.controls, 1); } static void HandleJapaneseTitlescreenAnimationIntro(void) { @@ -361,15 +425,10 @@ static void HandleTitlescreenAnimationIntro(void) { break; } } - -#ifdef DEMO_JP -extern u8 gUnk_02002A40; -#endif - static void ExitTitlescreen(void) { if (!gFadeControl.active) { #ifdef DEMO_JP - MemCopy(&sLightRaysAlphaBlends[8], &gUnk_02002A40, 0x4B4); + MemCopy(&gDemoSave, &gSave, sizeof(gSave)); InitScreen(SCREEN_GAMEPLAY); #else InitScreen(SCREEN_CHOOSE_FILE); From 739dd60180e31b35a005768b56d5c7d29dc49773 Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 29 Dec 2021 03:08:59 -0800 Subject: [PATCH 3/3] fix ld --- linker.ld | 3 --- 1 file changed, 3 deletions(-) diff --git a/linker.ld b/linker.ld index eee68274..75806d71 100644 --- a/linker.ld +++ b/linker.ld @@ -1670,9 +1670,6 @@ SECTIONS { src/flagDebug.o(.rodata); data/const/playerItem/playerItem13.o(.rodata); src/title.o(.rodata); -#ifdef DEMO_JP - data/data_081320FC.o(.rodata); -#endif src/projectile.o(.rodata); data/const/playerItem/playerItemGustJar.o(.rodata); data/gfx/fixed_type_gfx.o(.rodata);