diff --git a/asm/manager7.s b/asm/manager7.s deleted file mode 100644 index d830014b..00000000 --- a/asm/manager7.s +++ /dev/null @@ -1,202 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08057D50 -sub_08057D50: @ 0x08057D50 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08057D7C - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x20 - movs r0, #0xff - strb r0, [r1] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldr r1, _08057DC0 @ =sub_08057E30 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_08057D7C: - adds r0, r4, #0 - bl sub_08057E40 - cmp r0, #0 - beq _08057D9A - ldr r0, _08057DC4 @ =gRoomVars - ldrb r5, [r0, #0x10] - adds r1, r4, #0 - adds r1, #0x20 - ldrb r0, [r1] - cmp r0, r5 - beq _08057D9A - movs r0, #0 - strb r5, [r1] - strb r0, [r4, #0xe] -_08057D9A: - ldr r0, _08057DC8 @ =gRoomControls - ldrh r3, [r0] - cmp r3, #0 - bne _08057E2A - adds r0, r4, #0 - adds r0, #0x20 - ldrb r5, [r0] - lsls r1, r5, #6 - ldr r0, _08057DCC @ =gUnk_081080A4 - adds r2, r1, r0 - ldrb r1, [r4, #0xe] - cmp r1, #7 - bgt _08057DD0 - cmp r1, #1 - bge _08057E04 - cmp r1, #0 - beq _08057DD6 - b _08057E2A - .align 2, 0 -_08057DC0: .4byte sub_08057E30 -_08057DC4: .4byte gRoomVars -_08057DC8: .4byte gRoomControls -_08057DCC: .4byte gUnk_081080A4 -_08057DD0: - cmp r1, #8 - beq _08057E20 - b _08057E2A -_08057DD6: - ldr r1, _08057DF8 @ =gUnk_02034490 - movs r0, #1 - strb r0, [r1] - ldr r0, [r2] - ldr r1, _08057DFC @ =gGlobalGfxAndPalettes - adds r0, r0, r1 - ldr r1, [r2, #4] - movs r2, #0x80 - lsls r2, r2, #5 - bl LoadAssetAsync - ldr r0, _08057E00 @ =gUnk_081081E4 - adds r0, r5, r0 - ldrb r0, [r0] - bl LoadPaletteGroup - b _08057E24 - .align 2, 0 -_08057DF8: .4byte gUnk_02034490 -_08057DFC: .4byte gGlobalGfxAndPalettes -_08057E00: .4byte gUnk_081081E4 -_08057E04: - lsls r1, r1, #3 - adds r1, r1, r2 - ldr r0, [r1] - ldr r2, _08057E1C @ =gGlobalGfxAndPalettes - adds r0, r0, r2 - ldr r1, [r1, #4] - movs r2, #0x80 - lsls r2, r2, #5 - bl LoadAssetAsync - b _08057E24 - .align 2, 0 -_08057E1C: .4byte gGlobalGfxAndPalettes -_08057E20: - ldr r0, _08057E2C @ =gUnk_02034490 - strb r3, [r0] -_08057E24: - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] -_08057E2A: - pop {r4, r5, pc} - .align 2, 0 -_08057E2C: .4byte gUnk_02034490 - - thumb_func_start sub_08057E30 -sub_08057E30: @ 0x08057E30 - push {lr} - ldr r0, _08057E3C @ =gRoomVars - ldrb r0, [r0, #0x10] - bl sub_08057E7C - pop {pc} - .align 2, 0 -_08057E3C: .4byte gRoomVars - - thumb_func_start sub_08057E40 -sub_08057E40: @ 0x08057E40 - push {lr} - ldr r0, _08057E54 @ =gUnk_08108050 - bl sub_08056300 - adds r1, r0, #0 - cmp r1, #0xff - bne _08057E58 - movs r0, #0 - b _08057E5E - .align 2, 0 -_08057E54: .4byte gUnk_08108050 -_08057E58: - ldr r0, _08057E60 @ =gRoomVars - strb r1, [r0, #0x10] - movs r0, #1 -_08057E5E: - pop {pc} - .align 2, 0 -_08057E60: .4byte gRoomVars - - thumb_func_start sub_08057E64 -sub_08057E64: @ 0x08057E64 - push {lr} - ldr r0, _08057E78 @ =gUnk_08108050 - bl sub_08056300 - cmp r0, #0xff - beq _08057E74 - bl sub_08057E7C -_08057E74: - pop {pc} - .align 2, 0 -_08057E78: .4byte gUnk_08108050 - - thumb_func_start sub_08057E7C -sub_08057E7C: @ 0x08057E7C - push {r4, r5, r6, lr} - adds r4, r0, #0 - cmp r4, #4 - bhi _08057EB6 - ldr r0, _08057EB8 @ =gUnk_081081E4 - adds r0, r4, r0 - ldrb r0, [r0] - bl LoadPaletteGroup - lsls r1, r4, #6 - ldr r0, _08057EBC @ =gUnk_081080A4 - adds r1, r1, r0 - movs r3, #0 - ldr r2, _08057EC0 @ =0x040000D4 - ldr r6, _08057EC4 @ =gGlobalGfxAndPalettes - ldr r5, _08057EC8 @ =0x84000400 -_08057E9C: - ldr r0, [r1] - adds r0, r0, r6 - str r0, [r2] - ldr r0, [r1, #4] - str r0, [r2, #4] - str r5, [r2, #8] - ldr r0, [r2, #8] - adds r3, #1 - adds r1, #8 - cmp r3, #7 - bls _08057E9C - ldr r0, _08057ECC @ =gRoomVars - strb r4, [r0, #0x10] -_08057EB6: - pop {r4, r5, r6, pc} - .align 2, 0 -_08057EB8: .4byte gUnk_081081E4 -_08057EBC: .4byte gUnk_081080A4 -_08057EC0: .4byte 0x040000D4 -_08057EC4: .4byte gGlobalGfxAndPalettes -_08057EC8: .4byte 0x84000400 -_08057ECC: .4byte gRoomVars diff --git a/data/data_08108050.s b/data/data_08108050.s deleted file mode 100644 index a9c5a932..00000000 --- a/data/data_08108050.s +++ /dev/null @@ -1,32 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08108050:: @ 08108050 - .incbin "baserom.gba", 0x108050, 0x000001E - -gUnk_0810806E:: @ 0810806E - .incbin "baserom.gba", 0x10806E, 0x0000036 - -gUnk_081080A4:: @ 081080A4 - .incbin "baserom.gba", 0x1080A4, 0x0000020 - -gUnk_081080C4:: @ 081080C4 - .incbin "baserom.gba", 0x1080C4, 0x0000043 - -gUnk_08108107:: @ 08108107 - .incbin "baserom.gba", 0x108107, 0x0000079 - -gUnk_08108180:: @ 08108180 - .incbin "baserom.gba", 0x108180, 0x0000064 - -gUnk_081081E4:: @ 081081E4 - .incbin "baserom.gba", 0x1081E4, 0x0000008 - -gUnk_081081EC:: @ 081081EC - .incbin "baserom.gba", 0x1081EC, 0x0000008 - -gUnk_081081F4:: @ 081081F4 - .incbin "baserom.gba", 0x1081F4, 0x0000014 diff --git a/data/data_081081EC.s b/data/data_081081EC.s new file mode 100644 index 00000000..4d0e1d08 --- /dev/null +++ b/data/data_081081EC.s @@ -0,0 +1,11 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + .align 2 + +gUnk_081081EC:: @ 081081EC + .incbin "baserom.gba", 0x1081EC, 0x0000008 + +gUnk_081081F4:: @ 081081F4 + .incbin "baserom.gba", 0x1081F4, 0x0000014 diff --git a/include/functions.h b/include/functions.h index 2662b815..4bd2d0f7 100644 --- a/include/functions.h +++ b/include/functions.h @@ -139,7 +139,7 @@ extern void sub_0804C2F0(void); extern void sub_0801AFE4(void); extern u32 sub_08060354(void); extern void sub_08057E64(void); -extern void LoadAssetAsync(void*, u32, u32); +extern void LoadAssetAsync(const void*, u32, u32); extern void LoadPaletteGroup(u32); extern void sub_0809F814(u32); extern void sub_080300E8(void); diff --git a/include/room.h b/include/room.h index 8a1d4430..0ecd60cc 100644 --- a/include/room.h +++ b/include/room.h @@ -45,7 +45,9 @@ typedef struct { u8 field_0x8; u8 field_0x9; u8 unk2; - u16 filler2[3]; + u8 filler2[5]; + u8 unk_10; + u8 filler6[3]; u32 roomFlags; u32 unk3; u8 filler4[48]; @@ -79,4 +81,4 @@ extern RoomVars gRoomVars; extern void SetTileType(u32, u32, u32); -#endif \ No newline at end of file +#endif diff --git a/linker.ld b/linker.ld index 0502bcf7..d58589a4 100644 --- a/linker.ld +++ b/linker.ld @@ -475,7 +475,7 @@ SECTIONS { src/manager/manager4.o(.text); src/manager/manager5.o(.text); src/manager/manager6.o(.text); - asm/manager7.o(.text); + src/manager/manager7.o(.text); asm/manager8.o(.text); asm/manager9.o(.text); src/manager/managerA.o(.text); @@ -984,7 +984,8 @@ SECTIONS { data/map_headers.o(.rodata); data/data_08107BC8.o(.rodata); src/manager/manager5.o(.rodata); - data/data_08108050.o(.rodata); + src/manager/manager7.o(.rodata); + data/data_081081EC.o(.rodata); src/manager/managerB.o(.rodata); data/data_0810821C.o(.rodata); src/item.o(.rodata); diff --git a/src/manager/manager7.c b/src/manager/manager7.c new file mode 100644 index 00000000..14557946 --- /dev/null +++ b/src/manager/manager7.c @@ -0,0 +1,166 @@ +#include "global.h" +#include "manager.h" +#include "functions.h" +#include "gba/gba.h" + + +typedef struct { + Manager manager; + u8 unk_20; + u8 unk_21[0x1F]; +} Manager7; + +void sub_08057E30(); +u32 sub_08057E40(); +void sub_08057E64(); +void sub_08057E7C(u32); + +extern void sub_08052D74(); +extern u32 sub_08056300(const u16*); +extern void sub_0805E3A0(); + +extern u8 gUnk_02034490; +extern const u8 gGlobalGfxAndPalettes[]; + +const u16 gUnk_08108050[0x2A] = { + 0, 0, 0x20, 0xE0, + 0xE0, 1, 0, 0x1D0, + 0x80, 0x60, 2, 0x170, + 0x278, 0xF8, 0xA0, 3, + 0x310, 0x178, 0xC0, 0x150, + 3, 0x340, 0x2C8, 0x60, + 0x90, 4, 0x1D0, 0, + 0x200, 0xE0, 1, 0x108, + 0x188, 0xD0, 0x80, 2, + 0x1E8, 0x338, 0x50, 0xC0, + 0xFF, 0 +}; + +const u32 gUnk_081080A4[0x50] = { + 0x001095E0, 0x06000000, + 0x0010A5E0, 0x06001000, + 0x0010B5E0, 0x06002000, + 0x0010C5E0, 0x06003000, + 0x0010D5E0, 0x06008000, + 0x0010E5E0, 0x06009000, + 0x0010F5E0, 0x0600A000, + 0x001105E0, 0x0600B000, + 0x001115E0, 0x06000000, + 0x001125E0, 0x06001000, + 0x001135E0, 0x06002000, + 0x001145E0, 0x06003000, + 0x001155E0, 0x06008000, + 0x001165E0, 0x06009000, + 0x001175E0, 0x0600A000, + 0x001185E0, 0x0600B000, + 0x001195E0, 0x06000000, + 0x0011A5E0, 0x06001000, + 0x0011B5E0, 0x06002000, + 0x0011C5E0, 0x06003000, + 0x0011D5E0, 0x06008000, + 0x0011E5E0, 0x06009000, + 0x0011F5E0, 0x0600A000, + 0x001205E0, 0x0600B000, + 0x001215E0, 0x06000000, + 0x001225E0, 0x06001000, + 0x001235E0, 0x06002000, + 0x001245E0, 0x06003000, + 0x001255E0, 0x06008000, + 0x001265E0, 0x06009000, + 0x001275E0, 0x0600A000, + 0x001285E0, 0x0600B000, + 0x001295E0, 0x06000000, + 0x0012A5E0, 0x06001000, + 0x0012B5E0, 0x06002000, + 0x0012C5E0, 0x06003000, + 0x0012D5E0, 0x06008000, + 0x0012E5E0, 0x06009000, + 0x0012F5E0, 0x0600A000, + 0x001305E0, 0x0600B000 +}; + +const u8 gUnk_081081E4[] = { + 0x16, + 0x17, + 0x17, + 0x18, + 0x18 +}; + +void Manager7_Main(Manager7* this) { + u32 tmp; + const u32 * tmp2; + if (!this->manager.action) { + this->manager.action = 1; + this->manager.unk_0e = 8; + this->unk_20 = 0xFF; + sub_0805E3A0(this, 6); + sub_08052D74(this, sub_08057E30, 0); + } + if (sub_08057E40(this)) { + tmp = gRoomVars.unk_10; + if (this->unk_20 != tmp) { + this->unk_20 = tmp; + this->manager.unk_0e = 0; + } + } + if (gRoomControls.unk2) return; + tmp = this->unk_20; + tmp2 = &gUnk_081080A4[tmp<<4]; + switch (this->manager.unk_0e) { + case 0: + gUnk_02034490 = 1; + LoadAssetAsync(&gGlobalGfxAndPalettes[tmp2[0]], tmp2[1], 0x1000); + LoadPaletteGroup(gUnk_081081E4[tmp]); + this->manager.unk_0e++; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + LoadAssetAsync(&gGlobalGfxAndPalettes[tmp2[(this->manager.unk_0e << 1)]], tmp2[(this->manager.unk_0e << 1)+1], 0x1000); + this->manager.unk_0e++; + break; + case 8: + gUnk_02034490 = 0; + this->manager.unk_0e++; + break; + } +} + +void sub_08057E30(Manager7* this) { + sub_08057E7C(gRoomVars.unk_10); +} + +u32 sub_08057E40(Manager7* this) { + u32 tmp = sub_08056300(gUnk_08108050); + if (tmp != 0xFF) { + gRoomVars.unk_10 = tmp; + return 1; + } else { + return 0; + } +} + +void sub_08057E64() { + u32 tmp; + tmp = sub_08056300(gUnk_08108050); + if (tmp != 0xFF) { + sub_08057E7C(tmp); + } +} + +void sub_08057E7C(u32 unk1) { + u32 tmp; + const u32* tmp2; + if (unk1 > 4) return; + LoadPaletteGroup(gUnk_081081E4[unk1]); + tmp2 = &gUnk_081080A4[unk1<<4]; + for (tmp = 0; tmp < 8; tmp++, tmp2 += 2) { + DmaSet(3,&gGlobalGfxAndPalettes[tmp2[0]],tmp2[1],0x84000400); + } + gRoomVars.unk_10 = unk1; +}