summaryrefslogtreecommitdiff
path: root/arm9
diff options
context:
space:
mode:
authorRémi Calixte <remicalixte.rmc@gmail.com>2021-08-29 00:12:36 +0200
committerRémi Calixte <remicalixte.rmc@gmail.com>2021-08-29 00:12:36 +0200
commitc97046f4b518d53a2508c896b15fd467b6559346 (patch)
tree57ab33da23a252c502711be7c4d64b3a89f7fcf6 /arm9
parent8d383810aa08aa9594086ed2f8b3e6a50927d53c (diff)
parent7994935696dcf9d81888e2d9d991f4b6a3e00738 (diff)
Merge branch 'master' into unk_02006D98
Diffstat (limited to 'arm9')
-rw-r--r--arm9/lib/NitroSDK/include/PXI_fifo.h23
-rw-r--r--arm9/lib/NitroSDK/include/SND_bank.h79
-rw-r--r--arm9/lib/NitroSDK/include/SND_command.h50
-rw-r--r--arm9/lib/NitroSDK/include/SND_main.h14
-rw-r--r--arm9/lib/NitroSDK/include/SND_work.h45
-rw-r--r--arm9/modules/59/asm/mod59_021D74E0_asm.s294
-rw-r--r--arm9/modules/59/include/mod59_021D74E0.h39
-rw-r--r--arm9/modules/59/src/mod59_021D74E0_src.c162
-rw-r--r--arm9/src/font.c2
-rw-r--r--arm9/src/render_window.c16
10 files changed, 180 insertions, 544 deletions
diff --git a/arm9/lib/NitroSDK/include/PXI_fifo.h b/arm9/lib/NitroSDK/include/PXI_fifo.h
index b1ca33f3..815da961 100644
--- a/arm9/lib/NitroSDK/include/PXI_fifo.h
+++ b/arm9/lib/NitroSDK/include/PXI_fifo.h
@@ -4,29 +4,6 @@
#include "nitro/PXI_fifo_shared.h"
#include "nitro/types.h"
-typedef enum
-{
- PXI_FIFO_SUCCESS = 0,
- PXI_FIFO_FAIL_SEND_ERR = -1,
- PXI_FIFO_FAIL_SEND_FULL = -2,
- PXI_FIFO_FAIL_RECV_ERR = -3,
- PXI_FIFO_FAIL_RECV_EMPTY = -4,
- PXI_FIFO_NO_CALLBACK_ENTRY = -5
-} PXIFifoStatus;
-
-typedef void (*PXIFifoCallback) (PXIFifoTag tag, u32 data, BOOL err);
-
-typedef union
-{
- struct
- {
- u32 tag:5;
- u32 err:1;
- u32 data:26;
- } e;
- u32 raw;
-} PXIFifoMessage;
-
void PXI_InitFifo(void);
void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback);
BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc);
diff --git a/arm9/lib/NitroSDK/include/SND_bank.h b/arm9/lib/NitroSDK/include/SND_bank.h
index b9000d57..58fd8307 100644
--- a/arm9/lib/NitroSDK/include/SND_bank.h
+++ b/arm9/lib/NitroSDK/include/SND_bank.h
@@ -4,84 +4,7 @@
#include "global.h"
#include "SND_main.h"
-
-#define SND_INST_ILLEGAL 0
-#define SND_INST_PCM 1
-#define SND_INST_PSG 2
-#define SND_INST_NOISE 3
-#define SND_INST_DIRECTPCM 4
-#define SND_INST_DUMMY 5
-#define SND_INST_DRUM_TABLE 16
-#define SND_INST_KEY_SPLIT 17
-
-#define SND_BANK_MAX_WAVEARC 4
-#define SND_INST_MAX_KEYSPLIT 8
-
-#define SND_INST_OFFSET_TYPE(off) ((u8)off)
-#define SND_INST_OFFSET_NORMAL(bank, off) ((struct SNDInstParam *)((u8 *)bank + (u32)(off >> 8)))
-#define SND_INST_OFFSET_DRUMS(bank, off) ((struct SNDDrumSet *)((u8 *)bank + (u32)(off >> 8)))
-#define SND_INST_OFFSET_KEYSPL(bank, off) ((struct SNDKeySplit *)((u8 *)bank + (u32)(off >> 8)))
-
-struct SNDWaveArc;
-
-struct SNDWaveArcLink {
- struct SNDWaveArc *waveArc; // 0x0
- struct SNDWaveArcLink *waveArcLLnext; // 0x4
-}; // size = 0x8
-
-struct SNDBankData {
- struct SNDBinaryFileHeader fileHeader; // 0x00
- struct SNDBinaryBlockHeader blockHeader; // 0x10
- struct SNDWaveArcLink waveArcLinks[SND_BANK_MAX_WAVEARC]; // 0x18
- u32 instCount; // 0x38
- u32 instOffsets[]; // 0x3C
-}; // size = 0x40
-
-struct SNDWaveArc {
- struct SNDBinaryFileHeader fileHeader; // 0x00
- struct SNDBinaryBlockHeader blockHeader; // 0x10
- struct SNDWaveArcLink *waveArcLLHead; // 0x18
- u8 unk_1C[28]; // 0x1C
- u32 waveCount; // 0x38
- u32 waveOffsets[]; // 0x3C
-}; // size = 0x3C
-
-struct SNDInstParam {
- u16 wave[2]; // 0x0
- u8 rootKey; // 0x4
- u8 envAttack; // 0x5
- u8 envDecay; // 0x6
- u8 envSustain; // 0x7
- u8 envRelease; // 0x8
- u8 pan; // 0x9
-}; // size = 0xA
-
-struct SNDInstData {
- u8 type; // 0x0
- u8 unk_1; // 0x1
- struct SNDInstParam param; // 0x2
-}; // size = 0xC
-
-struct SNDKeySplit {
- u8 key[SND_INST_MAX_KEYSPLIT]; // 0x0
- struct SNDInstData instruments[]; // 0x8
-}; // size = 0x8
-
-struct SNDDrumSet {
- u8 minKey;
- u8 maxKey;
- struct SNDInstData instruments[];
-}; // size = 0x2
-
-struct SNDInstPos {
- u32 program; // 0x0
- u32 index; // 0x4
-}; // size = 0x8
-
-struct SNDWaveData {
- struct SNDWaveParam param; // 0x0
- u8 sampleData[]; // 0xC
-}; // size = 0xC
+#include "nitro/SND_bank_shared.h"
void SND_AssignWaveArc(struct SNDBankData *bankData, s32 index, struct SNDWaveArc *waveArc);
void SND_DestroyBank(struct SNDBankData *bankData);
diff --git a/arm9/lib/NitroSDK/include/SND_command.h b/arm9/lib/NitroSDK/include/SND_command.h
index ff392833..4d44c583 100644
--- a/arm9/lib/NitroSDK/include/SND_command.h
+++ b/arm9/lib/NitroSDK/include/SND_command.h
@@ -1,55 +1,9 @@
#ifndef GUARD_SND_COMMAND_H
#define GUARD_SND_COMMAND_H
-#include "global.h"
+#include "nitro/SND_command_shared.h"
-#define SND_CMD_COUNT 256
-#define SND_CMD_ARG_MAX 4
-
-#define SND_CMD_FLAG_NOBLOCK 0x0
-#define SND_CMD_FLAG_BLOCK 0x1
-#define SND_CMD_FLAG_IMMEDIATE 0x2
-
-#define SND_CMD_START_SEQ 0x00
-#define SND_CMD_STOP_SEQ 0x01
-#define SND_CMD_PREPARE_SEQ 0x02
-#define SND_CMD_START_PREPARED_SEQ 0x03
-#define SND_CMD_PAUSE_SEQ 0x04
-#define SND_CMD_SKIP_SEQ 0x05
-#define SND_CMD_PLAYER_PARAM 0x06
-#define SND_CMD_TRACK_PARAM 0x07
-#define SND_CMD_MUTE_TRACK 0x08
-#define SND_CMD_ALLOCATABLE_CHANNEL 0x09
-#define SND_CMD_PLAYER_LOCAL_VAR 0x0A
-#define SND_CMD_PLAYER_GLOBAL_VAR 0x0B
-#define SND_CMD_START_TIMER 0x0C
-#define SND_CMD_STOP_TIMER 0x0D
-#define SND_CMD_SETUP_CHANNEL_PCM 0x0E
-#define SND_CMD_SETUP_CHANNEL_PSG 0x0F
-#define SND_CMD_SETUP_CHANNEL_NOISE 0x10
-#define SND_CMD_SETUP_CAPTURE 0x11
-#define SND_CMD_SETUP_ALARM 0x12
-#define SND_CMD_CHANNEL_TIMER 0x13
-#define SND_CMD_CHANNEL_VOLUME 0x14
-#define SND_CMD_CHANNEL_PAN 0x15
-#define SND_CMD_SURROUND_DECAY 0x16
-#define SND_CMD_MASTER_VOLUME 0x17
-#define SND_CMD_MASTER_PAN 0x18
-#define SND_CMD_OUTPUT_SELECTOR 0x19
-#define SND_CMD_LOCK_CHANNEL 0x1A
-#define SND_CMD_UNLOCK_CHANNEL 0x1B
-#define SND_CMD_STOP_UNLOCKED_CHANNEL 0x1C
-#define SND_CMD_SET_SHARED_WORK 0x1D
-#define SND_CMD_INVALIDATE_SEQ 0x1E
-#define SND_CMD_INVALIDATE_BANK 0x1F
-#define SND_CMD_INVALIDATE_WAVE 0x20
-#define SND_CMD_READ_DRIVER_INFO 0x21
-
-struct SNDCommand {
- struct SNDCommand *llNext; // 0x0
- s32 id; // 0x4
- u32 arg[SND_CMD_ARG_MAX]; // 0x8
-}; // size = 0x18
+#include "nitro/types.h"
void SND_CommandInit(void);
const struct SNDCommand *SND_RecvCommandReply(u32 flags);
diff --git a/arm9/lib/NitroSDK/include/SND_main.h b/arm9/lib/NitroSDK/include/SND_main.h
index 8fa9364e..aa476bae 100644
--- a/arm9/lib/NitroSDK/include/SND_main.h
+++ b/arm9/lib/NitroSDK/include/SND_main.h
@@ -9,18 +9,4 @@ void SNDi_UnlockMutex(void);
void SNDi_LockMutex(void);
void SND_Init(void);
-struct SNDBinaryFileHeader {
- s8 signature[4]; // 0x0
- u16 byteOrder; // 0x4
- u16 version; // 0x6
- u32 fileSize; // 0x8
- u16 headerSize; // 0xC
- u16 dataBlocks; // 0xE
-}; // size = 0x10
-
-typedef struct SNDBinaryBlockHeader {
- u32 type; // 0x0
- u32 size; // 0x4
-} SNDBinaryBlockHeader; // size = 0x8
-
#endif // GUARD_SND_MAIN_H
diff --git a/arm9/lib/NitroSDK/include/SND_work.h b/arm9/lib/NitroSDK/include/SND_work.h
index a8a3d62b..f3ed08c8 100644
--- a/arm9/lib/NitroSDK/include/SND_work.h
+++ b/arm9/lib/NitroSDK/include/SND_work.h
@@ -6,51 +6,6 @@
#include "SND_main.h"
#include "nitro/SND_work_shared.h"
-struct SNDDriverInfo {
- struct SNDWork work; // 0x0000
- u32 channelControls[SND_CHANNEL_COUNT]; // 0x1180
- struct SNDWork *workPtr; // 0x11C0
- u32 lockedChannels; // 0x11C4
- u8 unk_XXX[24]; // 0x11C8
-}; // size = 0x11E0
-
-struct SNDChannelInfo {
- struct {
- BOOL active : 1;
- BOOL locked: 1;
- } flags; // 0x0
- u16 volume; // 0x4
- u8 pan; // 0x6
- u8 unk_7; // 0x7
- s32 envStatus; // 0x8
-}; // size = 0xC
-
-struct SNDPlayerInfo {
- struct {
- BOOL active : 1;
- BOOL paused : 1;
- } flags; // 0x0
- u16 trackBitMask; // 0x4
- u16 tempo; // 0x6
- u8 volume; // 0x8
- u8 unk_9[3]; // 0x9
-}; // size = 0xC
-
-struct SNDTrackInfo {
- u16 program; // 0x0
- u8 volume; // 0x2
- u8 expression; // 0x3
-
- s8 pitchBend; // 0x4
- u8 bendRange; // 0x5
- u8 pan; // 0x6
- s8 transpose; // 0x7
-
- u8 unk_8; // 0x8
- u8 chnCount; // 0x9
- u8 channel[SND_CHANNEL_COUNT]; // 0xA
-}; // size = 0x1A
-
u32 SND_GetPlayerStatus(void);
u16 SND_GetChannelStatus(void);
//u16 SND_GetCaptureStatus(void);
diff --git a/arm9/modules/59/asm/mod59_021D74E0_asm.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s
index 7cb6272f..77bc1174 100644
--- a/arm9/modules/59/asm/mod59_021D74E0_asm.s
+++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s
@@ -5,300 +5,6 @@
.extern MOD59_021D7730
- thumb_func_start MOD59_021D778C
-MOD59_021D778C: ; 0x021D778C
- push {r3, r4, r5, lr}
- sub sp, #0x78
- ldr r5, _021D7954 ; =0x021D9F18
- add r4, r0, #0
- add r3, sp, #0x50
- mov r2, #5
-_021D7798:
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- sub r2, r2, #1
- bne _021D7798
- add r0, sp, #0x50
- bl GX_SetBanks
- ldr r0, [r4]
- bl BgConfig_Alloc
- add r3, sp, #0x40
- ldr r5, _021D7958 ; =0x021D9DCC
- str r0, [r4, #0x18]
- add r2, r3, #0
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- add r0, r2, #0
- bl SetBothScreensModesAndDisable
- ldr r5, _021D795C ; =0x021D9EA0
- add r3, sp, #0x24
- ldmia r5!, {r0, r1}
- add r2, r3, #0
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldr r0, [r5]
- mov r1, #0
- str r0, [r3]
- mov r0, #0xf
- strb r0, [r2, #0x12]
- mov r0, #6
- strb r0, [r2, #0x13]
- ldr r0, [r4, #0x18]
- add r3, r1, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #0
- bl BgClearTilemapBufferAndCommit
- mov r0, #0xe
- add r2, sp, #0x24
- strb r0, [r2, #0x12]
- mov r0, #5
- strb r0, [r2, #0x13]
- ldr r0, [r4, #0x18]
- mov r1, #1
- mov r3, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #1
- bl BgClearTilemapBufferAndCommit
- mov r0, #0xd
- add r2, sp, #0x24
- strb r0, [r2, #0x12]
- mov r0, #4
- strb r0, [r2, #0x13]
- ldr r0, [r4, #0x18]
- mov r1, #2
- mov r3, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #2
- bl BgClearTilemapBufferAndCommit
- mov r0, #0xc
- add r2, sp, #0x24
- strb r0, [r2, #0x12]
- mov r1, #3
- strb r1, [r2, #0x13]
- ldr r0, [r4, #0x18]
- mov r3, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #3
- bl BgClearTilemapBufferAndCommit
- mov r1, #0
- str r1, [sp]
- ldr r0, [r4]
- ldr r2, _021D7960 ; =0x000003E2
- str r0, [sp, #4]
- ldr r0, [r4, #0x18]
- mov r3, #4
- bl FUN_0200CD68
- mov r1, #0
- str r1, [sp]
- ldr r0, [r4]
- ldr r2, _021D7964 ; =0x000003D9
- str r0, [sp, #4]
- ldr r0, [r4, #0x18]
- mov r3, #3
- bl FUN_0200CB00
- ldr r2, [r4]
- mov r0, #0
- mov r1, #0xa0
- bl FUN_02002ED0
- ldr r2, [r4]
- mov r0, #0
- mov r1, #0xc0
- bl FUN_02002EEC
- ldr r5, _021D7968 ; =0x021D9EBC
- add r3, sp, #8
- ldmia r5!, {r0, r1}
- add r2, r3, #0
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldr r0, [r5]
- mov r1, #0xf
- str r0, [r3]
- add r0, sp, #8
- strb r1, [r0, #0x12]
- mov r1, #6
- strb r1, [r0, #0x13]
- ldr r0, [r4, #0x18]
- mov r1, #4
- mov r3, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #4
- bl BgClearTilemapBufferAndCommit
- mov r1, #0xe
- add r0, sp, #8
- strb r1, [r0, #0x12]
- mov r1, #5
- strb r1, [r0, #0x13]
- ldr r0, [r4, #0x18]
- add r2, sp, #8
- mov r3, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #5
- bl BgClearTilemapBufferAndCommit
- mov r1, #0xd
- add r0, sp, #8
- strb r1, [r0, #0x12]
- mov r1, #4
- strb r1, [r0, #0x13]
- ldr r0, [r4, #0x18]
- mov r1, #6
- add r2, sp, #8
- mov r3, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #6
- bl BgClearTilemapBufferAndCommit
- mov r1, #0xc
- add r0, sp, #8
- strb r1, [r0, #0x12]
- mov r1, #3
- strb r1, [r0, #0x13]
- ldr r0, [r4, #0x18]
- mov r1, #7
- add r2, sp, #8
- mov r3, #0
- bl InitBgFromTemplate
- ldr r0, [r4, #0x18]
- mov r1, #7
- bl BgClearTilemapBufferAndCommit
- mov r0, #0
- add r1, r0, #0
- bl ToggleBgLayer
- mov r0, #1
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #2
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #3
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #4
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #5
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #6
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #7
- mov r1, #0
- bl ToggleBgLayer
- add r0, r4, #0
- bl MOD59_021D8058
- mov r0, #0
- str r0, [r4, #0x78]
- add sp, #0x78
- pop {r3, r4, r5, pc}
- .align 2, 0
-_021D7954: .word MOD59_021D9F18
-_021D7958: .word MOD59_021D9DCC
-_021D795C: .word MOD59_021D9EA0
-_021D7960: .word 0x000003E2
-_021D7964: .word 0x000003D9
-_021D7968: .word MOD59_021D9EBC
- thumb_func_end MOD59_021D778C
-
- thumb_func_start MOD59_021D796C
-MOD59_021D796C: ; 0x021D796C
- push {r4, lr}
- add r4, r0, #0
- mov r0, #0
- add r1, r0, #0
- bl ToggleBgLayer
- mov r0, #1
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #2
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #3
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #4
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #5
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #6
- mov r1, #0
- bl ToggleBgLayer
- mov r0, #7
- mov r1, #0
- bl ToggleBgLayer
- ldr r0, [r4, #0x18]
- mov r1, #0
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- mov r1, #1
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- mov r1, #2
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- mov r1, #3
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- mov r1, #4
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- mov r1, #5
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- mov r1, #6
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- mov r1, #7
- bl FreeBgTilemapBuffer
- ldr r0, [r4, #0x18]
- bl FreeToHeap
- pop {r4, pc}
- thumb_func_end MOD59_021D796C
-
- thumb_func_start MOD59_021D79F8
-MOD59_021D79F8: ; 0x021D79F8
- push {r4, lr}
- add r4, r0, #0
- ldr r2, _021D7A30 ; =0x00000155
- ldr r3, [r4]
- mov r0, #1
- mov r1, #0x1a
- bl NewMsgDataFromNarc
- str r0, [r4, #0x4c]
- bl FUN_0201BD5C
- mov r0, #0
- ldr r3, [r4]
- add r1, r0, #0
- mov r2, #6
- bl FUN_020142EC
- str r0, [r4, #0x60]
- ldr r0, [r4]
- bl ScrStrBufs_new
- str r0, [r4, #0x64]
- mov r0, #0
- str r0, [r4, #0x50]
- str r0, [r4, #0x54]
- str r0, [r4, #0x2c]
- pop {r4, pc}
- nop
-_021D7A30: .word 0x00000155
- thumb_func_end MOD59_021D79F8
-
thumb_func_start MOD59_021D7A34
MOD59_021D7A34: ; 0x021D7A34
push {r4, lr}
diff --git a/arm9/modules/59/include/mod59_021D74E0.h b/arm9/modules/59/include/mod59_021D74E0.h
index d6f52bba..bee72507 100644
--- a/arm9/modules/59/include/mod59_021D74E0.h
+++ b/arm9/modules/59/include/mod59_021D74E0.h
@@ -20,21 +20,31 @@ typedef struct MOD59_OverlayData
u32 heap_id;
struct SaveBlock2 *sav2;
struct Options *options;
- u32 Unk0C;
- u32 Unk10;
- struct UnkStruct_02006234 *Unk14;
- struct BgConfig *Unk18;
- u8 padding[0x54];
+ u32 unk0C;
+ u32 unk10;
+ struct UnkStruct_02006234 *unk14;
+ struct BgConfig *bgConfig;
+ u8 filler1C[0x10];
+ u32 unk2C;
+ u8 filler30[0x1C];
+ struct MsgData *msgData;
+ u32 unk50;
+ u32 unk54;
+ u8 filler58[0x8];
+ u32 unk60; // unknown if this is the right type, possibly a pointer instead?
+ struct ScrStrBufs *strBufs;
+ u8 filler68[0x8];
struct MOD59_UnkPlayerStruct *playerStruct;
struct MOD59_UnkPlayerStruct *rivalStruct;
- u8 padding2[0x10];
- u8 Unk88;
- u8 Unk89;
- u8 Unk8A;
- u8 Unk8B;
- u8 padding3[4];
- u32 Unk90;
- u8 padding4[32];
+ u32 unk78;
+ u8 filler7C[0xC];
+ u8 unk88;
+ u8 unk89;
+ u8 unk8A;
+ u8 unk8B;
+ u8 filler8C[4];
+ u32 unk90;
+ u8 filler94[32];
} MOD59_OverlayData;
BOOL MOD59_Init(struct UnkStruct_02006234 *param0);
@@ -42,5 +52,8 @@ BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1);
BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0);
void MOD59_021D7724(MOD59_OverlayData *data);
BOOL MOD59_021D7730(void);
+void MOD59_SetupBg(MOD59_OverlayData *data);
+void MOD59_DestroyBg(MOD59_OverlayData *data);
+void MOD59_SetupMsg(MOD59_OverlayData *data);
#endif //POKEDIAMOND_MOD59_021D74E0_H
diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c
index e104cf4f..1a301bc1 100644
--- a/arm9/modules/59/src/mod59_021D74E0_src.c
+++ b/arm9/modules/59/src/mod59_021D74E0_src.c
@@ -7,23 +7,34 @@
#include "GX_layers.h"
#include "unk_02024E64.h"
#include "bg_window.h"
+#include "render_window.h"
+#include "msgdata.h"
+#include "msgdata/msg.naix"
+#include "text.h"
+#include "script_buffers.h"
#include "module_52.h"
extern void *FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options);
extern void FUN_0200E3A0(PMLCDTarget, int);
-extern void MOD59_021D778C(MOD59_OverlayData *data);
-extern void MOD59_021D79F8(MOD59_OverlayData *data);
+//todo move with the other rodata
+extern struct GraphicsBanks MOD59_021D9F18;
+extern struct GraphicsModes MOD59_021D9DCC;
+extern struct BgTemplate MOD59_021D9EA0;
+extern struct BgTemplate MOD59_021D9EBC;
+
extern void MOD59_021D7A34(MOD59_OverlayData *data);
-extern void MOD59_021D796C(MOD59_OverlayData *data);
extern void MOD59_021D7A4C(MOD59_OverlayData *data);
extern void MOD59_021D7A5C(MOD59_OverlayData *data);
+extern void MOD59_021D8058(MOD59_OverlayData *data);
extern u32 MOD59_021D8920(MOD59_OverlayData *data);
extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id);
extern u32 FUN_0200E308(void);
+extern u32 FUN_020142EC(u32 param0, u32 param1, u32 param2, u32 heap_id);
+
extern void FUN_02077AC4(void *param0);
FS_EXTERN_OVERLAY(MODULE_52);
@@ -32,21 +43,21 @@ THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0)
{
CreateHeap(3, 0x52, 1 << 18);
MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_CreateAndGetData(param0, sizeof(MOD59_OverlayData), 0x52);
- (void)memset((void *)data, 0, 0xb4);
+ (void)memset((void *)data, 0, sizeof(MOD59_OverlayData));
data->heap_id = 0x52;
s32 *field18 = OverlayManager_GetField18(param0);
data->sav2 = (struct SaveBlock2 *)field18[2]; //?
data->options = Sav2_PlayerData_GetOptionsAddr(data->sav2);
- data->Unk10 = data->Unk0C = 0;
- data->Unk14 = NULL;
+ data->unk10 = data->unk0C = 0;
+ data->unk14 = NULL;
data->playerStruct = (struct MOD59_UnkPlayerStruct *)FUN_02077A84(0x52, 0, 0, 7, data->options);
data->rivalStruct = (struct MOD59_UnkPlayerStruct *)FUN_02077A84(0x52, 3, 0, 7, data->options);
- data->Unk88 = 0;
- data->Unk89 = 0;
- data->Unk8A = 0;
- data->Unk8B = 0;
- data->Unk90 = 0;
+ data->unk88 = 0;
+ data->unk89 = 0;
+ data->unk8A = 0;
+ data->unk8B = 0;
+ data->unk90 = 0;
return TRUE;
}
@@ -72,8 +83,8 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1)
SetKeyRepeatTimers(4, 8);
- MOD59_021D778C(data);
- MOD59_021D79F8(data);
+ MOD59_SetupBg(data);
+ MOD59_SetupMsg(data);
MOD59_021D7A4C(data);
Main_SetVBlankIntrCB((void (*)(void *))MOD59_021D7724, data);
@@ -91,7 +102,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1)
*param1 = 2;
}
- if (data->Unk14 == NULL)
+ if (data->unk14 == NULL)
{
break;
}
@@ -108,7 +119,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1)
}
MOD59_021D7A34(data);
- MOD59_021D796C(data);
+ MOD59_DestroyBg(data);
MOD59_021D7A5C(data);
Main_SetVBlankIntrCB(NULL, NULL);
@@ -123,7 +134,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1)
}
MOD59_021D7A34(data);
- MOD59_021D796C(data);
+ MOD59_DestroyBg(data);
MOD59_021D7A5C(data);
Main_SetVBlankIntrCB(NULL, NULL);
@@ -133,13 +144,13 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1)
break;
case 4:
- if (OverlayManager_Run(data->Unk14) != TRUE)
+ if (OverlayManager_Run(data->unk14) != TRUE)
{
break;
}
- OverlayManager_delete(data->Unk14);
- data->Unk14 = NULL;
+ OverlayManager_delete(data->unk14);
+ data->unk14 = NULL;
*param1 = 5;
@@ -177,7 +188,7 @@ THUMB_FUNC BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0)
THUMB_FUNC void MOD59_021D7724(MOD59_OverlayData *data)
{
- DoScheduledBgGpuUpdates(data->Unk18);
+ DoScheduledBgGpuUpdates(data->bgConfig);
}
THUMB_FUNC BOOL MOD59_021D7730(void)
@@ -200,3 +211,114 @@ THUMB_FUNC BOOL MOD59_021D7730(void)
return ret;
}
+
+THUMB_FUNC void MOD59_SetupBg(MOD59_OverlayData *data)
+{
+ struct GraphicsBanks graphicsBanks = MOD59_021D9F18;
+ GX_SetBanks(&graphicsBanks);
+ data->bgConfig = BgConfig_Alloc(data->heap_id);
+
+ struct GraphicsModes graphicsModes = MOD59_021D9DCC;
+ SetBothScreensModesAndDisable(&graphicsModes);
+
+ struct BgTemplate bgTemplateMain = MOD59_021D9EA0;
+ bgTemplateMain.screenBase = 15;
+ bgTemplateMain.charBase = 6;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_0, &bgTemplateMain, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_0);
+
+ bgTemplateMain.screenBase = 14;
+ bgTemplateMain.charBase = 5;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_1, &bgTemplateMain, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_1);
+
+ bgTemplateMain.screenBase = 13;
+ bgTemplateMain.charBase = 4;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_2, &bgTemplateMain, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_2);
+
+ bgTemplateMain.screenBase = 12;
+ bgTemplateMain.charBase = 3;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_3, &bgTemplateMain, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_3);
+
+ FUN_0200CD68(data->bgConfig, 0, 994, 4, 0, data->heap_id);
+ FUN_0200CB00(data->bgConfig, 0, 985, 3, 0, data->heap_id);
+ FUN_02002ED0(GF_BG_LYR_MAIN_0, 160, data->heap_id);
+ FUN_02002EEC(GF_BG_LYR_MAIN_0, 192, data->heap_id);
+
+ struct BgTemplate bgTemplateSub = MOD59_021D9EBC;
+ bgTemplateSub.screenBase = 15;
+ bgTemplateSub.charBase = 6;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_0, &bgTemplateSub, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_0);
+
+ bgTemplateSub.screenBase = 14;
+ bgTemplateSub.charBase = 5;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_1, &bgTemplateSub, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_1);
+
+ bgTemplateSub.screenBase = 13;
+ bgTemplateSub.charBase = 4;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_2, &bgTemplateSub, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_2);
+
+ bgTemplateSub.screenBase = 12;
+ bgTemplateSub.charBase = 3;
+ InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_3, &bgTemplateSub, 0);
+ BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_3);
+
+ ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF);
+
+ ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF);
+
+ MOD59_021D8058(data);
+ data->unk78 = 0;
+}
+
+THUMB_FUNC void MOD59_DestroyBg(MOD59_OverlayData *data)
+{
+ ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF);
+
+ ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF);
+ ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF);
+
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_0);
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_1);
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_2);
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_3);
+
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_0);
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_1);
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_2);
+ FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_3);
+
+ FreeToHeap(data->bgConfig);
+}
+
+THUMB_FUNC void MOD59_SetupMsg(MOD59_OverlayData *data)
+{
+ data->msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0341_bin, data->heap_id);
+
+ FUN_0201BD5C();
+
+ data->unk60 = FUN_020142EC(0, 0, 6, data->heap_id);
+
+ data->strBufs = ScrStrBufs_new(data->heap_id);
+
+ data->unk50 = 0;
+ data->unk54 = 0;
+ data->unk2C = 0;
+}
+
diff --git a/arm9/src/font.c b/arm9/src/font.c
index 5e46b237..537a7337 100644
--- a/arm9/src/font.c
+++ b/arm9/src/font.c
@@ -169,7 +169,7 @@ THUMB_FUNC void FUN_02002ED0(enum GFBgLayer layer, u32 baseAddr, u32 heap_id)
NARC_GRAPHIC_FONT, NARC_font_narc_0006_NCLR, layer, baseAddr, 0x20, heap_id);
}
-THUMB_FUNC void FUN_02002EEC(u32 layer, u32 baseAddr, u32 heap_id)
+THUMB_FUNC void FUN_02002EEC(enum GFBgLayer layer, u32 baseAddr, u32 heap_id)
{
GfGfxLoader_GXLoadPal(
NARC_GRAPHIC_FONT, NARC_font_narc_0007_NCLR, layer, baseAddr, 0x20, heap_id);
diff --git a/arm9/src/render_window.c b/arm9/src/render_window.c
index 1826e199..95edb982 100644
--- a/arm9/src/render_window.c
+++ b/arm9/src/render_window.c
@@ -87,10 +87,10 @@ THUMB_FUNC s32 FUN_0200CAFC(void)
}
THUMB_FUNC void FUN_0200CB00(
- struct BgConfig *bg_config, u32 layer, u32 num_tiles, u32 param3, u8 param4, u32 heap_id)
+ struct BgConfig *bg_config, u32 layer, u32 num_tiles, u32 param3, u8 frame_id, u32 heap_id)
{
s32 r1;
- if (param4 != 0)
+ if (frame_id != 0)
{
r1 = NARC_winframe_narc_0001_NCGR;
}
@@ -102,7 +102,7 @@ THUMB_FUNC void FUN_0200CB00(
GfGfxLoader_LoadCharData(
NARC_GRAPHIC_WINFRAME, r1, bg_config, layer, num_tiles, 0, FALSE, heap_id);
- if (param4 == 2)
+ if (frame_id == 2)
{
r1 = NARC_winframe_narc_0045_NCLR;
}
@@ -191,20 +191,20 @@ THUMB_FUNC s32 FUN_0200CD64(s32 param0)
}
THUMB_FUNC void FUN_0200CD68(
- struct BgConfig *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5)
+ struct BgConfig *bg_config, u32 layer, u32 num_tiles, u32 param3, u8 frame_id, u32 heap_id)
{
GfGfxLoader_LoadCharData(
- NARC_GRAPHIC_WINFRAME, FUN_0200CD60(param4), param0, param1, param2, 0, FALSE, param5);
+ NARC_GRAPHIC_WINFRAME, FUN_0200CD60(frame_id), bg_config, layer, num_tiles, 0, FALSE, heap_id);
- if (param1 < 4)
+ if (layer < 4)
{
GfGfxLoader_GXLoadPal(
- NARC_GRAPHIC_WINFRAME, FUN_0200CD64(param4), 0, param3 << 5, 32, param5);
+ NARC_GRAPHIC_WINFRAME, FUN_0200CD64(frame_id), 0, param3 << 5, 32, heap_id);
return;
}
- GfGfxLoader_GXLoadPal(NARC_GRAPHIC_WINFRAME, FUN_0200CD64(param4), 4, param3 << 5, 32, param5);
+ GfGfxLoader_GXLoadPal(NARC_GRAPHIC_WINFRAME, FUN_0200CD64(frame_id), 4, param3 << 5, 32, heap_id);
}
THUMB_FUNC void DrawFrame2(struct BgConfig *bgConfig,