diff --git a/asm/non_matching/manager22/Manager22_Main.inc b/asm/non_matching/manager22/Manager22_Main.inc deleted file mode 100644 index 7ff6c934..00000000 --- a/asm/non_matching/manager22/Manager22_Main.inc +++ /dev/null @@ -1,185 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r4, _0805B964 @ =gArea - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805B90A - bl sub_0801E104 - ldr r2, _0805B968 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805B96C @ =0x0000D7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805B90A: - ldrb r2, [r5, #0xc] - cmp r2, #0 - bne _0805B934 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r5, #0x10] - movs r0, #0x11 - strb r0, [r5, #0xe] - str r2, [r5, #0x20] - adds r0, r5, #0 - movs r1, #6 - bl SetDefaultPriority - bl sub_0801E120 - ldrb r0, [r5, #0xe] - bl sub_0801E154 -_0805B934: - ldr r0, _0805B970 @ =gMain - ldrb r0, [r0, #4] - cmp r0, #2 - bne _0805B952 - ldr r2, _0805B968 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - bl sub_0805BA78 - bl sub_0805BAD4 -_0805B952: - ldrb r0, [r4, #0xc] - cmp r0, #2 - bne _0805B978 - ldr r2, _0805B968 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805B974 @ =0x0000DFFF - ands r0, r1 - strh r0, [r2] - b _0805BA6C - .align 2, 0 -_0805B964: .4byte gArea -_0805B968: .4byte gScreen -_0805B96C: .4byte 0x0000D7FF -_0805B970: .4byte gMain -_0805B974: .4byte 0x0000DFFF -_0805B978: - ldr r3, _0805B9A8 @ =gPlayerEntity - movs r4, #0x2e - ldrsh r0, [r3, r4] - ldr r2, _0805B9AC @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - movs r6, #0x32 - ldrsh r1, [r3, r6] - ldrh r2, [r2, #8] - subs r1, r1, r2 - movs r2, #0 - movs r3, #0 - bl CheckRectOnScreen - cmp r0, #0 - beq _0805B9B4 - ldr r2, _0805B9B0 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #6 - adds r0, r3, #0 - orrs r0, r1 - b _0805B9BC - .align 2, 0 -_0805B9A8: .4byte gPlayerEntity -_0805B9AC: .4byte gRoomControls -_0805B9B0: .4byte gScreen -_0805B9B4: - ldr r2, _0805B9E8 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805B9EC @ =0x0000DFFF - ands r0, r1 -_0805B9BC: - strh r0, [r2] - ldrb r4, [r5, #0xe] - ldr r0, _0805B9F0 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0805BA2C - ldr r0, _0805B9F4 @ =gArea - ldrb r0, [r0, #0xc] - cmp r0, #0 - beq _0805BA2C - cmp r4, #0x47 - bhi _0805B9F8 - adds r4, #4 - adds r0, r4, #0 - bl sub_0801E154 - movs r0, #0 - str r0, [r5, #0x20] - b _0805BA42 - .align 2, 0 -_0805B9E8: .4byte gScreen -_0805B9EC: .4byte 0x0000DFFF -_0805B9F0: .4byte gPlayerState -_0805B9F4: .4byte gArea -_0805B9F8: - ldr r0, _0805BA24 @ =gRoomTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0805BA42 - ldrb r0, [r5, #0xf] - adds r0, #0x10 - strb r0, [r5, #0xf] - ldr r1, _0805BA28 @ =gSineTable - ldrb r0, [r5, #0xf] - lsls r0, r0, #1 - adds r0, r0, r1 - movs r6, #0 - ldrsh r0, [r0, r6] - asrs r0, r0, #7 - str r0, [r5, #0x20] - adds r0, r4, r0 - bl sub_0801E154 - b _0805BA42 - .align 2, 0 -_0805BA24: .4byte gRoomTransition -_0805BA28: .4byte gSineTable -_0805BA2C: - movs r0, #0 - str r0, [r5, #0x20] - cmp r4, #0x11 - bls _0805BA42 - subs r4, #4 - cmp r4, #0x10 - bhi _0805BA3C - movs r4, #0x11 -_0805BA3C: - adds r0, r4, #0 - bl sub_0801E154 -_0805BA42: - strb r4, [r5, #0xe] - ldr r3, _0805BA70 @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r3, r1] - ldr r2, _0805BA74 @ =gRoomControls - movs r6, #0xa - ldrsh r1, [r2, r6] - subs r0, r0, r1 - movs r6, #0x32 - ldrsh r1, [r3, r6] - movs r6, #0xc - ldrsh r2, [r2, r6] - subs r1, r1, r2 - movs r6, #0x36 - ldrsh r2, [r3, r6] - subs r2, #9 - adds r1, r1, r2 - ldr r2, [r5, #0x20] - adds r2, r4, r2 - bl sub_0801E160 -_0805BA6C: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805BA70: .4byte gPlayerEntity -_0805BA74: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager22/UpdateLightLevel.inc b/asm/non_matching/manager22/UpdateLightLevel.inc deleted file mode 100644 index 643afc33..00000000 --- a/asm/non_matching/manager22/UpdateLightLevel.inc +++ /dev/null @@ -1,34 +0,0 @@ - .syntax unified - push {r4, lr} - movs r4, #0 - ldr r2, _0805BBF8 @ =gArea - ldrb r0, [r2, #0xc] - cmp r0, #0 - beq _0805BBF2 - ldr r0, _0805BBFC @ =gRoomVars - movs r3, #0xc - ldrsh r1, [r0, r3] - movs r3, #0xa - ldrsh r0, [r2, r3] - cmp r1, r0 - bge _0805BBF2 - ldr r2, _0805BC00 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - bl sub_0805BA78 - adds r4, r0, #0 - cmp r4, #0 - beq _0805BBF2 - bl sub_0805BAD4 -_0805BBF2: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_0805BBF8: .4byte gArea -_0805BBFC: .4byte gRoomVars -_0805BC00: .4byte gScreen - .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BA78.inc b/asm/non_matching/manager22/sub_0805BA78.inc deleted file mode 100644 index 394c19ef..00000000 --- a/asm/non_matching/manager22/sub_0805BA78.inc +++ /dev/null @@ -1,55 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r1, _0805BAA8 @ =gArea - movs r0, #0xa - ldrsh r3, [r1, r0] - ldr r0, _0805BAAC @ =gRoomVars - movs r4, #0xc - ldrsh r2, [r0, r4] - cmp r2, #0 - bge _0805BA8C - movs r2, #0 -_0805BA8C: - movs r0, #0x80 - lsls r0, r0, #1 - cmp r2, r0 - ble _0805BA96 - adds r2, r0, #0 -_0805BA96: - cmp r3, r2 - beq _0805BACE - subs r0, r2, r3 - cmp r0, #0 - blt _0805BAB0 - cmp r0, #4 - bls _0805BAB6 - b _0805BABA - .align 2, 0 -_0805BAA8: .4byte gArea -_0805BAAC: .4byte gRoomVars -_0805BAB0: - subs r0, r3, r2 - cmp r0, #4 - bhi _0805BABA -_0805BAB6: - adds r3, r2, #0 - b _0805BAC8 -_0805BABA: - cmp r2, r3 - bge _0805BAC2 - subs r3, #4 - b _0805BAC8 -_0805BAC2: - cmp r2, r3 - ble _0805BAC8 - adds r3, #4 -_0805BAC8: - strh r3, [r1, #0xa] - movs r0, #1 - b _0805BAD0 -_0805BACE: - movs r0, #0 -_0805BAD0: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BAD4.inc b/asm/non_matching/manager22/sub_0805BAD4.inc deleted file mode 100644 index 516edb52..00000000 --- a/asm/non_matching/manager22/sub_0805BAD4.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {lr} - ldr r3, _0805BAF4 @ =gArea - ldrb r0, [r3, #0xc] - cmp r0, #0 - beq _0805BAF2 - ldr r1, _0805BAF8 @ =gScreen - ldr r2, _0805BAFC @ =gUnk_08108CA8 - ldrh r0, [r3, #0xa] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - adds r1, #0x68 - strh r0, [r1] -_0805BAF2: - pop {pc} - .align 2, 0 -_0805BAF4: .4byte gArea -_0805BAF8: .4byte gScreen -_0805BAFC: .4byte gUnk_08108CA8 - .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BB00.inc b/asm/non_matching/manager22/sub_0805BB00.inc deleted file mode 100644 index 52849cd7..00000000 --- a/asm/non_matching/manager22/sub_0805BB00.inc +++ /dev/null @@ -1,54 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldr r0, _0805BB50 @ =gArea - ldrb r0, [r0, #0xc] - cmp r0, #0 - bne _0805BB28 - bl GetEmptyManager - adds r1, r0, #0 - cmp r1, #0 - beq _0805BB28 - movs r0, #9 - strb r0, [r1, #8] - movs r0, #0x22 - strb r0, [r1, #9] - adds r0, r1, #0 - movs r1, #0 - bl AppendEntityToList -_0805BB28: - ldr r1, _0805BB54 @ =0x0600F000 - movs r2, #0x80 - lsls r2, r2, #4 - movs r0, #0xf - bl MemFill16 - ldr r0, _0805BB58 @ =gScreen - ldr r1, _0805BB5C @ =0x00001E0C - strh r1, [r0, #0x2c] - adds r0, #0x66 - ldr r1, _0805BB60 @ =0x00003E48 - strh r1, [r0] - ldr r0, _0805BB64 @ =gRoomVars - strh r4, [r0, #0xc] - cmp r5, #0 - beq _0805BB68 - ldr r1, _0805BB50 @ =gArea - movs r0, #1 - b _0805BB6C - .align 2, 0 -_0805BB50: .4byte gArea -_0805BB54: .4byte 0x0600F000 -_0805BB58: .4byte gScreen -_0805BB5C: .4byte 0x00001E0C -_0805BB60: .4byte 0x00003E48 -_0805BB64: .4byte gRoomVars -_0805BB68: - ldr r1, _0805BB70 @ =gArea - movs r0, #2 -_0805BB6C: - strb r0, [r1, #0xc] - pop {r4, r5, pc} - .align 2, 0 -_0805BB70: .4byte gArea - .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BB74.inc b/asm/non_matching/manager22/sub_0805BB74.inc deleted file mode 100644 index cd3b7362..00000000 --- a/asm/non_matching/manager22/sub_0805BB74.inc +++ /dev/null @@ -1,34 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldr r2, _0805BBB0 @ =gRoomVars - cmp r1, #0 - bge _0805BB82 - movs r0, #0xc - ldrsh r1, [r2, r0] -_0805BB82: - ldr r0, _0805BBB4 @ =gArea - strh r1, [r0, #0xa] - strh r1, [r2, #0xc] - movs r0, #9 - movs r1, #0x22 - bl DeepFindEntityByID - cmp r0, #0 - beq _0805BBAE - bl Manager22_Main - ldr r0, _0805BBB8 @ =gScreen - ldrh r1, [r0] - movs r3, #0x80 - lsls r3, r3, #4 - adds r2, r3, #0 - orrs r1, r2 - strh r1, [r0] - bl sub_0805BA78 - bl sub_0805BAD4 -_0805BBAE: - pop {pc} - .align 2, 0 -_0805BBB0: .4byte gRoomVars -_0805BBB4: .4byte gArea -_0805BBB8: .4byte gScreen - .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BC04.inc b/asm/non_matching/manager22/sub_0805BC04.inc deleted file mode 100644 index f74987d1..00000000 --- a/asm/non_matching/manager22/sub_0805BC04.inc +++ /dev/null @@ -1,34 +0,0 @@ - .syntax unified - push {r4, lr} - movs r4, #0 - ldr r2, _0805BC40 @ =gArea - ldrb r0, [r2, #0xc] - cmp r0, #0 - beq _0805BC3A - ldr r0, _0805BC44 @ =gRoomVars - movs r3, #0xc - ldrsh r1, [r0, r3] - movs r3, #0xa - ldrsh r0, [r2, r3] - cmp r1, r0 - ble _0805BC3A - ldr r2, _0805BC48 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - bl sub_0805BA78 - adds r4, r0, #0 - cmp r4, #0 - beq _0805BC3A - bl sub_0805BAD4 -_0805BC3A: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_0805BC40: .4byte gArea -_0805BC44: .4byte gRoomVars -_0805BC48: .4byte gScreen - .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BC4C.inc b/asm/non_matching/manager22/sub_0805BC4C.inc deleted file mode 100644 index 8ff50b9c..00000000 --- a/asm/non_matching/manager22/sub_0805BC4C.inc +++ /dev/null @@ -1,20 +0,0 @@ - .syntax unified - push {lr} - ldr r1, _0805BC68 @ =gArea - ldrb r0, [r1, #0xc] - cmp r0, #0 - beq _0805BC64 - movs r0, #0 - strb r0, [r1, #0xc] - ldr r2, _0805BC6C @ =gScreen - ldrh r1, [r2] - ldr r0, _0805BC70 @ =0x0000D7FF - ands r0, r1 - strh r0, [r2] -_0805BC64: - pop {pc} - .align 2, 0 -_0805BC68: .4byte gArea -_0805BC6C: .4byte gScreen -_0805BC70: .4byte 0x0000D7FF - .syntax divided diff --git a/assets/assets.json b/assets/assets.json index f5ae7dc1..1107a55b 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -33232,11 +33232,6 @@ "start": 1084572, "size": 12 }, - { - "path": "manager22/gUnk_08108CA8.bin", - "start": 1084584, - "size": 36 - }, { "path": "manager24/gUnk_08108CFC.bin", "start": 1084668, diff --git a/data/const/manager/manager22.s b/data/const/manager/manager22.s deleted file mode 100644 index 1c056de8..00000000 --- a/data/const/manager/manager22.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08108CA8:: @ 08108CA8 - .incbin "manager22/gUnk_08108CA8.bin" diff --git a/include/area.h b/include/area.h index b0869bb6..7531f3ab 100644 --- a/include/area.h +++ b/include/area.h @@ -26,8 +26,10 @@ typedef struct { u8 dungeon_idx; /* same index as global flags for dungeons */ u16 localFlagOffset; u8 filler[4]; - u16 unk_0a; - u8 filler3[4]; + u16 lightLevel; + u8 unk_0b; + u8 unk_0c; + u8 filler3[2]; u16 field_0x10; u16 curPortalX; u16 curPortalY; diff --git a/linker.ld b/linker.ld index dad5e304..96e561c0 100644 --- a/linker.ld +++ b/linker.ld @@ -1163,7 +1163,7 @@ SECTIONS { data/const/manager/manager1D.o(.rodata); src/manager/manager1E.o(.rodata); data/const/manager/manager1F.o(.rodata); - data/const/manager/manager22.o(.rodata); + src/manager/manager22.o(.rodata); data/const/manager/manager23.o(.rodata); data/const/manager/manager24.o(.rodata); src/manager/manager26.o(.rodata); diff --git a/src/enemy/enemy50.c b/src/enemy/enemy50.c index e248ec16..a77fdec3 100644 --- a/src/enemy/enemy50.c +++ b/src/enemy/enemy50.c @@ -355,7 +355,7 @@ bool32 sub_08041170(Enemy50Entity* this) { } else { if ((sub_08049FDC(super, 1)) && ((sub_0806FD54(super) || - ((0xf < (s16)gArea.unk_0a && (EntityInRectRadius(super, gUnk_020000B0, 0x70, 0x48))))))) { + ((0xf < (s16)gArea.lightLevel && (EntityInRectRadius(super, gUnk_020000B0, 0x70, 0x48))))))) { sub_08041134(this); return TRUE; } @@ -378,7 +378,7 @@ bool32 sub_080411E8(Enemy50Entity* this) { } return TRUE; case 2: - if ((s16)gArea.unk_0a < 0x10) { + if ((s16)gArea.lightLevel < 0x10) { return FALSE; } return TRUE; diff --git a/src/enemy/ghini.c b/src/enemy/ghini.c index 371c4917..caf0e985 100644 --- a/src/enemy/ghini.c +++ b/src/enemy/ghini.c @@ -320,7 +320,7 @@ bool32 sub_0803F5A8(GhiniEntity* this) { u32 result; if (sub_08049FDC(super, 1) == 0) { result = 0; - } else if ((s16)gArea.unk_0a < 0x10) { + } else if ((s16)gArea.lightLevel < 0x10) { result = sub_0806FD54(super); } else { result = 1; @@ -334,7 +334,7 @@ bool32 sub_0803F5D4(GhiniEntity* this) { } else { if ((sub_08049FDC(super, 1)) && ((sub_0806FD54(super) || - ((0xf < (s16)gArea.unk_0a && (EntityInRectRadius(super, gUnk_020000B0, 0x70, 0x48))))))) { + ((0xf < (s16)gArea.lightLevel && (EntityInRectRadius(super, gUnk_020000B0, 0x70, 0x48))))))) { sub_0803F630(this); return TRUE; } diff --git a/src/game.c b/src/game.c index 009c9859..f5baaa08 100644 --- a/src/game.c +++ b/src/game.c @@ -1331,7 +1331,7 @@ void InitRoom(void) { gArea.localFlagOffset = gLocalFlagBanks[a_hdr->flag_bank]; gArea.filler[0] = a_hdr->flag_bank; gArea.unk1A = 180; - gArea.unk_0a = 256; + gArea.lightLevel = 256; InitRoomTransition(); InitAllRoomResInfo(); } @@ -1412,7 +1412,7 @@ static void UpdateFakeScroll(void) { LinkedList* ll; Entity* e; - if ((gArea.filler3[1] & 1) == 0 || !gRoomVars.field_0x0) + if ((gArea.unk_0c & 1) == 0 || !gRoomVars.field_0x0) return; y = 0; diff --git a/src/manager/manager22.c b/src/manager/manager22.c index 5faa1a2c..4d6130cc 100644 --- a/src/manager/manager22.c +++ b/src/manager/manager22.c @@ -1,18 +1,204 @@ #include "manager.h" +#include "area.h" +#include "main.h" +#include "screen.h" +#include "player.h" +#include "room.h" +#include "coord.h" +#include "functions.h" +#include "common.h" -ASM_FUNC("asm/non_matching/manager22/Manager22_Main.inc", void Manager22_Main()) +typedef struct { + Manager manager; + s32 unk20; +} Manager22; -ASM_FUNC("asm/non_matching/manager22/sub_0805BA78.inc", void sub_0805BA78()) +extern void sub_0801E120(void); +extern void sub_0801E154(u32); +extern u32 CheckRectOnScreen(s32, s32, u32, u32); +extern void sub_0801E160(u32, u32, u32); -ASM_FUNC("asm/non_matching/manager22/sub_0805BAD4.inc", void sub_0805BAD4()) +u32 sub_0805BA78(); +void sub_0805BAD4(); -ASM_FUNC("asm/non_matching/manager22/sub_0805BB00.inc", void sub_0805BB00()) +void Manager22_Main(Manager22* this) { + s32 sVar1; + u32 uVar3; -ASM_FUNC("asm/non_matching/manager22/sub_0805BB74.inc", void sub_0805BB74()) + if (gArea.unk_0b == 0) { + sub_0801E104(); + gScreen.lcd.displayControl &= ~(DISPCNT_BG3_ON | DISPCNT_WIN0_ON); + DeleteThisEntity(); + } + if (this->manager.action == 0) { + this->manager.action = 1; + this->manager.unk_10 |= 0x20; + this->manager.unk_0e = 17; + this->unk20 = 0; + SetDefaultPriority((Entity*)this, 6); + sub_0801E120(); + sub_0801E154(this->manager.unk_0e); + } + if (gMain.substate == 2) { + gScreen.lcd.displayControl |= DISPCNT_BG3_ON; + sub_0805BA78(); + sub_0805BAD4(); + } + if (gArea.unk_0b == 2) { + gScreen.lcd.displayControl &= ~DISPCNT_WIN0_ON; + } else { + if (CheckRectOnScreen(gPlayerEntity.x.HALF.HI - gRoomControls.origin_x, + gPlayerEntity.y.HALF.HI - gRoomControls.origin_y, 0, 0)) { + gScreen.lcd.displayControl |= DISPCNT_WIN0_ON; + } else { + gScreen.lcd.displayControl &= ~DISPCNT_WIN0_ON; + } + uVar3 = this->manager.unk_0e; + if (((gPlayerState.flags & PL_USE_LANTERN)) && (gArea.unk_0b)) { + if (uVar3 < 0x48) { + uVar3 += 4; + sub_0801E154(uVar3); + this->unk20 = 0; + } else if ((gRoomTransition.frameCount & 3) == 0) { + this->manager.unk_0f += 0x10; + sVar1 = gSineTable[this->manager.unk_0f]; + this->unk20 = sVar1 >> 7; + sub_0801E154(uVar3 + this->unk20); + } + } else { + this->unk20 = 0; + if (0x11 < uVar3) { + uVar3 -= 4; + if (uVar3 < 0x11) { + uVar3 = 0x11; + } + sub_0801E154(uVar3); + } + } -ASM_FUNC("asm/non_matching/manager22/UpdateLightLevel.inc", void UpdateLightLevel()) + this->manager.unk_0e = uVar3; + sub_0801E160(gPlayerEntity.x.HALF.HI - gRoomControls.scroll_x, + gPlayerEntity.y.HALF.HI - gRoomControls.scroll_y - 9 + gPlayerEntity.z.HALF.HI, + uVar3 + this->unk20); + } +} -ASM_FUNC("asm/non_matching/manager22/sub_0805BC04.inc", void sub_0805BC04()) +#define ABS(x) ((unsigned)(x < 0 ? -(x) : x)) -ASM_FUNC("asm/non_matching/manager22/sub_0805BC4C.inc", void sub_0805BC4C()) +u32 sub_0805BA78() { + u32 uVar1; + s32 iVar1; + s32 iVar2; + + iVar2 = (short)gArea.lightLevel; + iVar1 = gRoomVars.lightLevel; + + if (iVar1 < 0) { + iVar1 = 0; + } + + if (0x100 < iVar1) { + iVar1 = 0x100; + } + + if (iVar2 != iVar1) { + if (ABS(iVar1 - iVar2) <= 4) { + iVar2 = iVar1; + } else { + if (iVar1 < iVar2) { + iVar2 = iVar2 - 4; + } else { + if (iVar1 > iVar2) { + iVar2 = iVar2 + 4; + } + } + } + gArea.lightLevel = iVar2; + } else { + return 0; + } + return 1; +} + +extern u16 gUnk_08108CA8[]; + +void sub_0805BAD4() { + static const u16 gUnk_08108CA8[] = { 0x10, 0x10f, 0x20e, 0x30d, 0x40c, 0x50b, 0x60a, 0x709, 0x808, + 0x907, 0xa06, 0xb05, 0xc04, 0xd03, 0xe02, 0xf01, 0x1000, 0x00 }; + if (gArea.unk_0b) { + gScreen.controls.alphaBlend = gUnk_08108CA8[(gArea.lightLevel << 0x10) >> 0x14]; + } +} + +void sub_0805BB00(s32 lightLevel, s32 param_2) { + if (gArea.unk_0b == 0) { + Manager* pManager = GetEmptyManager(); + if (pManager != 0) { + pManager->type = 9; + pManager->subtype = 34; + AppendEntityToList((Entity*)pManager, 0); + } + } + MemFill16(0xf, BG_SCREEN_ADDR(0x1E), BG_SCREEN_SIZE); + gScreen.bg3.control = 0x1e0c; + gScreen.controls.layerFXControl = 0x3e48; + gRoomVars.lightLevel = lightLevel; + if (param_2) { + gArea.unk_0b = 1; + } else { + gArea.unk_0b = 2; + } +} + +void sub_0805BB74(s32 lightLevel) { + Manager22* manager; + + if (lightLevel < 0) { + lightLevel = gRoomVars.lightLevel; + } + gArea.lightLevel = lightLevel; + gRoomVars.lightLevel = gArea.lightLevel; + manager = (Manager22*)DeepFindEntityByID(9, 0x22); + if (manager) { + Manager22_Main(manager); + gScreen.lcd.displayControl |= DISPCNT_BG3_ON; + sub_0805BA78(); + sub_0805BAD4(); + } +} + +s32 UpdateLightLevel() { + s32 iVar1; + + iVar1 = 0; + if (gArea.unk_0b && gRoomVars.lightLevel < (s16)gArea.lightLevel) { + gScreen.lcd.displayControl |= DISPCNT_BG3_ON; + iVar1 = sub_0805BA78(); + if (iVar1) { + sub_0805BAD4(); + } + } + return iVar1; +} + +s32 sub_0805BC04(void) { + s32 iVar1; + + iVar1 = 0; + if (gArea.unk_0b && gRoomVars.lightLevel > (short)gArea.lightLevel) { + gScreen.lcd.displayControl |= DISPCNT_BG3_ON; + iVar1 = sub_0805BA78(); + if (iVar1) { + sub_0805BAD4(); + } + } + return iVar1; +} + +void sub_0805BC4C() { + if (gArea.unk_0b != 0) { + gArea.unk_0b = 0; + gScreen.lcd.displayControl &= ~(DISPCNT_BG3_ON | DISPCNT_WIN0_ON); + } +} diff --git a/src/manager/managerF.c b/src/manager/managerF.c index 39f3ca47..f1cc1aca 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -280,7 +280,7 @@ void sub_08059220(ManagerF* this) { } if (!this->manager.action) { this->manager.action = 1; - gArea.unk_0a = gRoomVars.lightLevel; + gArea.lightLevel = gRoomVars.lightLevel; } }