mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-04-25 15:49:02 -05:00
ScreenScrollManager cleanup
This commit is contained in:
parent
91ba1a2da7
commit
dca10e7018
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_OV100_021D4E3C_H
|
||||
#define POKEPLATINUM_STRUCT_OV100_021D4E3C_H
|
||||
|
||||
#include "struct_decls/struct_02013BE0_decl.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_OV104_0223F094_H
|
||||
#define POKEPLATINUM_STRUCT_OV104_0223F094_H
|
||||
|
||||
#include "struct_decls/struct_02013BE0_decl.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
#ifndef POKEPLATINUM_UNK_02013B10_H
|
||||
#define POKEPLATINUM_UNK_02013B10_H
|
||||
#ifndef POKEPLATINUM_SCREEN_SCROLL_MANAGER_H
|
||||
#define POKEPLATINUM_SCREEN_SCROLL_MANAGER_H
|
||||
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/struct_02013BE0_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
#include "constants/heap.h"
|
||||
|
||||
#define BUFFER_MANAGER_MODE_SINGLE 0
|
||||
|
|
@ -17,6 +16,28 @@ enum BufferManagerDMAType {
|
|||
BUFFER_MANAGER_DMA_TYPE_32BIT = 1
|
||||
};
|
||||
|
||||
typedef struct BufferManager {
|
||||
void *buffers[2];
|
||||
u8 writeBuffer;
|
||||
u8 mode;
|
||||
u8 padding[2];
|
||||
} BufferManager;
|
||||
|
||||
typedef struct ScreenScrollManager {
|
||||
u32 buffer1[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
|
||||
u32 buffer2[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
|
||||
BufferManager *bufferManager;
|
||||
SysTask *scrollTask;
|
||||
BOOL unused;
|
||||
s16 sineTable[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
|
||||
u8 start;
|
||||
u8 end;
|
||||
u32 offsetRegisterAddr;
|
||||
u32 initValue;
|
||||
s16 scrollPos;
|
||||
s16 scrollSpeed;
|
||||
} ScreenScrollManager;
|
||||
|
||||
BufferManager *BufferManager_New(enum HeapId heapID, void *buffer1, void *buffer2);
|
||||
void BufferManager_Delete(BufferManager *bufferManager);
|
||||
void *BufferManager_GetWriteBuffer(const BufferManager *bufferManager);
|
||||
|
|
@ -35,4 +56,4 @@ void ScreenScrollManager_SwapBuffers(ScreenScrollManager *screenScrollMgr);
|
|||
void ScreenScrollManager_RestartDMA(ScreenScrollManager *screenScrollMgr);
|
||||
void ScreenScrollManager_CreateSineTable(s16 *dest, u32 entryCount, u16 angleIncrement, fx32 amplitude);
|
||||
|
||||
#endif // POKEPLATINUM_UNK_02013B10_H
|
||||
#endif // POKEPLATINUM_SCREEN_SCROLL_MANAGER_H
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_02013B10_DECL_H
|
||||
#define POKEPLATINUM_STRUCT_02013B10_DECL_H
|
||||
|
||||
typedef struct BufferManager BufferManager;
|
||||
|
||||
#endif // POKEPLATINUM_STRUCT_02013B10_DECL_H
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_02013BE0_DECL_H
|
||||
#define POKEPLATINUM_STRUCT_02013BE0_DECL_H
|
||||
|
||||
typedef struct ScreenScrollManager ScreenScrollManager;
|
||||
|
||||
#endif // POKEPLATINUM_STRUCT_02013BE0_DECL_H
|
||||
|
|
@ -52,7 +52,7 @@ Static main
|
|||
Object main.nef.p/src_unk_020131EC.c.o
|
||||
Object main.nef.p/src_rtc.c.o
|
||||
Object main.nef.p/src_unk_02013A04.c.o
|
||||
Object main.nef.p/src_unk_02013B10.c.o
|
||||
Object main.nef.p/src_screen_scroll_manager.c.o
|
||||
Object main.nef.p/src_unk_02014000.c.o
|
||||
Object main.nef.p/src_unk_020149F0.c.o
|
||||
Object main.nef.p/src_unk_02014A84.c.o
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ pokeplatinum_c = files(
|
|||
'unk_020131EC.c',
|
||||
'rtc.c',
|
||||
'unk_02013A04.c',
|
||||
'unk_02013B10.c',
|
||||
'screen_scroll_manager.c',
|
||||
'unk_02014000.c',
|
||||
'unk_020149F0.c',
|
||||
'unk_02014A84.c',
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "constants/heap.h"
|
||||
#include "message.h"
|
||||
#include "struct_decls/struct_02013BE0_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
#include "struct_decls/struct_020203AC_decl.h"
|
||||
#include "struct_decls/struct_02022550_decl.h"
|
||||
|
|
@ -31,7 +30,7 @@
|
|||
#include "string_template.h"
|
||||
#include "unk_0200D9E8.h"
|
||||
#include "unk_0200F174.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
#include "unk_02018340.h"
|
||||
#include "unk_0201D670.h"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
#include "struct_decls/struct_02009714_decl.h"
|
||||
#include "struct_decls/struct_02009DC8_decl.h"
|
||||
#include "struct_decls/struct_02009F38_decl.h"
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
#include "struct_decls/struct_020218BC_decl.h"
|
||||
#include "struct_decls/struct_02022550_decl.h"
|
||||
|
|
@ -27,7 +26,7 @@
|
|||
#include "unk_0200A328.h"
|
||||
#include "unk_0200A784.h"
|
||||
#include "unk_0200D9E8.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
#include "unk_02018340.h"
|
||||
#include "unk_0201D15C.h"
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
|
||||
#include "unk_02005474.h"
|
||||
#include "unk_0200D9E8.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
#include "overlay005/hblank_system.h"
|
||||
#include "overlay005/ov5_021EF4BC.h"
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@
|
|||
|
||||
#include "struct_decls/struct_02002F38_decl.h"
|
||||
#include "struct_decls/sprite_decl.h"
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/struct_02013BE0_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
#include "overlay012/struct_ov12_0221FCDC_decl.h"
|
||||
|
||||
|
|
@ -21,7 +19,7 @@
|
|||
#include "unk_0200762C.h"
|
||||
#include "unk_0200C6E4.h"
|
||||
#include "unk_0200D9E8.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
#include "unk_0201F834.h"
|
||||
#include "unk_020218BC.h"
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include "struct_decls/struct_02009DC8_decl.h"
|
||||
#include "message.h"
|
||||
#include "struct_decls/struct_02013A04_decl.h"
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/struct_02018340_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
#include "struct_decls/struct_020218BC_decl.h"
|
||||
|
|
@ -42,7 +41,7 @@
|
|||
#include "unk_0200DA60.h"
|
||||
#include "unk_0200F174.h"
|
||||
#include "unk_02013A04.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
#include "unk_02018340.h"
|
||||
#include "unk_0201D670.h"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "inlines.h"
|
||||
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
|
||||
#include "struct_defs/struct_0205AA50.h"
|
||||
|
|
@ -13,7 +12,7 @@
|
|||
|
||||
#include "unk_0200679C.h"
|
||||
#include "unk_0200D9E8.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
#include "unk_0201CCF0.h"
|
||||
#include "overlay100/ov100_021D4E04.h"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
|
||||
#include "struct_defs/struct_0205AA50.h"
|
||||
|
|
@ -11,7 +10,7 @@
|
|||
#include "overlay104/struct_ov104_0223F1B4.h"
|
||||
|
||||
#include "unk_0200D9E8.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
#include "unk_02018340.h"
|
||||
#include "overlay104/ov104_0223E894.h"
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
#include "struct_decls/struct_02009714_decl.h"
|
||||
#include "struct_decls/struct_02009DC8_decl.h"
|
||||
#include "message.h"
|
||||
#include "struct_decls/struct_02013B10_decl.h"
|
||||
#include "struct_decls/struct_02015920_decl.h"
|
||||
#include "struct_decls/struct_02018340_decl.h"
|
||||
#include "struct_decls/sys_task.h"
|
||||
|
|
@ -47,7 +46,7 @@
|
|||
#include "unk_0200D9E8.h"
|
||||
#include "unk_0200DA60.h"
|
||||
#include "unk_0200F174.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "unk_02015920.h"
|
||||
#include "unk_02017728.h"
|
||||
#include "heap.h"
|
||||
|
|
|
|||
|
|
@ -5,31 +5,9 @@
|
|||
#include "struct_decls/sys_task.h"
|
||||
|
||||
#include "unk_0200D9E8.h"
|
||||
#include "unk_02013B10.h"
|
||||
#include "screen_scroll_manager.h"
|
||||
#include "heap.h"
|
||||
|
||||
typedef struct BufferManager {
|
||||
void *buffers[2];
|
||||
u8 writeBuffer;
|
||||
u8 mode;
|
||||
u8 padding[2];
|
||||
} BufferManager;
|
||||
|
||||
typedef struct ScreenScrollManager {
|
||||
u32 buffer1[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
|
||||
u32 buffer2[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
|
||||
BufferManager *bufferManager;
|
||||
SysTask *scrollTask;
|
||||
BOOL unused;
|
||||
s16 sineTable[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
|
||||
u8 start;
|
||||
u8 end;
|
||||
u32 offsetRegisterAddr;
|
||||
u32 initValue;
|
||||
s16 scrollPos;
|
||||
s16 scrollSpeed;
|
||||
} ScreenScrollManager;
|
||||
|
||||
static void ScreenScrollManager_StopDMA(void);
|
||||
static void ScreenScrollManager_StartDMA(const ScreenScrollManager *screenScrollMgr);
|
||||
static void ScreenScrollManager_UpdateScrollX(SysTask *task, void *param);
|
||||
|
|
@ -50,9 +28,7 @@ BufferManager *BufferManager_New(enum HeapId heapID, void *buffer1, void *buffer
|
|||
void BufferManager_Delete(BufferManager *bufferManager)
|
||||
{
|
||||
GF_ASSERT(bufferManager);
|
||||
|
||||
Heap_FreeToHeap(bufferManager);
|
||||
bufferManager = NULL;
|
||||
}
|
||||
|
||||
void *BufferManager_GetWriteBuffer(const BufferManager *bufferManager)
|
||||
|
|
@ -153,15 +129,13 @@ void ScreenScrollManager_ScrollY(ScreenScrollManager *screenScrollMgr, u8 start,
|
|||
|
||||
void ScreenScrollManager_Stop(ScreenScrollManager *screenScrollMgr)
|
||||
{
|
||||
void *writeBuffer;
|
||||
|
||||
GF_ASSERT(screenScrollMgr);
|
||||
|
||||
if (screenScrollMgr->scrollTask) {
|
||||
SysTask_Done(screenScrollMgr->scrollTask);
|
||||
screenScrollMgr->scrollTask = NULL;
|
||||
|
||||
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
void *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
memset(writeBuffer, screenScrollMgr->initValue, sizeof(u32) * SCREEN_SCROLL_MANAGER_BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
|
|
@ -181,8 +155,6 @@ void *ScreenScrollManager_GetWriteBuffer(ScreenScrollManager *screenScrollMgr)
|
|||
|
||||
void ScreenScrollManager_SwapBuffers(ScreenScrollManager *screenScrollMgr)
|
||||
{
|
||||
void *writeBuffer;
|
||||
|
||||
if (screenScrollMgr == NULL) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -190,7 +162,7 @@ void ScreenScrollManager_SwapBuffers(ScreenScrollManager *screenScrollMgr)
|
|||
if (screenScrollMgr->scrollTask) {
|
||||
BufferManager_SwapBuffers(screenScrollMgr->bufferManager);
|
||||
|
||||
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
void *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
MI_CpuFill32(writeBuffer, screenScrollMgr->initValue, sizeof(u32) * SCREEN_SCROLL_MANAGER_BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
|
|
@ -209,10 +181,8 @@ void ScreenScrollManager_RestartDMA(ScreenScrollManager *screenScrollMgr)
|
|||
|
||||
void ScreenScrollManager_CreateSineTable(s16 *dest, u32 entryCount, u16 angleIncrement, fx32 amplitude)
|
||||
{
|
||||
int i;
|
||||
u16 angle = 0;
|
||||
|
||||
for (i = 0; i < entryCount; i++) {
|
||||
for (int i = 0; i < entryCount; i++) {
|
||||
dest[i] = FX_Mul(FX_SinIdx(angle), amplitude) >> FX32_SHIFT;
|
||||
angle += angleIncrement;
|
||||
}
|
||||
|
|
@ -221,18 +191,12 @@ void ScreenScrollManager_CreateSineTable(s16 *dest, u32 entryCount, u16 angleInc
|
|||
static void ScreenScrollManager_UpdateScrollX(SysTask *task, void *param)
|
||||
{
|
||||
ScreenScrollManager *screenScrollMgr = param;
|
||||
int i;
|
||||
u32 *writeBuffer;
|
||||
u8 scrollPos;
|
||||
s16 xOff;
|
||||
u16 yOff;
|
||||
u32 *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
u8 scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
|
||||
|
||||
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
|
||||
|
||||
for (i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
|
||||
xOff = writeBuffer[i] & 0xffff;
|
||||
yOff = writeBuffer[i] >> 16;
|
||||
for (int i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
|
||||
s16 xOff = writeBuffer[i] & 0xffff;
|
||||
u16 yOff = writeBuffer[i] >> 16;
|
||||
|
||||
xOff += screenScrollMgr->sineTable[scrollPos];
|
||||
writeBuffer[i] = (yOff << 16) | (xOff & 0xffff);
|
||||
|
|
@ -243,28 +207,20 @@ static void ScreenScrollManager_UpdateScrollX(SysTask *task, void *param)
|
|||
|
||||
if (screenScrollMgr->scrollPos >= SCREEN_SCROLL_MANAGER_MAX_SCROLL) {
|
||||
screenScrollMgr->scrollPos %= SCREEN_SCROLL_MANAGER_MAX_SCROLL;
|
||||
} else {
|
||||
if (screenScrollMgr->scrollPos < 0) {
|
||||
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
|
||||
}
|
||||
} else if (screenScrollMgr->scrollPos < 0) {
|
||||
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
|
||||
}
|
||||
}
|
||||
|
||||
static void ScreenScrollManager_UpdateScrollY(SysTask *task, void *param)
|
||||
{
|
||||
ScreenScrollManager *screenScrollMgr = param;
|
||||
int i;
|
||||
u32 *writeBuffer;
|
||||
u8 scrollPos;
|
||||
s16 xOff;
|
||||
u16 yOff;
|
||||
u32 *writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
u8 scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
|
||||
|
||||
writeBuffer = BufferManager_GetWriteBuffer(screenScrollMgr->bufferManager);
|
||||
scrollPos = screenScrollMgr->scrollPos / SCREEN_SCROLL_MANAGER_SCALING_FACTOR;
|
||||
|
||||
for (i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
|
||||
xOff = writeBuffer[i] & 0xffff;
|
||||
yOff = writeBuffer[i] >> 16;
|
||||
for (int i = screenScrollMgr->start; i <= screenScrollMgr->end; i++) {
|
||||
s16 xOff = writeBuffer[i] & 0xffff;
|
||||
u16 yOff = writeBuffer[i] >> 16;
|
||||
|
||||
yOff += screenScrollMgr->sineTable[(scrollPos + 180) % SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
|
||||
writeBuffer[i] = (yOff << 16) | (xOff & 0xffff);
|
||||
|
|
@ -275,10 +231,8 @@ static void ScreenScrollManager_UpdateScrollY(SysTask *task, void *param)
|
|||
|
||||
if (screenScrollMgr->scrollPos >= SCREEN_SCROLL_MANAGER_MAX_SCROLL) {
|
||||
screenScrollMgr->scrollPos %= SCREEN_SCROLL_MANAGER_MAX_SCROLL;
|
||||
} else {
|
||||
if (screenScrollMgr->scrollPos < 0) {
|
||||
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
|
||||
}
|
||||
} else if (screenScrollMgr->scrollPos < 0) {
|
||||
screenScrollMgr->scrollPos += SCREEN_SCROLL_MANAGER_MAX_SCROLL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -289,10 +243,8 @@ void ScreenScrollManager_StopDMA(void)
|
|||
|
||||
void ScreenScrollManager_StartDMA(const ScreenScrollManager *screenScrollManager)
|
||||
{
|
||||
const void *readBuffer;
|
||||
|
||||
GF_ASSERT(screenScrollManager);
|
||||
readBuffer = BufferManager_GetReadBuffer(screenScrollManager->bufferManager);
|
||||
const void *readBuffer = BufferManager_GetReadBuffer(screenScrollManager->bufferManager);
|
||||
DC_FlushRange(readBuffer, sizeof(u32) * SCREEN_SCROLL_MANAGER_BUFFER_SIZE);
|
||||
|
||||
BufferManager_StartDMA(readBuffer, (void *)screenScrollManager->offsetRegisterAddr, sizeof(u32), BUFFER_MANAGER_DMA_TYPE_32BIT);
|
||||
Loading…
Reference in New Issue
Block a user