diff --git a/asm/include/main_02008BF4.inc b/asm/include/main_02008BF4.inc index 6743000d..14098bc6 100644 --- a/asm/include/main_02008BF4.inc +++ b/asm/include/main_02008BF4.inc @@ -1,4 +1,58 @@ #pragma once +.public ArrayFill32Fast +.public CART_REMOVED_IMG_DATA +.public DC_FlushRange +.public Debug_Print0 +.public DecompressAtFromMemoryPointer +.public G2x_SetBlendAlpha_ +.public G3X_ClearFifo +.public G3X_Init +.public G3X_SetClearColor +.public GXS_BeginLoadBGExtPltt +.public GXS_BeginLoadOBJExtPltt +.public GXS_EndLoadBGExtPltt +.public GXS_EndLoadOBJExtPltt +.public GXS_SetGraphicsMode +.public GX_BeginLoadBGExtPltt +.public GX_BeginLoadOBJExtPltt +.public GX_DisableBankForBG +.public GX_DisableBankForBGExtPltt +.public GX_DisableBankForLCDC +.public GX_DisableBankForOBJ +.public GX_DisableBankForOBJExtPltt +.public GX_DisableBankForSubBG +.public GX_DisableBankForSubBGExtPltt +.public GX_DisableBankForSubOBJ +.public GX_DisableBankForTex +.public GX_DisableBankForTexPltt +.public GX_DispOff +.public GX_DispOn +.public GX_EndLoadBGExtPltt +.public GX_EndLoadOBJExtPltt +.public GX_Init +.public GX_SetBankForBG +.public GX_SetBankForBGExtPltt +.public GX_SetBankForLCDC +.public GX_SetBankForOBJ +.public GX_SetBankForOBJExtPltt +.public GX_SetBankForSubBG +.public GX_SetBankForSubBGExtPltt +.public GX_SetBankForSubOBJ +.public GX_SetBankForTex +.public GX_SetBankForTexPltt +.public GX_SetGraphicsMode +.public GXi_DmaId +.public GXx_SetMasterBrightness_ +.public GetLanguage +.public MI_StopDma +.public MemAlloc +.public MemFree +.public MemZero16 +.public MemZero32 +.public Memcpy32 +.public MemcpySimple +.public Rgb8ToRgb5 +.public UnloadFile .public _0200A314 .public _0200A344 .public _02092A04 @@ -60,59 +114,6 @@ .public _022A3805 .public _022A3806 .public _s32_div_f -.public ArrayFill32Fast -.public CART_REMOVED_IMG_DATA -.public DC_FlushRange -.public Debug_Print0 -.public DecompressAtFromMemoryPointer -.public G2x_SetBlendAlpha_ -.public G3X_ClearFifo -.public G3X_Init -.public G3X_SetClearColor -.public GetLanguage -.public GX_BeginLoadBGExtPltt -.public GX_BeginLoadOBJExtPltt -.public GX_DisableBankForBG -.public GX_DisableBankForBGExtPltt -.public GX_DisableBankForLCDC -.public GX_DisableBankForOBJ -.public GX_DisableBankForOBJExtPltt -.public GX_DisableBankForSubBG -.public GX_DisableBankForSubBGExtPltt -.public GX_DisableBankForSubOBJ -.public GX_DisableBankForTex -.public GX_DisableBankForTexPltt -.public GX_DispOff -.public GX_DispOn -.public GX_EndLoadBGExtPltt -.public GX_EndLoadOBJExtPltt -.public GX_Init -.public GX_SetBankForBG -.public GX_SetBankForBGExtPltt -.public GX_SetBankForLCDC -.public GX_SetBankForOBJ -.public GX_SetBankForOBJExtPltt -.public GX_SetBankForSubBG -.public GX_SetBankForSubBGExtPltt -.public GX_SetBankForSubOBJ -.public GX_SetBankForTex -.public GX_SetBankForTexPltt -.public GX_SetGraphicsMode -.public GXi_DmaId -.public GXS_BeginLoadBGExtPltt -.public GXS_BeginLoadOBJExtPltt -.public GXS_EndLoadBGExtPltt -.public GXS_EndLoadOBJExtPltt -.public GXS_SetGraphicsMode -.public GXx_SetMasterBrightness_ -.public MemAlloc -.public Memcpy32 -.public MemcpySimple -.public MemFree -.public MemZero16 -.public MemZero32 -.public MI_StopDma -.public Rgb8ToRgb5 .public sub_02004FF8 .public sub_02005D30 .public sub_02005E10 @@ -122,4 +123,3 @@ .public sub_02008A84 .public sub_02019304 .public sub_02082420 -.public UnloadFile diff --git a/asm/include/main_0200BC60.inc b/asm/include/main_0200BC60.inc new file mode 100644 index 00000000..3039bbf0 --- /dev/null +++ b/asm/include/main_0200BC60.inc @@ -0,0 +1,11 @@ +#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/overlay_00.inc b/asm/include/overlay_00.inc index b0a95b77..8c783879 100644 --- a/asm/include/overlay_00.inc +++ b/asm/include/overlay_00.inc @@ -1067,7 +1067,7 @@ .public sub_0200B8D4 .public sub_0200BB60 .public sub_0200BB74 -.public sub_0200BC54 +.public HandleFadesVeneer .public sub_0200BD14 .public sub_02017A68 .public sub_02017A80 diff --git a/asm/include/overlay_11.inc b/asm/include/overlay_11.inc index 1abe43e1..56caf43e 100644 --- a/asm/include/overlay_11.inc +++ b/asm/include/overlay_11.inc @@ -569,7 +569,7 @@ .public sub_0200BB74 .public sub_0200BB88 .public sub_0200BBF8 -.public sub_0200BC54 +.public HandleFadesVeneer .public sub_0200BC60 .public sub_0200BCB0 .public sub_0200BD14 diff --git a/asm/include/overlay_34.inc b/asm/include/overlay_34.inc index 0368f420..b7fb6a20 100644 --- a/asm/include/overlay_34.inc +++ b/asm/include/overlay_34.inc @@ -32,7 +32,7 @@ .public sub_0200B8D4 .public sub_0200BB60 .public sub_0200BB74 -.public sub_0200BC54 +.public HandleFadesVeneer .public sub_0200BD14 .public sub_02017A68 .public sub_02017A80 diff --git a/asm/main_02008BF4.s b/asm/main_02008BF4.s index 1dd0f296..060b6543 100644 --- a/asm/main_02008BF4.s +++ b/asm/main_02008BF4.s @@ -3835,353 +3835,3 @@ _0200BC40: strh r3, [r0, #0x10] bx lr arm_func_end sub_0200BBF8 - - arm_func_start sub_0200BC54 -sub_0200BC54: ; 0x0200BC54 - ldr ip, _0200BC5C ; =HandleFades - bx ip - .align 2, 0 -_0200BC5C: .word HandleFades - arm_func_end sub_0200BC54 - - arm_func_start sub_0200BC60 -sub_0200BC60: ; 0x0200BC60 - stmdb sp!, {r4, lr} - str r1, [r0] - add r4, r0, #0x16 - mov lr, #4 -_0200BC70: - ldrb ip, [r3], #1 - subs lr, lr, #1 - strb ip, [r4], #1 - bne _0200BC70 - cmp r1, #3 - cmpne r1, #5 - cmpne r1, #7 - cmpne r1, #9 - cmpne r1, #0xb - bne _0200BCA4 - mov r1, #2 - bl UpdateFadeStatus - ldmia sp!, {r4, pc} -_0200BCA4: - mov r1, r2 - bl sub_0200B928 - ldmia sp!, {r4, pc} - arm_func_end sub_0200BC60 - - arm_func_start sub_0200BCB0 -sub_0200BCB0: ; 0x0200BCB0 - stmdb sp!, {r4, lr} - str r1, [r0] - add r4, r0, #0x16 - mov lr, #4 -_0200BCC0: - ldrb ip, [r3], #1 - subs lr, lr, #1 - strb ip, [r4], #1 - bne _0200BCC0 - cmp r1, #1 - bne _0200BCE4 - mov r1, #1 - bl UpdateFadeStatus - ldmia sp!, {r4, pc} -_0200BCE4: - cmp r1, #3 - cmpne r1, #5 - cmpne r1, #7 - cmpne r1, #9 - cmpne r1, #0xb - bne _0200BD08 - mov r1, r2 - bl sub_0200B928 - ldmia sp!, {r4, pc} -_0200BD08: - mov r1, #2 - bl UpdateFadeStatus - ldmia sp!, {r4, pc} - arm_func_end sub_0200BCB0 - - arm_func_start sub_0200BD14 -sub_0200BD14: ; 0x0200BD14 - ldr r0, [r0, #4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - 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_0200BC60.s b/asm/main_0200BC60.s new file mode 100644 index 00000000..7223ceca --- /dev/null +++ b/asm/main_0200BC60.s @@ -0,0 +1,346 @@ + .include "asm/macros.inc" + .include "main_0200BC60.inc" + + .text + + arm_func_start sub_0200BC60 +sub_0200BC60: ; 0x0200BC60 + stmdb sp!, {r4, lr} + str r1, [r0] + add r4, r0, #0x16 + mov lr, #4 +_0200BC70: + ldrb ip, [r3], #1 + subs lr, lr, #1 + strb ip, [r4], #1 + bne _0200BC70 + cmp r1, #3 + cmpne r1, #5 + cmpne r1, #7 + cmpne r1, #9 + cmpne r1, #0xb + bne _0200BCA4 + mov r1, #2 + bl UpdateFadeStatus + ldmia sp!, {r4, pc} +_0200BCA4: + mov r1, r2 + bl sub_0200B928 + ldmia sp!, {r4, pc} + arm_func_end sub_0200BC60 + + arm_func_start sub_0200BCB0 +sub_0200BCB0: ; 0x0200BCB0 + stmdb sp!, {r4, lr} + str r1, [r0] + add r4, r0, #0x16 + mov lr, #4 +_0200BCC0: + ldrb ip, [r3], #1 + subs lr, lr, #1 + strb ip, [r4], #1 + bne _0200BCC0 + cmp r1, #1 + bne _0200BCE4 + mov r1, #1 + bl UpdateFadeStatus + ldmia sp!, {r4, pc} +_0200BCE4: + cmp r1, #3 + cmpne r1, #5 + cmpne r1, #7 + cmpne r1, #9 + cmpne r1, #0xb + bne _0200BD08 + mov r1, r2 + bl sub_0200B928 + ldmia sp!, {r4, pc} +_0200BD08: + mov r1, #2 + bl UpdateFadeStatus + ldmia sp!, {r4, pc} + arm_func_end sub_0200BCB0 + + arm_func_start sub_0200BD14 +sub_0200BD14: ; 0x0200BD14 + ldr r0, [r0, #4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + 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/overlay_00.s b/asm/overlay_00.s index c8d7db66..f92087b3 100644 --- a/asm/overlay_00.s +++ b/asm/overlay_00.s @@ -2811,7 +2811,7 @@ ov00_022BE774: ; 0x022BE774 b _022BE7C8 _022BE7B8: ldr r0, _022BE860 ; =ov00_0231E2FC - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 movne r4, #0 _022BE7C8: @@ -2831,7 +2831,7 @@ _022BE7C8: b _022BE810 _022BE800: ldr r0, _022BE864 ; =ov00_0231E2B8 - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 movne r4, #0 _022BE810: @@ -2845,12 +2845,12 @@ _022BE810: ldmia sp!, {r4, pc} _022BE830: ldr r0, _022BE860 ; =ov00_0231E2FC - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022BE860 ; =ov00_0231E2FC ldrsh r0, [r0, #0x14] bl ov00_022BE868 ldr r0, _022BE864 ; =ov00_0231E2B8 - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022BE864 ; =ov00_0231E2B8 ldrsh r0, [r0, #0x14] bl ov00_022BE89C diff --git a/asm/overlay_11.s b/asm/overlay_11.s index e88fa025..9cb1bb4a 100644 --- a/asm/overlay_11.s +++ b/asm/overlay_11.s @@ -16453,7 +16453,7 @@ ov11_022EA0BC: ; 0x022EA0BC cmp r1, #0 beq _022EA300 ldr r0, _022EA7F8 ; =ov11_0238905C - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 ldr r0, _022EA7F8 ; =ov11_0238905C movne r4, #0 @@ -16472,7 +16472,7 @@ ov11_022EA0BC: ; 0x022EA0BC b _022EA1B4 _022EA12C: ldr r0, _022EA7FC ; =ov11_02389128 - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 movne r4, #0 bne _022EA1B4 @@ -16522,7 +16522,7 @@ _022EA1B4: b _022EA264 _022EA1EC: ldr r0, _022EA800 ; =ov11_02389018 - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 movne r4, #0 bne _022EA264 @@ -16596,7 +16596,7 @@ _022EA300: cmp r0, #0 beq _022EA398 ldr r0, _022EA7F8 ; =ov11_0238905C - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 ldr r0, _022EA7F8 ; =ov11_0238905C movne r4, #0 @@ -16615,7 +16615,7 @@ _022EA300: b _022EA364 _022EA354: ldr r0, _022EA7FC ; =ov11_02389128 - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 movne r4, #0 _022EA364: @@ -16623,7 +16623,7 @@ _022EA364: ldrsh r0, [r0, #0x14] bl ov11_022EA8A0 ldr r0, _022EA800 ; =ov11_02389018 - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022EA800 ; =ov11_02389018 ldrsh r0, [r0, #0x14] bl ov11_022EA8D4 @@ -16634,17 +16634,17 @@ _022EA364: b _022EA3D4 _022EA398: ldr r0, _022EA7F8 ; =ov11_0238905C - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022EA7F8 ; =ov11_0238905C ldrsh r0, [r0, #0x14] bl ov11_022EA80C ldr r0, _022EA7FC ; =ov11_02389128 - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022EA7FC ; =ov11_02389128 ldrsh r0, [r0, #0x14] bl ov11_022EA8A0 ldr r0, _022EA800 ; =ov11_02389018 - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022EA800 ; =ov11_02389018 ldrsh r0, [r0, #0x14] bl ov11_022EA8D4 @@ -16662,7 +16662,7 @@ _022EA3EC: beq _022EA7DC mla r7, r8, sl, r5 mov r0, r7 - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 beq _022EA6B8 and sb, r8, #0xff diff --git a/asm/overlay_34.s b/asm/overlay_34.s index 13cfa891..429feeea 100644 --- a/asm/overlay_34.s +++ b/asm/overlay_34.s @@ -709,7 +709,7 @@ ov34_022DCA70: ; 0x022DCA70 b _022DCAC4 _022DCAB4: ldr r0, _022DCB5C ; =ov34_022DD104 - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 movne r4, #0 _022DCAC4: @@ -729,7 +729,7 @@ _022DCAC4: b _022DCB0C _022DCAFC: ldr r0, _022DCB60 ; =ov34_022DD0C0 - bl sub_0200BC54 + bl HandleFadesVeneer cmp r0, #0 movne r4, #0 _022DCB0C: @@ -743,12 +743,12 @@ _022DCB0C: ldmia sp!, {r4, pc} _022DCB2C: ldr r0, _022DCB5C ; =ov34_022DD104 - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022DCB5C ; =ov34_022DD104 ldrsh r0, [r0, #0x14] bl ov34_022DCB64 ldr r0, _022DCB60 ; =ov34_022DD0C0 - bl sub_0200BC54 + bl HandleFadesVeneer ldr r0, _022DCB60 ; =ov34_022DD0C0 ldrsh r0, [r0, #0x14] bl ov34_022DCB98 diff --git a/include/main_0200BC54.h b/include/main_0200BC54.h new file mode 100644 index 00000000..01daf222 --- /dev/null +++ b/include/main_0200BC54.h @@ -0,0 +1,36 @@ +#ifndef PMDSKY_MAIN_0200BC54_H +#define PMDSKY_MAIN_0200BC54_H + +#include "util.h" + +// Fade status. Fade in means increasing brightness and fade out means decreasing. +// As a result, fading the screen to white is considered a fade in. +enum fade_status { + FADE_NONE = 0, + FADE_COMPLETE = 1, + FADE_IN = 2, + FADE_OUT = 3, +}; + +// State of the screen fade in all other modes except dungeon mode +struct screen_fade { + u8 field0_0x0; + u8 field1_0x1; + u8 field2_0x2; + u8 field3_0x3; + enum fade_status status; // 0x4 + s32 remaining_frames; // 0x8 + // 0xC: Initial duration of the fade in frames + s32 duration; + // 0x10: What brightness the fade ends at. 256 means fade to white, -256 means fade to black + s16 target_delta_brightness; + // 0x12: Max absolute value of the brightness during the fade. 256 means a full fade + s16 max_brightness; + // 0x14: Current brightness of the fade. Positive numbers turn the screen white, negative to + // black + s16 delta_brightness; +}; + +bool8 HandleFadesVeneer(struct screen_fade *fstruct); + +#endif //PMDSKY_MAIN_0200BC54_H diff --git a/main.lsf b/main.lsf index 03b1a3d7..f6ed091e 100644 --- a/main.lsf +++ b/main.lsf @@ -32,6 +32,8 @@ Static main Object asm/main_020082C4.o Object src/main_02008BD4.o Object asm/main_02008BF4.o + Object src/main_0200BC54.o + Object asm/main_0200BC60.o Object src/debug.o Object src/directory_file_mngr.o Object src/directory_file.o diff --git a/src/main_0200BC54.c b/src/main_0200BC54.c new file mode 100644 index 00000000..fb30704a --- /dev/null +++ b/src/main_0200BC54.c @@ -0,0 +1,8 @@ +#include "main_0200BC54.h" + +extern bool8 HandleFades(struct screen_fade *fstruct); + +bool8 HandleFadesVeneer(struct screen_fade *fstruct) +{ + HandleFades(fstruct); +}