From 5868c3c461d66a1b74aad31ee552b397ea171bf4 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Sun, 26 Apr 2026 23:18:03 -0400 Subject: [PATCH] Decomped GetFadeStatus Decomped by @JesusArcasCarrera --- asm/include/main_0200BC60.inc | 8 - asm/include/main_0200BD50.inc | 9 ++ asm/main_0200BC60.s | 274 ---------------------------------- asm/main_0200BD50.s | 265 ++++++++++++++++++++++++++++++++ include/main_0200BD2C.h | 8 + main.lsf | 2 + src/main_0200BD2C.c | 11 ++ 7 files changed, 295 insertions(+), 282 deletions(-) create mode 100644 asm/include/main_0200BD50.inc create mode 100644 asm/main_0200BD50.s create mode 100644 include/main_0200BD2C.h create mode 100644 src/main_0200BD2C.c diff --git a/asm/include/main_0200BC60.inc b/asm/include/main_0200BC60.inc index 3039bbf0..cb11af81 100644 --- a/asm/include/main_0200BC60.inc +++ b/asm/include/main_0200BC60.inc @@ -1,11 +1,3 @@ #pragma once -.public HandleFades .public UpdateFadeStatus -.public sub_0200A29C -.public sub_0200A37C -.public sub_0200A3A8 -.public sub_0200A3DC -.public sub_0200A410 -.public sub_0200A444 -.public sub_0200A590 .public sub_0200B928 diff --git a/asm/include/main_0200BD50.inc b/asm/include/main_0200BD50.inc new file mode 100644 index 00000000..3c17fcc5 --- /dev/null +++ b/asm/include/main_0200BD50.inc @@ -0,0 +1,9 @@ +#pragma once +.public HandleFades +.public sub_0200A29C +.public sub_0200A37C +.public sub_0200A3A8 +.public sub_0200A3DC +.public sub_0200A410 +.public sub_0200A444 +.public sub_0200A590 diff --git a/asm/main_0200BC60.s b/asm/main_0200BC60.s index 7223ceca..9f2ca797 100644 --- a/asm/main_0200BC60.s +++ b/asm/main_0200BC60.s @@ -70,277 +70,3 @@ sub_0200BD14: ; 0x0200BD14 and r0, r0, #0xff bx lr arm_func_end sub_0200BD14 - - arm_func_start GetFadeStatus -GetFadeStatus: ; 0x0200BD2C - ldrsh r1, [r0, #0x10] - mvn r0, #0xff - cmp r1, r0 - moveq r0, #1 - bxeq lr - cmp r1, #0x100 - moveq r0, #2 - movne r0, #0 - bx lr - arm_func_end GetFadeStatus - - arm_func_start sub_0200BD50 -sub_0200BD50: ; 0x0200BD50 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - ldr r0, [r4] - cmp r0, #0 - ldreq r0, [r4, #4] - cmpeq r0, #0 - beq _0200C000 - mov r0, r4 - bl HandleFades - cmp r0, #0 - beq _0200BF90 - ldr r0, [r4] - cmp r0, #0xb - addls pc, pc, r0, lsl #2 - b _0200C000 -_0200BD90: ; jump table - b _0200C000 ; case 0 - b _0200BDC0 ; case 1 - b _0200BDDC ; case 2 - b _0200BDFC ; case 3 - b _0200BE10 ; case 4 - b _0200BE30 ; case 5 - b _0200BE44 ; case 6 - b _0200BEB0 ; case 7 - b _0200BE44 ; case 8 - b _0200BEB0 ; case 9 - b _0200BF10 ; case 10 - b _0200BF54 ; case 11 -_0200BDC0: - ldrsh r1, [r4, #0x14] - add r0, r4, #0x1c - add r1, r1, #0x100 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl sub_0200A37C - b _0200C000 -_0200BDDC: - ldrsh r1, [r4, #0x14] - add r0, r4, #0x1c - add r2, r4, #0x16 - rsb r1, r1, #0x100 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl sub_0200A3A8 - b _0200C000 -_0200BDFC: - ldrh r1, [r4, #0x14] - add r0, r4, #0x1c - add r2, r4, #0x16 - bl sub_0200A3DC - b _0200C000 -_0200BE10: - ldrsh r1, [r4, #0x14] - add r0, r4, #0x1c - add r2, r4, #0x16 - rsb r1, r1, #0x100 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl sub_0200A410 - b _0200C000 -_0200BE30: - ldrh r1, [r4, #0x14] - add r0, r4, #0x1c - add r2, r4, #0x16 - bl sub_0200A444 - b _0200C000 -_0200BE44: - cmp r0, #6 - beq _0200BE58 - cmp r0, #8 - beq _0200BE74 - b _0200BE90 -_0200BE58: - mov r1, #0x90 - mov r0, #0xff - strb r1, [sp] - strb r1, [sp, #1] - strb r0, [sp, #2] - strb r0, [sp, #3] - b _0200BE90 -_0200BE74: - mov r2, #0xff - mov r1, #0xc0 - mov r0, #0x80 - strb r2, [sp] - strb r1, [sp, #1] - strb r0, [sp, #2] - strb r2, [sp, #3] -_0200BE90: - ldrsh r1, [r4, #0x14] - add r2, sp, #0 - add r0, r4, #0x1c - rsb r1, r1, #0x100 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl sub_0200A410 - b _0200C000 -_0200BEB0: - cmp r0, #7 - beq _0200BEC4 - cmp r0, #9 - beq _0200BEE0 - b _0200BEFC -_0200BEC4: - mov r1, #0x90 - mov r0, #0xff - strb r1, [sp] - strb r1, [sp, #1] - strb r0, [sp, #2] - strb r0, [sp, #3] - b _0200BEFC -_0200BEE0: - mov r2, #0xff - mov r1, #0xc0 - mov r0, #0x80 - strb r2, [sp] - strb r1, [sp, #1] - strb r0, [sp, #2] - strb r2, [sp, #3] -_0200BEFC: - ldrh r1, [r4, #0x14] - add r2, sp, #0 - add r0, r4, #0x1c - bl sub_0200A444 - b _0200C000 -_0200BF10: - mov r0, #0xff - strb r0, [sp] - strb r0, [sp, #1] - strb r0, [sp, #2] - strb r0, [sp, #3] - ldrsh r1, [r4, #0x14] - add r2, sp, #0 - add r0, r4, #0x1c - add r3, r1, r1, lsl #1 - mov r1, r3, asr #1 - add r1, r3, r1, lsr #30 - mov r1, r1, asr #2 - rsb r1, r1, #0x100 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl sub_0200A3A8 - b _0200C000 -_0200BF54: - mov r0, #0xff - strb r0, [sp] - strb r0, [sp, #1] - strb r0, [sp, #2] - strb r0, [sp, #3] - ldrsh r1, [r4, #0x14] - add r2, sp, #0 - add r0, r4, #0x1c - rsb r3, r1, #0x100 - mov r1, r3, asr #1 - add r1, r3, r1, lsr #30 - mov r1, r1, lsl #0xe - mov r1, r1, lsr #0x10 - bl sub_0200A3A8 - b _0200C000 -_0200BF90: - ldr r0, [r4, #4] - cmp r0, #0 - bne _0200C000 - ldr r0, [r4] - cmp r0, #0xb - addls pc, pc, r0, lsl #2 - b _0200C000 -_0200BFAC: ; jump table - b _0200C000 ; case 0 - b _0200C000 ; case 1 - b _0200BFDC ; case 2 - b _0200BFF0 ; case 3 - b _0200BFDC ; case 4 - b _0200BFF0 ; case 5 - b _0200BFDC ; case 6 - b _0200BFF0 ; case 7 - b _0200BFDC ; case 8 - b _0200BFF0 ; case 9 - b _0200BFDC ; case 10 - b _0200BFF0 ; case 11 -_0200BFDC: - ldrsh r0, [r4, #0x14] - cmp r0, #0x100 - movge r0, #0 - strge r0, [r4] - b _0200C000 -_0200BFF0: - ldrsh r0, [r4, #0x14] - cmp r0, #0 - movle r0, #0 - strle r0, [r4] -_0200C000: - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - arm_func_end sub_0200BD50 - - arm_func_start sub_0200C008 -sub_0200C008: ; 0x0200C008 - ldr ip, _0200C01C ; =sub_0200A29C - mov r3, r2, lsl #0x10 - mov r2, r1 - mov r1, r3, lsr #0x10 - bx ip - .align 2, 0 -_0200C01C: .word sub_0200A29C - arm_func_end sub_0200C008 - - arm_func_start sub_0200C020 -sub_0200C020: ; 0x0200C020 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - ldr ip, [sp, #0x10] - cmp ip, #0 - beq _0200C084 - ldrb lr, [r1] - mov r4, #0xff - ldrb lr, [ip, lr, lsl #2] - mul lr, r3, lr - mov lr, lr, lsr #5 - strb lr, [sp] - ldrb lr, [r1, #1] - add lr, ip, lr, lsl #2 - ldrb lr, [lr, #1] - mul lr, r3, lr - mov lr, lr, lsr #5 - strb lr, [sp, #1] - ldrb r1, [r1, #2] - add r1, ip, r1, lsl #2 - ldrb r1, [r1, #2] - mul r1, r3, r1 - mov r1, r1, lsr #5 - strb r1, [sp, #2] - strb r4, [sp, #3] - b _0200C0BC -_0200C084: - ldrb r4, [r1] - mov ip, #0xff - mul lr, r4, r3 - mov r4, lr, lsr #5 - strb r4, [sp] - ldrb lr, [r1, #1] - mul r4, lr, r3 - mov r4, r4, lsr #5 - strb r4, [sp, #1] - ldrb r1, [r1, #2] - mul r3, r1, r3 - mov r1, r3, lsr #5 - strb r1, [sp, #2] - strb ip, [sp, #3] -_0200C0BC: - mov r1, r2, lsl #0x10 - add r2, sp, #0 - mov r1, r1, lsr #0x10 - bl sub_0200A590 - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - arm_func_end sub_0200C020 diff --git a/asm/main_0200BD50.s b/asm/main_0200BD50.s new file mode 100644 index 00000000..95c568b1 --- /dev/null +++ b/asm/main_0200BD50.s @@ -0,0 +1,265 @@ + .include "asm/macros.inc" + .include "main_0200BD50.inc" + + .text + + arm_func_start sub_0200BD50 +sub_0200BD50: ; 0x0200BD50 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r0, [r4] + cmp r0, #0 + ldreq r0, [r4, #4] + cmpeq r0, #0 + beq _0200C000 + mov r0, r4 + bl HandleFades + cmp r0, #0 + beq _0200BF90 + ldr r0, [r4] + cmp r0, #0xb + addls pc, pc, r0, lsl #2 + b _0200C000 +_0200BD90: ; jump table + b _0200C000 ; case 0 + b _0200BDC0 ; case 1 + b _0200BDDC ; case 2 + b _0200BDFC ; case 3 + b _0200BE10 ; case 4 + b _0200BE30 ; case 5 + b _0200BE44 ; case 6 + b _0200BEB0 ; case 7 + b _0200BE44 ; case 8 + b _0200BEB0 ; case 9 + b _0200BF10 ; case 10 + b _0200BF54 ; case 11 +_0200BDC0: + ldrsh r1, [r4, #0x14] + add r0, r4, #0x1c + add r1, r1, #0x100 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl sub_0200A37C + b _0200C000 +_0200BDDC: + ldrsh r1, [r4, #0x14] + add r0, r4, #0x1c + add r2, r4, #0x16 + rsb r1, r1, #0x100 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl sub_0200A3A8 + b _0200C000 +_0200BDFC: + ldrh r1, [r4, #0x14] + add r0, r4, #0x1c + add r2, r4, #0x16 + bl sub_0200A3DC + b _0200C000 +_0200BE10: + ldrsh r1, [r4, #0x14] + add r0, r4, #0x1c + add r2, r4, #0x16 + rsb r1, r1, #0x100 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl sub_0200A410 + b _0200C000 +_0200BE30: + ldrh r1, [r4, #0x14] + add r0, r4, #0x1c + add r2, r4, #0x16 + bl sub_0200A444 + b _0200C000 +_0200BE44: + cmp r0, #6 + beq _0200BE58 + cmp r0, #8 + beq _0200BE74 + b _0200BE90 +_0200BE58: + mov r1, #0x90 + mov r0, #0xff + strb r1, [sp] + strb r1, [sp, #1] + strb r0, [sp, #2] + strb r0, [sp, #3] + b _0200BE90 +_0200BE74: + mov r2, #0xff + mov r1, #0xc0 + mov r0, #0x80 + strb r2, [sp] + strb r1, [sp, #1] + strb r0, [sp, #2] + strb r2, [sp, #3] +_0200BE90: + ldrsh r1, [r4, #0x14] + add r2, sp, #0 + add r0, r4, #0x1c + rsb r1, r1, #0x100 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl sub_0200A410 + b _0200C000 +_0200BEB0: + cmp r0, #7 + beq _0200BEC4 + cmp r0, #9 + beq _0200BEE0 + b _0200BEFC +_0200BEC4: + mov r1, #0x90 + mov r0, #0xff + strb r1, [sp] + strb r1, [sp, #1] + strb r0, [sp, #2] + strb r0, [sp, #3] + b _0200BEFC +_0200BEE0: + mov r2, #0xff + mov r1, #0xc0 + mov r0, #0x80 + strb r2, [sp] + strb r1, [sp, #1] + strb r0, [sp, #2] + strb r2, [sp, #3] +_0200BEFC: + ldrh r1, [r4, #0x14] + add r2, sp, #0 + add r0, r4, #0x1c + bl sub_0200A444 + b _0200C000 +_0200BF10: + mov r0, #0xff + strb r0, [sp] + strb r0, [sp, #1] + strb r0, [sp, #2] + strb r0, [sp, #3] + ldrsh r1, [r4, #0x14] + add r2, sp, #0 + add r0, r4, #0x1c + add r3, r1, r1, lsl #1 + mov r1, r3, asr #1 + add r1, r3, r1, lsr #30 + mov r1, r1, asr #2 + rsb r1, r1, #0x100 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl sub_0200A3A8 + b _0200C000 +_0200BF54: + mov r0, #0xff + strb r0, [sp] + strb r0, [sp, #1] + strb r0, [sp, #2] + strb r0, [sp, #3] + ldrsh r1, [r4, #0x14] + add r2, sp, #0 + add r0, r4, #0x1c + rsb r3, r1, #0x100 + mov r1, r3, asr #1 + add r1, r3, r1, lsr #30 + mov r1, r1, lsl #0xe + mov r1, r1, lsr #0x10 + bl sub_0200A3A8 + b _0200C000 +_0200BF90: + ldr r0, [r4, #4] + cmp r0, #0 + bne _0200C000 + ldr r0, [r4] + cmp r0, #0xb + addls pc, pc, r0, lsl #2 + b _0200C000 +_0200BFAC: ; jump table + b _0200C000 ; case 0 + b _0200C000 ; case 1 + b _0200BFDC ; case 2 + b _0200BFF0 ; case 3 + b _0200BFDC ; case 4 + b _0200BFF0 ; case 5 + b _0200BFDC ; case 6 + b _0200BFF0 ; case 7 + b _0200BFDC ; case 8 + b _0200BFF0 ; case 9 + b _0200BFDC ; case 10 + b _0200BFF0 ; case 11 +_0200BFDC: + ldrsh r0, [r4, #0x14] + cmp r0, #0x100 + movge r0, #0 + strge r0, [r4] + b _0200C000 +_0200BFF0: + ldrsh r0, [r4, #0x14] + cmp r0, #0 + movle r0, #0 + strle r0, [r4] +_0200C000: + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + arm_func_end sub_0200BD50 + + arm_func_start sub_0200C008 +sub_0200C008: ; 0x0200C008 + ldr ip, _0200C01C ; =sub_0200A29C + mov r3, r2, lsl #0x10 + mov r2, r1 + mov r1, r3, lsr #0x10 + bx ip + .align 2, 0 +_0200C01C: .word sub_0200A29C + arm_func_end sub_0200C008 + + arm_func_start sub_0200C020 +sub_0200C020: ; 0x0200C020 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + ldr ip, [sp, #0x10] + cmp ip, #0 + beq _0200C084 + ldrb lr, [r1] + mov r4, #0xff + ldrb lr, [ip, lr, lsl #2] + mul lr, r3, lr + mov lr, lr, lsr #5 + strb lr, [sp] + ldrb lr, [r1, #1] + add lr, ip, lr, lsl #2 + ldrb lr, [lr, #1] + mul lr, r3, lr + mov lr, lr, lsr #5 + strb lr, [sp, #1] + ldrb r1, [r1, #2] + add r1, ip, r1, lsl #2 + ldrb r1, [r1, #2] + mul r1, r3, r1 + mov r1, r1, lsr #5 + strb r1, [sp, #2] + strb r4, [sp, #3] + b _0200C0BC +_0200C084: + ldrb r4, [r1] + mov ip, #0xff + mul lr, r4, r3 + mov r4, lr, lsr #5 + strb r4, [sp] + ldrb lr, [r1, #1] + mul r4, lr, r3 + mov r4, r4, lsr #5 + strb r4, [sp, #1] + ldrb r1, [r1, #2] + mul r3, r1, r3 + mov r1, r3, lsr #5 + strb r1, [sp, #2] + strb ip, [sp, #3] +_0200C0BC: + mov r1, r2, lsl #0x10 + add r2, sp, #0 + mov r1, r1, lsr #0x10 + bl sub_0200A590 + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + arm_func_end sub_0200C020 diff --git a/include/main_0200BD2C.h b/include/main_0200BD2C.h new file mode 100644 index 00000000..d3cd7fa8 --- /dev/null +++ b/include/main_0200BD2C.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_0200BD2C_H +#define PMDSKY_MAIN_0200BD2C_H + +#include "main_0200BC54.h" + +s32 GetFadeStatus(struct screen_fade *fstruct); + +#endif //PMDSKY_MAIN_0200BD2C_H diff --git a/main.lsf b/main.lsf index f6ed091e..32c60690 100644 --- a/main.lsf +++ b/main.lsf @@ -34,6 +34,8 @@ Static main Object asm/main_02008BF4.o Object src/main_0200BC54.o Object asm/main_0200BC60.o + Object src/main_0200BD2C.o + Object asm/main_0200BD50.o Object src/debug.o Object src/directory_file_mngr.o Object src/directory_file.o diff --git a/src/main_0200BD2C.c b/src/main_0200BD2C.c new file mode 100644 index 00000000..7ac681b8 --- /dev/null +++ b/src/main_0200BD2C.c @@ -0,0 +1,11 @@ +#include "main_0200BD2C.h" + +s32 GetFadeStatus(struct screen_fade *fstruct) +{ + s16 target_delta_brightness = fstruct->target_delta_brightness; + if (target_delta_brightness == -256) + return 1; + if (target_delta_brightness == 256) + return 2; + return 0; +}