From 3c280ff75c196b3349cf6e2a52a49a657341f9f5 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 11 Nov 2020 12:45:13 +0100 Subject: [PATCH] manager9.c: ok --- asm/manager9.s | 217 ----------------------------------------- include/functions.h | 1 + linker.ld | 2 +- src/manager/manager9.c | 99 +++++++++++++++++++ 4 files changed, 101 insertions(+), 218 deletions(-) delete mode 100644 asm/manager9.s create mode 100644 src/manager/manager9.c diff --git a/asm/manager9.s b/asm/manager9.s deleted file mode 100644 index 1f9385b4..00000000 --- a/asm/manager9.s +++ /dev/null @@ -1,217 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080581D8 -sub_080581D8: @ 0x080581D8 - push {r4, lr} - adds r4, r0, #0 - bl sub_08058210 - ldrb r1, [r4, #0xc] - cmp r1, #0 - bne _080581F8 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _080581FC @ =gScreen - strh r1, [r0, #0x1a] - ldr r1, _08058200 @ =sub_08058204 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_080581F8: - pop {r4, pc} - .align 2, 0 -_080581FC: .4byte gScreen -_08058200: .4byte sub_08058204 - - thumb_func_start sub_08058204 -sub_08058204: @ 0x08058204 - push {lr} - ldrb r0, [r0, #0xa] - bl sub_08058324 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08058210 -sub_08058210: @ 0x08058210 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - bl sub_08058244 - adds r3, r0, #0 - ldr r0, [r4, #0x3c] - cmp r0, r3 - beq _08058234 - str r3, [r4, #0x3c] - ldr r1, _08058238 @ =gUnk_02006F00 - ldr r2, _0805823C @ =gUnk_02001A40 - adds r0, r3, #0 - bl sub_080582A0 - ldr r1, _08058240 @ =gScreen - movs r0, #1 - strh r0, [r1, #0x1a] -_08058234: - pop {r4, pc} - .align 2, 0 -_08058238: .4byte gUnk_02006F00 -_0805823C: .4byte gUnk_02001A40 -_08058240: .4byte gScreen - - thumb_func_start sub_08058244 -sub_08058244: @ 0x08058244 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - adds r6, r0, #0 - ldr r5, _08058294 @ =gRoomControls - movs r1, #0xc - ldrsh r0, [r5, r1] - ldrh r4, [r5, #8] - subs r0, r0, r4 - lsls r0, r0, #5 - ldrh r1, [r5, #0x20] - subs r1, #0xa0 - bl __divsi3 - ldr r2, _08058298 @ =gScreen - mov r8, r2 - adds r4, r4, r0 - strh r4, [r2, #0x18] - movs r0, #0xa - ldrsh r1, [r5, r0] - ldrh r0, [r5, #6] - subs r1, r1, r0 - ldr r0, _0805829C @ =gUnk_081081EC - lsls r6, r6, #1 - adds r6, r6, r0 - ldrh r0, [r6] - muls r0, r1, r0 - ldrh r1, [r5, #0x1e] - subs r1, #0xf0 - bl __divsi3 - movs r2, #0xf - adds r1, r0, #0 - ands r1, r2 - mov r2, r8 - strh r1, [r2, #0x16] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 -_08058294: .4byte gRoomControls -_08058298: .4byte gScreen -_0805829C: .4byte gUnk_081081EC - - thumb_func_start sub_080582A0 -sub_080582A0: @ 0x080582A0 - push {r4, r5, r6, lr} - movs r4, #0x20 - lsrs r0, r0, #4 - lsls r0, r0, #2 - adds r1, r1, r0 - ldr r3, _080582C8 @ =0x040000D4 - ldr r6, _080582CC @ =0x80000020 - movs r5, #0x80 - lsls r5, r5, #1 -_080582B2: - str r1, [r3] - str r2, [r3, #4] - str r6, [r3, #8] - ldr r0, [r3, #8] - adds r1, r1, r5 - adds r2, #0x40 - subs r4, #1 - cmp r4, #0 - bne _080582B2 - pop {r4, r5, r6, pc} - .align 2, 0 -_080582C8: .4byte 0x040000D4 -_080582CC: .4byte 0x80000020 - - thumb_func_start sub_080582D0 -sub_080582D0: @ 0x080582D0 - push {r4, r5, lr} - ldr r4, _080582F4 @ =gMapDataTopSpecial - movs r0, #0x80 - lsls r0, r0, #7 - adds r5, r4, r0 - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_080582F8 - movs r0, #0x80 - lsls r0, r0, #4 - adds r4, r4, r0 - adds r5, #0x40 - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_080582F8 - pop {r4, r5, pc} - .align 2, 0 -_080582F4: .4byte gMapDataTopSpecial - - thumb_func_start sub_080582F8 -sub_080582F8: @ 0x080582F8 - push {r4, r5, r6, lr} - adds r3, r0, #0 - movs r4, #0 - ldr r2, _0805831C @ =0x040000D4 - ldr r6, _08058320 @ =0x80000020 - movs r5, #0x80 - lsls r5, r5, #1 -_08058306: - str r3, [r2] - str r1, [r2, #4] - str r6, [r2, #8] - ldr r0, [r2, #8] - adds r4, #1 - adds r3, #0x40 - adds r1, r1, r5 - cmp r4, #0x1f - bls _08058306 - pop {r4, r5, r6, pc} - .align 2, 0 -_0805831C: .4byte 0x040000D4 -_08058320: .4byte 0x80000020 - - thumb_func_start sub_08058324 -sub_08058324: @ 0x08058324 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0805836C @ =gUnk_0200B650 - movs r0, #0 - str r0, [r1] - adds r0, r4, #0 - adds r0, #0x86 - bl LoadPaletteGroup - adds r0, r4, #0 - adds r0, #0x36 - bl LoadGfxGroup - bl sub_080582D0 - adds r0, r4, #0 - bl sub_08058244 - ldr r1, _08058370 @ =gUnk_02006F00 - ldr r4, _08058374 @ =gUnk_02001A40 - adds r2, r4, #0 - bl sub_080582A0 - ldr r1, _08058378 @ =gScreen - ldr r0, _0805837C @ =0x00001D47 - strh r0, [r1, #0x14] - str r4, [r1, #0x1c] - movs r0, #1 - strh r0, [r1, #0x1a] - ldrh r2, [r1] - movs r3, #0x80 - lsls r3, r3, #2 - adds r0, r3, #0 - orrs r0, r2 - strh r0, [r1] - pop {r4, pc} - .align 2, 0 -_0805836C: .4byte gUnk_0200B650 -_08058370: .4byte gUnk_02006F00 -_08058374: .4byte gUnk_02001A40 -_08058378: .4byte gScreen -_0805837C: .4byte 0x00001D47 diff --git a/include/functions.h b/include/functions.h index 4bd2d0f7..84f7efaf 100644 --- a/include/functions.h +++ b/include/functions.h @@ -269,4 +269,5 @@ extern u32 GetTileTypeByEntity(Entity*); extern u32 sub_0800442E(Entity*); extern void sub_08081404(Entity*, u32); extern void sub_0807B7D8(u32, u32, u32); +extern void sub_08052D74(void*, void*, void*); #endif diff --git a/linker.ld b/linker.ld index 72be4378..451c0cf9 100644 --- a/linker.ld +++ b/linker.ld @@ -477,7 +477,7 @@ SECTIONS { src/manager/manager6.o(.text); src/manager/manager7.o(.text); src/manager/manager8.o(.text); - asm/manager9.o(.text); + src/manager/manager9.o(.text); src/manager/managerA.o(.text); src/manager/managerB.o(.text); asm/managerC.o(.text); diff --git a/src/manager/manager9.c b/src/manager/manager9.c new file mode 100644 index 00000000..fbf3ad56 --- /dev/null +++ b/src/manager/manager9.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "manager.h" +#include "room.h" +#include "screen.h" +#include "functions.h" + + +typedef struct { + Manager manager; + u8 unk_00[0x1C]; + u32 unk_3c; +} Manager9; + +void sub_08058204(Manager9*); +void sub_08058210(Manager9*); +u32 sub_08058244(int); +void sub_080582A0(u32, u32*, u8*); +void sub_080582F8(u8*, u8*); +void sub_08058324(); + +extern u32 gUnk_02006F00[]; +extern u8 gUnk_02001A40[]; + +extern u16 gUnk_081081EC[]; + +void sub_080581D8(Manager9* this) { + sub_08058210(this); + if (!this->manager.action) { + this->manager.action=1; + gScreen.bg.bg2yOffset=0; + sub_08052D74(this,sub_08058204,NULL); + } +} + +void sub_08058204(Manager9* this) { + sub_08058324(this->manager.unk_0a); +} + +void sub_08058210(Manager9* this) { + u32 tmp = sub_08058244(this->manager.unk_0a); + if (this->unk_3c == tmp) return; + this->unk_3c = tmp; + sub_080582A0(tmp, gUnk_02006F00, gUnk_02001A40); + gScreen.bg.bg2yOffset=1; +} + +u32 sub_08058244(int i) { + u32 tmp; + s32 tmp2; + u32 tmp3; + s32 tmp4; + tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY)*0x20)/(gRoomControls.height-0xa0); + gScreen.bg.bg2xOffset = gRoomControls.roomOriginY + tmp; + tmp = (((gRoomControls.roomScrollX - gRoomControls.roomOriginX) * gUnk_081081EC[i])/(gRoomControls.width-0xf0)); + gScreen.bg.bg1yOffset = tmp & 0xf; + return tmp; +} + +void sub_080582A0(u32 unk, u32* unk2, u8* unk3) { + int i = 0x20; + unk2 += unk>>4; + for (; i != 0; i--) { + DmaSet(3, unk2, unk3, 0x80000020); + unk2 += 0x40; + unk3 += 0x40; + } +} + +extern u8 gMapDataTopSpecial[]; + +void sub_080582D0() { + u8* tmp = gMapDataTopSpecial; + u8* tmp2 = tmp + 0x4000; + sub_080582F8(tmp, tmp2); + tmp += 0x800; + tmp2 += 0x40; + sub_080582F8(tmp, tmp2); +} + +void sub_080582F8(u8* unk, u8* unk2) { + u32 i; + for (i = 0; i < 0x20; i++, unk += 0x40, unk2 += 0x100) { + DmaSet(3, unk, unk2, 0x80000020); + } +} + +extern u32 gUnk_0200B650; + +void sub_08058324(u32 unk) { + gUnk_0200B650 = 0; + LoadPaletteGroup(unk+0x86); + LoadGfxGroup(unk+0x36); + sub_080582D0(); + sub_080582A0(sub_08058244(unk),gUnk_02006F00,gUnk_02001A40); + gScreen.bg.bg1xOffset=0x1D47; + gScreen.bg.unk_14 = gUnk_02001A40; + gScreen.bg.bg2yOffset = 1; + gScreen.lcd.displayControl |= 0x200; +}