Merge pull request #480 from red031000/master

finish mod59_TV
This commit is contained in:
Akira Akashi
2023-05-04 22:33:05 +01:00
committed by GitHub
10 changed files with 668 additions and 860 deletions

View File

@@ -1149,8 +1149,7 @@ Overlay MODULE_59
##Rowan's intro + TV intro##
After arm9
Object mod59_Intro.o
Object mod59_TV_src.o
Object mod59_TV_asm.o
Object mod59_TV.o
}
Overlay MODULE_60

View File

@@ -4,8 +4,19 @@
#include "fx.h"
#include "registers.h"
typedef enum GXBlendPlaneMask
{
GX_BLEND_PLANEMASK_NONE = 0x0000,
GX_BLEND_PLANEMASK_BG0 = 0x0001,
GX_BLEND_PLANEMASK_BG1 = 0x0002,
GX_BLEND_PLANEMASK_BG2 = 0x0004,
GX_BLEND_PLANEMASK_BG3 = 0x0008,
GX_BLEND_PLANEMASK_OBJ = 0x0010,
GX_BLEND_PLANEMASK_BD = 0x0020
} GXBlendPlaneMask;
void G2x_SetBGyAffine_(u32 ptr, const struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d);
void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d);
void G2x_SetBlendAlpha_(u32 *ptr, GXBlendPlaneMask plane1, GXBlendPlaneMask plane2, fx32 c, fx32 d);
void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness);
void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness);
void G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness);
@@ -15,8 +26,7 @@ typedef struct
u8 planeMask:5;
u8 effect:1;
u8 _reserve:2;
}
GXWndPlane;
} GXWndPlane;
typedef enum
{
@@ -26,8 +36,7 @@ typedef enum
GX_WND_PLANEMASK_BG2 = 0x0004,
GX_WND_PLANEMASK_BG3 = 0x0008,
GX_WND_PLANEMASK_OBJ = 0x0010
}
GXWndPlaneMask;
} GXWndPlaneMask;
static inline void G2_SetWndOutsidePlane(int wnd, BOOL effect)
{
@@ -121,6 +130,16 @@ static inline void G2S_BlendNone(void)
reg_G2S_DB_BLDCNT = 0;
}
static inline void G2_SetBlendAlpha(GXBlendPlaneMask plane1, GXBlendPlaneMask plane2, fx32 ev1, fx32 ev2)
{
G2x_SetBlendAlpha_((u32 *)&reg_G2_BLEND, plane1, plane2, ev1, ev2);
}
static inline void G2S_SetBlendAlpha(GXBlendPlaneMask plane1, GXBlendPlaneMask plane2, fx32 ev1, fx32 ev2)
{
G2x_SetBlendAlpha_((u32 *)&reg_G2S_DB_BLEND, plane1, plane2, ev1, ev2);
}
//The g2 and g2_oam headers contain a lot of inline functions and enums that may want to be ported over at some point
#endif //GUARD_GX_G2_H

View File

@@ -13,8 +13,8 @@ ARM_FUNC void G2x_SetBGyAffine_(u32 ptr, const struct Mtx22 *mtx, fx32 a, fx32 b
*((vu32 *)ptr + 3) = (u32)(temp3 >> 4);
}
ARM_FUNC void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){
*ptr = (u32)(((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10));
ARM_FUNC void G2x_SetBlendAlpha_(u32 *ptr, GXBlendPlaneMask plane1, GXBlendPlaneMask plane2, fx32 c, fx32 d){
*ptr = (u32)(((plane1 | 0x40) | (plane2 << 0x8)) | ((c | (d << 0x8)) << 0x10));
}
ARM_FUNC void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){

View File

@@ -1,454 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD59_021D9A20
MOD59_021D9A20: ; 0x021D9A20
push {r3, r4, r5, lr}
sub sp, #0xb8
ldr r5, _021D9BB4 ; =0x021DA0D4
add r4, r0, #0
add r3, sp, #0x90
mov r2, #5
_021D9A2C:
ldmia r5!, {r0, r1}
stmia r3!, {r0, r1}
sub r2, r2, #1
bne _021D9A2C
add r0, sp, #0x90
bl GX_SetBanks
ldr r0, [r4]
bl BgConfig_Alloc
add r3, sp, #0x80
ldr r5, _021D9BB8 ; =0x021DA054
str r0, [r4, #4]
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, _021D9BBC ; =0x021DA080
add r3, sp, #0x64
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, #2
str r0, [r3]
ldr r0, [r4, #4]
mov r3, #0
bl InitBgFromTemplate
ldr r3, [r4]
mov r0, #2
mov r1, #0x20
mov r2, #0
bl BG_ClearCharDataRange
ldr r0, [r4, #4]
mov r1, #2
bl BgClearTilemapBufferAndCommit
ldr r5, _021D9BC0 ; =0x021DA09C
add r3, sp, #0x48
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]
ldr r0, [r4, #4]
add r3, r1, #0
bl InitBgFromTemplate
mov r3, #0
str r3, [sp]
str r3, [sp, #4]
str r3, [sp, #8]
ldr r0, [r4]
mov r1, #1
str r0, [sp, #0xc]
ldr r2, [r4, #4]
mov r0, #0x88
bl GfGfxLoader_LoadCharData
mov r3, #0
str r3, [sp]
str r3, [sp, #4]
str r3, [sp, #8]
ldr r0, [r4]
mov r1, #4
str r0, [sp, #0xc]
ldr r2, [r4, #4]
mov r0, #0x88
bl GfGfxLoader_LoadScrnData
ldr r5, _021D9BC4 ; =0x021DA064
add r3, sp, #0x2c
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, #1
str r0, [r3]
ldr r0, [r4, #4]
mov r3, #0
bl InitBgFromTemplate
mov r0, #0
str r0, [sp]
str r0, [sp, #4]
str r0, [sp, #8]
ldr r0, [r4]
mov r1, #2
str r0, [sp, #0xc]
ldr r2, [r4, #4]
mov r0, #0x88
mov r3, #1
bl GfGfxLoader_LoadCharData
mov r0, #0
str r0, [sp]
str r0, [sp, #4]
str r0, [sp, #8]
ldr r0, [r4]
mov r1, #5
str r0, [sp, #0xc]
ldr r2, [r4, #4]
mov r0, #0x88
mov r3, #1
bl GfGfxLoader_LoadScrnData
ldr r5, _021D9BC8 ; =0x021DA0B8
add r3, sp, #0x10
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, #3
str r0, [r3]
ldr r0, [r4, #4]
mov r3, #0
bl InitBgFromTemplate
mov r1, #0
str r1, [sp]
str r1, [sp, #4]
str r1, [sp, #8]
ldr r0, [r4]
mov r3, #3
str r0, [sp, #0xc]
ldr r2, [r4, #4]
mov r0, #0x88
bl GfGfxLoader_LoadCharData
mov r0, #0
str r0, [sp]
str r0, [sp, #4]
str r0, [sp, #8]
ldr r0, [r4]
mov r1, #3
str r0, [sp, #0xc]
ldr r2, [r4, #4]
mov r0, #0x88
add r3, r1, #0
bl GfGfxLoader_LoadScrnData
mov r2, #0
str r2, [sp]
ldr r0, [r4]
mov r1, #6
str r0, [sp, #4]
mov r0, #0x88
add r3, r2, #0
bl GfGfxLoader_GXLoadPal
ldr r2, [r4]
mov r0, #0
mov r1, #0x20
bl FUN_02002ED0
mov r0, #0
add r1, r0, #0
bl BG_SetMaskColor
mov r0, #4
mov r1, #0
bl BG_SetMaskColor
mov r2, #0xc
ldr r0, _021D9BCC ; =0x04000050
mov r1, #2
mov r3, #4
str r2, [sp]
bl G2x_SetBlendAlpha_
add sp, #0xb8
pop {r3, r4, r5, pc}
nop
_021D9BB4: .word MOD59_021DA0D4
_021D9BB8: .word MOD59_021DA054
_021D9BBC: .word MOD59_021DA080
_021D9BC0: .word MOD59_021DA09C
_021D9BC4: .word MOD59_021DA064
_021D9BC8: .word MOD59_021DA0B8
_021D9BCC: .word 0x04000050
thumb_func_end MOD59_021D9A20
thumb_func_start MOD59_021D9BD0
MOD59_021D9BD0: ; 0x021D9BD0
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, _021D9C44 ; =0x04000050
mov r1, #0
strh r1, [r0]
ldr r0, [r4, #4]
mov r1, #3
bl FreeBgTilemapBuffer
ldr r0, [r4, #4]
mov r1, #1
bl FreeBgTilemapBuffer
ldr r0, [r4, #4]
mov r1, #0
bl FreeBgTilemapBuffer
ldr r0, [r4, #4]
mov r1, #2
bl FreeBgTilemapBuffer
ldr r0, [r4, #4]
bl FreeToHeap
pop {r4, pc}
nop
_021D9C44: .word 0x04000050
thumb_func_end MOD59_021D9BD0
thumb_func_start MOD59_021D9C48
MOD59_021D9C48: ; 0x021D9C48
push {r4, lr}
add r4, r0, #0
ldr r2, _021D9C64 ; =0x00000225
ldr r3, [r4]
mov r0, #1
mov r1, #0x1a
bl NewMsgDataFromNarc
str r0, [r4, #8]
bl FUN_0201BD5C
mov r0, #0
str r0, [r4, #0xc]
pop {r4, pc}
.align 2, 0
_021D9C64: .word 0x00000225
thumb_func_end MOD59_021D9C48
thumb_func_start MOD59_021D9C68
MOD59_021D9C68: ; 0x021D9C68
ldr r3, _021D9C70 ; =DestroyMsgData
ldr r0, [r0, #8]
bx r3
nop
_021D9C70: .word DestroyMsgData
thumb_func_end MOD59_021D9C68
thumb_func_start MOD59_021D9C74
MOD59_021D9C74: ; 0x021D9C74
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r4, r0, #0
ldr r0, [r4, #0xc]
str r1, [sp, #0x10]
add r7, r3, #0
mov r5, #0
cmp r0, #3
bhi _021D9D66
add r0, r0, r0
add r0, pc
ldrh r0, [r0, #6]
lsl r0, r0, #0x10
asr r0, r0, #0x10
add pc, r0
_021D9C92: ; jump table
.short _021D9C9A - _021D9C92 - 2 ; case 0
.short _021D9D24 - _021D9C92 - 2 ; case 1
.short _021D9D36 - _021D9C92 - 2 ; case 2
.short _021D9D50 - _021D9C92 - 2 ; case 3
_021D9C9A:
mov r0, #2
add r1, r5, #0
bl ToggleBgLayer
mov r0, #1
ldr r1, [r4]
lsl r0, r0, #0xa
bl String_ctor
add r6, r0, #0
ldr r0, [r4, #8]
ldr r1, [sp, #0x10]
add r2, r6, #0
bl ReadMsgDataIntoString
add r1, r4, #0
ldr r0, [r4, #4]
ldr r2, _021D9D6C ; =0x021DA04C
add r1, #0x10
bl AddWindow
add r1, r5, #0
mov r0, #1
lsl r0, r0, #8
str r0, [sp]
mov r0, #0xc0
str r0, [sp, #4]
add r0, r4, #0
add r0, #0x10
add r2, r1, #0
add r3, r1, #0
bl FillWindowPixelRect
add r0, r5, #0
add r1, r6, #0
add r2, r0, #0
bl FUN_02002F08
mov r1, #1
lsl r1, r1, #8
sub r0, r1, r0
lsr r3, r0, #1
str r7, [sp]
add r1, r5, #0
ldr r0, _021D9D70 ; =0x000F0200
str r1, [sp, #4]
str r0, [sp, #8]
add r0, r4, #0
add r0, #0x10
add r2, r6, #0
str r1, [sp, #0xc]
bl AddTextPrinterParameterized2
add r0, r6, #0
bl String_dtor
add r0, r4, #0
add r0, #0x10
bl CopyWindowToVram
mov r0, #2
mov r1, #1
bl ToggleBgLayer
mov r0, #0xf0
str r0, [r4, #0x24]
mov r0, #1
str r0, [r4, #0xc]
b _021D9D66
_021D9D24:
ldr r0, [r4, #0x24]
cmp r0, #0
beq _021D9D30
sub r0, r0, #1
str r0, [r4, #0x24]
b _021D9D66
_021D9D30:
mov r0, #2
str r0, [r4, #0xc]
b _021D9D66
_021D9D36:
ldr r0, _021D9D74 ; =gMain
ldr r1, [r0, #0x48]
mov r0, #1
and r0, r1
cmp r0, #1
beq _021D9D4A
mov r0, #2
and r0, r1
cmp r0, #2
bne _021D9D66
_021D9D4A:
mov r0, #3
str r0, [r4, #0xc]
b _021D9D66
_021D9D50:
add r0, r4, #0
add r0, #0x10
bl RemoveWindow
ldr r0, [r4, #4]
mov r1, #2
bl BgClearTilemapBufferAndCommit
add r0, r5, #0
str r0, [r4, #0xc]
mov r5, #1
_021D9D66:
add r0, r5, #0
add sp, #0x14
pop {r4, r5, r6, r7, pc}
.align 2, 0
_021D9D6C: .word MOD59_021DA04C
_021D9D70: .word 0x000F0200
_021D9D74: .word gMain
thumb_func_end MOD59_021D9C74
thumb_func_start MOD59_021D9D78
MOD59_021D9D78: ; 0x021D9D78
push {r3, lr}
ldr r1, [r0, #0x20]
mov r2, #3
add r3, r1, #4
str r3, [r0, #0x20]
ldr r0, [r0, #4]
mov r1, #1
asr r3, r3, #4
bl BgSetPosTextAndCommit
pop {r3, pc}
.align 2, 0
thumb_func_end MOD59_021D9D78
.rodata
.global MOD59_021DA04C
MOD59_021DA04C: ; 0x021DA04C
.byte 0x02, 0x00, 0x00, 0x20, 0x18, 0x01, 0x01, 0x00
.global MOD59_021DA054
MOD59_021DA054: ; 0x021DA054
.byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global MOD59_021DA064
MOD59_021DA064: ; 0x021DA064
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global MOD59_021DA080
MOD59_021DA080: ; 0x021DA080
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global MOD59_021DA09C
MOD59_021DA09C: ; 0x021DA09C
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global MOD59_021DA0B8
MOD59_021DA0B8: ; 0x021DA0B8
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x01, 0x03, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global MOD59_021DA0D4
MOD59_021DA0D4: ; 0x021DA0D4
.byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

View File

@@ -106,10 +106,10 @@ BOOL MOD59_IntroMain(struct UnkStruct_02006234 *overlayStruct, u32 *param1);
BOOL MOD59_IntroExit(struct UnkStruct_02006234 *overlayStruct, u32 *param1);
void MOD59_IntroDoGpuBgUpdate(MOD59_IntroOverlayData *data);
BOOL MOD59_TestPokeballTouchLocation(void);
void MOD59_SetupBg(MOD59_IntroOverlayData *data);
void MOD59_DestroyBg(MOD59_IntroOverlayData *data);
void MOD59_SetupMsg(MOD59_IntroOverlayData *data);
void MOD59_DestroyMsg(MOD59_IntroOverlayData *data);
void MOD59_IntroSetupBg(MOD59_IntroOverlayData *data);
void MOD59_IntroDestroyBg(MOD59_IntroOverlayData *data);
void MOD59_IntroSetupMsg(MOD59_IntroOverlayData *data);
void MOD59_IntroDestroyMsg(MOD59_IntroOverlayData *data);
void MOD59_021D7A4C(MOD59_IntroOverlayData *data);
void MOD59_021D7A5C(MOD59_IntroOverlayData *data);
BOOL MOD59_FadeController(MOD59_IntroOverlayData *data, u32 param1, u32 param2);

View File

@@ -3,12 +3,17 @@
#include "nitro/types.h"
#include "main.h"
#include "bg_window.h"
#include "msgdata.h"
typedef struct MOD59_TVOverlayData2
{
u32 heap_id;
struct BgConfig *bgConfig;
u8 padding[0x1C];
struct MsgData *msgData;
u32 unk0C;
struct Window window;
s32 unk20;
u32 unk24;
} MOD59_TVOverlayData;
@@ -16,5 +21,11 @@ BOOL MOD59_TVInit(struct UnkStruct_02006234 *param0, u32 *param1);
BOOL MOD59_TVMain(struct UnkStruct_02006234 *overlayStruct, u32 *param1);
BOOL MOD59_TVExit(struct UnkStruct_02006234 *overlayStruct, u32 *param1);
void MOD59_TVDoGpuBgUpdate(MOD59_TVOverlayData *data);
void MOD59_TVSetupGraphics(MOD59_TVOverlayData *data);
void MOD59_TVDestroyGraphics(MOD59_TVOverlayData *data);
void MOD59_TVSetupMsg(MOD59_TVOverlayData *data);
void MOD59_TVDestroyMsg(MOD59_TVOverlayData *data);
BOOL MOD59_021D9C74(MOD59_TVOverlayData *data, u32 msgNo, u32 param2, u32 param3);
void MOD59_021D9D78(MOD59_TVOverlayData *data);
#endif // POKEDIAMOND_MOD59_TV_H

View File

@@ -10,7 +10,7 @@
#include "gf_gfx_loader.h"
#include "heap.h"
#include "list_menu_items.h"
#include "mod59_TV_src.h"
#include "mod59_TV.h"
#include "module_52.h"
#include "msgdata.h"
#include "msgdata/msg.naix"
@@ -180,15 +180,15 @@ const struct BgTemplate MOD59_021D9EA0 =
.bufferSize = 2048,
.baseTile = 0,
.size = 1,
.colorMode = 0,
.screenBase = 0,
.charBase = 0,
.bgExtPltt = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x00000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.unk17 = 0,
.mosaic = 0
.mosaic = FALSE
};
const struct BgTemplate MOD59_021D9EBC =
@@ -198,15 +198,15 @@ const struct BgTemplate MOD59_021D9EBC =
.bufferSize = 2048,
.baseTile = 0,
.size = 1,
.colorMode = 0,
.screenBase = 0,
.charBase = 0,
.bgExtPltt = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x00000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.unk17 = 0,
.mosaic = 0
.mosaic = FALSE
};
const u16 MOD59_021D9ED8[0x10] = { 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C, 0x6A3C };
@@ -429,8 +429,8 @@ THUMB_FUNC BOOL MOD59_IntroMain(struct UnkStruct_02006234 *overlayStruct, u32 *p
SetKeyRepeatTimers(4, 8);
MOD59_SetupBg(data);
MOD59_SetupMsg(data);
MOD59_IntroSetupBg(data);
MOD59_IntroSetupMsg(data);
MOD59_021D7A4C(data);
Main_SetVBlankIntrCB((void (*)(void *))MOD59_IntroDoGpuBgUpdate, data);
@@ -464,8 +464,8 @@ THUMB_FUNC BOOL MOD59_IntroMain(struct UnkStruct_02006234 *overlayStruct, u32 *p
break;
}
MOD59_DestroyMsg(data);
MOD59_DestroyBg(data);
MOD59_IntroDestroyMsg(data);
MOD59_IntroDestroyBg(data);
MOD59_021D7A5C(data);
Main_SetVBlankIntrCB(NULL, NULL);
@@ -479,8 +479,8 @@ THUMB_FUNC BOOL MOD59_IntroMain(struct UnkStruct_02006234 *overlayStruct, u32 *p
break;
}
MOD59_DestroyMsg(data);
MOD59_DestroyBg(data);
MOD59_IntroDestroyMsg(data);
MOD59_IntroDestroyBg(data);
MOD59_021D7A5C(data);
Main_SetVBlankIntrCB(NULL, NULL);
@@ -558,7 +558,7 @@ THUMB_FUNC BOOL MOD59_TestPokeballTouchLocation(void)
return ret;
}
THUMB_FUNC void MOD59_SetupBg(MOD59_IntroOverlayData *data)
THUMB_FUNC void MOD59_IntroSetupBg(MOD59_IntroOverlayData *data)
{
struct GraphicsBanks graphicsBanks = MOD59_021D9F18;
GX_SetBanks(&graphicsBanks);
@@ -568,24 +568,24 @@ THUMB_FUNC void MOD59_SetupBg(MOD59_IntroOverlayData *data)
SetBothScreensModesAndDisable(&graphicsModes);
struct BgTemplate bgTemplateMain = MOD59_021D9EA0;
bgTemplateMain.screenBase = 15;
bgTemplateMain.charBase = 6;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_0, &bgTemplateMain, 0);
bgTemplateMain.screenBase = GX_BG_SCRBASE_0x7800;
bgTemplateMain.charBase = GX_BG_CHARBASE_0x18000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_0, &bgTemplateMain, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_0);
bgTemplateMain.screenBase = 14;
bgTemplateMain.charBase = 5;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_1, &bgTemplateMain, 0);
bgTemplateMain.screenBase = GX_BG_SCRBASE_0x7000;
bgTemplateMain.charBase = GX_BG_CHARBASE_0x14000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_1, &bgTemplateMain, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_1);
bgTemplateMain.screenBase = 13;
bgTemplateMain.charBase = 4;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_2, &bgTemplateMain, 0);
bgTemplateMain.screenBase = GX_BG_SCRBASE_0x6800;
bgTemplateMain.charBase = GX_BG_CHARBASE_0x10000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_2, &bgTemplateMain, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_2);
bgTemplateMain.screenBase = 12;
bgTemplateMain.charBase = 3;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_3, &bgTemplateMain, 0);
bgTemplateMain.screenBase = GX_BG_SCRBASE_0x6000;
bgTemplateMain.charBase = GX_BG_CHARBASE_0x0c000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_3, &bgTemplateMain, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_3);
FUN_0200CD68(data->bgConfig, 0, 994, 4, 0, data->heap_id);
@@ -594,24 +594,24 @@ THUMB_FUNC void MOD59_SetupBg(MOD59_IntroOverlayData *data)
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);
bgTemplateSub.screenBase = GX_BG_SCRBASE_0x7800;
bgTemplateSub.charBase = GX_BG_CHARBASE_0x18000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_0, &bgTemplateSub, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_0);
bgTemplateSub.screenBase = 14;
bgTemplateSub.charBase = 5;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_1, &bgTemplateSub, 0);
bgTemplateSub.screenBase = GX_BG_SCRBASE_0x7000;
bgTemplateSub.charBase = GX_BG_CHARBASE_0x14000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_1, &bgTemplateSub, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_1);
bgTemplateSub.screenBase = 13;
bgTemplateSub.charBase = 4;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_2, &bgTemplateSub, 0);
bgTemplateSub.screenBase = GX_BG_SCRBASE_0x6800;
bgTemplateSub.charBase = GX_BG_CHARBASE_0x10000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_2, &bgTemplateSub, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_2);
bgTemplateSub.screenBase = 12;
bgTemplateSub.charBase = 3;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_3, &bgTemplateSub, 0);
bgTemplateSub.screenBase = GX_BG_SCRBASE_0x6000;
bgTemplateSub.charBase = GX_BG_CHARBASE_0x0c000;
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_3, &bgTemplateSub, GF_BG_TYPE_TEXT);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_3);
ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF);
@@ -628,7 +628,7 @@ THUMB_FUNC void MOD59_SetupBg(MOD59_IntroOverlayData *data)
data->fadeCounter = 0;
}
THUMB_FUNC void MOD59_DestroyBg(MOD59_IntroOverlayData *data)
THUMB_FUNC void MOD59_IntroDestroyBg(MOD59_IntroOverlayData *data)
{
ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF);
ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF);
@@ -653,7 +653,7 @@ THUMB_FUNC void MOD59_DestroyBg(MOD59_IntroOverlayData *data)
FreeToHeap(data->bgConfig);
}
THUMB_FUNC void MOD59_SetupMsg(MOD59_IntroOverlayData *data)
THUMB_FUNC void MOD59_IntroSetupMsg(MOD59_IntroOverlayData *data)
{
data->msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0341_bin, data->heap_id);
@@ -668,7 +668,7 @@ THUMB_FUNC void MOD59_SetupMsg(MOD59_IntroOverlayData *data)
data->createListCounter = 0;
}
THUMB_FUNC void MOD59_DestroyMsg(MOD59_IntroOverlayData *data)
THUMB_FUNC void MOD59_IntroDestroyMsg(MOD59_IntroOverlayData *data)
{
ScrStrBufs_delete(data->strBufs);
FUN_020143D0(data->unk60);
@@ -688,34 +688,34 @@ THUMB_FUNC void MOD59_021D7A5C(MOD59_IntroOverlayData *data) //MOD59_Destroy...
THUMB_FUNC BOOL MOD59_FadeController(MOD59_IntroOverlayData *data, u32 bgId, u32 param2)
{
BOOL subScreen;
s32 var1;
GXBlendPlaneMask planeMask;
BOOL ret = FALSE;
switch (bgId)
{
case GF_BG_LYR_MAIN_0:
case GF_BG_LYR_MAIN_3:
default:
var1 = 1;
planeMask = GX_BLEND_PLANEMASK_BG0;
subScreen = FALSE;
break;
case GF_BG_LYR_MAIN_1:
var1 = 2;
planeMask = GX_BLEND_PLANEMASK_BG1;
subScreen = FALSE;
break;
case GF_BG_LYR_MAIN_2:
var1 = 4;
planeMask = GX_BLEND_PLANEMASK_BG2;
subScreen = FALSE;
break;
case GF_BG_LYR_SUB_0:
var1 = 1;
planeMask = GX_BLEND_PLANEMASK_BG0;
subScreen = TRUE;
break;
case GF_BG_LYR_SUB_1:
var1 = 2;
planeMask = GX_BLEND_PLANEMASK_BG1;
subScreen = TRUE;
break;
case GF_BG_LYR_SUB_2:
var1 = 4;
planeMask = GX_BLEND_PLANEMASK_BG2;
subScreen = TRUE;
break;
}
@@ -729,11 +729,11 @@ THUMB_FUNC BOOL MOD59_FadeController(MOD59_IntroOverlayData *data, u32 bgId, u32
data->fadeCounter = 1;
if (!subScreen)
{
G2x_SetBlendAlpha_(&reg_G2_BLEND, var1, 14, data->unk7C, data->unk80);
G2_SetBlendAlpha(planeMask, GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG1, data->unk7C, data->unk80);
}
else
{
G2x_SetBlendAlpha_(&reg_G2S_DB_BLEND, var1, 14, data->unk7C, data->unk80);
G2S_SetBlendAlpha(planeMask, GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG1, data->unk7C, data->unk80);
}
ToggleBgLayer((u8)bgId, GX_LAYER_TOGGLE_ON);
}
@@ -751,11 +751,11 @@ THUMB_FUNC BOOL MOD59_FadeController(MOD59_IntroOverlayData *data, u32 bgId, u32
data->unk80--;
if (!subScreen)
{
G2x_SetBlendAlpha_(&reg_G2_BLEND, var1, 14, data->unk7C, data->unk80);
G2_SetBlendAlpha(planeMask, GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG1, data->unk7C, data->unk80);
}
else
{
G2x_SetBlendAlpha_(&reg_G2S_DB_BLEND, var1, 14, data->unk7C, data->unk80);
G2S_SetBlendAlpha(planeMask, GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG1, data->unk7C, data->unk80);
}
}
else
@@ -770,11 +770,11 @@ THUMB_FUNC BOOL MOD59_FadeController(MOD59_IntroOverlayData *data, u32 bgId, u32
data->unk80++;
if (!subScreen)
{
G2x_SetBlendAlpha_(&reg_G2_BLEND, var1, 14, data->unk7C, data->unk80);
G2_SetBlendAlpha(planeMask, GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG1, data->unk7C, data->unk80);
}
else
{
G2x_SetBlendAlpha_(&reg_G2S_DB_BLEND, var1, 14, data->unk7C, data->unk80);
G2S_SetBlendAlpha(planeMask, GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG1, data->unk7C, data->unk80);
}
}
else
@@ -1344,7 +1344,7 @@ THUMB_FUNC void MOD59_AnimatePlayerSprite(MOD59_IntroOverlayData *data)
timer = 4;
}
data->maleAnimTimer = timer;
G2x_SetBlendAlpha_(&reg_G2_BLEND, 4, 8, 6, 10);
G2_SetBlendAlpha(GX_BLEND_PLANEMASK_BG2, GX_BLEND_PLANEMASK_BG3, 6, 10);
struct MOD59_CharStruct021D9DEC charStruct = MOD59_021D9DEC;
GfGfxLoader_LoadCharData(NARC_DEMO_INTRO_INTRO, charStruct.narcId[data->maleAnimCounter], data->bgConfig, GF_BG_LYR_MAIN_1, 0, 0, FALSE, data->heap_id);
}
@@ -1361,7 +1361,7 @@ THUMB_FUNC void MOD59_AnimatePlayerSprite(MOD59_IntroOverlayData *data)
timer = 4;
}
data->femaleAnimTimer = timer;
G2x_SetBlendAlpha_(&reg_G2_BLEND, 2, 8, 6, 10);
G2_SetBlendAlpha(GX_BLEND_PLANEMASK_BG1, GX_BLEND_PLANEMASK_BG3, 6, 10);
struct MOD59_CharStruct021D9DEC charStruct = MOD59_021D9DFC;
GfGfxLoader_LoadCharData(NARC_DEMO_INTRO_INTRO, charStruct.narcId[data->femaleAnimCounter], data->bgConfig, GF_BG_LYR_MAIN_2, 0, 0, FALSE, data->heap_id);
}

View File

@@ -0,0 +1,556 @@
#include "global.h"
#include "mod59_TV.h"
#include "GX_layers.h"
#include "PAD_pad.h"
#include "constants/sndseq.h"
#include "demo/intro/intro_tv.naix"
#include "filesystem.h"
#include "font.h"
#include "game_init.h"
#include "gf_gfx_loader.h"
#include "heap.h"
#include "msgdata/msg.naix"
#include "overlay_manager.h"
#include "text.h"
#include "unk_020040F4.h"
extern void FUN_0200E3A0(PMLCDTarget, s32);
extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id);
extern u32 FUN_0200E308(void);
const struct WindowTemplate MOD59_021DA04C =
{
.bgId = GF_BG_LYR_MAIN_2,
.tilemapLeft = 0,
.tilemapTop = 0,
.width = 32,
.height = 24,
.paletteNum = 0x01,
.baseTile = 1,
};
const struct GraphicsModes MOD59_021DA054 =
{
.dispMode = GX_DISPMODE_GRAPHICS,
.bgMode = GX_BGMODE_0,
.subMode = GX_BGMODE_0,
._2d3dMode = GX_BG0_AS_2D,
};
const struct BgTemplate MOD59_021DA080 =
{
.x = 0,
.y = 0,
.bufferSize = 2048,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x18000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.unk17 = 0,
.mosaic = FALSE
};
const struct BgTemplate MOD59_021DA09C =
{
.x = 0,
.y = 0,
.bufferSize = 2048,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0800,
.charBase = GX_BG_CHARBASE_0x14000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.unk17 = 0,
.mosaic = FALSE
};
const struct BgTemplate MOD59_021DA064 =
{
.x = 0,
.y = 0,
.bufferSize = 2048,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x1000,
.charBase = GX_BG_CHARBASE_0x10000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.unk17 = 0,
.mosaic = FALSE
};
const struct BgTemplate MOD59_021DA0B8 =
{
.x = 0,
.y = 0,
.bufferSize = 2048,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_256,
.screenBase = GX_BG_SCRBASE_0x1800,
.charBase = GX_BG_CHARBASE_0x20000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.unk17 = 0,
.mosaic = FALSE
};
const struct GraphicsBanks MOD59_021DA0D4 =
{
.bg = 3,
.bgextpltt = 0,
.subbg = 0,
.subbgextpltt = 0,
.obj = 0,
.objextpltt = 0,
.subobj = 0,
.subobjextpltt = 0,
.tex = 0,
.texpltt = 0
};
THUMB_FUNC BOOL MOD59_TVInit(struct UnkStruct_02006234 *param0, u32 *param1)
{
#pragma unused(param1)
CreateHeap(3, 83, 0x40000);
MOD59_TVOverlayData *data = (MOD59_TVOverlayData *)OverlayManager_CreateAndGetData(param0, sizeof(MOD59_TVOverlayData), 0x53);
(void)memset((void *)data, 0, sizeof(MOD59_TVOverlayData));
data->heap_id = 0x53;
data->unk24 = 0;
return TRUE;
}
#ifdef NONMATCHING
THUMB_FUNC BOOL MOD59_TVMain(struct UnkStruct_02006234 *overlayStruct, u32 *param1)
{
MOD59_TVOverlayData *data = (MOD59_TVOverlayData *)OverlayManager_GetData(overlayStruct);
BOOL ret = FALSE;
switch (*param1)
{
case 0:
FUN_0200E3A0(PM_LCD_TOP, 0);
FUN_0200E3A0(PM_LCD_BOTTOM, 0);
Main_SetVBlankIntrCB(NULL, NULL);
FUN_02015F34(NULL, NULL);
GX_DisableEngineALayers();
GX_DisableEngineBLayers();
reg_GX_DISPCNT = reg_GX_DISPCNT & 0xFFFFE0FF;
reg_GXS_DB_DISPCNT = reg_GXS_DB_DISPCNT & 0xFFFFE0FF;
SetKeyRepeatTimers(4, 8);
MOD59_TVSetupGraphics(data);
MOD59_TVSetupMsg(data);
Main_SetVBlankIntrCB((void (*)(void *))MOD59_TVDoGpuBgUpdate, data);
GX_BothDispOn();
data->unk24 = 60;
*param1 = 1;
break;
case 1:
if (data->unk24 != 0)
{
data->unk24--;
break;
}
FUN_0200414C(SEQ_TV_HOUSOU);
FUN_0200433C(4, SEQ_TV_HOUSOU, 1);
data->unk24 = 90;
*param1 = 2;
break;
case 2:
if (data->unk24 != 0)
{
data->unk24--;
break;
}
data->unk24 = 0; //??
FUN_0200E1D0(0, 1, 1, 0, 6, 1, data->heap_id);
*param1 = 3;
break;
case 3:
MOD59_021D9D78(data);
if (FUN_0200E308() != 1)
{
break;
}
*param1 = 4;
break;
case 4:
MOD59_021D9D78(data);
if (MOD59_021D9C74(data, 0, 40, 48) != TRUE)
{
break;
}
FUN_0200E1D0(0, 0, 0, 0, 6, 1, data->heap_id);
*param1 = 5;
break;
case 5:
MOD59_021D9D78(data);
if (FUN_0200E308() != 1)
{
break;
}
MOD59_TVDestroyMsg(data);
MOD59_TVDestroyGraphics(data);
Main_SetVBlankIntrCB(NULL, NULL);
ret = TRUE;
break;
}
return ret;
}
#else
THUMB_FUNC asm BOOL MOD59_TVMain(struct UnkStruct_02006234 *overlayStruct, u32 *param1)
{
push {r3, r4, r5, r6, lr}
sub sp, #0xc
add r5, r1, #0
bl OverlayManager_GetData
ldr r1, [r5, #0]
add r4, r0, #0
mov r6, #0
cmp r1, #5
bls _021D98AE
b _021D99E2
_021D98AE:
add r1, r1, r1
add r1, pc
ldrh r1, [r1, #6]
lsl r1, r1, #0x10
asr r1, r1, #0x10
add pc, r1
_021D98BA: // jump table
dcd 0x0070000a //compiler really hates movs in inline asm
//movs r2, r1 //case 0
//lsl r0, r6, #1 //case 1
lsl r6, r2, #2 //case 2
lsl r0, r0, #3 //case 3
lsl r2, r2, #3 //case 4
lsl r4, r0, #4 //case 5
//.short _021D98C6 - _021D98BA - 2 // case 0
//.short _021D992C - _021D98BA - 2 // case 1
//.short _021D9952 - _021D98BA - 2 // case 2
//.short _021D997C - _021D98BA - 2 // case 3
//.short _021D998E - _021D98BA - 2 // case 4
//.short _021D99C0 - _021D98BA - 2 ; case 5
_021D98C6:
add r0, r6, #0
add r1, r6, #0
bl FUN_0200E3A0
mov r0, #1
add r1, r6, #0
bl FUN_0200E3A0
add r0, r6, #0
add r1, r0, #0
bl Main_SetVBlankIntrCB
add r0, r6, #0
add r1, r0, #0
bl FUN_02015F34
bl GX_DisableEngineALayers
bl GX_DisableEngineBLayers
mov r2, #1
lsl r2, r2, #0x1a
ldr r1, [r2, #0]
ldr r0, =0xFFFFE0FF
and r1, r0
str r1, [r2, #0]
ldr r2, =0x04001000
ldr r1, [r2, #0]
and r0, r1
str r0, [r2]
mov r0, #4
mov r1, #8
bl SetKeyRepeatTimers
add r0, r4, #0
bl MOD59_TVSetupGraphics
add r0, r4, #0
bl MOD59_TVSetupMsg
ldr r0, =MOD59_TVDoGpuBgUpdate
add r1, r4, #0
bl Main_SetVBlankIntrCB
bl GX_BothDispOn
mov r0, #0x3c
str r0, [r4, #0x24]
mov r0, #1
str r0, [r5]
b _021D99E2
_021D992C:
ldr r0, [r4, #0x24]
cmp r0, #0
beq _021D9938
sub r0, r0, #1
str r0, [r4, #0x24]
b _021D99E2
_021D9938:
ldr r0, =0x00000406
bl FUN_0200414C
ldr r1, =0x00000406
mov r0, #4
mov r2, #1
bl FUN_0200433C
mov r0, #0x5a
str r0, [r4, #0x24]
mov r0, #2
str r0, [r5]
b _021D99E2
_021D9952:
ldr r0, [r4, #0x24]
cmp r0, #0
beq _021D995E
sub r0, r0, #1
str r0, [r4, #0x24]
b _021D99E2
_021D995E:
str r6, [r4, #0x24]
mov r0, #6
mov r1, #1
str r0, [sp]
str r1, [sp, #4]
ldr r0, [r4, #0]
add r2, r1, #0
str r0, [sp, #8]
add r0, r6, #0
add r3, r6, #0
bl FUN_0200E1D0
mov r0, #3
str r0, [r5]
b _021D99E2
_021D997C:
bl MOD59_021D9D78
bl FUN_0200E308
cmp r0, #1
bne _021D99E2
mov r0, #4
str r0, [r5]
b _021D99E2
_021D998E:
bl MOD59_021D9D78
add r0, r4, #0
add r1, r6, #0
mov r2, #0x28
mov r3, #0x30
bl MOD59_021D9C74
cmp r0, #1
bne _021D99E2
mov r0, #6
str r0, [sp]
mov r0, #1
str r0, [sp, #4]
ldr r0, [r4, #0]
str r0, [sp, #8]
add r0, r6, #0
add r1, r0, #0
add r2, r0, #0
add r3, r0, #0
bl FUN_0200E1D0
mov r0, #5
str r0, [r5]
b _021D99E2
_021D99C0:
bl MOD59_021D9D78
bl FUN_0200E308
cmp r0, #1
bne _021D99E2
add r0, r4, #0
bl MOD59_TVDestroyMsg
add r0, r4, #0
bl MOD59_TVDestroyGraphics
add r0, r6, #0
add r1, r0, #0
bl Main_SetVBlankIntrCB
mov r6, #1
_021D99E2:
add r0, r6, #0
add sp, #0xc
pop {r3, r4, r5, r6, pc}
}
#endif
THUMB_FUNC BOOL MOD59_TVExit(struct UnkStruct_02006234 *overlayStruct, u32 *param1)
{
#pragma unused (param1)
u32 heap_id = ((MOD59_TVOverlayData *)OverlayManager_GetData(overlayStruct))->heap_id;
OverlayManager_FreeData(overlayStruct);
DestroyHeap(heap_id);
return TRUE;
}
THUMB_FUNC void MOD59_TVDoGpuBgUpdate(MOD59_TVOverlayData *data)
{
DoScheduledBgGpuUpdates(data->bgConfig);
}
THUMB_FUNC void MOD59_TVSetupGraphics(MOD59_TVOverlayData *data)
{
const struct GraphicsBanks banks = MOD59_021DA0D4; //sp #0x90
GX_SetBanks(&banks);
data->bgConfig = BgConfig_Alloc(data->heap_id);
const struct GraphicsModes modes = MOD59_021DA054; //sp #0x80
SetBothScreensModesAndDisable(&modes);
const struct BgTemplate bgTemplateMain2 = MOD59_021DA080; //sp #0x64
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_2, &bgTemplateMain2, GF_BG_TYPE_TEXT);
BG_ClearCharDataRange(GF_BG_LYR_MAIN_2, 0x20, 0, data->heap_id);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_2);
const struct BgTemplate bgTemplateMain0 = MOD59_021DA09C; //sp #0x48
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_0, &bgTemplateMain0, GF_BG_TYPE_TEXT);
GfGfxLoader_LoadCharData(NARC_DEMO_INTRO_INTRO_TV, NARC_intro_tv_narc_0001_NCGR, data->bgConfig, GF_BG_LYR_MAIN_0, 0, 0, FALSE, data->heap_id);
GfGfxLoader_LoadScrnData(NARC_DEMO_INTRO_INTRO_TV, NARC_intro_tv_narc_0004_NSCR, data->bgConfig, GF_BG_LYR_MAIN_0, 0, 0, FALSE, data->heap_id);
const struct BgTemplate bgTemplateMain1 = MOD59_021DA064; //sp #0x2C
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_1, &bgTemplateMain1, GF_BG_TYPE_TEXT);
GfGfxLoader_LoadCharData(NARC_DEMO_INTRO_INTRO_TV, NARC_intro_tv_narc_0002_NCGR, data->bgConfig, GF_BG_LYR_MAIN_1, 0, 0, FALSE, data->heap_id);
GfGfxLoader_LoadScrnData(NARC_DEMO_INTRO_INTRO_TV, NARC_intro_tv_narc_0005_NSCR, data->bgConfig, GF_BG_LYR_MAIN_1, 0, 0, FALSE, data->heap_id);
const struct BgTemplate bgTemplateMain3 = MOD59_021DA0B8; //sp #0x10
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_3, &bgTemplateMain3, GF_BG_TYPE_TEXT);
GfGfxLoader_LoadCharData(NARC_DEMO_INTRO_INTRO_TV, NARC_intro_tv_narc_0000_NCGR, data->bgConfig, GF_BG_LYR_MAIN_3, 0, 0, FALSE, data->heap_id);
GfGfxLoader_LoadScrnData(NARC_DEMO_INTRO_INTRO_TV, NARC_intro_tv_narc_0003_NSCR, data->bgConfig, GF_BG_LYR_MAIN_3, 0, 0, FALSE, data->heap_id);
GfGfxLoader_GXLoadPal(NARC_DEMO_INTRO_INTRO_TV, NARC_intro_tv_narc_0006_NCLR, GF_BG_LYR_MAIN_0, 0, 0, data->heap_id);
FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, data->heap_id);
BG_SetMaskColor(GF_BG_LYR_MAIN_0, 0);
BG_SetMaskColor(GF_BG_LYR_SUB_0, 0);
G2_SetBlendAlpha(GX_BLEND_PLANEMASK_BG1, GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BG2, 4, 12);
}
THUMB_FUNC void MOD59_TVDestroyGraphics(MOD59_TVOverlayData *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);
reg_G2_BLDCNT = 0;
FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_3);
FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_1);
FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_0);
FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_2);
FreeToHeap(data->bgConfig);
}
THUMB_FUNC void MOD59_TVSetupMsg(MOD59_TVOverlayData *data)
{
data->msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0549_bin, data->heap_id);
FUN_0201BD5C();
data->unk0C = 0;
}
THUMB_FUNC void MOD59_TVDestroyMsg(MOD59_TVOverlayData *data)
{
DestroyMsgData(data->msgData);
}
THUMB_FUNC BOOL MOD59_021D9C74(MOD59_TVOverlayData *data, u32 msgNo, u32 param2, u32 param3)
{
BOOL ret = FALSE;
switch (data->unk0C)
{
case 0:
ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF);
struct String *string = String_ctor(1024, data->heap_id);
ReadMsgDataIntoString(data->msgData, msgNo, string);
AddWindow(data->bgConfig, &data->window, &MOD59_021DA04C);
FillWindowPixelRect(&data->window, 0, 0, 0, 256, 192);
u32 unk0 = (u32)FUN_02002F08(0, string, 0);
unk0 = (256 - unk0 ) / 2;
AddTextPrinterParameterized2(&data->window, 0, string, unk0, param3, 0, MakeFontColor(15, 2, 0), NULL);
String_dtor(string);
CopyWindowToVram(&data->window);
ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_ON);
data->unk24 = 240;
data->unk0C = 1;
break;
case 1:
if (data->unk24 != 0)
{
data->unk24--;
break;
}
data->unk0C = 2;
break;
case 2:
if((gMain.newKeys & PAD_BUTTON_A) != 1 && (gMain.newKeys & PAD_BUTTON_B) != 2)
{
break;
}
data->unk0C = 3;
break;
case 3:
RemoveWindow(&data->window);
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_2);
data->unk0C = 0;
ret = TRUE;
break;
}
return ret;
}
THUMB_FUNC void MOD59_021D9D78(MOD59_TVOverlayData *data)
{
data->unk20 += 4;
BgSetPosTextAndCommit(data->bgConfig, GF_BG_LYR_MAIN_1, BG_POS_OP_SET_Y, data->unk20 >> 4);
}

View File

@@ -1,319 +0,0 @@
#include "global.h"
#include "mod59_TV_src.h"
#include "GX_layers.h"
#include "bg_window.h"
#include "constants/sndseq.h"
#include "game_init.h"
#include "heap.h"
#include "overlay_manager.h"
#include "unk_020040F4.h"
extern void FUN_0200E3A0(PMLCDTarget, s32);
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 void MOD59_021D9A20(MOD59_TVOverlayData *data); //setup func
extern void MOD59_021D9C48(MOD59_TVOverlayData *data); //setup func
extern void MOD59_021D9D78(void);
extern BOOL MOD59_021D9C74(MOD59_TVOverlayData *data, u32 param1, u32 param2, u32 param3);
extern void MOD59_021D9C68(MOD59_TVOverlayData *data);
extern void MOD59_021D9BD0(MOD59_TVOverlayData *data);
THUMB_FUNC BOOL MOD59_TVInit(struct UnkStruct_02006234 *param0, u32 *param1)
{
#pragma unused(param1)
CreateHeap(3, 83, 0x40000);
MOD59_TVOverlayData *data = (MOD59_TVOverlayData *)OverlayManager_CreateAndGetData(param0, sizeof(MOD59_TVOverlayData), 0x53);
(void)memset((void *)data, 0, sizeof(MOD59_TVOverlayData));
data->heap_id = 0x53;
data->unk24 = 0;
return TRUE;
}
#ifdef NONMATCHING
THUMB_FUNC BOOL MOD59_TVMain(struct UnkStruct_02006234 *overlayStruct, u32 *param1)
{
MOD59_TVOverlayData *data = (MOD59_TVOverlayData *)OverlayManager_GetData(overlayStruct);
BOOL ret = FALSE;
switch (*param1)
{
case 0:
FUN_0200E3A0(PM_LCD_TOP, 0);
FUN_0200E3A0(PM_LCD_BOTTOM, 0);
Main_SetVBlankIntrCB(NULL, NULL);
FUN_02015F34(NULL, NULL);
GX_DisableEngineALayers();
GX_DisableEngineBLayers();
reg_GX_DISPCNT = reg_GX_DISPCNT & 0xFFFFE0FF;
reg_GXS_DB_DISPCNT = reg_GXS_DB_DISPCNT & 0xFFFFE0FF;
SetKeyRepeatTimers(4, 8);
MOD59_021D9A20(data);
MOD59_021D9C48(data);
Main_SetVBlankIntrCB((void (*)(void *))MOD59_TVDoGpuBgUpdate, data);
GX_BothDispOn();
data->unk24 = 60;
*param1 = 1;
break;
case 1:
if (data->unk24 != 0)
{
data->unk24--;
break;
}
FUN_0200414C(SEQ_TV_HOUSOU);
FUN_0200433C(4, SEQ_TV_HOUSOU, 1);
data->unk24 = 90;
*param1 = 2;
break;
case 2:
if (data->unk24 != 0)
{
data->unk24--;
break;
}
data->unk24 = 0; //??
FUN_0200E1D0(0, 1, 1, 0, 6, 1, data->heap_id);
*param1 = 3;
break;
case 3:
MOD59_021D9D78();
if (FUN_0200E308() != 1)
{
break;
}
*param1 = 4;
break;
case 4:
MOD59_021D9D78();
if (MOD59_021D9C74(data, 0, 40, 48) != TRUE)
{
break;
}
FUN_0200E1D0(0, 0, 0, 0, 6, 1, data->heap_id);
*param1 = 5;
break;
case 5:
MOD59_021D9D78();
if (FUN_0200E308() != 1)
{
break;
}
MOD59_021D9C68(data);
MOD59_021D9BD0(data);
Main_SetVBlankIntrCB(NULL, NULL);
ret = TRUE;
break;
}
return ret;
}
#else
THUMB_FUNC asm BOOL MOD59_TVMain(struct UnkStruct_02006234 *overlayStruct, u32 *param1)
{
push {r3, r4, r5, r6, lr}
sub sp, #0xc
add r5, r1, #0
bl OverlayManager_GetData
ldr r1, [r5, #0]
add r4, r0, #0
mov r6, #0
cmp r1, #5
bls _021D98AE
b _021D99E2
_021D98AE:
add r1, r1, r1
add r1, pc
ldrh r1, [r1, #6]
lsl r1, r1, #0x10
asr r1, r1, #0x10
add pc, r1
_021D98BA: // jump table
dcd 0x0070000a //compiler really hates movs in inline asm
//movs r2, r1 //case 0
//lsl r0, r6, #1 //case 1
lsl r6, r2, #2 //case 2
lsl r0, r0, #3 //case 3
lsl r2, r2, #3 //case 4
lsl r4, r0, #4 //case 5
//.short _021D98C6 - _021D98BA - 2 // case 0
//.short _021D992C - _021D98BA - 2 // case 1
//.short _021D9952 - _021D98BA - 2 // case 2
//.short _021D997C - _021D98BA - 2 // case 3
//.short _021D998E - _021D98BA - 2 // case 4
//.short _021D99C0 - _021D98BA - 2 ; case 5
_021D98C6:
add r0, r6, #0
add r1, r6, #0
bl FUN_0200E3A0
mov r0, #1
add r1, r6, #0
bl FUN_0200E3A0
add r0, r6, #0
add r1, r0, #0
bl Main_SetVBlankIntrCB
add r0, r6, #0
add r1, r0, #0
bl FUN_02015F34
bl GX_DisableEngineALayers
bl GX_DisableEngineBLayers
mov r2, #1
lsl r2, r2, #0x1a
ldr r1, [r2, #0]
ldr r0, =0xFFFFE0FF
and r1, r0
str r1, [r2, #0]
ldr r2, =0x04001000
ldr r1, [r2, #0]
and r0, r1
str r0, [r2]
mov r0, #4
mov r1, #8
bl SetKeyRepeatTimers
add r0, r4, #0
bl MOD59_021D9A20
add r0, r4, #0
bl MOD59_021D9C48
ldr r0, =MOD59_TVDoGpuBgUpdate
add r1, r4, #0
bl Main_SetVBlankIntrCB
bl GX_BothDispOn
mov r0, #0x3c
str r0, [r4, #0x24]
mov r0, #1
str r0, [r5]
b _021D99E2
_021D992C:
ldr r0, [r4, #0x24]
cmp r0, #0
beq _021D9938
sub r0, r0, #1
str r0, [r4, #0x24]
b _021D99E2
_021D9938:
ldr r0, =0x00000406
bl FUN_0200414C
ldr r1, =0x00000406
mov r0, #4
mov r2, #1
bl FUN_0200433C
mov r0, #0x5a
str r0, [r4, #0x24]
mov r0, #2
str r0, [r5]
b _021D99E2
_021D9952:
ldr r0, [r4, #0x24]
cmp r0, #0
beq _021D995E
sub r0, r0, #1
str r0, [r4, #0x24]
b _021D99E2
_021D995E:
str r6, [r4, #0x24]
mov r0, #6
mov r1, #1
str r0, [sp]
str r1, [sp, #4]
ldr r0, [r4, #0]
add r2, r1, #0
str r0, [sp, #8]
add r0, r6, #0
add r3, r6, #0
bl FUN_0200E1D0
mov r0, #3
str r0, [r5]
b _021D99E2
_021D997C:
bl MOD59_021D9D78
bl FUN_0200E308
cmp r0, #1
bne _021D99E2
mov r0, #4
str r0, [r5]
b _021D99E2
_021D998E:
bl MOD59_021D9D78
add r0, r4, #0
add r1, r6, #0
mov r2, #0x28
mov r3, #0x30
bl MOD59_021D9C74
cmp r0, #1
bne _021D99E2
mov r0, #6
str r0, [sp]
mov r0, #1
str r0, [sp, #4]
ldr r0, [r4, #0]
str r0, [sp, #8]
add r0, r6, #0
add r1, r0, #0
add r2, r0, #0
add r3, r0, #0
bl FUN_0200E1D0
mov r0, #5
str r0, [r5]
b _021D99E2
_021D99C0:
bl MOD59_021D9D78
bl FUN_0200E308
cmp r0, #1
bne _021D99E2
add r0, r4, #0
bl MOD59_021D9C68
add r0, r4, #0
bl MOD59_021D9BD0
add r0, r6, #0
add r1, r0, #0
bl Main_SetVBlankIntrCB
mov r6, #1
_021D99E2:
add r0, r6, #0
add sp, #0xc
pop {r3, r4, r5, r6, pc}
}
#endif
THUMB_FUNC BOOL MOD59_TVExit(struct UnkStruct_02006234 *overlayStruct, u32 *param1)
{
#pragma unused (param1)
u32 heap_id = ((MOD59_TVOverlayData *)OverlayManager_GetData(overlayStruct))->heap_id;
OverlayManager_FreeData(overlayStruct);
DestroyHeap(heap_id);
return TRUE;
}
THUMB_FUNC void MOD59_TVDoGpuBgUpdate(MOD59_TVOverlayData *data)
{
DoScheduledBgGpuUpdates(data->bgConfig);
}

View File

@@ -11,7 +11,6 @@ typedef enum {
GX_LAYER_TOGGLE_ON,
} GX_LayerToggle;
struct GraphicsBanks
{
s32 bg;
@@ -26,7 +25,6 @@ struct GraphicsBanks
s32 texpltt;
};
struct GraphicsModes {
GXDispMode dispMode;
GXBGMode bgMode;
@@ -34,16 +32,14 @@ struct GraphicsModes {
GXBG0As _2d3dMode;
};
void GX_SetBanks(const struct GraphicsBanks *banks);
void GX_DisableEngineALayers();
void GX_DisableEngineALayers(void);
void GX_EngineAToggleLayers(u32 layer_mask, GX_LayerToggle layer_toggle);
void GX_SetEngineALayers(u32 layer_mask);
void GX_DisableEngineBLayers();
void GX_DisableEngineBLayers(void);
void GX_EngineBToggleLayers(u32 layer_mask, GX_LayerToggle layer_toggle);
void GX_BothDispOn();
void GX_SwapDisplay();
u32 GX_GetEngineALayers();
void GX_BothDispOn(void);
void GX_SwapDisplay(void);
u32 GX_GetEngineALayers(void);
#endif //POKEDIAMOND_GX_LAYERS_H