diff --git a/asm/object/litArea.s b/asm/object/litArea.s deleted file mode 100644 index acfba2bc..00000000 --- a/asm/object/litArea.s +++ /dev/null @@ -1,134 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LitArea -LitArea: @ 0x080A2164 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080A21DC - adds r1, r4, #0 - adds r1, #0x86 - ldrh r0, [r1] - cmp r0, #0 - beq _080A2180 - bl CheckFlags - cmp r0, #0 - beq _080A224E -_080A2180: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x19] - subs r0, #0xe - ands r0, r1 - movs r1, #8 - orrs r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - movs r0, #3 - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - ldr r0, _080A21D4 @ =gRoomControls - ldrb r0, [r0, #5] - strb r0, [r4, #0xf] - movs r0, #2 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x68 - ldr r0, _080A21D8 @ =0x0000FFFE - strh r0, [r1] - adds r1, #2 - movs r0, #0x80 - strh r0, [r1] - adds r0, r4, #0 - movs r1, #0x80 - movs r2, #0x80 - movs r3, #0 - bl sub_0805EC9C - b _080A221E - .align 2, 0 -_080A21D4: .4byte gRoomControls -_080A21D8: .4byte 0x0000FFFE -_080A21DC: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080A221E - movs r0, #2 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x6a - adds r2, r4, #0 - adds r2, #0x68 - ldrh r0, [r2] - ldrh r3, [r1] - adds r0, r0, r3 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x77 - bhi _080A2208 - movs r0, #1 - strh r0, [r2] -_080A2208: - ldrh r0, [r1] - cmp r0, #0x88 - bls _080A2212 - ldr r0, _080A2250 @ =0x0000FFFF - strh r0, [r2] -_080A2212: - ldrh r2, [r1] - adds r0, r4, #0 - adds r1, r2, #0 - movs r3, #0 - bl sub_0805EC9C -_080A221E: - ldr r2, _080A2254 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #8 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - adds r2, #0x62 - ldrb r0, [r2] - movs r3, #0xdc - lsls r3, r3, #6 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _080A2258 @ =gRoomControls - ldrb r0, [r1, #5] - ldrb r4, [r4, #0xf] - cmp r0, r4 - beq _080A224E - ldrh r0, [r1] - cmp r0, #0 - bne _080A224E - bl DeleteThisEntity -_080A224E: - pop {r4, pc} - .align 2, 0 -_080A2250: .4byte 0x0000FFFF -_080A2254: .4byte gScreen -_080A2258: .4byte gRoomControls diff --git a/linker.ld b/linker.ld index 9ede4d17..4cf520b0 100644 --- a/linker.ld +++ b/linker.ld @@ -814,7 +814,7 @@ SECTIONS { asm/object/objectB9.o(.text); src/object/gyorgBossObject.o(.text); src/object/windcrest.o(.text); - asm/object/litArea.o(.text); + src/object/litArea.o(.text); asm/object/objectBD.o(.text); src/object/pinwheel.o(.text); src/object/objectBF.o(.text); diff --git a/src/object/litArea.c b/src/object/litArea.c new file mode 100644 index 00000000..06d50198 --- /dev/null +++ b/src/object/litArea.c @@ -0,0 +1,43 @@ +#include "entity.h" +#include "room.h" +#include "screen.h" +#include "flags.h" +#include "functions.h" + +void LitArea(Entity* this) { + if (this->action == 0) { + if (this->field_0x86.HWORD != 0 && CheckFlags(this->field_0x86.HWORD) == 0) { + return; + } + this->spriteSettings.draw = 1; + this->action = 1; + this->spriteRendering.alphaBlend = 2; + this->spriteRendering.b0 = 3; + this->frameIndex = 3; + this->flags |= ENT_PERSIST; + this->field_0xf = gRoomControls.room; + this->actionDelay = 2; + this->field_0x68.HWORD = 0xfffe; + this->field_0x6a.HWORD = 0x80; + sub_0805EC9C(this, 0x80, 0x80, 0); + } else { + if (--this->actionDelay == 0) { + this->actionDelay = 2; + this->field_0x6a.HWORD += this->field_0x68.HWORD; + if (this->field_0x6a.HWORD < 0x78) { + this->field_0x68.HWORD = 1; + } + if (0x88 < this->field_0x6a.HWORD) { + this->field_0x68.HWORD = 0xffff; + } + sub_0805EC9C(this, this->field_0x6a.HWORD, this->field_0x6a.HWORD, 0); + } + } + gScreen.lcd.displayControl |= DISPCNT_OBJWIN_ON; + gScreen.controls.windowOutsideControl = (gScreen.controls.windowOutsideControl & 0xff) | WINOUT_WINOBJ_BG0 | + WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_OBJ | + WINOUT_WINOBJ_CLR; + if ((gRoomControls.room != this->field_0xf) && (gRoomControls.reload_flags == 0)) { + DeleteThisEntity(); + } +}