3436 lines
120 KiB
Scheme
Executable File
3436 lines
120 KiB
Scheme
Executable File
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//│ 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,"<clf>Skipping before mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission))
|
|
ELSE
|
|
CPRINTLN(DEBUG_REPEAT,"<clf>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,"<NRM>Skipping before mission: ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMission))
|
|
ELSE
|
|
CPRINTLN(DEBUG_REPEAT,"<NRM>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
|