void mission_goal_status_change( int goal_num, int new_status) { int type; Assert(goal_num < Num_goals); Assert((new_status == GOAL_FAILED) || (new_status == GOAL_COMPLETE)); // if in a multiplayer game, send a status change to clients if ( MULTIPLAYER_MASTER ){ send_mission_goal_info_packet( goal_num, new_status, -1 ); } type = Mission_goals[goal_num].type & GOAL_TYPE_MASK; Mission_goals[goal_num].satisfied = new_status; if ( new_status == GOAL_FAILED ) { // don't display bonus goal failure if ( type != BONUS_GOAL ) { // only do HUD and music is goals are my teams goals. if ( (Game_mode & GM_NORMAL) || ((Net_player != NULL) && (Net_player->p_info.team == Mission_goals[goal_num].team)) ) { hud_add_objective_messsage(type, new_status); if ( !Mission_goals[goal_num].flags & MGF_NO_MUSIC ) { // maybe play event music event_music_primary_goal_failed(); } //HUD_sourced_printf(HUD_SOURCE_FAILED, "%s goal failed at time %6.1f!", Goal_type_text(type), f2fl(Missiontime) ); } } mission_log_add_entry( LOG_GOAL_FAILED, Mission_goals[goal_num].name, NULL, goal_num ); } else if ( new_status == GOAL_COMPLETE ) { if ( (Game_mode & GM_NORMAL) || ((Net_player != NULL) && (Net_player->p_info.team == Mission_goals[goal_num].team))) { hud_add_objective_messsage(type, new_status); // cue for Event Music if ( !(Mission_goals[goal_num].flags & MGF_NO_MUSIC) ) { event_music_primary_goals_met(); } mission_log_add_entry( LOG_GOAL_SATISFIED, Mission_goals[goal_num].name, NULL, goal_num ); } if(Game_mode & GM_MULTIPLAYER){ // squad war multi_team_maybe_add_score((int)(Mission_goals[goal_num].score * scoring_get_scale_factor()), Mission_goals[goal_num].team); } else { // deal with the score Player->stats.m_score += (int)(Mission_goals[goal_num].score * scoring_get_scale_factor()); } } }
// function to fail all mission goals. Don't fail events here since this funciton is currently // called in mission when something bad happens to the player (like he makes too many shots on friendlies). // Events can still happen. Things will just be really bad for the player. void mission_goal_fail_all() { int i; for (i=0; i<Num_goals; i++) { Mission_goals[i].satisfied = GOAL_FAILED; mission_log_add_entry( LOG_GOAL_FAILED, Mission_goals[i].name, NULL, i ); } }
// function to mark all incomplete goals as failed. Happens at the end of a mission // mark the events which are not currently satisfied as failed as well. void mission_goal_fail_incomplete() { int i; for (i = 0; i < Num_goals; i++ ) { if ( Mission_goals[i].satisfied == GOAL_INCOMPLETE ) { Mission_goals[i].satisfied = GOAL_FAILED; mission_log_add_entry( LOG_GOAL_FAILED, Mission_goals[i].name, NULL, i ); } } // now for the events. Must set the formula to -1 and the result to 0 to be a failed // event. for ( i = 0; i < Num_mission_events; i++ ) { if ( Mission_events[i].formula != -1 ) { Mission_events[i].formula = -1; Mission_events[i].result = 0; } } }