papermario/src/state_intro.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) {
}