Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/events.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ EventDesc Powershield = {
.cpuKind = CKIND_FALCO,
.stage = GRKINDEXT_FD,
.disable_hazards = true,
.force_sopo = true,
.force_sopo = false,
.scoreType = SCORETYPE_KO,
.callbackPriority = 3,
.matchData = &Powershield_MatchData,
Expand Down Expand Up @@ -1193,8 +1193,9 @@ void EventInit(int page, int eventID, MatchInit *matchData)
matchData->playerData[0].portNumberOverride = hmn_port;

// Force Popo if required
if (event->force_sopo && matchData->playerData[0].c_kind == CKIND_ICECLIMBERS)
if (event->force_sopo && matchData->playerData[0].c_kind == CKIND_ICECLIMBERS) {
matchData->playerData[0].c_kind = CKIND_POPO;
}

// Determine the correct HUD position for this amount of players
int hudPos = 0;
Expand Down
45 changes: 45 additions & 0 deletions src/powershield.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ void Reset(void);
void ChangeRandomFireDelayMin(GOBJ *event_menu, int value);
void ChangeRandomFireDelayMax(GOBJ *event_menu, int value);
int GetRandomLaserDelay(void);
void ChangeAllowNana(GOBJ *event_menu, int value);

enum menu_options {
OPT_FIRE_SPEED,
Expand All @@ -20,6 +21,8 @@ enum menu_options {
OPT_LASER_HEIGHT,
OPT_DIRECTION,
OPT_MOVEMENT,
OPT_ALLOW_NANA,
OPT_EXIT,
};

enum fire_speed {
Expand Down Expand Up @@ -105,6 +108,13 @@ static EventOption Options_Main[] = {
.desc = {"Change how falco lasers around the stage."},
.values = Options_Movement,
},
{
.kind = OPTKIND_TOGGLE,
.val = 1, // Default to both climbers
.name = "Nana",
.desc = {"Toggle Nana on or off."},
.OnChange = ChangeAllowNana,
},
{
.kind = OPTKIND_FUNC,
.name = "Exit",
Expand Down Expand Up @@ -136,6 +146,9 @@ void Event_Think(GOBJ *menu) {
FighterData *falco_data = falco->userdata;

if (event_vars->game_timer == 1) {
// Disable Nana option for non-Ice Climbers
Options_Main[OPT_ALLOW_NANA].disable = (player_data->kind != FTKIND_POPO);

player_data->facing_direction = -1;
PutOnGround(player);
PutOnGround(falco);
Expand All @@ -149,6 +162,21 @@ void Event_Think(GOBJ *menu) {
falco_data->flags.no_reaction_always = true;
falco_data->grab.vuln = 0x1FF;
player_data->shield.health = 60;

// Manage Nana based on option
if (player_data->kind == FTKIND_POPO) {
GOBJ *nana = Fighter_GetSubcharGObj(0, 1);
int nana_option = Options_Main[OPT_ALLOW_NANA].val;

if (nana_option == 0 && nana) {
FighterData *nana_data = nana->userdata;
if (nana_data->state_id != ASID_SLEEP) {
Fighter_EnterSleep(nana, 1);
}
nana_data->phys.pos.X = 999.f;
nana_data->phys.pos.Y = -999.f;
}
}

int new_direction = -1;
if (player_data->input.down & HSD_BUTTON_DPAD_LEFT) {
Expand Down Expand Up @@ -452,4 +480,21 @@ int GetRandomLaserDelay(void) {
return HSD_Randi(random_fire_delay_max - random_fire_delay_min) + random_fire_delay_min;
}

void ChangeAllowNana(GOBJ *event_menu, int value) {
GOBJ *player = Fighter_GetGObj(0);
if (!player) return;

FighterData *player_data = player->userdata;
if (player_data->kind != FTKIND_POPO) return;

GOBJ *nana = Fighter_GetSubcharGObj(0, 1);

if (value == 1 && nana) {
FighterData *nana_data = nana->userdata;
if (nana_data->state_id == ASID_SLEEP) {
Fighter_EnterDeadDown(player);
}
}
}

EventMenu *Event_Menu = &Menu_Main;