1183 lines
45 KiB
Scheme
Executable File
1183 lines
45 KiB
Scheme
Executable File
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : respawnCutscene_private.sch //
|
|
// AUTHOR : Alwyn Roberts //
|
|
// DESCRIPTION : //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
USING "commands_graphics.sch"
|
|
|
|
USING "mission_control_private.sch"
|
|
USING "replay_public.sch"
|
|
|
|
USING "push_in_public.sch"
|
|
|
|
ENUM PLAYER_DAMAGE_ENUM
|
|
PD_NONE = 0,
|
|
|
|
/* # 1178145
|
|
Hospital 0 - No damage
|
|
Hospital 1 - Bruise left forehead
|
|
Hospital 2 - Bruise on right eye
|
|
Hospital 3 - Bruise on right eye, Bruise on left cheek, Redness at right lower lip
|
|
Hospital 4 - Bruise on left eye, Cut on left cheek, Bruise on right jawbone
|
|
Hospital 5 - Small cut on right cheek, Cuts on right brow, Bruise on left eye, Bloody part on left eye tearduct.
|
|
Hospital 6 - Bruise on right eye, Bruise on left eye, Small cut on right cheek, Bloody Nose
|
|
Hospital 7 - Bruise on left eye, Redness and scuffs on left brow, Cuts on Chin
|
|
Hospital 8 - Cuts on chin, Cuts on right cheek, Bruise on left eye
|
|
Hospital 9 - Bruise left cheek, Bruise right eye, Bruise left eye, Bloody nose, Scars on lower lip
|
|
*/
|
|
|
|
PD_0_chinBruise = BIT0,
|
|
PD_1_plasterForehead = BIT1,
|
|
PD_2_foreheadBruise = BIT2,
|
|
PD_3_noseBruise = BIT3,
|
|
PD_4_lefteyeBruise = BIT4,
|
|
PD_5_splatterLeft = BIT5,
|
|
PD_6_splatterLeft = BIT6,
|
|
PD_7_splatterLeft = BIT7,
|
|
PD_8_splatterLeft = BIT8,
|
|
PD_9_cutNose = BIT9
|
|
ENDENUM
|
|
|
|
|
|
FUNC INT iPOWER(INT iThisNumber, INT iThisPower)
|
|
INT iLoopControl
|
|
INT iInitialValue = iThisNumber
|
|
|
|
INT iResult = 0
|
|
|
|
IF iThisPower = 0
|
|
iResult = 1 //n^0 = 1
|
|
ELIF iThisPower = 1
|
|
iResult = iThisNumber
|
|
ELIF iThisPower < 0
|
|
iLoopControl = -iThisPower + 1
|
|
WHILE iLoopControl > 0
|
|
iThisNumber *= iInitialValue
|
|
iLoopControl--
|
|
ENDWHILE
|
|
iResult = 1 / iThisNumber
|
|
ELIF iThisPower > 1
|
|
iLoopControl = iThisPower - 1
|
|
WHILE iLoopControl > 0
|
|
iThisNumber *= iInitialValue
|
|
iLoopControl--
|
|
ENDWHILE
|
|
iResult = iThisNumber
|
|
ENDIF
|
|
|
|
RETURN iResult
|
|
ENDFUNC
|
|
|
|
PROC APPLY_DEATHARREST_DAMAGE_DECALS(PED_INDEX PedIndex, PLAYER_DAMAGE_ENUM ePlayerDamage)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_0_chinBruise)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_0", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_0\") //PD_0_chinBruise")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_1_plasterForehead)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_1", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_1\") //PD_1_plasterForehead")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_2_foreheadBruise)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_2", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_2\") //PD_2_foreheadBruise")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_3_noseBruise)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_3", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_3\") //PD_3_noseBruise")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_4_lefteyeBruise)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_4", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_4\") //PD_4_lefteyeBruise")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_5_splatterLeft)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_5", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_5\") //PD_5_splatterLeft")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_6_splatterLeft)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_6", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_6\") //PD_6_splatterLeft")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_7_splatterLeft)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_7", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_7\") //PD_7_splatterLeft")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_8_splatterLeft)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_8", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_8\") //PD_8_splatterLeft")
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_9_cutNose)
|
|
APPLY_PED_DAMAGE_PACK(pedIndex, "HOSPITAL_9", 0.0, 1.0)
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL(\"HOSPITAL_9\") //PD_9_cutNose")
|
|
ENDIF
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ePlayerDamage, PD_NONE)
|
|
//
|
|
CPRINTLN(DEBUG_RESPAWN, "<respawn> APPLY_PED_DAMAGE_DECAL() //PD_NONE")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC DisableControlAction(CONTROL_TYPE control, CONTROL_ACTION action, INT &iOffset_y)
|
|
DISABLE_CONTROL_ACTION(control, action)
|
|
iOffset_y++
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str = ""
|
|
HUD_COLOURS eColour = HUD_COLOUR_PURE_WHITE
|
|
|
|
SWITCH control
|
|
CASE PLAYER_CONTROL
|
|
eColour = HUD_COLOUR_REDLIGHT
|
|
BREAK
|
|
CASE CAMERA_CONTROL
|
|
eColour = HUD_COLOUR_GREENLIGHT
|
|
BREAK
|
|
CASE FRONTEND_CONTROL
|
|
eColour = HUD_COLOUR_BLUELIGHT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SWITCH action
|
|
CASE INPUT_LOOK_BEHIND str += ("INPUT_LOOK_BEHIND") BREAK
|
|
CASE INPUT_VEH_LOOK_BEHIND str += ("INPUT_VEH_LOOK_BEHIND") BREAK
|
|
CASE INPUT_LOOK_LR str += ("INPUT_LOOK_LR") BREAK
|
|
CASE INPUT_LOOK_UD str += ("INPUT_LOOK_UD") BREAK
|
|
|
|
CASE INPUT_SPRINT str += ("INPUT_SPRINT") BREAK
|
|
CASE INPUT_JUMP str += ("INPUT_JUMP") BREAK
|
|
CASE INPUT_DUCK str += ("INPUT_DUCK") BREAK
|
|
|
|
CASE INPUT_MELEE_ATTACK_ALTERNATE str += ("INPUT_MELEE_ATTACK_ALTERNATE") BREAK
|
|
CASE INPUT_MELEE_ATTACK_HEAVY str += ("INPUT_MELEE_ATTACK_HEAVY") BREAK
|
|
CASE INPUT_MELEE_ATTACK_LIGHT str += ("INPUT_MELEE_ATTACK_LIGHT") BREAK
|
|
CASE INPUT_MELEE_ATTACK1 str += ("INPUT_MELEE_ATTACK1") BREAK
|
|
CASE INPUT_MELEE_ATTACK2 str += ("INPUT_MELEE_ATTACK2") BREAK
|
|
|
|
CASE INPUT_MOVE_LR str += ("INPUT_MOVE_LR") BREAK
|
|
CASE INPUT_MOVE_UD str += ("INPUT_MOVE_UD") BREAK
|
|
|
|
DEFAULT
|
|
str += ("INPUT_")
|
|
str += ENUM_TO_INT(action)
|
|
str += ("_UNKNOWN")
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(control, action)
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), TO_FLOAT(iOffset_y), eColour)
|
|
ELSE
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), TO_FLOAT(iOffset_y), eColour, 0.25)
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
STRUCT RESPAWN_CUTSCENE_STRUCT
|
|
STRING pAnimDictName
|
|
STRING pAnimClipName
|
|
STRING pAnimCamName
|
|
|
|
FLOAT fRollingBlendoutPhase = 0.95
|
|
PED_MOTION_STATE ePedMotionState
|
|
|
|
VECTOR vAnimPos
|
|
VECTOR vAnimRot
|
|
|
|
TEXT_LABEL DialogueTextLabel
|
|
FLOAT fDialoguePhase
|
|
|
|
STRING pFacialDictName
|
|
STRING pFacialClipName
|
|
|
|
PLAYER_DAMAGE_ENUM ePlayerDamage
|
|
VECTOR vTrafficOffset, vTrafficBounds
|
|
|
|
BOOL bSeenFirstTimeHelp
|
|
|
|
STRING effectName
|
|
|
|
STRING soundSetName
|
|
STRING soundNameA, soundNameB
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID respawn_widgetId
|
|
#ENDIF
|
|
|
|
FLOAT gpCamPitch = 999.0
|
|
FLOAT gpCamHead = 999.0
|
|
|
|
BOOL bStartedPushin = FALSE
|
|
BOOL bShortCircuitedPushin = FALSE
|
|
|
|
PUSH_IN_DATA sPushInData
|
|
FLOAT fFirstPersonPunchPhase = 999.0
|
|
VECTOR vPushInDataDirectionMod
|
|
FLOAT gp3rdCamPitch
|
|
FLOAT gp3rdCamHead
|
|
|
|
ENDSTRUCT
|
|
|
|
PROC RUN_RESPAWN_CUTSCENE(STRING pSceneDebugName, RESPAWN_CUTSCENE_STRUCT &sRespawnCutscene, STRING HelpTextLabel)
|
|
CONST_FLOAT fRESPAWN_CUTSCENE_RADIUS 15.0 //5.0
|
|
FLOAT fAnimPhase = 0.0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FLOAT fAnimPos_heightDiff = 0.0
|
|
|
|
INT iDamage
|
|
TEXT_LABEL_63 str
|
|
BOOL bUpdateRespawnScene, bUpdateDamageDecal[10], bTestRespawnCamPichHeading
|
|
WIDGET_GROUP_ID first_time_deatharrest_widget_group_id
|
|
SET_CURRENT_WIDGET_GROUP(sRespawnCutscene.respawn_widgetId)
|
|
str = "Respawn Cutscene ["
|
|
str += pSceneDebugName
|
|
str += "]"
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, "RUN_RESPAWN_CUTSCENE(\"", pSceneDebugName, "\")")
|
|
first_time_deatharrest_widget_group_id = START_WIDGET_GROUP(str)
|
|
str = "clip: \""
|
|
str += sRespawnCutscene.pAnimClipName
|
|
str += "\", cam: \""
|
|
str += sRespawnCutscene.pAnimCamName
|
|
str += "\""
|
|
ADD_WIDGET_FLOAT_SLIDER(str, fAnimPhase, 0.0, 1.0, 0.01)
|
|
|
|
CONST_FLOAT SLIDER_RANGE 10.0
|
|
CONST_FLOAT SLIDER_STEP 0.01
|
|
ADD_WIDGET_STRING("synch scene origin")
|
|
ADD_WIDGET_FLOAT_SLIDER("vAnimPos x", sRespawnCutscene.vAnimPos.x, sRespawnCutscene.vAnimPos.x-SLIDER_RANGE, sRespawnCutscene.vAnimPos.x+SLIDER_RANGE, SLIDER_STEP)
|
|
ADD_WIDGET_FLOAT_SLIDER("vAnimPos y", sRespawnCutscene.vAnimPos.y, sRespawnCutscene.vAnimPos.y-SLIDER_RANGE, sRespawnCutscene.vAnimPos.y+SLIDER_RANGE, SLIDER_STEP)
|
|
ADD_WIDGET_FLOAT_SLIDER("vAnimPos z", sRespawnCutscene.vAnimPos.z, sRespawnCutscene.vAnimPos.z-SLIDER_RANGE, sRespawnCutscene.vAnimPos.z+SLIDER_RANGE, SLIDER_STEP*0.1)
|
|
|
|
ADD_WIDGET_FLOAT_READ_ONLY("fAnimPos_heightDiff", fAnimPos_heightDiff)
|
|
|
|
IF (sRespawnCutscene.vAnimRot.z > 180) sRespawnCutscene.vAnimRot.z -=360 ENDIF
|
|
IF (sRespawnCutscene.vAnimRot.z < -180) sRespawnCutscene.vAnimRot.z +=360 ENDIF
|
|
|
|
ADD_WIDGET_VECTOR_SLIDER("vAnimRot", sRespawnCutscene.vAnimRot, -180, 180, 1.0)
|
|
str = "help: \""
|
|
str += HelpTextLabel
|
|
str += "\""
|
|
ADD_WIDGET_STRING(str)
|
|
|
|
ADD_WIDGET_BOOL("bUpdateRespawnScene", bUpdateRespawnScene)
|
|
|
|
START_WIDGET_GROUP("damage decals")
|
|
REPEAT COUNT_OF(bUpdateDamageDecal) iDamage
|
|
bUpdateDamageDecal[iDamage] = IS_BITMASK_ENUM_AS_ENUM_SET(sRespawnCutscene.ePlayerDamage, INT_TO_ENUM(PLAYER_DAMAGE_ENUM, iPOWER(2, iDamage)))
|
|
ENDREPEAT
|
|
|
|
ADD_WIDGET_BOOL("PD_0_chinBruise", bUpdateDamageDecal[0])
|
|
ADD_WIDGET_BOOL("PD_1_plasterForehead", bUpdateDamageDecal[1])
|
|
ADD_WIDGET_BOOL("PD_2_foreheadBruise", bUpdateDamageDecal[2])
|
|
ADD_WIDGET_BOOL("PD_3_noseBruise", bUpdateDamageDecal[3])
|
|
ADD_WIDGET_BOOL("PD_4_lefteyeBruise", bUpdateDamageDecal[4])
|
|
ADD_WIDGET_BOOL("PD_5_splatterLeft", bUpdateDamageDecal[5])
|
|
ADD_WIDGET_BOOL("PD_6_splatterLeft", bUpdateDamageDecal[6])
|
|
ADD_WIDGET_BOOL("PD_7_splatterLeft", bUpdateDamageDecal[7])
|
|
ADD_WIDGET_BOOL("PD_8_splatterLeft", bUpdateDamageDecal[8])
|
|
ADD_WIDGET_BOOL("PD_9_cutNose", bUpdateDamageDecal[9])
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("traffic")
|
|
ADD_WIDGET_VECTOR_SLIDER("vTrafficOffset", sRespawnCutscene.vTrafficOffset, -50, 50, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("vTrafficBounds", sRespawnCutscene.vTrafficBounds, 0, 50, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
|
|
IF ((sRespawnCutscene.gpCamPitch != 999.0) AND (sRespawnCutscene.gpCamHead != 999.0))
|
|
OR ((sRespawnCutscene.gp3rdCamPitch != 999.0) AND (sRespawnCutscene.gp3rdCamHead != 999.0))
|
|
START_WIDGET_GROUP("gpCamPitch and Head")
|
|
IF NOT (sRespawnCutscene.gpCamPitch = 999.0)
|
|
AND NOT (sRespawnCutscene.gpCamHead = 999.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("gpCamPitch", sRespawnCutscene.gpCamPitch, -360, 360, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("gpCamHead", sRespawnCutscene.gpCamHead, -360, 360, 1.0)
|
|
ENDIF
|
|
IF NOT (sRespawnCutscene.gp3rdCamPitch = 999.0)
|
|
AND NOT (sRespawnCutscene.gp3rdCamHead = 999.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("gp3rdCamPitch", sRespawnCutscene.gp3rdCamPitch, -360, 360, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("gp3rdCamHead", sRespawnCutscene.gp3rdCamHead, -360, 360, 1.0)
|
|
ENDIF
|
|
|
|
ADD_WIDGET_BOOL("bTestRespawnCamPichHeading", bTestRespawnCamPichHeading)
|
|
STOP_WIDGET_GROUP()
|
|
ENDIF
|
|
|
|
START_WIDGET_GROUP("1st person")
|
|
IF sRespawnCutscene.fFirstPersonPunchPhase != 999.0
|
|
ADD_WIDGET_FLOAT_SLIDER("fFirstPersonPunchPhase", sRespawnCutscene.fFirstPersonPunchPhase, 0.0, 1.0, 0.01)
|
|
ELSE
|
|
ADD_WIDGET_FLOAT_READ_ONLY("fFirstPersonPunchPhase", sRespawnCutscene.fFirstPersonPunchPhase)
|
|
ENDIF
|
|
ADD_WIDGET_VECTOR_SLIDER("vPushInDataDirectionMod", sRespawnCutscene.vPushInDataDirectionMod, -90, 90, 0.01)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
STOP_WIDGET_GROUP()
|
|
CLEAR_CURRENT_WIDGET_GROUP(sRespawnCutscene.respawn_widgetId)
|
|
#ENDIF
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
|
|
REMOVE_PARTICLE_FX_IN_RANGE(sRespawnCutscene.vAnimPos, REPLAY_LOAD_SCENE_SIZE)
|
|
REMOVE_DECALS_IN_RANGE(sRespawnCutscene.vAnimPos, REPLAY_LOAD_SCENE_SIZE)
|
|
|
|
CLEAR_AREA(sRespawnCutscene.vAnimPos, 5.0, TRUE)
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), sRespawnCutscene.vAnimPos)
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
|
|
|
|
WAIT(0)
|
|
SET_GAME_PAUSED(TRUE)
|
|
|
|
// load the stream vol
|
|
|
|
|
|
REQUEST_ANIM_DICT(sRespawnCutscene.pAnimDictName)
|
|
IF IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.pFacialDictName)
|
|
CPRINTLN(DEBUG_RESPAWN, " REQUEST_ANIM_DICT(\"", sRespawnCutscene.pAnimDictName, "\")")
|
|
ELSE
|
|
CPRINTLN(DEBUG_RESPAWN, " REQUEST_ANIM_DICT(\"", sRespawnCutscene.pAnimDictName, "\" and \"", sRespawnCutscene.pFacialDictName, "\")")
|
|
|
|
REQUEST_ANIM_DICT(sRespawnCutscene.pFacialDictName)
|
|
ENDIF
|
|
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
|
|
Replay_TeleportPlayer(sRespawnCutscene.vAnimPos, sRespawnCutscene.vAnimRot.z)
|
|
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
|
|
INT iRespawnTimeoutGametime = GET_GAME_TIMER() + REPLAY_LOAD_SCENE_TIMEOUT
|
|
BOOL bRespawnAssetsLoading = FALSE
|
|
sRespawnCutscene.bShortCircuitedPushin = FALSE
|
|
|
|
WHILE NOT bRespawnAssetsLoading
|
|
AND iRespawnTimeoutGametime > GET_GAME_TIMER()
|
|
bRespawnAssetsLoading = TRUE
|
|
|
|
REQUEST_ANIM_DICT(sRespawnCutscene.pAnimDictName)
|
|
IF NOT HAS_ANIM_DICT_LOADED(sRespawnCutscene.pAnimDictName)
|
|
bRespawnAssetsLoading = FALSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG1LN(DEBUG_RESPAWN, " HAS_ANIM_DICT_LOADED(\"", sRespawnCutscene.pAnimDictName, "\")")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.pFacialDictName)
|
|
REQUEST_ANIM_DICT(sRespawnCutscene.pFacialDictName)
|
|
IF NOT HAS_ANIM_DICT_LOADED(sRespawnCutscene.pFacialDictName)
|
|
bRespawnAssetsLoading = FALSE
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG1LN(DEBUG_RESPAWN, " HAS_ANIM_DICT_LOADED(\"", sRespawnCutscene.pFacialDictName, "\")")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_RESPAWN, "<RESPAWN> loadscene and assets took ", iRespawnTimeoutGametime - GET_GAME_TIMER(), "ms")
|
|
#ENDIF
|
|
|
|
Force_All_Drunk_Peds_To_Become_Sober_And_Quit_Camera()
|
|
|
|
IF NOT ARE_VECTORS_EQUAL(sRespawnCutscene.vTrafficBounds, <<0,0,0>>)
|
|
SET_ROADS_IN_AREA((sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset)-sRespawnCutscene.vTrafficBounds, (sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset)+sRespawnCutscene.vTrafficBounds, FALSE)
|
|
CLEAR_AREA_OF_VEHICLES((sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset), VMAG(sRespawnCutscene.vTrafficBounds)+25.0)
|
|
CLEAR_AREA((sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset), VMAG(sRespawnCutscene.vTrafficBounds)+25.0, TRUE)
|
|
ENDIF
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID())
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
|
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
SET_GAME_PAUSED(FALSE)
|
|
|
|
CLEAR_AREA(sRespawnCutscene.vAnimPos, fRESPAWN_CUTSCENE_RADIUS, TRUE)
|
|
INSTANTLY_FILL_PED_POPULATION()
|
|
INSTANTLY_FILL_VEHICLE_POPULATION()
|
|
|
|
Set_Leave_Area_Flag_For_All_Blipped_Missions()
|
|
|
|
// wait for replay processing to finish before fading in for cut-scene
|
|
WHILE IS_REPLAY_BEING_PROCESSED()
|
|
WAIT(0)
|
|
CPRINTLN(DEBUG_RESPAWN, "RUN_RESPAWN_CUTSCENE waiting for replay processing to complete")
|
|
ENDWHILE
|
|
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT)
|
|
ENDIF
|
|
|
|
SET_FADE_IN_AFTER_DEATH_ARREST(TRUE)
|
|
|
|
BOOL bPedForcedToUseScripCamHeadingFlag
|
|
INT iSceneId
|
|
CAMERA_INDEX respawnCamIndex
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
iSceneId = CREATE_SYNCHRONIZED_SCENE(sRespawnCutscene.vAnimPos, sRespawnCutscene.vAnimRot)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iSceneId, FALSE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iSceneId, FALSE)
|
|
|
|
respawnCamIndex = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
|
|
|
|
SYNCED_SCENE_PLAYBACK_FLAGS flags = SYNCED_SCENE_DONT_INTERRUPT
|
|
IF (sRespawnCutscene.ePedMotionState <> MS_ON_FOOT_IDLE)
|
|
flags |= SYNCED_SCENE_TAG_SYNC_OUT
|
|
ENDIF
|
|
|
|
APPLY_DEATHARREST_DAMAGE_DECALS(PLAYER_PED_ID(), sRespawnCutscene.ePlayerDamage)
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iSceneId,
|
|
sRespawnCutscene.pAnimDictName, sRespawnCutscene.pAnimClipName,
|
|
INSTANT_BLEND_IN, WALK_BLEND_OUT, flags)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), TRUE)
|
|
SET_PLAYER_CLOTH_PIN_FRAMES(PLAYER_ID(), 1)
|
|
|
|
bPedForcedToUseScripCamHeadingFlag = GET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_ForcePedToUseScripCamHeading)
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_ForcePedToUseScripCamHeading, TRUE)
|
|
|
|
PLAY_SYNCHRONIZED_CAM_ANIM(respawnCamIndex,
|
|
iSceneId, sRespawnCutscene.pAnimCamName, sRespawnCutscene.pAnimDictName)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.pFacialDictName)
|
|
AND NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.pFacialClipName)
|
|
CPRINTLN(DEBUG_RESPAWN, "RUN_RESPAWN_CUTSCENE play facial \"", sRespawnCutscene.pFacialDictName, "\", \"", sRespawnCutscene.pFacialClipName, "\"")
|
|
|
|
TASK_PLAY_ANIM(PLAYER_PED_ID(), sRespawnCutscene.pFacialDictName, sRespawnCutscene.pFacialClipName,
|
|
INSTANT_BLEND_IN, WALK_BLEND_OUT, 10000,
|
|
AF_SECONDARY | AF_LOOPING)
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
SCRIPT_ASSERT("player is dead at respawn??")
|
|
#ENDIF
|
|
iSceneId = -1
|
|
ENDIF
|
|
|
|
IF NOT sRespawnCutscene.bSeenFirstTimeHelp
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(HelpTextLabel)
|
|
PRINT_HELP(HelpTextLabel)
|
|
sRespawnCutscene.bSeenFirstTimeHelp = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BOOL bPlayedsRespawnCutsceneDialogueTextLabel = FALSE, bEffectOrSoundPlayed = FALSE
|
|
structPedsForConversation MyLocalPedStruct
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.DialogueTextLabel)
|
|
|
|
enumCharacterList ePlayerChar = GET_CURRENT_PLAYER_PED_ENUM()
|
|
|
|
INT iPlayerVoiceNum = -1
|
|
STRING tPlayerVoiceID = ""
|
|
|
|
SWITCH ePlayerChar
|
|
CASE CHAR_MICHAEL
|
|
iPlayerVoiceNum = 0
|
|
tPlayerVoiceID = "MICHAEL"
|
|
BREAK
|
|
CASE CHAR_FRANKLIN
|
|
iPlayerVoiceNum = 1
|
|
tPlayerVoiceID = "FRANKLIN"
|
|
BREAK
|
|
CASE CHAR_TREVOR
|
|
iPlayerVoiceNum = 2
|
|
tPlayerVoiceID = "TREVOR"
|
|
BREAK
|
|
|
|
DEFAULT
|
|
SCRIPT_ASSERT("invalid ePlayerChar")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, iPlayerVoiceNum, PLAYER_PED_ID(), tPlayerVoiceID)
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSceneId)
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_RESPAWN, "SYNCHRONIZED_SCENE_RUNNING(", iSceneId, ")")
|
|
#ENDIF
|
|
|
|
STRING sWalkInterruptible = "WalkInterruptible"
|
|
STRING sForceBlendout = "ForceBlendout"
|
|
|
|
WHILE IS_SYNCHRONIZED_SCENE_RUNNING(iSceneId)
|
|
AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
|
|
IF NOT bEffectOrSoundPlayed
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.effectName)
|
|
CONST_INT durationMs 0 //3000
|
|
ANIMPOSTFX_PLAY(sRespawnCutscene.effectName, durationMs, FALSE)
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, "RUN_RESPAWN_CUTSCENE animpostfx play \"", sRespawnCutscene.effectName, "\", ", durationMs)
|
|
bEffectOrSoundPlayed = TRUE
|
|
ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.soundSetName)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.soundNameA)
|
|
PLAY_SOUND_FRONTEND(-1, sRespawnCutscene.soundNameA, sRespawnCutscene.soundSetName, FALSE)
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, "RUN_RESPAWN_CUTSCENE play sound frontend \"", sRespawnCutscene.soundNameA, "\", \"", sRespawnCutscene.soundSetName, "\"")
|
|
bEffectOrSoundPlayed = TRUE
|
|
ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.soundNameB)
|
|
PLAY_SOUND_FRONTEND(-1, sRespawnCutscene.soundNameB, sRespawnCutscene.soundSetName, FALSE)
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, "RUN_RESPAWN_CUTSCENE play sound frontend \"", sRespawnCutscene.soundNameB, "\", \"", sRespawnCutscene.soundSetName, "\"")
|
|
bEffectOrSoundPlayed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
// Hide the HUD
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_FEED)
|
|
CLEAR_REMINDER_MESSAGE()
|
|
|
|
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
|
|
|
|
//Is the global wait timer at 0?
|
|
INT iGameTime = GET_GAME_TIMER()
|
|
IF iGameTime >= g_iGlobalWaitTime - 0500
|
|
ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 2)
|
|
ENDIF
|
|
|
|
FLOAT ReturnStartPhase = -1, ReturnEndPhase = -1
|
|
|
|
#IF IS_DEBUG_BUILD IF NOT bUpdateRespawnScene #ENDIF
|
|
fAnimPhase = GET_SYNCHRONIZED_SCENE_PHASE(iSceneId)
|
|
#IF IS_DEBUG_BUILD ENDIF #ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bUpdateRespawnScene
|
|
IF NOT IS_SYNCHRONIZED_SCENE_LOOPED(iSceneId)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iSceneId, TRUE)
|
|
|
|
REPEAT COUNT_OF(bUpdateDamageDecal) iDamage
|
|
bUpdateDamageDecal[iDamage] = IS_BITMASK_ENUM_AS_ENUM_SET(sRespawnCutscene.ePlayerDamage, INT_TO_ENUM(PLAYER_DAMAGE_ENUM, iPOWER(2, iDamage)))
|
|
ENDREPEAT
|
|
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
ENDIF
|
|
SET_SYNCHRONIZED_SCENE_ORIGIN(iSceneId, sRespawnCutscene.vAnimPos, sRespawnCutscene.vAnimRot)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iSceneId, fAnimPhase)
|
|
|
|
|
|
IF bTestRespawnCamPichHeading
|
|
IF IS_CAM_RENDERING(respawnCamIndex)
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
ENDIF
|
|
|
|
IF GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(sRespawnCutscene.gpCamPitch)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(sRespawnCutscene.gpCamHead)
|
|
ELSE
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(sRespawnCutscene.gp3rdCamPitch)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(sRespawnCutscene.gp3rdCamHead)
|
|
|
|
SET_FIRST_PERSON_SHOOTER_CAMERA_PITCH(sRespawnCutscene.gp3rdCamPitch)
|
|
SET_FIRST_PERSON_SHOOTER_CAMERA_HEADING(sRespawnCutscene.gp3rdCamHead)
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_CAM_RENDERING(respawnCamIndex)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
FLOAT fPlayerCoord_groundZ = 0.0
|
|
VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
|
|
IF GET_GROUND_Z_FOR_3D_COORD(vPlayerCoord, fPlayerCoord_groundZ)
|
|
fAnimPos_heightDiff = (vPlayerCoord.z - 1) - fPlayerCoord_groundZ
|
|
ELSE
|
|
fAnimPos_heightDiff = 0.0
|
|
ENDIF
|
|
|
|
BOOL bUpdatedDamageDecals = FALSE
|
|
REPEAT COUNT_OF(bUpdateDamageDecal) iDamage
|
|
|
|
PLAYER_DAMAGE_ENUM eDamageBit = INT_TO_ENUM(PLAYER_DAMAGE_ENUM, iPOWER(2, iDamage))
|
|
|
|
IF bUpdateDamageDecal[iDamage] <> IS_BITMASK_ENUM_AS_ENUM_SET(sRespawnCutscene.ePlayerDamage, eDamageBit)
|
|
IF bUpdateDamageDecal[iDamage]
|
|
SET_BITMASK_ENUM_AS_ENUM(sRespawnCutscene.ePlayerDamage, eDamageBit)
|
|
ELSE
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sRespawnCutscene.ePlayerDamage, eDamageBit)
|
|
ENDIF
|
|
|
|
bUpdatedDamageDecals = TRUE
|
|
ENDIF
|
|
|
|
ENDREPEAT
|
|
|
|
IF bUpdatedDamageDecals
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CLEAR_PED_BLOOD_DAMAGE(PLAYER_PED_ID())
|
|
RESET_PED_VISIBLE_DAMAGE(PLAYER_PED_ID())
|
|
|
|
APPLY_DEATHARREST_DAMAGE_DECALS(PLAYER_PED_ID(), sRespawnCutscene.ePlayerDamage)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF g_bDrawLiteralSceneString
|
|
DRAW_DEBUG_BOX((sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset)-sRespawnCutscene.vTrafficBounds,
|
|
(sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset)+sRespawnCutscene.vTrafficBounds, 000,128,000,064)
|
|
|
|
IF DOES_CAM_EXIST(respawnCamIndex)
|
|
VECTOR vRenderingCamPos = GET_CAM_COORD(respawnCamIndex)
|
|
// VECTOR vRenderingCamOffset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(PLAYER_PED_ID(), vRenderingCamPos)
|
|
VECTOR vRenderingCamRot = GET_CAM_ROT(respawnCamIndex)
|
|
VECTOR vModifiedRenderingCamRot = vRenderingCamRot+ sRespawnCutscene.vPushInDataDirectionMod
|
|
// VECTOR vRenderingCamOffsetRot = vModifiedRenderingCamRot - GET_ENTITY_ROTATION(PLAYER_PED_ID())
|
|
VECTOR vRenderingCamDirection = <<-SIN(vModifiedRenderingCamRot.z) * COS(vModifiedRenderingCamRot.x), COS(vModifiedRenderingCamRot.z) * COS(vModifiedRenderingCamRot.x), SIN(vModifiedRenderingCamRot.x)>>
|
|
// VECTOR vRenderingCamAttachedDirection = <<-SIN(vRenderingCamOffsetRot.z) * COS(vRenderingCamOffsetRot.x), COS(vRenderingCamOffsetRot.z) * COS(vRenderingCamOffsetRot.x), SIN(vRenderingCamOffsetRot.x)>>
|
|
|
|
DRAW_DEBUG_LINE(vRenderingCamPos + (vRenderingCamDirection * VDIST(vRenderingCamPos, GET_ENTITY_COORDS(PLAYER_PED_ID()))), vRenderingCamPos)
|
|
DRAW_DEBUG_SPHERE(vRenderingCamPos + (vRenderingCamDirection * VDIST(vRenderingCamPos, GET_ENTITY_COORDS(PLAYER_PED_ID()))), 0.1)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_LEFT)
|
|
fAnimPhase -= 0.01
|
|
|
|
IF (fAnimPhase < 0) fAnimPhase = 0 ENDIF
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_RIGHT)
|
|
fAnimPhase += 0.01
|
|
|
|
IF (fAnimPhase > 1) fAnimPhase = 1 ENDIF
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_C)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("CASE ")SAVE_STRING_TO_DEBUG_FILE(pSceneDebugName)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.pAnimDictName = \"")SAVE_STRING_TO_DEBUG_FILE(sRespawnCutscene.pAnimDictName)SAVE_STRING_TO_DEBUG_FILE("\"")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.pAnimClipName = \"")SAVE_STRING_TO_DEBUG_FILE(sRespawnCutscene.pAnimClipName)SAVE_STRING_TO_DEBUG_FILE("\"")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.pAnimCamName = \"")SAVE_STRING_TO_DEBUG_FILE(sRespawnCutscene.pAnimCamName)SAVE_STRING_TO_DEBUG_FILE("\"")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" ")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.vAnimPos = ")SAVE_VECTOR_TO_DEBUG_FILE(sRespawnCutscene.vAnimPos)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.vAnimRot = ")SAVE_VECTOR_TO_DEBUG_FILE(sRespawnCutscene.vAnimRot)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" ")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.ePedMotionState = MS_")
|
|
SWITCH sRespawnCutscene.ePedMotionState
|
|
CASE MS_ON_FOOT_IDLE SAVE_STRING_TO_DEBUG_FILE("ON_FOOT_IDLE") BREAK
|
|
CASE MS_ON_FOOT_WALK SAVE_STRING_TO_DEBUG_FILE("ON_FOOT_WALK") BREAK
|
|
|
|
DEFAULT SAVE_INT_TO_DEBUG_FILE(ENUM_TO_INT(sRespawnCutscene.ePedMotionState)) BREAK
|
|
ENDSWITCH
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE(" ")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
IF NOT ARE_VECTORS_EQUAL(sRespawnCutscene.vTrafficBounds, <<0,0,0>>)
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.vTrafficOffset = ")SAVE_VECTOR_TO_DEBUG_FILE(sRespawnCutscene.vTrafficOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" sRespawnCutscene.vTrafficBounds = ")SAVE_VECTOR_TO_DEBUG_FILE(sRespawnCutscene.vTrafficBounds)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDIF
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("BREAK")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
bUpdateRespawnScene = FALSE
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_LOOPED(iSceneId)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iSceneId, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("\"")
|
|
str += (sRespawnCutscene.pAnimDictName)
|
|
str += (", ")
|
|
str += (sRespawnCutscene.pAnimClipName)
|
|
str += ("\"")
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 0, HUD_COLOUR_RED)
|
|
|
|
str = ("synch scene[")
|
|
str += (iSceneId)
|
|
str += ("] phase: ")
|
|
str += (GET_STRING_FROM_FLOAT(fAnimPhase))
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 1, HUD_COLOUR_ORANGE)
|
|
|
|
|
|
REPEAT COUNT_OF(bUpdateDamageDecal) iDamage
|
|
PLAYER_DAMAGE_ENUM eDamageBit = INT_TO_ENUM(PLAYER_DAMAGE_ENUM, iPOWER(2, iDamage))
|
|
|
|
str = (" PD_")
|
|
str += (iDamage)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(sRespawnCutscene.ePlayerDamage, eDamageBit)
|
|
str += (" set")
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), TO_FLOAT(2+iDamage), HUD_COLOUR_REDLIGHT)
|
|
ELSE
|
|
str += (" NOT set")
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), TO_FLOAT(2+iDamage), HUD_COLOUR_GREENLIGHT)
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
#ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.DialogueTextLabel)
|
|
IF NOT bPlayedsRespawnCutsceneDialogueTextLabel
|
|
CPRINTLN(DEBUG_RESPAWN, "wait for ", sRespawnCutscene.fDialoguePhase, " to play \"", sRespawnCutscene.DialogueTextLabel, "\"")
|
|
|
|
IF (fAnimPhase >= sRespawnCutscene.fDialoguePhase)
|
|
IF CREATE_CONVERSATION(MyLocalPedStruct, "PRSAUD", sRespawnCutscene.DialogueTextLabel, CONV_PRIORITY_AMBIENT_MEDIUM)
|
|
bPlayedsRespawnCutsceneDialogueTextLabel = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_RESPAWN, "played \"", sRespawnCutscene.DialogueTextLabel, "\"")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BOOL bAnimEventHit
|
|
bAnimEventHit = FALSE
|
|
IF HAS_ANIM_EVENT_FIRED(PLAYER_PED_ID(), GET_HASH_KEY(sWalkInterruptible))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("\"")
|
|
str += (sWalkInterruptible)
|
|
str += ("\" ")
|
|
str += GET_STRING_FROM_FLOAT(ReturnStartPhase)
|
|
str += (" to ")
|
|
str += GET_STRING_FROM_FLOAT(ReturnEndPhase)
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), TO_FLOAT(2+COUNT_OF(bUpdateDamageDecal)), HUD_COLOUR_ORANGE)
|
|
#ENDIF
|
|
|
|
// IF (fAnimPhase >= ReturnStartPhase)
|
|
// AND (fAnimPhase <= ReturnEndPhase)
|
|
|
|
CONST_INT iLEFT_STICK_THRESHOLD 64
|
|
|
|
INT ReturnLeftX = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_AXIS_X) -128
|
|
INT ReturnLeftY = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_AXIS_Y) -128
|
|
|
|
IF ReturnLeftX < iLEFT_STICK_THRESHOLD
|
|
AND ReturnLeftX > -iLEFT_STICK_THRESHOLD
|
|
AND ReturnLeftY < iLEFT_STICK_THRESHOLD
|
|
AND ReturnLeftY > -iLEFT_STICK_THRESHOLD
|
|
//
|
|
ELSE
|
|
bAnimEventHit = TRUE
|
|
ENDIF
|
|
// ENDIF
|
|
ELSE
|
|
ReturnStartPhase = -1
|
|
ReturnEndPhase = -1
|
|
bAnimEventHit = FALSE
|
|
|
|
sRespawnCutscene.fRollingBlendoutPhase = sRespawnCutscene.fRollingBlendoutPhase
|
|
ReturnStartPhase = ReturnStartPhase
|
|
ReturnEndPhase = ReturnEndPhase
|
|
ENDIF
|
|
|
|
IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
|
|
AND sRespawnCutscene.fFirstPersonPunchPhase > 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("1st person phase: ")
|
|
str += GET_STRING_FROM_FLOAT(fAnimPhase)
|
|
str += (" >= ")
|
|
str += GET_STRING_FROM_FLOAT(sRespawnCutscene.fFirstPersonPunchPhase)
|
|
HUD_COLOURS ePushin_hud_colour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
|
|
|
|
IF (fAnimPhase >= sRespawnCutscene.fFirstPersonPunchPhase)
|
|
|
|
IF NOT sRespawnCutscene.bStartedPushin
|
|
FLOAT fPushinDist = PUSH_IN_DISTANCE
|
|
VECTOR vCamCoord = GET_FINAL_RENDERED_CAM_COORD()
|
|
VECTOR vPlayerCoord = GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_HEAD, <<0,0,0>>)
|
|
FLOAT fCoordDist3d = GET_DISTANCE_BETWEEN_COORDS(vCamCoord, vPlayerCoord)
|
|
|
|
CONST_FLOAT fPUSHIN_DIST_BUFFER 0.75
|
|
fPushinDist = CLAMP(fPushinDist, 0.001, fCoordDist3d-fPUSHIN_DIST_BUFFER)
|
|
IF fPushinDist < 0
|
|
CWARNINGLN(DEBUG_RESPAWN, "fPushinDist is less than zero!! ", fPushinDist)
|
|
fPushinDist = 0.001
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF fPushinDist = PUSH_IN_DISTANCE
|
|
CPRINTLN(DEBUG_RESPAWN, "PUSH_IN fCoordDist3d: ", fCoordDist3d, ", fPushinDist: PUSH_IN_DISTANCE //", pSceneDebugName)
|
|
ELSE
|
|
CPRINTLN(DEBUG_RESPAWN, "PUSH_IN fCoordDist3d: ", fCoordDist3d, ", fPushinDist: ", fPushinDist, " //", pSceneDebugName)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
FILL_PUSH_IN_DATA(sRespawnCutscene.sPushInData, PLAYER_PED_ID(), GET_CURRENT_PLAYER_PED_ENUM(),
|
|
0.000001, //FLOAT fDistance = PUSH_IN_DISTANCE
|
|
300, //INT iInterpTime = PUSH_IN_INTERP_TIME
|
|
300, //INT iCutTime = PUSH_IN_CUT_TIME
|
|
000, //INT iPostFXTime = PUSH_IN_POSTFX_TIME
|
|
000, //INT iSpeedUpTime = 0
|
|
DEFAULT) //FLOAT fSpeedUpProportion = PUSH_IN_SPEED_UP_PROPORTION)
|
|
SET_PUSH_IN_DIRECTION_MODIFIER(sRespawnCutscene.sPushInData, sRespawnCutscene.vPushInDataDirectionMod)
|
|
|
|
// rob - short-circuit the creation of push-in cams to keep the original cam moving round till the cut
|
|
IF NOT sRespawnCutscene.bShortCircuitedPushin
|
|
sRespawnCutscene.sPushInData.state = PUSH_IN_RUNNING
|
|
sRespawnCutscene.sPushInData.iCreateTime = GET_GAME_TIMER()
|
|
sRespawnCutscene.sPushInData.bDonePostFX = FALSE
|
|
sRespawnCutscene.bShortCircuitedPushin = TRUE
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, "PUSH_IN vDirectionMod: ", sRespawnCutscene.sPushInData.vDirectionMod)
|
|
|
|
// // // // // // // // // //
|
|
FLOAT pitch, heading
|
|
IF (sRespawnCutscene.gp3rdCamHead = 999.0)
|
|
sRespawnCutscene.gp3rdCamPitch = 0.0
|
|
ENDIF
|
|
|
|
IF (sRespawnCutscene.gp3rdCamHead = 999.0)
|
|
VECTOR vecCamEndRot
|
|
FLOAT fCreateHead
|
|
vecCamEndRot = GET_FINAL_RENDERED_CAM_ROT()
|
|
fCreateHead = GET_ENTITY_HEADING(PLAYER_PED_ID())
|
|
|
|
FLOAT finalSplineCameraHeading, playerHeading
|
|
finalSplineCameraHeading = vecCamEndRot.z
|
|
playerHeading = fCreateHead
|
|
sRespawnCutscene.gp3rdCamHead = finalSplineCameraHeading - playerHeading
|
|
|
|
IF (sRespawnCutscene.gp3rdCamHead < 360) sRespawnCutscene.gp3rdCamHead += 360 ENDIF
|
|
IF (sRespawnCutscene.gp3rdCamHead > 360) sRespawnCutscene.gp3rdCamHead -= 360 ENDIF
|
|
ENDIF
|
|
pitch = sRespawnCutscene.gp3rdCamPitch
|
|
heading = sRespawnCutscene.gp3rdCamHead
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(pitch)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(heading)
|
|
|
|
SET_FIRST_PERSON_SHOOTER_CAMERA_PITCH(pitch)
|
|
SET_FIRST_PERSON_SHOOTER_CAMERA_HEADING(heading)
|
|
|
|
VECTOR camIndexCoord, gamcamIndexCoord
|
|
FLOAT fCamInterpDist
|
|
INT iCamInterpTime
|
|
camIndexCoord = GET_FINAL_RENDERED_CAM_COORD()
|
|
gamcamIndexCoord = GET_GAMEPLAY_CAM_COORD()
|
|
fCamInterpDist = GET_DISTANCE_BETWEEN_COORDS(camIndexCoord, gamcamIndexCoord)
|
|
iCamInterpTime = ROUND(fCamInterpDist*1000)
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, "SET_GAMEPLAY_CAM first person(pitch: ", pitch, ", heading:", heading, ", duration:", iCamInterpTime, ")")
|
|
// // // // // // // // // //
|
|
|
|
sRespawnCutscene.bStartedPushin = TRUE
|
|
ENDIF
|
|
|
|
IF sRespawnCutscene.bStartedPushin
|
|
DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE()
|
|
IF HANDLE_PUSH_IN(sRespawnCutscene.sPushInData,
|
|
TRUE, // BOOL bCamsAttached = FALSE
|
|
TRUE, // BOOL bDestroyCamsAtEnd = TRUE
|
|
DEFAULT, // BOOL bDoPostFX = TRUE
|
|
DEFAULT, // BOOL bOnlyAttachStartIfCamsAttached = FALSE
|
|
FALSE) // BOOL bDoColouredFlash = TRUE)
|
|
#IF IS_DEBUG_BUILD
|
|
ePushin_hud_colour = HUD_COLOUR_REDLIGHT
|
|
str += (" [pushed in!]")
|
|
CPRINTLN(DEBUG_RESPAWN, str)
|
|
#ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
ePushin_hud_colour = HUD_COLOUR_REDDARK
|
|
str += (" [pushing in...]")
|
|
CPRINTLN(DEBUG_RESPAWN, str)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), TO_FLOAT(3+COUNT_OF(bUpdateDamageDecal)), ePushin_hud_colour)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_ANIM_EVENT_FIRED(PLAYER_PED_ID(), GET_HASH_KEY(sForceBlendout))
|
|
OR bAnimEventHit
|
|
#IF IS_DEBUG_BUILD IF NOT bUpdateRespawnScene #ENDIF
|
|
|
|
// IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
|
|
// AND sRespawnCutscene.fFirstPersonPunchPhase > 0
|
|
// IF NOT sRespawnCutscene.bStartedPushin
|
|
// CASSERTLN(DEBUG_RESPAWN, "respawn pushin phase[", sRespawnCutscene.fFirstPersonPunchPhase, "] is greater than force blend out phase [", fAnimPhase, "] so it'd never hit - consider changing!")
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
|
|
SWITCH sRespawnCutscene.ePedMotionState
|
|
CASE MS_ON_FOOT_IDLE
|
|
CPRINTLN(DEBUG_RESPAWN, "FORCE_PED_MOTION_STATE(MS_ON_FOOT_IDLE) 2: ", fAnimPhase)
|
|
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE, TRUE)
|
|
// SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVEBLENDRATIO_WALK, 0500)
|
|
|
|
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
|
BREAK
|
|
CASE MS_ON_FOOT_WALK
|
|
CPRINTLN(DEBUG_RESPAWN, "FORCE_PED_MOTION_STATE(MS_ON_FOOT_WALK) 2: ", fAnimPhase)
|
|
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, TRUE)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVEBLENDRATIO_WALK, 0500)
|
|
|
|
// // // // // // // // // //
|
|
IF GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
|
|
FLOAT pitch, heading
|
|
IF (sRespawnCutscene.gpCamHead = 999.0)
|
|
sRespawnCutscene.gpCamPitch= 0.0
|
|
ENDIF
|
|
|
|
IF (sRespawnCutscene.gpCamHead = 999.0)
|
|
VECTOR vecCamEndRot
|
|
FLOAT fCreateHead
|
|
vecCamEndRot = GET_FINAL_RENDERED_CAM_ROT()
|
|
fCreateHead = GET_ENTITY_HEADING(PLAYER_PED_ID())
|
|
|
|
FLOAT finalSplineCameraHeading, playerHeading
|
|
finalSplineCameraHeading = vecCamEndRot.z
|
|
playerHeading = fCreateHead
|
|
sRespawnCutscene.gpCamHead = finalSplineCameraHeading - playerHeading
|
|
|
|
IF (sRespawnCutscene.gpCamHead < 360) sRespawnCutscene.gpCamHead += 360 ENDIF
|
|
IF (sRespawnCutscene.gpCamHead > 360) sRespawnCutscene.gpCamHead -= 360 ENDIF
|
|
ENDIF
|
|
pitch = sRespawnCutscene.gpCamPitch
|
|
heading = sRespawnCutscene.gpCamHead
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(pitch)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(heading)
|
|
|
|
VECTOR camIndexCoord, gamcamIndexCoord
|
|
FLOAT fCamInterpDist
|
|
INT iCamInterpTime
|
|
camIndexCoord = GET_FINAL_RENDERED_CAM_COORD()
|
|
gamcamIndexCoord = GET_GAMEPLAY_CAM_COORD()
|
|
fCamInterpDist = GET_DISTANCE_BETWEEN_COORDS(camIndexCoord, gamcamIndexCoord)
|
|
iCamInterpTime = ROUND(fCamInterpDist*1000)
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, "SET_GAMEPLAY_CAM(pitch: ", pitch, ", heading:", heading, ", duration:", iCamInterpTime, ")")
|
|
// // // // // // // // // //
|
|
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, TRUE, iCamInterpTime, FALSE)
|
|
ELSE
|
|
// // // // // // // // // // //
|
|
// IF (sRespawnCutscene.gp3rdCamHead = 999.0)
|
|
// sRespawnCutscene.gp3rdCamPitch = 0.0
|
|
// ENDIF
|
|
//
|
|
// IF (sRespawnCutscene.gp3rdCamHead = 999.0)
|
|
// VECTOR vecCamEndRot
|
|
// FLOAT fCreateHead
|
|
// vecCamEndRot = GET_FINAL_RENDERED_CAM_ROT()
|
|
// fCreateHead = GET_ENTITY_HEADING(PLAYER_PED_ID())
|
|
//
|
|
// FLOAT finalSplineCameraHeading, playerHeading
|
|
// finalSplineCameraHeading = vecCamEndRot.z
|
|
// playerHeading = fCreateHead
|
|
// sRespawnCutscene.gp3rdCamHead = finalSplineCameraHeading - playerHeading
|
|
//
|
|
// IF (sRespawnCutscene.gp3rdCamHead < 360) sRespawnCutscene.gp3rdCamHead += 360 ENDIF
|
|
// IF (sRespawnCutscene.gp3rdCamHead > 360) sRespawnCutscene.gp3rdCamHead -= 360 ENDIF
|
|
// ENDIF
|
|
// pitch = sRespawnCutscene.gp3rdCamPitch
|
|
// heading = sRespawnCutscene.gp3rdCamHead
|
|
//
|
|
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(pitch)
|
|
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(heading)
|
|
//
|
|
// VECTOR camIndexCoord, gamcamIndexCoord
|
|
// FLOAT fCamInterpDist
|
|
// INT iCamInterpTime
|
|
// camIndexCoord = GET_FINAL_RENDERED_CAM_COORD()
|
|
// gamcamIndexCoord = GET_GAMEPLAY_CAM_COORD()
|
|
// fCamInterpDist = GET_DISTANCE_BETWEEN_COORDS(camIndexCoord, gamcamIndexCoord)
|
|
// iCamInterpTime = ROUND(fCamInterpDist*1000)
|
|
//
|
|
// CPRINTLN(DEBUG_RESPAWN, "SET_GAMEPLAY_CAM first person(pitch: ", pitch, ", heading:", heading, ", duration:", iCamInterpTime, ")")
|
|
// // // // // // // // // // //
|
|
|
|
// RENDER_SCRIPT_CAMS(FALSE, TRUE, iCamInterpTime, FALSE)
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
CPRINTLN(DEBUG_RESPAWN, "FORCE_PED_MOTION_STATE(MS_unknown_", ENUM_TO_INT(sRespawnCutscene.ePedMotionState), ") 2: ", fAnimPhase)
|
|
|
|
SCRIPT_ASSERT("invalid sRespawnCutscene.ePedMotionState")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSceneId)
|
|
DETACH_SYNCHRONIZED_SCENE(iSceneId)
|
|
iSceneId = -1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD ENDIF #ENDIF
|
|
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_RESPAWN, "SYNCHRONIZED_SCENE_NOT_RUNNING(", iSceneId, ")")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
|
|
|
|
IF NOT ARE_VECTORS_EQUAL(sRespawnCutscene.vTrafficBounds, <<0,0,0>>)
|
|
SET_ROADS_BACK_TO_ORIGINAL((sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset)-sRespawnCutscene.vTrafficBounds, (sRespawnCutscene.vAnimPos+sRespawnCutscene.vTrafficOffset)+sRespawnCutscene.vTrafficBounds)
|
|
ENDIF
|
|
|
|
// REMOVE_SCENARIO_BLOCKING_AREA(respawnScenarioBlockID)
|
|
// CLEAR_PED_NON_CREATION_AREA()
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
|
|
BOOL bIS_INTERPOLATING_FROM_SCRIPT_CAMS = IS_INTERPOLATING_FROM_SCRIPT_CAMS()
|
|
BOOL bHANDLE_PUSH_IN = FALSE
|
|
IF sRespawnCutscene.bStartedPushin
|
|
DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE()
|
|
IF NOT HANDLE_PUSH_IN(sRespawnCutscene.sPushInData,
|
|
TRUE, // BOOL bCamsAttached = FALSE
|
|
TRUE, // BOOL bDestroyCamsAtEnd = TRUE
|
|
DEFAULT, // BOOL bDoPostFX = TRUE
|
|
DEFAULT, // BOOL bOnlyAttachStartIfCamsAttached = FALSE
|
|
DEFAULT) // BOOL bDoColouredFlash = TRUE)
|
|
bHANDLE_PUSH_IN = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bIS_INTERPOLATING_FROM_SCRIPT_CAMS
|
|
OR bHANDLE_PUSH_IN
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_RESPAWN, "IS_INTERPOLATING_FROM_SCRIPT_CAMS(", ")")
|
|
#ENDIF
|
|
|
|
WHILE (bIS_INTERPOLATING_FROM_SCRIPT_CAMS
|
|
OR bHANDLE_PUSH_IN)
|
|
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS() // Fix for 2399685.
|
|
// Guard against getting stuck in this while when starting a switch scene during the interp.
|
|
IF bIS_INTERPOLATING_FROM_SCRIPT_CAMS
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("IS_INTERPOLATING_FROM_SCRIPT_CAMS...")
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 0.0, HUD_COLOUR_PURE_WHITE)
|
|
CPRINTLN(DEBUG_RESPAWN, str)
|
|
#ENDIF
|
|
ENDIF
|
|
IF bHANDLE_PUSH_IN
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("bHANDLE_PUSH_IN...")
|
|
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 1.0, HUD_COLOUR_PURE_WHITE)
|
|
|
|
CPRINTLN(DEBUG_RESPAWN, str)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
INT iOffset_y = 2
|
|
DisableControlAction(CAMERA_CONTROL, INPUT_LOOK_BEHIND, iOffset_y)
|
|
DisableControlAction(CAMERA_CONTROL, INPUT_VEH_LOOK_BEHIND, iOffset_y)
|
|
DisableControlAction(CAMERA_CONTROL, INPUT_LOOK_LR, iOffset_y)
|
|
DisableControlAction(CAMERA_CONTROL, INPUT_LOOK_UD, iOffset_y)
|
|
|
|
// DisableControlAction(PLAYER_CONTROL, INPUT_SPRINT, iOffset_y)
|
|
DisableControlAction(PLAYER_CONTROL, INPUT_JUMP, iOffset_y)
|
|
DisableControlAction(PLAYER_CONTROL, INPUT_DUCK, iOffset_y)
|
|
|
|
DisableControlAction(PLAYER_CONTROL, INPUT_MELEE_ATTACK_ALTERNATE, iOffset_y)
|
|
DisableControlAction(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY, iOffset_y)
|
|
DisableControlAction(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT, iOffset_y)
|
|
DisableControlAction(PLAYER_CONTROL, INPUT_MELEE_ATTACK1, iOffset_y)
|
|
DisableControlAction(PLAYER_CONTROL, INPUT_MELEE_ATTACK2, iOffset_y)
|
|
|
|
WAIT(0)
|
|
|
|
bIS_INTERPOLATING_FROM_SCRIPT_CAMS = IS_INTERPOLATING_FROM_SCRIPT_CAMS()
|
|
bHANDLE_PUSH_IN = FALSE
|
|
IF sRespawnCutscene.bStartedPushin
|
|
DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE()
|
|
IF NOT HANDLE_PUSH_IN(sRespawnCutscene.sPushInData,
|
|
TRUE, // BOOL bCamsAttached = FALSE
|
|
TRUE, // BOOL bDestroyCamsAtEnd = TRUE
|
|
DEFAULT, // BOOL bDoPostFX = TRUE
|
|
DEFAULT, // BOOL bOnlyAttachStartIfCamsAttached = FALSE
|
|
DEFAULT) // BOOL bDoColouredFlash = TRUE)
|
|
bHANDLE_PUSH_IN = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDWHILE
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_RESPAWN, "WASNT_INTERPOLATING_FROM_SCRIPT_CAMS(", ")")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
IF IS_PLAYER_SWITCH_IN_PROGRESS() // Fix for 2399685.
|
|
PRINTLN("[RESPAWN] Bailed early from a respawn interp-out cam due to a switch scene starting. (2399685)")
|
|
ENDIF
|
|
|
|
IF DOES_WIDGET_GROUP_EXIST(first_time_deatharrest_widget_group_id)
|
|
DELETE_WIDGET_GROUP(first_time_deatharrest_widget_group_id)
|
|
ENDIF
|
|
#ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sRespawnCutscene.pFacialDictName)
|
|
REMOVE_ANIM_DICT(sRespawnCutscene.pFacialDictName)
|
|
ENDIF
|
|
|
|
REMOVE_ANIM_DICT(sRespawnCutscene.pAnimDictName)
|
|
DESTROY_CAM(respawnCamIndex)
|
|
RESET_PUSH_IN(sRespawnCutscene.sPushInData)
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_ForcePedToUseScripCamHeading, bPedForcedToUseScripCamHeadingFlag)
|
|
SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
pSceneDebugName = pSceneDebugName
|
|
ENDPROC
|