//╒═════════════════════════════════════════════════════════════════════════════╕ //│ Author: Ben Rollinson Date: 14/09/11 │ //╞═════════════════════════════════════════════════════════════════════════════╡ //│ │ //│ Mission Repeat System - Private Script Header │ //│ │ //│ This header contains all private script commands used by │ //│ the mission repeat system. This system allows replaying of │ //│ missions that have already been completed by the player. │ //│ │ //╘═════════════════════════════════════════════════════════════════════════════╛ USING "flow_reset_GAME.sch" USING "friends_public.sch" USING "mission_repeat_data.sch" #if not USE_CLF_DLC #if not USE_NRM_DLC ENUM RP_HEIST_STATE RPHS_POI_OVERVIEW, RPHS_POI_OVERVIEW_DONE, RPHS_GAMEPLAY_CHOICE, RPHS_GAMEPLAY_CHOICE_DONE, RPHS_CREW_CHOICE, RPHS_CREW_CHOICE_DONE, RPHS_EXIT_CUTSCENE, RPHS_FINISHED ENDENUM ENUM RP_HEIST_FLAGS RPH_START_BOARD_INTERACTIONS, RPH_LOAD_EXIT_CUTSCENE, RPH_DO_EXIT_CUTSCENE, RPH_SHUTDOWN_LAUNCHER ENDENUM #endif #endif // -----------------------------COMMON FUNCTIONS ----------------------------------------------------------- /// PURPOSE: /// Requests permission for the repeat play mission to run /// PARAMS: /// iCandidateID - the candidate ID gets updated if the mission is given permission to run /// RETURNS: /// TRUE if the mission got permission to run. FALSE otherwise FUNC BOOL REPEAT_PLAY_LAUNCH_MISSION(INT &iCandidateID) CPRINTLN(DEBUG_REPEAT, "REPEAT_PLAY_LAUNCH_MISSION: waiting for permission to run.") SWITCH g_RepeatPlayData.eMissionType CASE CP_GROUP_MISSIONS IF Request_Mission_Launch(iCandidateID, MCTID_SELECTED_BY_PLAYER) = MCRET_ACCEPTED RETURN TRUE ENDIF BREAK #if not USE_CLF_DLC #if not USE_NRM_DLC CASE CP_GROUP_RANDOMCHARS // update the global candidate ID of this RC first, so RC_REQUEST_PERMISSION_TO_RUN works correctly g_RandomChars[g_RepeatPlayData.iMissionIndex].rcMissionCandidateID = iCandidateID IF RC_REQUEST_PERMISSION_TO_RUN(INT_TO_ENUM(g_eRC_MissionIDs ,g_RepeatPlayData.iMissionIndex)) iCandidateID = g_RandomChars[g_RepeatPlayData.iMissionIndex].rcMissionCandidateID // return the updated candidate ID RETURN TRUE ENDIF BREAK #endif #endif DEFAULT CPRINTLN(DEBUG_REPEAT,"REPEAT_PLAY_LAUNCH_MISSION passed a mission type that isn't repeat playable: ", g_RepeatPlayData.eMissionType) BREAK ENDSWITCH RETURN FALSE ENDFUNC /// PURPOSE: /// Changes player character to someone that can launch the mission we are repeat playing PROC REPEAT_PLAY_SWITCH_TO_SUITABLE_CHARACTER(INT iTriggerCharBitset) //Work out which character to start the mission as. CPRINTLN(DEBUG_REPEAT,"Switching to suitable character") SELECTOR_SLOTS_ENUM eCharToTrigger = SELECTOR_PED_MICHAEL enumCharacterList ePlayerChar = GET_PLAYER_PED_ENUM(PLAYER_PED_ID()) IF Is_Mission_Triggerable_By_Character(iTriggerCharBitset, ePlayerChar) eCharToTrigger = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(ePlayerChar) ELIF Is_Mission_Triggerable_By_Character(iTriggerCharBitset, CHAR_MICHAEL) eCharToTrigger = SELECTOR_PED_MICHAEL ELIF Is_Mission_Triggerable_By_Character(iTriggerCharBitset, CHAR_FRANKLIN) eCharToTrigger = SELECTOR_PED_FRANKLIN ELIF Is_Mission_Triggerable_By_Character(iTriggerCharBitset, CHAR_TREVOR) eCharToTrigger = SELECTOR_PED_TREVOR ELSE SCRIPT_ASSERT("mission_repeat_controller.sc: Tried to repeat a mission that doesn't seem to be triggerable by any playable characters.") ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) WHILE NOT SET_CURRENT_SELECTOR_PED(eCharToTrigger,TRUE) WAIT(0) ENDWHILE ENDIF CPRINTLN(DEBUG_REPEAT,"Switched to suitable character: ", eCharToTrigger) ENDPROC // ------------------------------HEIST FUNCTIONS-------------------------------------------------------------- /// PURPOSE: /// Sets visibility of part of a heist planning board /// PARAMS: /// iHeist - the heist that uses this planning board /// eDisplayGroup - the display group we are altering /// bIsVisible - do we want the display group to be visible? PROC REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(INT iHeist, g_eBoardDisplayGroups eDisplayGroup, BOOL bIsVisible) // All parameters valid. Update the state in the heist's global display group bitset. IF bIsVisible = TRUE SET_BIT(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], ENUM_TO_INT(eDisplayGroup)) ELSE CLEAR_BIT(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], ENUM_TO_INT(eDisplayGroup)) ENDIF // Flag the planning board as being updated so the heist controller knows to make changes. SET_BIT(g_iBitsetHeistBoardUpdated, iHeist) ENDPROC /// PURPOSE: /// Sets the specified flow flag type for the heist specified /// PARAMS: /// iHeist - the heist we are using /// eFlag - the flow flag type we want to set /// bNewValue - new value of the flow flag /// RETURNS: /// Whether it has managed to set the flow flag. (Will be false if this heist doesnt have that type of flowflag) #if not USE_CLF_DLC #if not USE_NRM_DLC //========================================= HEIST ONLY IN GTA V CONTROLLERS =========================================== FUNC BOOL REPEAT_PLAY_SET_HEIST_FLOW_FLAG(INT iHeist, RP_HEIST_FLAGS eFlag, BOOL bNewValue) SWITCH iHeist CASE HEIST_JEWEL SWITCH eFlag CASE RPH_START_BOARD_INTERACTIONS SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, bNewValue) RETURN TRUE BREAK CASE RPH_LOAD_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_LOAD_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_DO_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_DO_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_SHUTDOWN_LAUNCHER SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_JEWEL, bNewValue) RETURN TRUE BREAK ENDSWITCH BREAK CASE HEIST_DOCKS SWITCH eFlag CASE RPH_START_BOARD_INTERACTIONS SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_DOCKS_PRIME_BOARD_TRANSITION, bNewValue) RETURN TRUE BREAK CASE RPH_LOAD_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_DOCKS_LOAD_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_DO_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_DOCKS_DO_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_SHUTDOWN_LAUNCHER SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_DOCKS, bNewValue) RETURN TRUE BREAK ENDSWITCH BREAK CASE HEIST_RURAL_BANK SWITCH eFlag CASE RPH_START_BOARD_INTERACTIONS SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_RURAL_LOAD_TREV_WIN_ENDING, bNewValue) RETURN TRUE BREAK CASE RPH_LOAD_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_RURAL_LOAD_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_DO_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_RURAL_DO_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_SHUTDOWN_LAUNCHER SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_RURAL_BANK, bNewValue) RETURN TRUE BREAK ENDSWITCH BREAK CASE HEIST_AGENCY SWITCH eFlag CASE RPH_START_BOARD_INTERACTIONS SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_AGENCY_PRIME_BOARD_TRANSITION, bNewValue) RETURN TRUE BREAK CASE RPH_LOAD_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_AGENCY_LOAD_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_DO_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_AGENCY_DO_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_SHUTDOWN_LAUNCHER SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_AGENCY, bNewValue) RETURN TRUE BREAK ENDSWITCH BREAK CASE HEIST_FINALE SWITCH eFlag CASE RPH_START_BOARD_INTERACTIONS SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINALE_PRIME_BOARD_TRANSITION, bNewValue) RETURN TRUE BREAK CASE RPH_LOAD_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINALE_LOAD_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_DO_EXIT_CUTSCENE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINALE_DO_BOARD_EXIT_CUTSCENE, bNewValue) RETURN TRUE BREAK CASE RPH_SHUTDOWN_LAUNCHER SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_FINALE, bNewValue) RETURN TRUE BREAK ENDSWITCH BREAK DEFAULT// not a heist BREAK ENDSWITCH RETURN FALSE ENDFUNC /// PURPOSE: /// Waits for exit cutscene to start and then tells board to turn off /// PARAMS: /// iHeist - the heist we are repeat playing /// bLockExit - lock the board's exit PROC REPEAT_PLAY_TOGGLE_BOARD_VIEWING(INT iHeist, BOOL bLockExit) BOOL bWaitForCutsceneStart // Wait for any currently playing conversations to finish before moving on WHILE IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() WAIT(0) CPRINTLN(DEBUG_REPEAT, "REPEAT_PLAY_TOGGLE_BOARD_VIEWING: is waiting for conversation to end") ENDWHILE //wait for the cut-scene to start before moving on? bWaitForCutsceneStart = REPEAT_PLAY_SET_HEIST_FLOW_FLAG(iHeist, RPH_DO_EXIT_CUTSCENE, TRUE) IF bWaitForCutsceneStart = TRUE WHILE NOT IS_CUTSCENE_PLAYING() WAIT(0) CPRINTLN(DEBUG_REPEAT, "REPEAT_PLAY_TOGGLE_BOARD_VIEWING: is waiting for cutscene to start") ENDWHILE ELSE CPRINTLN(DEBUG_REPEAT, "REPEAT_PLAY_TOGGLE_BOARD_VIEWING: not waiting for cut-scene to start") DO_SCREEN_FADE_OUT(0) // no exit cut-scene, fade out now ENDIF SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_DISABLE_BOARD_EXIT, iHeist, bLockExit) //Tell the heist controller to toggle the board view. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_TOGGLE_BOARD, iHeist, TRUE) ENDPROC /// PURPOSE: /// Handles the player's plannng board interactions for repeat play heists /// PARAMS: /// iHeist - the heist we are repeat playing the board for /// eInteraction - which interaction we are currently doing /// iDisplayGroup - the display group of the board we are editing /// eRPHeistState - the current state of the repeat play heist /// RETURNS: /// the new repeat play heist state FUNC RP_HEIST_STATE REPEAT_PLAY_DO_BOARD_INTERACTION(INT iHeist, g_eBoardInteractions eInteraction, INT iDisplayGroup, RP_HEIST_STATE eRPHeistState) //Check if this interaction is being told to back out. IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_BOARD_UNDO) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_BOARD_UNDO, FALSE) RETURN RPHS_GAMEPLAY_CHOICE ENDIF // Get the board mode flowint flag. FLOW_INT_IDS theBoardModeFlag = GET_HEIST_BOARD_MODE_FLOWINT_ID(iHeist) // Get the current board mode flag for this heist and check it's valid. INT iFlaggedBoardMode = GET_MISSION_FLOW_INT_VALUE(theBoardModeFlag) IF iFlaggedBoardMode < 0 OR iFlaggedBoardMode >= ENUM_TO_INT(PBM_INVALID) CERRORLN(DEBUG_REPEAT, "REPEAT_PLAY_DO_BOARD_INTERACTION: The current board mode flagged for this heist is invald.") ENDIF //It's valid. Convert to an ENUM g_eBoardModes theFlaggedMode = INT_TO_ENUM(g_eBoardModes, iFlaggedBoardMode) // Set the board interaction flags. BOOL lockExit = TRUE BOOL viewWhenDone = TRUE // Which interaction is being triggered? SWITCH(eInteraction) //Manage point of interest overviews. CASE INTERACT_POI_OVERVIEW IF theFlaggedMode <> PBM_POI_OVERVIEW //The board has not been flagged to switch to crew select mode yet. Flag it. SET_MISSION_FLOW_INT_VALUE(theBoardModeFlag, ENUM_TO_INT(PBM_POI_OVERVIEW)) //Make sure the crew selected bit is cleared as we initialise the interaction. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_POI_OVERVIEW_DONE, iHeist, FALSE) //Set board interaction modifier flags as we initialise. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_DISABLE_BOARD_EXIT, iHeist, lockExit) ELSE //The board is already flagged to switch to crew select mode. //Has the crew been selected yet? IF GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_POI_OVERVIEW_DONE, iHeist) //Yes... //Set the board mode flag to viewing mode if requested. IF viewWhenDone SET_MISSION_FLOW_INT_VALUE(theBoardModeFlag, ENUM_TO_INT(PBM_VIEW)) ENDIF //Clean up the "Heist POI Overview Done" flag. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_POI_OVERVIEW_DONE, iHeist, FALSE) //Turn on the display group linked to this interaction. IF iDisplayGroup <> ENUM_TO_INT(PBDG_INVALID) SET_BIT(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], iDisplayGroup) //Tell the board controller that the flow has made a change that needs the board to be refreshed. SET_BIT(g_iBitsetHeistBoardUpdated, iHeist) ENDIF RETURN RPHS_POI_OVERVIEW_DONE ENDIF ENDIF BREAK //Manage selecting a crew. CASE INTERACT_CREW IF theFlaggedMode <> PBM_CREW_SELECT //The board has not been flagged to switch to crew select mode yet. Flag it. SET_MISSION_FLOW_INT_VALUE(theBoardModeFlag, ENUM_TO_INT(PBM_CREW_SELECT)) //Ensure display group is turned off as we start the interaction. IF iDisplayGroup <> ENUM_TO_INT(PBDG_INVALID) CLEAR_BIT(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], iDisplayGroup) SET_BIT(g_iBitsetHeistBoardUpdated, iHeist) ENDIF //Make sure the crew selected bit is cleared as we initialise the interaction. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_CREW_SELECTED, iHeist, FALSE) //Set board interaction modifier flags as we initialise. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_DISABLE_BOARD_EXIT, iHeist, lockExit) ELSE //The board is already flagged to switch to crew select mode. //Has the crew been selected yet? IF GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_CREW_SELECTED, iHeist) //Yes... //Set the board mode flag to viewing mode if requested. IF viewWhenDone SET_MISSION_FLOW_INT_VALUE(theBoardModeFlag, ENUM_TO_INT(PBM_VIEW)) ENDIF //Clean up the "Heist Crew Selected" flag. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_CREW_SELECTED, iHeist, FALSE) //Turn on the display group linked to this interaction. IF iDisplayGroup <> ENUM_TO_INT(PBDG_INVALID) SET_BIT(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], iDisplayGroup) SET_BIT(g_iBitsetHeistBoardUpdated, iHeist) ENDIF RETURN RPHS_CREW_CHOICE_DONE ENDIF ENDIF BREAK //Manage selecting a gameplay choice. CASE INTERACT_GAMEPLAY_CHOICE //Look up which FLOWINT we need to check. FLOW_INT_IDS theChoiceFlowInt SWITCH(iHeist) CASE HEIST_JEWEL theChoiceFlowInt = FLOWINT_HEIST_CHOICE_JEWEL BREAK CASE HEIST_DOCKS theChoiceFlowInt = FLOWINT_HEIST_CHOICE_DOCKS BREAK CASE HEIST_RURAL_BANK theChoiceFlowInt = FLOWINT_HEIST_CHOICE_RURAL BREAK CASE HEIST_AGENCY theChoiceFlowInt = FLOWINT_HEIST_CHOICE_AGENCY BREAK CASE HEIST_FINALE theChoiceFlowInt = FLOWINT_HEIST_CHOICE_FINALE BREAK ENDSWITCH IF theFlaggedMode <> PBM_CHOICE_SELECT //The board has not been flagged to switch to gameplay choice select mode yet. Flag it. SET_MISSION_FLOW_INT_VALUE(theBoardModeFlag, ENUM_TO_INT(PBM_CHOICE_SELECT)) //Make sure the choice is cleared as we initialise the interaction. SET_MISSION_FLOW_INT_VALUE(theChoiceFlowInt, HEIST_CHOICE_EMPTY) SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_CHOICE_SELECTED, iHeist, FALSE) //Ensure display group is turned off as we start the interaction. IF iDisplayGroup <> ENUM_TO_INT(PBDG_INVALID) CLEAR_BIT(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], iDisplayGroup) SET_BIT(g_iBitsetHeistBoardUpdated, iHeist) ENDIF //Set board interaction modifier flags as we initialise. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_DISABLE_BOARD_EXIT, iHeist, lockExit) ELSE //The board is already flagged to switch to gameplay choice select mode. //Has the choice been selected yet? IF GET_MISSION_FLOW_INT_VALUE(theChoiceFlowInt) <> HEIST_CHOICE_EMPTY AND GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_CHOICE_SELECTED, iHeist) //Yes... //Set the board mode flag to viewing mode if requested. IF viewWhenDone SET_MISSION_FLOW_INT_VALUE(theBoardModeFlag, ENUM_TO_INT(PBM_VIEW)) ENDIF //Clean up the "Heist Choice Selected" flag. SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_HEIST_CHOICE_SELECTED, iHeist, FALSE) //Turn on the display group linked to this interaction. IF iDisplayGroup <> ENUM_TO_INT(PBDG_INVALID) SET_BIT(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], iDisplayGroup) SET_BIT(g_iBitsetHeistBoardUpdated, iHeist) ENDIF //Follow interaction complete jump. IF iHeist = HEIST_DOCKS // docks heist has no crew select stage RETURN RPHS_CREW_CHOICE_DONE ENDIF RETURN RPHS_GAMEPLAY_CHOICE_DONE ENDIF ENDIF BREAK ENDSWITCH // no change RETURN eRPHeistState ENDFUNC /// PURPOSE: /// Returns which heist mission the player has chosen to play. /// PARAMS: /// iHeist - the heist strand we are working with. /// RETURNS: /// the mission ID of the hesit mission we want to launch FUNC INT REPEAT_PLAY_GET_SELECTED_HEIST_MISSION_ID(INT iHeist) SWITCH iHeist CASE HEIST_JEWEL RETURN ENUM_TO_INT(SP_HEIST_JEWELRY_2) BREAK CASE HEIST_DOCKS IF GET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_DOCKS) = HEIST_CHOICE_DOCKS_BLOW_UP_BOAT RETURN ENUM_TO_INT(SP_HEIST_DOCKS_2A) ELSE RETURN ENUM_TO_INT(SP_HEIST_DOCKS_2B) ENDIF BREAK CASE HEIST_RURAL_BANK RETURN ENUM_TO_INT(SP_HEIST_RURAL_2) BREAK CASE HEIST_AGENCY IF GET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_AGENCY) = HEIST_CHOICE_AGENCY_FIRETRUCK RETURN ENUM_TO_INT(SP_HEIST_AGENCY_3A) ELSE RETURN ENUM_TO_INT(SP_HEIST_AGENCY_3B) ENDIF BREAK CASE HEIST_FINALE IF GET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_FINALE) = HEIST_CHOICE_FINALE_TRAFFCONT RETURN ENUM_TO_INT(SP_HEIST_FINALE_2A) ELSE RETURN ENUM_TO_INT(SP_HEIST_FINALE_2B) ENDIF BREAK DEFAULT // not a heist BREAK ENDSWITCH RETURN 0 // not a heist ENDFUNC /// PURPOSE: /// Activates any display groups that should be on when repeat playing this planning board /// PARAMS: /// iHeist - the heist strand we are working with. PROC SET_HEIST_BOARD_DISPLAY_GROUPS_ON(INT iHeist) SWITCH iHeist CASE HEIST_JEWEL REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_0, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_1, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_2, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_3, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_4, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_5, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_6, TRUE) SWITCH GET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_JEWEL) CASE HEIST_CHOICE_JEWEL_STEALTH REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_8, TRUE) BREAK CASE HEIST_CHOICE_JEWEL_HIGH_IMPACT REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_7, TRUE) BREAK ENDSWITCH BREAK CASE HEIST_DOCKS REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_DOCKS, PBDG_0, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_DOCKS, PBDG_1, TRUE) BREAK CASE HEIST_RURAL_BANK REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_RURAL_BANK, PBDG_0, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_RURAL_BANK, PBDG_1, TRUE) BREAK CASE HEIST_AGENCY REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_AGENCY, PBDG_0, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_AGENCY, PBDG_1, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_AGENCY, PBDG_2, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_AGENCY, PBDG_3, TRUE) BREAK CASE HEIST_FINALE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_FINALE, PBDG_0, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_FINALE, PBDG_1, TRUE) BREAK DEFAULT // not a heist BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Checks appropriate flowflag to see if the heist's exit cutscene has finished /// PARAMS: /// iHeist - the hesit we are repeat playing /// RETURNS: /// TRUE if cutscene finished , false otherwise FUNC BOOL REPEAT_PLAY_HAS_HEIST_CUTSCENE_FINISHED(INT iHeist) SWITCH iHeist CASE HEIST_JEWEL IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_DO_BOARD_EXIT_CUTSCENE) = TRUE RETURN FALSE ENDIF BREAK CASE HEIST_DOCKS IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_DOCKS_DO_BOARD_EXIT_CUTSCENE) = TRUE RETURN FALSE ENDIF BREAK CASE HEIST_RURAL_BANK IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_RURAL_DO_BOARD_EXIT_CUTSCENE) = TRUE RETURN FALSE ENDIF BREAK CASE HEIST_AGENCY IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_AGENCY_DO_BOARD_EXIT_CUTSCENE) = TRUE RETURN FALSE ENDIF BREAK CASE HEIST_FINALE IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINALE_DO_BOARD_EXIT_CUTSCENE) = TRUE RETURN FALSE ENDIF BREAK DEFAULT // not a heist BREAK ENDSWITCH RETURN TRUE // cutscene has finished, or this heist doesn't have a cut-scene ENDFUNC /// PURPOSE: /// Returns how long a delay there should be after making the gameplay or crew choice /// PARAMS: /// iHeist - the heist we are repeat playing /// eRPHeistState - should be RPHS_GAMEPLAY_CHOICE_DONE or RPHS_CREW_CHOICE_DONE /// RETURNS: /// How long we should delay in this state FUNC INT REPEAT_PLAY_GET_HEIST_CHOICE_DONE_WAIT(INT iHeist, RP_HEIST_STATE eRPHeistState) SWITCH iHeist CASE HEIST_JEWEL SWITCH eRPHeistState CASE RPHS_POI_OVERVIEW_DONE RETURN 3000 BREAK CASE RPHS_GAMEPLAY_CHOICE_DONE RETURN 3000 BREAK CASE RPHS_CREW_CHOICE_DONE RETURN 2250 BREAK ENDSWITCH BREAK CASE HEIST_DOCKS SWITCH eRPHeistState CASE RPHS_POI_OVERVIEW_DONE RETURN 3000 BREAK CASE RPHS_GAMEPLAY_CHOICE_DONE RETURN 3500 BREAK CASE RPHS_CREW_CHOICE_DONE RETURN 2250 BREAK ENDSWITCH BREAK CASE HEIST_RURAL_BANK SWITCH eRPHeistState CASE RPHS_POI_OVERVIEW_DONE RETURN 3000 BREAK CASE RPHS_GAMEPLAY_CHOICE_DONE RETURN 1000 BREAK CASE RPHS_CREW_CHOICE_DONE RETURN 2250 BREAK ENDSWITCH BREAK CASE HEIST_AGENCY SWITCH eRPHeistState CASE RPHS_POI_OVERVIEW_DONE RETURN 3000 BREAK CASE RPHS_GAMEPLAY_CHOICE_DONE RETURN 0 BREAK CASE RPHS_CREW_CHOICE_DONE RETURN 2250 BREAK ENDSWITCH BREAK CASE HEIST_FINALE SWITCH eRPHeistState CASE RPHS_POI_OVERVIEW_DONE RETURN 3000 BREAK CASE RPHS_GAMEPLAY_CHOICE_DONE RETURN 0 BREAK CASE RPHS_CREW_CHOICE_DONE RETURN 2250 BREAK ENDSWITCH BREAK DEFAULT // not a heist BREAK ENDSWITCH RETURN 0 // not a heist or no wait time set ENDFUNC /// PURPOSE: /// Returns the int of the disaply group that this heist uses for the selected gameplay choice /// PARAMS: /// iHeist - the heist we are repeat playing /// bGameplayChoice - is this the gameplay choice? (if false, it must be the crew choice) /// RETURNS: /// the int of the display group used in this part of the heist planning board FUNC INT REPEAT_PLAY_GET_HEIST_CHOICE_DISPLAY_GROUP(INT iHeist, BOOL bGameplayChoice) SWITCH iHeist CASE HEIST_JEWEL IF bGameplayChoice = TRUE RETURN ENUM_TO_INT(PBDG_5) ELSE RETURN ENUM_TO_INT(PBDG_6) // Crew Selection ENDIF BREAK CASE HEIST_DOCKS IF bGameplayChoice = TRUE RETURN ENUM_TO_INT(PBDG_2) ELSE RETURN ENUM_TO_INT(PBDG_2) // Crew Selection ENDIF BREAK CASE HEIST_RURAL_BANK IF bGameplayChoice = TRUE RETURN ENUM_TO_INT(PBDG_2) ELSE RETURN ENUM_TO_INT(PBDG_2) // Crew Selection ENDIF BREAK CASE HEIST_AGENCY IF bGameplayChoice = TRUE RETURN ENUM_TO_INT(PBDG_4) ELSE RETURN ENUM_TO_INT(PBDG_5) // Crew Selection ENDIF BREAK CASE HEIST_FINALE IF bGameplayChoice = TRUE RETURN ENUM_TO_INT(PBDG_2) ELSE RETURN ENUM_TO_INT(PBDG_3) // Crew Selection ENDIF BREAK DEFAULT // not a heist BREAK ENDSWITCH RETURN -1 ENDFUNC /// PURPOSE: /// Checks a flowflag to see if the heist planning board is still being setup /// PARAMS: /// iHeist - the hesit that we are repeat playing /// RETURNS: /// True if the planning board is still being setup, false if it is ready to be displayed FUNC BOOL REPEAT_PLAY_IS_HEIST_BOARD_BEING_SETUP(INT iHeist) IF IS_CURRENTLY_ON_MISSION_TO_TYPE() = TRUE // when the planning board is ready it takes control of the on mission flag SWITCH iHeist CASE HEIST_JEWEL RETURN GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION) BREAK CASE HEIST_DOCKS RETURN GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_DOCKS_PRIME_BOARD_TRANSITION) BREAK CASE HEIST_RURAL_BANK RETURN GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_RURAL_LOAD_TREV_WIN_ENDING) BREAK CASE HEIST_AGENCY RETURN GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_AGENCY_PRIME_BOARD_TRANSITION) BREAK CASE HEIST_FINALE RETURN GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINALE_PRIME_BOARD_TRANSITION) BREAK DEFAULT// not a heist BREAK ENDSWITCH ENDIF RETURN TRUE // heist still being setup, or mission is not a heist ENDFUNC /// PURPOSE: /// Returns the name of the heist controller associated with the mission passed in /// PARAMS: /// eMission - the mission we are checking /// RETURNS: /// Name of the heist controller or "None" if there isn't an associated controller. FUNC STRING GET_HEIST_CONTROLLER_SCRIPT(SP_MISSIONS eMission) SWITCH eMission // ------AGENCY------ CASE SP_HEIST_AGENCY_1 CASE SP_HEIST_AGENCY_2 CASE SP_HEIST_AGENCY_PREP_1 CASE SP_HEIST_AGENCY_3A CASE SP_HEIST_AGENCY_3B RETURN "heist_ctrl_agency" BREAK // ------DOCKS / PORT OF LS------ CASE SP_HEIST_DOCKS_1 CASE SP_HEIST_DOCKS_2A CASE SP_HEIST_DOCKS_2B RETURN "heist_ctrl_docks" BREAK // ------FINALE / BIG SCORE------ CASE SP_HEIST_FINALE_1 CASE SP_HEIST_FINALE_2_INTRO CASE SP_HEIST_FINALE_PREP_A CASE SP_HEIST_FINALE_PREP_B CASE SP_HEIST_FINALE_PREP_C1 CASE SP_HEIST_FINALE_PREP_C2 CASE SP_HEIST_FINALE_PREP_C3 CASE SP_HEIST_FINALE_PREP_D CASE SP_HEIST_FINALE_2A CASE SP_HEIST_FINALE_2B RETURN "heist_ctrl_finale" BREAK // ------JEWELLRY / JEWEL STORE------ CASE SP_HEIST_JEWELRY_1 CASE SP_HEIST_JEWELRY_PREP_1A CASE SP_HEIST_JEWELRY_PREP_2A CASE SP_HEIST_JEWELRY_2 RETURN "heist_ctrl_jewel" BREAK // ------RURAL / PALETO------ CASE SP_HEIST_RURAL_1 CASE SP_HEIST_RURAL_PREP_1 CASE SP_HEIST_RURAL_2 RETURN "heist_ctrl_rural" BREAK DEFAULT RETURN "NONE" // other missions do not have an associated heist controller BREAK ENDSWITCH RETURN "NONE" ENDFUNC // --------------------------------REPEAT_PLAY_UNLOCKING FUNCTIONS ------------------------------------------- /// PURPOSE: /// Called after either Agency Heist finale PROC REPEAT_PLAY_DO_AGENCY_HEIST_COMPLETE() SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_AGENCY,TRUE) SET_DOOR_STATE(DOORNAME_SWEATSHOP_L, DOORSTATE_LOCKED) SET_DOOR_STATE(DOORNAME_SWEATSHOP_R, DOORSTATE_LOCKED) SET_BUILDING_STATE(BUILDINGNAME_IPL_HELIHOLE, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_AGENCY_HEIST_SWEATSHOP_BLUEPRINT, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_AGENCY_HEIST_SWEATSHOP_FIREMAN_GEAR, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_AGENCY_HEIST_SWEATSHOP_OVERALLS, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_NO_INTERIOR, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_WITH_INTERIOR, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_LOD_DOOR, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_BURNT, BUILDINGSTATE_CLEANUP ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_WINDOW_LIGHTS, BUILDINGSTATE_DESTROYED ) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_AGENCY_PREP_FIRETRUCK,FALSE) SET_BUILDING_STATE(BUILDINGNAME_IPL_FIB_REPAIR, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_FIB_C4, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_HELIHOLE, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_FIB_HOLE_PLUG, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_FIB_RUBBLE, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_MS_FIB_DAMAGE_HLOD, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_MS_FIB_DAMAGE_LOD, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_MS_FIB_DAMAGE_SLOD, BUILDINGSTATE_NORMAL) ENDPROC #endif #endif //============================================ END HEIST ONLY STUFF =========================================== /// PURPOSE: /// Wraps the 2 commands needed to set savehouse state /// PARAMS: /// eSavehouse - which savehouse we are altering /// bRespawnAvailable - is a respawn available at this savehouse? /// bLongRangeBlip - should this savehouse have a long range blip? PROC REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_NAME_ENUM eSavehouse, BOOL bRespawnAvailable, BOOL bLongRangeBlip) SET_SAVEHOUSE_RESPAWN_AVAILABLE(eSavehouse, bRespawnAvailable) SET_SAVEHOUSE_RESPAWN_BLIP_LONG_RANGE(eSavehouse, bLongRangeBlip) ENDPROC /// PURPOSE: /// Wraps the 2 commands needed to set special ability state /// PARAMS: /// ePed - the ped we are altering /// bState - true to unlock, false to lock PROC REPEAT_PLAY_SET_SPECIAL_ABILITY_STATE(enumCharacterList ePed, BOOL bState) #if USE_CLF_DLC IF bState = TRUE SPECIAL_ABILITY_UNLOCK(GET_PLAYER_PED_MODEL(ePed)) g_savedGlobalsClifford.sPlayerData.sInfo.bSpecialAbilityUnlocked[ePed] = TRUE ELSE SPECIAL_ABILITY_LOCK(GET_PLAYER_PED_MODEL(ePed)) g_savedGlobalsClifford.sPlayerData.sInfo.bSpecialAbilityUnlocked[ePed] = FALSE ENDIF #endif #if USE_NRM_DLC IF bState = TRUE SPECIAL_ABILITY_UNLOCK(GET_PLAYER_PED_MODEL(ePed)) g_savedGlobalsnorman.sPlayerData.sInfo.bSpecialAbilityUnlocked[ePed] = TRUE ELSE SPECIAL_ABILITY_LOCK(GET_PLAYER_PED_MODEL(ePed)) g_savedGlobalsnorman.sPlayerData.sInfo.bSpecialAbilityUnlocked[ePed] = FALSE ENDIF #endif #if not USE_CLF_DLC #if not USE_NRM_DLC IF bState = TRUE SPECIAL_ABILITY_UNLOCK(GET_PLAYER_PED_MODEL(ePed)) g_savedGlobals.sPlayerData.sInfo.bSpecialAbilityUnlocked[ePed] = TRUE ELSE SPECIAL_ABILITY_LOCK(GET_PLAYER_PED_MODEL(ePed)) g_savedGlobals.sPlayerData.sInfo.bSpecialAbilityUnlocked[ePed] = FALSE ENDIF #endif #endif ENDPROC /// PURPOSE: /// Wraps the commands needed to activate a Random Character mission /// PARAMS: /// RC_MissionID - the RC mission we are activating /// bFullyActivated - fully activate this mission? PROC REPEAT_PLAY_ACTIVATE_RC_MISSION(g_eRC_MissionIDs RC_MissionID, BOOL bFullyActivated) SET_BIT(g_savedGlobals.sRandomChars.savedRC[RC_MissionID].rcFlags, ENUM_TO_INT(RC_FLAG_ACTIVATED_IN_FLOW)) // Only set the activated flag if told to IF bFullyActivated = TRUE RANDOM_CHARACTER_ACTIVATE_MISSION(RC_MissionID) ENDIF ENDPROC /// PURPOSE: /// Wraps the commands needed to set a weapon lock state /// PARAMS: /// eWeapon - the weapon we are altering /// bUnlocked - true unlocks the weapon, false locks it PROC REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPON_TYPE eWeapon, BOOL bUnlocked) SET_PLAYER_PED_WEAPON_UNLOCKED(CHAR_MICHAEL, eWeapon, bUnlocked) SET_PLAYER_PED_WEAPON_UNLOCKED(CHAR_TREVOR, eWeapon, bUnlocked) SET_PLAYER_PED_WEAPON_UNLOCKED(CHAR_FRANKLIN, eWeapon, bUnlocked) ENDPROC /// PURPOSE: /// Activates or deactivates the tracking of Franklin's outfit changes /// PARAMS: /// bActivate - if TRUE we start tracking, FALSE we stop #if not USE_CLF_DLC #if not USE_NRM_DLC PROC REPEAT_PLAY_SET_FRANKLIN_OUTFIT_BITSET_STATE(BOOL bActivate) IF bActivate = FALSE // de-activating Set_Mission_Flow_Bitset_Bit_State(FLOWBITSET_FRANKLIN_CHANGED_OUTFIT, BITS_CHARACTER_REQUEST_ACTIVE, FALSE) ELSE // Activating // Don't record Franklin's clothes, as this will already have been saved in the normal playthrough //Activate “change your clothes” request. Set_Mission_Flow_Bitset_Bit_State(FLOWBITSET_FRANKLIN_CHANGED_OUTFIT, BITS_CHARACTER_REQUEST_ACTIVE, TRUE) ENDIF ENDPROC #endif #endif /// PURPOSE: /// Requests and launches a script /// PARAMS: /// sScriptName - name of script PROC REPEAT_PLAY_LAUNCH_SCRIPT_AND_FORGET(STRING sScriptName, INT iStackSize = DEFAULT_STACK_SIZE) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sScriptName)) > 0 EXIT ENDIF REQUEST_SCRIPT(sScriptName) WHILE NOT HAS_SCRIPT_LOADED(sScriptName) CPRINTLN(DEBUG_REPEAT, "Waiting for script to load", sScriptName) WAIT(0) ENDWHILE START_NEW_SCRIPT(sScriptName, iStackSize) SET_SCRIPT_AS_NO_LONGER_NEEDED(sScriptName) ENDPROC /// PURPOSE: /// Skips over the specified RC mission and unlocks / locks anything that this should trigger. /// PARAMS: /// eRCMission - the mission we are skipping /// bSkipToBefore - are we skipping to before this mission triggers (if false we skip to after this mission has been completed) PROC REPEAT_PLAY_SKIP_RC_MISSION(g_eRC_MissionIDs eRCMission, BOOL bSkipToBefore = FALSE) #if USE_CLF_DLC eRCMission = eRCMission bSkipToBefore = bSkipToBefore #endif #if USE_NRM_DLC eRCMission = eRCMission bSkipToBefore = bSkipToBefore #endif #if not USE_CLF_DLC #if not USE_NRM_DLC CPRINTLN(DEBUG_REPEAT,"REPEAT_PLAY_SKIP_RC_MISSION skipping : ", GET_RC_MISSION_DISPLAY_STRING_FROM_ID(eRCMission)) SWITCH eRCMission CASE RC_ABIGAIL_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_ABIGAIL, MICHAEL_BOOK, FALSE) ENDIF BREAK CASE RC_ABIGAIL_2 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_ABIGAIL, MICHAEL_BOOK, FALSE) ENDIF BREAK CASE RC_BARRY_1 IF bSkipToBefore = TRUE ELSE // ADD_CONTACT_TO_PHONEBOOK(CHAR_BARRY, MICHAEL_BOOK, FALSE) ENDIF BREAK CASE RC_BARRY_2 IF bSkipToBefore = TRUE ELSE // ADD_CONTACT_TO_PHONEBOOK(CHAR_BARRY, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_BARRY_3 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_BARRY, FRANKLIN_BOOK, FALSE) ENDIF BREAK CASE RC_BARRY_3A IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_BARRY_3C IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_BARRY_4 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_DREYFUSS_1 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_EPSILON_1 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_QUESTIONNAIRE_DONE, TRUE) ELSE ENDIF BREAK CASE RC_EPSILON_2 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_500, TRUE) ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_MARNIE, MICHAEL_BOOK, FALSE) ENDIF BREAK CASE RC_EPSILON_3 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_5000, TRUE) ELSE ENDIF BREAK CASE RC_EPSILON_4 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_CARS_DONE, TRUE) ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_JIMMY_BOSTON, MICHAEL_BOOK, FALSE) ENDIF BREAK CASE RC_EPSILON_5 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_10000, TRUE) ELSE ENDIF BREAK CASE RC_EPSILON_6 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_ROBES_BOUGHT, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_ROBES_DONE, TRUE) ELSE ENDIF BREAK CASE RC_EPSILON_7 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_EPSILON_8 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DESERT_DONE, TRUE) ELSE ENDIF BREAK CASE RC_EXTREME_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_DOM, FRANKLIN_BOOK, FALSE) ENDIF BREAK CASE RC_EXTREME_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_EXTREME_3 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_EXTREME_4 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_FANATIC_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_MARY_ANN, MICHAEL_BOOK, FALSE) ENDIF BREAK CASE RC_FANATIC_2 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_MARY_ANN, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_FANATIC_3 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_MARY_ANN, FRANKLIN_BOOK, FALSE) ENDIF BREAK CASE RC_HAO_1 BREAK CASE RC_HUNTING_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_HUNTER, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_HUNTING_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_JOSH_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_JOSH, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_JOSH_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_JOSH_3 IF bSkipToBefore = TRUE ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_JOSHHOUSE, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE RC_JOSH_4 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_MAUDE_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_MAUDE, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_MINUTE_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_JOE, TREVOR_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_JOSEF, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_MINUTE_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_MINUTE_3 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_MANUEL, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_MRS_PHILIPS_1 BREAK CASE RC_MRS_PHILIPS_2 BREAK CASE RC_NIGEL_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_NIGEL, TREVOR_BOOK, FALSE) ENDIF BREAK CASE RC_NIGEL_1A IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_NIGEL_1B IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_NIGEL_1C IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_NIGEL_1D IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_NIGEL_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_NIGEL_3 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_OMEGA_1 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_OMEGA_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_PAPARAZZO_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_BEVERLY, FRANKLIN_BOOK, FALSE) ENDIF BREAK CASE RC_PAPARAZZO_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_PAPARAZZO_3 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_PAPARAZZO_3A IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_PAPARAZZO_3B IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_PAPARAZZO_4 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_RAMPAGE_1 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_RAMPAGE_2 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_RAMPAGE_3 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_RAMPAGE_4 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_RAMPAGE_5 IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_THELASTONE IF bSkipToBefore = TRUE ELSE ENDIF BREAK CASE RC_TONYA_1 IF bSkipToBefore = TRUE ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_TOW_TONYA, FRANKLIN_BOOK, FALSE) ENDIF BREAK CASE RC_TONYA_2 BREAK CASE RC_TONYA_3 BREAK CASE RC_TONYA_4 BREAK CASE RC_TONYA_5 BREAK DEFAULT CPRINTLN(DEBUG_REPEAT,"REPEAT_PLAY_SKIP_RC_MISSION tried to skip invalid mission: ", eRCMission) SCRIPT_ASSERT("REPEAT_PLAY_SKIP_RC_MISSION trying to skip unknown mission. Bug for Andy Minghella") BREAK ENDSWITCH #endif #endif ENDPROC /// PURPOSE: /// Blocks or unblocks a friend contact /// PARAMS: /// eFriendOwner - character who has this friend /// eFriend - the friend /// bBlock - TRUE = block, FALSE = unblock PROC REPEAT_PLAY_BLOCK_FRIEND_CONTACT(enumCharacterList eFriendOwner, enumCharacterList eFriend, BOOL bBlock) IF bBlock //Block the friend for the player char. IF IS_FRIEND_BLOCK_FLAG_SET(eFriendOwner, eFriend, FRIEND_BLOCK_FLAG_HIATUS) EXIT ENDIF SET_FRIEND_BLOCK_FLAG(eFriendOwner, eFriend, FRIEND_BLOCK_FLAG_HIATUS) ELSE //Unblock the friend for the player char. IF NOT IS_FRIEND_BLOCK_FLAG_SET(eFriendOwner, eFriend, FRIEND_BLOCK_FLAG_HIATUS) EXIT ENDIF CLEAR_FRIEND_BLOCK_FLAG(eFriendOwner,eFriend, FRIEND_BLOCK_FLAG_HIATUS) ENDIF ENDPROC /// PURPOSE: /// Prevents friend clashes /// PARAMS: /// eFriendOwner - character who has this friend /// eFriend - the friend /// bBlock - TRUE = block, FALSE = unblock PROC REPEAT_PLAY_BLOCK_FRIEND_CLASH(enumCharacterList eFriendOwner, enumCharacterList eFriend, BOOL bBlock = FALSE) IF bBlock //Block the friend for the player char. IF IS_FRIEND_BLOCK_FLAG_SET(eFriendOwner, eFriend, FRIEND_BLOCK_FLAG_CLASH) EXIT ENDIF SET_FRIEND_BLOCK_FLAG(eFriendOwner, eFriend, FRIEND_BLOCK_FLAG_CLASH) ELSE //Unblock the friend for the player char. IF NOT IS_FRIEND_BLOCK_FLAG_SET(eFriendOwner, eFriend, FRIEND_BLOCK_FLAG_CLASH) EXIT ENDIF CLEAR_FRIEND_BLOCK_FLAG(eFriendOwner, eFriend, FRIEND_BLOCK_FLAG_CLASH) ENDIF ENDPROC /// PURPOSE: /// Skips over the specified story mission and unlocks / locks anything that this should trigger. /// PARAMS: /// eMission - the mission we are skipping /// bSkipToBefore - are we skipping to before this mission triggers (if false we skip to after this mission has been completed) /// bTargetMission - is this the mission we are wanting to repeat play? /// eFinaleCompleted - which finale did the player (used to not do setup for other finales) #if USE_CLF_DLC PROC REPEAT_PLAY_SKIP_STORY_MISSION_CLF(SP_MISSIONS eMission, BOOL bSkipToBefore, BOOL bTargetMission, SP_MISSIONS eFinaleCompleted) #IF IS_DEBUG_BUILD IF bSkipToBefore CPRINTLN(DEBUG_REPEAT,"Skipping before mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission)) ELSE CPRINTLN(DEBUG_REPEAT,"Skipping mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission)) ENDIF #ENDIF UNUSED_PARAMETER(bTargetMission) UNUSED_PARAMETER(eFinaleCompleted) SWITCH eMission CASE SP_MISSION_CLF_TRAIN CASE SP_MISSION_CLF_FIN CASE SP_MISSION_CLF_IAA_LIE CASE SP_MISSION_CLF_IAA_TRA CASE SP_MISSION_CLF_IAA_JET CASE SP_MISSION_CLF_IAA_HEL CASE SP_MISSION_CLF_IAA_DRO CASE SP_MISSION_CLF_IAA_RTS CASE SP_MISSION_CLF_KOR_PRO CASE SP_MISSION_CLF_KOR_RES CASE SP_MISSION_CLF_KOR_SUB CASE SP_MISSION_CLF_KOR_SAT CASE SP_MISSION_CLF_KOR_5 CASE SP_MISSION_CLF_RUS_PLA CASE SP_MISSION_CLF_RUS_CAR CASE SP_MISSION_CLF_RUS_VAS CASE SP_MISSION_CLF_RUS_SAT CASE SP_MISSION_CLF_RUS_JET CASE SP_MISSION_CLF_RUS_CLK CASE SP_MISSION_CLF_ARA_1 CASE SP_MISSION_CLF_ARA_DEF CASE SP_MISSION_CLF_ARA_FAKE CASE SP_MISSION_CLF_ARA_TNK CASE SP_MISSION_CLF_CAS_SET CASE SP_MISSION_CLF_CAS_PR1 CASE SP_MISSION_CLF_CAS_PR2 CASE SP_MISSION_CLF_CAS_PR3 CASE SP_MISSION_CLF_CAS_HEI CASE SP_MISSION_CLF_ASS_POL CASE SP_MISSION_CLF_ASS_RET CASE SP_MISSION_CLF_ASS_CAB CASE SP_MISSION_CLF_ASS_GEN CASE SP_MISSION_CLF_ASS_SUB CASE SP_MISSION_CLF_ASS_HEL CASE SP_MISSION_CLF_ASS_VIN CASE SP_MISSION_CLF_ASS_HNT CASE SP_MISSION_CLF_ASS_SKY CASE SP_MISSION_CLF_RC_ALEX_GRND CASE SP_MISSION_CLF_RC_ALEX_AIR CASE SP_MISSION_CLF_RC_ALEX_UNDW CASE SP_MISSION_CLF_RC_ALEX_RWRD CASE SP_MISSION_CLF_RC_MEL_MONT CASE SP_MISSION_CLF_RC_MEL_AIRP CASE SP_MISSION_CLF_RC_MEL_WING CASE SP_MISSION_CLF_RC_MEL_DIVE CASE SP_MISSION_CLF_RC_AGN_BODY CASE SP_MISSION_CLF_RC_AGN_RCPT CASE SP_MISSION_CLF_RC_AGN_ESCP CASE SP_MISSION_CLF_RC_CLA_HACK CASE SP_MISSION_CLF_RC_CLA_DRUG CASE SP_MISSION_CLF_RC_CLA_FIN IF bSkipToBefore = TRUE // nothing to do ELSE // nothing to do ENDIF BREAK DEFAULT CERRORLN(DEBUG_REPEAT, "REPEAT_PLAY_SKIP_STORY_MISSION trying to skip unknown mission. eMission =", eMission) SCRIPT_ASSERT("REPEAT_PLAY_SKIP_STORY_MISSION trying to skip unknown mission. Bug for Andy Minghella") BREAK ENDSWITCH ENDPROC #endif #if USE_NRM_DLC PROC REPEAT_PLAY_SKIP_STORY_MISSION_NRM(SP_MISSIONS eMission, BOOL bSkipToBefore, BOOL bTargetMission, SP_MISSIONS eFinaleCompleted) #IF IS_DEBUG_BUILD IF bSkipToBefore CPRINTLN(DEBUG_REPEAT,"Skipping before mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission)) ELSE CPRINTLN(DEBUG_REPEAT,"Skipping mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission)) ENDIF #ENDIF UNUSED_PARAMETER(bTargetMission) UNUSED_PARAMETER(eFinaleCompleted) SWITCH eMission CASE SP_MISSION_NRM_SUR_START CASE SP_MISSION_NRM_SUR_AMANDA CASE SP_MISSION_NRM_SUR_TRACEY CASE SP_MISSION_NRM_SUR_MICHAEL CASE SP_MISSION_NRM_SUR_HOME CASE SP_MISSION_NRM_SUR_JIMMY CASE SP_MISSION_NRM_SUR_PARTY CASE SP_MISSION_NRM_SUR_CURE CASE SP_MISSION_NRM_RESCUE_ENG CASE SP_MISSION_NRM_RESCUE_MED CASE SP_MISSION_NRM_RESCUE_GUN CASE SP_MISSION_NRM_SUP_FUEL CASE SP_MISSION_NRM_SUP_AMMO CASE SP_MISSION_NRM_SUP_MEDS CASE SP_MISSION_NRM_SUP_FOOD CASE SP_MISSION_NRM_RADIO_A CASE SP_MISSION_NRM_RADIO_B CASE SP_MISSION_NRM_RADIO_C IF bSkipToBefore = TRUE // nothing to do ELSE // nothing to do ENDIF BREAK DEFAULT CERRORLN(DEBUG_REPEAT, "REPEAT_PLAY_SKIP_STORY_MISSION trying to skip unknown mission. eMission =", eMission) SCRIPT_ASSERT("REPEAT_PLAY_SKIP_STORY_MISSION trying to skip unknown mission. Bug for Andy Minghella") BREAK ENDSWITCH ENDPROC #endif PROC REPEAT_PLAY_SKIP_STORY_MISSION(SP_MISSIONS eMission, BOOL bSkipToBefore, BOOL bTargetMission, SP_MISSIONS eFinaleCompleted) #if USE_CLF_DLC REPEAT_PLAY_SKIP_STORY_MISSION_CLF(eMission,bSkipToBefore,bTargetMission,eFinaleCompleted) exit #endif #if USE_NRM_DLC REPEAT_PLAY_SKIP_STORY_MISSION_NRM(eMission,bSkipToBefore,bTargetMission,eFinaleCompleted) exit #endif #if not USE_CLF_DLC #if not USE_NRM_DLC #IF IS_DEBUG_BUILD IF bSkipToBefore CPRINTLN(DEBUG_REPEAT,"Skipping before mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission)) ELSE CPRINTLN(DEBUG_REPEAT,"Skipping mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission)) ENDIF #ENDIF #IF USE_TU_CHANGES BOOL bMissionSkipped = TRUE IF bSkipToBefore OR bTargetMission bMissionSkipped = FALSE ENDIF #ENDIF SWITCH eMission // --------------ARMENIAN STRAND ------------------------------------------ CASE SP_MISSION_ARMENIAN_1 IF bSkipToBefore = TRUE // nothing to do ELSE REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_FRANKLIN_SC, TRUE, TRUE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_MICHAEL_PRO, FALSE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_FRANKLIN_PRO, FALSE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_PRO, FALSE, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN_FRANKLIN, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_TAXI, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_TAXI, FRANKLIN_BOOK, FALSE) Execute_Code_ID(CID_TAXI_HAILING_ENABLE, 0) Execute_Code_ID(CID_UNLOCK_WATER_VEHICLE_SCUBA_GEAR, 0) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_FRANKLIN_SAVEHOUSE_CAR, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_AIRPORT_VEHICLE, TRUE) REPEAT_PLAY_SET_SPECIAL_ABILITY_STATE(CHAR_FRANKLIN, TRUE) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("ambientBlimp") Not needed REPEAT_PLAY_LAUNCH_SCRIPT_AND_FORGET("controller_taxi") Execute_Code_ID(CID_ACTIVATE_FAIRGROUND, 0) Execute_Code_ID(CID_ACTIVATE_SHOP_BARBERS, 0) Execute_Code_ID(CID_ACTIVATE_SHOP_CARMOD, 0) Execute_Code_ID(CID_ACTIVATE_GUNSHOP_AND_RANGE, 0) Execute_Code_ID(CID_ACTIVATE_MINIGAME_STRIPCLUB, 0) SET_DOOR_STATE(DOORNAME_STRIPCLUB_F, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_STRIPCLUB_R, DOORSTATE_UNLOCKED) ENDIF BREAK CASE SP_MISSION_ARMENIAN_2 IF bSkipToBefore = TRUE // nothing to do ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_ARM2_SCAFFOLDING, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_FRANKLIN_OUTFIT_BITSET_STATE(TRUE) SUPPRESS_MOTORBIKES(FALSE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_PISTOL, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_MICROSMG, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_KNIFE, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_PUMPSHOTGUN, TRUE) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_SHUTTERS, BUILDINGSTATE_DESTROYED) // Close the rear shutters Execute_Code_ID(CID_STRETCH_TEXT_SENT) // Check! ADD_CONTACT_TO_PHONEBOOK(CHAR_AMANDA, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_JIMMY, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_TRACEY, MICHAEL_BOOK, FALSE) ADD_CHAR_AS_CHAR_FRIEND(CHAR_LAMAR, CHAR_FRANKLIN) ADD_CHAR_AS_CHAR_FRIEND(CHAR_JIMMY, CHAR_MICHAEL) ADD_CHAR_AS_CHAR_FRIEND(CHAR_AMANDA, CHAR_MICHAEL) ENDIF BREAK CASE SP_MISSION_ARMENIAN_3 IF bSkipToBefore = TRUE // nothing to do ELSE REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_MICHAEL_BH, TRUE, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MICHAEL_SAVEHOUSE, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_BJXL_CRASH_POST_ARM3, TRUE) // Set the car showroom destroyed SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_SHUTTERS, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_WINDOWS, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_CAR_SHOWROOM_LOD_BOARD, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE1, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE2, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE3, BUILDINGSTATE_DESTROYED) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("SH_Intro_M_Home") Not needed Execute_Code_ID(CID_QUEUE_BAGGER_TEXT_AND_UNLOCK_YETARIAN) // Check! SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_PISTOL, TRUE) ENDIF BREAK // -------------ASSASSINATION STRAND -------------------------------------------- CASE SP_MISSION_ASSASSIN_1 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ASS1_UNLOCKED, TRUE) ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ASS1_UNLOCKED, TRUE) // SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("SH_Intro_F_Hills") //not needed Execute_Code_ID(CID_FRANKLIN_UNLOCK_HILLS_SAVEHOUSE) ENDIF BREAK CASE SP_MISSION_ASSASSIN_2 IF bSkipToBefore = TRUE // nothing to do ELSE // nothing to do ENDIF BREAK CASE SP_MISSION_ASSASSIN_3 IF bSkipToBefore = TRUE // nothing to do ELSE // nothing to do ENDIF BREAK CASE SP_MISSION_ASSASSIN_4 IF bSkipToBefore = TRUE // nothing to do ELSE // nothing to do ENDIF BREAK CASE SP_MISSION_ASSASSIN_5 IF bSkipToBefore = TRUE // nothing to do ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ASS_COMPLETED, TRUE) ENDIF BREAK // ---------------CAR STEAL STRAND------------------------------------------- CASE SP_MISSION_CARSTEAL_1 IF bSkipToBefore = TRUE SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_GARAGE, BUILDINGSTATE_DESTROYED) SET_DOOR_STATE(DOORNAME_CARSTEAL_GARAGE_F, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_CARSTEAL_GARAGE_S, DOORSTATE_UNLOCKED) SET_FRIEND_BLOCK_FLAG(CHAR_MICHAEL, CHAR_FRANKLIN, FRIEND_BLOCK_FLAG_MISSION, SP_MISSION_CARSTEAL_3) SET_FRIEND_BLOCK_FLAG(CHAR_FRANKLIN,CHAR_TREVOR, FRIEND_BLOCK_FLAG_MISSION, SP_MISSION_CARSTEAL_3) SET_FRIEND_BLOCK_FLAG(CHAR_TREVOR, CHAR_MICHAEL, FRIEND_BLOCK_FLAG_MISSION, SP_MISSION_CARSTEAL_3) ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_ENTITYXF, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_CHEETAH, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TRASH_COP_UNIFORM, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TIDY_COP_UNIFORM, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_NORMAL_COP_UNIFORM, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_WEAPON_LOCK_STATE (WEAPONTYPE_NIGHTSTICK, TRUE) Execute_Code_ID(CID_CARMOD_UNLOCK_STAGE_3, 0) ADD_CONTACT_TO_PHONEBOOK(CHAR_DEVIN, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_MOLLY, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_DEVIN, TREVOR_BOOK, FALSE) ENDIF BREAK CASE SP_MISSION_CARSTEAL_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_ZTYPE, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_MISSION_CARSTEAL_3 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_JB700, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_HILLS_TUXEDO, BUILDINGSTATE_DESTROYED) SET_FRIEND_BLOCK_FLAG(CHAR_FRANKLIN, CHAR_LAMAR, FRIEND_BLOCK_FLAG_MISSION, SP_MISSION_CARSTEAL_4) SET_FRIEND_BLOCK_FLAG(CHAR_FRANKLIN, CHAR_TREVOR, FRIEND_BLOCK_FLAG_MISSION, SP_MISSION_CARSTEAL_4) ENDIF BREAK CASE SP_MISSION_CARSTEAL_4 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_ENTITYXF, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_CHEETAH, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_ZTYPE, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_JB700, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARSTEAL_GARAGE, BUILDINGSTATE_CLEANUP) ENDIF BREAK // ---------------CHINESE STRAND------------------------------------------- CASE SP_MISSION_CHINESE_1 IF bSkipToBefore = TRUE SET_DOOR_STATE(DOORNAME_METHLAB_F_L, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_METHLAB_F_R, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_METHLAB_R, DOORSTATE_UNLOCKED) ELSE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_GRENADELAUNCHER, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_CHENG, TREVOR_BOOK, FALSE) ENDIF BREAK CASE SP_MISSION_CHINESE_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_FARM_HOUSE, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_FARM_HOUSE_CLNUP1, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_FARM_HOUSE_CLNUP2, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_FARM_HOUSE_CLNUP3, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_FARM_HOUSE_INTERIOR, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_IPL_FARM_HOUSE_OCCLUSION, BUILDINGSTATE_CLEANUP) Execute_Code_ID(CID_ENABLE_LOST_SCENARIO_GROUP, 0) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_SAWNOFFSHOTGUN, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_PETROLCAN, TRUE) ENDIF BREAK // --------------EXILE STRAND------------------------------------------------ CASE SP_MISSION_EXILE_1 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_TREVOR_EXILE_STARTED, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MIC_HAS_HAGGARD_SUIT, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_TREVORS_TRAILER, BUILDINGSTATE_NORMAL) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("exile_city_denial") not needed Execute_Code_ID(CID_DEACTIVATE_EXILE_BLIPS, 0) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_FRANKLIN, CHAR_MICHAEL, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_FRANKLIN, CHAR_TREVOR, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_JIMMY, CHAR_FRANKLIN, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_LAMAR, CHAR_TREVOR, TRUE) ELSE SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE) SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_TREVORS_TRAILER, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARGOPLANE, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(GADGETTYPE_PARACHUTE, TRUE) Execute_Code_ID(CID_UNLOCK_AIR_VEHICLE_PARACHUTE, 0) Execute_Code_ID(CID_UNLOCK_EXILE1_PICKUPS, 0) ENDIF BREAK CASE SP_MISSION_EXILE_2 IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_HEAVYSNIPER, TRUE) ENDIF BREAK CASE SP_MISSION_EXILE_3 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_EXL3_TRAIN_CRASH, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_EXL3_TRAIN_CRASH_2, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_RF_GASSTATION01, BUILDINGSTATE_NORMAL) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MICHAEL_SAVEHOUSE, TRUE) ENDIF BREAK // --------------FAMILY STRAND------------------------------------------------ CASE SP_MISSION_FAMILY_1 IF bSkipToBefore = TRUE // nothing to be done ELSE ADD_CHAR_AS_CHAR_FRIEND(CHAR_JIMMY, CHAR_FRANKLIN) ADD_CONTACT_TO_PHONEBOOK(CHAR_FRANKLIN, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_MICHAEL, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_JIMMY, FRANKLIN_BOOK, FALSE) //Execute_Code_ID(CID_ACTIVATE_CAR_SAVE_GARAGES, 0) not needed SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_SHUTTERS, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_WINDOWS, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_IPL_CAR_SHOWROOM_LOD_BOARD, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE1, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE2, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE3, BUILDINGSTATE_CLEANUP) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_BJXL_CRASH_POST_ARM3, FALSE) REPEAT_PLAY_SET_SPECIAL_ABILITY_STATE(CHAR_MICHAEL, TRUE) Execute_Code_ID(CID_UNLOCK_LAMAR_1, 0) // check Execute_Code_ID(CID_FAMILY1_FRANKLIN_GATE_UNLOCK, 0) // check ENDIF BREAK CASE SP_MISSION_FAMILY_3 // family 3 comes before family 2 now IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_RF_STILT_HOUSE, BUILDINGSTATE_DESTROYED) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREVOR_RESTRICTED_TO_COUNTRY, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_LESTER, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_MARTIN, Michael_BOOK, FALSE) ENDIF BREAK CASE SP_MISSION_FAMILY_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_CRUISESHIP, BUILDINGSTATE_DESTROYED) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MIC_HIDE_BARE_CHEST, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MOUNTAIN_BIKE_CH, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_SEASHARK_SM, TRUE) ENDIF BREAK CASE SP_MISSION_FAMILY_4 IF bSkipToBefore = TRUE // nothing to be done ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_JIMMY, TREVOR_BOOK, FALSE) ADD_CHAR_AS_CHAR_FRIEND(CHAR_JIMMY, CHAR_TREVOR) ADD_CONTACT_TO_PHONEBOOK(CHAR_MARTIN, Michael_BOOK, FALSE) SET_BUILDING_STATE(BUILDINGNAME_RF_STILT_HOUSE, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT, BUILDINGSTATE_DESTROYED) #IF NOT IS_JAPANESE_BUILD SET_BUILDING_STATE (BUILDINGNAME_ES_FLOYDS_APPARTMENT_SEX_TOYS, BUILDINGSTATE_DESTROYED) #ENDIF SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_WHISKY, BUILDINGSTATE_DESTROYED ) SET_BUILDING_STATE(BUILDINGNAME_ES_TRACEY_BEDROOM_FAME_OR_SHAME, BUILDINGSTATE_DESTROYED) ADD_CONTACT_TO_PHONEBOOK(CHAR_MICHAEL, TREVOR_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_TREVOR, MICHAEL_BOOK, FALSE) ADD_CHAR_AS_CHAR_FRIEND(CHAR_MICHAEL, CHAR_TREVOR) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_TRACEYS_STUFF, BUILDINGSTATE_DESTROYED) SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE) ENDIF BREAK CASE SP_MISSION_FAMILY_5 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_AMANDAS_STUFF, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_JIMMYS_STUFF, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_LOUNGE_STUFF, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_MICHAEL_BED, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_DINING_ROOM_DEAD_FLOWERS, BUILDINGSTATE_DESTROYED) // Flowers dying on the dining room table. SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_AMANDA_HAVE_SPLIT, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_AMANDA, CHAR_MICHAEL, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_JIMMY, CHAR_MICHAEL, TRUE) Execute_Code_ID(CID_FAM5_JIMMYTAKE) // check Execute_Code_ID(CID_DEACTIVATE_MICHAEL_TENNIS, 0) // check Execute_Code_ID(CID_ACTIVE_SHINE_A_LIGHT, 0) // check ENDIF BREAK CASE SP_MISSION_FAMILY_6 IF bSkipToBefore = TRUE // nothing to be done ELSE Execute_Code_ID(CID_UNLOCK_AGENCY_HEIST_2) // check REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_AMANDA, CHAR_MICHAEL, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_JIMMY, CHAR_MICHAEL, FALSE) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_TRACEYS_STUFF, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_AMANDAS_STUFF, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_JIMMYS_STUFF, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_LOUNGE_STUFF, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_MICHAEL_BED, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_MIC_DINING_ROOM_DEAD_FLOWERS, BUILDINGSTATE_NORMAL) ENDIF BREAK // --------------FBI STRAND------------------------------------------------ CASE SP_MISSION_FBI_1 IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_COMBATPISTOL, TRUE) SET_BUILDING_STATE(BUILDINGNAME_RF_STILT_HOUSE, BUILDINGSTATE_NORMAL) ENDIF BREAK CASE SP_MISSION_FBI_2 IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_APPISTOL, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_HEAVYSNIPER, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_STEVE, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_TREVOR, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_FRANKLIN, TREVOR_BOOK, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_MICHAEL, CHAR_FRANKLIN, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_FRANKLIN, CHAR_TREVOR, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_TREVOR, CHAR_MICHAEL, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MISSION_FBI_3_CALLS_DONE, FALSE) Execute_Code_ID(CID_FBI_3_CALLS_COMPLETE) // check ENDIF BREAK CASE SP_MISSION_FBI_3 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_TORTURE_TOOLS, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_MICHAEL, CHAR_FRANKLIN, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_FRANKLIN, CHAR_TREVOR, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_TREVOR, CHAR_MICHAEL, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_STEVE, FRANKLIN_BOOK, FALSE) ENDIF BREAK CASE SP_MISSION_FBI_4_INTRO IF bSkipToBefore = TRUE // nothing to be done ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_STEVE, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_DAVE, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_DAVE, TREVOR_BOOK, FALSE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_RPG, TRUE) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("FBI4_Prep3Amb", FRIEND_STACK_SIZE) not needed Execute_Code_ID(CID_FBI4_P3_DONE_REMINDER) ENDIF BREAK CASE SP_MISSION_FBI_4_PREP_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_VEHICLE_GEN_AVAILABLE(VEHGEN_FBI4_TRASH, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MISSION_FBI_4_CALLS_DONE, FALSE) Execute_Code_ID(CID_FBI_4_CALLS_COMPLETE, 0) SET_BUILDING_STATE(BUILDINGNAME_ES_FIB4_SWEATSHOP_KITBAG, BUILDINGSTATE_NORMAL) ENDIF BREAK CASE SP_MISSION_FBI_4_PREP_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_VEHICLE_GEN_AVAILABLE(VEHGEN_FBI4_TOWING, TRUE) ENDIF BREAK CASE SP_MISSION_FBI_4_PREP_3 IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_FBI_4_PREP_4 IF bSkipToBefore = TRUE Execute_Code_ID(CID_ACTIVATE_SHOP_CLOTHES_AMB, 0) ELSE Execute_Code_ID(CID_ACTIVATE_SHOP_CLOTHES_AMB, 0) SET_BUILDING_STATE(BUILDINGNAME_ES_FIB4_SWEATSHOP_KITBAG, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_MISSION_FBI_4_PREP_5 IF bSkipToBefore = TRUE SET_BUILDING_STATE(BUILDINGNAME_ES_FIB4_SWEATSHOP_KITBAG, BUILDINGSTATE_NORMAL) ELSE SET_SHOP_IS_AVAILABLE(GUN_SHOP_01_DT, TRUE) ENDIF BREAK CASE SP_MISSION_FBI_4 IF bSkipToBefore = TRUE SET_VEHICLE_GEN_AVAILABLE(VEHGEN_FBI4_TOWING, FALSE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_FBI4_TRASH, FALSE) ELSE Execute_Code_ID(CID_CAR1TEXT_UNLOCK)// check ADD_CONTACT_TO_PHONEBOOK(CHAR_DEVIN, MICHAEL_BOOK, FALSE) SET_BUILDING_STATE(BUILDINGNAME_RF_HEAT_WALL, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_MESS_2, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_HILLS_SAVEHOUSE_SHOWHOME, BUILDINGSTATE_NORMAL) // Franklin is unpacking SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_HILLS_SAVEHOUSE_UNPACKING, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_ASSAULTRIFLE, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_ASSAULTSHOTGUN, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_STICKYBOMB, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_COMBATMG, TRUE) ENDIF BREAK CASE SP_MISSION_FBI_5 IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_CARBINERIFLE, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_STUNGUN, TRUE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_TREVOR), COMP_TYPE_OUTFIT, OUTFIT_P2_LADIES, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_TREVORS_TRAILER, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_HILLS_SAVEHOUSE_SETTLED, BUILDINGSTATE_DESTROYED) // Franklin now settled in. SET_BUILDING_STATE(BUILDINGNAME_ES_FIB5_MICHAEL_GARAGE_SCUBA, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_CAPOLAVORO_BILLBOARD_GRAFFITI, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_BISHOPS_CHICKEN_BILLBOARD_GRAFFITI, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_FRUIT_BILLBOARD_GRAFFITI, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_MAZE_BILLBOARD_GRAFFITI, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_RON_OIL_BILLBOARD_GRAFFITI, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_VAPID_BILLBOARD_GRAFFITI, BUILDINGSTATE_DESTROYED) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_TREVOR_EXILE_FINISHED, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MIC_HAS_HAGGARD_SUIT, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_FRANKLIN, CHAR_MICHAEL, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_FRANKLIN, CHAR_TREVOR, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_JIMMY, CHAR_FRANKLIN, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_LAMAR, CHAR_TREVOR, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_MICHAEL_CS, FALSE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_MICHAEL_BH, TRUE, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MICHAEL_SAVEHOUSE, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MICHAEL_SAVEHOUSE_COUNTRY, FALSE) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TIDY_MICHAEL_STAY, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_NORMAL_MICHAEL_STAY, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TRASH_MICHAEL_STAY, BUILDINGSTATE_NORMAL) ENDIF BREAK // --------------FINALE STRAND------------------------------------------------ CASE SP_MISSION_FINALE_INTRO IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_FINALE_A IF eFinaleCompleted = eMission OR bTargetMission = TRUE IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_FINAL_CHOICE_MADE, TRUE) ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_KILL_TREVOR_TANKER_EXPLOSION_1, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_KILL_TREVOR_TANKER_EXPLOSION_2, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_KILL_TREVOR_TANKER_EXPLOSION_3, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_KILL_TREVOR_TANKER_EXPLOSION_4, BUILDINGSTATE_NORMAL) ENDIF ELSE CPRINTLN(DEBUG_REPEAT, "Not doing any skip setup for finale as it wasn't completed in flow.") ENDIF BREAK CASE SP_MISSION_FINALE_B IF eFinaleCompleted = eMission OR bTargetMission = TRUE IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_FINAL_CHOICE_MADE, TRUE) ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_KILLED_MICHAEL, BUILDINGSTATE_DESTROYED) ENDIF ELSE CPRINTLN(DEBUG_REPEAT, "Not doing any skip setup for finale as it wasn't completed in flow.") ENDIF BREAK CASE SP_MISSION_FINALE_C1 IF eFinaleCompleted = SP_MISSION_FINALE_C2 OR bTargetMission = TRUE IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_FINAL_CHOICE_MADE, TRUE) ELSE // ENDIF ELSE CPRINTLN(DEBUG_REPEAT, "Not doing any skip setup for finale as it wasn't completed in flow.") ENDIF BREAK CASE SP_MISSION_FINALE_C2 IF eFinaleCompleted = eMission OR bTargetMission = TRUE IF bSkipToBefore = TRUE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_ADVANCEDRIFLE, TRUE) ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_TREVOR_HAVE_FALLEN_OUT, FALSE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_MICHAEL, CHAR_TREVOR, FALSE) ENDIF ELSE CPRINTLN(DEBUG_REPEAT, "Not doing any skip setup for finale as it wasn't completed in flow.") ENDIF BREAK CASE SP_MISSION_FINALE_CREDITS IF bSkipToBefore = TRUE // nothing to be done ELSE Execute_Code_ID(CID_UNLOCK_END_GAME_OUTFITS) Execute_Code_ID(CID_TREVOR_UNLOCK_BLAZER3) ENDIF BREAK // --------------FRANKLIN STRAND------------------------------------------------ CASE SP_MISSION_FRANKLIN_0 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_CITY_SAVEHOUSE_BANDANA, BUILDINGSTATE_DESTROYED) Execute_Code_ID(CID_STRETCH_TEXT_SENT) // check ENDIF BREAK CASE SP_MISSION_FRANKLIN_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_CITY_SAVEHOUSE_KITBAG, BUILDINGSTATE_DESTROYED) //--Execute_Code_ID(CID_LAMAR_TREVOR_FRIEND_UNLOCK) - does the stuff below ADD_CHAR_AS_CHAR_FRIEND(CHAR_LAMAR, CHAR_TREVOR) ADD_CONTACT_TO_PHONEBOOK(CHAR_LAMAR, TREVOR_BOOK, FALSE) // -- SET_BUILDING_STATE(BUILDINGNAME_IPL_ORTEGA_TRAILER, BUILDINGSTATE_NORMAL) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREV1_SMASHED_TRAILER,false) SET_BUILDING_STATE(BUILDINGNAME_IPL_ORTEGA_TRAILER_WATER, BUILDINGSTATE_NORMAL) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("controller_Races", MICRO_STACK_SIZE) not needed REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_FRANKLIN, CHAR_LAMAR, TRUE) ENDIF BREAK CASE SP_MISSION_FRANKLIN_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_HILLS_CABLE_CAR_FLYER, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_FRANKLIN, CHAR_LAMAR, FALSE) ENDIF BREAK // --------------LAMAR STRAND------------------------------------------------ CASE SP_MISSION_LAMAR IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_SAWNOFFSHOTGUN, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_PUMPSHOTGUN, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_STRETCH, FRANKLIN_BOOK, FALSE) REPEAT_PLAY_SET_FRANKLIN_OUTFIT_BITSET_STATE(FALSE) ENDIF BREAK // --------------LESTER STRAND------------------------------------------------ CASE SP_MISSION_LESTER_1 IF bSkipToBefore = TRUE // nothing to be done ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_LESTER, MICHAEL_BOOK, FALSE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), COMP_TYPE_OUTFIT, OUTFIT_P1_UPTOWN_1, TRUE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), COMP_TYPE_OUTFIT, OUTFIT_P1_UPTOWN_2, TRUE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), COMP_TYPE_OUTFIT, OUTFIT_P1_UPTOWN_3, TRUE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), COMP_TYPE_OUTFIT, OUTFIT_P1_UPTOWN_4, TRUE) Execute_Code_ID(CID_UNLOCK_LAMAR_1) // check Execute_Code_ID(CID_UNLOCK_SHOPS_POST_LESTER_1A, 0) Execute_Code_ID(CID_CARMOD_UNLOCK_STAGE_1, 0) ENDIF BREAK // --------------MARTIN STRAND------------------------------------------------ CASE SP_MISSION_MARTIN_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TRASH_BRIEFCASE, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_NORMAL_BRIEFCASE, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TIDY_BRIEFCASE, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TIDY_MICHAEL_STAY, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_NORMAL_MICHAEL_STAY, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_TREVORS_TRAILER_TRASH_MICHAEL_STAY, BUILDINGSTATE_DESTROYED) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREVOR_RESTRICTED_TO_CITY, FALSE) SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE) SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_MICHAEL_BH, FALSE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_VB, FALSE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_SC, FALSE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_MICHAEL_CS, TRUE, TRUE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_CS, TRUE, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MICHAEL_SAVEHOUSE, FALSE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MICHAEL_SAVEHOUSE_COUNTRY, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_CITY, FALSE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_COUNTRY, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_STRIPCLUB, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_MARTIN, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_MARTIN, TREVOR_BOOK, FALSE) ENDIF BREAK // --------------MICHAEL STRAND------------------------------------------------ CASE SP_MISSION_MICHAEL_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_TREVOR_HAVE_FALLEN_OUT, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_MICHAEL, CHAR_FRANKLIN, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_MICHAEL, CHAR_TREVOR, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_FRANKLIN, CHAR_TREVOR, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_CHENGSR, TREVOR_BOOK, FALSE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_TREVOR), COMP_TYPE_OUTFIT, OUTFIT_P2_LUDENDORFF, TRUE) SET_BUILDING_STATE(BUILDINGNAME_ES_MICHAEL_HALL_PLANE_TICKETS, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_MISSION_MICHAEL_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE) REPEAT_PLAY_BLOCK_FRIEND_CONTACT(CHAR_MICHAEL, CHAR_FRANKLIN, FALSE) SET_BUILDING_STATE(BUILDINGNAME_IPL_MIC3_KORTZ_RENNOVATION, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_MIC3_HELI_DEBRIS, BUILDINGSTATE_NORMAL) ENDIF BREAK CASE SP_MISSION_MICHAEL_3 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_MIC3_KORTZ_RENNOVATION, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_MIC3_HELI_DEBRIS, BUILDINGSTATE_NORMAL) REPEAT_PLAY_BLOCK_FRIEND_CLASH(CHAR_FRANKLIN, CHAR_TREVOR, FALSE) Execute_Code_ID(CID_MIC4_COMMS_COMPLETE) // check ENDIF BREAK CASE SP_MISSION_MICHAEL_4 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_FIB_C4, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_FIB_RUBBLE, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_MICHAEL_UPSTAIRS_MOVIE_PREMIER, BUILDINGSTATE_DESTROYED) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_OUTFIT, OUTFIT_P0_MOVIE_TUXEDO, TRUE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), COMP_TYPE_OUTFIT, OUTFIT_P1_TUXEDO, TRUE) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET("michael4LeadOut") not needed ENDIF BREAK // --------------MICHAEL EVENTS STRAND------------------------------------------------ CASE SP_MISSION_ME_AMANDA IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_ME_JIMMY IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_ME_TRACEY IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK // --------------PROLOGUE STRAND------------------------------------------------ CASE SP_MISSION_PROLOGUE IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_CRUISESHIP, BUILDINGSTATE_DESTROYED) SUPPRESS_MOTORBIKES(TRUE) Execute_Code_ID (CID_TAXI_HAILING_DISABLE, 0) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_MICHAEL_PRO, TRUE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_FRANKLIN_PRO, TRUE, FALSE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_PRO, TRUE, FALSE) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("flowStartAccept") ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_SIMEON, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_LAMAR, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_TANISHA, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_DENISE, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_HAO, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_DR_FRIEDLANDER, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_DAVE, MICHAEL_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_LESTER, MICHAEL_BOOK, FALSE) ADD_CHAR_AS_CHAR_FRIEND(CHAR_MICHAEL,CHAR_FRANKLIN) ADD_CHAR_AS_CHAR_FRIEND(CHAR_TREVOR,CHAR_FRANKLIN) Execute_Code_ID(CID_DISABLE_LOST_SCENARIO_GROUP, 0) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MIC_PRO_MASK_REMOVED, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TRV_PRO_MASK_REMOVED, TRUE) Execute_Code_ID(CID_INITIALISE_BANK_DATA, 0) Execute_Code_ID(CID_INITIALISE_STAT_OFFSETS, 0) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN_FRANKLIN, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE) SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE) SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE) SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE) ENDIF BREAK // --------------SHRINK STRAND------------------------------------------------ CASE SP_MISSION_SHRINK_1 IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_SHRINK_2 IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_SHRINK_3 IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_SHRINK_4 IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_MISSION_SHRINK_5 IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK // --------------SOLOMON STRAND------------------------------------------------ CASE SP_MISSION_SOLOMON_1 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE) ELSE Execute_Code_ID(CID_QUEUE_SOL1_CALL_TO_UNLOCK_MARTIN1, 0) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_REMOTESNIPER, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_SOLOMON, MICHAEL_BOOK, FALSE) ENDIF BREAK CASE SP_MISSION_SOLOMON_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN_FRANKLIN, TRUE) ENDIF BREAK CASE SP_MISSION_SOLOMON_3 IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_SMG, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_BB_CCC_KINGS, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_BB_MOLLIS, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_BB_TACO_BOMB, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_MELTDOWN_POSTERS, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_MELTDOWN_POSTERS_EMISSIVE, BUILDINGSTATE_DESTROYED) ENDIF BREAK // --------------TREVOR STRAND------------------------------------------------ CASE SP_MISSION_TREVOR_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREVOR_RESTRICTED_TO_COUNTRY, TRUE) SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE) SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, FALSE) SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_CS, TRUE, TRUE) Execute_Code_ID(CID_UNLOCK_TATTOO_SHOPS_POST_TREV1, 0) SET_BUILDING_STATE(BUILDINGNAME_IPL_ORTEGA_TRAILER, BUILDINGSTATE_DESTROYED) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREV1_SMASHED_TRAILER,true) SET_BUILDING_STATE(BUILDINGNAME_IPL_ORTEGA_TRAILER_WATER, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_SPECIAL_ABILITY_STATE(CHAR_TREVOR, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_COUNTRY, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_PUMPSHOTGUN, TRUE) SET_DOOR_STATE(DOORNAME_HICK_BAR_F, DOORSTATE_UNLOCKED) SET_BUILDING_STATE (BUILDINGNAME_ES_CAR_SHOWROOOM_SHUTTERS, BUILDINGSTATE_DESTROYED) // Close the shutters SET_BUILDING_STATE (BUILDINGNAME_ES_CAR_SHOWROOOM_WINDOWS, BUILDINGSTATE_NORMAL) // Mend window SET_BUILDING_STATE (BUILDINGNAME_IPL_CAR_SHOWROOM_LOD_BOARD, BUILDINGSTATE_NORMAL) // Remove LOD board. SET_BUILDING_STATE (BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE1, BUILDINGSTATE_NORMAL) // Remove blocking object for the rubble SET_BUILDING_STATE (BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE2, BUILDINGSTATE_NORMAL) // Remove blocking object for the rubble SET_BUILDING_STATE (BUILDINGNAME_ES_CAR_SHOWROOOM_RUBBLE3, BUILDINGSTATE_NORMAL) // Remove blocking object for the rubble SET_BUILDING_STATE (BUILDINGNAME_IPL_CAR_SHOWROOM_INTERIOR, BUILDINGSTATE_DESTROYED) // Swap interior for a fake one. SET_VEHICLE_GEN_AVAILABLE(VEHGEN_BJXL_CRASH_POST_ARM3, FALSE) SET_SHOP_IS_AVAILABLE(GUN_SHOP_02_SS, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_TREVORS_TRAILER, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_MISSION_TREVOR_2 IF bSkipToBefore = TRUE // nothing to be done ELSE Execute_Code_ID(CID_TREV2_OSCAR_PAY_TREVOR, 0) // check Execute_Code_ID(CID_UNLOCK_LOST_HANGAR_POST_TREV2, 0) Execute_Code_ID(CID_CARMOD_UNLOCK_STAGE_2, 0) //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("AF_Intro_T_Sandy") not needed REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_SNIPERRIFLE, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_MOLOTOV, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_TREVORS_TRAILER, BUILDINGSTATE_DESTROYED) // SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("controller_Trafficking") not needed ENDIF BREAK CASE SP_MISSION_TREVOR_3 IF bSkipToBefore = TRUE // nothing to be done ELSE ADD_CONTACT_TO_PHONEBOOK(CHAR_TAXI, TREVOR_BOOK, FALSE) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_A, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_A_OCCLUSION, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_B, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_B_OCCLUSION, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_C, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_C_OCCLUSION, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_D, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_D_OCCLUSION, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_E, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_E_OCCLUSION, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_TRAILERPARK_BLOCKING_AREA, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_VB, TRUE, TRUE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_CS, TRUE, FALSE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_CITY, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_COUNTRY, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREVOR_RESTRICTED_TO_CITY, TRUE) SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE) SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREVOR_RESTRICTED_TO_COUNTRY, FALSE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_STICKYBOMB, TRUE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_TREVOR), COMP_TYPE_OUTFIT, OUTFIT_P2_TANKTOP_SWEATPANTS_1, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARGEN_BLOCK_POLMAV_DT1_17, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARGEN_BLOCK_POLMAV_SC1_19, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARGEN_BLOCK_POLMAV_VB_0, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_MISSION_TREVOR_4 IF bSkipToBefore = TRUE SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_MESS_1, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_MESS_2, BUILDINGSTATE_NORMAL) #IF NOT IS_JAPANESE_BUILD SET_BUILDING_STATE (BUILDINGNAME_ES_FLOYDS_APPARTMENT_SEX_TOYS, BUILDINGSTATE_NORMAL) #ENDIF SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_PICTURE, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_TORTURE_TOOLS, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_WHISKY, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_SHIT, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_SHIT_SOFA, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_SOFA, BUILDINGSTATE_NORMAL) ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_FLOYDS_APPARTMENT_BLOODY_WINDOW, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_FLOYDS_APPARTMENT_CRIME_TAPE, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_RASPBERRY_JAM, BUILDINGSTATE_CLEANUP ) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_SC, TRUE, TRUE) REPEAT_PLAY_SET_SAVEHOUSE_STATE(SAVEHOUSE_TREVOR_VB, FALSE, FALSE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_CITY, FALSE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_TREVOR_SAVEHOUSE_STRIPCLUB, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_VEH_T_UNLOCK_RASP_JAM, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_EXL3_TRAIN_CRASH, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_EXL3_TRAIN_CRASH_2, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_IPL_TREVORS_TRAILER, BUILDINGSTATE_NORMAL) ENDIF BREAK //-------------------------AGENCY HEIST STRAND------------------------------------------------ CASE SP_HEIST_AGENCY_1 IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_AGENCY, PBDG_0, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_AGENCY, PBDG_1, TRUE) REPEAT_PLAY_LAUNCH_SCRIPT_AND_FORGET("buildingSiteAmbience", MICRO_STACK_SIZE) SET_BUILDING_STATE(BUILDINGNAME_ES_AGENCY_HEIST_SWEATSHOP_OVERALLS, BUILDINGSTATE_DESTROYED) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_AGENCY_2_AUTOTRIGGERED, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_RUN_BUILDINGSITE_AMBIENCE_AUDIO, TRUE) SET_BUILDING_STATE(BUILDINGNAME_IPL_AGENCY_2_LIFTS, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_HEIST_AGENCY_2 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_AGENCY_2_LIFTS, BUILDINGSTATE_NORMAL) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_AGENCY, PBDG_2, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_RUN_BUILDINGSITE_AMBIENCE_AUDIO, FALSE) SET_BUILDING_STATE(BUILDINGNAME_ES_AGENCY_HEIST_SWEATSHOP_BLUEPRINT, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_HEIST_AGENCY_PREP_1 // leads to SP_HEIST_AGENCY_3A IF bSkipToBefore = TRUE // nothing to be done //SETFLOW_LAUNCH_SCRIPT_AND_FORGET ("agency_prep2Amb", FRIEND_STACK_SIZE) // not needed ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_AGENCY_HEIST_SWEATSHOP_FIREMAN_GEAR, BUILDINGSTATE_DESTROYED) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_AGENCY_PREP_FIRETRUCK,TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY (HEIST_AGENCY, PBDG_7, TRUE) SET_DOOR_STATE(DOORNAME_SWEATSHOP_L, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_SWEATSHOP_R, DOORSTATE_UNLOCKED) ENDIF BREAK CASE SP_HEIST_AGENCY_3A IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_DO_AGENCY_HEIST_COMPLETE() ENDIF BREAK CASE SP_HEIST_AGENCY_3B IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_DO_AGENCY_HEIST_COMPLETE() ENDIF BREAK //-------------------------DOCKS HEIST STRAND------------------------------------------------ CASE SP_HEIST_DOCKS_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_RASPBERRY_JAM, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_RASPBERRY_JAM_CUTSCENE, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_PICTURE, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_SHIT, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_SHIT_SOFA, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_SOFA, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_HEIST_DOCKS_PREP_1 IF bSkipToBefore = TRUE // nothing to be done ELSE EXECUTE_CODE_ID(CID_POST_DOCKS_PREP1, 0) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_DOCKS, PBDG_5, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_DOCKS, PBDG_7, TRUE) SET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_MESS_1, BUILDINGSTATE_DESTROYED) ENDIF BREAK CASE SP_HEIST_DOCKS_PREP_2B IF bSkipToBefore = TRUE // nothing to be done ELSE SET_VEHICLE_GEN_AVAILABLE(VEHGEN_DOCKSP2B_CHINOOK, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_DOCKS, PBDG_6, TRUE) ENDIF BREAK CASE SP_HEIST_DOCKS_2A IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_CARGOSHIP, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_CARGOSHIP_OCCLUSION, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_ASSAULTSHOTGUN, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_DOCKSP2B_CHINOOK, FALSE) SET_BUILDING_STATE(BUILDINGNAME_RF_STILT_HOUSE, BUILDINGSTATE_NORMAL) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_DOCKS, TRUE) ENDIF BREAK CASE SP_HEIST_DOCKS_2B IF bSkipToBefore = TRUE // nothing to be done ELSE SET_VEHICLE_GEN_AVAILABLE(VEHGEN_DOCKSP2B_SUB, TRUE) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_DOCKSP2B_CHINOOK, FALSE) SET_BUILDING_STATE(BUILDINGNAME_RF_STILT_HOUSE, BUILDINGSTATE_NORMAL) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_DOCKS, TRUE) ENDIF BREAK //-------------------------FINALE HEIST STRAND------------------------------------------------ CASE SP_HEIST_FINALE_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_BUILDING_STATE(BUILDINGNAME_ES_STRIPCLUB_TREVORS_MESS, BUILDINGSTATE_DESTROYED) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_FINALE, PBDG_1, TRUE) Execute_Code_ID(CID_CAR3_REM_DONE) // check ENDIF BREAK CASE SP_HEIST_FINALE_2_INTRO IF bSkipToBefore = TRUE // nothing to be done ELSE // nothing to be done ENDIF BREAK CASE SP_HEIST_FINALE_PREP_A IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_FINALE, PBDG_5, TRUE) Execute_Code_ID(CID_BIG_SCORE_PREPA_COMPLETED, 0) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_FINALE, PBDG_6, TRUE) ENDIF BREAK CASE SP_HEIST_FINALE_2A IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_APPISTOL, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_PUMPSHOTGUN, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_FINALE, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_ADVANCEDRIFLE, TRUE) ENDIF BREAK CASE SP_HEIST_FINALE_PREP_B IF bSkipToBefore = TRUE // nothing to be done //SETFLOW_LAUNCH_SCRIPT_AND_FORGET("finale_heist_prepEamb", FRIEND_STACK_SIZE) // not needed ELSE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_FINALE, PBDG_7, TRUE) Execute_Code_ID(CID_FAST_TRACK_TRAIN_PREP_UNLOCK, 0) Execute_Code_ID(CID_BIG_SCORE_PREPB_COMPLETED, 0) ENDIF BREAK CASE SP_HEIST_FINALE_PREP_C1 IF bSkipToBefore = TRUE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINALE_PREPC_EMAIL_DONE, FALSE) Execute_Code_ID(CID_SEND_BIG_SCORE_PREPC_EMAIL, 0) ELSE Execute_Code_ID(CID_BIG_SCORE_PREPC_COMPLETED, 0) ENDIF BREAK CASE SP_HEIST_FINALE_PREP_C2 IF bSkipToBefore = TRUE // nothing to be done ELSE Execute_Code_ID(CID_BIG_SCORE_PREPC_COMPLETED, 0) ENDIF BREAK CASE SP_HEIST_FINALE_PREP_C3 IF bSkipToBefore = TRUE // nothing to be done ELSE Execute_Code_ID(CID_BIG_SCORE_PREPC_COMPLETED, 0) ENDIF BREAK CASE SP_HEIST_FINALE_PREP_D IF bSkipToBefore = TRUE // nothing to be done ELSE Execute_Code_ID(CID_BIG_SCORE_PREPD_COMPLETED, 0) ENDIF BREAK CASE SP_HEIST_FINALE_2B IF bSkipToBefore = TRUE // nothing to be done ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_FINALE, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_ADVANCEDRIFLE, TRUE) ENDIF BREAK //-------------------------JEWELLERY HEIST STRAND------------------------------------------------ CASE SP_HEIST_JEWELRY_1 IF bSkipToBefore = TRUE SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_NO_INTERIOR, BUILDINGSTATE_DESTROYED ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_WITH_INTERIOR, BUILDINGSTATE_DESTROYED ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_LOD_DOOR, BUILDINGSTATE_DESTROYED ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_BURNT, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE(BUILDINGNAME_IPL_SWEATSHOP_WINDOW_LIGHTS, BUILDINGSTATE_NORMAL ) SET_DOOR_STATE(DOORNAME_SWEATSHOP_L, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_SWEATSHOP_R, DOORSTATE_UNLOCKED) ELSE // nothing to be done ENDIF BREAK CASE SP_HEIST_JEWELRY_PREP_1A IF bSkipToBefore = TRUE SET_BUILDING_STATE(BUILDINGNAME_SB_BUGSTAR_DOCKS_1, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_SB_BUGSTAR_DOCKS_2, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_SB_BUGSTAR_DOCKS_3, BUILDINGSTATE_DESTROYED) ELSE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_9, TRUE) SET_BUILDING_STATE(BUILDINGNAME_SB_BUGSTAR_DOCKS_1, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_SB_BUGSTAR_DOCKS_2, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_SB_BUGSTAR_DOCKS_3, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_JEWEL_HEIST_SWEATSHOP_BUGSTAR_GEAR, BUILDINGSTATE_DESTROYED) EXECUTE_CODE_ID(CID_FAST_TRACK_BZ_GAS_PREP_UNLOCK, 0) ENDIF BREAK CASE SP_HEIST_JEWELRY_PREP_1B IF bSkipToBefore = TRUE // nothing to be done ELSE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_11, TRUE) ENDIF BREAK CASE SP_HEIST_JEWELRY_PREP_2A IF bSkipToBefore = TRUE Execute_Code_ID(CID_UNLOCK_BZ_GAS_PREP) // check ELSE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_10, TRUE) ENDIF BREAK CASE SP_HEIST_JEWELRY_2 IF bSkipToBefore = TRUE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_JEWEL, PBDG_4, TRUE) ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_JEWEL_STORE, BUILDINGSTATE_CLEANUP) SET_BUILDING_STATE(BUILDINGNAME_IPL_JEWEL_HEIST_MAX_RENDA_INTERIOR, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE(BUILDINGNAME_ES_JEWEL_HEIST_SWEATSHOP_BUGSTAR_GEAR, BUILDINGSTATE_NORMAL) SET_BUILDING_STATE( BUILDINGNAME_IPL_SWEATSHOP_NO_INTERIOR, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE( BUILDINGNAME_IPL_SWEATSHOP_WITH_INTERIOR, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE( BUILDINGNAME_IPL_SWEATSHOP_LOD_DOOR, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE( BUILDINGNAME_IPL_SWEATSHOP_BURNT, BUILDINGSTATE_NORMAL ) SET_BUILDING_STATE( BUILDINGNAME_IPL_SWEATSHOP_WINDOW_LIGHTS, BUILDINGSTATE_NORMAL ) Execute_Code_ID(CID_UNLOCK_JEWEL_HEIST_OUTFITS, 0) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_JEWEL, TRUE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ARM3_STRIPCLUB_SWITCH_AVAILABLE, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_LESTER, FRANKLIN_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_RON, TREVOR_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_WADE, TREVOR_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_ONEIL, TREVOR_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_OSCAR, TREVOR_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_CHEF, TREVOR_BOOK, FALSE) ADD_CONTACT_TO_PHONEBOOK(CHAR_TAXI, TREVOR_BOOK, FALSE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_CARBINERIFLE, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_SMOKEGRENADE, TRUE) ENDIF BREAK //-------------------------RURAL HEIST STRAND----------------------------------------------- CASE SP_HEIST_RURAL_1 IF bSkipToBefore = TRUE SET_DOOR_STATE(DOORNAME_METHLAB_F_L, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_METHLAB_F_R, DOORSTATE_UNLOCKED) SET_DOOR_STATE(DOORNAME_METHLAB_R, DOORSTATE_UNLOCKED) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_RURAL_LOAD_MIKE_WIN_ENDING, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_RURAL_LOAD_TREV_WIN_ENDING, FALSE) ELSE REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_RURAL_BANK, PBDG_1, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_LESTER, TREVOR_BOOK, FALSE) ENDIF BREAK CASE SP_HEIST_RURAL_PREP_1 IF bSkipToBefore = TRUE // nothing to be done ELSE SET_VEHICLE_GEN_AVAILABLE(VEHGEN_RURALH_MILITARY_TRUCK, TRUE) REPEAT_PLAY_SET_BOARD_DISPLAY_GROUP_VISIBILITY(HEIST_RURAL_BANK, PBDG_3, TRUE) ENDIF BREAK CASE SP_HEIST_RURAL_2 IF bSkipToBefore = TRUE SET_BUILDING_STATE(BUILDINGNAME_ES_PALETO_SWEATSHOP_ARMOUR, BUILDINGSTATE_DESTROYED) ELSE SET_BUILDING_STATE(BUILDINGNAME_IPL_BNKHEIST_APT, BUILDINGSTATE_DESTROYED) SET_BUILDING_STATE(BUILDINGNAME_IPL_BNKHEIST_APT_VFX, BUILDINGSTATE_DESTROYED) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_RURALH_MILITARY_TRUCK, FALSE) SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINISHED_RURAL_BANK, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_MG, TRUE) REPEAT_PLAY_SET_WEAPON_LOCK_STATE(WEAPONTYPE_MINIGUN, TRUE) SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_TREVOR), COMP_TYPE_OUTFIT, OUTFIT_P2_STYLESUIT_5, TRUE) ENDIF BREAK DEFAULT CERRORLN(DEBUG_REPEAT, "REPEAT_PLAY_SKIP_STORY_MISSION trying to skip unknown mission. eMission =", eMission) SCRIPT_ASSERT("REPEAT_PLAY_SKIP_STORY_MISSION trying to skip unknown mission. Bug for Andy Minghella") #IF USE_TU_CHANGES bMissionSkipped = FALSE #ENDIF BREAK ENDSWITCH #IF USE_TU_CHANGES IF bMissionSkipped g_savedGlobals.sFlow.missionSavedData[eMission].completed = TRUE ENDIF #ENDIF #endif #endif ENDPROC /// PURPOSE: /// Resets all unlocks we are concerned with. /// Called when starting a repeat play. PROC REPEAT_PLAY_RESET() CPRINTLN(DEBUG_REPEAT, "Repat play is resetting game world.") g_flowUnsaved.bUpdatingGameflow = TRUE // Kill off any mission scripts that are currently running. //CLEANUP_RUNNING_MISSION_SCRIPTS() // Reset the single player mission flow state. (this resets all flow flags) RESET_SP_MISSION_FLOW() // Reset the state of the communication controller. RESET_COMMUNICATION_CONTROLLER() g_bPauseCommsQueues = TRUE g_iCallInProgress = -1 // Clean up the state of the cellphone. RESET_CELLPHONE() // Reset the state of the data for the code controller. RESET_CODE_CONTROLLER() // Reset the complete status of all missions. RESET_MISSION_DATA() #if not USE_CLF_DLC #if not USE_NRM_DLC // Reset all heist globals. RESET_HEIST_DATA() #endif #endif // Reset the state of all static blips. RESET_STATIC_BLIP_STATES() // Reset the default respawn location flags. RESET_RESPAWN_LOCATION_DATA_FLAGS() // Reset the default player info and stat flags. //RESET_PLAYER_DATA_FLAGS() // Reset the default shop flags. RESET_SHOP_DATA_FLAGS() // Reset the Mission Triggering System. RESET_ALL_MISSION_TRIGGERS() // Reset the default building and door flags. RESET_BUILDING_AND_DOOR_FLAGS() // Reset the context system. RESET_CONTEXT_SYSTEM() // Reset the help text chain controller. PRIVATE_Clear_Flow_Help_Queue() PAUSE_FLOW_HELP_QUEUE(FALSE) // Reset replay controller //RESET_REPLAY_CONTROLLER() // Reset the ambient saved flags. //RESET_AMBIENT_FLAGS() // Reset the vehicle gen flags. RESET_VEHICLE_GEN_FLAGS() // Reset the player's special ability system. RESET_PLAYER_SPECIAL_ABILITY() #if not USE_CLF_DLC #if not USE_NRM_DLC // Reset the Random Character controller. RESET_RANDOM_CHARACTER_CONTROLLER() // Reset the state of all random events. //RESET_RANDOM_EVENT_STATES() // Reset the Friend controller RESET_FRIEND_CONTROLLER() #endif #endif // Reset the state of any cutscenes that are currently active. RESET_CUTSCENES() // Resets all the app data //RESET_APP_DATA() // Reset 100% completion //RESET_COMPLETION_PERCENTAGE_TRACKING() INITIALISE_EMAIL_SYSTEM() RESET_PLAYER_STATE() g_flowUnsaved.bUpdatingGameflow = FALSE ENDPROC /// PURPOSE: /// Skips over mission the player played before the mission we want to repeat play. /// Unlocks / locks anything that is triggered by completing that mission. /// Unlocks / locks anything that is triggered by starting the target mission. /// PARAMS: /// iTargetMissionID - the mission we want to repeat play. /// eMissionType - which type of mission it is (Story / RC) PROC REPEAT_PLAY_UNLOCKING(INT iTargetMissionID, enumGrouping eMissionType) INT iCurrentMission INT iTargetMission IF ENUM_TO_INT(SP_MISSION_MAX) <> 94 OR ENUM_TO_INT(MAX_RC_MISSIONS) <> 63 CPRINTLN(DEBUG_REPEAT, "REPEAT_PLAY_UNLOCKING needs to update skip list size. SP_MISSION_MAX= ", SP_MISSION_MAX, ". MAX_RC_MISSIONS= ", MAX_RC_MISSIONS, ".") SCRIPT_ASSERT("REPEAT_PLAY_UNLOCKING needs to update skip list size. Bug for Andy Minghella.") ENDIF CONST_INT MAX_SKIP_LIST 157 // This needs to be SP_MISSION_MAX (94) + MAX_RC_MISSIONS (63) = 157 //(total story missions + total RC missions) RepeatPlayData mSkipList[MAX_SKIP_LIST] // List of flow flags we may want to reinstate // (These will just be ones that aren't set via the standard mission flow stuff) SP_MISSIONS eFinaleCompleted = SP_MISSION_NONE // ------------store flow flags we need to reinstate--------------------- #if not USE_CLF_DLC #if not USE_NRM_DLC INT iJewelHeistChoice BOOL bMcClipped BOOL bKilledMulligan INT iAgencyHeistChoice INT iFinaleHeistChoice BOOL bDiNapoliKilled BOOl bFranklinHaircut INT iFranklinOutfit IF Get_Mission_Flow_Bitset_Bit_State(FLOWBITSET_FRANKLIN_CHANGED_HAIRCUT, BITS_CHARACTER_REQUEST_COMPLETE) bFranklinHaircut = TRUE // Franklin has bought a new haircut ENDIF iFranklinOutfit = g_savedGlobals.sPlayerData.iFranklinOriginalOutfitID // outfit Franklin was wearing when Lamar commented on it iJewelHeistChoice = GET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_JEWEL) CPRINTLN(DEBUG_REPEAT, "Stored iJewelHeistChoice as ", iJewelHeistChoice) bMcClipped = GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MISSION_FRANK1_MC_CLIPPED) CPRINTLN(DEBUG_REPEAT, "Stored bMcClipped as ", bMcClipped) bKilledMulligan = GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_CARSTEAL2_KILLED_MULLIGAN) CPRINTLN(DEBUG_REPEAT, "Stored bKilledMulligan as ", bKilledMulligan) iAgencyHeistChoice = GET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_AGENCY) CPRINTLN(DEBUG_REPEAT, "Stored iAgencyHeistChoice as ", iAgencyHeistChoice) iFinaleHeistChoice = GET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_FINALE) CPRINTLN(DEBUG_REPEAT, "Stored iFinaleHeistChoice as ", iFinaleHeistChoice) bDiNapoliKilled = GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_NIGEL3_AL_DI_NAPOLI_KILLED) CPRINTLN(DEBUG_REPEAT, "Stored bDiNapoliKilled as ", bDiNapoliKilled) //---------- check which Finale the player completed in flow-------- IF g_savedGlobals.sFlow.missionSavedData[SP_MISSION_FINALE_A].completed = TRUE eFinaleCompleted = SP_MISSION_FINALE_A ELIF g_savedGlobals.sFlow.missionSavedData[SP_MISSION_FINALE_B].completed = TRUE eFinaleCompleted = SP_MISSION_FINALE_B ELIF g_savedGlobals.sFlow.missionSavedData[SP_MISSION_FINALE_C2].completed = TRUE eFinaleCompleted = SP_MISSION_FINALE_C2 ENDIF #endif #endif // ----------Set Target Mission------------------------------- iTargetMission = GetMissionCompletionOrder(iTargetMissionID, eMissionType) CPRINTLN(DEBUG_REPEAT,"iTargetMissionID= ", iTargetMissionID) CPRINTLN(DEBUG_REPEAT,"iTargetMission= ", iTargetMission) IF eMissionType = CP_GROUP_MISSIONS CPRINTLN(DEBUG_REPEAT,"iTargetMissionID= ", iTargetMissionID, ", ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(INT_TO_ENUM(SP_MISSIONS, iTargetMissionID))) ELSE CPRINTLN(DEBUG_REPEAT,"iTargetMissionID= ", iTargetMissionID, ", ", GET_RC_MISSION_DISPLAY_STRING_FROM_ID(INT_TO_ENUM(g_eRC_MissionIDs, iTargetMissionID))) ENDIF // -----------set up the mission flow for repeat play ------------------------- #if USE_CLF_DLC PopulateRepeatPlayArray(mSkipList, TRUE, FALSE, FALSE) #endif #if USE_NRM_DLC PopulateRepeatPlayArray(mSkipList, TRUE, FALSE, FALSE) #endif #if not USE_CLF_DLC #if not USE_NRM_DLC PopulateRepeatPlayArray(mSkipList, TRUE, TRUE, FALSE) #endif #endif // reset the flow REPEAT_PLAY_RESET() #if not USE_CLF_DLC #if not USE_NRM_DLC // Reinstate any flow flags we've stored here IF bFranklinHaircut = TRUE SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_FRANKLIN_CHANGED_HAIRCUT, BITS_CHARACTER_REQUEST_COMPLETE, TRUE) CPRINTLN(DEBUG_REPEAT,"Reinstating Franklin haircut flow flag.") ENDIF g_savedGlobals.sPlayerData.iFranklinOriginalOutfitID = iFranklinOutfit #endif #endif BOOL bTargetMission = FALSE // loop through the missions the player has completed unlocking stuff as we go FOR iCurrentMission = 0 TO iTargetMission // set bool to say is target mission // use this to not do finale skip stuff // if finale isnt target mission // and not been completed- do nothing!! IF iCurrentMission = iTargetMission CPRINTLN(DEBUG_REPEAT, "This is the target mission!") bTargetMission = TRUE ELSE bTargetMission = FALSE ENDIF // unlock the start of this mission SWITCH mSkipList[iCurrentMission].eMissionType CASE CP_GROUP_MISSIONS #if USE_CLF_DLC REPEAT_PLAY_SKIP_STORY_MISSION_CLF(INT_TO_ENUM(SP_MISSIONS, mSkipList[iCurrentMission].iMissionIndex), TRUE, bTargetMission, eFinaleCompleted) IF iCurrentMission < iTargetMission // for all missions other than the target, we unlock anything that is unlocked by completing this mission REPEAT_PLAY_SKIP_STORY_MISSION_CLF(INT_TO_ENUM(SP_MISSIONS, mSkipList[iCurrentMission].iMissionIndex), FALSE, bTargetMission, eFinaleCompleted) //add news stuff here ENDIF #endif #if USE_NRM_DLC REPEAT_PLAY_SKIP_STORY_MISSION_NRM(INT_TO_ENUM(SP_MISSIONS, mSkipList[iCurrentMission].iMissionIndex), TRUE, bTargetMission, eFinaleCompleted) IF iCurrentMission < iTargetMission // for all missions other than the target, we unlock anything that is unlocked by completing this mission REPEAT_PLAY_SKIP_STORY_MISSION_NRM(INT_TO_ENUM(SP_MISSIONS, mSkipList[iCurrentMission].iMissionIndex), FALSE, bTargetMission, eFinaleCompleted) //add news stuff here ENDIF #endif #if not USE_CLF_DLC #if not USE_NRM_DLC REPEAT_PLAY_SKIP_STORY_MISSION(INT_TO_ENUM(SP_MISSIONS, mSkipList[iCurrentMission].iMissionIndex), TRUE, bTargetMission, eFinaleCompleted) IF iCurrentMission < iTargetMission // for all missions other than the target, we unlock anything that is unlocked by completing this mission REPEAT_PLAY_SKIP_STORY_MISSION(INT_TO_ENUM(SP_MISSIONS, mSkipList[iCurrentMission].iMissionIndex), FALSE, bTargetMission, eFinaleCompleted) // update news story for eye find news IF IS_FINALE_MISSION(mSkipList[iCurrentMission].iMissionIndex) IF ENUM_TO_INT(eFinaleCompleted) = mSkipList[iCurrentMission].iMissionIndex CPRINTLN(DEBUG_REPEAT, "Doing news story for completed finale mission. eFinaleCompleted= ", mSkipList[iCurrentMission].iMissionIndex) UPDATE_EYEFIND_CURRENT_NEWS_STORY_STATE(mSkipList[iCurrentMission].iMissionIndex, FALSE) ELSE CPRINTLN(DEBUG_REPEAT, "NOT doing news story for other finale mission. mission= ", mSkipList[iCurrentMission].iMissionIndex) ENDIF ELSE CPRINTLN(DEBUG_REPEAT, "Doing news story for completed story mission. eFinaleCompleted= ", mSkipList[iCurrentMission].iMissionIndex) UPDATE_EYEFIND_CURRENT_NEWS_STORY_STATE(mSkipList[iCurrentMission].iMissionIndex, FALSE) ENDIF ENDIF #endif #endif BREAK CASE CP_GROUP_RANDOMCHARS REPEAT_PLAY_SKIP_RC_MISSION(INT_TO_ENUM(g_eRC_MissionIDs ,mSkipList[iCurrentMission].iMissionIndex), TRUE) IF iCurrentMission < iTargetMission // for all missions other than the target, we unlock anything that is unlocked by completing this mission REPEAT_PLAY_SKIP_RC_MISSION(INT_TO_ENUM(g_eRC_MissionIDs ,mSkipList[iCurrentMission].iMissionIndex), FALSE) // update news story for eye find news CPRINTLN(DEBUG_REPEAT, "Doing news story for completed RC mission. eFinaleCompleted= ", mSkipList[iCurrentMission].iMissionIndex) UPDATE_EYEFIND_CURRENT_NEWS_STORY_STATE(mSkipList[iCurrentMission].iMissionIndex, TRUE) ENDIF BREAK DEFAULT CPRINTLN(DEBUG_REPEAT,"REPEAT_PLAY_UNLOCKING passed a mission type that isn't repeat playable: ", mSkipList[iCurrentMission].eMissionType) CPRINTLN(DEBUG_REPEAT,"CurrentMission = ", iCurrentMission, ". MissionID = ", mSkipList[iCurrentMission].iMissionIndex, ".") BREAK ENDSWITCH ENDFOR // reset the completion order variables INT iMission INT iMissionID #if USE_CLF_DLC g_savedGlobalsClifford.sFlowCustom.iMissionsCompleted = 0 FOR iMission = 0 TO MAX_MISSION_DATA_SLOTS -1 g_savedGlobalsClifford.sFlow.missionSavedData[iMission].iCompletionOrder = -1 ENDFOR // and rebuild them so lifeinvader works FOR iMission = 0 TO iTargetMission IF mSkipList[iMission].eMissionType = CP_GROUP_MISSIONS iMissionID = mSkipList[iMission].iMissionIndex g_savedGlobalsClifford.sFlow.missionSavedData[iMissionID].iCompletionOrder = iMission g_savedGlobalsClifford.sFlowCustom.iMissionsCompleted++ CPRINTLN(DEBUG_REPEAT,"USMCO iMissionID ", iMissionID, " iCompletionOrder = ", g_savedGlobalsClifford.sFlow.missionSavedData[iMissionID].iCompletionOrder) ENDIF ENDFOR #endif #if USE_NRM_DLC g_savedGlobalsnorman.sFlowCustom.iMissionsCompleted = 0 FOR iMission = 0 TO MAX_MISSION_DATA_SLOTS -1 g_savedGlobalsnorman.sFlow.missionSavedData[iMission].iCompletionOrder = -1 ENDFOR // and rebuild them so lifeinvader works FOR iMission = 0 TO iTargetMission IF mSkipList[iMission].eMissionType = CP_GROUP_MISSIONS iMissionID = mSkipList[iMission].iMissionIndex g_savedGlobalsnorman.sFlow.missionSavedData[iMissionID].iCompletionOrder = iMission g_savedGlobalsnorman.sFlowCustom.iMissionsCompleted++ CPRINTLN(DEBUG_REPEAT,"USMCO iMissionID ", iMissionID, " iCompletionOrder = ", g_savedGlobalsnorman.sFlow.missionSavedData[iMissionID].iCompletionOrder) ENDIF ENDFOR #endif #if not USE_CLF_DLC #if not USE_NRM_DLC g_savedGlobals.sFlowCustom.iMissionsCompleted = 0 FOR iMission = 0 TO MAX_MISSION_DATA_SLOTS -1 g_savedGlobals.sFlow.missionSavedData[iMission].iCompletionOrder = -1 ENDFOR g_savedGlobals.sRandomChars.iRCMissionsCompleted =0 FOR iMission = 0 TO ENUM_TO_INT(MAX_RC_MISSIONS) -1 g_savedGlobals.sRandomChars.savedRC[iMission].iCompletionOrder = -1 ENDFOR // and rebuild them so lifeinvader works FOR iMission = 0 TO iTargetMission IF mSkipList[iMission].eMissionType = CP_GROUP_MISSIONS iMissionID = mSkipList[iMission].iMissionIndex g_savedGlobals.sFlow.missionSavedData[iMissionID].iCompletionOrder = iMission g_savedGlobals.sFlowCustom.iMissionsCompleted++ CPRINTLN(DEBUG_REPEAT,"USMCO iMissionID ", iMissionID, " iCompletionOrder = ", g_savedGlobals.sFlow.missionSavedData[iMissionID].iCompletionOrder) ELIF mSkipList[iMission].eMissionType = CP_GROUP_RANDOMCHARS iMissionID = mSkipList[iMission].iMissionIndex g_savedGlobals.sRandomChars.savedRC[iMissionID].iCompletionOrder = iMission g_savedGlobals.sRandomChars.iRCMissionsCompleted++ CPRINTLN(DEBUG_REPEAT,"URCMCO iMissionID ", iMissionID, " iCompletionOrder = ", g_savedGlobals.sRandomChars.savedRC[iMissionID].iCompletionOrder) ENDIF ENDFOR // restore flowflag states for eyefind news IF g_savedGlobals.sFlow.missionSavedData[SP_HEIST_JEWELRY_2].iCompletionOrder > -1 SET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_JEWEL, iJewelHeistChoice) CPRINTLN(DEBUG_REPEAT, "Restored iJewelHeistChoice as ", iJewelHeistChoice) ENDIF IF g_savedGlobals.sFlow.missionSavedData[SP_MISSION_FRANKLIN_1].iCompletionOrder > -1 SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MISSION_FRANK1_MC_CLIPPED, bMcClipped) CPRINTLN(DEBUG_REPEAT, "Restored bMcClipped as ", bMcClipped) ENDIF IF g_savedGlobals.sFlow.missionSavedData[SP_MISSION_CARSTEAL_2].iCompletionOrder > -1 SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_CARSTEAL2_KILLED_MULLIGAN, bKilledMulligan) CPRINTLN(DEBUG_REPEAT, "Restored bKilledMulligan as ", bKilledMulligan) ENDIF IF g_savedGlobals.sFlow.missionSavedData[SP_HEIST_AGENCY_3A].iCompletionOrder > -1 OR g_savedGlobals.sFlow.missionSavedData[SP_HEIST_AGENCY_3B].iCompletionOrder > -1 SET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_AGENCY, iAgencyHeistChoice) CPRINTLN(DEBUG_REPEAT, "Restored iAgencyHeistChoice as ", iAgencyHeistChoice) ENDIF IF g_savedGlobals.sFlow.missionSavedData[SP_HEIST_FINALE_2A].iCompletionOrder > -1 OR g_savedGlobals.sFlow.missionSavedData[SP_HEIST_FINALE_2B].iCompletionOrder > -1 SET_MISSION_FLOW_INT_VALUE(FLOWINT_HEIST_CHOICE_FINALE, iFinaleHeistChoice) CPRINTLN(DEBUG_REPEAT, "Restored iFinaleHeistChoice as ", iFinaleHeistChoice) ENDIF IF g_savedGlobals.sRandomChars.savedRC[RC_NIGEL_3].iCompletionOrder > -1 SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_NIGEL3_AL_DI_NAPOLI_KILLED, bDiNapoliKilled) CPRINTLN(DEBUG_REPEAT, "Restored bDiNapoliKilled as ", bDiNapoliKilled) ENDIF #endif #endif ENDPROC