mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-03-21 17:55:13 -05:00
Document the Party Menu Form Change animation (Overlay 118) (#938)
Some checks are pending
build / build (push) Waiting to run
Some checks are pending
build / build (push) Waiting to run
This commit is contained in:
parent
27b079ab0e
commit
28cb4b855e
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include "field/field_system_decl.h"
|
||||
#include "functypes/funcptr_0207F248.h"
|
||||
#include "overlay118/struct_ov118_021D0FDC_decl.h"
|
||||
|
||||
#include "bag.h"
|
||||
#include "battle_regulation.h"
|
||||
|
|
@ -22,6 +21,7 @@
|
|||
#include "grid_menu_cursor_position.h"
|
||||
#include "menu.h"
|
||||
#include "message.h"
|
||||
#include "particle_system.h"
|
||||
#include "party.h"
|
||||
#include "pokedex_heightweight.h"
|
||||
#include "sprite.h"
|
||||
|
|
@ -231,6 +231,16 @@ typedef struct PartyMenuMember {
|
|||
u8 isPresent;
|
||||
} PartyMenuMember;
|
||||
|
||||
typedef struct PartyMenuFormChange {
|
||||
int state;
|
||||
int elapsedFrames;
|
||||
int framesBeforeFormChange;
|
||||
int species;
|
||||
u32 narcIdx;
|
||||
int partySlot;
|
||||
ParticleSystem *ps;
|
||||
} PartyMenuFormChange;
|
||||
|
||||
#define PARTY_MENU_MEMBER_PANEL_SIZE_TILES 96
|
||||
|
||||
typedef struct PartyOrderSwitchData {
|
||||
|
|
@ -281,8 +291,8 @@ typedef struct PartyMenuApplication {
|
|||
u8 unk_B13;
|
||||
u16 monStats[6];
|
||||
HeightWeightData *heightWeight;
|
||||
OverlayMetadata *unk_B24;
|
||||
G3DPipelineBuffers *unk_B28;
|
||||
PartyMenuFormChange *formChanger;
|
||||
G3DPipelineBuffers *formChange3DPipeline;
|
||||
} PartyMenuApplication;
|
||||
|
||||
#endif // POKEPLATINUM_PARTY_MENU_DEFS_H
|
||||
|
|
|
|||
9
include/applications/party_menu/form_change.h
Normal file
9
include/applications/party_menu/form_change.h
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef POKEPLATINUM_APPLICATIONS_PARTY_MENU_FORM_CHANGE_H
|
||||
#define POKEPLATINUM_APPLICATIONS_PARTY_MENU_FORM_CHANGE_H
|
||||
|
||||
#include "applications/party_menu/defs.h"
|
||||
|
||||
void PartyMenuFormChange_Init(PartyMenuApplication *app);
|
||||
BOOL PartyMenuFormChange_ChangeForm(PartyMenuApplication *app);
|
||||
|
||||
#endif // POKEPLATINUM_APPLICATIONS_PARTY_MENU_FORM_CHANGE_H
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
extern const ApplicationManagerTemplate gPokemonPartyAppTemplate;
|
||||
|
||||
void sub_0207EA74(PartyMenuApplication *application, int param1);
|
||||
void PartyMenu_UpdateFormChangeGraphicsMode(PartyMenuApplication *application, BOOL isTeardown);
|
||||
u8 sub_0207EF04(PartyMenuApplication *application, u8 param1);
|
||||
u8 PartyMenu_LoadMember(PartyMenuApplication *application, u8 slot);
|
||||
const u16 *sub_0207F248(PartyMenuApplication *application);
|
||||
|
|
@ -29,7 +29,7 @@ u32 sub_02081934(void);
|
|||
u32 sub_02081938(void);
|
||||
u32 sub_0208193C(void);
|
||||
void PartyMenu_LoadMemberPanelTilemaps(enum HeapID heapID, u16 *leadMember, u16 *backMembers, u16 *noMember);
|
||||
void LoadOverlay118(PartyMenuApplication *application);
|
||||
void UnloadOverlay118(PartyMenuApplication *application);
|
||||
void PartyMenu_SetupFormChangeAnim(PartyMenuApplication *application);
|
||||
void PartyMenu_TeardownFormChangeAnim(PartyMenuApplication *application);
|
||||
|
||||
#endif // POKEPLATINUM_PARTY_MENU_MAIN_H
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
#ifndef POKEPLATINUM_OV118_021D0D80_H
|
||||
#define POKEPLATINUM_OV118_021D0D80_H
|
||||
|
||||
#include "applications/party_menu/defs.h"
|
||||
|
||||
void ov118_021D0D80(PartyMenuApplication *param0);
|
||||
int ov118_021D0DBC(PartyMenuApplication *param0);
|
||||
|
||||
#endif // POKEPLATINUM_OV118_021D0D80_H
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_OV118_021D0FDC_DECL_H
|
||||
#define POKEPLATINUM_STRUCT_OV118_021D0FDC_DECL_H
|
||||
|
||||
typedef struct OverlayMetadata_t OverlayMetadata;
|
||||
|
||||
#endif // POKEPLATINUM_STRUCT_OV118_021D0FDC_DECL_H
|
||||
|
|
@ -320,7 +320,7 @@ res/prebuilt/application/balloon/graphic/balloon_gra.narc,/application/balloon/g
|
|||
res/prebuilt/application/wifi_lobby/map_conv/wflby_map.narc,/application/wifi_lobby/map_conv/wflby_map.narc
|
||||
res/prebuilt/fielddata/tornworld/tw_arc.narc,/fielddata/tornworld/tw_arc.narc
|
||||
res/prebuilt/fielddata/tornworld/tw_arc_attr.narc,/fielddata/tornworld/tw_arc_attr.narc
|
||||
res/prebuilt/particledata/pl_pokelist/pokelist_particle.narc,/particledata/pl_pokelist/pokelist_particle.narc
|
||||
res/graphics/party_menu/form_changes/form_change_effects.narc,/particledata/pl_pokelist/pokelist_particle.narc
|
||||
res/prebuilt/battle/b_pl_stage/pl_bsdpm.narc,/battle/b_pl_stage/pl_bsdpm.narc
|
||||
res/trainers/frontier/pl_btdpm.narc,/battle/b_pl_tower/pl_btdpm.narc
|
||||
res/trainers/frontier/pl_btdtr.narc,/battle/b_pl_tower/pl_btdtr.narc
|
||||
|
|
|
|||
|
|
|
@ -319,7 +319,7 @@ da56afbb7a3f070d8e14f99c9ba6334f7d9b6c2e *res/field/frontier_scripts/fr_script.n
|
|||
7fecc969c3a9d6ee05e8157505458927476def4d *res/prebuilt/application/wifi_lobby/map_conv/wflby_map.narc
|
||||
def7833f7d5b18328cbe9cc5d5331ff634b082cc *res/prebuilt/fielddata/tornworld/tw_arc.narc
|
||||
bf51c9691b15f9aff257a3e8012dc36bd015619f *res/prebuilt/fielddata/tornworld/tw_arc_attr.narc
|
||||
ad8bf1d7e289c679e0d2c844ba1700fb2e61fedd *res/prebuilt/particledata/pl_pokelist/pokelist_particle.narc
|
||||
ad8bf1d7e289c679e0d2c844ba1700fb2e61fedd *res/graphics/party_menu/form_changes/form_change_effects.narc
|
||||
ecdb14e0bc6619f114549e6126c8b6934cfc3aeb *res/prebuilt/battle/b_pl_stage/pl_bsdpm.narc
|
||||
2dac84a8a4c8dca13be326dc071ecbd550eb2ee7 *res/trainers/frontier/pl_btdpm.narc
|
||||
738eeff4bee6a7cfbc8d448f23f58ad52ce76314 *res/trainers/frontier/pl_btdtr.narc
|
||||
|
|
|
|||
|
|
@ -1691,10 +1691,10 @@ Overlay overlay117
|
|||
Object main.nef.p/src_overlay117_ov117_022666C0.c.o
|
||||
}
|
||||
|
||||
Overlay overlay118
|
||||
Overlay party_menu_form_change
|
||||
{
|
||||
After main
|
||||
Object main.nef.p/src_overlay118_ov118_021D0D80.c.o
|
||||
Object main.nef.p/src_applications_party_menu_form_change.c.o
|
||||
}
|
||||
|
||||
Overlay overlay119
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ eb9d61aa9d3ad877f55af30ff212ecc7094049c5 *overlay111.sbin
|
|||
dd0e40ce15f9bc1eccf25bc29f481a1835098c7b *overlay115.sbin
|
||||
248a912b8adc0cb4df962256b8b7b557bbd613af *overlay116.sbin
|
||||
9a00f7bf15c8b90ba46dafe5ec5e924684b1d270 *overlay117.sbin
|
||||
babc139fb62af0f7e4320b62089eaed7b2dfa3bb *overlay118.sbin
|
||||
babc139fb62af0f7e4320b62089eaed7b2dfa3bb *party_menu_form_change.sbin
|
||||
76b46eb4dd4d8b21665e7a2488cccf060911cc0a *overlay119.sbin
|
||||
637cf7c59d68702453016a1bf2a1c0d101809912 *library_tv.sbin
|
||||
67a01b02f9d9c8135e57bf274c6a75bf0c2c9be2 *dw_warp.sbin
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
giratina.spa
|
||||
shaymin.spa
|
||||
BIN
res/graphics/party_menu/form_changes/giratina.spa
Normal file
BIN
res/graphics/party_menu/form_changes/giratina.spa
Normal file
Binary file not shown.
26
res/graphics/party_menu/form_changes/meson.build
Normal file
26
res/graphics/party_menu/form_changes/meson.build
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
form_change_effects_files = files(
|
||||
'giratina.spa',
|
||||
'shaymin.spa',
|
||||
)
|
||||
|
||||
form_change_effects_order = files('form_change_effects.order')
|
||||
|
||||
form_change_effects_narc = custom_target('form_change_effects_narc',
|
||||
output: [
|
||||
'form_change_effects.narc',
|
||||
'form_change_effects.naix.h',
|
||||
],
|
||||
input: copy_gen.process(
|
||||
form_change_effects_files,
|
||||
),
|
||||
command: [
|
||||
narc_exe, 'create',
|
||||
'--naix',
|
||||
'--order', form_change_effects_order,
|
||||
'--output', '@OUTPUT0@',
|
||||
'@PRIVATE_DIR@',
|
||||
]
|
||||
)
|
||||
|
||||
nitrofs_files += form_change_effects_narc
|
||||
naix_headers += form_change_effects_narc[1]
|
||||
BIN
res/graphics/party_menu/form_changes/shaymin.spa
Normal file
BIN
res/graphics/party_menu/form_changes/shaymin.spa
Normal file
Binary file not shown.
|
|
@ -1,3 +1,5 @@
|
|||
subdir('form_changes')
|
||||
|
||||
party_menu_narc = custom_target('party_menu_graphics.narc',
|
||||
output: [
|
||||
'party_menu_graphics.narc',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
subdir('pl_etc')
|
||||
subdir('pl_frontier')
|
||||
subdir('pl_pokelist')
|
||||
|
||||
prebuilt_files = [
|
||||
'particledata.narc'
|
||||
|
|
@ -8,4 +7,4 @@ prebuilt_files = [
|
|||
|
||||
foreach f : prebuilt_files
|
||||
nitrofs_files += fs.copyfile(f)
|
||||
endforeach
|
||||
endforeach
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
prebuilt_files = [
|
||||
'pokelist_particle.narc'
|
||||
]
|
||||
|
||||
foreach f : prebuilt_files
|
||||
nitrofs_files += fs.copyfile(f)
|
||||
endforeach
|
||||
Binary file not shown.
|
|
@ -990,7 +990,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000453_00202",
|
||||
"id": "PartyMenu_Text_ChangedForm",
|
||||
"en_US": "{STRVAR_1 0, 0, 0} changed Forme!"
|
||||
},
|
||||
{
|
||||
|
|
|
|||
252
src/applications/party_menu/form_change.c
Normal file
252
src/applications/party_menu/form_change.c
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
#include "applications/party_menu/form_change.h"
|
||||
|
||||
#include <nitro.h>
|
||||
|
||||
#include "generated/species.h"
|
||||
|
||||
#include "applications/party_menu/defs.h"
|
||||
#include "applications/party_menu/main.h"
|
||||
#include "applications/party_menu/sprites.h"
|
||||
#include "applications/party_menu/windows.h"
|
||||
|
||||
#include "camera.h"
|
||||
#include "enums.h"
|
||||
#include "field_system.h"
|
||||
#include "gx_layers.h"
|
||||
#include "heap.h"
|
||||
#include "message.h"
|
||||
#include "particle_system.h"
|
||||
#include "party.h"
|
||||
#include "pokedex.h"
|
||||
#include "pokemon.h"
|
||||
#include "sound_playback.h"
|
||||
#include "string_gf.h"
|
||||
#include "string_template.h"
|
||||
#include "text.h"
|
||||
#include "unk_0202419C.h"
|
||||
|
||||
#include "res/graphics/party_menu/form_changes/form_change_effects.naix.h"
|
||||
#include "res/text/bank/party_menu.h"
|
||||
|
||||
static void PartyMenuFormChange_Free(PartyMenuApplication *app);
|
||||
static void SetupAnimation(PartyMenuApplication *app);
|
||||
static void TeardownAnimation(PartyMenuApplication *app);
|
||||
static void CreateParticleSystem(PartyMenuFormChange *formChanger);
|
||||
static void LoadParticleResources(PartyMenuFormChange *formChanger);
|
||||
static int DrawParticleSystem(void);
|
||||
static void FreeParticleSystem(PartyMenuFormChange *formChanger);
|
||||
static u32 AllocTexVram(u32 size, BOOL is4x4comp);
|
||||
static u32 AllocPaletteVram(u32 size, BOOL is4pltt);
|
||||
static void EmitterCallback(SPLEmitter *emitter);
|
||||
|
||||
static const fx32 sPartySlotParticlePositions[][2] = {
|
||||
{ FX32_CONST(-4.0283203125), FX32_CONST(2.9296875) },
|
||||
{ FX32_CONST(1.220703125), FX32_CONST(2.8076171875) },
|
||||
{ FX32_CONST(-4.0283203125), FX32_CONST(1.220703125) },
|
||||
{ FX32_CONST(1.220703125), FX32_CONST(0.8544921875) },
|
||||
{ FX32_CONST(-4.0283203125), FX32_CONST(-0.732421875) },
|
||||
{ FX32_CONST(1.220703125), FX32_CONST(-1.0986328125) }
|
||||
};
|
||||
|
||||
void PartyMenuFormChange_Init(PartyMenuApplication *app)
|
||||
{
|
||||
GF_ASSERT(app->formChanger == NULL);
|
||||
|
||||
app->formChanger = Heap_Alloc(HEAP_ID_PARTY_MENU, sizeof(PartyMenuFormChange));
|
||||
MI_CpuClear8(app->formChanger, sizeof(PartyMenuFormChange));
|
||||
app->formChanger->partySlot = app->currPartySlot;
|
||||
}
|
||||
|
||||
BOOL PartyMenuFormChange_ChangeForm(PartyMenuApplication *app)
|
||||
{
|
||||
PartyMenuFormChange *formChanger = app->formChanger;
|
||||
Pokemon *mon = Party_GetPokemonBySlotIndex(app->partyMenu->party, app->currPartySlot);
|
||||
|
||||
switch (formChanger->state) {
|
||||
case 0:
|
||||
formChanger->species = Pokemon_GetValue(mon, MON_DATA_SPECIES, NULL);
|
||||
|
||||
switch (formChanger->species) {
|
||||
case SPECIES_GIRATINA:
|
||||
Pokemon_SetGiratinaFormByHeldItem(mon);
|
||||
formChanger->framesBeforeFormChange = 65;
|
||||
formChanger->narcIdx = giratina_spa;
|
||||
break;
|
||||
case SPECIES_SHAYMIN:
|
||||
Pokemon_SetShayminForm(mon, SHAYMIN_FORM_SKY);
|
||||
formChanger->framesBeforeFormChange = 35;
|
||||
formChanger->narcIdx = shaymin_spa;
|
||||
break;
|
||||
case SPECIES_ROTOM:
|
||||
default:
|
||||
GF_ASSERT(0);
|
||||
break;
|
||||
}
|
||||
|
||||
Pokedex_Capture(SaveData_GetPokedex(FieldSystem_GetSaveData(app->partyMenu->fieldSystem)), mon);
|
||||
|
||||
formChanger->state++;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
formChanger->state++;
|
||||
break;
|
||||
case 3:
|
||||
SetupAnimation(app);
|
||||
formChanger->state++;
|
||||
break;
|
||||
case 4:
|
||||
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, 1);
|
||||
LoadParticleResources(formChanger);
|
||||
formChanger->state++;
|
||||
break;
|
||||
case 5:
|
||||
formChanger->elapsedFrames++;
|
||||
|
||||
if (formChanger->elapsedFrames == formChanger->framesBeforeFormChange) {
|
||||
PartyMenu_LoadMemberSpeciesIcon(app, app->currPartySlot);
|
||||
}
|
||||
|
||||
DrawParticleSystem();
|
||||
|
||||
if (formChanger->elapsedFrames > formChanger->framesBeforeFormChange && ParticleSystem_GetActiveEmitterCount(formChanger->ps) == 0) {
|
||||
formChanger->state++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
TeardownAnimation(app);
|
||||
formChanger->state++;
|
||||
break;
|
||||
case 7:
|
||||
Pokemon_PlayCry(mon);
|
||||
formChanger->state++;
|
||||
break;
|
||||
case 8:
|
||||
if (!Sound_IsPokemonCryPlaying()) {
|
||||
formChanger->state++;
|
||||
}
|
||||
break;
|
||||
case 9: {
|
||||
String *msg = MessageLoader_GetNewString(app->messageLoader, PartyMenu_Text_ChangedForm);
|
||||
|
||||
StringTemplate_SetNickname(app->template, 0, Pokemon_GetBoxPokemon(mon));
|
||||
StringTemplate_Format(app->template, app->tmpString, msg);
|
||||
String_Free(msg);
|
||||
PartyMenu_PrintLongMessage(app, PRINT_MESSAGE_PRELOADED, TRUE);
|
||||
}
|
||||
formChanger->state++;
|
||||
break;
|
||||
case 10:
|
||||
if (!Text_IsPrinterActive(app->textPrinterID)) {
|
||||
PartyMenuFormChange_Free(app);
|
||||
app->partyMenu->menuSelectionResult = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void PartyMenuFormChange_Free(PartyMenuApplication *app)
|
||||
{
|
||||
Heap_Free(app->formChanger);
|
||||
app->formChanger = NULL;
|
||||
}
|
||||
|
||||
static void SetupAnimation(PartyMenuApplication *app)
|
||||
{
|
||||
PartyMenu_UpdateFormChangeGraphicsMode(app, FALSE);
|
||||
CreateParticleSystem(app->formChanger);
|
||||
|
||||
G2_SetBlendAlpha(GX_BLEND_PLANEMASK_NONE, GX_BLEND_ALL, 31, 0);
|
||||
}
|
||||
|
||||
static void TeardownAnimation(PartyMenuApplication *app)
|
||||
{
|
||||
FreeParticleSystem(app->formChanger);
|
||||
PartyMenu_UpdateFormChangeGraphicsMode(app, TRUE);
|
||||
|
||||
G2_BlendNone();
|
||||
}
|
||||
|
||||
static void CreateParticleSystem(PartyMenuFormChange *formChanger)
|
||||
{
|
||||
ParticleSystem_ZeroAll();
|
||||
|
||||
void *heap = Heap_Alloc(HEAP_ID_PARTY_MENU, 0x4800);
|
||||
formChanger->ps = ParticleSystem_New(AllocTexVram, AllocPaletteVram, heap, 0x4800, TRUE, HEAP_ID_PARTY_MENU);
|
||||
Camera *camera = ParticleSystem_GetCamera(formChanger->ps);
|
||||
|
||||
Camera_SetClipping(FX32_ONE, FX32_CONST(900), camera);
|
||||
}
|
||||
|
||||
static void LoadParticleResources(PartyMenuFormChange *formChanger)
|
||||
{
|
||||
void *resource = ParticleSystem_LoadResourceFromNARC(NARC_INDEX_PARTICLEDATA__PL_POKELIST__POKELIST_PARTICLE, formChanger->narcIdx, HEAP_ID_PARTY_MENU);
|
||||
ParticleSystem_SetResource(formChanger->ps, resource, VRAM_AUTO_RELEASE_TEXTURE_LNK | VRAM_AUTO_RELEASE_PALETTE_LNK, TRUE);
|
||||
|
||||
switch (formChanger->species) {
|
||||
case SPECIES_GIRATINA:
|
||||
ParticleSystem_CreateEmitterWithCallback(formChanger->ps, 0, EmitterCallback, formChanger);
|
||||
ParticleSystem_CreateEmitterWithCallback(formChanger->ps, 1, EmitterCallback, formChanger);
|
||||
ParticleSystem_CreateEmitterWithCallback(formChanger->ps, 2, EmitterCallback, formChanger);
|
||||
Sound_PlayEffect(SEQ_SE_PL_W467109);
|
||||
break;
|
||||
case SPECIES_SHAYMIN:
|
||||
ParticleSystem_CreateEmitterWithCallback(formChanger->ps, 0, EmitterCallback, formChanger);
|
||||
ParticleSystem_CreateEmitterWithCallback(formChanger->ps, 1, EmitterCallback, formChanger);
|
||||
Sound_PlayEffect(SEQ_SE_PL_W363);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void EmitterCallback(SPLEmitter *emitter)
|
||||
{
|
||||
PartyMenuFormChange *formChanger = ParticleSystem_GetEmitterCallbackParam();
|
||||
|
||||
SPLEmitter_SetPosX(emitter, sPartySlotParticlePositions[formChanger->partySlot][0]);
|
||||
SPLEmitter_SetPosY(emitter, sPartySlotParticlePositions[formChanger->partySlot][1]);
|
||||
}
|
||||
|
||||
static int DrawParticleSystem(void)
|
||||
{
|
||||
G3_ResetG3X();
|
||||
|
||||
int drawn = ParticleSystem_DrawAll();
|
||||
if (drawn > 0) {
|
||||
G3_ResetG3X();
|
||||
}
|
||||
|
||||
ParticleSystem_UpdateAll();
|
||||
G3_RequestSwapBuffers(GX_SORTMODE_MANUAL, GX_BUFFERMODE_Z);
|
||||
|
||||
return drawn;
|
||||
}
|
||||
|
||||
static void FreeParticleSystem(PartyMenuFormChange *formChanger)
|
||||
{
|
||||
void *heap = ParticleSystem_GetHeapStart(formChanger->ps);
|
||||
ParticleSystem_Free(formChanger->ps);
|
||||
Heap_Free(heap);
|
||||
}
|
||||
|
||||
static u32 AllocTexVram(u32 size, BOOL is4x4comp)
|
||||
{
|
||||
NNSGfdTexKey texKey = NNS_GfdAllocTexVram(size, is4x4comp, 0);
|
||||
GF_ASSERT(texKey != NNS_GFD_ALLOC_ERROR_TEXKEY);
|
||||
ParticleSystem_RegisterTextureKey(texKey);
|
||||
|
||||
return NNS_GfdGetTexKeyAddr(texKey);
|
||||
}
|
||||
|
||||
static u32 AllocPaletteVram(u32 size, BOOL is4pltt)
|
||||
{
|
||||
NNSGfdPlttKey plttKey = NNS_GfdAllocPlttVram(size, is4pltt, NNS_GFD_ALLOC_FROM_LOW);
|
||||
GF_ASSERT(plttKey != NNS_GFD_ALLOC_ERROR_PLTTKEY);
|
||||
|
||||
ParticleSystem_RegisterPaletteKey(plttKey);
|
||||
|
||||
return NNS_GfdGetPlttKeyAddr(plttKey);
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
#include "generated/pokemon_contest_types.h"
|
||||
|
||||
#include "applications/party_menu/defs.h"
|
||||
#include "applications/party_menu/form_change.h"
|
||||
#include "applications/party_menu/main.h"
|
||||
#include "applications/party_menu/sprites.h"
|
||||
#include "applications/party_menu/unk_02083370.h"
|
||||
|
|
@ -21,7 +22,6 @@
|
|||
#include "applications/pokemon_summary_screen/main.h"
|
||||
#include "field/field_system.h"
|
||||
#include "functypes/funcptr_0207E634.h"
|
||||
#include "overlay118/ov118_021D0D80.h"
|
||||
|
||||
#include "bag.h"
|
||||
#include "battle_regulation.h"
|
||||
|
|
@ -67,7 +67,7 @@
|
|||
#include "res/graphics/party_menu/party_menu_graphics.naix.h"
|
||||
#include "res/text/bank/party_menu.h"
|
||||
|
||||
FS_EXTERN_OVERLAY(overlay118);
|
||||
FS_EXTERN_OVERLAY(party_menu_form_change);
|
||||
|
||||
typedef struct MemberPanelTemplate {
|
||||
u16 panelX;
|
||||
|
|
@ -141,9 +141,9 @@ static u8 CheckDuplicateValues(PartyMenuApplication *application);
|
|||
static u8 CheckUniqueValues(PartyMenuApplication *application);
|
||||
static u8 CheckEqualityInArray(PartyMenuApplication *application);
|
||||
static BOOL ShouldShowSubscreen(PartyMenuApplication *application);
|
||||
static G3DPipelineBuffers *sub_0207EAD4(enum HeapID heapID);
|
||||
static void sub_0207EAF4(void);
|
||||
static void sub_0207EB64(G3DPipelineBuffers *param0);
|
||||
static G3DPipelineBuffers *InitG3DPipeline(enum HeapID heapID);
|
||||
static void G3DPipelineCallback(void);
|
||||
static void FreeG3DPipeline(G3DPipelineBuffers *pipelineBuffers);
|
||||
static int ProcessMessageResult(PartyMenuApplication *application);
|
||||
static int HandleOverlayCompletion(PartyMenuApplication *application);
|
||||
static void DrawMemberPanels_Standard(PartyMenuApplication *application, const MemberPanelTemplate *templates);
|
||||
|
|
@ -451,8 +451,8 @@ static BOOL PartyMenu_Main(ApplicationManager *appMan, int *state)
|
|||
*state = ProcessWindowInput(v0);
|
||||
break;
|
||||
case 31:
|
||||
if (ov118_021D0DBC(v0) == 1) {
|
||||
UnloadOverlay118(v0);
|
||||
if (PartyMenuFormChange_ChangeForm(v0) == 1) {
|
||||
PartyMenu_TeardownFormChangeAnim(v0);
|
||||
*state = 25;
|
||||
} else {
|
||||
*state = 31;
|
||||
|
|
@ -867,17 +867,17 @@ static void sub_0207EA24(BgConfig *param0)
|
|||
Heap_FreeExplicit(HEAP_ID_PARTY_MENU, param0);
|
||||
}
|
||||
|
||||
void sub_0207EA74(PartyMenuApplication *application, int param1)
|
||||
void PartyMenu_UpdateFormChangeGraphicsMode(PartyMenuApplication *application, BOOL isTeardown)
|
||||
{
|
||||
if (param1 == 0) {
|
||||
if (!isTeardown) {
|
||||
Bg_ToggleLayer(BG_LAYER_MAIN_0, 0);
|
||||
Bg_FreeTilemapBuffer(application->bgConfig, BG_LAYER_MAIN_0);
|
||||
|
||||
GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_3D);
|
||||
application->unk_B28 = sub_0207EAD4(HEAP_ID_PARTY_MENU);
|
||||
application->formChange3DPipeline = InitG3DPipeline(HEAP_ID_PARTY_MENU);
|
||||
} else {
|
||||
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, 0);
|
||||
sub_0207EB64(application->unk_B28);
|
||||
FreeG3DPipeline(application->formChange3DPipeline);
|
||||
|
||||
GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D);
|
||||
|
||||
|
|
@ -886,26 +886,26 @@ void sub_0207EA74(PartyMenuApplication *application, int param1)
|
|||
}
|
||||
}
|
||||
|
||||
static G3DPipelineBuffers *sub_0207EAD4(enum HeapID heapID)
|
||||
static G3DPipelineBuffers *InitG3DPipeline(enum HeapID heapID)
|
||||
{
|
||||
return G3DPipeline_Init(heapID, TEXTURE_VRAM_SIZE_128K, PALETTE_VRAM_SIZE_32K, sub_0207EAF4);
|
||||
return G3DPipeline_Init(heapID, TEXTURE_VRAM_SIZE_128K, PALETTE_VRAM_SIZE_32K, G3DPipelineCallback);
|
||||
}
|
||||
|
||||
static void sub_0207EAF4(void)
|
||||
static void G3DPipelineCallback(void)
|
||||
{
|
||||
G3X_SetShading(GX_SHADING_TOON);
|
||||
G3X_AntiAlias(1);
|
||||
G3X_AlphaTest(0, 0);
|
||||
G3X_AlphaBlend(1);
|
||||
G3X_EdgeMarking(0);
|
||||
G3X_SetFog(0, GX_FOGBLEND_COLOR_ALPHA, GX_FOGSLOPE_0x8000, 0);
|
||||
G3X_AntiAlias(TRUE);
|
||||
G3X_AlphaTest(FALSE, 0);
|
||||
G3X_AlphaBlend(TRUE);
|
||||
G3X_EdgeMarking(FALSE);
|
||||
G3X_SetFog(FALSE, GX_FOGBLEND_COLOR_ALPHA, GX_FOGSLOPE_0x8000, 0);
|
||||
G3X_SetClearColor(GX_RGB(0, 0, 0), 0, 0x7fff, 63, 0);
|
||||
G3_ViewPort(0, 0, 255, 191);
|
||||
}
|
||||
|
||||
static void sub_0207EB64(G3DPipelineBuffers *param0)
|
||||
static void FreeG3DPipeline(G3DPipelineBuffers *pipelineBuffers)
|
||||
{
|
||||
G3DPipelineBuffers_Free(param0);
|
||||
G3DPipelineBuffers_Free(pipelineBuffers);
|
||||
}
|
||||
|
||||
static void LoadGraphics(PartyMenuApplication *application, NARC *narc)
|
||||
|
|
@ -2632,7 +2632,7 @@ static int ApplyItemEffectOnPokemon(PartyMenuApplication *app)
|
|||
&& Pokemon_CanShayminSkyForm(Party_GetPokemonBySlotIndex(app->partyMenu->party, app->currPartySlot)) == TRUE) {
|
||||
app->partyMenu->evoTargetSpecies = 1;
|
||||
Heap_Free(itemData);
|
||||
LoadOverlay118(app);
|
||||
PartyMenu_SetupFormChangeAnim(app);
|
||||
return 31;
|
||||
}
|
||||
|
||||
|
|
@ -2804,7 +2804,7 @@ static int ProcessMessageResult(PartyMenuApplication *application)
|
|||
if (Text_IsPrinterActive(application->textPrinterID) == 0) {
|
||||
if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
|
||||
Window_EraseMessageBox(&application->windows[34], 1);
|
||||
LoadOverlay118(application);
|
||||
PartyMenu_SetupFormChangeAnim(application);
|
||||
return 13;
|
||||
}
|
||||
}
|
||||
|
|
@ -2814,8 +2814,8 @@ static int ProcessMessageResult(PartyMenuApplication *application)
|
|||
|
||||
static int HandleOverlayCompletion(PartyMenuApplication *application)
|
||||
{
|
||||
if (ov118_021D0DBC(application) == 1) {
|
||||
UnloadOverlay118(application);
|
||||
if (PartyMenuFormChange_ChangeForm(application) == 1) {
|
||||
PartyMenu_TeardownFormChangeAnim(application);
|
||||
|
||||
return 11;
|
||||
}
|
||||
|
|
@ -3005,13 +3005,13 @@ void PartyMenu_LoadMemberPanelTilemaps(enum HeapID heapID, u16 *lead, u16 *back,
|
|||
Heap_Free(nscr);
|
||||
}
|
||||
|
||||
void LoadOverlay118(PartyMenuApplication *application)
|
||||
void PartyMenu_SetupFormChangeAnim(PartyMenuApplication *application)
|
||||
{
|
||||
Overlay_LoadByID(FS_OVERLAY_ID(overlay118), 2);
|
||||
ov118_021D0D80(application);
|
||||
Overlay_LoadByID(FS_OVERLAY_ID(party_menu_form_change), OVERLAY_LOAD_ASYNC);
|
||||
PartyMenuFormChange_Init(application);
|
||||
}
|
||||
|
||||
void UnloadOverlay118(PartyMenuApplication *application)
|
||||
void PartyMenu_TeardownFormChangeAnim(PartyMenuApplication *application)
|
||||
{
|
||||
Overlay_UnloadByID(FS_OVERLAY_ID(overlay118));
|
||||
Overlay_UnloadByID(FS_OVERLAY_ID(party_menu_form_change));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@
|
|||
#include "generated/items.h"
|
||||
|
||||
#include "applications/party_menu/defs.h"
|
||||
#include "applications/party_menu/form_change.h"
|
||||
#include "applications/party_menu/main.h"
|
||||
#include "applications/party_menu/sprites.h"
|
||||
#include "applications/party_menu/windows.h"
|
||||
#include "field/field_system.h"
|
||||
#include "overlay118/ov118_021D0D80.h"
|
||||
|
||||
#include "bag.h"
|
||||
#include "bg_window.h"
|
||||
|
|
@ -208,7 +208,7 @@ static void sub_020834B0(PartyMenuApplication *param0, int *param1)
|
|||
MessageLoader_GetString(param0->messageLoader, pl_msg_00000453_00083, param0->tmpString);
|
||||
}
|
||||
|
||||
Window_DrawMessageBoxWithScrollCursor(¶m0->windows[34], 1, (1 + 9), 15);
|
||||
Window_DrawMessageBoxWithScrollCursor(¶m0->windows[34], 1, 1 + 9, 15);
|
||||
Window_FillTilemap(¶m0->windows[34], 15);
|
||||
PartyMenu_AddLongMessagePrinter(param0);
|
||||
|
||||
|
|
@ -234,7 +234,7 @@ int sub_020836A8(PartyMenuApplication *param0)
|
|||
if (Text_IsPrinterActive(param0->textPrinterID) == 0) {
|
||||
if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
|
||||
Window_EraseMessageBox(¶m0->windows[34], 1);
|
||||
LoadOverlay118(param0);
|
||||
PartyMenu_SetupFormChangeAnim(param0);
|
||||
return 19;
|
||||
}
|
||||
}
|
||||
|
|
@ -244,8 +244,8 @@ int sub_020836A8(PartyMenuApplication *param0)
|
|||
|
||||
int sub_020836E4(PartyMenuApplication *param0)
|
||||
{
|
||||
if (ov118_021D0DBC(param0) == 1) {
|
||||
UnloadOverlay118(param0);
|
||||
if (PartyMenuFormChange_ChangeForm(param0) == 1) {
|
||||
PartyMenu_TeardownFormChangeAnim(param0);
|
||||
return 17;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1008,7 +1008,7 @@ pokeplatinum_c = files(
|
|||
'overlay117/ov117_02266498.c',
|
||||
'overlay117/ov117_022665FC.c',
|
||||
'overlay117/ov117_022666C0.c',
|
||||
'overlay118/ov118_021D0D80.c',
|
||||
'applications/party_menu/form_change.c',
|
||||
'overlay119/ov119_021D0D80.c',
|
||||
'overlay119/ov119_021D191C.c',
|
||||
'library_tv/library_tv.c',
|
||||
|
|
|
|||
|
|
@ -1,273 +0,0 @@
|
|||
#include "overlay118/ov118_021D0D80.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "generated/species.h"
|
||||
|
||||
#include "applications/party_menu/defs.h"
|
||||
#include "applications/party_menu/main.h"
|
||||
#include "applications/party_menu/sprites.h"
|
||||
#include "applications/party_menu/windows.h"
|
||||
|
||||
#include "camera.h"
|
||||
#include "enums.h"
|
||||
#include "field_system.h"
|
||||
#include "gx_layers.h"
|
||||
#include "heap.h"
|
||||
#include "message.h"
|
||||
#include "particle_system.h"
|
||||
#include "party.h"
|
||||
#include "pokedex.h"
|
||||
#include "pokemon.h"
|
||||
#include "sound_playback.h"
|
||||
#include "spl.h"
|
||||
#include "string_gf.h"
|
||||
#include "string_template.h"
|
||||
#include "text.h"
|
||||
#include "unk_0202419C.h"
|
||||
|
||||
typedef struct OverlayMetadata_t {
|
||||
int unk_00;
|
||||
int unk_04;
|
||||
int unk_08;
|
||||
int unk_0C;
|
||||
u32 unk_10;
|
||||
int unk_14;
|
||||
ParticleSystem *unk_18;
|
||||
} OverlayMetadata;
|
||||
|
||||
static void ov118_021D0F70(PartyMenuApplication *param0);
|
||||
static void ov118_021D0F88(PartyMenuApplication *param0);
|
||||
static void ov118_021D0FB8(PartyMenuApplication *param0);
|
||||
static void ov118_021D0FDC(OverlayMetadata *param0);
|
||||
static void ov118_021D1028(OverlayMetadata *param0);
|
||||
static int ov118_021D10E8(void);
|
||||
static void ov118_021D110C(OverlayMetadata *param0);
|
||||
static u32 ov118_021D1128(u32 param0, BOOL param1);
|
||||
static u32 ov118_021D114C(u32 param0, BOOL param1);
|
||||
static void ov118_021D10B0(SPLEmitter *param0);
|
||||
|
||||
static const fx32 Unk_ov118_021D1170[][2] = {
|
||||
{ 0xFFFFFFFFFFFFBF8C, 0x2EE0 },
|
||||
{ 0x1388, 0x2CEC },
|
||||
{ 0xFFFFFFFFFFFFBF8C, 0x1388 },
|
||||
{ 0x1388, 0xDAC },
|
||||
{ 0xFFFFFFFFFFFFBF8C, 0xFFFFFFFFFFFFF448 },
|
||||
{ 0x1388, 0xFFFFFFFFFFFFEE6C }
|
||||
};
|
||||
|
||||
void ov118_021D0D80(PartyMenuApplication *param0)
|
||||
{
|
||||
GF_ASSERT(param0->unk_B24 == NULL);
|
||||
|
||||
param0->unk_B24 = Heap_Alloc(HEAP_ID_PARTY_MENU, sizeof(OverlayMetadata));
|
||||
MI_CpuClear8(param0->unk_B24, sizeof(OverlayMetadata));
|
||||
param0->unk_B24->unk_14 = param0->currPartySlot;
|
||||
}
|
||||
|
||||
int ov118_021D0DBC(PartyMenuApplication *param0)
|
||||
{
|
||||
OverlayMetadata *v0 = param0->unk_B24;
|
||||
Pokemon *v1 = Party_GetPokemonBySlotIndex(param0->partyMenu->party, param0->currPartySlot);
|
||||
|
||||
switch (v0->unk_00) {
|
||||
case 0: {
|
||||
v0->unk_0C = Pokemon_GetValue(v1, MON_DATA_SPECIES, NULL);
|
||||
|
||||
switch (v0->unk_0C) {
|
||||
case SPECIES_GIRATINA:
|
||||
Pokemon_SetGiratinaFormByHeldItem(v1);
|
||||
v0->unk_08 = 65;
|
||||
v0->unk_10 = 0;
|
||||
break;
|
||||
case SPECIES_SHAYMIN:
|
||||
Pokemon_SetShayminForm(v1, SHAYMIN_FORM_SKY);
|
||||
v0->unk_08 = 35;
|
||||
v0->unk_10 = 1;
|
||||
break;
|
||||
case SPECIES_ROTOM:
|
||||
default:
|
||||
GF_ASSERT(0);
|
||||
break;
|
||||
}
|
||||
|
||||
Pokedex_Capture(SaveData_GetPokedex(FieldSystem_GetSaveData(param0->partyMenu->fieldSystem)), v1);
|
||||
}
|
||||
v0->unk_00++;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
v0->unk_00++;
|
||||
break;
|
||||
case 3:
|
||||
ov118_021D0F88(param0);
|
||||
v0->unk_00++;
|
||||
break;
|
||||
case 4:
|
||||
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, 1);
|
||||
ov118_021D1028(v0);
|
||||
v0->unk_00++;
|
||||
break;
|
||||
case 5:
|
||||
v0->unk_04++;
|
||||
|
||||
if (v0->unk_04 == v0->unk_08) {
|
||||
PartyMenu_LoadMemberSpeciesIcon(param0, param0->currPartySlot);
|
||||
}
|
||||
|
||||
ov118_021D10E8();
|
||||
|
||||
if ((v0->unk_04 > v0->unk_08) && (ParticleSystem_GetActiveEmitterCount(v0->unk_18) == 0)) {
|
||||
v0->unk_00++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
ov118_021D0FB8(param0);
|
||||
v0->unk_00++;
|
||||
break;
|
||||
case 7:
|
||||
Pokemon_PlayCry(v1);
|
||||
v0->unk_00++;
|
||||
break;
|
||||
case 8:
|
||||
if (Sound_IsPokemonCryPlaying() == 0) {
|
||||
v0->unk_00++;
|
||||
}
|
||||
break;
|
||||
case 9: {
|
||||
String *v2;
|
||||
|
||||
v2 = MessageLoader_GetNewString(param0->messageLoader, 202);
|
||||
|
||||
StringTemplate_SetNickname(param0->template, 0, Pokemon_GetBoxPokemon(v1));
|
||||
StringTemplate_Format(param0->template, param0->tmpString, v2);
|
||||
String_Free(v2);
|
||||
PartyMenu_PrintLongMessage(param0, PRINT_MESSAGE_PRELOADED, TRUE);
|
||||
}
|
||||
v0->unk_00++;
|
||||
break;
|
||||
case 10:
|
||||
if (Text_IsPrinterActive(param0->textPrinterID) == 0) {
|
||||
ov118_021D0F70(param0);
|
||||
param0->partyMenu->menuSelectionResult = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ov118_021D0F70(PartyMenuApplication *param0)
|
||||
{
|
||||
Heap_Free(param0->unk_B24);
|
||||
param0->unk_B24 = NULL;
|
||||
}
|
||||
|
||||
static void ov118_021D0F88(PartyMenuApplication *param0)
|
||||
{
|
||||
sub_0207EA74(param0, 0);
|
||||
ov118_021D0FDC(param0->unk_B24);
|
||||
|
||||
G2_SetBlendAlpha(GX_BLEND_PLANEMASK_NONE, GX_BLEND_ALL, 31, 0);
|
||||
}
|
||||
|
||||
static void ov118_021D0FB8(PartyMenuApplication *param0)
|
||||
{
|
||||
ov118_021D110C(param0->unk_B24);
|
||||
sub_0207EA74(param0, 1);
|
||||
|
||||
G2_BlendNone();
|
||||
}
|
||||
|
||||
static void ov118_021D0FDC(OverlayMetadata *param0)
|
||||
{
|
||||
void *v0;
|
||||
Camera *camera;
|
||||
|
||||
ParticleSystem_ZeroAll();
|
||||
|
||||
v0 = Heap_Alloc(HEAP_ID_PARTY_MENU, 0x4800);
|
||||
param0->unk_18 = ParticleSystem_New(ov118_021D1128, ov118_021D114C, v0, 0x4800, 1, HEAP_ID_PARTY_MENU);
|
||||
camera = ParticleSystem_GetCamera(param0->unk_18);
|
||||
|
||||
Camera_SetClipping(FX32_ONE, FX32_ONE * 900, camera);
|
||||
}
|
||||
|
||||
static void ov118_021D1028(OverlayMetadata *param0)
|
||||
{
|
||||
void *v0 = ParticleSystem_LoadResourceFromNARC(185, param0->unk_10, 12);
|
||||
ParticleSystem_SetResource(param0->unk_18, v0, (1 << 1) | (1 << 3), 1);
|
||||
|
||||
switch (param0->unk_0C) {
|
||||
case SPECIES_GIRATINA:
|
||||
ParticleSystem_CreateEmitterWithCallback(param0->unk_18, 0, ov118_021D10B0, param0);
|
||||
ParticleSystem_CreateEmitterWithCallback(param0->unk_18, 1, ov118_021D10B0, param0);
|
||||
ParticleSystem_CreateEmitterWithCallback(param0->unk_18, 2, ov118_021D10B0, param0);
|
||||
Sound_PlayEffect(SEQ_SE_PL_W467109);
|
||||
break;
|
||||
case SPECIES_SHAYMIN:
|
||||
ParticleSystem_CreateEmitterWithCallback(param0->unk_18, 0, ov118_021D10B0, param0);
|
||||
ParticleSystem_CreateEmitterWithCallback(param0->unk_18, 1, ov118_021D10B0, param0);
|
||||
Sound_PlayEffect(SEQ_SE_PL_W363);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void ov118_021D10B0(SPLEmitter *param0)
|
||||
{
|
||||
OverlayMetadata *v0 = ParticleSystem_GetEmitterCallbackParam();
|
||||
|
||||
SPLEmitter_SetPosX(param0, Unk_ov118_021D1170[v0->unk_14][0]);
|
||||
SPLEmitter_SetPosY(param0, Unk_ov118_021D1170[v0->unk_14][1]);
|
||||
}
|
||||
|
||||
static int ov118_021D10E8(void)
|
||||
{
|
||||
int v0;
|
||||
|
||||
G3_ResetG3X();
|
||||
|
||||
v0 = ParticleSystem_DrawAll();
|
||||
|
||||
if (v0 > 0) {
|
||||
G3_ResetG3X();
|
||||
}
|
||||
|
||||
ParticleSystem_UpdateAll();
|
||||
G3_RequestSwapBuffers(GX_SORTMODE_MANUAL, GX_BUFFERMODE_Z);
|
||||
|
||||
return v0;
|
||||
}
|
||||
|
||||
static void ov118_021D110C(OverlayMetadata *param0)
|
||||
{
|
||||
void *v0 = ParticleSystem_GetHeapStart(param0->unk_18);
|
||||
ParticleSystem_Free(param0->unk_18);
|
||||
Heap_Free(v0);
|
||||
}
|
||||
|
||||
static u32 ov118_021D1128(u32 param0, BOOL param1)
|
||||
{
|
||||
NNSGfdTexKey v0;
|
||||
|
||||
v0 = NNS_GfdAllocTexVram(param0, param1, 0);
|
||||
GF_ASSERT(v0 != NNS_GFD_ALLOC_ERROR_TEXKEY);
|
||||
ParticleSystem_RegisterTextureKey(v0);
|
||||
|
||||
return NNS_GfdGetTexKeyAddr(v0);
|
||||
}
|
||||
|
||||
static u32 ov118_021D114C(u32 param0, BOOL param1)
|
||||
{
|
||||
NNSGfdPlttKey v0;
|
||||
|
||||
v0 = NNS_GfdAllocPlttVram(param0, param1, NNS_GFD_ALLOC_FROM_LOW);
|
||||
GF_ASSERT(v0 != NNS_GFD_ALLOC_ERROR_PLTTKEY);
|
||||
|
||||
ParticleSystem_RegisterPaletteKey(v0);
|
||||
|
||||
return NNS_GfdGetPlttKeyAddr(v0);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user