Merge pull request #232 from notyourav/save_ld

strip fake linker symbols
This commit is contained in:
notyourav 2021-12-29 03:13:06 -08:00 committed by GitHub
commit 0e72c3ee15
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
47 changed files with 172 additions and 186 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -274,7 +274,6 @@ extern u8 gQuiverSizes[];
extern u16 gWalletSizes[];
extern PlayerState gPlayerState;
extern Stats gStats;
extern Entity gPlayerEntity;
void SetPlayerControl(PlayerControlMode mode);

View File

@ -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;

View File

@ -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];

View File

@ -78,7 +78,6 @@ typedef struct {
u16 _8;
} OAMCommand;
extern BgControls gBgControls;
extern Screen gScreen;
extern OAMCommand gOamCmd;

View File

@ -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 = .;
@ -1707,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);

View File

@ -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];

View File

@ -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));
}
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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;

View File

@ -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();

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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) &&

View File

@ -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) {

View File

@ -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);
}

View File

@ -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:

View File

@ -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;

View File

@ -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) {

View File

@ -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) {

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);