diff options
29 files changed, 261 insertions, 257 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s index 9cf156f07..6eac528df 100644 --- a/asm/contest_link_80C2020.s +++ b/asm/contest_link_80C2020.s @@ -94,9 +94,9 @@ sub_80C2020: @ 80C2020 strh r2, [r0] ldr r0, _080C2128 @ =gBattle_BG2_Y strh r2, [r0] - ldr r0, _080C212C @ =gUnknown_030041B0 + ldr r0, _080C212C @ =gBattle_BG3_X strh r2, [r0] - ldr r0, _080C2130 @ =gUnknown_030041B8 + ldr r0, _080C2130 @ =gBattle_BG3_Y strh r2, [r0] ldr r0, _080C2134 @ =gBattle_WIN0H strh r2, [r0] @@ -125,8 +125,8 @@ _080C211C: .4byte gBattle_BG1_X _080C2120: .4byte gBattle_BG1_Y _080C2124: .4byte gBattle_BG2_X _080C2128: .4byte gBattle_BG2_Y -_080C212C: .4byte gUnknown_030041B0 -_080C2130: .4byte gUnknown_030041B8 +_080C212C: .4byte gBattle_BG3_X +_080C2130: .4byte gBattle_BG3_Y _080C2134: .4byte gBattle_WIN0H _080C2138: .4byte gBattle_WIN0V _080C213C: .4byte gBattle_WIN1H @@ -396,7 +396,7 @@ sub_80C2358: @ 80C2358 movs r0, 0 bl SetVBlankCallback bl sub_80C2020 - bl dp12_8087EA4 + bl ScanlineEffect_Clear bl ResetPaletteFade bl ResetSpriteData bl ResetTasks @@ -506,11 +506,11 @@ sub_80C2448: @ 80C2448 ldrh r0, [r0] strh r0, [r1] adds r1, 0x2 - ldr r0, _080C24DC @ =gUnknown_030041B0 + ldr r0, _080C24DC @ =gBattle_BG3_X ldrh r0, [r0] strh r0, [r1] adds r1, 0x2 - ldr r0, _080C24E0 @ =gUnknown_030041B8 + ldr r0, _080C24E0 @ =gBattle_BG3_Y ldrh r0, [r0] strh r0, [r1] adds r1, 0x22 @@ -543,8 +543,8 @@ _080C24CC: .4byte gBattle_BG1_X _080C24D0: .4byte gBattle_BG1_Y _080C24D4: .4byte gBattle_BG2_X _080C24D8: .4byte gBattle_BG2_Y -_080C24DC: .4byte gUnknown_030041B0 -_080C24E0: .4byte gUnknown_030041B8 +_080C24DC: .4byte gBattle_BG3_X +_080C24E0: .4byte gBattle_BG3_Y _080C24E4: .4byte gBattle_WIN0H _080C24E8: .4byte gBattle_WIN0V _080C24EC: .4byte gBattle_WIN1H @@ -1826,11 +1826,11 @@ _080C2F24: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music thumb_func_start sub_80C2F28 sub_80C2F28: @ 80C2F28 push {r4,r5,lr} - ldr r2, _080C2F5C @ =gUnknown_030041B0 + ldr r2, _080C2F5C @ =gBattle_BG3_X ldrh r3, [r2] adds r0, r3, 0x2 strh r0, [r2] - ldr r4, _080C2F60 @ =gUnknown_030041B8 + ldr r4, _080C2F60 @ =gBattle_BG3_Y ldrh r5, [r4] adds r1, r5, 0x1 strh r1, [r4] @@ -1854,8 +1854,8 @@ _080C2F56: pop {r0} bx r0 .align 2, 0 -_080C2F5C: .4byte gUnknown_030041B0 -_080C2F60: .4byte gUnknown_030041B8 +_080C2F5C: .4byte gBattle_BG3_X +_080C2F60: .4byte gBattle_BG3_Y thumb_func_end sub_80C2F28 thumb_func_start sub_80C2F64 diff --git a/asm/fight.s b/asm/fight.s index d0d042113..1969aee14 100755 --- a/asm/fight.s +++ b/asm/fight.s @@ -1688,7 +1688,7 @@ _080D9CDE: lsls r0, 24 cmp r0, 0 bne _080D9D14 - ldr r1, _080D9D10 @ =gUnknown_030041B0 + ldr r1, _080D9D10 @ =gBattle_BG3_X ldrh r0, [r4, 0x1A] lsls r0, 16 asrs r0, 24 @@ -1699,9 +1699,9 @@ _080D9CDE: b _080D9D24 .align 2, 0 _080D9D0C: .4byte gAnimBankTarget -_080D9D10: .4byte gUnknown_030041B0 +_080D9D10: .4byte gBattle_BG3_X _080D9D14: - ldr r2, _080D9D64 @ =gUnknown_030041B0 + ldr r2, _080D9D64 @ =gBattle_BG3_X ldrh r1, [r4, 0x1A] lsls r1, 16 asrs r1, 24 @@ -1710,7 +1710,7 @@ _080D9D14: strh r0, [r2] adds r7, r2, 0 _080D9D24: - ldr r3, _080D9D68 @ =gUnknown_030041B8 + ldr r3, _080D9D68 @ =gBattle_BG3_Y ldrh r2, [r4, 0x1C] lsls r0, r2, 16 asrs r0, 24 @@ -1741,8 +1741,8 @@ _080D9D5C: pop {r0} bx r0 .align 2, 0 -_080D9D64: .4byte gUnknown_030041B0 -_080D9D68: .4byte gUnknown_030041B8 +_080D9D64: .4byte gBattle_BG3_X +_080D9D68: .4byte gBattle_BG3_Y _080D9D6C: .4byte gBattleAnimArgs thumb_func_end sub_80D9C80 diff --git a/asm/ground.s b/asm/ground.s index 0ba721042..e846d1c70 100755 --- a/asm/ground.s +++ b/asm/ground.s @@ -1243,14 +1243,14 @@ _080E189C: beq _080E18C8 cmp r0, 0x5 bne _080E1908 - ldr r0, _080E18C0 @ =gUnknown_030041B0 + ldr r0, _080E18C0 @ =gBattle_BG3_X ldrh r0, [r0] strh r0, [r4, 0x22] ldr r0, _080E18C4 @ =sub_80E1934 b _080E1926 .align 2, 0 _080E18BC: .4byte gAnimMovePower -_080E18C0: .4byte gUnknown_030041B0 +_080E18C0: .4byte gBattle_BG3_X _080E18C4: .4byte sub_80E1934 _080E18C8: movs r0, 0 @@ -1351,16 +1351,16 @@ _080E1962: ands r0, r1 cmp r0, 0 bne _080E198C - ldr r1, _080E1988 @ =gUnknown_030041B0 + ldr r1, _080E1988 @ =gBattle_BG3_X ldrh r0, [r3, 0x26] ldrh r2, [r3, 0x22] adds r0, r2 strh r0, [r1] b _080E1996 .align 2, 0 -_080E1988: .4byte gUnknown_030041B0 +_080E1988: .4byte gBattle_BG3_X _080E198C: - ldr r0, _080E19B4 @ =gUnknown_030041B0 + ldr r0, _080E19B4 @ =gBattle_BG3_X ldrh r1, [r3, 0x22] ldrh r2, [r3, 0x26] subs r1, r2 @@ -1382,7 +1382,7 @@ _080E1996: strh r0, [r3, 0x24] b _080E1A0C .align 2, 0 -_080E19B4: .4byte gUnknown_030041B0 +_080E19B4: .4byte gBattle_BG3_X _080E19B8: ldrh r0, [r3, 0xA] adds r0, 0x1 @@ -1397,16 +1397,16 @@ _080E19B8: ands r1, r0 cmp r1, 0 bne _080E19E4 - ldr r1, _080E19E0 @ =gUnknown_030041B0 + ldr r1, _080E19E0 @ =gBattle_BG3_X ldrh r0, [r3, 0x24] ldrh r2, [r3, 0x22] adds r0, r2 strh r0, [r1] b _080E19EE .align 2, 0 -_080E19E0: .4byte gUnknown_030041B0 +_080E19E0: .4byte gBattle_BG3_X _080E19E4: - ldr r0, _080E1A14 @ =gUnknown_030041B0 + ldr r0, _080E1A14 @ =gBattle_BG3_X ldrh r1, [r3, 0x22] ldrh r2, [r3, 0x24] subs r1, r2 @@ -1433,9 +1433,9 @@ _080E1A0C: strh r0, [r3, 0x8] b _080E1A24 .align 2, 0 -_080E1A14: .4byte gUnknown_030041B0 +_080E1A14: .4byte gBattle_BG3_X _080E1A18: - ldr r1, _080E1A28 @ =gUnknown_030041B0 + ldr r1, _080E1A28 @ =gBattle_BG3_X ldrh r0, [r3, 0x22] strh r0, [r1] adds r0, r2, 0 @@ -1444,7 +1444,7 @@ _080E1A24: pop {r0} bx r0 .align 2, 0 -_080E1A28: .4byte gUnknown_030041B0 +_080E1A28: .4byte gBattle_BG3_X thumb_func_end sub_80E1934 thumb_func_start sub_80E1A2C @@ -1719,10 +1719,10 @@ _080E1BE2: movs r0, 0xFF ands r1, r0 strh r1, [r4, 0xC] - ldr r2, _080E1C50 @ =gUnknown_030041B0 + ldr r2, _080E1C50 @ =gBattle_BG3_X ldrh r0, [r4, 0xA] strh r0, [r2] - ldr r0, _080E1C54 @ =gUnknown_030041B8 + ldr r0, _080E1C54 @ =gBattle_BG3_Y strh r1, [r0] ldrh r0, [r6, 0x4] strh r0, [r4, 0xE] @@ -1736,8 +1736,8 @@ _080E1C40: .4byte gAnimBankAttacker _080E1C44: .4byte sub_80E1C58 _080E1C48: .4byte gTasks _080E1C4C: .4byte 0x000001ff -_080E1C50: .4byte gUnknown_030041B0 -_080E1C54: .4byte gUnknown_030041B8 +_080E1C50: .4byte gBattle_BG3_X +_080E1C54: .4byte gBattle_BG3_Y thumb_func_end sub_80E1BB0 thumb_func_start sub_80E1C58 @@ -1757,10 +1757,10 @@ sub_80E1C58: @ 80E1C58 ldrsh r0, [r2, r4] cmp r1, r0 bne _080E1C98 - ldr r0, _080E1C90 @ =gUnknown_030041B0 + ldr r0, _080E1C90 @ =gBattle_BG3_X movs r1, 0 strh r1, [r0] - ldr r0, _080E1C94 @ =gUnknown_030041B8 + ldr r0, _080E1C94 @ =gBattle_BG3_Y strh r1, [r0] adds r0, r3, 0 bl DestroyTask @@ -1768,13 +1768,13 @@ sub_80E1C58: @ 80E1C58 .align 2, 0 _080E1C88: .4byte gTasks _080E1C8C: .4byte gBattleAnimArgs -_080E1C90: .4byte gUnknown_030041B0 -_080E1C94: .4byte gUnknown_030041B8 +_080E1C90: .4byte gBattle_BG3_X +_080E1C94: .4byte gBattle_BG3_Y _080E1C98: - ldr r1, _080E1CAC @ =gUnknown_030041B0 + ldr r1, _080E1CAC @ =gBattle_BG3_X ldrh r0, [r2, 0xA] strh r0, [r1] - ldr r1, _080E1CB0 @ =gUnknown_030041B8 + ldr r1, _080E1CB0 @ =gBattle_BG3_Y ldrh r0, [r2, 0xC] strh r0, [r1] _080E1CA4: @@ -1782,8 +1782,8 @@ _080E1CA4: pop {r0} bx r0 .align 2, 0 -_080E1CAC: .4byte gUnknown_030041B0 -_080E1CB0: .4byte gUnknown_030041B8 +_080E1CAC: .4byte gBattle_BG3_X +_080E1CB0: .4byte gBattle_BG3_Y thumb_func_end sub_80E1C58 .align 2, 0 @ Don't pad with nop. diff --git a/asm/normal.s b/asm/normal.s index a800b348a..8465e2c2b 100755 --- a/asm/normal.s +++ b/asm/normal.s @@ -1103,15 +1103,15 @@ _080E24F0: beq _080E2508 b _080E2518 _080E24F6: - ldr r1, _080E24FC @ =gUnknown_030041B0 + ldr r1, _080E24FC @ =gBattle_BG3_X b _080E250A .align 2, 0 -_080E24FC: .4byte gUnknown_030041B0 +_080E24FC: .4byte gBattle_BG3_X _080E2500: - ldr r1, _080E2504 @ =gUnknown_030041B8 + ldr r1, _080E2504 @ =gBattle_BG3_Y b _080E250A .align 2, 0 -_080E2504: .4byte gUnknown_030041B8 +_080E2504: .4byte gBattle_BG3_Y _080E2508: ldr r1, _080E2514 @ =gSpriteCoordOffsetX _080E250A: @@ -1359,10 +1359,10 @@ sub_80E26BC: @ 80E26BC strh r1, [r2, 0xE] ldrh r1, [r3, 0x6] strh r1, [r2, 0x18] - ldr r4, _080E2704 @ =gUnknown_030041B0 + ldr r4, _080E2704 @ =gBattle_BG3_X ldrh r1, [r3] strh r1, [r4] - ldr r4, _080E2708 @ =gUnknown_030041B8 + ldr r4, _080E2708 @ =gBattle_BG3_Y ldrh r1, [r3, 0x2] strh r1, [r4] ldr r1, _080E270C @ =sub_80E2710 @@ -1374,8 +1374,8 @@ sub_80E26BC: @ 80E26BC .align 2, 0 _080E26FC: .4byte gTasks _080E2700: .4byte gBattleAnimArgs -_080E2704: .4byte gUnknown_030041B0 -_080E2708: .4byte gUnknown_030041B8 +_080E2704: .4byte gBattle_BG3_X +_080E2708: .4byte gBattle_BG3_Y _080E270C: .4byte sub_80E2710 thumb_func_end sub_80E26BC @@ -1395,7 +1395,7 @@ sub_80E2710: @ 80E2710 mov r12, r1 cmp r0, 0 bne _080E2796 - ldr r0, _080E2744 @ =gUnknown_030041B0 + ldr r0, _080E2744 @ =gBattle_BG3_X ldrh r2, [r0] movs r7, 0x8 ldrsh r1, [r3, r7] @@ -1407,12 +1407,12 @@ sub_80E2710: @ 80E2710 b _080E274A .align 2, 0 _080E2740: .4byte gTasks -_080E2744: .4byte gUnknown_030041B0 +_080E2744: .4byte gBattle_BG3_X _080E2748: ldrh r0, [r3, 0x8] _080E274A: strh r0, [r6] - ldr r2, _080E2768 @ =gUnknown_030041B8 + ldr r2, _080E2768 @ =gBattle_BG3_Y ldrh r3, [r2] lsls r1, r5, 2 adds r0, r1, r5 @@ -1426,7 +1426,7 @@ _080E274A: movs r0, 0 b _080E2770 .align 2, 0 -_080E2768: .4byte gUnknown_030041B8 +_080E2768: .4byte gBattle_BG3_Y _080E276C: ldrh r0, [r4, 0xA] negs r0, r0 @@ -3905,13 +3905,13 @@ sub_80E3AD0: @ 80E3AD0 ldrh r7, [r1, 0x1E] adds r2, r7 strh r2, [r1, 0x1E] - ldr r6, _080E3B40 @ =gUnknown_030041B0 + ldr r6, _080E3B40 @ =gBattle_BG3_X lsls r0, r3, 16 asrs r0, 24 ldrh r4, [r6] adds r0, r4 strh r0, [r6] - ldr r4, _080E3B44 @ =gUnknown_030041B8 + ldr r4, _080E3B44 @ =gBattle_BG3_Y lsls r0, r2, 16 asrs r0, 24 ldrh r7, [r4] @@ -3942,8 +3942,8 @@ _080E3B36: bx r0 .align 2, 0 _080E3B3C: .4byte gTasks -_080E3B40: .4byte gUnknown_030041B0 -_080E3B44: .4byte gUnknown_030041B8 +_080E3B40: .4byte gBattle_BG3_X +_080E3B44: .4byte gBattle_BG3_Y _080E3B48: .4byte gBattleAnimArgs thumb_func_end sub_80E3AD0 diff --git a/asm/pokenav.s b/asm/pokenav.s index e1b30bdf7..67b4ece33 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -10956,7 +10956,7 @@ sub_80F5B50: @ 80F5B50 _080F5B68: .4byte gUnknown_083DFEC4 _080F5B6C: .4byte 0x00009345 _080F5B70: - bl dp12_8087EA4 + bl ScanlineEffect_Clear ldr r0, _080F5BA8 @ =gScanlineEffectRegBuffers movs r2, 0xEF movs r3, 0xF4 diff --git a/asm/rock.s b/asm/rock.s index 923c842be..2f878db2c 100755 --- a/asm/rock.s +++ b/asm/rock.s @@ -1549,7 +1549,7 @@ sub_80DDA8C: @ 80DDA8C movs r0, 0xC8 strh r0, [r5, 0xA] _080DDAAE: - ldr r4, _080DDAEC @ =gUnknown_030041B8 + ldr r4, _080DDAEC @ =gBattle_BG3_Y movs r1, 0xA ldrsh r0, [r5, r1] movs r1, 0xA @@ -1577,7 +1577,7 @@ _080DDADA: bx r0 .align 2, 0 _080DDAE8: .4byte gTasks -_080DDAEC: .4byte gUnknown_030041B8 +_080DDAEC: .4byte gBattle_BG3_Y thumb_func_end sub_80DDA8C thumb_func_start sub_80DDAF0 @@ -1600,7 +1600,7 @@ sub_80DDAF0: @ 80DDAF0 ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] - ldr r0, _080DDB60 @ =gUnknown_030041B8 + ldr r0, _080DDB60 @ =gBattle_BG3_Y ldrh r0, [r0] strh r0, [r4, 0xC] _080DDB1C: @@ -1609,7 +1609,7 @@ _080DDB1C: movs r1, 0xFF ands r0, r1 strh r0, [r4, 0xA] - ldr r6, _080DDB60 @ =gUnknown_030041B8 + ldr r6, _080DDB60 @ =gBattle_BG3_Y movs r2, 0xA ldrsh r1, [r4, r2] movs r0, 0x4 @@ -1635,7 +1635,7 @@ _080DDB54: bx r0 .align 2, 0 _080DDB5C: .4byte gTasks -_080DDB60: .4byte gUnknown_030041B8 +_080DDB60: .4byte gBattle_BG3_Y _080DDB64: .4byte gBattleAnimArgs _080DDB68: .4byte 0x00000fff thumb_func_end sub_80DDAF0 diff --git a/include/scanline_effect.h b/include/scanline_effect.h index 242b35448..314a856fa 100644 --- a/include/scanline_effect.h +++ b/include/scanline_effect.h @@ -4,25 +4,34 @@ // DMA control value to ransfer a single 16-bit value at HBlank #define SCANLINE_EFFECT_DMACNT_16BIT (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_INC | DMA_16BIT | DMA_DEST_RELOAD) << 16) | 1) +#define SCANLINE_EFFECT_REG_BG0HOFS (REG_ADDR_BG0HOFS - REG_ADDR_BG0HOFS) +#define SCANLINE_EFFECT_REG_BG0VOFS (REG_ADDR_BG0VOFS - REG_ADDR_BG0HOFS) +#define SCANLINE_EFFECT_REG_BG1HOFS (REG_ADDR_BG1HOFS - REG_ADDR_BG0HOFS) +#define SCANLINE_EFFECT_REG_BG1VOFS (REG_ADDR_BG1VOFS - REG_ADDR_BG0HOFS) +#define SCANLINE_EFFECT_REG_BG2HOFS (REG_ADDR_BG2HOFS - REG_ADDR_BG0HOFS) +#define SCANLINE_EFFECT_REG_BG2VOFS (REG_ADDR_BG2VOFS - REG_ADDR_BG0HOFS) +#define SCANLINE_EFFECT_REG_BG3HOFS (REG_ADDR_BG3HOFS - REG_ADDR_BG0HOFS) +#define SCANLINE_EFFECT_REG_BG3VOFS (REG_ADDR_BG3VOFS - REG_ADDR_BG0HOFS) + struct ScanlineEffectParams { volatile void *dmaDest; u32 dmaControl; - u8 unk8; - u8 unk9; + u8 initState; + u8 unused9; }; struct ScanlineEffect { - void *src[2]; + void *dmaSrcBuffers[2]; volatile void *dmaDest; u32 dmaControl; void (*setFirstScanlineReg)(void); - u8 srcBank; - u8 unk15; - u8 unk16; - u8 unk17; - u8 taskId; + u8 srcBuffer; + u8 state; + u8 unused16; + u8 unused17; + u8 waveTaskId; u8 filler19[0x7]; }; @@ -31,15 +40,9 @@ extern struct ScanlineEffect gScanlineEffect; extern u16 gScanlineEffectRegBuffers[][0x3C0]; void ScanlineEffect_Stop(void); -void ScanlineEffect_Stop(void); -void dp12_8087EA4(void); -void dp12_8087EA4(void); -//void ScanlineEffect_SetParams(u32 i, u32 i1, u32 i2); -//void ScanlineEffect_SetParams(); -void ScanlineEffect_SetParams(struct ScanlineEffectParams unk); +void ScanlineEffect_Clear(void); +void ScanlineEffect_SetParams(struct ScanlineEffectParams); void ScanlineEffect_InitHBlankDmaTransfer(void); -void ScanlineEffect_InitHBlankDmaTransfer(); -//void ScanlineEffect_InitWave(int i, int i1, int i2, int i3, int i4, int i5, int i6); -u8 ScanlineEffect_InitWave(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); +u8 ScanlineEffect_InitWave(u8 startLine, u8 endLine, u8 frequency, u8 amplitude, u8 delayInterval, u8 regOffset, bool8 a7); #endif // GUARD_SCANLINE_EFFECT_H diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index fc74e3f46..f9e505bf2 100755 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c @@ -53,8 +53,8 @@ void sub_80D0C88(u8 taskId) } params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; - params.unk8 = 1; - params.unk9 = 0; + params.initState = 1; + params.unused9 = 0; ScanlineEffect_SetParams(params); task->func = sub_80D0D68; } diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index f4fff742c..990535b4e 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -108,9 +108,9 @@ extern u16 gUnknown_02024DE8; extern u8 gActionSelectionCursor[]; extern u8 gMoveSelectionCursor[]; extern u8 gUnknown_02038470[]; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gBattle_BG1_Y; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern struct Window gUnknown_030041D0; extern u16 gBattle_WIN1H; extern struct Window gUnknown_03004210; @@ -219,7 +219,7 @@ void InitBattle(void) REG_WINOUT = 0; gBattle_WIN0H = 0xF0; gBattle_WIN0V = 0x5051; - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 80; i++) { @@ -242,8 +242,8 @@ void InitBattle(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; gBattleTerrain = BattleSetup_GetTerrain(); Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); @@ -1064,8 +1064,8 @@ void sub_800FCFC(void) REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - REG_BG3HOFS = gUnknown_030041B0; - REG_BG3VOFS = gUnknown_030041B8; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; REG_WIN0H = gBattle_WIN0H; REG_WIN0V = gBattle_WIN0V; REG_WIN1H = gBattle_WIN1H; @@ -1197,7 +1197,7 @@ void c2_8011A1C(void) REG_WINOUT = 0; gBattle_WIN0H = 0xF0; gBattle_WIN0V = 0x5051; - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 80; i++) { @@ -1218,8 +1218,8 @@ void c2_8011A1C(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 164329c1b..ae8f94130 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -93,7 +93,7 @@ extern u16 gChosenMove; //last used move in battle extern u8 gBankInMenu; extern u8 gActionForBanks[4]; extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; @@ -17229,7 +17229,7 @@ static void atkF2_displaydexinfo(void) LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); REG_BG3CNT = 0x5a0b; - gUnknown_030041B0 = 0x100; + gBattle_BG3_X = 0x100; BeginNormalPaletteFade(0xfffc, 0, 0x10, 0, 0); gBattleCommunication[0]++; } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 489581132..a5f833b6c 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -67,9 +67,9 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern u8 gUnknown_02038470[]; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gBattle_BG1_Y; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; extern u16 gBattle_BG0_X; diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 843203a1e..f7cdc0694 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -16,7 +16,7 @@ #include "scanline_effect.h" void sub_807DE10(void); -void dp12_8087EA4(void); +void ScanlineEffect_Clear(void); extern const struct OamData gFieldOamData_32x32; @@ -670,7 +670,7 @@ static bool8 Phase2_Transition_Swirl_Func1(struct Task* task) u16 savedIME; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); sub_811D6E8(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_14, 0, 2, 0, 160); @@ -730,7 +730,7 @@ static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task) u16 savedIME; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); memset(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_16, 0x140); @@ -798,7 +798,7 @@ static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task) u16 *dst1, *dst2; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); task->data[1] = 16; task->data[2] = 0; @@ -1076,7 +1076,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.WININ = 0; TRANSITION_STRUCT.WINOUT = 63; @@ -1269,7 +1269,7 @@ static bool8 Phase2_Transition_Ripple_Func1(struct Task* task) u8 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 160; i++) { @@ -1348,7 +1348,7 @@ static bool8 Phase2_Transition_Wave_Func1(struct Task* task) u8 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.WININ = 63; TRANSITION_STRUCT.WINOUT = 0; @@ -1460,7 +1460,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task* task) u8 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); Mugshots_CreateOpponentPlayerSprites(task); task->data[1] = 0; @@ -1844,7 +1844,7 @@ static bool8 Phase2_Transition_Slice_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); task->data[2] = 256; task->data[3] = 1; @@ -1943,7 +1943,7 @@ static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.BLDCNT = 0xBF; TRANSITION_STRUCT.BLDY = 0; @@ -2158,7 +2158,7 @@ static bool8 Phase2_Transition_Shards_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.WININ = 0x3F; TRANSITION_STRUCT.WINOUT = 0; diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 83dad5f60..a78cb20df 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -15,9 +15,9 @@ extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gBattle_BG1_Y; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern u16 gBattle_BG0_Y; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; @@ -77,7 +77,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) switch (gReshowState) { case 0: - dp12_8087EA4(); + ScanlineEffect_Clear(); Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); @@ -87,8 +87,8 @@ static void CB2_ReshowBattleScreenAfterMenu(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; break; case 1: { diff --git a/src/contest.c b/src/contest.c index e41838cb1..875fe4502 100644 --- a/src/contest.c +++ b/src/contest.c @@ -51,9 +51,9 @@ extern u8 gBanksBySide[]; extern u8 gObjectBankIDs[]; extern u8 gIsLinkContest; extern u8 gContestPlayerMonIndex; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern s16 gBattle_BG1_Y; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern u16 gBattle_WIN1H; extern struct Window gUnknown_03004210; extern u16 gBattle_WIN0V; @@ -330,8 +330,8 @@ void ResetContestGpuRegs(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; gBattle_WIN0H = 0; gBattle_WIN0V = 0; gBattle_WIN1H = 0; @@ -412,7 +412,7 @@ void CB2_StartContest(void) SetVBlankCallback(NULL); SetUpContestWindow(); ResetContestGpuRegs(); - dp12_8087EA4(); + ScanlineEffect_Clear(); ResetPaletteFade(); gPaletteFade.bufferTransferDisabled = TRUE; DmaClearLarge32(3, (void *)VRAM, VRAM_SIZE, 0x1000); @@ -626,8 +626,8 @@ void ContestVBlankCallback(void) REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - REG_BG3HOFS = gUnknown_030041B0; - REG_BG3VOFS = gUnknown_030041B8; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; REG_WIN0H = gBattle_WIN0H; REG_WIN0V = gBattle_WIN0V; REG_WIN1H = gBattle_WIN1H; diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 7c250b584..1da337b04 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -35,8 +35,8 @@ extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; -extern u16 gUnknown_030041B0; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; extern struct Window gUnknown_03004210; extern u8 (*gCallback_03004AE8)(void); @@ -463,8 +463,8 @@ static void sub_80A9F50(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; } static void sub_80A9FE4(void) @@ -511,8 +511,8 @@ static void sub_80AA090(void) REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - REG_BG3HOFS = gUnknown_030041B0; - REG_BG3VOFS = gUnknown_030041B8; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -528,7 +528,7 @@ static void sub_80AA10C(void) gPaletteFade.bufferTransferDisabled = 1; SetVBlankCallback(0); sub_80A9F50(); - dp12_8087EA4(); + ScanlineEffect_Clear(); ResetPaletteFade(); ResetSpriteData(); ResetTasks(); diff --git a/src/easy_chat_1.c b/src/easy_chat_1.c index 3bed951d6..4b64846f9 100644 --- a/src/easy_chat_1.c +++ b/src/easy_chat_1.c @@ -297,7 +297,7 @@ void sub_80E62F8(void) SetVBlankCallback(0); ResetPaletteFade(); ResetSpriteData(); - dp12_8087EA4(); + ScanlineEffect_Clear(); ScanlineEffect_Stop(); sub_80EAD08(); ScanlineEffect_SetParams(gUnknown_083DB698); diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index e7b65bef0..dc8bddd5a 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -2053,7 +2053,7 @@ void sub_80EAD08(void) u16 r2; u16 i; - r4 = gScanlineEffectRegBuffers[gScanlineEffect.srcBank]; + r4 = gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer]; r4 += 88; r2 = (gEasyChatStruct->unk1BA - 88) & 0xFF; diff --git a/src/engine/option_menu.c b/src/engine/option_menu.c index cb5f66649..1fc78efaa 100644 --- a/src/engine/option_menu.c +++ b/src/engine/option_menu.c @@ -3,12 +3,12 @@ #include "main.h" #include "menu.h" #include "palette.h" +#include "scanline_effect.h" #include "sprite.h" #include "strings2.h" #include "task.h" extern void SetPokemonCryStereo(u32 val); -extern void ScanlineEffect_Stop(void); //Task data enum { diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c index d077bc670..a8b49a8eb 100644 --- a/src/engine/reset_rtc_screen.c +++ b/src/engine/reset_rtc_screen.c @@ -439,7 +439,7 @@ void CB2_InitResetRtcScreen(void) ResetOamRange(0, 128); LoadOam(); ScanlineEffect_Stop(); - dp12_8087EA4(); + ScanlineEffect_Clear(); ResetSpriteData(); ResetTasks(); ResetPaletteFade(); diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index be22b24c4..ab43ac716 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -730,7 +730,7 @@ bool8 sub_8093AA0(struct Task *task) u32 i; ewram0_2.var_4 = FALSE; - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 0xA0; i++) gScanlineEffectRegBuffers[1][i] = -4; SetHBlankCallback(sub_8093D7C); diff --git a/src/field/field_screen_effect.c b/src/field/field_screen_effect.c index bc70e1a63..61301c5a9 100644 --- a/src/field/field_screen_effect.c +++ b/src/field/field_screen_effect.c @@ -64,11 +64,11 @@ static void sub_8081424(u8 taskId) switch (data[0]) { case 0: - sub_8081398(&gScanlineEffectRegBuffers[gScanlineEffect.srcBank][0], data[1], data[2], data[3]); + sub_8081398(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], data[1], data[2], data[3]); data[0] = 1; break; case 1: - sub_8081398(&gScanlineEffectRegBuffers[gScanlineEffect.srcBank][0], data[1], data[2], data[3]); + sub_8081398(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], data[1], data[2], data[3]); data[0] = 0; data[3] += data[5]; if (data[3] > data[4]) @@ -85,7 +85,7 @@ static void sub_8081424(u8 taskId) } break; case 2: - dp12_8087EA4(); + ScanlineEffect_Clear(); DestroyTask(taskId); break; } diff --git a/src/field/overworld.c b/src/field/overworld.c index 2590852af..86b0a5dac 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -1731,7 +1731,7 @@ void sub_8054D4C(u32 a1) ResetTasks(); ResetSpriteData(); ResetPaletteFade(); - dp12_8087EA4(); + ScanlineEffect_Clear(); ResetCameraUpdateInfo(); InstallCameraPanAheadCallback(); sub_805C7C4(0); diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 6017f56bf..d6881cb01 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -771,7 +771,7 @@ static bool32 sub_80719FC(u8 *step) ResetSpriteData(); ResetTasks(); ResetPaletteFade(); - dp12_8087EA4(); + ScanlineEffect_Clear(); break; case 2: Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4); diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index ec327796a..bf8306fc0 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -123,12 +123,12 @@ extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gUnknown_020384F0; extern u8 gUnknown_08208238[]; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG1_X; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern TaskFunc gUnknown_03005CF0; extern struct Sprite *gUnknown_020384F4; extern struct SpriteTemplate gUnknown_02024E8C; @@ -586,8 +586,8 @@ void sub_809D85C(void) REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - REG_BG3HOFS = gUnknown_030041B0; - REG_BG3VOFS = gUnknown_030041B8; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; LoadOam(); ProcessSpriteCopyRequests(); @@ -813,11 +813,11 @@ bool8 sub_809DA84(void) case 20: if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { - gUnknown_030041B0 = 256; + gBattle_BG3_X = 256; } else { - gUnknown_030041B0 = 0; + gBattle_BG3_X = 0; } gMain.state++; @@ -872,8 +872,8 @@ static void sub_809DE64(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; REG_BG0HOFS = 0; REG_BG0VOFS = 0; @@ -2176,11 +2176,11 @@ void sub_809F43C(u8 taskId) pssData.loadGfxState = 0; if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { - gUnknown_030041B0 = 256; + gBattle_BG3_X = 256; } else { - gUnknown_030041B0 = 0; + gBattle_BG3_X = 0; } gMain.state++; diff --git a/src/scanline_effect.c b/src/scanline_effect.c index 0fa5b024d..b4de0689f 100644 --- a/src/scanline_effect.c +++ b/src/scanline_effect.c @@ -13,10 +13,10 @@ extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; -extern u16 gUnknown_030041B0; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; -EWRAM_DATA static u8 gUnknown_0202FFA4 = 0; +EWRAM_DATA static u8 sShouldStopWaveTask = FALSE; struct ScanlineEffect gScanlineEffect; @@ -27,27 +27,27 @@ u16 gScanlineEffectRegBuffers[2][0x3C0]; void ScanlineEffect_Stop(void) { - gScanlineEffect.unk15 = 0; + gScanlineEffect.state = 0; DmaStop(0); - if (gScanlineEffect.taskId != 0xFF) + if (gScanlineEffect.waveTaskId != 0xFF) { - DestroyTask(gScanlineEffect.taskId); - gScanlineEffect.taskId = 0xFF; + DestroyTask(gScanlineEffect.waveTaskId); + gScanlineEffect.waveTaskId = 0xFF; } } -void dp12_8087EA4(void) +void ScanlineEffect_Clear(void) { CpuFill16(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); - gScanlineEffect.src[0] = NULL; - gScanlineEffect.src[1] = NULL; + gScanlineEffect.dmaSrcBuffers[0] = NULL; + gScanlineEffect.dmaSrcBuffers[1] = NULL; gScanlineEffect.dmaDest = NULL; gScanlineEffect.dmaControl = 0; - gScanlineEffect.srcBank = 0; - gScanlineEffect.unk15 = 0; - gScanlineEffect.unk16 = 0; - gScanlineEffect.unk17 = 0; - gScanlineEffect.taskId = 0xFF; + gScanlineEffect.srcBuffer = 0; + gScanlineEffect.state = 0; + gScanlineEffect.unused16 = 0; + gScanlineEffect.unused17 = 0; + gScanlineEffect.waveTaskId = 0xFF; } void ScanlineEffect_SetParams(struct ScanlineEffectParams params) @@ -56,48 +56,49 @@ void ScanlineEffect_SetParams(struct ScanlineEffectParams params) { // Set the DMA src to the value for the second scanline because the // first DMA transfer occurs in HBlank *after* the first scanline is drawn - gScanlineEffect.src[0] = (u16 *)gScanlineEffectRegBuffers[0] + 1; - gScanlineEffect.src[1] = (u16 *)gScanlineEffectRegBuffers[1] + 1; + gScanlineEffect.dmaSrcBuffers[0] = (u16 *)gScanlineEffectRegBuffers[0] + 1; + gScanlineEffect.dmaSrcBuffers[1] = (u16 *)gScanlineEffectRegBuffers[1] + 1; gScanlineEffect.setFirstScanlineReg = CopyValue16Bit; } else // assume 32-bit { // Set the DMA src to the value for the second scanline because the // first DMA transfer occurs in HBlank *after* the first scanline is drawn - gScanlineEffect.src[0] = (u32 *)gScanlineEffectRegBuffers[0] + 1; - gScanlineEffect.src[1] = (u32 *)gScanlineEffectRegBuffers[1] + 1; + gScanlineEffect.dmaSrcBuffers[0] = (u32 *)gScanlineEffectRegBuffers[0] + 1; + gScanlineEffect.dmaSrcBuffers[1] = (u32 *)gScanlineEffectRegBuffers[1] + 1; gScanlineEffect.setFirstScanlineReg = CopyValue32Bit; } gScanlineEffect.dmaControl = params.dmaControl; - gScanlineEffect.dmaDest = params.dmaDest; - gScanlineEffect.unk15 = params.unk8; - gScanlineEffect.unk16 = params.unk9; - gScanlineEffect.unk17 = params.unk9; + gScanlineEffect.dmaDest = params.dmaDest; + gScanlineEffect.state = params.initState; + gScanlineEffect.unused16 = params.unused9; + gScanlineEffect.unused17 = params.unused9; } void ScanlineEffect_InitHBlankDmaTransfer(void) { - if (gScanlineEffect.unk15 != 0) + if (gScanlineEffect.state == 0) { - if (gScanlineEffect.unk15 == 3) - { - gScanlineEffect.unk15 = 0; - DmaStop(0); - gUnknown_0202FFA4 = 1; - } - else - { - DmaStop(0); - // Set DMA to copy to dest register on each HBlank for the next frame. - // The HBlank DMA transfers do not occurr during VBlank, so the transfer - // will begin on the HBlank after the first scanline - DmaSet(0, gScanlineEffect.src[gScanlineEffect.srcBank], gScanlineEffect.dmaDest, gScanlineEffect.dmaControl); - // Manually set the reg for the first scanline - gScanlineEffect.setFirstScanlineReg(); - // Swap current buffer - gScanlineEffect.srcBank ^= 1; - } + return; + } + else if (gScanlineEffect.state == 3) + { + gScanlineEffect.state = 0; + DmaStop(0); + sShouldStopWaveTask = TRUE; + } + else + { + DmaStop(0); + // Set DMA to copy to dest register on each HBlank for the next frame. + // The HBlank DMA transfers do not occurr during VBlank, so the transfer + // will begin on the HBlank after the first scanline + DmaSet(0, gScanlineEffect.dmaSrcBuffers[gScanlineEffect.srcBuffer], gScanlineEffect.dmaDest, gScanlineEffect.dmaControl); + // Manually set the reg for the first scanline + gScanlineEffect.setFirstScanlineReg(); + // Swap current buffer + gScanlineEffect.srcBuffer ^= 1; } } @@ -107,7 +108,7 @@ void ScanlineEffect_InitHBlankDmaTransfer(void) static void CopyValue16Bit(void) { u16 *dest = (u16 *)gScanlineEffect.dmaDest; - u16 *src = (u16 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBank]; + u16 *src = (u16 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer]; *dest = *src; } @@ -115,86 +116,87 @@ static void CopyValue16Bit(void) static void CopyValue32Bit(void) { u32 *dest = (u32 *)gScanlineEffect.dmaDest; - u32 *src = (u32 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBank]; + u32 *src = (u32 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer]; *dest = *src; } -#define tStartLine data[0] -#define tEndLine data[1] -#define framesUntilMove data[4] -#define tDelayInterval data[5] -#define tRegOffset data[6] +#define tStartLine data[0] +#define tEndLine data[1] +#define tWaveLength data[2] +#define tSrcBufferOffset data[3] +#define tFramesUntilMove data[4] +#define tDelayInterval data[5] +#define tRegOffset data[6] +#define tApplyBattleBgOffsets data[7] static void TaskFunc_UpdateWavePerFrame(u8 taskId) { int value = 0; + int i; + int offset; - if (gUnknown_0202FFA4) + if (sShouldStopWaveTask) { DestroyTask(taskId); - gScanlineEffect.taskId = 0xFF; + gScanlineEffect.waveTaskId = 0xFF; } else { - if (gTasks[taskId].data[7]) + if (gTasks[taskId].tApplyBattleBgOffsets) { switch (gTasks[taskId].tRegOffset) { - case 0x0: + case SCANLINE_EFFECT_REG_BG0HOFS: value = gBattle_BG0_X; break; - case 0x2: + case SCANLINE_EFFECT_REG_BG0VOFS: value = gBattle_BG0_Y; break; - case 0x4: + case SCANLINE_EFFECT_REG_BG1HOFS: value = gBattle_BG1_X; break; - case 0x6: + case SCANLINE_EFFECT_REG_BG1VOFS: value = gBattle_BG1_Y; break; - case 0x8: + case SCANLINE_EFFECT_REG_BG2HOFS: value = gBattle_BG2_X; break; - case 0xA: + case SCANLINE_EFFECT_REG_BG2VOFS: value = gBattle_BG2_Y; break; - case 0xC: - value = gUnknown_030041B0; + case SCANLINE_EFFECT_REG_BG3HOFS: + value = gBattle_BG3_X; break; - case 0xE: - value = gUnknown_030041B8; + case SCANLINE_EFFECT_REG_BG3VOFS: + value = gBattle_BG3_Y; break; } } - if (gTasks[taskId].framesUntilMove != 0) + if (gTasks[taskId].tFramesUntilMove != 0) { - int i; - int offset; - - gTasks[taskId].framesUntilMove--; - offset = gTasks[taskId].data[3] + 320; + gTasks[taskId].tFramesUntilMove--; + offset = gTasks[taskId].tSrcBufferOffset + 320; for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++) { - gScanlineEffectRegBuffers[gScanlineEffect.srcBank][i] = gScanlineEffectRegBuffers[0][offset] + value; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gScanlineEffectRegBuffers[0][offset] + value; offset++; } } else { - int i; - int offset; - - gTasks[taskId].framesUntilMove = gTasks[taskId].tDelayInterval; - offset = gTasks[taskId].data[3] + 320; + gTasks[taskId].tFramesUntilMove = gTasks[taskId].tDelayInterval; + offset = gTasks[taskId].tSrcBufferOffset + 320; for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++) { - gScanlineEffectRegBuffers[gScanlineEffect.srcBank][i] = gScanlineEffectRegBuffers[0][offset] + value; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gScanlineEffectRegBuffers[0][offset] + value; offset++; } - gTasks[taskId].data[3]++; - if (gTasks[taskId].data[3] == gTasks[taskId].data[2]) - gTasks[taskId].data[3] = 0; + + // increment src buffer offset + gTasks[taskId].tSrcBufferOffset++; + if (gTasks[taskId].tSrcBufferOffset == gTasks[taskId].tWaveLength) + gTasks[taskId].tSrcBufferOffset = 0; } } } @@ -216,39 +218,38 @@ static void GenerateWave(u16 *buffer, u8 frequency, u8 amplitude, u8 unused) // 'frequency' and 'amplitude' control the frequency and amplitude of the wave. // 'delayInterval' controls how fast the wave travels up the screen. The wave will shift upwards one scanline every 'delayInterval'+1 frames. // 'regOffset' is the offset of the video register to modify. -u8 ScanlineEffect_InitWave(u8 startLine, u8 endLine, u8 frequency, u8 amplitude, u8 delayInterval, u8 regOffset, bool8 a7) +u8 ScanlineEffect_InitWave(u8 startLine, u8 endLine, u8 frequency, u8 amplitude, u8 delayInterval, u8 regOffset, bool8 applyBattleBgOffsets) { int i; int offset; struct ScanlineEffectParams params; u8 taskId; - dp12_8087EA4(); + ScanlineEffect_Clear(); params.dmaDest = (void *)(REG_ADDR_BG0HOFS + regOffset); params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; - params.unk8 = 1; - params.unk9 = 0; + params.initState = 1; + params.unused9 = 0; ScanlineEffect_SetParams(params); taskId = CreateTask(TaskFunc_UpdateWavePerFrame, 0); - gTasks[taskId].tStartLine = startLine; - gTasks[taskId].tEndLine = endLine; - gTasks[taskId].data[2] = 256 / frequency; - gTasks[taskId].data[3] = 0; - gTasks[taskId].framesUntilMove = delayInterval; - gTasks[taskId].tDelayInterval = delayInterval; - gTasks[taskId].tRegOffset = regOffset; - gTasks[taskId].data[7] = a7; + gTasks[taskId].tStartLine = startLine; + gTasks[taskId].tEndLine = endLine; + gTasks[taskId].tWaveLength = 256 / frequency; + gTasks[taskId].tSrcBufferOffset = 0; + gTasks[taskId].tFramesUntilMove = delayInterval; + gTasks[taskId].tDelayInterval = delayInterval; + gTasks[taskId].tRegOffset = regOffset; + gTasks[taskId].tApplyBattleBgOffsets = applyBattleBgOffsets; - gScanlineEffect.taskId = taskId; - gUnknown_0202FFA4 = 0; + gScanlineEffect.waveTaskId = taskId; + sShouldStopWaveTask = FALSE; GenerateWave(&gScanlineEffectRegBuffers[0][320], frequency, amplitude, endLine - startLine); offset = 320; - for (i = startLine; i < endLine; i++) { gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[0][offset]; diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index aeea3e292..53eb2f1e8 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -71,8 +71,8 @@ extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; -extern u16 gUnknown_030041B0; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; extern u16 gMoveToLearn; @@ -206,8 +206,8 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 256; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 256; + gBattle_BG3_Y = 0; Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); gBattleTerrain = BATTLE_TERRAIN_PLAIN; @@ -314,8 +314,8 @@ static void CB2_EvolutionSceneLoadGraphics(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 256; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 256; + gBattle_BG3_Y = 0; Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); gBattleTerrain = BATTLE_TERRAIN_PLAIN; @@ -368,8 +368,8 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 256; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 256; + gBattle_BG3_Y = 0; gMain.state++; break; case 1: @@ -3929,8 +3929,8 @@ static void VBlankCB_EvolutionScene(void) REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - REG_BG3HOFS = gUnknown_030041B0; - REG_BG3VOFS = gUnknown_030041B8; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -3945,8 +3945,8 @@ static void VBlankCB_TradeEvolutionScene(void) REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - REG_BG3HOFS = gUnknown_030041B0; - REG_BG3VOFS = gUnknown_030041B8; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index f39745c02..303dcf3e0 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -16,6 +16,7 @@ #include "data2.h" #include "decompress.h" #include "random.h" +#include "scanline_effect.h" #include "trig.h" #include "ewram.h" @@ -95,7 +96,6 @@ bool8 sub_80C5DCC(void); bool8 sub_80C5F98(void); void ReturnFromHallOfFamePC(void); u16 SpeciesToPokedexNum(u16 species); -void ScanlineEffect_Stop(void); // data and gfx diff --git a/src/scene/title_screen.c b/src/scene/title_screen.c index 2de3554fe..202b752a6 100644 --- a/src/scene/title_screen.c +++ b/src/scene/title_screen.c @@ -711,7 +711,7 @@ void CB2_InitTitleScreen(void) if (!UpdatePaletteFade()) { StartPokemonLogoShine(FALSE); - ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 0, 4, 1); + ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 0, SCANLINE_EFFECT_REG_BG1HOFS, TRUE); SetMainCallback2(MainCB2); } break; diff --git a/sym_common.txt b/sym_common.txt index 85a5ad6e3..cfb1b6b13 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -8,13 +8,13 @@ @ battle .align 2 -gUnknown_030041B0: @ 30041B0 +gBattle_BG3_X: @ 30041B0 .space 0x4 gBattle_BG1_Y: @ 30041B4 .space 0x4 -gUnknown_030041B8: @ 30041B8 +gBattle_BG3_Y: @ 30041B8 .space 0x8 gBattleTextBuff1: @ 30041C0 |