mirror of https://github.com/pmret/papermario.git
246 lines
7.8 KiB
C
246 lines
7.8 KiB
C
#include "common.h"
|
|
#include "hud_element.h"
|
|
#include "sprite.h"
|
|
#include "game_modes.h"
|
|
|
|
SHIFT_BSS s32 D_800A0950;
|
|
SHIFT_BSS s16 D_800A0954;
|
|
SHIFT_BSS s16 D_800A0956;
|
|
SHIFT_BSS s16 D_800A0958;
|
|
SHIFT_BSS s16 D_800A095A;
|
|
SHIFT_BSS s16 D_800A095C;
|
|
SHIFT_BSS s16 D_800A095E;
|
|
SHIFT_BSS s32 D_800A0960;
|
|
SHIFT_BSS s32 D_800A0964;
|
|
|
|
void state_init_intro(void) {
|
|
s8 unk_A8;
|
|
|
|
gGameStatusPtr->introState = INTRO_STATE_0;
|
|
|
|
set_curtain_scale_goal(1.0f);
|
|
set_curtain_fade_goal(0.3f);
|
|
|
|
unk_A8 = gGameStatusPtr->creditsViewportMode;
|
|
switch (unk_A8) {
|
|
case 0:
|
|
intro_logos_set_fade_alpha(0);
|
|
|
|
D_800A0954 = 0xFF;
|
|
D_800A0956 = 0x10;
|
|
D_800A0958 = 4;
|
|
D_800A0960 = 0;
|
|
D_800A095A = 208;
|
|
D_800A095C = 208;
|
|
D_800A095E = 208;
|
|
D_800A0964 = 0;
|
|
|
|
// hos_05 (Star Sanctuary)
|
|
gGameStatusPtr->areaID = AREA_HOS;
|
|
gGameStatusPtr->mapID = 5;
|
|
gGameStatusPtr->entryID = 3;
|
|
break;
|
|
case 1:
|
|
intro_logos_set_fade_alpha(0);
|
|
|
|
D_800A0954 = 0;
|
|
D_800A0956 = 0xC;
|
|
D_800A0958 = 4;
|
|
D_800A0960 = unk_A8;
|
|
D_800A095A = 0;
|
|
D_800A095C = 0;
|
|
D_800A095E = 0;
|
|
D_800A0964 = 0;
|
|
|
|
// hos_04 (Outside the Sanctuary)
|
|
gGameStatusPtr->areaID = AREA_HOS;
|
|
gGameStatusPtr->mapID = 4;
|
|
gGameStatusPtr->entryID = 4;
|
|
break;
|
|
default:
|
|
intro_logos_set_fade_alpha(0);
|
|
intro_logos_set_fade_color(208);
|
|
|
|
gGameStatusPtr->creditsViewportMode = -1;
|
|
|
|
D_800A0956 = 6;
|
|
D_800A0958 = 6;
|
|
|
|
D_800779B0++;
|
|
if (D_800779B0 >= 4) {
|
|
D_800779B0 = 0;
|
|
}
|
|
|
|
D_800A0964 = 3;
|
|
break;
|
|
}
|
|
|
|
set_screen_overlay_params_back(D_800A0960, D_800A0954);
|
|
set_screen_overlay_color(SCREEN_LAYER_BACK, D_800A095A, D_800A095C, D_800A095E);
|
|
|
|
intro_logos_update_fade();
|
|
}
|
|
|
|
void state_step_intro(void) {
|
|
PlayerData* playerData = &gPlayerData;
|
|
u32 pressedButtons = gGameStatusPtr->pressedButtons[0];
|
|
s32 i;
|
|
|
|
if (gGameStatusPtr->creditsViewportMode != -1) {
|
|
if (D_800A0964 == 0 && pressedButtons & (BUTTON_A | BUTTON_B | BUTTON_START | BUTTON_Z)) {
|
|
D_800A0964 = 1;
|
|
}
|
|
|
|
if (D_800A0964 == 1 && (gGameStatusPtr->introState == INTRO_STATE_0 ||
|
|
gGameStatusPtr->introState == INTRO_STATE_1 ||
|
|
gGameStatusPtr->introState == INTRO_STATE_4))
|
|
{
|
|
gGameStatusPtr->creditsViewportMode = 100;
|
|
state_init_intro();
|
|
return;
|
|
}
|
|
|
|
if (D_800A0964 == 2 && (gGameStatusPtr->introState == INTRO_STATE_0 ||
|
|
gGameStatusPtr->introState == INTRO_STATE_1 ||
|
|
gGameStatusPtr->introState == INTRO_STATE_4))
|
|
{
|
|
gGameStatusPtr->creditsViewportMode++;
|
|
state_init_intro();
|
|
return;
|
|
}
|
|
}
|
|
|
|
switch (gGameStatusPtr->introState) {
|
|
case INTRO_STATE_0:
|
|
update_effects();
|
|
update_cameras();
|
|
if (gGameStatusPtr->creditsViewportMode == -1) {
|
|
set_curtain_fade_goal(0.0f);
|
|
if (intro_logos_fade_out(D_800A0956)) {
|
|
gGameStatusPtr->introState = INTRO_STATE_1;
|
|
set_curtain_draw_callback(NULL);
|
|
}
|
|
} else {
|
|
D_800A0954 += D_800A0956;
|
|
if (D_800A0954 >= 0xFF) {
|
|
D_800A0954 = 0xFF;
|
|
gGameStatusPtr->introState = INTRO_STATE_1;
|
|
set_curtain_draw_callback(NULL);
|
|
}
|
|
}
|
|
break;
|
|
case INTRO_STATE_1:
|
|
D_800A0950 = 4;
|
|
gOverrideFlags |= GLOBAL_OVERRIDES_8;
|
|
if (D_800A0960 != 0xE) {
|
|
gGameStatusPtr->introState = INTRO_STATE_2;
|
|
}
|
|
break;
|
|
case INTRO_STATE_15:
|
|
D_800A0950--;
|
|
if (D_800A0950 <= 0) {
|
|
gOverrideFlags &= ~GLOBAL_OVERRIDES_8;
|
|
gGameStatusPtr->introState = INTRO_STATE_2;
|
|
}
|
|
break;
|
|
case INTRO_STATE_2:
|
|
set_curtain_draw_callback(NULL);
|
|
gGameStatusPtr->isBattle = FALSE;
|
|
gGameStatusPtr->unk_76 = 0;
|
|
gGameStatusPtr->disableScripts = FALSE;
|
|
gGameStatusPtr->keepUsingPartnerOnMapChange = FALSE;
|
|
|
|
if (gGameStatusPtr->creditsViewportMode == -1) {
|
|
general_heap_create();
|
|
clear_render_tasks();
|
|
clear_worker_list();
|
|
clear_script_list();
|
|
create_cameras_a();
|
|
spr_init_sprites(PLAYER_SPRITES_MARIO_WORLD);
|
|
clear_entity_models();
|
|
clear_animator_list();
|
|
clear_model_data();
|
|
clear_sprite_shading_data();
|
|
reset_background_settings();
|
|
hud_element_clear_cache();
|
|
clear_trigger_data();
|
|
clear_printers();
|
|
clear_entity_data(0);
|
|
clear_screen_overlays();
|
|
clear_player_status();
|
|
clear_npcs();
|
|
clear_player_data();
|
|
reset_battle_status();
|
|
init_encounter_status();
|
|
clear_effect_data();
|
|
clear_item_entity_data();
|
|
clear_saved_variables();
|
|
initialize_collision();
|
|
set_game_mode(GAME_MODE_TITLE_SCREEN);
|
|
return;
|
|
}
|
|
|
|
playerData->curHP = 10;
|
|
playerData->curMaxHP = 10;
|
|
playerData->hardMaxHP = 10;
|
|
playerData->curFP = 5;
|
|
playerData->curMaxFP = 5;
|
|
playerData->hardMaxFP = 5;
|
|
playerData->maxBP = 2;
|
|
playerData->bootsLevel = 0;
|
|
playerData->hammerLevel = -1;
|
|
playerData->fortressKeyCount = 0;
|
|
playerData->level = 0;
|
|
|
|
for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) {
|
|
playerData->partners[i].enabled = 0;
|
|
}
|
|
|
|
playerData->curPartner = PARTNER_NONE;
|
|
load_map_by_IDs(gGameStatusPtr->areaID, gGameStatusPtr->mapID, 0);
|
|
gGameStatusPtr->introState = INTRO_STATE_3;
|
|
disable_player_input();
|
|
break;
|
|
case INTRO_STATE_3:
|
|
if (D_800A0960 == 0xE) {
|
|
D_800A0960 = 0xF;
|
|
}
|
|
D_800A0954 = 255 - D_800A0958;
|
|
gOverrideFlags &= ~GLOBAL_OVERRIDES_8;
|
|
gCameras[CAM_DEFAULT].flags &= ~0x2;
|
|
gOverrideFlags &= ~GLOBAL_OVERRIDES_DISABLE_RENDER_WORLD;
|
|
update_player();
|
|
update_encounters();
|
|
update_npcs();
|
|
update_effects();
|
|
update_cameras();
|
|
if (!does_script_exist(gGameStatusPtr->mainScriptID)) {
|
|
gGameStatusPtr->prevArea = gGameStatusPtr->areaID;
|
|
gGameStatusPtr->introState = INTRO_STATE_4;
|
|
break;
|
|
}
|
|
return;
|
|
case INTRO_STATE_4:
|
|
update_effects();
|
|
update_cameras();
|
|
update_npcs();
|
|
if (D_800A0954 == 0) {
|
|
set_screen_overlay_params_front(OVERLAY_NONE, -1.0f);
|
|
set_screen_overlay_params_back(OVERLAY_NONE, -1.0f);
|
|
} else {
|
|
D_800A0954 -= D_800A0958;
|
|
if (D_800A0954 < 0) {
|
|
D_800A0954 = 0;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
set_screen_overlay_params_back(D_800A0960, D_800A0954);
|
|
set_screen_overlay_color(SCREEN_LAYER_BACK, D_800A095A, D_800A095C, D_800A095E);
|
|
intro_logos_update_fade();
|
|
}
|
|
|
|
void state_drawUI_intro(void) {
|
|
}
|