mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-06-02 21:54:45 -05:00
Merge branch 'master' into mystery_gift
This commit is contained in:
commit
fdbb0d450f
|
|
@ -1,107 +0,0 @@
|
|||
#include <nitro/fs/overlay.h>
|
||||
#pragma once
|
||||
.public LoadFontPal0
|
||||
.public OverlayManager_CreateAndGetData
|
||||
.public OverlayManager_GetData
|
||||
.public OverlayManager_FreeData
|
||||
.public OverlayManager_GetArgs
|
||||
.public ReadWholeNarcMemberByIdPair
|
||||
.public NARC_New
|
||||
.public NARC_Delete
|
||||
.public NARC_AllocAndReadWholeMember
|
||||
.public GfGfxLoader_LoadCharData
|
||||
.public GfGfxLoader_LoadScrnData
|
||||
.public GfGfxLoader_GXLoadPal
|
||||
.public G2dRenderer_SetSubSurfaceCoords
|
||||
.public NewMsgDataFromNarc
|
||||
.public DestroyMsgData
|
||||
.public ReadMsgDataIntoString
|
||||
.public MessageFormat_New
|
||||
.public MessageFormat_Delete
|
||||
.public BufferPlayersName
|
||||
.public BufferBoxMonNickname
|
||||
.public StringExpandPlaceholders
|
||||
.public SpriteRenderer_Create
|
||||
.public SpriteRenderer_CreateGfxHandler
|
||||
.public SpriteRenderer_GetG2dRendererPtr
|
||||
.public sub_0200CF70
|
||||
.public sub_0200CFF4
|
||||
.public sub_0200D020
|
||||
.public thunk_OamManager_ApplyAndResetBuffers
|
||||
.public SpriteRenderer_Delete
|
||||
.public SpriteRenderer_Init2DGfxResManagersFromCountsArray
|
||||
.public SpriteRenderer_LoadCharResObjFromOpenNarc
|
||||
.public SpriteRenderer_LoadPlttResObjFromOpenNarc
|
||||
.public SpriteRenderer_LoadCellResObjFromOpenNarc
|
||||
.public SpriteRenderer_LoadAnimResObjFromOpenNarc
|
||||
.public SpriteRenderer_LoadResourcesAndCreateSprite_CustomBottomScreenOffset
|
||||
.public SpriteRenderer_UnloadResourcesAndRemoveGfxHandler
|
||||
.public sub_0200D9DC
|
||||
.public UnkImageStruct_SetSpriteAnimActiveFlag
|
||||
.public thunk_Set2dSpriteVisibleFlag
|
||||
.public UnkImageStruct_SetSpriteVisibleFlag
|
||||
.public UnkImageStruct_SetSpritePositionXY_CustomScreenYOffset
|
||||
.public BeginNormalPaletteFade
|
||||
.public IsPaletteFadeFinished
|
||||
.public sub_0200FBF4
|
||||
.public sub_020145B4
|
||||
.public Main_SetVBlankIntrCB
|
||||
.public Main_SetHBlankIntrCB
|
||||
.public SetKeyRepeatTimers
|
||||
.public CreateHeap
|
||||
.public DestroyHeap
|
||||
.public AllocFromHeapAtEnd
|
||||
.public FreeToHeap
|
||||
.public BgConfig_Alloc
|
||||
.public SetBothScreensModesAndDisable
|
||||
.public InitBgFromTemplate
|
||||
.public FreeBgTilemapBuffer
|
||||
.public ToggleBgLayer
|
||||
.public BgCommitTilemapBufferToVram
|
||||
.public BG_ClearCharDataRange
|
||||
.public BgTilemapRectChangePalette
|
||||
.public BgClearTilemapBufferAndCommit
|
||||
.public AddWindow
|
||||
.public RemoveWindow
|
||||
.public FillWindowPixelRect
|
||||
.public DoScheduledBgGpuUpdates
|
||||
.public ScheduleSetBgPosText
|
||||
.public ResetAllTextPrinters
|
||||
.public AddTextPrinterParameterized2
|
||||
.public GfGfx_SetBanks
|
||||
.public GfGfx_DisableEngineAPlanes
|
||||
.public GfGfx_EngineATogglePlanes
|
||||
.public GfGfx_DisableEngineBPlanes
|
||||
.public GfGfx_EngineBTogglePlanes
|
||||
.public GfGfx_BothDispOn
|
||||
.public sub_02024B1C
|
||||
.public sub_02024B34
|
||||
.public Sprite_GetVramType
|
||||
.public GF_AssertFail
|
||||
.public String_New
|
||||
.public String_Delete
|
||||
.public Save_PlayerData_GetProfileAddr
|
||||
.public PlayerProfile_GetTrainerGender
|
||||
.public Save_GetPartyLeadAlive
|
||||
.public SpeciesToOverworldModelIndexOffset
|
||||
.public OverworldModelLookupFormCount
|
||||
.public OverworldModelLookupHasFemaleForm
|
||||
.public GetMonData
|
||||
.public GetMonGender
|
||||
.public MonIsShiny
|
||||
.public sub_02070438
|
||||
.public Mon_GetBoxMon
|
||||
.public Party_GetMonByIndex
|
||||
.public SaveArray_Party_Get
|
||||
.public NNS_G2dGetImageLocation
|
||||
.public NNS_G3dGetTex
|
||||
.public GX_LoadOBJPltt
|
||||
.public GXS_LoadOBJPltt
|
||||
.public GX_LoadOBJ
|
||||
.public GXS_LoadOBJ
|
||||
.public DC_FlushRange
|
||||
.public memset
|
||||
.public gSystem
|
||||
.public ov78_021E5900
|
||||
.public ov78_021E59EC
|
||||
.public ov78_021E5B24
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#include <nitro/fs/overlay.h>
|
||||
#pragma once
|
||||
.public sub_02018380
|
||||
.public sub_0201838C
|
||||
.public sub_020183B0
|
||||
.public sub_020254FC
|
||||
.public sub_02025504
|
||||
.public AddIGTSeconds
|
||||
|
|
@ -128,7 +128,7 @@
|
|||
.public sub_0203F9C4
|
||||
.public HatchEggInParty
|
||||
.public LaunchVoltorbFlipApp
|
||||
.public sub_0203FA8C
|
||||
.public LaunchCertificatesApp
|
||||
.public sub_0203FAB4
|
||||
.public sub_0203FAE8
|
||||
.public ScratchOffCards_Create
|
||||
|
|
@ -295,9 +295,9 @@
|
|||
.public CreditsApp_OvyInit
|
||||
.public CreditsApp_OvyExit
|
||||
.public CreditsApp_OvyExec
|
||||
.public ov78_021E5900
|
||||
.public ov78_021E59EC
|
||||
.public ov78_021E5B24
|
||||
.public CertificatesApp_Init
|
||||
.public CertificatesApp_Run
|
||||
.public CertificatesApp_Exit
|
||||
.public ov86_021E5900
|
||||
.public ov86_021E5A40
|
||||
.public ov86_021E5AA4
|
||||
|
|
|
|||
|
|
@ -2422,7 +2422,7 @@
|
|||
.short \arg0
|
||||
.endm
|
||||
|
||||
.macro scrcmd_425 arg0
|
||||
.macro show_certificate arg0
|
||||
.short 425
|
||||
.short \arg0
|
||||
.endm
|
||||
|
|
|
|||
1852
asm/overlay_78.s
1852
asm/overlay_78.s
File diff suppressed because it is too large
Load Diff
|
|
@ -1,75 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "unk_02018380.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
_021D10E8:
|
||||
.space 0x20
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_02018380
|
||||
sub_02018380: ; 0x02018380
|
||||
ldr r0, _02018388 ; =_021D10E8
|
||||
mov r1, #0
|
||||
str r1, [r0]
|
||||
bx lr
|
||||
.balign 4, 0
|
||||
_02018388: .word _021D10E8
|
||||
thumb_func_end sub_02018380
|
||||
|
||||
thumb_func_start sub_0201838C
|
||||
sub_0201838C: ; 0x0201838C
|
||||
push {r3, lr}
|
||||
ldr r1, _020183AC ; =_021D10E8
|
||||
mov r2, #1
|
||||
str r2, [r1]
|
||||
mov r2, #0
|
||||
str r2, [r1, #0x10]
|
||||
str r2, [r1, #0x14]
|
||||
str r2, [r1, #8]
|
||||
str r2, [r1, #0xc]
|
||||
str r0, [r1, #4]
|
||||
bl sub_020254FC
|
||||
ldr r2, _020183AC ; =_021D10E8
|
||||
str r0, [r2, #0x18]
|
||||
str r1, [r2, #0x1c]
|
||||
pop {r3, pc}
|
||||
.balign 4, 0
|
||||
_020183AC: .word _021D10E8
|
||||
thumb_func_end sub_0201838C
|
||||
|
||||
thumb_func_start sub_020183B0
|
||||
sub_020183B0: ; 0x020183B0
|
||||
push {r3, r4, r5, lr}
|
||||
ldr r0, _020183EC ; =_021D10E8
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _020183EA
|
||||
bl sub_020254FC
|
||||
ldr r2, _020183EC ; =_021D10E8
|
||||
ldr r3, [r2, #0x18]
|
||||
ldr r2, [r2, #0x1c]
|
||||
sub r0, r0, r3
|
||||
sbc r1, r2
|
||||
bl sub_02025504
|
||||
add r5, r1, #0
|
||||
ldr r1, _020183EC ; =_021D10E8
|
||||
add r4, r0, #0
|
||||
ldr r3, [r1, #8]
|
||||
ldr r2, [r1, #0xc]
|
||||
sub r0, r3, r4
|
||||
sbc r2, r5
|
||||
bhs _020183EA
|
||||
ldr r0, [r1, #4]
|
||||
sub r1, r4, r3
|
||||
bl AddIGTSeconds
|
||||
ldr r0, _020183EC ; =_021D10E8
|
||||
str r4, [r0, #8]
|
||||
str r5, [r0, #0xc]
|
||||
_020183EA:
|
||||
pop {r3, r4, r5, pc}
|
||||
.balign 4, 0
|
||||
_020183EC: .word _021D10E8
|
||||
thumb_func_end sub_020183B0
|
||||
|
|
@ -62,8 +62,8 @@ _020FA2E4:
|
|||
.word ov67_021E5900, ov67_021E5984, ov67_021E5968, FS_OVERLAY_ID(OVY_67)
|
||||
_020FA2F4:
|
||||
.word ov103_021EC940, ov103_021EC988, ov103_021EC9A4, FS_OVERLAY_ID(OVY_103)
|
||||
_020FA304:
|
||||
.word ov78_021E5900, ov78_021E59EC, ov78_021E5B24, FS_OVERLAY_ID(OVY_78)
|
||||
sAppTemplate_Certificates:
|
||||
.word CertificatesApp_Init, CertificatesApp_Run, CertificatesApp_Exit, FS_OVERLAY_ID(certificates_app)
|
||||
_020FA314:
|
||||
.word ov99_021E7818, ov99_021E794C, ov99_021E78F0, FS_OVERLAY_ID(OVY_99)
|
||||
_020FA324:
|
||||
|
|
@ -3145,8 +3145,8 @@ LaunchVoltorbFlipApp: ; 0x0203FA38
|
|||
_0203FA88: .word _020FA234
|
||||
thumb_func_end LaunchVoltorbFlipApp
|
||||
|
||||
thumb_func_start sub_0203FA8C
|
||||
sub_0203FA8C: ; 0x0203FA8C
|
||||
thumb_func_start LaunchCertificatesApp
|
||||
LaunchCertificatesApp: ; 0x0203FA8C
|
||||
push {r4, r5, r6, lr}
|
||||
add r5, r0, #0
|
||||
add r0, r1, #0
|
||||
|
|
@ -3156,7 +3156,7 @@ sub_0203FA8C: ; 0x0203FA8C
|
|||
add r4, r0, #0
|
||||
str r6, [r4, #4]
|
||||
ldr r0, [r5, #0xc]
|
||||
ldr r1, _0203FAB0 ; =_020FA304
|
||||
ldr r1, _0203FAB0 ; =sAppTemplate_Certificates
|
||||
str r0, [r4]
|
||||
add r0, r5, #0
|
||||
add r2, r4, #0
|
||||
|
|
@ -3164,8 +3164,8 @@ sub_0203FA8C: ; 0x0203FA8C
|
|||
add r0, r4, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
.balign 4, 0
|
||||
_0203FAB0: .word _020FA304
|
||||
thumb_func_end sub_0203FA8C
|
||||
_0203FAB0: .word sAppTemplate_Certificates
|
||||
thumb_func_end LaunchCertificatesApp
|
||||
|
||||
thumb_func_start sub_0203FAB4
|
||||
sub_0203FAB4: ; 0x0203FAB4
|
||||
|
|
|
|||
|
|
@ -128,16 +128,16 @@ scr_seq_T07R0203_000:
|
|||
check_johto_dex_complete VAR_SPECIAL_RESULT
|
||||
compare VAR_SPECIAL_RESULT, 0
|
||||
goto_if_eq _0245
|
||||
goto_if_set FLAG_UNK_143, _01ED
|
||||
goto_if_set FLAG_SAW_JOHTO_DEX_CERTIFICATE, _01ED
|
||||
npc_msg msg_0503_T07R0203_00001
|
||||
play_fanfare SEQ_ME_HYOUKA2
|
||||
wait_fanfare
|
||||
closemsg
|
||||
fade_screen 6, 1, 0, RGB_BLACK
|
||||
wait_fade
|
||||
scrcmd_425 0
|
||||
show_certificate 0
|
||||
scrcmd_150
|
||||
setflag FLAG_UNK_143
|
||||
setflag FLAG_SAW_JOHTO_DEX_CERTIFICATE
|
||||
add_special_game_stat 25
|
||||
fade_screen 6, 1, 1, RGB_BLACK
|
||||
wait_fade
|
||||
|
|
@ -145,16 +145,16 @@ _01ED:
|
|||
check_national_dex_complete VAR_SPECIAL_RESULT
|
||||
compare VAR_SPECIAL_RESULT, 0
|
||||
goto_if_eq _0245
|
||||
goto_if_set FLAG_UNK_144, _023A
|
||||
goto_if_set FLAG_SAW_NATIONAL_DEX_CERTIFICATE, _023A
|
||||
npc_msg msg_0503_T07R0203_00002
|
||||
play_fanfare SEQ_ME_HYOUKA2
|
||||
wait_fanfare
|
||||
closemsg
|
||||
fade_screen 6, 1, 0, RGB_BLACK
|
||||
wait_fade
|
||||
scrcmd_425 1
|
||||
show_certificate 1
|
||||
scrcmd_150
|
||||
setflag FLAG_UNK_144
|
||||
setflag FLAG_SAW_NATIONAL_DEX_CERTIFICATE
|
||||
add_special_game_stat 26
|
||||
fade_screen 6, 1, 1, RGB_BLACK
|
||||
wait_fade
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ _005C:
|
|||
_006D:
|
||||
get_party_lead_alive VAR_SPECIAL_x8006
|
||||
get_shiny_leaf_count VAR_SPECIAL_x8006, VAR_SPECIAL_RESULT
|
||||
goto_if_set FLAG_UNK_161, _00B1
|
||||
goto_if_set FLAG_SHOWED_FRIEND_A_SHINY_LEAF, _00B1
|
||||
compare VAR_SPECIAL_RESULT, 1
|
||||
goto_if_ge _009E
|
||||
_008F:
|
||||
|
|
@ -56,7 +56,7 @@ _008F:
|
|||
end
|
||||
|
||||
_009E:
|
||||
setflag FLAG_UNK_161
|
||||
setflag FLAG_SHOWED_FRIEND_A_SHINY_LEAF
|
||||
buffer_players_name 0
|
||||
gender_msgbox msg_0549_T20R0402_00007, msg_0549_T20R0402_00008
|
||||
wait_button_or_walk_away
|
||||
|
|
@ -91,7 +91,7 @@ _00FC:
|
|||
_010D:
|
||||
fade_screen 6, 1, 0, RGB_BLACK
|
||||
wait_fade
|
||||
scrcmd_425 2
|
||||
show_certificate 2
|
||||
scrcmd_150
|
||||
fade_screen 6, 1, 1, RGB_BLACK
|
||||
wait_fade
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ FS_EXTERN_OVERLAY(OVY_74)
|
|||
FS_EXTERN_OVERLAY(OVY_75)
|
||||
FS_EXTERN_OVERLAY(credits)
|
||||
FS_EXTERN_OVERLAY(OVY_77)
|
||||
FS_EXTERN_OVERLAY(OVY_78)
|
||||
FS_EXTERN_OVERLAY(certificates_app)
|
||||
FS_EXTERN_OVERLAY(OVY_79)
|
||||
FS_EXTERN_OVERLAY(OVY_8)
|
||||
FS_EXTERN_OVERLAY(OVY_80)
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ c89c5b9496cb967df817641e6c021f74ec8f37d4 *build/heartgold.us/OVY_74.sbin
|
|||
2defca91fb335bec80051767f686a66e5b7f1f1f *build/heartgold.us/OVY_75.sbin
|
||||
9b2eaa0c6bba33cec913d01e33ddda3f8ed3ef38 *build/heartgold.us/credits.sbin
|
||||
de8a847bff8c343d69b853a215e6ee775ef2ef96 *build/heartgold.us/OVY_77.sbin
|
||||
ff262de0394edb7421fb7b7f5fcbdccfbe652bde *build/heartgold.us/OVY_78.sbin
|
||||
ff262de0394edb7421fb7b7f5fcbdccfbe652bde *build/heartgold.us/certificates_app.sbin
|
||||
de8a847bff8c343d69b853a215e6ee775ef2ef96 *build/heartgold.us/OVY_79.sbin
|
||||
a6a008a9cdc439cc55a878fe6478fb23f347baec *build/heartgold.us/OVY_80.sbin
|
||||
7b6f25a18e5a3496deafd27f0046e68b335f615e *build/heartgold.us/OVY_81.sbin
|
||||
|
|
|
|||
25
include/certificates_app.h
Normal file
25
include/certificates_app.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef POKEHEARTGOLD_CERTIFICATES_APP_H
|
||||
#define POKEHEARTGOLD_CERTIFICATES_APP_H
|
||||
|
||||
#include "overlay_manager.h"
|
||||
|
||||
#define CERTIFICATE_JOHTO_DEX 0
|
||||
#define CERTIFICATE_NATIONAL_DEX 1
|
||||
#define CERTIFICATE_SHINY_LEAVES 2
|
||||
|
||||
typedef enum CertificatesExecStates {
|
||||
CERTIFICATES_EXECSTATE_SETUP,
|
||||
CERTIFICATES_EXECSTATE_FADE_IN,
|
||||
CERTIFICATES_EXECSTATE_WAIT_ONE_SECOND,
|
||||
CERTIFICATES_EXECSTATE_MOVE_TO_BOTTOM_SCREEN,
|
||||
CERTIFICATES_EXECSTATE_WAIT_FOR_INPUT,
|
||||
CERTIFICATES_EXECSTATE_FADE_OUT,
|
||||
|
||||
CERTIFICATES_EXECSTATE_COUNT,
|
||||
} CertificatesExecStates;
|
||||
|
||||
BOOL CertificatesApp_Init(OVY_MANAGER *manager, int *state);
|
||||
BOOL CertificatesApp_Run(OVY_MANAGER *manager, int *state);
|
||||
BOOL CertificatesApp_Exit(OVY_MANAGER *manager, int *state);
|
||||
|
||||
#endif
|
||||
|
|
@ -340,8 +340,8 @@
|
|||
#define FLAG_UNK_140 0x140
|
||||
#define FLAG_WON_THIS_BUG_CONTEST 0x141
|
||||
#define FLAG_UNK_142 0x142
|
||||
#define FLAG_UNK_143 0x143
|
||||
#define FLAG_UNK_144 0x144
|
||||
#define FLAG_SAW_JOHTO_DEX_CERTIFICATE 0x143
|
||||
#define FLAG_SAW_NATIONAL_DEX_CERTIFICATE 0x144
|
||||
#define FLAG_UNK_145 0x145
|
||||
#define FLAG_UNK_146 0x146
|
||||
#define FLAG_UNK_147 0x147
|
||||
|
|
@ -370,7 +370,7 @@
|
|||
#define FLAG_MET_MOVE_MANIAC 0x15E
|
||||
#define FLAG_BUG_CONTEST_OTHER_POKES_HELD 0x15F
|
||||
#define FLAG_ELMS_LAB_PREVENT_PLAYER_ESCAPE 0x160
|
||||
#define FLAG_UNK_161 0x161
|
||||
#define FLAG_SHOWED_FRIEND_A_SHINY_LEAF 0x161
|
||||
#define FLAG_TRADE_LT_SURGE_PIKACHU 0x162
|
||||
#define FLAG_GOT_RAGECANDYBAR 0x163
|
||||
#define FLAG_UNK_164 0x164
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ typedef enum HeapID {
|
|||
HEAP_ID_CHOOSE_STARTER = 46,
|
||||
HEAP_ID_EVOLUTION = 71,
|
||||
HEAP_ID_CREDITS = 73,
|
||||
HEAP_ID_CERTIFICATES = 82,
|
||||
HEAP_ID_89 = 89,
|
||||
HEAP_ID_ALPH_PUZZLE = 97,
|
||||
HEAP_ID_GAME_BOARD = 110,
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ BOOL ScrCmd_421(ScriptContext* ctx);
|
|||
BOOL ScrCmd_422(ScriptContext* ctx);
|
||||
BOOL ScrCmd_CheckJohtoDexComplete(ScriptContext* ctx);
|
||||
BOOL ScrCmd_CheckNationalDexComplete(ScriptContext* ctx);
|
||||
BOOL ScrCmd_425(ScriptContext* ctx);
|
||||
BOOL ScrCmd_ShowCertificate(ScriptContext* ctx);
|
||||
BOOL ScrCmd_KenyaCheck(ScriptContext* ctx);
|
||||
BOOL ScrCmd_427(ScriptContext* ctx);
|
||||
BOOL ScrCmd_MonGiveMail(ScriptContext* ctx);
|
||||
|
|
|
|||
|
|
@ -5,5 +5,7 @@
|
|||
|
||||
void *sub_0201442C(NarcId narcId, s32 fileId, HeapID heapId);
|
||||
void *sub_02014450(NarcId narcId, s32 fileId, HeapID heapId);
|
||||
// FIXME: Types are probably wrong.
|
||||
void sub_020145B4(void *a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 a5, void *a6);
|
||||
|
||||
#endif //POKEHEARTGOLD_UNK_02013FDC_H
|
||||
|
|
|
|||
|
|
@ -3,8 +3,17 @@
|
|||
|
||||
#include "igt.h"
|
||||
|
||||
typedef struct UnkStruct_021D10E8 {
|
||||
u32 unk0;
|
||||
IGT *igt;
|
||||
u64 unk8;
|
||||
u32 unk10;
|
||||
u32 unk14;
|
||||
u64 unk18;
|
||||
} UnkStruct_021D10E8;
|
||||
|
||||
void sub_02018380(void);
|
||||
void sub_020183B0(void);
|
||||
void sub_0201838C(IGT* igt);
|
||||
void sub_0201838C(IGT *igt);
|
||||
|
||||
#endif //POKEHEARTGOLD_UNK_02018380_H
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ void SpriteList_Delete(SpriteList *);
|
|||
void sub_0202457C(SpriteList *);
|
||||
void Sprite_Delete(Sprite *);
|
||||
void Sprite_SetMatrix(Sprite *, VecFx32 *);
|
||||
NNSG2dImagePaletteProxy *sub_02024B34(Sprite *);
|
||||
NNS_G2D_VRAM_TYPE Sprite_GetVramType(Sprite*);
|
||||
void sub_0202487C(Sprite*, u8);
|
||||
void Set2dSpriteVisibleFlag(Sprite *, int);
|
||||
|
|
|
|||
|
|
@ -117,6 +117,11 @@ typedef struct UnkStruct_0203EDDC {
|
|||
Pokemon *unk10;
|
||||
} UnkStruct_0203EDDC;
|
||||
|
||||
typedef struct CertificatesApp_Args {
|
||||
SaveData *saveData;
|
||||
u32 certificateId;
|
||||
} CertificatesApp_Args;
|
||||
|
||||
struct UseMailWork *CreateUseMailWork(FieldSystem *fieldSystem, int kind, int mailId, HeapID heapId);
|
||||
struct ApricornBoxWork *CreateApricornBoxWork(FieldSystem *fieldSystem, int a1);
|
||||
struct PalPadWork *CreatePalPadWork(FieldSystem *fieldSystem, SaveData *saveData, HeapID heapId);
|
||||
|
|
@ -179,7 +184,7 @@ void sub_0203E960(TaskManager *taskManager, int a1, u16 *a2, u16 *a3, u16 *a4);
|
|||
void sub_0203F818(FieldSystem *fieldSystem);
|
||||
void HatchEggInParty(FieldSystem *fieldSystem);
|
||||
void *sub_0203F074(FieldSystem *fieldSystem, HeapID heapId);
|
||||
void *sub_0203FA8C(FieldSystem *fieldSystem, HeapID heapId, u16 a2);
|
||||
void *LaunchCertificatesApp(FieldSystem *fieldSystem, HeapID heapId, u16 certificateId);
|
||||
void *sub_0203E5D0(HeapID heapId, FieldSystem *fieldSystem, u16 a2);
|
||||
void *sub_0203FAB4(FieldSystem *fieldSystem, u8 a1, u8 a2, u16 a3, HeapID heapId);
|
||||
ScratchCardAppData *ScratchOffCards_Create(FieldSystem *fieldSystem, HeapID heapId);
|
||||
|
|
|
|||
6
main.lsf
6
main.lsf
|
|
@ -57,7 +57,7 @@ Static main
|
|||
Object asm/unk_02016EDC.o
|
||||
Object asm/unk_02017FAC.o
|
||||
Object asm/unk_02018000.o
|
||||
Object asm/unk_02018380.o
|
||||
Object src/unk_02018380.o
|
||||
Object asm/unk_020183F0.o
|
||||
Object src/camera_translation.o
|
||||
Object asm/unk_020192D0.o
|
||||
|
|
@ -923,10 +923,10 @@ Overlay OVY_77
|
|||
{
|
||||
After main
|
||||
}
|
||||
Overlay OVY_78
|
||||
Overlay certificates_app
|
||||
{
|
||||
After main
|
||||
Object asm/overlay_78.o
|
||||
Object src/certificates_app.o
|
||||
}
|
||||
Overlay OVY_79
|
||||
{
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ bbb27790c043c8b6985137283c04c8d74f4626ef *build/soulsilver.us/OVY_73.sbin
|
|||
f63a6664ca45d0b719979623875b97db7148eab7 *build/soulsilver.us/OVY_75.sbin
|
||||
39b04344d2451a8c655cbc4ebac01fef116a5750 *build/soulsilver.us/credits.sbin
|
||||
de8a847bff8c343d69b853a215e6ee775ef2ef96 *build/soulsilver.us/OVY_77.sbin
|
||||
ff262de0394edb7421fb7b7f5fcbdccfbe652bde *build/soulsilver.us/OVY_78.sbin
|
||||
ff262de0394edb7421fb7b7f5fcbdccfbe652bde *build/soulsilver.us/certificates_app.sbin
|
||||
de8a847bff8c343d69b853a215e6ee775ef2ef96 *build/soulsilver.us/OVY_79.sbin
|
||||
a6a008a9cdc439cc55a878fe6478fb23f347baec *build/soulsilver.us/OVY_80.sbin
|
||||
7b6f25a18e5a3496deafd27f0046e68b335f615e *build/soulsilver.us/OVY_81.sbin
|
||||
|
|
|
|||
851
src/certificates_app.c
Normal file
851
src/certificates_app.c
Normal file
|
|
@ -0,0 +1,851 @@
|
|||
#include "global.h"
|
||||
#include <nitro/os/cache.h>
|
||||
#include "bg_window.h"
|
||||
#include "constants/mmodel.h"
|
||||
#include "certificates_app.h"
|
||||
#include "field_follow_poke.h"
|
||||
#include "font.h"
|
||||
#include "gf_gfx_loader.h"
|
||||
#include "msgdata.h"
|
||||
#include "msgdata/msg.naix"
|
||||
#include "msgdata/msg/msg_0004.h"
|
||||
#include "party.h"
|
||||
#include "player_data.h"
|
||||
#include "pokemon.h"
|
||||
#include "save.h"
|
||||
#include "system.h"
|
||||
#include "text.h"
|
||||
#include "unk_0200FA24.h"
|
||||
#include "unk_02013FDC.h"
|
||||
#include "unk_0203E348.h"
|
||||
#include "unk_0205BB1C.h"
|
||||
|
||||
typedef struct CertificatesApp_Data {
|
||||
HeapID heapId;
|
||||
u32 certificateId;
|
||||
SaveData *savedata;
|
||||
PlayerProfile *profile;
|
||||
Pokemon *frontPokemon;
|
||||
BgConfig *bgConfig;
|
||||
Window window1;
|
||||
Window window2;
|
||||
MsgData *msgData;
|
||||
MessageFormat *msgFmt;
|
||||
s16 unk40;
|
||||
u16 waitFrames;
|
||||
SpriteRenderer *spriteRenderer;
|
||||
SpriteGfxHandler *spriteGfxHandler;
|
||||
UnkImageStruct *unk4C[3];
|
||||
u32 unk58;
|
||||
} CertificatesApp_Data; // size: 0x5c
|
||||
|
||||
static const WindowTemplate ov78_021E67D8 = {
|
||||
.bgId = 0,
|
||||
.left = 0,
|
||||
.top = 0,
|
||||
.width = 32,
|
||||
.height = 24,
|
||||
.palette = 2,
|
||||
.baseTile = 0x0001,
|
||||
};
|
||||
|
||||
static const GraphicsModes ov78_021E67E0 = {
|
||||
.dispMode = GX_DISPMODE_GRAPHICS,
|
||||
.bgMode = GX_BGMODE_0,
|
||||
.subMode = GX_BGMODE_0,
|
||||
._2d3dMode = GX_BG0_AS_2D,
|
||||
};
|
||||
|
||||
static const Unk122_021E92D0 ov78_021E67F0 = {
|
||||
.unk0 = 0,
|
||||
.unk4 = 0x20000,
|
||||
.unk8 = 0x4000,
|
||||
.unkC = 0x10,
|
||||
.unk10 = 0x10,
|
||||
};
|
||||
|
||||
static const SpriteResourceCountsListUnion ov78_021E6804 = {
|
||||
.numChar = 3,
|
||||
.numPltt = 3,
|
||||
.numCell = 3,
|
||||
.numAnim = 3,
|
||||
.numMcel = 0,
|
||||
.numManm = 0,
|
||||
};
|
||||
|
||||
static const BgTemplate ov78_021E681C = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.bufferSize = 0,
|
||||
.baseTile = 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 = GX_BG_AREAOVER_XLU,
|
||||
.mosaic = FALSE,
|
||||
};
|
||||
|
||||
static const Unk122_021E92FC ov78_021E6838 = {
|
||||
.unk0 = 0,
|
||||
.unk4 = 0x80,
|
||||
.unk8 = 0,
|
||||
.unkC = 0x20,
|
||||
.unk10 = 0,
|
||||
.unk14 = 0x80,
|
||||
.unk18 = 0,
|
||||
.unk1C = 0x20,
|
||||
};
|
||||
|
||||
static const GraphicsBanks ov78_021E6858 = {
|
||||
.bg = GX_VRAM_BG_128_B,
|
||||
.bgextpltt = GX_VRAM_BGEXTPLTT_NONE,
|
||||
.subbg = GX_VRAM_SUB_BG_128_C,
|
||||
.subbgextpltt = GX_VRAM_SUB_BGEXTPLTT_NONE,
|
||||
.obj = GX_VRAM_OBJ_128_A,
|
||||
.objextpltt = GX_VRAM_OBJEXTPLTT_NONE,
|
||||
.subobj = GX_VRAM_SUB_OBJ_16_I,
|
||||
.subobjextpltt = GX_VRAM_SUB_OBJEXTPLTT_NONE,
|
||||
.tex = GX_VRAM_TEX_NONE,
|
||||
.texpltt = GX_VRAM_TEXPLTT_NONE,
|
||||
};
|
||||
|
||||
static const UnkTemplate_0200D748 ov78_021E68B4 = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.z = 0,
|
||||
.animation = 0,
|
||||
.spritePriority = 1,
|
||||
.pal = 3,
|
||||
.vram = NNS_G2D_VRAM_TYPE_MAX,
|
||||
.resIdList = { 2, 2, 2, 2, 0, 0 },
|
||||
.bgPriority = 0,
|
||||
.vramTransfer = 0,
|
||||
};
|
||||
|
||||
static const UnkTemplate_0200D748 ov78_021E6880 = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.z = 0,
|
||||
.animation = 0,
|
||||
.spritePriority = 0,
|
||||
.pal = 0xFFFF,
|
||||
.vram = NNS_G2D_VRAM_TYPE_MAX,
|
||||
.resIdList = {},
|
||||
.bgPriority = 0,
|
||||
.vramTransfer = 0,
|
||||
};
|
||||
|
||||
static const UnkTemplate_0200D748 ov78_021E68E8 = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.z = 0,
|
||||
.animation = 0,
|
||||
.spritePriority = 0,
|
||||
.pal = 2,
|
||||
.vram = NNS_G2D_VRAM_TYPE_MAX,
|
||||
.resIdList = { 1, 1, 1, 1, 0, 0 },
|
||||
.bgPriority = 0,
|
||||
.vramTransfer = 0,
|
||||
};
|
||||
|
||||
static s16 ov78_021E6920[3][2] = {
|
||||
{ 128, 16 },
|
||||
{ 116, 180 },
|
||||
{ 140, 180 },
|
||||
};
|
||||
|
||||
static void CertificatesApp_OnVBlank(CertificatesApp_Data *data);
|
||||
static void CertificatesApp_SetupBgConfig(CertificatesApp_Data *data);
|
||||
static void CertificatesApp_FreeBgConfig(CertificatesApp_Data *data);
|
||||
static void CertificatesApp_SetupWindowsAndText(CertificatesApp_Data *data);
|
||||
static void CertificatesApp_FreeWindowsAndText(CertificatesApp_Data *data);
|
||||
static void ov78_021E5E44(CertificatesApp_Data *data);
|
||||
static void ov78_021E5E54(CertificatesApp_Data *data);
|
||||
static void ov78_021E5EA4(CertificatesApp_Data *data);
|
||||
static void ov78_021E6068(CertificatesApp_Data *data);
|
||||
static UnkImageStruct *ov78_021E61C4(SpriteRenderer *renderer, SpriteGfxHandler *gfxHandler, s16 x, s16 y, u8 animation, u8 spritePriority);
|
||||
static UnkImageStruct *ov78_021E6214(SpriteRenderer *renderer, SpriteGfxHandler *gfxHandler, s16 x, s16 y);
|
||||
static UnkImageStruct *ov78_021E6250(SpriteRenderer *renderer, SpriteGfxHandler *gfxHandler, s16 x, s16 y);
|
||||
static void CertificatesApp_SetupSpriteRenderer(CertificatesApp_Data *data);
|
||||
static void CertificatesApp_FreeSpriteRenderer(CertificatesApp_Data *data);
|
||||
static void ov78_021E636C(CertificatesApp_Data *data);
|
||||
static void ov78_021E652C(CertificatesApp_Data *data);
|
||||
static void ov78_021E656C(Sprite *sprite, void *unkBuffer, u32 unkBufferSize, u32 srcOffset);
|
||||
static void ov78_021E65BC(Sprite *sprite, u32 narcMemberNum, u32 a2, HeapID heapId);
|
||||
static void ov78_021E6664(Sprite *sprite, PlayerProfile *profile, HeapID heapId);
|
||||
static u32 ov78_021E6688(int species, int form, int gender);
|
||||
static void ov78_021E66D4(Sprite *sprite, Pokemon *pokemon, HeapID heapId, u32 a3);
|
||||
|
||||
BOOL CertificatesApp_Init(OVY_MANAGER *manager, int *state) {
|
||||
CreateHeap(HEAP_ID_3, HEAP_ID_CERTIFICATES, 0x20000);
|
||||
|
||||
CertificatesApp_Data *data = OverlayManager_CreateAndGetData(manager, sizeof(CertificatesApp_Data), HEAP_ID_CERTIFICATES);
|
||||
memset(data, 0, sizeof(CertificatesApp_Data));
|
||||
CertificatesApp_Args *args = OverlayManager_GetArgs(manager);
|
||||
|
||||
int slot = Save_GetPartyLeadAlive(args->saveData);
|
||||
|
||||
// kinda late for this, isn't it?
|
||||
GF_ASSERT(args != NULL);
|
||||
GF_ASSERT(args->saveData != NULL);
|
||||
|
||||
Party *party = SaveArray_Party_Get(args->saveData);
|
||||
|
||||
data->heapId = HEAP_ID_CERTIFICATES;
|
||||
data->savedata = args->saveData;
|
||||
data->certificateId = args->certificateId;
|
||||
data->profile = Save_PlayerData_GetProfileAddr(data->savedata);
|
||||
data->frontPokemon = Party_GetMonByIndex(party, slot);
|
||||
|
||||
sub_0200FBF4(0, 0);
|
||||
sub_0200FBF4(1, 0);
|
||||
|
||||
Main_SetVBlankIntrCB(NULL, NULL);
|
||||
Main_SetHBlankIntrCB(NULL, NULL);
|
||||
|
||||
GfGfx_DisableEngineAPlanes();
|
||||
GfGfx_DisableEngineBPlanes();
|
||||
GX_SetVisiblePlane(GX_PLANEMASK_NONE);
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_NONE);
|
||||
|
||||
SetKeyRepeatTimers(4, 8);
|
||||
|
||||
CertificatesApp_SetupBgConfig(data);
|
||||
CertificatesApp_SetupWindowsAndText(data);
|
||||
Main_SetVBlankIntrCB((GFIntrCB)CertificatesApp_OnVBlank, data);
|
||||
|
||||
if (data->certificateId == CERTIFICATE_SHINY_LEAVES) {
|
||||
CertificatesApp_SetupSpriteRenderer(data);
|
||||
ov78_021E636C(data);
|
||||
}
|
||||
|
||||
GfGfx_BothDispOn();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CertificatesApp_Run(OVY_MANAGER *manager, int *state) {
|
||||
CertificatesApp_Data *data = OverlayManager_GetData(manager);
|
||||
BOOL ret = FALSE;
|
||||
|
||||
switch (*state) {
|
||||
case CERTIFICATES_EXECSTATE_SETUP:
|
||||
ov78_021E5E44(data);
|
||||
ov78_021E5EA4(data);
|
||||
ov78_021E6068(data);
|
||||
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_0, GF_PLANE_TOGGLE_ON);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_1, GF_PLANE_TOGGLE_ON);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_3, GF_PLANE_TOGGLE_ON);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_0, GF_PLANE_TOGGLE_ON);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_1, GF_PLANE_TOGGLE_ON);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_3, GF_PLANE_TOGGLE_ON);
|
||||
|
||||
BeginNormalPaletteFade(0, 1, 1, RGB_BLACK, 6, 1, data->heapId);
|
||||
|
||||
*state = CERTIFICATES_EXECSTATE_FADE_IN;
|
||||
break;
|
||||
case CERTIFICATES_EXECSTATE_FADE_IN:
|
||||
if (IsPaletteFadeFinished() != TRUE) {
|
||||
break;
|
||||
}
|
||||
|
||||
data->waitFrames = 0;
|
||||
*state = CERTIFICATES_EXECSTATE_WAIT_ONE_SECOND;
|
||||
break;
|
||||
case CERTIFICATES_EXECSTATE_WAIT_ONE_SECOND:
|
||||
if (data->waitFrames < 60) {
|
||||
data->waitFrames++;
|
||||
} else {
|
||||
*state = CERTIFICATES_EXECSTATE_MOVE_TO_BOTTOM_SCREEN;
|
||||
}
|
||||
break;
|
||||
case CERTIFICATES_EXECSTATE_MOVE_TO_BOTTOM_SCREEN:
|
||||
if (data->unk40 > -192) {
|
||||
data->unk40 -= 4;
|
||||
ov78_021E5E54(data);
|
||||
} else {
|
||||
data->unk40 = -192;
|
||||
ov78_021E5E54(data);
|
||||
*state = CERTIFICATES_EXECSTATE_WAIT_FOR_INPUT;
|
||||
}
|
||||
break;
|
||||
case CERTIFICATES_EXECSTATE_WAIT_FOR_INPUT:
|
||||
if ((gSystem.newKeys & PAD_BUTTON_A) == PAD_BUTTON_A || (gSystem.newKeys & PAD_BUTTON_B) == PAD_BUTTON_B || gSystem.touchNew != 0) {
|
||||
BeginNormalPaletteFade(0, 0, 0, RGB_BLACK, 6, 1, data->heapId);
|
||||
*state = CERTIFICATES_EXECSTATE_FADE_OUT;
|
||||
}
|
||||
break;
|
||||
case CERTIFICATES_EXECSTATE_FADE_OUT:
|
||||
if (IsPaletteFadeFinished() == TRUE) {
|
||||
ret = TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL CertificatesApp_Exit(OVY_MANAGER *manager, int *state) {
|
||||
CertificatesApp_Data *data = OverlayManager_GetData(manager);
|
||||
HeapID heapId = data->heapId;
|
||||
|
||||
if (data->certificateId == CERTIFICATE_SHINY_LEAVES) {
|
||||
CertificatesApp_FreeSpriteRenderer(data);
|
||||
}
|
||||
|
||||
CertificatesApp_FreeWindowsAndText(data);
|
||||
CertificatesApp_FreeBgConfig(data);
|
||||
|
||||
Main_SetVBlankIntrCB(NULL, NULL);
|
||||
|
||||
OverlayManager_FreeData(manager);
|
||||
|
||||
DestroyHeap(heapId);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void CertificatesApp_OnVBlank(CertificatesApp_Data *data) {
|
||||
GF_ASSERT(data != NULL);
|
||||
GF_ASSERT(data->bgConfig != NULL);
|
||||
|
||||
if (data->certificateId == CERTIFICATE_SHINY_LEAVES) {
|
||||
GF_ASSERT(data->spriteGfxHandler != NULL);
|
||||
sub_0200D020(data->spriteGfxHandler);
|
||||
|
||||
thunk_OamManager_ApplyAndResetBuffers();
|
||||
}
|
||||
|
||||
DoScheduledBgGpuUpdates(data->bgConfig);
|
||||
|
||||
OS_SetIrqCheckFlag(OS_IE_VBLANK);
|
||||
}
|
||||
|
||||
static void CertificatesApp_SetupBgConfig(CertificatesApp_Data *data) {
|
||||
GraphicsBanks banks = ov78_021E6858;
|
||||
GfGfx_SetBanks(&banks);
|
||||
|
||||
data->bgConfig = BgConfig_Alloc(data->heapId);
|
||||
|
||||
GraphicsModes modes = ov78_021E67E0;
|
||||
SetBothScreensModesAndDisable(&modes);
|
||||
|
||||
BgTemplate template = ov78_021E681C;
|
||||
|
||||
template.screenBase = GX_BG_SCRBASE_0x0000;
|
||||
template.charBase = GX_BG_CHARBASE_0x10000;
|
||||
template.bufferSize = 0x1000;
|
||||
template.size = GX_BG_SCRSIZE_TEXT_256x512;
|
||||
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_0, &template, GF_BG_TYPE_TEXT);
|
||||
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_0);
|
||||
|
||||
template.screenBase = GX_BG_SCRBASE_0x1000;
|
||||
template.charBase = GX_BG_CHARBASE_0x08000;
|
||||
template.bufferSize = 0x1000;
|
||||
template.size = GX_BG_SCRSIZE_TEXT_256x512;
|
||||
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_1, &template, GF_BG_TYPE_TEXT);
|
||||
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_1);
|
||||
|
||||
template.screenBase = GX_BG_SCRBASE_0x2000;
|
||||
template.charBase = GX_BG_CHARBASE_0x04000;
|
||||
template.bufferSize = 0x800;
|
||||
template.size = 1;
|
||||
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_3, &template, GF_BG_TYPE_TEXT);
|
||||
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_3);
|
||||
|
||||
template.screenBase = GX_BG_SCRBASE_0x0000;
|
||||
template.charBase = GX_BG_CHARBASE_0x10000;
|
||||
template.bufferSize = 0x1000;
|
||||
template.size = GX_BG_SCRSIZE_TEXT_256x512;
|
||||
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_0, &template, GF_BG_TYPE_TEXT);
|
||||
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_0);
|
||||
|
||||
template.screenBase = GX_BG_SCRBASE_0x1000;
|
||||
template.charBase = GX_BG_CHARBASE_0x08000;
|
||||
template.bufferSize = 0x1000;
|
||||
template.size = GX_BG_SCRSIZE_TEXT_256x512;
|
||||
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_1, &template, GF_BG_TYPE_TEXT);
|
||||
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_1);
|
||||
|
||||
template.screenBase = GX_BG_SCRBASE_0x2000;
|
||||
template.charBase = GX_BG_CHARBASE_0x04000;
|
||||
template.bufferSize = 0x800;
|
||||
template.size = GX_BG_SCRSIZE_TEXT_512x256;
|
||||
InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_3, &template, GF_BG_TYPE_TEXT);
|
||||
BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_3);
|
||||
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_0, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_1, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_2, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_3, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_0, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_1, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_2, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_3, GF_PLANE_TOGGLE_OFF);
|
||||
}
|
||||
|
||||
static void CertificatesApp_FreeBgConfig(CertificatesApp_Data *data) {
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_0, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_1, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_2, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_MAIN_3, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_0, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_1, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_2, GF_PLANE_TOGGLE_OFF);
|
||||
ToggleBgLayer(GF_BG_LYR_SUB_3, GF_PLANE_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_3);
|
||||
FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_0);
|
||||
FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_1);
|
||||
FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_3);
|
||||
|
||||
FreeToHeap(data->bgConfig);
|
||||
}
|
||||
|
||||
static void CertificatesApp_SetupWindowsAndText(CertificatesApp_Data *data) {
|
||||
WindowTemplate template = ov78_021E67D8;
|
||||
|
||||
ResetAllTextPrinters();
|
||||
|
||||
data->msgData = NewMsgDataFromNarc(MSGDATA_LOAD_LAZY, NARC_msgdata_msg, NARC_msg_msg_0004_bin, data->heapId);
|
||||
data->msgFmt = MessageFormat_New(data->heapId);
|
||||
|
||||
template.bgId = GF_BG_LYR_MAIN_0;
|
||||
AddWindow(data->bgConfig, &data->window1, &template);
|
||||
FillWindowPixelRect(&data->window1, 0x00, 0, 0, GX_LCD_SIZE_X, GX_LCD_SIZE_Y);
|
||||
|
||||
template.bgId = GF_BG_LYR_SUB_0;
|
||||
AddWindow(data->bgConfig, &data->window2, &template);
|
||||
FillWindowPixelRect(&data->window2, 0x00, 0, 0, GX_LCD_SIZE_X, GX_LCD_SIZE_Y);
|
||||
}
|
||||
|
||||
static void CertificatesApp_FreeWindowsAndText(CertificatesApp_Data *data) {
|
||||
RemoveWindow(&data->window2);
|
||||
RemoveWindow(&data->window1);
|
||||
|
||||
MessageFormat_Delete(data->msgFmt);
|
||||
DestroyMsgData(data->msgData);
|
||||
}
|
||||
|
||||
void ov78_021E5E44(CertificatesApp_Data *data) {
|
||||
data->unk40 = 0;
|
||||
ov78_021E5E54(data);
|
||||
}
|
||||
|
||||
static void ov78_021E5E54(CertificatesApp_Data *data) {
|
||||
ScheduleSetBgPosText(data->bgConfig, GF_BG_LYR_MAIN_1, BG_POS_OP_SET_Y, data->unk40);
|
||||
ScheduleSetBgPosText(data->bgConfig, GF_BG_LYR_SUB_1, BG_POS_OP_SET_Y, data->unk40 + GX_LCD_SIZE_Y);
|
||||
ScheduleSetBgPosText(data->bgConfig, GF_BG_LYR_MAIN_0, BG_POS_OP_SET_Y, data->unk40);
|
||||
ScheduleSetBgPosText(data->bgConfig, GF_BG_LYR_SUB_0, BG_POS_OP_SET_Y, data->unk40 + GX_LCD_SIZE_Y);
|
||||
|
||||
if (data->certificateId == CERTIFICATE_SHINY_LEAVES) {
|
||||
ov78_021E652C(data);
|
||||
}
|
||||
}
|
||||
|
||||
static void ov78_021E5EA4(CertificatesApp_Data *data) {
|
||||
u32 nscrFileNum;
|
||||
u32 ncgrFileNum;
|
||||
u32 nclrFileNum;
|
||||
u32 nscrFileNum2;
|
||||
u32 ncgrFileNum2;
|
||||
u32 nclrFileNum2;
|
||||
|
||||
if (data->certificateId == CERTIFICATE_JOHTO_DEX) {
|
||||
nscrFileNum = 15;
|
||||
ncgrFileNum = 3;
|
||||
nclrFileNum = 9;
|
||||
nscrFileNum2 = 12;
|
||||
ncgrFileNum2 = 0;
|
||||
nclrFileNum2 = 6;
|
||||
} else if (data->certificateId == CERTIFICATE_NATIONAL_DEX) {
|
||||
nscrFileNum = 16;
|
||||
ncgrFileNum = 4;
|
||||
nclrFileNum = 10;
|
||||
nscrFileNum2 = 13;
|
||||
ncgrFileNum2 = 1;
|
||||
nclrFileNum2 = 7;
|
||||
} else { // CERTIFICATE_SHINY_LEAVES
|
||||
nscrFileNum = 17;
|
||||
ncgrFileNum = 5;
|
||||
nclrFileNum = 11;
|
||||
nscrFileNum2 = 14;
|
||||
ncgrFileNum2 = 2;
|
||||
nclrFileNum2 = 8;
|
||||
}
|
||||
|
||||
GfGfxLoader_LoadScrnData(NARC_a_1_2_6, nscrFileNum, data->bgConfig, GF_BG_LYR_MAIN_3, 0, 0, FALSE, data->heapId);
|
||||
GfGfxLoader_LoadCharData(NARC_a_1_2_6, ncgrFileNum, data->bgConfig, GF_BG_LYR_MAIN_3, 0, 0, FALSE, data->heapId);
|
||||
GfGfxLoader_GXLoadPal(NARC_a_1_2_6, nclrFileNum, GF_BG_LYR_MAIN_0, 0, 0x20, data->heapId);
|
||||
GfGfxLoader_LoadScrnData(NARC_a_1_2_6, nscrFileNum, data->bgConfig, GF_BG_LYR_SUB_3, 0, 0, FALSE, data->heapId);
|
||||
GfGfxLoader_LoadCharData(NARC_a_1_2_6, ncgrFileNum, data->bgConfig, GF_BG_LYR_SUB_3, 0, 0, FALSE, data->heapId);
|
||||
GfGfxLoader_GXLoadPal(NARC_a_1_2_6, nclrFileNum, GF_BG_LYR_SUB_0, 0, 0x20, data->heapId);
|
||||
GfGfxLoader_LoadScrnData(NARC_a_1_2_6, nscrFileNum2, data->bgConfig, GF_BG_LYR_MAIN_1, 0, 0, FALSE, data->heapId);
|
||||
BgTilemapRectChangePalette(data->bgConfig, GF_BG_LYR_MAIN_1, 0, 0, 32, 24, 1);
|
||||
BgCommitTilemapBufferToVram(data->bgConfig, GF_BG_LYR_MAIN_1);
|
||||
|
||||
GfGfxLoader_LoadCharData(NARC_a_1_2_6, ncgrFileNum2, data->bgConfig, GF_BG_LYR_MAIN_1, 0, 0, FALSE, data->heapId);
|
||||
GfGfxLoader_GXLoadPal(NARC_a_1_2_6, nclrFileNum2, GF_BG_LYR_MAIN_0, 0x20, 0x20, data->heapId);
|
||||
GfGfxLoader_LoadScrnData(NARC_a_1_2_6, nscrFileNum2, data->bgConfig, GF_BG_LYR_SUB_1, 0, 0, FALSE, data->heapId);
|
||||
BgTilemapRectChangePalette(data->bgConfig, GF_BG_LYR_SUB_1, 0, 0, 32, 24, 1);
|
||||
BgCommitTilemapBufferToVram(data->bgConfig, GF_BG_LYR_SUB_1);
|
||||
|
||||
GfGfxLoader_LoadCharData(NARC_a_1_2_6, ncgrFileNum2, data->bgConfig, GF_BG_LYR_SUB_1, 0, 0, FALSE, data->heapId);
|
||||
GfGfxLoader_GXLoadPal(NARC_a_1_2_6, nclrFileNum2, GF_BG_LYR_SUB_0, 0x20, 0x20, data->heapId);
|
||||
BG_ClearCharDataRange(GF_BG_LYR_MAIN_0, 0x20, 0, data->heapId);
|
||||
BG_ClearCharDataRange(GF_BG_LYR_SUB_0, 0x20, 0, data->heapId);
|
||||
LoadFontPal0(GF_BG_LYR_MAIN_0, GF_PAL_SLOT_OFFSET_2, data->heapId);
|
||||
LoadFontPal0(GF_BG_LYR_SUB_0, GF_PAL_SLOT_OFFSET_2, data->heapId);
|
||||
}
|
||||
|
||||
static void ov78_021E6068(CertificatesApp_Data *data) {
|
||||
String *string = String_New(512, data->heapId);
|
||||
|
||||
u32 x1, x2, y1, y2;
|
||||
if (data->certificateId == CERTIFICATE_SHINY_LEAVES) {
|
||||
x1 = 0;
|
||||
y1 = 36;
|
||||
x2 = 0;
|
||||
y2 = 56;
|
||||
} else {
|
||||
x1 = 48;
|
||||
y1 = 32;
|
||||
x2 = 64;
|
||||
y2 = 64;
|
||||
}
|
||||
|
||||
String *tempString = String_New(512, data->heapId);
|
||||
|
||||
if (data->certificateId == CERTIFICATE_SHINY_LEAVES) {
|
||||
GF_ASSERT(data->frontPokemon != NULL);
|
||||
BoxPokemon *boxMon = Mon_GetBoxMon(data->frontPokemon);
|
||||
ReadMsgDataIntoString(data->msgData, msg_0004_00004, tempString);
|
||||
BufferBoxMonNickname(data->msgFmt, 1, boxMon);
|
||||
} else {
|
||||
ReadMsgDataIntoString(data->msgData, msg_0004_00000, tempString);
|
||||
}
|
||||
|
||||
BufferPlayersName(data->msgFmt, 0, data->profile);
|
||||
StringExpandPlaceholders(data->msgFmt, string, tempString);
|
||||
AddTextPrinterParameterized2(&data->window1, 0, string, x1, y1, TEXT_SPEED_INSTANT, MakeTextColor(1, 2, 0), NULL);
|
||||
AddTextPrinterParameterized2(&data->window2, 0, string, x1, y1, TEXT_SPEED_INSTANT, MakeTextColor(1, 2, 0), NULL);
|
||||
String_Delete(tempString);
|
||||
|
||||
u32 msgNum;
|
||||
if (data->certificateId == CERTIFICATE_JOHTO_DEX) {
|
||||
msgNum = msg_0004_00001;
|
||||
} else if (data->certificateId == CERTIFICATE_NATIONAL_DEX) {
|
||||
msgNum = msg_0004_00002;
|
||||
} else {
|
||||
msgNum = msg_0004_00005;
|
||||
}
|
||||
ReadMsgDataIntoString(data->msgData, msgNum, string);
|
||||
AddTextPrinterParameterized2(&data->window1, 0, string, x2, y2, TEXT_SPEED_INSTANT, MakeTextColor(1, 2, 0), NULL);
|
||||
AddTextPrinterParameterized2(&data->window2, 0, string, x2, y2, TEXT_SPEED_INSTANT, MakeTextColor(1, 2, 0), NULL);
|
||||
|
||||
if (data->certificateId != CERTIFICATE_SHINY_LEAVES) {
|
||||
ReadMsgDataIntoString(data->msgData, msg_0004_00003, string);
|
||||
AddTextPrinterParameterized2(&data->window1, 0, string, 138, 144, TEXT_SPEED_INSTANT, MakeTextColor(1, 2, 0), NULL);
|
||||
AddTextPrinterParameterized2(&data->window2, 0, string, 138, 144, TEXT_SPEED_INSTANT, MakeTextColor(1, 2, 0), NULL);
|
||||
}
|
||||
|
||||
String_Delete(string);
|
||||
}
|
||||
|
||||
static UnkImageStruct *ov78_021E61C4(SpriteRenderer *renderer, SpriteGfxHandler *gfxHandler, s16 x, s16 y, u8 animation, u8 spritePriority) {
|
||||
UnkTemplate_0200D748 template = ov78_021E6880;
|
||||
template.x = x;
|
||||
template.y = y;
|
||||
template.spritePriority = spritePriority;
|
||||
template.animation = animation;
|
||||
|
||||
UnkImageStruct *unk = SpriteRenderer_LoadResourcesAndCreateSprite_CustomBottomScreenOffset(renderer, gfxHandler, &template, FX32_CONST(GX_LCD_SIZE_Y));
|
||||
UnkImageStruct_SetSpriteAnimActiveFlag(unk, FALSE);
|
||||
return unk;
|
||||
}
|
||||
|
||||
static UnkImageStruct *ov78_021E6214(SpriteRenderer *renderer, SpriteGfxHandler *gfxHandler, s16 x, s16 y) {
|
||||
UnkTemplate_0200D748 template = ov78_021E68B4;
|
||||
template.x = x;
|
||||
template.y = y;
|
||||
|
||||
return SpriteRenderer_LoadResourcesAndCreateSprite_CustomBottomScreenOffset(renderer, gfxHandler, &template, FX32_CONST(GX_LCD_SIZE_Y));
|
||||
}
|
||||
|
||||
static UnkImageStruct *ov78_021E6250(SpriteRenderer *renderer, SpriteGfxHandler *gfxHandler, s16 x, s16 y) {
|
||||
UnkTemplate_0200D748 template = ov78_021E68E8;
|
||||
template.x = x;
|
||||
template.y = y;
|
||||
|
||||
return SpriteRenderer_LoadResourcesAndCreateSprite_CustomBottomScreenOffset(renderer, gfxHandler, &template, FX32_CONST(GX_LCD_SIZE_Y));
|
||||
}
|
||||
|
||||
static void CertificatesApp_SetupSpriteRenderer(CertificatesApp_Data *data) {
|
||||
data->spriteRenderer = SpriteRenderer_Create(data->heapId);
|
||||
data->spriteGfxHandler = SpriteRenderer_CreateGfxHandler(data->spriteRenderer);
|
||||
|
||||
Unk122_021E92FC unkTemplate1 = ov78_021E6838;
|
||||
Unk122_021E92D0 unkTemplate2 = ov78_021E67F0;
|
||||
unkTemplate2.unk0 = 0x20;
|
||||
sub_0200CF70(data->spriteRenderer, &unkTemplate1, &unkTemplate2, 0x20);
|
||||
sub_0200CFF4(data->spriteRenderer, data->spriteGfxHandler, 0x20);
|
||||
|
||||
SpriteResourceCountsListUnion counts = ov78_021E6804;
|
||||
SpriteRenderer_Init2DGfxResManagersFromCountsArray(data->spriteRenderer, data->spriteGfxHandler, &counts);
|
||||
|
||||
G2dRenderer_SetSubSurfaceCoords(SpriteRenderer_GetG2dRendererPtr(data->spriteRenderer), FX32_CONST(0), FX32_CONST(GX_LCD_SIZE_Y));
|
||||
|
||||
u8 tp_param_data[4];
|
||||
ReadWholeNarcMemberByIdPair(tp_param_data, NARC_fielddata_tsurepoke_tp_param, SpeciesToOverworldModelIndexOffset(GetMonData(data->frontPokemon, MON_DATA_SPECIES, NULL)));
|
||||
data->unk58 = tp_param_data[1];
|
||||
}
|
||||
|
||||
static void CertificatesApp_FreeSpriteRenderer(CertificatesApp_Data *data) {
|
||||
SpriteRenderer *renderer = data->spriteRenderer;
|
||||
SpriteGfxHandler *gfxHandler = data->spriteGfxHandler;
|
||||
|
||||
for (int i = 0; i < (int)NELEMS(data->unk4C); i++) {
|
||||
GF_ASSERT(data->unk4C[i] != NULL);
|
||||
sub_0200D9DC(data->unk4C[i]);
|
||||
}
|
||||
|
||||
SpriteRenderer_UnloadResourcesAndRemoveGfxHandler(renderer, gfxHandler);
|
||||
SpriteRenderer_Delete(renderer);
|
||||
}
|
||||
|
||||
static void ov78_021E636C(CertificatesApp_Data *data) {
|
||||
SpriteRenderer *renderer = data->spriteRenderer;
|
||||
SpriteGfxHandler *gfxHandler = data->spriteGfxHandler;
|
||||
|
||||
{
|
||||
NARC *narc = NARC_New(NARC_a_1_6_2, data->heapId);
|
||||
|
||||
SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 65, FALSE, 2, 3, 0);
|
||||
SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 66, FALSE, 3, 0);
|
||||
SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 67, FALSE, 0);
|
||||
SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 68, FALSE, 0);
|
||||
|
||||
NARC_Delete(narc);
|
||||
}
|
||||
|
||||
{
|
||||
NARC *narc = NARC_New(NARC_a_1_2_6, data->heapId);
|
||||
|
||||
SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, 3, 1);
|
||||
SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19, FALSE, 3, 1);
|
||||
SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20, FALSE, 1);
|
||||
SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21, FALSE, 1);
|
||||
|
||||
SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, 3, 2);
|
||||
SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19 + (data->unk58 * 3), FALSE, 3, 2);
|
||||
SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20 + (data->unk58 * 3), FALSE, 2);
|
||||
SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21 + (data->unk58 * 3), FALSE, 2);
|
||||
|
||||
NARC_Delete(narc);
|
||||
}
|
||||
|
||||
data->unk4C[0] = ov78_021E61C4(data->spriteRenderer, data->spriteGfxHandler, ov78_021E6920[0][0], ov78_021E6920[1][1], 7, 0);
|
||||
data->unk4C[1] = ov78_021E6250(data->spriteRenderer, data->spriteGfxHandler, ov78_021E6920[1][0], ov78_021E6920[1][1]);
|
||||
data->unk4C[2] = ov78_021E6214(data->spriteRenderer, data->spriteGfxHandler, ov78_021E6920[2][0], ov78_021E6920[2][1]);
|
||||
|
||||
UnkImageStruct_SetSpriteVisibleFlag(data->unk4C[0], FALSE);
|
||||
ov78_021E6664(data->unk4C[1]->sprite, data->profile, data->heapId);
|
||||
ov78_021E66D4(data->unk4C[2]->sprite, data->frontPokemon, data->heapId, data->unk58);
|
||||
|
||||
GfGfx_EngineATogglePlanes(GX_PLANEMASK_OBJ, GF_PLANE_TOGGLE_ON);
|
||||
GfGfx_EngineBTogglePlanes(GX_PLANEMASK_OBJ, GF_PLANE_TOGGLE_ON);
|
||||
}
|
||||
|
||||
static void ov78_021E652C(CertificatesApp_Data *data) {
|
||||
for (int i = 0; i < (int)NELEMS(data->unk4C); i++) {
|
||||
GF_ASSERT(data->unk4C[i] != NULL);
|
||||
UnkImageStruct_SetSpritePositionXY_CustomScreenYOffset(data->unk4C[i], ov78_021E6920[i][0], ov78_021E6920[i][1] - data->unk40, FX32_CONST(GX_LCD_SIZE_Y));
|
||||
}
|
||||
}
|
||||
|
||||
static void ov78_021E656C(Sprite *sprite, void *unkBuffer, u32 unkBufferSize, u32 srcOffset) {
|
||||
GF_ASSERT(Sprite_GetVramType(sprite) == NNS_G2D_VRAM_TYPE_MAX);
|
||||
|
||||
DC_FlushRange(unkBuffer, unkBufferSize);
|
||||
|
||||
NNSG2dImageProxy *proxy = sub_02024B1C(sprite);
|
||||
GX_LoadOBJ(unkBuffer, (u32)((void*)NNS_G2dGetImageLocation(proxy, NNS_G2D_VRAM_TYPE_2DMAIN) + srcOffset), unkBufferSize);
|
||||
GXS_LoadOBJ(unkBuffer, (u32)((void*)NNS_G2dGetImageLocation(proxy, NNS_G2D_VRAM_TYPE_2DSUB) + srcOffset), unkBufferSize);
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/DGOQR
|
||||
#ifdef NONMATCHING
|
||||
static void ov78_021E65BC(Sprite *sprite, u32 narcMemberNum, u32 a2, HeapID heapId) {
|
||||
thunk_Set2dSpriteVisibleFlag(sprite, FALSE);
|
||||
|
||||
NARC *narc = NARC_New(NARC_data_mmodel_mmodel, heapId);
|
||||
NNSG3dResFileHeader *header = NARC_AllocAndReadWholeMember(narc, narcMemberNum, heapId);
|
||||
NNSG3dResTex *tex = NNS_G3dGetTex(header);
|
||||
|
||||
void *address = (void*)tex + tex->texInfo.ofsTex;
|
||||
void *buffer = AllocFromHeapAtEnd(heapId, 0x200);
|
||||
sub_020145B4(address + (a2 * 0x200), 4, 0, 0, 4, 4, buffer);
|
||||
ov78_021E656C(sprite, buffer, 0x200, 0);
|
||||
FreeToHeap(buffer);
|
||||
|
||||
Sprite_GetVramType(sprite);
|
||||
address = (void*)tex + tex->plttInfo.ofsPlttData;
|
||||
DC_FlushRange(address, 0x20);
|
||||
sub_02024B34(sprite);
|
||||
GX_LoadOBJPltt(address, 0x40, 0x20);
|
||||
GXS_LoadOBJPltt(address, 0x40, 0x20);
|
||||
|
||||
FreeToHeap(header);
|
||||
NARC_Delete(narc);
|
||||
|
||||
thunk_Set2dSpriteVisibleFlag(sprite, TRUE);
|
||||
}
|
||||
#else
|
||||
static asm void ov78_021E65BC(Sprite *sprite, u32 narcMemberNum, u32 a2, HeapID heapId) {
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
sub sp, #0x18
|
||||
add r5, r1, #0
|
||||
add r4, r3, #0
|
||||
mov r1, #0
|
||||
add r6, r0, #0
|
||||
str r2, [sp, #0xc]
|
||||
bl thunk_Set2dSpriteVisibleFlag
|
||||
mov r0, #0x51
|
||||
add r1, r4, #0
|
||||
bl NARC_New
|
||||
add r1, r5, #0
|
||||
add r2, r4, #0
|
||||
str r0, [sp, #0x10]
|
||||
bl NARC_AllocAndReadWholeMember
|
||||
str r0, [sp, #0x14]
|
||||
bl NNS_G3dGetTex
|
||||
add r5, r0, #0
|
||||
ldr r0, [r5, #0x14]
|
||||
mov r1, #2
|
||||
add r7, r5, r0
|
||||
add r0, r4, #0
|
||||
lsl r1, r1, #8
|
||||
bl AllocFromHeapAtEnd
|
||||
mov r1, #4
|
||||
str r1, [sp]
|
||||
mov r2, #0
|
||||
add r4, r0, #0
|
||||
str r1, [sp, #4]
|
||||
str r4, [sp, #8]
|
||||
ldr r0, [sp, #0xc]
|
||||
add r3, r2, #0
|
||||
lsl r0, r0, #9
|
||||
add r0, r7, r0
|
||||
bl sub_020145B4
|
||||
mov r2, #2
|
||||
add r0, r6, #0
|
||||
add r1, r4, #0
|
||||
lsl r2, r2, #8
|
||||
mov r3, #0
|
||||
bl ov78_021E656C
|
||||
add r0, r4, #0
|
||||
bl FreeToHeap
|
||||
add r0, r6, #0
|
||||
bl Sprite_GetVramType
|
||||
ldr r4, [r5, #0x38]
|
||||
mov r1, #0x20
|
||||
add r0, r5, r4
|
||||
bl DC_FlushRange
|
||||
add r0, r6, #0
|
||||
bl sub_02024B34
|
||||
add r0, r5, r4
|
||||
mov r1, #0x40
|
||||
mov r2, #0x20
|
||||
bl GX_LoadOBJPltt
|
||||
add r0, r5, r4
|
||||
mov r1, #0x40
|
||||
mov r2, #0x20
|
||||
bl GXS_LoadOBJPltt
|
||||
ldr r0, [sp, #0x14]
|
||||
bl FreeToHeap
|
||||
ldr r0, [sp, #0x10]
|
||||
bl NARC_Delete
|
||||
add r0, r6, #0
|
||||
mov r1, #1
|
||||
bl thunk_Set2dSpriteVisibleFlag
|
||||
add sp, #0x18
|
||||
pop {r3, r4, r5, r6, r7, pc}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void ov78_021E6664(Sprite *sprite, PlayerProfile *profile, HeapID heapId) {
|
||||
u32 narcMemberNum = (PlayerProfile_GetTrainerGender(profile) == PLAYER_GENDER_MALE) ? MMODEL_HERO : MMODEL_HEROINE;
|
||||
ov78_021E65BC(sprite, narcMemberNum, 21, heapId);
|
||||
}
|
||||
|
||||
static u32 ov78_021E6688(int species, int form, int gender) {
|
||||
u32 ret;
|
||||
if (species <= SPECIES_NONE || species > MAX_SPECIES) {
|
||||
ret = 1;
|
||||
} else {
|
||||
ret = MMODEL_FOLLOWER_MON_BASE + SpeciesToOverworldModelIndexOffset(species);
|
||||
if (OverworldModelLookupHasFemaleForm(species)) {
|
||||
if (gender == MON_FEMALE) {
|
||||
ret++;
|
||||
}
|
||||
} else {
|
||||
if (form > OverworldModelLookupFormCount(species)) {
|
||||
form = 0;
|
||||
}
|
||||
ret += form;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void ov78_021E66D4(Sprite *sprite, Pokemon *pokemon, HeapID heapId, u32 a3) {
|
||||
u32 species = GetMonData(pokemon, MON_DATA_SPECIES, NULL);
|
||||
u32 form = GetMonData(pokemon, MON_DATA_FORM, NULL);
|
||||
u32 gender = GetMonGender(pokemon);
|
||||
BOOL shiny = MonIsShiny(pokemon);
|
||||
|
||||
u32 bufferSize, unk;
|
||||
if (a3 != 0) {
|
||||
bufferSize = 0x800;
|
||||
unk = 8;
|
||||
} else {
|
||||
bufferSize = 0x200;
|
||||
unk = 4;
|
||||
}
|
||||
|
||||
NARC *narc = NARC_New(NARC_data_mmodel_mmodel, heapId);
|
||||
|
||||
if (sub_02070438(species, form) == 0) {
|
||||
form = 0;
|
||||
}
|
||||
|
||||
u32 member = ov78_021E6688(species, (u16)form, gender);
|
||||
NNSG3dResFileHeader *header = NARC_AllocAndReadWholeMember(narc, member, heapId);
|
||||
NNSG3dResTex *tex = NNS_G3dGetTex(header);
|
||||
void *address = (void*)tex + tex->texInfo.ofsTex;
|
||||
void *buffer = AllocFromHeapAtEnd(heapId, bufferSize);
|
||||
sub_020145B4(address + (bufferSize * 2), unk, 0, 0, unk, unk, buffer);
|
||||
ov78_021E656C(sprite, buffer, bufferSize, 0);
|
||||
FreeToHeap(buffer);
|
||||
Sprite_GetVramType(sprite);
|
||||
void* pointer = (void*)tex + tex->plttInfo.ofsPlttData;
|
||||
if (shiny) {
|
||||
pointer += 0x20;
|
||||
}
|
||||
|
||||
DC_FlushRange(pointer, 0x20);
|
||||
sub_02024B34(sprite);
|
||||
GX_LoadOBJPltt(pointer, 0x60, 0x20);
|
||||
GXS_LoadOBJPltt(pointer, 0x60, 0x20);
|
||||
|
||||
FreeToHeap(header);
|
||||
NARC_Delete(narc);
|
||||
|
||||
thunk_Set2dSpriteVisibleFlag(sprite, TRUE);
|
||||
}
|
||||
|
|
@ -424,7 +424,7 @@ BOOL ScrCmd_421(ScriptContext *ctx);
|
|||
BOOL ScrCmd_422(ScriptContext *ctx);
|
||||
BOOL ScrCmd_CheckJohtoDexComplete(ScriptContext *ctx);
|
||||
BOOL ScrCmd_CheckNationalDexComplete(ScriptContext *ctx);
|
||||
BOOL ScrCmd_425(ScriptContext *ctx);
|
||||
BOOL ScrCmd_ShowCertificate(ScriptContext *ctx);
|
||||
BOOL ScrCmd_KenyaCheck(ScriptContext *ctx);
|
||||
BOOL ScrCmd_427(ScriptContext *ctx);
|
||||
BOOL ScrCmd_MonGiveMail(ScriptContext *ctx);
|
||||
|
|
@ -1279,7 +1279,7 @@ const ScrCmdFunc gScriptCmdTable[] = {
|
|||
ScrCmd_422,
|
||||
ScrCmd_CheckJohtoDexComplete,
|
||||
ScrCmd_CheckNationalDexComplete,
|
||||
ScrCmd_425,
|
||||
ScrCmd_ShowCertificate,
|
||||
ScrCmd_KenyaCheck,
|
||||
ScrCmd_427,
|
||||
ScrCmd_MonGiveMail,
|
||||
|
|
|
|||
|
|
@ -3314,10 +3314,10 @@ BOOL ScrCmd_CheckNationalDexComplete(ScriptContext *ctx) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL ScrCmd_425(ScriptContext *ctx) { //todo: pokedex screen
|
||||
void **p_work = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_RUNNING_APP_DATA); //PokedexAppData
|
||||
u16 r2 = ScriptGetVar(ctx);
|
||||
*p_work = sub_0203FA8C(ctx->fieldSystem, HEAP_ID_32, r2);
|
||||
BOOL ScrCmd_ShowCertificate(ScriptContext *ctx) {
|
||||
CertificatesApp_Args **args = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_RUNNING_APP_DATA);
|
||||
u16 certificateId = ScriptGetVar(ctx);
|
||||
*args = LaunchCertificatesApp(ctx->fieldSystem, HEAP_ID_32, certificateId);
|
||||
SetupNativeScript(ctx, ScrNative_WaitApplication_DestroyTaskData);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
33
src/unk_02018380.c
Normal file
33
src/unk_02018380.c
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#include "global.h"
|
||||
#include "unk_02018380.h"
|
||||
#include "timer_3.h"
|
||||
|
||||
static UnkStruct_021D10E8 s_021D10E8;
|
||||
|
||||
void sub_02018380(void) {
|
||||
s_021D10E8.unk0 = 0;
|
||||
}
|
||||
|
||||
void sub_0201838C(IGT *igt) {
|
||||
s_021D10E8.unk0 = 1;
|
||||
s_021D10E8.unk10 = 0;
|
||||
s_021D10E8.unk14 = 0;
|
||||
s_021D10E8.unk8 = 0;
|
||||
s_021D10E8.igt = igt;
|
||||
s_021D10E8.unk18 = sub_020254FC();
|
||||
}
|
||||
|
||||
void sub_020183B0(void) {
|
||||
if (s_021D10E8.unk0 == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
u64 val = sub_020254FC();
|
||||
u64 val2 = sub_02025504(val - s_021D10E8.unk18);
|
||||
if (s_021D10E8.unk8 >= val2) {
|
||||
return;
|
||||
}
|
||||
|
||||
AddIGTSeconds(s_021D10E8.igt, val2 - s_021D10E8.unk8);
|
||||
s_021D10E8.unk8 = val2;
|
||||
}
|
||||
|
|
@ -2635,7 +2635,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"name": "scrcmd_425",
|
||||
"name": "show_certificate",
|
||||
"args": [
|
||||
2
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user