3792 lines
130 KiB
Python
Executable File
3792 lines
130 KiB
Python
Executable File
////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// SCRIPT NAME : Darts.sc //
|
||
// AUTHOR : Lino Manansala //
|
||
// DESCRIPTION : Darts Minigame for V //
|
||
// //
|
||
//////////////////////////////////////////////////////////////
|
||
|
||
USING "commands_player.sch"
|
||
USING "script_player.sch"
|
||
USING "commands_script.sch"
|
||
USING "commands_brains.sch"
|
||
USING "friendactivity_public.sch"
|
||
USING "net_fps_cam.sch"
|
||
|
||
USING "Darts.sch"
|
||
USING "Darts_Core.sch"
|
||
USING "Darts_Player_lib.sch"
|
||
USING "Darts_UI_lib.sch"
|
||
USING "Darts_Audio.sch"
|
||
USING "Darts_Args.sch"
|
||
USING "Darts_Stats_lib.sch"
|
||
USING "Darts_Leaderboard_lib.sch"
|
||
USING "script_oddjob_funcs.sch"
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
USING "Darts_Debug.sch"
|
||
#ENDIF
|
||
|
||
PED_INDEX piDartPlayers[NUM_DART_PLAYERS]
|
||
|
||
BOOL bZoomCamSkip
|
||
BOOL bEndGameDartZoomTrans
|
||
BOOL bEndGameMessageDisplayed
|
||
BOOL bBoredAudioPlayedThisTurn
|
||
BOOL bOneDartAudioPlayed
|
||
BOOL bAnyAudioPlayedThisTurn
|
||
BOOL bOneDartHelpShown
|
||
BOOL bVehicleSaved
|
||
BOOL bHasQuitTextPrinted
|
||
|
||
// per B* 843808 "Can we skip opponent’s turn instantly", turn this on or off for instant skips
|
||
BOOL bInstantSkip = TRUE
|
||
BOOL bAISkipped
|
||
BOOL bDartsWon
|
||
//BOOL bSubtitlesMoved
|
||
BOOL bNewOpponent
|
||
BOOL bGameOverSpeechPlayed
|
||
BOOL bLogCompletion = FALSE
|
||
BOOL bInSyncCam
|
||
BOOL bFranklin
|
||
BOOL bOutroRequested
|
||
BOOL bOutroStreamed
|
||
BOOL bActivateScoreBoard
|
||
|
||
BOOL bDartsLBPredictDone
|
||
BOOL bDartsLBWrite
|
||
BOOL bDartsProfilesReady
|
||
|
||
VEHICLE_SAVE_ARGS VehicleSaveArgs
|
||
|
||
//INT iDartStartTime
|
||
INT iDartZoom
|
||
INT iAllowSkipCutsceneTime
|
||
INT iSkipAILoopCatch
|
||
INT iStaminaXP
|
||
INT iLevelBit
|
||
INT iSceneID
|
||
INT iAnimLimit
|
||
|
||
enumActivityLocation DartsLoc
|
||
enumActivityResult DartsResult
|
||
|
||
MODEL_NAMES modelOpponent
|
||
|
||
SEQUENCE_INDEX siTemp
|
||
|
||
CAMERA_INDEX camDartsSync
|
||
|
||
DARTS_LOCATION DartsLocation
|
||
|
||
FIRST_PERSON_CAM_STRUCT fpDartsCam
|
||
VECTOR vFPDartsPos, vFPDartsRot
|
||
|
||
VECTOR vRockClubSpawnPos = <<-573.1373, 294.0269, 78.1765>>
|
||
VECTOR vRockClubSpawnPos2 = <<-574.1169, 292.7964, 78.1766>>
|
||
VECTOR vHickBarSpawnPos = <<1995.29517, 3050.08447, 46.91535>>//<<1995.6138, 3049.8774, 46.2153>>
|
||
VECTOR vHickBarSpawnPos2 = <<1995.4880, 3047.3833, 46.91535>> //<<1996.0013, 3048.4270, 46.2153>>
|
||
FLOAT fRockClubHeading = 172.6813
|
||
FLOAT fRockClubHeading2 = 274.5094
|
||
FLOAT fHickBarHeading = 142.6717
|
||
FLOAT fHickBarHeading2 = 44.8785
|
||
|
||
enumCharacterList eDartsPlayerOne, eDartsPlayerTwo
|
||
STRING sDartsPlayerOne, sDartsPlayerTwo
|
||
INT iP2NameHash
|
||
|
||
STRING sFacialDictPed
|
||
STRING sFacialDictPlayer
|
||
STRING sFacialClip[3]
|
||
STRING sOutroWin[3]
|
||
STRING sOutroLoss[3]
|
||
STRING sOutroCam[3]
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
//BOOL bDartsNoSocialClub
|
||
DEBUG_POS_DATA DebugBoard
|
||
SPRITE_PLACEMENT spriteDebug
|
||
SCALEFORM_INDEX siScoreBoardDebug
|
||
#ENDIF
|
||
|
||
/// PURPOSE:
|
||
/// Sets peds as no longer needed
|
||
/// PARAMS:
|
||
/// piDartOpp - The ped opponent to be cleaned up
|
||
PROC CLEANUP_PEDS(PED_INDEX & piDartOpp)
|
||
// VECTOR vRockScenPos1, vRockScenPos2, vHickScenPos1, vHickScenPos2
|
||
// vRockScenPos1 = <<-555.543640,284.138580,81.176231>>
|
||
// vRockScenPos2 = <<-572.095398,286.635406,78.176636>>
|
||
// vHickScenPos1 = <<1990.397827,3045.063965,46.215023>>
|
||
// vHickScenPos2 = <<1985.908203,3054.239014,46.215214>>
|
||
|
||
IF DOES_ENTITY_EXIST(piDartOpp)
|
||
AND NOT IS_PED_INJURED(piDartOpp)
|
||
|
||
CLEAR_SEQUENCE_TASK(siTemp)
|
||
OPEN_SEQUENCE_TASK(siTemp)
|
||
IF DOES_ENTITY_EXIST(piDartPlayers[0])
|
||
TASK_LOOK_AT_ENTITY(NULL, piDartPlayers[0], 8000, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
|
||
ENDIF
|
||
TASK_STAND_STILL(NULL, 1000)
|
||
IF bNewOpponent
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_ALT_START_POS)
|
||
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, PICK_VECTOR((DartsLocation = DARTSLOCATION_ROCK_CLUB), vRockClubSpawnPos2, vHickBarSpawnPos2),
|
||
PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT,
|
||
PICK_FLOAT((DartsLocation = DARTSLOCATION_ROCK_CLUB), fRockClubHeading2, fHickBarHeading2))
|
||
// TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, PICK_VECTOR((DartsLocation = DARTSLOCATION_ROCK_CLUB), vRockScenPos1, vHickScenPos1), PEDMOVEBLENDRATIO_WALK,
|
||
// DEFAULT_TIME_BEFORE_WARP, 1.0)
|
||
// IF DOES_SCENARIO_EXIST_IN_AREA(PICK_VECTOR((DartsLocation = DARTSLOCATION_ROCK_CLUB), vRockScenPos1, vHickScenPos1), 2.0, TRUE)
|
||
// TASK_USE_NEAREST_SCENARIO_TO_COORD(NULL, PICK_VECTOR((DartsLocation = DARTSLOCATION_ROCK_CLUB), vRockScenPos1, vHickScenPos1), 2.00)
|
||
// ELSE
|
||
// TASK_WANDER_STANDARD(NULL)
|
||
// ENDIF
|
||
ELSE
|
||
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, PICK_VECTOR((DartsLocation = DARTSLOCATION_ROCK_CLUB), vRockClubSpawnPos, vHickBarSpawnPos),
|
||
PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT,
|
||
PICK_FLOAT((DartsLocation = DARTSLOCATION_ROCK_CLUB), fRockClubHeading, fHickBarHeading))
|
||
ENDIF
|
||
TASK_START_SCENARIO_IN_PLACE(NULL, "WORLD_HUMAN_HANG_OUT_STREET", 0, TRUE)
|
||
ELSE
|
||
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, PICK_VECTOR((DartsLocation = DARTSLOCATION_ROCK_CLUB), vRockClubSpawnPos, vHickBarSpawnPos),
|
||
PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT,
|
||
PICK_FLOAT((DartsLocation = DARTSLOCATION_ROCK_CLUB), 172.6813, 142.6717))
|
||
TASK_START_SCENARIO_IN_PLACE(NULL, "WORLD_HUMAN_STAND_IMPATIENT", 0, TRUE) //"WORLD_HUMAN_DRINKING")
|
||
ENDIF
|
||
CLOSE_SEQUENCE_TASK(siTemp)
|
||
TASK_PERFORM_SEQUENCE(piDartOpp, siTemp)
|
||
|
||
SET_PED_KEEP_TASK(piDartOpp, TRUE)
|
||
|
||
//SET_PED_AS_NO_LONGER_NEEDED(piDartOpp)
|
||
ENDIF
|
||
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(modelOpponent)
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Ends the dart game script
|
||
/// PARAMS:
|
||
/// DartGame - All the DART_GAME parts are cleaned out
|
||
PROC CLEANUP_DARTS_GAME(DART_GAME & DartGame, DARTS_UI & DartsUI, END_SCREEN_DATASET & DartsEndScreen)
|
||
DISPLAY_AREA_NAME(TRUE)
|
||
|
||
DARTS_STATS_UPDATE(DARTS_STAT_AVG_DARTS_MATCH)
|
||
// DARTS_STATS_UPDATE(DARTS_STAT_TIME_PLAYED, GET_GAME_TIMER() - iDartStartTime)
|
||
|
||
CLEANUP_DARTS_PC_CONTROLS()
|
||
|
||
//cleanups
|
||
IF bVehicleSaved
|
||
ODDJOB_RESTORE_SAVED_VEHICLE(VehicleSaveArgs)
|
||
ENDIF
|
||
|
||
|
||
INT iTemp1, iTemp2
|
||
REPEAT NUM_DART_PLAYERS iTemp1
|
||
REPEAT NUM_DART_TURNS iTemp2
|
||
CLEANUP_DART(DartGame.Darts[iTemp1][iTemp2])
|
||
ENDREPEAT
|
||
ENDREPEAT
|
||
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(modelDart1)
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(modelDart2)
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[0]) AND NOT IS_PED_INJURED(piDartPlayers[1])
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[0])
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[1])
|
||
ENDIF
|
||
|
||
CLEANUP_RETICLE()
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(modelReticleRegular)
|
||
|
||
CLEANUP_HUD()
|
||
|
||
CLEANUP_SC_LEADERBOARD_UI(DartsUI.uiLeaderboard)
|
||
|
||
CLEANUP_MG_BIG_MESSAGE(DartsUI.siBigMessage)
|
||
// CLEANUP_MG_MIDSIZED_MESSAGE(DartsUI.siMidMessage)
|
||
|
||
IF NOT IS_ENTITY_DEAD(FRIEND_A_PED_ID())
|
||
SET_PED_AS_GROUP_MEMBER(FRIEND_A_PED_ID(), PLAYER_GROUP_ID())
|
||
finishActivity(DartsLoc, DartsResult)
|
||
ELSE
|
||
CLEANUP_PEDS(piDartPlayers[1])
|
||
ENDIF
|
||
|
||
DISABLE_CELLPHONE(FALSE)
|
||
|
||
ENDSCREEN_SHUTDOWN(DartsEndScreen)
|
||
|
||
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
|
||
|
||
RESET_HUD_COMPONENT_VALUES(NEW_HUD_SUBTITLE_TEXT)
|
||
|
||
//CLEANUP_MENU_ASSETS()
|
||
|
||
IF IS_PLAYER_ONLINE()
|
||
|
||
IF DartGame.bWriteToLeaderboard
|
||
AND NOT bDartsLBWrite
|
||
CDEBUG1LN(DEBUG_DARTS, "online, emergency writing to social club leaderboard")
|
||
WRITE_DARTS_SCLB_DATA(LEADERBOARD_MINI_GAMES_DARTS,FALSE)
|
||
ENDIF
|
||
|
||
ENDIF
|
||
|
||
CLEAR_RANK_REDICTION_DETAILS()
|
||
SC_LEADERBOARD_CACHE_CLEAR_ALL()
|
||
CLEANUP_SOCIAL_CLUB_LEADERBOARD(DartsUI.dartsLB_control)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "All Cleaned Up")
|
||
|
||
// Put a small wait so that player doesn't throw a punch if he's exiting
|
||
WAIT(200)
|
||
|
||
// Log completion if need be.
|
||
IF bLogCompletion
|
||
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_MG_DARTS)
|
||
ODDJOB_AUTO_SAVE()
|
||
ENDIF
|
||
|
||
DISABLE_CHEAT(CHEAT_TYPE_ALL, FALSE)
|
||
|
||
TERMINATE_THIS_THREAD()
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Grab the necessary assets for Darts
|
||
PROC REQUEST_STREAMS(DARTS_SCOREBOARD & DartsSB, DARTS_UI & DartsUI)
|
||
REQUEST_MODEL(modelDart1)
|
||
REQUEST_MODEL(modelDart2)
|
||
REQUEST_MODEL(modelReticleRegular)
|
||
REQUEST_MODEL(modelOpponent)
|
||
|
||
REQUEST_STREAMED_TEXTURE_DICT("Darts")
|
||
REQUEST_STREAMED_TEXTURE_DICT("ShopUI_Title_Darts")
|
||
|
||
// REQUEST_ANIM_DICT("mini@dartsintro")
|
||
// REQUEST_ANIM_DICT("mini@dartsintro_alt1")
|
||
REQUEST_ANIM_DICT(sFacialDictPed)
|
||
REQUEST_ANIM_DICT(sFacialDictPlayer)
|
||
|
||
DartsSB.siScoreBoard = REQUEST_SCALEFORM_MOVIE("darts_scoreboard")
|
||
DartsUI.uiLeaderboard = REQUEST_SC_LEADERBOARD_UI()
|
||
DartsUI.siBigMessage.siMovie = REQUEST_MG_BIG_MESSAGE()
|
||
DartsUI.siMidMessage.siMovie = REQUEST_MG_MIDSIZED_MESSAGE()
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
siScoreBoardDebug = REQUEST_SCALEFORM_MOVIE("darts_scoreboard")
|
||
#ENDIF
|
||
|
||
REQUEST_ADDITIONAL_TEXT("DARTS", MINIGAME_TEXT_SLOT)
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Asset loading checker
|
||
/// RETURNS:
|
||
/// TRUE if all the needed assets have loaded
|
||
FUNC BOOL HAVE_STREAMS_LOADED(DARTS_SCOREBOARD & DartsSB, DARTS_UI & DartsUI)
|
||
IF NOT REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\DARTS")
|
||
CDEBUG1LN(DEBUG_DARTS, "Darts Audio loading")
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\FAMILY1_2")
|
||
CDEBUG1LN(DEBUG_DARTS, "Family Audio loading")
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_MODEL_LOADED(modelDart1)
|
||
OR NOT HAS_MODEL_LOADED(modelDart2)
|
||
OR NOT HAS_MODEL_LOADED(modelReticleRegular)
|
||
OR NOT HAS_MODEL_LOADED(modelOpponent)
|
||
|
||
OR NOT HAS_SCALEFORM_MOVIE_LOADED(DartsSB.siScoreBoard)
|
||
OR NOT HAS_SCALEFORM_MOVIE_LOADED(DartsUI.uiLeaderboard)
|
||
OR NOT HAS_SCALEFORM_MOVIE_LOADED(DartsUI.siBigMessage.siMovie)
|
||
OR NOT HAS_SCALEFORM_MOVIE_LOADED(DartsUI.siMidMessage.siMovie)
|
||
|
||
OR NOT HAS_ADDITIONAL_TEXT_LOADED(MINIGAME_TEXT_SLOT)
|
||
|
||
OR NOT HAS_STREAMED_TEXTURE_DICT_LOADED("Darts")
|
||
|
||
// OR NOT HAS_ANIM_DICT_LOADED("mini@dartsintro")
|
||
// OR NOT HAS_ANIM_DICT_LOADED("mini@dartsintro_alt1")
|
||
OR NOT HAS_ANIM_DICT_LOADED(sFacialDictPed)
|
||
OR NOT HAS_ANIM_DICT_LOADED(sFacialDictPlayer)
|
||
|
||
OR NOT LOAD_MENU_ASSETS()
|
||
CDEBUG1LN(DEBUG_DARTS, "Streams loading")
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
IF NOT HAS_SCALEFORM_MOVIE_LOADED(siScoreBoardDebug)
|
||
CDEBUG1LN(DEBUG_DARTS, "darts scoreboard loading")
|
||
RETURN FALSE
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "darts scoreboard finished")
|
||
ENDIF
|
||
#ENDIF
|
||
|
||
RETURN TRUE
|
||
ENDFUNC
|
||
|
||
FUNC STRING GET_DARTS_RAVE_SCENE(DARTS_RAVE_SCENES DartsRaveScene)
|
||
|
||
IF DartsLocation = DARTSLOCATION_HICK_BAR
|
||
SWITCH DartsRaveScene
|
||
CASE DARTSRAVE_GREETING RETURN "DARTS_MEET_OPPONENT_BAR"
|
||
CASE DARTSRAVE_MENU RETURN "DARTS_MENU_BAR"
|
||
CASE DARTSRAVE_MATCH RETURN "DARTS_START_MATCH_BAR"
|
||
CASE DARTSRAVE_COMPLETE RETURN "DARTS_MATCH_COMPLETE_BAR"
|
||
ENDSWITCH
|
||
ELIF DartsLocation = DARTSLOCATION_ROCK_CLUB
|
||
SWITCH DartsRaveScene
|
||
CASE DARTSRAVE_GREETING RETURN "DARTS_MEET_OPPONENT_ROCK"
|
||
CASE DARTSRAVE_MENU RETURN "DARTS_MENU_ROCK"
|
||
CASE DARTSRAVE_MATCH RETURN "DARTS_START_MATCH_ROCK"
|
||
CASE DARTSRAVE_COMPLETE RETURN "DARTS_MATCH_COMPLETE_ROCK"
|
||
ENDSWITCH
|
||
ENDIF
|
||
|
||
RETURN ""
|
||
ENDFUNC
|
||
|
||
FUNC INT GET_WHICH_DARTS_OUTRO()
|
||
INT iWhichOutro
|
||
|
||
IF NOT bFranklin
|
||
iWhichOutro = (GET_RANDOM_INT_IN_RANGE() % 3)
|
||
ELSE
|
||
iAnimLimit++
|
||
iWhichOutro = iAnimLimit % 2
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "outro chosen is ", iWhichOutro)
|
||
RETURN iWhichOutro
|
||
ENDFUNC
|
||
|
||
/// PURPOSE:
|
||
/// Manages the process in which players quit Darts
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
PROC PLAYER_QUIT_CONTROL(DART_GAME & DartGame)
|
||
|
||
BOOL bWaitToQuit = FALSE
|
||
//BOOL bHasQuitTextPrinted = FALSE
|
||
|
||
// Check to see if the player has released CROSS (just do CIRCLE too)
|
||
IF NOT bNoCrossConflict
|
||
IF NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
||
AND NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
||
bNoCrossConflict = TRUE
|
||
ELSE
|
||
bNoCrossConflict = FALSE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF DartGame.Stage <> STAGE_FINISHED
|
||
IF bWaitToQuit
|
||
IF bNoCrossConflict AND
|
||
bCrossButtonReleased = FALSE
|
||
bNoCrossConflict = FALSE
|
||
bWaitToQuit = FALSE
|
||
bHasQuitTextPrinted = FALSE
|
||
|
||
CLEAR_HELP()
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT)
|
||
OR IS_DISABLED_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT)
|
||
CDEBUG1LN(DEBUG_DARTS, "quit just attempted")
|
||
IF NOT bHasQuitTextPrinted
|
||
DartGame.Stage = STAGE_PLAYER_QUIT
|
||
bHasQuitTextPrinted = TRUE
|
||
CLEAR_HELP()
|
||
ENDIF
|
||
|
||
ELSE
|
||
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_QUIT")
|
||
bWaitToQuit = TRUE
|
||
ELSE
|
||
bWaitToQuit = FALSE
|
||
bHasQuitTextPrinted = FALSE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Manages if the player wants to skip some of the in-game text transitions
|
||
PROC WAIT_FOR_TEXT_OR_SKIP()
|
||
|
||
SETTIMERA(0)
|
||
bNoCrossConflict = FALSE
|
||
|
||
CLEAR_SMALL_PRINTS()
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Initiate the game, scores, darts
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
FUNC BOOL DO_START_GAME(DART_GAME & DartGame, DARTS_SCOREBOARD & DartsSB, DARTS_UI & DartsUI)
|
||
INT i, j
|
||
|
||
// Initialise the scoreboard
|
||
// Reset the player scores to 301
|
||
// Reset the number of throws and bullseyes
|
||
REPEAT NUM_DART_PLAYERS i
|
||
DartGame.Scores[i] = INIT_DART_SCORE
|
||
DartGame.LastScore[i] = INIT_DART_SCORE
|
||
//DartGame.iThrowsTaken[i] = 0
|
||
//DartGame.iBullsEyesHit[i] = 0
|
||
ENDREPEAT
|
||
CDEBUG1LN(DEBUG_DARTS, "[DO_START_GAME] Scores reset")
|
||
|
||
DartGame.bDartWinner = FALSE
|
||
|
||
REPEAT NUM_DART_PLAYERS i
|
||
REPEAT NUM_DART_TURNS j
|
||
RESET_DART(DartGame.Darts[i][j])
|
||
ENDREPEAT
|
||
|
||
DARTS_CLEAR_SCORES(DartsSB, i)
|
||
DARTS_ADD_SCORE(DartsSB, i, 301)
|
||
ENDREPEAT
|
||
CDEBUG1LN(DEBUG_DARTS, "[DO_START_GAME] Scoreboard reset")
|
||
|
||
// reset the player
|
||
iPlayr = 0
|
||
|
||
// reset the turn
|
||
iTurn = 0
|
||
DartGame.iTurnScore = 0
|
||
|
||
// reset the AI brain
|
||
DartGame.AIBrain.iThrowTotal = 0
|
||
|
||
// reset Zoom
|
||
iDartZoom = 0
|
||
DartGame.iNumThrowsTurn = 0
|
||
iSteadyShotsUsed = 0
|
||
|
||
// reset the end game dart zoom
|
||
bEndGameDartZoomTrans = TRUE
|
||
|
||
//reset the end game message
|
||
bEndGameMessageDisplayed = FALSE
|
||
|
||
// AUDIO CONTEXT CHECK
|
||
bOneDartAudioPlayed = FALSE
|
||
|
||
bSteadyShotHelp = FALSE
|
||
|
||
// Win audio reset
|
||
DartGame.bWinNoise = FALSE
|
||
|
||
DartGame.bOneDartAway = FALSE
|
||
|
||
bAISkipped = FALSE
|
||
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE, FALSE)
|
||
|
||
// set minigame control scaleforms
|
||
//DARTS_ACTIVATE_QUIT_UI(DartsUI.uiQuitControls)
|
||
//DARTS_ACTIVATE_ENDGAME_UI(DartsUI.uiEndGameControls)
|
||
//DARTS_ACTIVATE_CONTROLS_UI(DartsUI.uiInGameControls)
|
||
|
||
WAIT_FOR_TEXT_OR_SKIP()
|
||
|
||
DARTS_INIT_UI(DartsUI)
|
||
|
||
IF DartGame.bAnotherCamActive
|
||
START_DARTS_GAME_FADE_IN(DartGame.bAnotherCamActive)
|
||
DartGame.bAnotherCamActive = FALSE
|
||
ENDIF
|
||
|
||
RETURN TRUE
|
||
ENDFUNC
|
||
|
||
/// PURPOSE:
|
||
/// Checks where the player is in the game, transition the number of legs and sets
|
||
/// RETURNS:
|
||
/// TRUE if all the sets have been completed, FALSE if there's more to go
|
||
FUNC BOOL EVALUATE_DART_GAME_PROGRESS(DART_GAME & DartGame)
|
||
|
||
INT iEvaluator = PICK_INT(DartGame.bDartWinner, 0, 1)
|
||
INT iWinsNeeded
|
||
|
||
SWITCH DartGame.iNumDartLegs
|
||
CASE 1 iWinsNeeded = 1 BREAK
|
||
CASE 3 iWinsNeeded = 2 BREAK
|
||
CASE 5 iWinsNeeded = 3 BREAK
|
||
ENDSWITCH
|
||
|
||
IF (DartGame.iDartGamesWon[iEvaluator] = iWinsNeeded)
|
||
DartGame.iDartSetsWon[iEvaluator]++
|
||
DartGame.iDartSBSetsWon[iEvaluator]++
|
||
DartGame.iDartGamesWon[0] = 0
|
||
DartGame.iDartGamesWon[1] = 0
|
||
DartGame.bSetJustWon = TRUE
|
||
|
||
IF iEvaluator = 0
|
||
DartsStats[DARTS_SCLB_STAT_NUM_SETS_WON]++
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "EVALUATE_DART_GAME_PROGRESS - Set just won by ", iEvaluator, ", number of sets won is ", DartGame.iDartSetsWon[iEvaluator])
|
||
|
||
IF (DartGame.iDartSetsWon[iEvaluator] = DartGame.iNumDartSets)
|
||
DartGame.bSetJustWon = FALSE
|
||
RETURN TRUE
|
||
ENDIF
|
||
ELSE
|
||
//continue on until the set is completed
|
||
CDEBUG1LN(DEBUG_DARTS, "EVALUATE_DART_GAME_PROGRESS - leg just won by ", iEvaluator, ", number of legs won is ", DartGame.iDartGamesWon[iEvaluator])
|
||
ENDIF
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
/// PURPOSE:
|
||
/// Processes a players win (or loss), gets game ready for a replay or a quit
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
PROC GAME_WON(DART_GAME & DartGame)
|
||
//GET_GAME_TIMER(i)
|
||
//INCREMENT_INT_STAT_NO_MESSAGE(STAT_SCORE_DARTS_TOTAL_TIME_PLAYED, (i - gameStartTime))
|
||
|
||
IF NOT DartGame.bWriteToLeaderboard
|
||
DartGame.bWriteToLeaderboard = TRUE
|
||
ENDIF
|
||
|
||
DARTS_STATS_UPDATE(DARTS_STAT_NUM_GAMES)
|
||
|
||
CLEAR_SMALL_PRINTS()
|
||
CLEAR_HELP()
|
||
|
||
IF IS_AUDIO_SCENE_ACTIVE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MATCH))
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MATCH))
|
||
ENDIF
|
||
|
||
//WIN_GAME_CAM()
|
||
IF DartGame.eThrowStyle = DARTS_STYLE_STICK
|
||
BOARD_ZOOM_CAM()
|
||
ENDIF
|
||
|
||
IF iPlayr = 0
|
||
//PRINT_NOW("DARTS_WON", 5000, 1)
|
||
//PRINT_WITH_NUMBER_NOW("DARTS_REMAINL", 0, 5000, 1)
|
||
DartGame.bDartWinner = TRUE
|
||
bLogCompletion = TRUE
|
||
|
||
DartGame.iDartGamesWon[iPlayr]++
|
||
DartGame.iDartSBGamesWon[iPlayr]++
|
||
// updating stats
|
||
|
||
DARTS_STATS_UPDATE(DARTS_STAT_NUM_WINS)
|
||
DartsStats[DARTS_SCLB_STAT_NUM_LEGS_WON]++
|
||
//PLAY_WIN_AUDIO(piDartPlayers, bFirstGame)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "updating sc stats: DartsStats[DARTS_SCLB_STAT_NUM_LEGS_WON] = ", DartsStats[DARTS_SCLB_STAT_NUM_LEGS_WON])
|
||
|
||
// TODO: implement ambient speech and overall game stat
|
||
//IF isFriendActivity
|
||
// SAY_AMBIENT_SPEECH(opponent, "Darts_Player_Wins")
|
||
//ENDIF
|
||
//Implement when it's ready in V
|
||
/*INCREMENT_INT_STAT_NO_MESSAGE(STAT_SCORE_DARTS_NUMBER_OF_WINS, 1)
|
||
REGISTER_BEST_POSITION(STAT_SCORE_DARTS_SHORTEST_CHECK_OUT, throwsTaken)
|
||
Minigames_Store_Result(MGR_PLAYER_WON)
|
||
Flow_Achievements_Games_Complete(GAME_COMPLETION_DARTS)
|
||
IncreaseOpponentSkill(dartsGameGlobal)*/
|
||
ELSE
|
||
//PRINT_NOW("DARTS_LOSE", 5000, 1)
|
||
//PRINT_WITH_NUMBER_NOW("DARTS_REMAINL", 0, 5000, 1)
|
||
|
||
DartGame.bDartWinner = FALSE
|
||
CDEBUG1LN(DEBUG_DARTS, "******************** AI Throws: ", DartGame.AIBrain.iThrowTotal)
|
||
|
||
DartGame.iDartGamesWon[iPlayr]++
|
||
DartGame.iDartSBGamesWon[iPlayr]++
|
||
|
||
DARTS_STATS_UPDATE(DARTS_STAT_NUM_LOSS)
|
||
DartsStats[DARTS_SCLB_STAT_NUM_LEGS_LOST]++
|
||
//PLAY_LOSS_AUDIO(piDartPlayers)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "updating sc stats: DartsStats[DARTS_SCLB_STAT_NUM_LEGS_LOST] = ", DartsStats[DARTS_SCLB_STAT_NUM_LEGS_LOST])
|
||
|
||
// TODO: implement ambient speech and overall game stat
|
||
//IF isFriendActivity
|
||
// SAY_AMBIENT_SPEECH(opponent, "Darts_Player_Loses")
|
||
//ENDIF
|
||
//Implement when it's ready in V
|
||
/*INCREMENT_INT_STAT_NO_MESSAGE(STAT_SCORE_DARTS_NUMBER_OF_DEFEATS, 1)
|
||
Minigames_Store_Result(MGR_PLAYER_LOST)
|
||
DecreaseOpponentSkill(dartsGameGlobal)*/
|
||
ENDIF
|
||
|
||
DARTS_STATS_UPDATE(DARTS_STAT_WIN_PCT)
|
||
|
||
// IF NOT IS_PED_INJURED(piDartPlayers[0]) AND NOT IS_PED_INJURED(piDartPlayers[1])
|
||
// TASK_LOOK_AT_ENTITY(piDartPlayers[0], piDartPlayers[1], 10000, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
|
||
// TASK_LOOK_AT_ENTITY(piDartPlayers[1], piDartPlayers[0], 11500, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
|
||
// ENDIF
|
||
|
||
RESTART_TIMER_NOW(DartGame.miscTimer)
|
||
|
||
IF EVALUATE_DART_GAME_PROGRESS(DartGame)
|
||
CDEBUG1LN(DEBUG_DARTS, "darts game is won, resetting sets and legs")
|
||
DartGame.iDartSetsWon[0] = 0
|
||
DartGame.iDartSetsWon[1] = 0
|
||
DartGame.iDartGamesWon[0] = 0
|
||
DartGame.iDartGamesWon[1] = 0
|
||
|
||
DartGame.iDartSBFullGamesWon[iPlayr]++
|
||
|
||
IF NOT DartGame.bWinNoise
|
||
IF DartGame.bDartWinner
|
||
MISSION_FLOW_PLAY_END_OF_MISSION_MUSIC(TRUE)
|
||
ELSE
|
||
// lose sound gets played later
|
||
ENDIF
|
||
DartGame.bWinNoise = TRUE
|
||
ENDIF
|
||
|
||
IF DartGame.bDartWinner // player won
|
||
DartsStats[DARTS_SCLB_STAT_NUM_WINS]++
|
||
DartsResult = AR_playerWon
|
||
CDEBUG1LN(DEBUG_DARTS, "updating sc stats: DartsStats[DARTS_SCLB_STAT_NUM_WINS] = ", DartsStats[DARTS_SCLB_STAT_NUM_WINS])
|
||
ELSE
|
||
DartsStats[DARTS_SCLB_STAT_NUM_LOSSES]++
|
||
DartsResult = AR_buddyA_won
|
||
CDEBUG1LN(DEBUG_DARTS, "updating sc stats: DartsStats[DARTS_SCLB_STAT_NUM_LOSSES] = ", DartsStats[DARTS_SCLB_STAT_NUM_LOSSES])
|
||
ENDIF
|
||
|
||
// Write leaderboard stats here.
|
||
//WRITE_DARTS_SCLB_DATA(LEADERBOARD_MINI_GAMES_DARTS, FALSE)
|
||
|
||
DartGame.Stage = STAGE_GAME_END
|
||
ELSE
|
||
DartGame.Stage = STAGE_GAME_TRANSITION
|
||
ENDIF
|
||
|
||
DartGame.TurnStage = DPS_AIM
|
||
|
||
START_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_COMPLETE))
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "darts won being set to true right now")
|
||
bDartsWon = TRUE
|
||
|
||
// reset the turn
|
||
// iTurn = 0
|
||
// iPlayr = 0
|
||
DartGame.iTurnScore = 0
|
||
|
||
bNoCrossConflict = FALSE
|
||
|
||
DartGame.LastScore[0] = 301
|
||
DartGame.LastScore[1] = 301
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Stage is now ", DartGame.Stage)
|
||
|
||
ENDPROC
|
||
|
||
|
||
/// PURPOSE:
|
||
/// Call after every throw, checks for wins, busts, or player transition
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
PROC TURN_INCREMENT(DART_GAME & DartGame, DARTS_UI & DartsUI)
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
INT iDebugScores
|
||
#ENDIF
|
||
|
||
DartGame.bDartsClash = FALSE
|
||
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_GAME_WON)
|
||
// Update the player's score
|
||
DartGame.Scores[iPlayr] -= DartGame.Darts[iPlayr][iTurn].iHitValue
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
iDebugScores = DartGame.Scores[iPlayr]
|
||
CDEBUG1LN(DEBUG_DARTS, "Player ", iPlayr, "'s Total score: ", iDebugScores)
|
||
#ENDIF
|
||
|
||
// Update the player's turn score
|
||
DartGame.iTurnScore += DartGame.Darts[iPlayr][iTurn].iHitValue
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
iDebugScores = DartGame.iTurnScore
|
||
CDEBUG1LN(DEBUG_DARTS, "Player ", iPlayr, "'s Turn score: ", iDebugScores)
|
||
#ENDIF
|
||
|
||
ENDIF
|
||
|
||
// if the game has been won and the initial score has been shown
|
||
IF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_GAME_WON)
|
||
CDEBUG1LN(DEBUG_DARTS, "**********GAME HAS BEEN WON**********")
|
||
CDEBUG1LN(DEBUG_DARTS, "**********Stage is ", DartGame.TurnStage, "**********")
|
||
|
||
GAME_WON(DartGame)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Un-setting uiFlag for DARTS_UIFLAGS_GAME_WON in line 455")
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_GAME_WON, FALSE)
|
||
|
||
ELSE
|
||
DartGame.iThrowsTaken[iPlayr]++
|
||
IF iPlayr = 0
|
||
DARTS_STATS_UPDATE(DARTS_STAT_DARTS_THROWN)
|
||
DartsStats[DARTS_SCLB_STAT_DARTS_THROWN]++
|
||
ENDIF
|
||
|
||
// if the game has been won
|
||
IF (DartGame.Darts[iPlayr][iTurn].iHitMultiplier = 2 OR DartGame.Darts[iPlayr][iTurn].iHitValue = 50)
|
||
AND DartGame.Scores[iPlayr] = 0
|
||
IF DartGame.Darts[iPlayr][iTurn].iHitValue = 50
|
||
DartGame.iBullsEyesHit[iPlayr]++
|
||
IF iPlayr = 0
|
||
DARTS_STATS_UPDATE(DARTS_STAT_NUM_BULLSEYES)
|
||
DartsStats[DARTS_SCLB_STAT_BULLS_EYES]++
|
||
ENDIF
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Setting uiFlag for DARTS_UIFLAGS_GAME_WON in line 467")
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_UNDER_ZERO, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_NOT_DOUBLE, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_ONE_POINT_LEFT, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_GAME_WON, TRUE)
|
||
|
||
GAME_WON(DartGame)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Un-setting uiFlag for DARTS_UIFLAGS_GAME_WON in line 481")
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_GAME_WON, FALSE)
|
||
|
||
SETTIMERB(0)
|
||
|
||
// The player has bust
|
||
ELIF (DartGame.Scores[iPlayr] = 1 OR DartGame.Scores[iPlayr] < 0)
|
||
OR (DartGame.Scores[iPlayr] = 0 AND DartGame.Darts[iPlayr][iTurn].iHitMultiplier <> 2)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "**********Playr has bust**********")
|
||
CDEBUG1LN(DEBUG_DARTS, "**********Stage is ", DartGame.TurnStage, "**********")
|
||
|
||
IF DartGame.Scores[iPlayr] = 0 AND DartGame.Darts[iPlayr][iTurn].iHitMultiplier <> 2
|
||
// The player hit the right number, but didn't double out.
|
||
PRINT_WITH_NUMBER_NOW("DARTS_PLR_DUB", DartGame.Darts[iPlayr][iTurn].iHitValue, 5000, 0)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_NOT_DOUBLE, TRUE)
|
||
|
||
ELIF DartGame.Scores[iPlayr] = 1
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_ONE_POINT_LEFT, TRUE)
|
||
|
||
ELSE
|
||
// output "you're bust text"
|
||
IF iPlayr = 1
|
||
PRINT_WITH_NUMBER_NOW("DARTS_OPP_BUST", DartGame.Darts[iPlayr][iTurn].iHitValue, 5000, 0)
|
||
ELSE
|
||
PRINT_WITH_NUMBER_NOW("DARTS_PLR_BUST", DartGame.Darts[iPlayr][iTurn].iHitValue, 5000, 0)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF NOT bAnyAudioPlayedThisTurn
|
||
IF PLAY_BUST_AUDIO(piDartPlayers[1 - iPlayr])
|
||
bAnyAudioPlayedThisTurn = TRUE
|
||
CDEBUG1LN(DEBUG_DARTS, "***** Bust Audio played by player ", 1 - iPlayr)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// rollback the player's score at start of turn
|
||
DartGame.Scores[iPlayr] = DartGame.LastScore[iPlayr]
|
||
|
||
IF DartGame.TurnStage = DPS_SKIP_AI
|
||
CDEBUG1LN(DEBUG_DARTS, "***** SKIP_AI MADE IT HERE! *****")
|
||
ENDIF
|
||
|
||
SETTIMERA(0)
|
||
DartGame.TurnStage = DPS_TURN_CHANGE
|
||
|
||
IF iPlayr = 0
|
||
DartGame.iBustStreak++
|
||
ENDIF
|
||
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_UNDER_ZERO, TRUE)
|
||
|
||
// The game continues
|
||
ELSE
|
||
|
||
// Increment stats for the results UI
|
||
// Do bullseye audio
|
||
IF DartGame.Darts[iPlayr][iTurn].iHitValue = 50
|
||
DartGame.iBullsEyesHit[iPlayr]++
|
||
IF iPlayr = 0
|
||
DARTS_TRIGGER_SPLASH(DartsUI, DARTSSPLASH_BULLSEYE)
|
||
DARTS_STATS_UPDATE(DARTS_STAT_NUM_BULLSEYES)
|
||
DartsStats[DARTS_SCLB_STAT_BULLS_EYES]++
|
||
ENDIF
|
||
// TODO: bullseye audio not recorded for player yet, make the ped say it for now
|
||
IF NOT bAnyAudioPlayedThisTurn
|
||
AND NOT bAISkipped
|
||
IF PLAY_BULLSEYE_AUDIO(piDartPlayers[iPlayr])
|
||
bAnyAudioPlayedThisTurn = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
|
||
IF DartGame.Darts[iPlayr][iTurn].iHitValue = 0
|
||
// TODO: dart audio not recorded for player yet, make the ped say it for now
|
||
IF NOT bAnyAudioPlayedThisTurn
|
||
AND NOT bAISkipped
|
||
PLAY_MISS_AUDIO(piDartPlayers[1 - iPlayr])
|
||
bAnyAudioPlayedThisTurn = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (DartGame.iTurnScore = 180)
|
||
IF NOT bAnyAudioPlayedThisTurn
|
||
AND NOT bAISkipped
|
||
IF PLAY_180_AUDIO(piDartPlayers[1], (iPlayr = 0))
|
||
bAnyAudioPlayedThisTurn = TRUE
|
||
CDEBUG1LN(DEBUG_DARTS, "***** 180 Audio Played *****")
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (iPlayr = 0)
|
||
DARTS_TRIGGER_SPLASH(DartsUI, DARTSSPLASH_180)
|
||
DARTS_STATS_UPDATE(DARTS_STAT_NUM_180S)
|
||
DartsStats[DARTS_SCLB_STAT_NUM_180S]++
|
||
// INCREMENT_INT_STAT_NO_MESSAGE(STAT_SCORE_DARTS_NUMBER_OF_180_HITS, 1)
|
||
// AWARD_ACHIEVEMENT(ENUM_TO_INT(SCOREDARTGAME))
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (DartGame.iTurnScore = 140)
|
||
// TODO: dart audio not recorded for player yet, make the ped say it for now
|
||
IF NOT bAnyAudioPlayedThisTurn
|
||
AND NOT bAISkipped
|
||
IF PLAY_140_AUDIO(piDartPlayers[iPlayr], (iPlayr = 0))
|
||
bAnyAudioPlayedThisTurn = TRUE
|
||
CDEBUG1LN(DEBUG_DARTS, "***** 140 Audio Played *****")
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// Do one dart away message
|
||
IF iPlayr = 0
|
||
IF iTurn < 2
|
||
|
||
IF DartGame.Scores[iPlayr] <= 170
|
||
AND NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_END_HELP_READY)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_END_HELP_READY, TRUE)
|
||
ENDIF
|
||
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_HELP_READY)
|
||
AND DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_WIN_HELP)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_HELP_READY, TRUE)
|
||
ENDIF
|
||
|
||
IF ((DartGame.Scores[iPlayr] < 41 AND DartGame.Scores[iPlayr] > 0) AND (DartGame.Scores[iPlayr] % 2 = 0))
|
||
OR DartGame.Scores[iPlayr] = 50
|
||
|
||
IF DartGame.Scores[iPlayr] = 50
|
||
// CDEBUG1LN(DEBUG_DARTS, "-----One Dart Away Bullseye Should Print-----")
|
||
ELSE
|
||
// CDEBUG1LN(DEBUG_DARTS, "-----One Dart Away Text Should Print-----")
|
||
ENDIF
|
||
|
||
// TODO: only recorded for peds for now, so just force it
|
||
IF NOT bOneDartAudioPlayed
|
||
PLAY_ONE_DART_AWAY_AUDIO(piDartPlayers[1])
|
||
bOneDartAudioPlayed = TRUE
|
||
ENDIF
|
||
|
||
IF NOT DartGame.bOneDartAway
|
||
DartGame.bOneDartAway = TRUE
|
||
ENDIF
|
||
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE, TRUE)
|
||
ENDIF
|
||
|
||
ELIF DartGame.bOneDartAway
|
||
DartGame.bOneDartAway = FALSE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF iPlayr = 0 AND iTurn < 2 //AND ((DartGame.Scores[iPlayr] % 2 = 1) OR NOT DartGame.bOneDartAway)
|
||
CDEBUG1LN(DEBUG_DARTS, "-----Score Text Should Have Printed-----")
|
||
//PRINT_WITH_NUMBER_NOW("DARTS_REMAINL", DartGame.Scores[iPlayr], DEFAULT_GOD_TEXT_TIME, 0)
|
||
PRINT_WITH_2_NUMBERS_NOW("DARTS_REMAIN", DartGame.LastScore[iPlayr] - DartGame.Scores[iPlayr], DartGame.Scores[iPlayr], DEFAULT_GOD_TEXT_TIME, 0)
|
||
ELIF (iPlayr = 1) AND (iTurn = 2)
|
||
//PRINT_WITH_2_NUMBERS_NOW("DARTS_REMAIN2", DartGame.Darts[iPlayr][iTurn].iHitValue, DartGame.Scores[iPlayr], DEFAULT_GOD_TEXT_TIME, 0)
|
||
ELSE
|
||
// do a little pause after each dart if we're not sped up
|
||
IF DartGame.TurnStage <> DPS_SKIP_AI
|
||
SKIP_AI_TURN_CHECK(DartGame.TurnStage)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
DartGame.Darts[iPlayr][iTurn].bDoneScoring = TRUE
|
||
// increment dart...
|
||
iTurn++
|
||
|
||
SETTIMERA(0)
|
||
|
||
IF DartGame.TurnStage <> DPS_SKIP_AI
|
||
IF DartGame.bOneDartAway AND DartGame.eThrowStyle = DARTS_STYLE_STICK
|
||
DartGame.TurnStage = DPS_ONE_DART_HELPER
|
||
ELSE
|
||
DartGame.TurnStage = DPS_AIM
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// If the player has had 3 throws, switch
|
||
IF (iTurn = 3)
|
||
CDEBUG1LN(DEBUG_DARTS, "Player ", iPlayr, " finished, now we're switching")
|
||
iTurn = 2
|
||
DartGame.TurnStage = DPS_TURN_CHANGE
|
||
ENDIF
|
||
|
||
IF iPlayr = 0
|
||
DartGame.iBustStreak = 0
|
||
ENDIF
|
||
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_NOT_DOUBLE, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_UNDER_ZERO, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_ONE_POINT_LEFT, FALSE)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Simulates a full or partial AI turn if player chooses to skip it
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
PROC DO_SKIP_AI_TURN(DART_GAME & DartGame, DARTS_UI & DartsUI)
|
||
VECTOR vTemp
|
||
|
||
iSkipAILoopCatch++ //this is reset at beginning of each turn
|
||
CDEBUG1LN(DEBUG_DARTS, "iSkipAILoopCatch = ", iSkipAILoopCatch)
|
||
|
||
iPlayr = 1
|
||
iTurn = 0
|
||
|
||
bAISkipped = TRUE
|
||
|
||
// loop through each of the 3 darts
|
||
WHILE (iTurn < 3) AND DartGame.TurnStage = DPS_SKIP_AI
|
||
CDEBUG1LN(DEBUG_DARTS, "-------------")
|
||
CDEBUG1LN(DEBUG_DARTS, "DOING SKIP AI TURN - PLAYER ", iPlayr, " - TURN ", iTurn)
|
||
|
||
// DART HAS FINISHED
|
||
IF DartGame.Darts[iPlayr][iTurn].bStuck
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "######### DART HAS FINISHED")
|
||
CDEBUG1LN(DEBUG_DARTS, "dart score ", iTurn, " = ", DartGame.Darts[iPlayr][iTurn].iHitValue)
|
||
CDEBUG1LN(DEBUG_DARTS, "---------------------------")
|
||
|
||
|
||
IF DartGame.Darts[iPlayr][iTurn].bDoneScoring
|
||
// don't do anything... it's already there
|
||
iTurn++
|
||
|
||
ELSE
|
||
// store the dart score
|
||
CDEBUG1LN(DEBUG_DARTS, "Scoring Dart Turn ", iTurn, ", Player ", iPlayr)
|
||
SCORE_DART(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard)
|
||
CDEBUG1LN(DEBUG_DARTS, "---------------------------")
|
||
|
||
// Update the player's score
|
||
TURN_INCREMENT(DartGame, DartsUI)
|
||
ENDIF
|
||
|
||
// DART IS IN FLIGHT
|
||
ELIF DartGame.Darts[iPlayr][iTurn].bTravelling
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "######### DART IS IN FLIGHT")
|
||
IF bInstantSkip
|
||
IF DOES_ENTITY_EXIST(DartGame.Darts[iPlayr][iTurn].object)
|
||
DELETE_OBJECT(DartGame.Darts[iPlayr][iTurn].object)
|
||
CDEBUG1LN(DEBUG_DARTS, "okay this turn's object was deleted: ", iTurn)
|
||
ENDIF
|
||
|
||
ELSE
|
||
DartGame.Darts[iPlayr][iTurn].bStuck = TRUE
|
||
DartGame.Darts[iPlayr][iTurn].bTravelling = FALSE
|
||
CDEBUG1LN(DEBUG_DARTS, "darts[playr][turn].offsetTarget = ", vTemp)
|
||
|
||
// snap it to coords
|
||
vTemp = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(DartGame.DartsBoard.vDartBoard, DartGame.DartsBoard.fBoardHeading,
|
||
<<DartGame.Darts[iPlayr][iTurn].vOffsetTarget.x,
|
||
DartGame.Darts[iPlayr][iTurn].vOffsetTarget.y + fDartBoardOriginOffset,
|
||
DartGame.Darts[iPlayr][iTurn].vOffsetTarget.z>>)
|
||
|
||
IF DOES_ENTITY_EXIST(DartGame.Darts[iPlayr][iTurn].object)
|
||
SET_ENTITY_COORDS(DartGame.Darts[iPlayr][iTurn].object, vTemp)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// store the dart score
|
||
CDEBUG1LN(DEBUG_DARTS, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ STATS BEFORE SCORING - iPlayr: ", iPlayr, ", iTurn:", iTurn)
|
||
CDEBUG1LN(DEBUG_DARTS, "Scoring Dart Turn ", iTurn, ", Player ", iPlayr)
|
||
SCORE_DART(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard)
|
||
CDEBUG1LN(DEBUG_DARTS, " $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ")
|
||
|
||
// Update the player's score
|
||
TURN_INCREMENT(DartGame, DartsUI)
|
||
|
||
IF bInstantSkip
|
||
IF bDartsWon
|
||
CDEBUG1LN(DEBUG_DARTS, "creating win in-flight-dart number ", iTurn)
|
||
|
||
DartGame.Darts[iPlayr][iTurn].object = CREATE_OBJECT(DartGame.Darts[iPlayr][iTurn].modelDart, vInitDartPos)
|
||
|
||
//CDEBUG1LN(DEBUG_DARTS, "Darts[iPlayr][iturn].vOffsetTarget coords ", DartGame.Darts[iPlayr][iTurn].vOffsetTarget)
|
||
// create it snapped to board
|
||
vTemp = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(DartGame.DartsBoard.vDartBoard, DartGame.DartsBoard.fBoardHeading,
|
||
<<DartGame.Darts[iPlayr][iTurn].vOffsetTarget.x,
|
||
DartGame.Darts[iPlayr][iTurn].vOffsetTarget.y + fDartBoardOriginOffset,
|
||
DartGame.Darts[iPlayr][iTurn].vOffsetTarget.z>>)
|
||
|
||
SET_ENTITY_COORDS(DartGame.Darts[iPlayr][iTurn].object, vTemp)
|
||
|
||
// put some random spin on it
|
||
FLOAT fTemp1
|
||
fTemp1 = GET_RANDOM_FLOAT_IN_RANGE(0.0, 90.0)
|
||
DartGame.Darts[iPlayr][iTurn].vRotation = << 90.0, fTemp1, DartGame.DartsBoard.fBoardHeading>>
|
||
SET_ENTITY_ROTATION(DartGame.Darts[iPlayr][iTurn].object, DartGame.Darts[iPlayr][iTurn].vRotation, EULER_XYZ)
|
||
|
||
DartGame.Darts[iPlayr][iTurn].bStuck = TRUE
|
||
DartGame.Darts[iPlayr][iTurn].bTravelling = FALSE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// DART HASN'T YET BEEN THROWN
|
||
ELSE
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "@@@@@@@@@@@@@ DART HASN'T YET BEEN THROWN")
|
||
|
||
// calculate it's coords
|
||
GET_NEXT_AI_THROW(DartGame.Scores, DartGame.AIBrain)
|
||
GET_AI_THROW_VECTOR(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard, DartGame.TurnStage, DartGame.AIBrain)
|
||
|
||
DartGame.iNumThrowsTurn++
|
||
|
||
// store the dart score
|
||
CDEBUG1LN(DEBUG_DARTS, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ STATS BEFORE SCORING - iPlayr: ", iPlayr, ", iTurn:", iTurn)
|
||
CDEBUG1LN(DEBUG_DARTS, "Scoring Dart Turn ", iTurn, ", Player ", iPlayr)
|
||
SCORE_DART(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard)
|
||
CDEBUG1LN(DEBUG_DARTS, " $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ")
|
||
|
||
// we have to check for wins early if it's skip AI, otherwise the win may not register
|
||
IF (DartGame.Darts[iPlayr][iTurn].iHitMultiplier = 2 OR DartGame.Darts[iPlayr][iTurn].iHitValue = 50)
|
||
AND DartGame.Scores[iPlayr] = 0
|
||
IF DartGame.Darts[iPlayr][iTurn].iHitValue = 50
|
||
DartGame.iBullsEyesHit[iPlayr]++
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Setting uiFlag for DARTS_UIFLAGS_GAME_WON in line 758")
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_UNDER_ZERO, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_NOT_DOUBLE, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_ONE_POINT_LEFT, FALSE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_GAME_WON, TRUE)
|
||
|
||
//PRINT_WITH_2_NUMBERS_NOW("DARTS_REMAIN2", DartGame.iTurnScore, DartGame.Scores[iPlayr], DEFAULT_GOD_TEXT_TIME, 0)
|
||
|
||
SETTIMERB(0)
|
||
ENDIF
|
||
|
||
// Update the player's score
|
||
TURN_INCREMENT(DartGame, DartsUI)
|
||
|
||
IF bInstantSkip
|
||
IF bDartsWon
|
||
INT idx
|
||
|
||
REPEAT (iTurn + 1) idx
|
||
IF NOT DartGame.Darts[iPlayr][idx].bStuck
|
||
CDEBUG1LN(DEBUG_DARTS, "creating win dart number ", idx)
|
||
|
||
DartGame.Darts[iPlayr][idx].object = CREATE_OBJECT(DartGame.Darts[iPlayr][idx].modelDart, vInitDartPos)
|
||
|
||
//CDEBUG1LN(DEBUG_DARTS, "Darts[iPlayr][iturn].vOffsetTarget coords ", DartGame.Darts[iPlayr][iTurn].vOffsetTarget)
|
||
// create it snapped to board
|
||
vTemp = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(DartGame.DartsBoard.vDartBoard, DartGame.DartsBoard.fBoardHeading,
|
||
<<DartGame.Darts[iPlayr][idx].vOffsetTarget.x,
|
||
DartGame.Darts[iPlayr][idx].vOffsetTarget.y + fDartBoardOriginOffset,
|
||
DartGame.Darts[iPlayr][idx].vOffsetTarget.z>>)
|
||
|
||
IF DOES_ENTITY_EXIST(DartGame.Darts[iPlayr][idx].object)
|
||
SET_ENTITY_COORDS(DartGame.Darts[iPlayr][idx].object, vTemp)
|
||
ENDIF
|
||
|
||
// put some random spin on it
|
||
FLOAT fTemp1
|
||
fTemp1 = GET_RANDOM_FLOAT_IN_RANGE(0.0, 90.0)
|
||
DartGame.Darts[iPlayr][idx].vRotation = << 90.0, fTemp1, DartGame.DartsBoard.fBoardHeading>>
|
||
SET_ENTITY_ROTATION(DartGame.Darts[iPlayr][idx].object, DartGame.Darts[iPlayr][idx].vRotation, EULER_XYZ)
|
||
|
||
DartGame.Darts[iPlayr][idx].bStuck = TRUE
|
||
DartGame.Darts[iPlayr][idx].bTravelling = FALSE
|
||
ENDIF
|
||
ENDREPEAT
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "TURN AT END OF THROW- ", iTurn)
|
||
CDEBUG1LN(DEBUG_DARTS, "@@@@@@@@@@@@@@@@@@@@@@@@@@@")
|
||
ENDWHILE
|
||
|
||
//iTurn = 0
|
||
CDEBUG1LN(DEBUG_DARTS, "TURN AFTER AI SKIP THROWS HAVE COMPLETED- ", iTurn)
|
||
|
||
DartGame.TurnStage = DPS_TURN_CHANGE // this is redundant since TURN_INCREMENT should already do this, but at least it will prevent inf loops
|
||
|
||
IF iSkipAILoopCatch > 2
|
||
SCRIPT_ASSERT("SKIP_AI was caught looping! Please copy game log and attach to B* 248553")
|
||
DartGame.TurnStage = DPS_TURN_CHANGE
|
||
ENDIF
|
||
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Handles whether another darts game will be started or if the darts session will end.
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
PROC REPLAY_GAME_LOOP(DART_GAME & DartGame, DARTS_UI & DartsUI, DARTS_SCOREBOARD & DartsSB, END_SCREEN_DATASET & DartsEndScreen, BOOL bUsedSetsLegs)
|
||
|
||
DARTS_UI_RETVAL DartsUIRetVal
|
||
|
||
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
||
DISABLE_CONTROL_ACTION( FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE)
|
||
ENDIF
|
||
|
||
IF IS_PLAYER_ONLINE()
|
||
IF NOT bDartsLBPredictDone
|
||
IF DARTS_RANK_PREDICTIONS(DartsUI, FALSE, bDartsLBWrite)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_SETUP_ENDUI, FALSE)
|
||
bDartsLBPredictDone = TRUE
|
||
CDEBUG1LN(DEBUG_DARTS, "rank predictions finished")
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// wait for the player to pick an option
|
||
IF bEndGameMessageDisplayed
|
||
|
||
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
||
SET_MOUSE_CURSOR_THIS_FRAME()
|
||
ENDIF
|
||
|
||
|
||
BOOL bProcessMenuInput = TRUE
|
||
IF DartsUI.bDrawingLeaderboard
|
||
IF NOT DartsUI.bLBDOnlineWarningDone AND NOT IS_PLAYER_ONLINE()
|
||
DartsUI.bLBDOnlineWarningDone = DO_SIGNED_OUT_WARNING(DartsUI.iLBDWarningBitset)
|
||
bProcessMenuInput = FALSE
|
||
|
||
// After the warning, don't then transition to the leaderboards...
|
||
IF DartsUI.bLBDOnlineWarningDone
|
||
DartsUI.bDrawingLeaderboard = FALSE
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_SETUP_ENDUI, FALSE)
|
||
|
||
// Reset the warning display.
|
||
DartsUI.bLBDOnlineWarningDone = FALSE
|
||
ENDIF
|
||
ELSE
|
||
DARTS_DISPLAY_SOCIAL_CLUB_LEADERBOARD(DartsUI.dartsLB_control, DartsUI.uiLeaderboard) //, FALSE)
|
||
ENDIF
|
||
|
||
// Process input here.
|
||
IF bProcessMenuInput
|
||
UPDATE_SIMPLE_USE_CONTEXT(DartsUI.inGameControlContext)
|
||
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
||
// No longer drawing the leaderboard, and re-do the input.
|
||
DartsUI.bDrawingLeaderboard = FALSE
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_SETUP_ENDUI, FALSE)
|
||
ELIF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
|
||
// Continue.
|
||
DartsUIRetVal = DARTS_UIRETVAL_FALSE
|
||
ELIF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND)
|
||
// Rematch.
|
||
DartsUIRetVal = DARTS_UIRETVAL_TRUE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF SHOULD_PROFILE_BUTTON_BE_AVAILABLE_FOR_LEADERBOARD(DartsUI.dartsLB_control)
|
||
IF NOT bDartsProfilesReady
|
||
|
||
bDartsProfilesReady = TRUE
|
||
|
||
// just do override here
|
||
INIT_SIMPLE_USE_CONTEXT(DartsUI.inGameControlContext, FALSE, FALSE, TRUE, TRUE)
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "DARTS_CONT", FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "DARTS_REMATCH", FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND)
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "IB_BACK", FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "SCLB_PROFILE", FRONTEND_CONTROL, INPUT_FRONTEND_SELECT)
|
||
SET_SIMPLE_USE_CONTEXT_FULLSCREEN(DartsUI.inGameControlContext)
|
||
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "profile is ready, button should show")
|
||
ENDIF
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "profiles not ready yet")
|
||
ENDIF
|
||
ELSE
|
||
DartsUIRetVal = DARTS_UPDATE_END_MENU(DartsUI, FALSE, FALSE, bDartsLBPredictDone)
|
||
|
||
RENDER_ENDSCREEN(DartsEndScreen)
|
||
ENDIF
|
||
|
||
IF (IS_SYNCHRONIZED_SCENE_RUNNING(iSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iSceneID) >= 0.995)
|
||
OR NOT IS_SYNCHRONIZED_SCENE_RUNNING(iSceneID)
|
||
bInSyncCam = TRUE
|
||
|
||
IF DOES_CAM_EXIST(camDartsSync)
|
||
DESTROY_CAM(camDartsSync)
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[0])
|
||
AND NOT IS_PED_INJURED(piDartPlayers[1])
|
||
CLEAR_PED_TASKS_IMMEDIATELY(piDartPlayers[0])
|
||
CLEAR_PED_TASKS_IMMEDIATELY(piDartPlayers[1])
|
||
FORCE_PED_AI_AND_ANIMATION_UPDATE(piDartPlayers[0])
|
||
FORCE_PED_AI_AND_ANIMATION_UPDATE(piDartPlayers[1])
|
||
ENDIF
|
||
ENDIF
|
||
|
||
ANOTHER_GAME_BACKSIDE()
|
||
ENDIF
|
||
|
||
IF GET_TIMER_IN_SECONDS_SAFE(DartGame.miscTimer) > 2.0
|
||
IF NOT bGameOverSpeechPlayed
|
||
IF DartGame.bDartWinner
|
||
BOOL bFirstGame
|
||
IF (DartGame.iDartSBGamesWon[0] + DartGame.iDartSBGamesWon[1]) = 1
|
||
bFirstGame = TRUE
|
||
ELSE
|
||
bFirstGame = FALSE
|
||
ENDIF
|
||
|
||
PLAY_WIN_AUDIO(piDartPlayers, bFirstGame)
|
||
ELSE
|
||
PLAY_LOSS_AUDIO(piDartPlayers)
|
||
ENDIF
|
||
bGameOverSpeechPlayed = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// player wants another game
|
||
IF DartsUIRetVal = DARTS_UIRETVAL_TRUE
|
||
|
||
CLEAR_HELP()
|
||
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_COMPLETE))
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[0]) AND NOT IS_PED_INJURED(piDartPlayers[1])
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[0])
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[1])
|
||
ENDIF
|
||
|
||
//CLEANUP_MINIGAME_INSTRUCTIONS(DartsUI.uiQuitControls)
|
||
//CLEANUP_MINIGAME_INSTRUCTIONS(DartsUI.uiEndGameControls)
|
||
|
||
RESET_ENDSCREEN(DartsEndScreen)
|
||
|
||
IF bUsedSetsLegs
|
||
UPDATE_SB_SETS_LEGS(DartsSB, 0, 0, 0, 0)
|
||
ENDIF
|
||
|
||
DartGame.iThrowsTaken[0] = 0
|
||
DartGame.iThrowsTaken[1] = 0
|
||
DartGame.iBullsEyesHit[0] = 0
|
||
DartGame.iBullsEyesHit[1] = 0
|
||
|
||
iPlayr = 1
|
||
CANCEL_TIMER(DartGame.miscTimer)
|
||
DartGame.Stage = STAGE_STARTING
|
||
|
||
bGameOverSpeechPlayed = FALSE
|
||
bDartsWon = FALSE
|
||
|
||
bInSyncCam = FALSE
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "rematch happening, resetting rank prediction stuff")
|
||
CLEAR_RANK_REDICTION_DETAILS()
|
||
bDartsLBPredictDone = FALSE
|
||
bDartsLBRead = FALSE
|
||
DartsUI.bDrawingLeaderboard = FALSE
|
||
bDartsLBWrite = FALSE
|
||
bDartsProfilesReady = FALSE
|
||
|
||
CLEANUP_SOCIAL_CLUB_LEADERBOARD(DartsUI.dartsLB_control)
|
||
SC_LEADERBOARD_CACHE_CLEAR_ALL()
|
||
|
||
// player wants to quit
|
||
ELIF DartsUIRetVal = DARTS_UIRETVAL_FALSE
|
||
//Set endscreen to transition-out
|
||
ENDSCREEN_START_TRANSITION_OUT(DartsendScreen)
|
||
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_COMPLETE))
|
||
|
||
// give player his money
|
||
IF (DartGame.iDartGamesWon[0] * DART_MONEY_WON) > 0
|
||
CREDIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_TAXI, (DartGame.iDartGamesWon[0] * DART_MONEY_WON))
|
||
ENDIF
|
||
|
||
CLEAR_PRINTS()
|
||
DartGame.Stage = STAGE_FINISHED
|
||
//CLEANUP_DARTS_GAME(DartGame, DartsUI)
|
||
|
||
ELIF (IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_SCRIPT_PAD_LEFT) OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_SCRIPT_PAD_RIGHT))
|
||
AND DartGame.eThrowStyle = DARTS_STYLE_STICK
|
||
AND bProcessMenuInput
|
||
|
||
VECTOR vTemp
|
||
DartGame.bAnotherCamActive = FALSE
|
||
|
||
IF bEndGameDartZoomTrans
|
||
vTemp = GET_ENTITY_COORDS(DartGame.Darts[iPlayr][iDartZoom].object)
|
||
DARTS_ZOOM_DART_CAM_TRANS(vTemp, FALSE, bEndGameDartZoomTrans)
|
||
|
||
bEndGameDartZoomTrans = FALSE
|
||
|
||
ELIF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT)
|
||
iDartZoom++
|
||
IF iDartZoom >= DartGame.iNumThrowsTurn
|
||
iDartZoom = 0
|
||
ENDIF
|
||
|
||
vTemp = GET_ENTITY_COORDS(DartGame.Darts[iPlayr][iDartZoom].object)
|
||
DARTS_ZOOM_DART_CAM(vTemp)
|
||
CDEBUG1LN(DEBUG_DARTS, "_____ Throw ", iDartZoom+1, ": ", DartGame.Darts[iPlayr][iDartZoom].iHitValue, " points _____")
|
||
|
||
ELIF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT)
|
||
iDartZoom--
|
||
IF iDartZoom < 0
|
||
iDartZoom = DartGame.iNumThrowsTurn - 1
|
||
ENDIF
|
||
|
||
vTemp = GET_ENTITY_COORDS(DartGame.Darts[iPlayr][iDartZoom].object)
|
||
DARTS_ZOOM_DART_CAM(vTemp)
|
||
CDEBUG1LN(DEBUG_DARTS, "_____ Throw ", iDartZoom+1, ": ", DartGame.Darts[iPlayr][iDartZoom].iHitValue, " points _____")
|
||
ENDIF
|
||
|
||
ELIF (IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_LEADERBOARD)
|
||
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_LEADERBOARD))
|
||
AND bProcessMenuInput
|
||
AND (bDartsLBPredictDone OR NOT IS_PLAYER_ONLINE())
|
||
// Trying to go to the leaderboard.
|
||
DartsUI.bDrawingLeaderboard = TRUE
|
||
|
||
// STRING eOpenGamerCardButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_SELECT)
|
||
|
||
// Setup new prompts.
|
||
INIT_SIMPLE_USE_CONTEXT(DartsUI.inGameControlContext, FALSE, FALSE, TRUE, TRUE)
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "DARTS_CONT", FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "DARTS_REMATCH", FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND)
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "IB_BACK", FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
||
IF bDartsProfilesReady
|
||
ADD_SIMPLE_USE_CONTEXT_INPUT(DartsUI.inGameControlContext, "SCLB_PROFILE", FRONTEND_CONTROL, INPUT_FRONTEND_SELECT)//eOpenGamerCardButton
|
||
ENDIF
|
||
SET_SIMPLE_USE_CONTEXT_FULLSCREEN(DartsUI.inGameControlContext)
|
||
ENDIF
|
||
|
||
ELSE
|
||
// wait 'til we've finished rendering the player win/lost text
|
||
IF NOT DartGame.bAnotherCamActive //IS_CAM_ACTIVE(camAnotherGame)
|
||
CLEAR_HELP()
|
||
CLEAR_PRINTS()
|
||
|
||
DARTS_SETUP_END_MENU(DartsEndScreen, DartGame.bDartWinner, DartGame.iThrowsTaken[iPlayr], DartGame.iBullsEyesHit[iPlayr], DartsStats[DARTS_SCLB_STAT_NUM_180S],
|
||
DartGame.iDartSBGamesWon[0], DartGame.iDartSBGamesWon[1],
|
||
DartGame.iDartSBSetsWon[0], DartGame.iDartSBSetsWon[1],
|
||
DartGame.iDartSBFullGamesWon[0], DartGame.iDartSBFullGamesWon[1],
|
||
bUsedSetsLegs)
|
||
|
||
// SET_SCALEFORM_BIG_MESSAGE(DartsUI.siBigMessage, PICK_STRING(DartGame.bDartWinner, "DARTS_WINNER", "DARTS_LOSER"),
|
||
// PICK_STRING(DartGame.bDartWinner, "DARTS_WON", "DARTS_LOSE"), 6000)
|
||
|
||
FLOAT fResolution
|
||
fResolution = GET_ASPECT_RATIO(TRUE)
|
||
CDEBUG1LN(DEBUG_DARTS, " fResolution = ", fResolution)
|
||
|
||
VECTOR scenePosition
|
||
VECTOR sceneRotation
|
||
|
||
IF fResolution > 2.0
|
||
CDEBUG1LN(DEBUG_DARTS, " resolution is eyefinity")
|
||
scenePosition = << 1992.29407, 3047.57690, 46.21517 >>
|
||
sceneRotation = << 0.000, 0.000, 138.740 >>
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "resolution is not eyefinity")
|
||
scenePosition = << 1992.33569, 3047.92432, 46.21517 >>
|
||
sceneRotation = << 0.000, 0.000, 136.740 >>
|
||
ENDIF
|
||
|
||
INT iWhichOutro
|
||
|
||
iWhichOutro = GET_WHICH_DARTS_OUTRO() //GET_RANDOM_INT_IN_RANGE(0, iAnimLimit)
|
||
iSceneID = CREATE_SYNCHRONIZED_SCENE(scenePosition, sceneRotation)
|
||
camDartsSync = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
|
||
PLAY_SYNCHRONIZED_CAM_ANIM(camDartsSync, iSceneID, sOutroCam[iWhichOutro], "mini@dartsoutro")
|
||
SET_CAM_ACTIVE(camDartsSync, TRUE)
|
||
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[0])
|
||
AND NOT IS_PED_INJURED(piDartPlayers[1])
|
||
IF DartGame.bDartWinner
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[0], iSceneID, "mini@dartsoutro", sOutroWin[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[1], iSceneID, "mini@dartsoutro", sOutroLoss[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_PLAY_ANIM(PLAYER_PED_ID(), sFacialDictPlayer, sFacialClip[GET_RANDOM_INT_IN_RANGE(0, 3)], SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_SECONDARY)
|
||
ELSE
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[1], iSceneID, "mini@dartsoutro", sOutroWin[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[0], iSceneID, "mini@dartsoutro", sOutroLoss[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_PLAY_ANIM(piDartPlayers[1], sFacialDictPed, sFacialClip[GET_RANDOM_INT_IN_RANGE(0, 3)], SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_SECONDARY)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
bInSyncCam = FALSE
|
||
|
||
//ANOTHER_GAME_CAM()
|
||
DartGame.bAnotherCamActive = TRUE
|
||
DartsUI.iEndDelay = GET_GAME_TIMER()
|
||
|
||
INT idx, idy
|
||
REPEAT NUM_DART_PLAYERS idx
|
||
REPEAT NUM_DART_TURNS idy
|
||
RESET_DART(DartGame.Darts[idx][idy])
|
||
ENDREPEAT
|
||
|
||
DARTS_CLEAR_SCORES(DartsSB, idx)
|
||
ENDREPEAT
|
||
|
||
//ELIF NOT IS_CAM_INTERPOLATING(camAnotherGame)
|
||
ELIF GET_GAME_TIMER() - DartsUI.iEndDelay > 400
|
||
AND ENDSCREEN_PREPARE(DartsEndScreen, FALSE)
|
||
|
||
IF NOT DartGame.bDartWinner
|
||
PLAY_SOUND_FRONTEND(-1, "LOOSE_MATCH", "HUD_MINI_GAME_SOUNDSET")
|
||
ENDIF
|
||
|
||
bEndGameMessageDisplayed = TRUE
|
||
|
||
ENDIF
|
||
ENDIF
|
||
ENDPROC
|
||
|
||
FUNC BOOL IS_SPECIFIC_DARTS_OPPONENT_NEARBY(PED_INDEX & piNearbyPeds[], PED_INDEX & piOpponent, MODEL_NAMES eSpecificModel)
|
||
INT iPed
|
||
|
||
REPEAT GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), piNearbyPeds) iPed
|
||
IF NOT IS_PED_INJURED(piNearbyPeds[iPed])
|
||
IF GET_ENTITY_MODEL(piNearbyPeds[iPed]) = eSpecificModel
|
||
SET_ENTITY_AS_MISSION_ENTITY(piNearbyPeds[iPed], TRUE, TRUE)
|
||
piOpponent = piNearbyPeds[iPed]
|
||
CDEBUG1LN(DEBUG_DARTS, "Ped model ", iPed, " got what we need")
|
||
RETURN TRUE
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "Ped model ", iPed, " is not the one we want")
|
||
ENDIF
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
FUNC BOOL IS_DARTS_OPPONENT_NEARBY(PED_INDEX & piNearbyPeds[])
|
||
INT iPed
|
||
|
||
REPEAT GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), piNearbyPeds) iPed
|
||
IF NOT IS_PED_INJURED(piNearbyPeds[iPed])
|
||
IF GET_ENTITY_MODEL(piNearbyPeds[iPed]) = A_F_M_SALTON_01
|
||
OR GET_ENTITY_MODEL(piNearbyPeds[iPed]) = A_F_O_SALTON_01
|
||
OR GET_ENTITY_MODEL(piNearbyPeds[iPed]) = A_M_Y_VINEWOOD_01
|
||
OR GET_ENTITY_MODEL(piNearbyPeds[iPed]) = A_M_Y_STLAT_01
|
||
OR GET_ENTITY_MODEL(piNearbyPeds[iPed]) = A_M_Y_VINEWOOD_04
|
||
OR GET_ENTITY_MODEL(piNearbyPeds[iPed]) = A_M_Y_STWHI_02
|
||
OR GET_ENTITY_MODEL(piNearbyPeds[iPed]) = A_M_Y_VINEWOOD_03
|
||
SET_ENTITY_AS_MISSION_ENTITY(piNearbyPeds[iPed], TRUE, TRUE)
|
||
piDartPlayers[1] = piNearbyPeds[iPed]
|
||
CDEBUG1LN(DEBUG_DARTS, "Ped model ", iPed, " got what we need")
|
||
RETURN TRUE
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "Ped model ", iPed, " is not the one we want")
|
||
ENDIF
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
PROC SET_NEXT_OPPONENT(MODEL_NAMES eDartOpponent, MODEL_NAMES & eNextOpponent)
|
||
SWITCH eDartOpponent
|
||
CASE A_F_M_SALTON_01 eNextOpponent = A_F_O_SALTON_01 BREAK
|
||
CASE A_F_O_SALTON_01 eNextOpponent = A_F_M_SALTON_01 BREAK
|
||
CASE A_M_Y_VINEWOOD_01 eNextOpponent = A_M_Y_STWHI_02 BREAK
|
||
CASE A_M_Y_VINEWOOD_03 eNextOpponent = A_M_Y_VINEWOOD_01 BREAK
|
||
CASE A_M_Y_VINEWOOD_04 eNextOpponent = A_M_Y_VINEWOOD_03 BREAK
|
||
CASE A_M_Y_STLAT_01 eNextOpponent = A_M_Y_VINEWOOD_04 BREAK
|
||
CASE A_M_Y_STWHI_02 eNextOpponent = A_M_Y_STLAT_01 BREAK
|
||
ENDSWITCH
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// used for russian name translation
|
||
/// PARAMS:
|
||
/// sName - original name
|
||
/// RETURNS:
|
||
/// russian translation
|
||
FUNC STRING GET_DART_LOCAL_PLAYER_NAME(STRING sName)
|
||
|
||
IF GET_CURRENT_LANGUAGE() = LANGUAGE_RUSSIAN
|
||
IF ARE_STRINGS_EQUAL(sName, "MICHAEL")
|
||
RETURN "МАЙКЛ"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "FRANKLIN")
|
||
RETURN "ФРАНКЛИН"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "TREVOR")
|
||
RETURN "ТРЕВОР"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "LAMAR")
|
||
RETURN "ЛАМАР"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "JIMMY")
|
||
RETURN "ДЖИММИ"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "KRISTY")
|
||
RETURN "КРИСТИ"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "MARLENE")
|
||
RETURN "МАРЛЕН"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "LORIE")
|
||
RETURN "ЛОРИ"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "SHELLEY")
|
||
RETURN "ШЕЛЛИ"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "RAYMOND")
|
||
RETURN "РЕЙМОНД"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "JOHAN")
|
||
RETURN "ЙОХАН"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "STAN")
|
||
RETURN "СТЭН"
|
||
ELIF ARE_STRINGS_EQUAL(sName, "VINCE")
|
||
RETURN "ВИНС"
|
||
ENDIF
|
||
ENDIF
|
||
|
||
RETURN sName
|
||
ENDFUNC
|
||
|
||
/// PURPOSE:
|
||
/// Creates opponent ped, sets player and opponent at the proper position
|
||
PROC INIT_PEDS(FLOAT fBoardHeading, DARTS_PLAYER_POS PlayerPositions, PED_INDEX & piNearbyPeds[], DARTS_ARGS & DartsArgs)
|
||
CDEBUG1LN(DEBUG_DARTS, "PlayerPositions.vDartPlayrPos = ", PlayerPositions.vDartPlayrPos, ". PlayerPositions.vOpponentPos = ", PlayerPositions.vOpponentPos)
|
||
|
||
//SET_ENTITY_COORDS(piDartPlayers[0], PlayerPositions.vDartPlayrPos)
|
||
//SET_ENTITY_HEADING(piDartPlayers[0], fBoardHeading)
|
||
|
||
|
||
IF DOES_ENTITY_EXIST(FRIEND_A_PED_ID())// if this is a friend activity, this should already be set
|
||
AND NOT IS_PED_INJURED(FRIEND_A_PED_ID())
|
||
REMOVE_PED_FROM_GROUP(FRIEND_A_PED_ID())
|
||
//SET_ENTITY_COORDS(FRIEND_A_PED_ID(), PlayerPositions.vOpponentPos)
|
||
//SET_ENTITY_HEADING(FRIEND_A_PED_ID(), fBoardHeading)
|
||
CDEBUG1LN(DEBUG_DARTS, "Friend activity, familiar ped is set")
|
||
|
||
ELSE
|
||
IF DOES_ENTITY_EXIST(DartsArgs.piDartOpponent)
|
||
AND NOT IS_PED_INJURED(DartsArgs.piDartOpponent)
|
||
CDEBUG1LN(DEBUG_DARTS, "Ped found from DartsArgs")
|
||
SET_ENTITY_AS_MISSION_ENTITY(DartsArgs.piDartOpponent, TRUE, TRUE)
|
||
piDartPlayers[1] = DartsArgs.piDartOpponent
|
||
CLEAR_PED_TASKS(piDartPlayers[1])
|
||
ELSE
|
||
IF IS_DARTS_OPPONENT_NEARBY(piNearbyPeds)
|
||
CDEBUG1LN(DEBUG_DARTS, "Non friend activity, ped grabbed from setting")
|
||
CLEAR_PED_TASKS(piDartPlayers[1])
|
||
ELSE
|
||
piDartPlayers[1] = CREATE_PED(PEDTYPE_MISSION, modelOpponent, PlayerPositions.vOpponentPos, fBoardHeading)
|
||
CDEBUG1LN(DEBUG_DARTS, "Non friend activity, random ped generated")
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF DECOR_EXIST_ON(piDartPlayers[1], "Darts_name")
|
||
// Awesome, get that name.
|
||
INT iHashName = DECOR_GET_INT(piDartPlayers[1], "Darts_name")
|
||
IF (HASH("RAYMOND") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("RAYMOND")
|
||
iP2NameHash = HASH("RAYMOND")
|
||
ELIF (HASH("JOHAN") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("JOHAN")
|
||
iP2NameHash = HASH("JOHAN")
|
||
ELIF (HASH("STAN") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("STAN")
|
||
iP2NameHash = HASH("STAN")
|
||
ELIF (HASH("VINCE") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("VINCE")
|
||
iP2NameHash = HASH("VINCE")
|
||
ELIF (HASH("KRISTY") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("KRISTY")
|
||
iP2NameHash = HASH("KRISTY")
|
||
ELIF (HASH("MARLENE") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("MARLENE")
|
||
iP2NameHash = HASH("MARLENE")
|
||
ELIF (HASH("LORIE") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("LORIE")
|
||
iP2NameHash = HASH("LORIE")
|
||
ELIF (HASH("SHELLEY") = iHashName)
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("SHELLEY")
|
||
iP2NameHash = HASH("SHELLEY")
|
||
ENDIF
|
||
ENDIF
|
||
DECOR_SET_INT(piDartPlayers[1], "Darts_name", iP2NameHash)
|
||
ENDIF
|
||
|
||
MODEL_NAMES mDartOpponentModel
|
||
mDartOpponentModel = GET_ENTITY_MODEL(piDartPlayers[1])
|
||
|
||
SET_DART_OPPONENT_VOICE(mDartOpponentModel)
|
||
|
||
TASK_TURN_PED_TO_FACE_ENTITY(piDartPlayers[1], piDartPlayers[0])
|
||
TASK_TURN_PED_TO_FACE_ENTITY(piDartPlayers[0], piDartPlayers[1])
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
VECTOR vTemp1, vTemp2
|
||
vTemp1 = GET_ENTITY_COORDS(piDartPlayers[0])
|
||
vTemp2 = GET_ENTITY_COORDS(piDartPlayers[1])
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[0])
|
||
AND NOT IS_PED_INJURED(piDartPlayers[1])
|
||
CDEBUG1LN(DEBUG_DARTS, "Player is at ", vTemp1, ". Opponent is at ", vTemp2)
|
||
CDEBUG1LN(DEBUG_DARTS, "Player heading is ", GET_ENTITY_HEADING(piDartPlayers[0]), ". Opponent heading is ", GET_ENTITY_HEADING(piDartPlayers[1]))
|
||
ENDIF
|
||
#ENDIF // IS_DEBUG_BUILD
|
||
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// An end of turn transtion showing the players score and a closeup of the Darts Board
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
PROC DO_TURN_CHANGE (DART_GAME & DartGame, DARTS_SCOREBOARD & DartsSB, DARTS_UI & DartsUI)//, DARTS_LOCATION DartsLocation = DARTSLOCATION_ROCK_CLUB)
|
||
VECTOR vTemp
|
||
|
||
SWITCH DartGame.TurnChange
|
||
CASE DTC_BOARD_ZOOM
|
||
IF DartGame.eThrowStyle = DARTS_STYLE_STICK
|
||
BOARD_ZOOM_CAM()
|
||
ENDIF
|
||
|
||
IF iPlayr = 0
|
||
IF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_NOT_DOUBLE)
|
||
PRINT_WITH_NUMBER_NOW("DARTS_PLR_DUB", DartGame.Darts[iPlayr][iTurn].iHitValue, 5000, 0)
|
||
|
||
ELIF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_ONE_POINT_LEFT)
|
||
PRINT_NOW("DARTS_ONE_PT", 5000, 0)
|
||
|
||
ELIF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_UNDER_ZERO)
|
||
PRINT_WITH_NUMBER_NOW("DARTS_PLR_BUST", DartGame.Darts[iPlayr][iTurn].iHitValue, 5000, 0)
|
||
|
||
ELSE
|
||
PRINT_WITH_NUMBER_NOW("DARTS_SWITCH_C", DartGame.Scores[iPlayr], 5000, 0)
|
||
|
||
ENDIF
|
||
ELSE
|
||
IF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_NOT_DOUBLE)
|
||
PRINT_WITH_NUMBER_NOW("DARTS_OPP_DUB", DartGame.Darts[iPlayr][iTurn].iHitValue, 5000, 0)
|
||
|
||
ELIF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_ONE_POINT_LEFT)
|
||
PRINT_NOW("DARTS_ONE_PT", 5000, 0)
|
||
|
||
ELIF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_UNDER_ZERO)
|
||
PRINT_WITH_NUMBER_NOW("DARTS_OPP_BUST", DartGame.Darts[iPlayr][iTurn].iHitValue, 5000, 0)
|
||
|
||
ELSE
|
||
PRINT_WITH_NUMBER_NOW("DARTS_SWITCH_B", DartGame.Scores[iPlayr], 5000, 0)
|
||
|
||
ENDIF
|
||
ENDIF
|
||
|
||
SETTIMERB(0)
|
||
|
||
DartGame.TurnChange = DTC_NEXT_TURN
|
||
BREAK
|
||
|
||
CASE DTC_DART_ZOOM
|
||
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT)
|
||
iDartZoom++
|
||
IF iDartZoom >= DartGame.iNumThrowsTurn
|
||
iDartZoom = 0
|
||
ENDIF
|
||
vTemp = GET_ENTITY_COORDS(DartGame.Darts[iPlayr][iDartZoom].object)
|
||
DARTS_ZOOM_DART_CAM(vTemp)
|
||
CDEBUG1LN(DEBUG_DARTS, "********** iDartZoom is ", iDartZoom)
|
||
CDEBUG1LN(DEBUG_DARTS, "********** vPosition is: ", DartGame.Darts[iPlayr][iDartZoom].vPosition)
|
||
CDEBUG1LN(DEBUG_DARTS, "********** Entity coords are: ",vTemp)
|
||
CDEBUG1LN(DEBUG_DARTS, "********************")
|
||
CDEBUG1LN(DEBUG_DARTS, "_____ Throw ", iDartZoom+1, ": ", DartGame.Darts[iPlayr][iDartZoom].iHitValue, " points _____")
|
||
ENDIF
|
||
|
||
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT)
|
||
iDartZoom--
|
||
IF iDartZoom < 0
|
||
iDartZoom = DartGame.iNumThrowsTurn - 1
|
||
ENDIF
|
||
vTemp = GET_ENTITY_COORDS(DartGame.Darts[iPlayr][iDartZoom].object)
|
||
DARTS_ZOOM_DART_CAM(vTemp)
|
||
CDEBUG1LN(DEBUG_DARTS, "********** iDartZoom is ", iDartZoom)
|
||
CDEBUG1LN(DEBUG_DARTS, "********** vPosition is: ", DartGame.Darts[iPlayr][iDartZoom].vPosition)
|
||
CDEBUG1LN(DEBUG_DARTS, "********** Entity coords are: ", vTemp)
|
||
CDEBUG1LN(DEBUG_DARTS, "********************")
|
||
CDEBUG1LN(DEBUG_DARTS, "_____ Throw ", iDartZoom+1, ": ", DartGame.Darts[iPlayr][iDartZoom].iHitValue, " points _____")
|
||
ENDIF
|
||
|
||
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
||
vTemp = GET_ENTITY_COORDS(DartGame.Darts[iPlayr][iDartZoom].object)
|
||
DARTS_ZOOM_DART_CAM_TRANS(vTemp, FALSE)
|
||
DartGame.TurnChange = DTC_NEXT_TURN
|
||
ENDIF
|
||
|
||
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
||
bZoomCamSkip = TRUE
|
||
DartGame.TurnChange = DTC_NEXT_TURN
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DTC_NEXT_TURN
|
||
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
||
OR (bAISkipped AND bInstantSkip)
|
||
bZoomCamSkip = TRUE
|
||
ENDIF
|
||
|
||
IF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT))
|
||
AND DartGame.eThrowStyle = DARTS_STYLE_STICK
|
||
vTemp = GET_ENTITY_COORDS(DartGame.Darts[iPlayr][iDartZoom].object)
|
||
DARTS_ZOOM_DART_CAM_TRANS(vTemp)
|
||
//iDartZoom = iTurn
|
||
DartGame.TurnChange = DTC_DART_ZOOM
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "_____ Throw ", iDartZoom+1, ": ", DartGame.Darts[iPlayr][iDartZoom].iHitValue, " points _____")
|
||
ENDIF
|
||
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE)
|
||
IF NOT bAnyAudioPlayedThisTurn
|
||
IF PLAY_DARTS_TRASH_TALK((iPlayr = 0), piDartPlayers[1], (DartGame.LastScore[iPlayr] - DartGame.Scores[iPlayr]), DartGame.Scores[0], DartGame.Scores[1])
|
||
CDEBUG1LN(DEBUG_DARTS, "TRASH TALK PLAYED")
|
||
bAnyAudioPlayedThisTurn = TRUE
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "TRASH TALK DID NOT PLAY")
|
||
ENDIF
|
||
ELSE
|
||
IF (GET_GAME_TIMER() % 500) < 50
|
||
CDEBUG1LN(DEBUG_DARTS, "Some audio already played this turn")
|
||
ENDIF
|
||
ENDIF
|
||
ELSE
|
||
IF NOT bAnyAudioPlayedThisTurn
|
||
IF PLAY_DARTS_TRASH_TALK_CLUTCH((iPlayr = 0), piDartPlayers[1], (DartGame.LastScore[iPlayr] - DartGame.Scores[iPlayr]), DartGame.Scores[0], DartGame.Scores[1])
|
||
CDEBUG1LN(DEBUG_DARTS, "TRASH TALK CLUTCH PLAYED")
|
||
bAnyAudioPlayedThisTurn = TRUE
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "TRASH TALK CLUTCH DID NOT PLAY")
|
||
ENDIF
|
||
ELSE
|
||
IF (GET_GAME_TIMER() % 500) < 50
|
||
CDEBUG1LN(DEBUG_DARTS, "Some audio already played this turn")
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF bZoomCamSkip OR TIMERB() > 2000
|
||
bAISkipped = FALSE
|
||
|
||
INT i
|
||
REPEAT NUM_DART_TURNS i
|
||
RESET_DART(DartGame.Darts[iPlayr][i])
|
||
ENDREPEAT
|
||
|
||
IF DartGame.LastScore[iPlayr] <> DartGame.Scores[iPlayr]
|
||
DARTS_ADD_SCORE(DartsSB, iPlayr, DartGame.Scores[iPlayr])
|
||
PLAY_SOUND_FROM_COORD(-1, "DARTS_SCOREBOARD_MASTER", Dartgame.DartsBoard.vDartBoard)
|
||
ENDIF
|
||
|
||
// store the previous score in case we need to roll back to it for bustouts
|
||
DartGame.LastScore[iPlayr] = DartGame.Scores[iPlayr]
|
||
|
||
// reset the turn
|
||
iTurn = 0
|
||
DartGame.iTurnScore = 0
|
||
|
||
// switch the player
|
||
IF iPlayr = 0
|
||
iPlayr = 1
|
||
ELSE
|
||
iPlayr = 0
|
||
ENDIF
|
||
|
||
UPDATE_HIGHLIGHT(DartsSB, iPlayr)
|
||
|
||
bNoCrossConflict = FALSE
|
||
CDEBUG1LN(DEBUG_DARTS, "%%%%%%%%%%%%%%%%%%%%%%%%%%%% SWITCHING PLAYER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
|
||
|
||
DARTS_GAME_CAM()
|
||
IF NOT bInstantSkip
|
||
CLEAR_SMALL_PRINTS()
|
||
ENDIF
|
||
|
||
// BOOL bIsPlayer
|
||
//
|
||
// IF iPlayr = 0
|
||
// bIsPlayer = TRUE
|
||
// ELSE
|
||
// bIsPlayer = FALSE
|
||
// ENDIF
|
||
|
||
iSteadyShotsUsed = 0
|
||
|
||
DartsUI.iDartsLeft = 3
|
||
|
||
bOneDartHelpShown = FALSE
|
||
bBoredAudioPlayedThisTurn = FALSE
|
||
bAnyAudioPlayedThisTurn = FALSE
|
||
bZoomCamSkip = FALSE
|
||
iDartZoom = 0
|
||
DartGame.iNumThrowsTurn = 0
|
||
DartGame.TurnStage = DPS_AIM
|
||
DartGame.TurnChange = DTC_BOARD_ZOOM
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
ENDPROC
|
||
|
||
FUNC BOOL DID_DARTS_CLASH(DART_GAME & DartGame)
|
||
INT i
|
||
|
||
REPEAT iTurn i
|
||
IF DartGame.Darts[iPlayr][iTurn].vTarget.x > DartGame.Darts[iPlayr][i].vTarget.x - 0.008
|
||
AND DartGame.Darts[iPlayr][iTurn].vTarget.x < DartGame.Darts[iPlayr][i].vTarget.x + 0.008
|
||
AND DartGame.Darts[iPlayr][iTurn].vTarget.z > DartGame.Darts[iPlayr][i].vTarget.z - 0.008
|
||
AND DartGame.Darts[iPlayr][iTurn].vTarget.z < DartGame.Darts[iPlayr][i].vTarget.z + 0.008
|
||
RETURN TRUE
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
FUNC BOOL DO_TURN_ZOOM(DART_ZOOM_TURN & DartZoomStage)
|
||
SWITCH DartZoomStage
|
||
CASE DZT_ZOOM_IN
|
||
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LT)
|
||
DARTS_ZOOM_LAST_TURN()
|
||
DartZoomStage = DZT_ZOOM_INTERP
|
||
ELSE
|
||
RETURN FALSE
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DZT_ZOOM_INTERP
|
||
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LT)
|
||
IF NOT IS_CAM_INTERPOLATING(camZoomBoard)
|
||
SETUP_DARTS_PC_ZOOM_CONTROLS()
|
||
INIT_FIRST_PERSON_CAMERA(fpDartsCam, vFPDartsPos, vFPDartsRot, 30, 10, 10, 3, 15, FALSE, 0, -1, TRUE)
|
||
DartZoomStage = DZT_ZOOM_FP
|
||
ENDIF
|
||
ELSE
|
||
DartZoomStage = DZT_ZOOM_OUT
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DZT_ZOOM_FP
|
||
IF NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LT)
|
||
DartZoomStage = DZT_ZOOM_OUT
|
||
ELSE
|
||
UPDATE_FIRST_PERSON_CAMERA(fpDartsCam)
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DZT_ZOOM_OUT
|
||
|
||
//CLEAR_FIRST_PERSON_CAMERA(fpDartsCam)
|
||
DARTS_ZOOM_LAST_TURN(FALSE)
|
||
|
||
SETUP_DARTS_PC_CONTROLS()
|
||
|
||
IF DOES_CAM_EXIST(fpDartsCam.theCam)
|
||
IF IS_CAM_ACTIVE(fpDartsCam.theCam)
|
||
SET_CAM_ACTIVE(fpDartsCam.theCam,FALSE)
|
||
ENDIF
|
||
DESTROY_CAM(fpDartsCam.theCam)
|
||
ENDIF
|
||
|
||
DartZoomStage = DZT_ZOOM_IN
|
||
|
||
RETURN FALSE
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN TRUE
|
||
ENDFUNC
|
||
|
||
FUNC BOOL DO_ONE_DART_HELPER (INT iTotalScore, DARTS_BOARD & DartsBoard, ONE_DART_STAGE & OneDartStage, VECTOR & vOneDartZoomCoord)
|
||
SWITCH OneDartStage
|
||
CASE ODS_ZOOM_IN
|
||
VECTOR vLocalDoubleCoord
|
||
|
||
vLocalDoubleCoord = GET_DOUBLE_VECTOR(iTotalScore)
|
||
vOneDartZoomCoord = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(DartsBoard.oiDartBoard, vLocalDoubleCoord)
|
||
CDEBUG1LN(DEBUG_DARTS, "--------------- vLocalDoubleCoord = ", vLocalDoubleCoord, ", vOneDartZoomCoord = ", vOneDartZoomCoord)
|
||
|
||
DARTS_DOUBLE_CAM_START(vOneDartZoomCoord)
|
||
SETTIMERB(0)
|
||
OneDartStage = ODS_ZOOM_OUT
|
||
BREAK
|
||
|
||
CASE ODS_ZOOM_OUT
|
||
IF TIMERB() > 3000 OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
||
DARTS_DOUBLE_CAM_END()
|
||
OneDartStage = ODS_ZOOM_IN
|
||
|
||
RETURN TRUE
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
/// PURPOSE:
|
||
/// The main in game progress loop.
|
||
/// PARAMS:
|
||
/// DartGame -
|
||
PROC DO_IN_PROGRESS (DART_GAME & DartGame, DARTS_STARTING_RETICLE_POS & InitRetPos, DARTS_SCOREBOARD & DartsSB, DARTS_UI & DartsUI, structTimer & ThrowTimer)//, DARTS_LOCATION DartsLocation)
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
IF iPlayr < 2 AND iTurn < 3
|
||
IF DartGame.Darts[iPlayr][iTurn].bTravelling
|
||
DRAW_DEBUG_TEXT_2D("bTravelling is TRUE", << 0.7, 0.3, 0.0 >>)
|
||
ENDIF
|
||
ENDIF
|
||
HANDLE_SWITCH_CAM(DebugBoard.bSwitchCam)
|
||
#ENDIF
|
||
|
||
BOOL bGameCamInterpolating
|
||
|
||
//If cam is moving, don't show HUD
|
||
IF NOT IS_CAM_INTERPOLATING(camDartGame)
|
||
|
||
bGameCamInterpolating = FALSE
|
||
PLAYER_QUIT_CONTROL(DartGame)
|
||
|
||
IF NOT bHasQuitTextPrinted
|
||
// Instructions during end of turn board and dart zooms
|
||
IF DartGame.TurnStage = DPS_TURN_CHANGE
|
||
IF DartsUI.bInstructTextTransIn
|
||
CLEAR_HELP()
|
||
DartsUI.bInstructTextTransIn = FALSE
|
||
ENDIF
|
||
// Instructions during regular gameplay
|
||
ELIF NOT bUITextDisplayed
|
||
|
||
|
||
IF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_END_HELP_READY)
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_WIN_HELP)
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gWIN_HELP_SHOWN)
|
||
PRINT_HELP("DARTS_INSTR_W")
|
||
SET_BIT(g_iDartsTutorialFlags, gWIN_HELP_SHOWN)
|
||
ENDIF
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_WIN_HELP, TRUE)
|
||
ELIF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_HELP)
|
||
AND DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_HELP_READY)
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gBUST_HELP_SHOWN)
|
||
PRINT_HELP("DARTS_INSTR_B")
|
||
SET_BIT(g_iDartsTutorialFlags, gBUST_HELP_SHOWN)
|
||
ENDIF
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_BUST_HELP, TRUE)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// IF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE)
|
||
// AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_SHT_USE")
|
||
// AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_FST_HLP")
|
||
// AND iPlayr = 0
|
||
// IF (DartGame.Scores[iPlayr] % 2) = 0
|
||
// IF DartGame.Scores[iPlayr] = 50
|
||
// ELSE
|
||
// CLEAR_HELP()
|
||
// ENDIF
|
||
//
|
||
// ELSE
|
||
// //PRINT_HELP_FOREVER_WITH_NUMBER("DARTS_CURRENT", DartGame.Scores[iPlayr])
|
||
// ENDIF
|
||
// ELSE
|
||
// //DARTS_HELP(iPlayr, DartsUI)
|
||
//
|
||
// ENDIF
|
||
DartsUI.bInstructTextTransIn = TRUE
|
||
ELSE
|
||
IF DartsUI.bInstructTextTransIn
|
||
CLEAR_HELP()
|
||
DartsUI.bInstructTextTransIn = FALSE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF DartGame.TurnStage = DPS_ZOOM
|
||
IF NOT IS_CAM_INTERPOLATING(camZoomBoard)
|
||
AND DartGame.ZoomTurn = DZT_ZOOM_FP
|
||
DARTS_ZOOM_CONTROLS_UI(DartsUI)
|
||
ENDIF
|
||
ELSE
|
||
DARTS_CONTROLS_UI(DartsUI, iPlayr)
|
||
ENDIF
|
||
|
||
// SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_BOTTOM)
|
||
// SET_SCRIPT_GFX_ALIGN_PARAMS(0.0, 0.0, 0.0, 0.0)
|
||
//
|
||
// IF NOT bSubtitlesMoved
|
||
// FLOAT fnewx, fnewy
|
||
// GET_SCRIPT_GFX_ALIGN_POSITION(0.0, 0.0, fnewx, fnewy)
|
||
// SET_HUD_COMPONENT_POSITION(NEW_HUD_SUBTITLE_TEXT, fnewx, fnewy-0.21)
|
||
// bSubtitlesMoved = TRUE
|
||
// ENDIF
|
||
//
|
||
// RESET_SCRIPT_GFX_ALIGN()
|
||
|
||
// SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_TOP)
|
||
// SET_SCRIPT_GFX_ALIGN_PARAMS(-0.05, -0.05, 0.0, 0.0)
|
||
//
|
||
// RESET_SCRIPT_GFX_ALIGN()
|
||
|
||
//DRAW_DARTS_HUD(DartsUI)
|
||
|
||
SKIP_AI_TURN_CHECK(DartGame.TurnStage)
|
||
|
||
ELSE
|
||
bGameCamInterpolating = TRUE
|
||
ENDIF
|
||
|
||
DARTS_DISPLAY_SPECIAL_SPLASH(DartsUI)
|
||
|
||
SWITCH DartGame.TurnStage
|
||
CASE DPS_ZOOM
|
||
IF NOT DO_TURN_ZOOM(DartGame.ZoomTurn)
|
||
DartGame.TurnStage = DPS_AIM
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DPS_ONE_DART_HELPER
|
||
IF DO_ONE_DART_HELPER(DartGame.Scores[iPlayr], DartGame.DartsBoard, DartGame.OneDartStage, DartGame.vOneDartZoomCoord)
|
||
DartGame.TurnStage = DPS_AIM
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DPS_AIM
|
||
//prepping reticle and reticle shake
|
||
//doing reticle move speed
|
||
|
||
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LT) AND iPlayr = 0 //AND DartGame.eThrowStyle = DARTS_STYLE_STICK
|
||
DartGame.TurnStage = DPS_ZOOM
|
||
ENDIF
|
||
|
||
IF iPlayr = 0
|
||
// IF DartGame.iBustStreak > 3 AND (DartGame.Scores[iPlayr] % 2 = 0) AND DartGame.eThrowStyle = DARTS_STYLE_STICK
|
||
// DartGame.TurnStage = DPS_ONE_DART_HELPER
|
||
// DartGame.iBustStreak = 0
|
||
|
||
DARTS_GAME_HELP(iTurn)
|
||
|
||
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_SHT_USE")
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_INSTR_W")
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_INSTR_B")
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_AIM_HLP")
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_STD_HLP")
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_FST_HLP")
|
||
IF DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_SHOW_LEVEL_UP)
|
||
// set the global bit here
|
||
PRINT_HELP("DARTS_LEVEL")
|
||
SET_BIT(g_savedGlobals.sDartsData.iDartTimePlayed, iLevelBit)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_SHOW_LEVEL_UP, FALSE)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (DartGame.Scores[iPlayr] % 2 = 0) AND DartGame.Scores[iPlayr] < 41 AND iTurn = 0 AND NOT bOneDartHelpShown
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE, TRUE)
|
||
ENDIF
|
||
bOneDartHelpShown = TRUE
|
||
|
||
ELIF DartGame.Scores[iPlayr] = 50 AND NOT bOneDartHelpShown
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE)
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_IN_WIN_RANGE, TRUE)
|
||
ENDIF
|
||
bOneDartHelpShown = TRUE
|
||
|
||
ELSE
|
||
IF DO_AIMING(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard, InitRetPos,
|
||
bGameCamInterpolating, FALSE, FALSE, DartGame.eThrowStyle)
|
||
|
||
CLEAR_PRINTS()
|
||
DartsUI.iDartsLeft--
|
||
CDEBUG1LN(DEBUG_DARTS, "[DO_IN_PROGRESS->DPS_AIM] Aiming finished")
|
||
DartGame.TurnStage = DPS_THROW
|
||
ELSE
|
||
IF NOT bBoredAudioPlayedThisTurn
|
||
IF NOT IS_TIMER_STARTED(ThrowTimer)
|
||
RESTART_COUNTDOWNTIMER_NOW(ThrowTimer)
|
||
|
||
ELIF GET_TIMER_IN_SECONDS(ThrowTimer) > 20.0
|
||
PLAY_HURRY_AUDIO(piDartPlayers[1-iPlayr])
|
||
CANCEL_TIMER(ThrowTimer)
|
||
bBoredAudioPlayedThisTurn = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
ENDIF
|
||
ENDIF
|
||
|
||
ELSE
|
||
IF iTurn = 0
|
||
iSkipAILoopCatch = 0 // resetting for loop catch, take out when skipAIloop bug is resolved
|
||
GET_NEXT_AI_THROW(DartGame.Scores, DartGame.AIBrain)
|
||
GET_AI_THROW_VECTOR(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard, DartGame.TurnStage, DartGame.AIBrain)
|
||
ELIF TIMERA() > GET_RANDOM_INT_IN_RANGE(1250, 2500) //750
|
||
GET_NEXT_AI_THROW(DartGame.Scores, DartGame.AIBrain)
|
||
GET_AI_THROW_VECTOR(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard, DartGame.TurnStage, DartGame.AIBrain)
|
||
ENDIF
|
||
|
||
// AUDIO PROC FLAG
|
||
//bDartMissAudioPlayed = FALSE
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DPS_THROW
|
||
//displaying the dart flying through the air and hitting the board
|
||
//playing the correct sound effects
|
||
IF THROW_DART(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard, DartGame.eThrowStyle)
|
||
DartGame.iNumThrowsTurn++
|
||
DartGame.bDartsClash = DID_DARTS_CLASH(DartGame)
|
||
DartGame.TurnStage = DPS_SCORING
|
||
CDEBUG1LN(DEBUG_DARTS, "[DO_IN_PROGRESS->DPS_THROW] Throw finished")
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DPS_SCORING
|
||
//calculating the score
|
||
//keeping track of bust and win possibilities
|
||
//keeping track of turn cycles
|
||
//displaying to the UI
|
||
IF NOT DARTS_GET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_GAME_WON)
|
||
CDEBUG1LN(DEBUG_DARTS, "[DO_IN_PROGRESS->DPS_SCORING] Scoring Dart Turn ", iTurn, ", Player ", iPlayr)
|
||
SCORE_DART(DartGame.Darts[iPlayr][iTurn], DartGame.DartsBoard, DartGame.bDartsClash)
|
||
ENDIF
|
||
|
||
TURN_INCREMENT(DartGame, DartsUI)
|
||
|
||
BREAK
|
||
|
||
CASE DPS_TURN_CHANGE
|
||
DO_TURN_CHANGE(DartGame, DartsSB, DartsUI)//, DartsLocation)
|
||
IF IS_TIMER_STARTED(ThrowTimer)
|
||
CANCEL_TIMER(ThrowTimer)
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE DPS_SKIP_AI
|
||
//simulate AI player until a skip is called
|
||
DO_SKIP_AI_TURN(DartGame, DartsUI)
|
||
BREAK
|
||
ENDSWITCH
|
||
ENDPROC
|
||
|
||
FUNC BOOL DARTS_TUTORIAL(DARTS_TUTORIAL_STAGE & DartsTutorialStage, DARTS_BOARD & DartsBoard, DARTS_AI_BRAIN & AIBrain,
|
||
DARTS_PLAYER_STATE & TurnStage, DART & TutorialDarts[], structTimer & TutorialTimer)
|
||
|
||
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
|
||
AND GET_GAME_TIMER() >= iAllowSkipCutsceneTime + 1000
|
||
AND DartsTutorialStage != TS_SKIP
|
||
IF NOT IS_SCREEN_FADED_OUT()
|
||
AND NOT IS_SCREEN_FADING_OUT()
|
||
DO_SCREEN_FADE_OUT(500)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF IS_SCREEN_FADED_OUT()
|
||
AND DartsTutorialStage != TS_SKIP
|
||
//HANG_UP_AND_PUT_AWAY_PHONE()
|
||
//KILL_ANY_CONVERSATION()
|
||
DartsTutorialStage = TS_SKIP
|
||
ENDIF
|
||
|
||
SWITCH DartsTutorialStage
|
||
CASE TS_DOUBLE
|
||
SWITCH iTurn
|
||
CASE 0
|
||
IF TurnStage = DPS_AIM
|
||
iAllowSkipCutsceneTime = GET_GAME_TIMER()
|
||
DARTS_TUTORIAL_CAM(DartsBoard.vDartBoard, DartsBoard.fBoardHeading,
|
||
GET_TUTORIAL_CAM_COORD_OFFSET(TS_DOUBLE), GET_TUTORIAL_CAM_ROT_OFFSET(), 0, TRUE)
|
||
|
||
AIBrain.iThrowValue = 20
|
||
AIBrain.iThrowMultiplier = 2
|
||
GET_AI_THROW_VECTOR(TutorialDarts[0], DartsBoard, TurnStage, AIBrain, TRUE)
|
||
ENDIF
|
||
|
||
IF TurnStage = DPS_THROW
|
||
IF THROW_DART(TutorialDarts[0], DartsBoard)
|
||
PLAY_SOUND_FROM_COORD(-1, "DARTS_HIT_BOARD_MASTER", DartsBoard.vDartBoard)
|
||
iTurn++
|
||
RESTART_TIMER_NOW(TutorialTimer)
|
||
TurnStage = DPS_AIM
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 1
|
||
IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 1.0
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_DOUBLE_T")
|
||
PRINT_HELP("DARTS_DOUBLE_T")
|
||
ENDIF
|
||
|
||
IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 5.0
|
||
RESTART_TIMER_NOW(TutorialTimer)
|
||
CLEAR_HELP()
|
||
DARTS_TUTORIAL_CAM_INTERP(DartsBoard.vDartBoard, DartsBoard.fBoardHeading,
|
||
GET_TUTORIAL_CAM_COORD_OFFSET(TS_TRIPLE), GET_TUTORIAL_CAM_ROT_OFFSET(), 1000)
|
||
iTurn=0
|
||
DartsTutorialStage = TS_TRIPLE
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
BREAK
|
||
|
||
CASE TS_TRIPLE
|
||
SWITCH iTurn
|
||
CASE 0
|
||
IF NOT IS_CAM_INTERPOLATING(camTutInterp)
|
||
IF TurnStage = DPS_AIM
|
||
|
||
AIBrain.iThrowValue = 20
|
||
AIBrain.iThrowMultiplier = 3
|
||
GET_AI_THROW_VECTOR(TutorialDarts[1], DartsBoard, TurnStage, AIBrain, TRUE)
|
||
ENDIF
|
||
|
||
IF TurnStage = DPS_THROW
|
||
IF THROW_DART(TutorialDarts[1], DartsBoard)
|
||
PLAY_SOUND_FROM_COORD(-1, "DARTS_HIT_BOARD_MASTER", DartsBoard.vDartBoard)
|
||
iTurn++
|
||
RESTART_TIMER_NOW(TutorialTimer)
|
||
TurnStage = DPS_AIM
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 1
|
||
IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 1.0
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_TRIPLE_T")
|
||
PRINT_HELP("DARTS_TRIPLE_T")
|
||
ENDIF
|
||
|
||
IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 5.0
|
||
RESTART_TIMER_NOW(TutorialTimer)
|
||
CLEAR_HELP()
|
||
DARTS_TUTORIAL_CAM(DartsBoard.vDartBoard, DartsBoard.fBoardHeading,
|
||
GET_TUTORIAL_CAM_COORD_OFFSET(TS_BULLSEYE), GET_TUTORIAL_CAM_ROT_OFFSET(), 1000)
|
||
iTurn=0
|
||
DartsTutorialStage = TS_BULLSEYE
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
|
||
|
||
// IF NOT IS_CAM_INTERPOLATING(camTutInterp)
|
||
// AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_DOUBLE_T")
|
||
// PRINT_HELP("DARTS_DOUBLE_T")
|
||
//
|
||
// //AND NOT IS_THIS_FLOATING_HELP_BEING_DISPLAYED("DARTS_DOUBLE_T")
|
||
// // HELP_AT_ENTITY_OFFSET("DARTS_DOUBLE_T", DartGame.TutorialDarts[0].object, << 0, 0, -0.85 >>)
|
||
// ENDIF
|
||
//
|
||
// IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 6.0
|
||
// RESTART_TIMER_NOW(TutorialTimer)
|
||
// DARTS_TUTORIAL_CAM(DartsBoard.vDartBoard, DartsBoard.fBoardHeading,
|
||
// GET_TUTORIAL_CAM_COORD_OFFSET(TS_TRIPLE), GET_TUTORIAL_CAM_ROT_OFFSET(), 1000)
|
||
// //HELP_AT_ENTITY("DARTS_TRIPLE_T", DartGame.TutorialDarts[0].object)
|
||
// //CLEAR_THIS_FLOATING_HELP("DARTS_DOUBLE_T")
|
||
// DartsTutorialStage = TS_BULLSEYE
|
||
// ENDIF
|
||
BREAK
|
||
|
||
CASE TS_BULLSEYE
|
||
|
||
SWITCH iTurn
|
||
CASE 0
|
||
IF NOT IS_CAM_INTERPOLATING(camTutorial)
|
||
IF TurnStage = DPS_AIM
|
||
|
||
AIBrain.iThrowValue = 50
|
||
AIBrain.iThrowMultiplier = 1
|
||
GET_AI_THROW_VECTOR(TutorialDarts[2], DartsBoard, TurnStage, AIBrain, TRUE)
|
||
ENDIF
|
||
|
||
IF TurnStage = DPS_THROW
|
||
IF THROW_DART(TutorialDarts[2], DartsBoard)
|
||
PLAY_SOUND_FROM_COORD(-1, "DARTS_HIT_BOARD_MASTER", DartsBoard.vDartBoard)
|
||
iTurn++
|
||
RESTART_TIMER_NOW(TutorialTimer)
|
||
TurnStage = DPS_AIM
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 1
|
||
IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 1.0
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_BULL_T")
|
||
PRINT_HELP("DARTS_BULL_T")
|
||
ENDIF
|
||
|
||
IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 5.0
|
||
RESTART_TIMER_NOW(TutorialTimer)
|
||
CLEAR_HELP()
|
||
|
||
PLAY_SOUND_FRONTEND(-1, "CAM_PAN_DARTS", "HUD_MINI_GAME_SOUNDSET")
|
||
CPRINTLN(DEBUG_DARTS, "Playing first pan whoosh sound")
|
||
DARTS_TUTORIAL_CAM_INTERP(DartsBoard.vDartBoard, DartsBoard.fBoardHeading,
|
||
GET_TUTORIAL_CAM_COORD_OFFSET(TS_DBL_TO_WIN), GET_TUTORIAL_CAM_ROT_OFFSET(TRUE), 1500)
|
||
iTurn=0
|
||
DartsTutorialStage = TS_DBL_TO_WIN
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
// IF NOT IS_CAM_INTERPOLATING(camTutorial)
|
||
// AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_TRIPLE_T")
|
||
// PRINT_HELP("DARTS_TRIPLE_T")
|
||
//
|
||
// //AND NOT IS_THIS_FLOATING_HELP_BEING_DISPLAYED("DARTS_TRIPLE_T")
|
||
// // HELP_AT_ENTITY("DARTS_TRIPLE_T", DartGame.TutorialDarts[0].object)
|
||
// ENDIF
|
||
//
|
||
// IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 6.0
|
||
// RESTART_TIMER_NOW(TutorialTimer)
|
||
// DARTS_TUTORIAL_CAM_INTERP(DartsBoard.vDartBoard, DartsBoard.fBoardHeading,
|
||
// GET_TUTORIAL_CAM_COORD_OFFSET(TS_BULLSEYE), GET_TUTORIAL_CAM_ROT_OFFSET(), 1000)
|
||
// //HELP_AT_ENTITY("DARTS_BULL_T", DartGame.TutorialDarts[1].object)
|
||
// //CLEAR_THIS_FLOATING_HELP("DARTS_TRIPLE_T")
|
||
// DartsTutorialStage = TS_DBL_TO_WIN
|
||
// ENDIF
|
||
BREAK
|
||
|
||
CASE TS_DBL_TO_WIN
|
||
IF NOT IS_CAM_INTERPOLATING(camTutInterp)
|
||
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_DBL_WIN")
|
||
PRINT_HELP("DARTS_DBL_WIN")
|
||
//AND NOT IS_THIS_FLOATING_HELP_BEING_DISPLAYED("DARTS_BULL_T")
|
||
// HELP_AT_ENTITY("DARTS_BULL_T", DartGame.TutorialDarts[1].object)
|
||
ENDIF
|
||
|
||
IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 6.0
|
||
RESTART_TIMER_NOW(TutorialTimer)
|
||
// DARTS_TUTORIAL_CAM(DartsBoard.vDartBoard, DartsBoard.fBoardHeading,
|
||
// GET_TUTORIAL_CAM_COORD_OFFSET(TS_DBL_TO_WIN), GET_TUTORIAL_CAM_ROT_OFFSET(), 1500)
|
||
//HELP_AT_ENTITY("DARTS_DBL_WIN", DartGame.TutorialDarts[2].object)
|
||
//CLEAR_THIS_FLOATING_HELP("DARTS_BULL_T")
|
||
DartsTutorialStage = TS_ENDING
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE TS_ENDING
|
||
// IF NOT IS_CAM_INTERPOLATING(camTutorial)
|
||
// AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DARTS_DBL_WIN")
|
||
// PRINT_HELP("DARTS_DBL_WIN")
|
||
//
|
||
// //AND NOT IS_THIS_FLOATING_HELP_BEING_DISPLAYED("DARTS_DBL_WIN")
|
||
// // HELP_AT_ENTITY("DARTS_DBL_WIN", DartGame.TutorialDarts[2].object)
|
||
// ENDIF
|
||
|
||
//IF GET_TIMER_IN_SECONDS_SAFE(TutorialTimer) > 5.0 //TIMERA() > 6000
|
||
PLAY_SOUND_FRONTEND(-1, "CAM_PAN_DARTS", "HUD_MINI_GAME_SOUNDSET")
|
||
CPRINTLN(DEBUG_DARTS, "Playing second whoosh sound")
|
||
SET_CAM_ACTIVE_WITH_INTERP(camDartGame, camTutInterp, 1500)
|
||
//CLEAR_THIS_FLOATING_HELP("DARTS_DBL_WIN")
|
||
DartsTutorialStage = TS_ENDING2
|
||
//ENDIF
|
||
BREAK
|
||
|
||
CASE TS_ENDING2
|
||
IF NOT IS_CAM_INTERPOLATING(camDartGame)
|
||
iTurn = 0
|
||
CLEAR_HELP()
|
||
CLEAR_PRINTS()
|
||
//CLEAR_ALL_FLOATING_HELP()
|
||
INT i
|
||
REPEAT NUM_DART_TURNS i
|
||
CLEANUP_DART(TutorialDarts[i])
|
||
ENDREPEAT
|
||
|
||
RETURN TRUE
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE TS_SKIP
|
||
IF IS_SCREEN_FADED_OUT()
|
||
iTurn = 0
|
||
CLEAR_HELP()
|
||
CLEAR_PRINTS()
|
||
//CLEAR_ALL_FLOATING_HELP()
|
||
INT i
|
||
REPEAT NUM_DART_TURNS i
|
||
CLEANUP_DART(TutorialDarts[i])
|
||
ENDREPEAT
|
||
|
||
SET_CAM_ACTIVE(camDartGame, TRUE)
|
||
|
||
DO_SCREEN_FADE_IN(500)
|
||
|
||
RETURN TRUE
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
FUNC BOOL SHOULD_DARTS_LEVEL_HELP_SHOW(INT iNumGames, INT & iBitToSet)
|
||
|
||
// IF iNumGames >= 100
|
||
// IF NOT IS_BIT_SET(g_savedGlobals.sDartsData.iDartTimePlayed, gDARTS_LVL_UP5_SHWN)
|
||
// iBitToSet = gDARTS_LVL_UP5_SHWN
|
||
// RETURN TRUE
|
||
// ENDIF
|
||
// ELIF iNumGames >= 70
|
||
// IF NOT IS_BIT_SET(g_savedGlobals.sDartsData.iDartTimePlayed, gDARTS_LVL_UP4_SHWN)
|
||
// iBitToSet = gDARTS_LVL_UP4_SHWN
|
||
// RETURN TRUE
|
||
// ENDIF
|
||
// ELIF iNumGames >= 50
|
||
// IF NOT IS_BIT_SET(g_savedGlobals.sDartsData.iDartTimePlayed, gDARTS_LVL_UP3_SHWN)
|
||
// iBitToSet = gDARTS_LVL_UP3_SHWN
|
||
// RETURN TRUE
|
||
// ENDIF
|
||
// ELIF iNumGames >= 30
|
||
// IF NOT IS_BIT_SET(g_savedGlobals.sDartsData.iDartTimePlayed, gDARTS_LVL_UP2_SHWN)
|
||
// iBitToSet = gDARTS_LVL_UP2_SHWN
|
||
// RETURN TRUE
|
||
// ENDIF
|
||
// ELIF iNumGames >= 10
|
||
IF iNumGames >= 10
|
||
IF NOT IS_BIT_SET(g_savedGlobals.sDartsData.iDartTimePlayed, gDARTS_LVL_UP1_SHWN)
|
||
iBitToSet = gDARTS_LVL_UP1_SHWN
|
||
RETURN TRUE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
SCRIPT (DARTS_ARGS DartsArgs)
|
||
|
||
//Necessary variables
|
||
DART_GAME DartGame
|
||
DARTS_TUTORIAL_STAGE DartsTutorialStage
|
||
DARTS_PLAYER_POS DartsPlayerPositions
|
||
DARTS_STARTING_RETICLE_POS DartsInitReticlePos
|
||
DARTS_SCOREBOARD DartsSB
|
||
DARTS_UI DartsUI
|
||
|
||
END_SCREEN_DATASET DartsEndScreen
|
||
|
||
BOOL bPlayerQuitEarly
|
||
BOOL bUsedSetsLegs
|
||
BOOL bRequestGameSaid
|
||
BOOL bAcceptGameSaid
|
||
BOOL bCanGoToCleanup
|
||
|
||
INT iNameTemp
|
||
INT iSplashStage = 0
|
||
INT idz
|
||
|
||
FLOAT fStaminaPercentage
|
||
FLOAT fSteadyShotLength
|
||
// FLOAT fRotTemp
|
||
|
||
VECTOR vHickBar, vRockClub //, vLostHideout
|
||
VECTOR vTemp
|
||
// VECTOR vCamTemp
|
||
VECTOR scenePosition
|
||
VECTOR sceneRotation
|
||
|
||
STRING sPlayerFacialAnimClip
|
||
|
||
structTimer ThrowTimer
|
||
structTimer TutorialTimer
|
||
structTimer DialogTimer
|
||
|
||
PED_INDEX piNearbyPeds[20]
|
||
|
||
OBJECT_INDEX oiDartChallenge
|
||
|
||
sFacialDictPed = "facials@gen_female@variations@happy"
|
||
|
||
SWITCH GET_PLAYER_PED_ENUM(PLAYER_PED_ID())
|
||
CASE CHAR_MICHAEL
|
||
sFacialDictPlayer = "facials@p_m_zero@variations@happy"
|
||
BREAK
|
||
CASE CHAR_FRANKLIN
|
||
sFacialDictPlayer = "facials@p_m_one@variations@happy"
|
||
BREAK
|
||
CASE CHAR_TREVOR
|
||
sFacialDictPlayer = "facials@p_m_two@variations@happy"
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
sFacialClip[0] = "mood_happy_1"
|
||
sFacialClip[1] = "mood_happy_2"
|
||
sFacialClip[2] = "mood_happy_3"
|
||
|
||
sOutroWin[0] = "darts_outro_01_guy1"
|
||
sOutroWin[1] = "darts_outro_02_guy2"
|
||
sOutroWin[2] = "darts_outro_03_guy2"
|
||
|
||
sOutroLoss[0] = "darts_outro_01_guy2"
|
||
sOutroLoss[1] = "darts_outro_02_guy1"
|
||
sOutroLoss[2] = "darts_outro_03_guy1"
|
||
|
||
sOutroCam[0] = "darts_outro_01_cam"
|
||
sOutroCam[1] = "darts_outro_02_cam"
|
||
sOutroCam[2] = "darts_outro_03_cam"
|
||
|
||
piDartPlayers[0] = PLAYER_PED_ID()
|
||
|
||
bNewOpponent = TRUE
|
||
|
||
vHickBar = <<1992.293213,3050.582764,47.989731>>
|
||
vRockClub = <<-572.040649,294.195770,79.937401>>
|
||
|
||
SETUP_DARTS_PC_CONTROLS()
|
||
|
||
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
||
// IF GET_PLAYER_DISTANCE_FROM_LOCATION(vRockClub) < GET_PLAYER_DISTANCE_FROM_LOCATION(vHickBar)
|
||
// DartsLocation = DARTSLOCATION_ROCK_CLUB
|
||
// SWITCH GET_RANDOM_INT_IN_RANGE(0, 5)
|
||
// CASE 0
|
||
// modelOpponent = A_M_Y_VINEWOOD_01
|
||
// CDEBUG1LN(DEBUG_DARTS, "modelOpponent = A_M_Y_VINEWOOD_01")
|
||
// BREAK
|
||
// CASE 1
|
||
// modelOpponent = A_M_Y_STLAT_01
|
||
// CDEBUG1LN(DEBUG_DARTS, "modelOpponent = A_M_Y_VINEWOOD_01")
|
||
// BREAK
|
||
// CASE 2
|
||
// modelOpponent = A_M_Y_VINEWOOD_04
|
||
// CDEBUG1LN(DEBUG_DARTS, "modelOpponent = A_M_Y_VINEWOOD_01")
|
||
// BREAK
|
||
// CASE 3
|
||
// modelOpponent = A_M_Y_STWHI_02
|
||
// CDEBUG1LN(DEBUG_DARTS, "modelOpponent = A_M_Y_VINEWOOD_01")
|
||
// BREAK
|
||
// CASE 4
|
||
// modelOpponent = A_M_Y_VINEWOOD_03
|
||
// CDEBUG1LN(DEBUG_DARTS, "modelOpponent = A_M_Y_VINEWOOD_01")
|
||
// BREAK
|
||
// ENDSWITCH
|
||
// DartsLoc = ALOC_darts_rockClub
|
||
//
|
||
// CDEBUG1LN(DEBUG_DARTS, "Darts game started at Rock Club")
|
||
// ELSE
|
||
DartsLocation = DARTSLOCATION_HICK_BAR
|
||
SWITCH GET_RANDOM_INT_IN_RANGE(0, 2)
|
||
CASE 0
|
||
modelOpponent = A_F_M_SALTON_01
|
||
CDEBUG1LN(DEBUG_DARTS, "modelOpponent = A_F_M_SALTON_01")
|
||
BREAK
|
||
CASE 1
|
||
modelOpponent = A_F_O_SALTON_01
|
||
CDEBUG1LN(DEBUG_DARTS, "modelOpponent = A_F_O_SALTON_01")
|
||
BREAK
|
||
ENDSWITCH
|
||
DartsLoc = ALOC_darts_hickBar
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Darts game started at Hick Bar")
|
||
// ENDIF
|
||
|
||
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
||
//TASK_SWAP_WEAPON(PLAYER_PED_ID(), FALSE)
|
||
ENDIF
|
||
|
||
IF NOT DOES_ENTITY_EXIST(DartsArgs.oiDartBoard)
|
||
CDEBUG1LN(DEBUG_DARTS, "DartsArgs.oiDartBoard DOES NOT exist.")
|
||
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
||
// IF DartsLocation = DARTSLOCATION_LOST_HIDEOUT
|
||
// DartsArgs.vDartBoard = vLostHideout
|
||
// DartsArgs.fBoardHeading = -137.348129
|
||
IF DartsLocation = DARTSLOCATION_ROCK_CLUB
|
||
DartsArgs.vDartBoard = vRockClub
|
||
DartsArgs.fBoardHeading = -0.09
|
||
ELSE
|
||
DartsArgs.vDartBoard = vHickBar
|
||
DartsArgs.fBoardHeading = 57.783146
|
||
ENDIF
|
||
|
||
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(DartsArgs.vDartBoard, 5.0, PROP_DART_BD_CAB_01)
|
||
DartsArgs.oiDartBoard = GET_CLOSEST_OBJECT_OF_TYPE(DartsArgs.vDartBoard, 5.0, PROP_DART_BD_CAB_01)
|
||
GET_COORDS_AND_ROTATION_OF_CLOSEST_OBJECT_OF_TYPE(DartsArgs.vDartBoard, 5.0, PROP_DART_BD_CAB_01, DartsArgs.vDartBoard, vTemp, EULER_XYZ)
|
||
DartsArgs.fBoardHeading = vTemp.z
|
||
CDEBUG1LN(DEBUG_DARTS, "PROP_DART_BD_CAB_01 found in area.")
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "PROP_DART_BD_CAB_01 not found in area of Darts Args.")
|
||
ENDIF
|
||
ENDIF
|
||
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "DartsArgs.oiDartBoard DOES exist.")
|
||
vTemp = GET_ENTITY_COORDS(DartsArgs.oiDartBoard)
|
||
CDEBUG1LN(DEBUG_DARTS, "DartsArgs.oiDartBoard is located in ", vTemp)
|
||
CDEBUG1LN(DEBUG_DARTS, "DartsArgs.oiDartBoard is heading ", GET_ENTITY_HEADING(DartsArgs.oiDartBoard))
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "********** DartsArgs.vDartBoard", DartsArgs.vDartBoard, "**************")
|
||
CDEBUG1LN(DEBUG_DARTS, "********** DartsArgs.fBoardHeading", DartsArgs.fBoardHeading, "*************")
|
||
|
||
//Gets the friend for a friend activity
|
||
IF NOT IS_ENTITY_DEAD(FRIEND_A_PED_ID())
|
||
startActivity(DartsLoc)
|
||
IF IS_PED_IN_ANY_VEHICLE(FRIEND_A_PED_ID())
|
||
//SPECIAL_FUNCTION_DO_NOT_USE(FRIEND_A_PED_ID(), TRUE)
|
||
TASK_LEAVE_ANY_VEHICLE(FRIEND_A_PED_ID())
|
||
ENDIF
|
||
|
||
piDartPlayers[1] = FRIEND_A_PED_ID()
|
||
|
||
//tasking the friend to do nothing is sufficient for now.
|
||
//TASK_PAUSE(FRIEND_A_PED_ID(), -1)
|
||
CDEBUG1LN(DEBUG_DARTS, "[DARTS] starting friend activity")
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "[DARTS] friend not valid, using normal opponent")
|
||
SET_MISSION_FLAG(TRUE)
|
||
ENDIF
|
||
|
||
IF HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_REPEAT_PLAY)
|
||
//Cleanups
|
||
MISSION_FLOW_MISSION_FORCE_CLEANUP()
|
||
CLEANUP_DARTS_GAME(DartGame, DartsUI, DartsEndScreen)
|
||
ENDIF
|
||
|
||
//FORCE_CLEANUP_FLAG_SP_TO_MP
|
||
#IF IS_DEBUG_BUILD
|
||
ADD_WIDGETS(DebugBoard)
|
||
#ENDIF
|
||
|
||
//SET_PED_CURRENT_WEAPON_VISIBLE(PLAYER_PED_ID(), FALSE)
|
||
DISPLAY_AREA_NAME(FALSE)
|
||
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
||
DISABLE_CELLPHONE(TRUE)
|
||
|
||
// max steady shot length = 1320
|
||
iStaminaXP = GET_SP_PLAYER_PED_STAT_VALUE(GET_PLAYER_PED_ENUM(piDartPlayers[0]), PS_STAMINA)
|
||
CDEBUG1LN(DEBUG_DARTS, "stamina stat = ", iStaminaXP)
|
||
|
||
fStaminaPercentage = TO_FLOAT(iStaminaXP)/100
|
||
fSteadyShotLength = fStaminaPercentage * 1200
|
||
iSteadyShotLength = ROUND(fSteadyShotLength)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "steady shot = ", iSteadyShotLength)
|
||
IF iSteadyShotLength < 660
|
||
iSteadyShotLength = 660
|
||
CDEBUG1LN(DEBUG_DARTS, "steady shot readjusted to 660")
|
||
ENDIF
|
||
|
||
DISABLE_CHEAT(CHEAT_TYPE_ALL, TRUE)
|
||
|
||
WHILE (TRUE)
|
||
// main loop
|
||
WAIT(0)
|
||
|
||
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_ICON)
|
||
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
||
SET_HUD_COMPONENT_POSITION(NEW_HUD_SUBTITLE_TEXT, 0.0, -0.0375)
|
||
|
||
// debug builds only
|
||
#IF IS_DEBUG_BUILD
|
||
DO_DEBUG_PROCS(DebugBoard, DartGame, spriteDebug, siScoreBoardDebug, piDartPlayers)
|
||
|
||
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
|
||
CDEBUG1LN(DEBUG_DARTS, "Darts Script Debug Quit")
|
||
//bDartsNoSocialClub = TRUE
|
||
CLEANUP_DARTS_GAME(DartGame, DartsUI, DartsEndScreen)
|
||
ENDIF
|
||
|
||
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
|
||
CDEBUG1LN(DEBUG_DARTS, "Darts Script Debug Won")
|
||
//bDartsNoSocialClub = TRUE
|
||
GAME_WON(DartGame)
|
||
ENDIF
|
||
#ENDIF
|
||
|
||
// draw the scoreboard scaleform
|
||
//IF DartGame.Stage > STAGE_CHALLENGE AND DartGame.Stage < STAGE_FINISHED
|
||
IF bActivateScoreBoard AND DartGame.Stage < STAGE_FINISHED
|
||
//DRAW_SCALEFORM_MOVIE(DartsSB.siScoreBoard, 0.275, 0.3, 0.24, 0.5, 255, 255, 255, 0) //placeholder 2D scoreboard
|
||
DRAW_SCALEFORM_MOVIE_3D(DartsSB.siScoreBoard, DartsSB.vScoreBoardPos, DartsSB.vScoreBoardRot, DartsSB.vScoreBoardScale, DartsSB.vScoreBoardScale)
|
||
ENDIF
|
||
|
||
IF (IS_PED_INJURED(DartsArgs.piDartOpponent)
|
||
AND NOT DOES_ENTITY_EXIST(FRIEND_A_PED_ID()))
|
||
OR (DOES_ENTITY_EXIST(FRIEND_A_PED_ID())
|
||
AND IS_PED_INJURED(FRIEND_A_PED_ID()))
|
||
CDEBUG1LN(DEBUG_DARTS, "opponent died, cleaning up.")
|
||
CLEANUP_DARTS_GAME(DartGame, DartsUI, DartsEndScreen)
|
||
ENDIF
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[0])
|
||
|
||
SET_PED_RESET_FLAG(piDartPlayers[0], PRF_DisableAgitation, TRUE)
|
||
SET_PED_RESET_FLAG(piDartPlayers[0], PRF_CannotBeTargetedByAI, TRUE)
|
||
DISABLE_SELECTOR_THIS_FRAME()
|
||
|
||
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(PLAYER_CONTROL)
|
||
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(FRONTEND_CONTROL)
|
||
|
||
REPEAT GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), piNearbyPeds) idz
|
||
IF piNearbyPeds[idz] != piDartPlayers[1]
|
||
IF NOT IS_PED_INJURED(piNearbyPeds[idz])
|
||
SET_PED_RESET_FLAG(piNearbyPeds[idz], PRF_DisableTalk, TRUE)
|
||
//SET_PED_CONFIG_FLAG(piNearbyPeds[idz], PCF_CanBeAgitated, FALSE)
|
||
ENDIF
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
// run appropriate stage
|
||
SWITCH DartGame.Stage
|
||
CASE STAGE_PRE_INIT
|
||
CDEBUG1LN(DEBUG_DARTS, "Reached STAGE_PRE_INIT")
|
||
|
||
CLEAR_HELP()
|
||
|
||
INIT_BOARD(DartGame.DartsBoard, DartsArgs)
|
||
INIT_CAM(DartGame.DartsBoard.vDartBoard, DartGame.DartsBoard.fBoardHeading)
|
||
|
||
IF DOES_ENTITY_EXIST(DartGame.DartsBoard.oiDartBoard)
|
||
//ATTACH_CAM_TO_ENTITY(camZoomBoard, DartGame.DartsBoard.oiDartBoard, <<0.7792, -1.1380, 0.1814>>)
|
||
//POINT_CAM_AT_ENTITY(camZoomBoard, DartGame.DartsBoard.oiDartBoard, <<-0.9485, 1.2798, -0.2296>>)
|
||
|
||
vFPDartsPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(DartGame.DartsBoard.oiDartBoard, <<0.7792, -1.1380, 0.1814>>)
|
||
vFPDartsRot = << -7.9947, 0.0, DartGame.DartsBoard.fBoardHeading + 36.191757 >>
|
||
|
||
camZoomBoard = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, vFPDartsPos, vFPDartsRot)
|
||
SET_CAM_FOV(camZoomBoard, 30.0)
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "dartboard object does not exist!!")
|
||
ENDIF
|
||
|
||
SC_LEADERBOARD_CACHE_CLEAR_ALL()
|
||
CDEBUG1LN(DEBUG_DARTS, "cleared leaderboard cache")
|
||
|
||
SETTIMERA(0)
|
||
DartGame.Stage = STAGE_PRE_INIT_WAIT
|
||
|
||
BREAK
|
||
|
||
CASE STAGE_PRE_INIT_WAIT
|
||
IF TIMERA() > 500
|
||
AND NOT IS_PED_RAGDOLL(PLAYER_PED_ID())
|
||
CDEBUG1LN(DEBUG_DARTS, "Reached STAGE_PRE_INIT_WAIT")
|
||
|
||
CLEAR_AREA(DartsArgs.vDartBoard, 0.5, TRUE)
|
||
|
||
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
||
AND IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
|
||
CLEAR_SEQUENCE_TASK(siTemp)
|
||
OPEN_SEQUENCE_TASK(siTemp)
|
||
//failsafe if player gets on a bike before the control is turned off
|
||
TASK_LEAVE_ANY_VEHICLE(NULL)
|
||
//TASK_GO_STRAIGHT_TO_COORD(NULL, vInitLostHideoutPos, PEDMOVEBLENDRATIO_WALK)
|
||
CLOSE_SEQUENCE_TASK(siTemp)
|
||
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), siTemp)
|
||
|
||
ENDIF
|
||
|
||
vInitLostHideoutPos = vInitLostHideoutPos
|
||
|
||
DartGame.Stage = STAGE_INIT
|
||
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE STAGE_INIT
|
||
CDEBUG1LN(DEBUG_DARTS, "Reached STAGE_INIT")
|
||
|
||
//init variables
|
||
|
||
// CAM POS Offset
|
||
// vCamTemp = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(DartsArgs.oiDartBoard, <<1992.679, 3050.739, 47.660>>)
|
||
// CDEBUG1LN(DEBUG_DARTS, "TUTORIAL CAM OFFSET!!: ", vCamTemp)
|
||
// fRotTemp = GET_ENTITY_HEADING(DartsArgs.oiDartBoard) - 54.000
|
||
// CDEBUG1LN(DEBUG_DARTS, "rotation : ", fRotTemp)
|
||
|
||
INT i, j
|
||
REPEAT NUM_DART_PLAYERS i
|
||
REPEAT NUM_DART_TURNS j
|
||
INIT_DARTS(DartGame.Darts[i][j], i)
|
||
ENDREPEAT
|
||
ENDREPEAT
|
||
|
||
INT k
|
||
REPEAT NUM_DART_TURNS k
|
||
INIT_DARTS(DartGame.TutorialDarts[k], 0)
|
||
ENDREPEAT
|
||
|
||
DartsTutorialStage = TS_DOUBLE //TS_THROWING
|
||
|
||
INIT_SPRITE_RETICLE()
|
||
DARTS_INIT_SCOREBOARD(DartsSB, ENUM_TO_INT(DartsLocation), DartGame.DartsBoard.vDartBoard, DartGame.DartsBoard.fBoardHeading)
|
||
|
||
IF DOES_ENTITY_EXIST(DartGame.DartsBoard.oiDartBoard)
|
||
vTemp = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(DartGame.DartsBoard.oiDartBoard, DartsSB.vScoreBoardPos)
|
||
CDEBUG1LN(DEBUG_DARTS, "offset for scoreboard = ", vTemp)
|
||
ENDIF
|
||
|
||
//request streams
|
||
REQUEST_STREAMS(DartsSB, DartsUI)
|
||
REGISTER_SCRIPT_WITH_AUDIO()
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Finished Stage_init")
|
||
|
||
DartGame.Stage = STAGE_STREAMING
|
||
|
||
BREAK
|
||
|
||
CASE STAGE_STREAMING
|
||
//wait for all streams to load up before proceeding
|
||
IF HAVE_STREAMS_LOADED(DartsSB, DartsUI)
|
||
|
||
//create all necessary components
|
||
|
||
GET_WORLD_OFFSETS(DartGame.DartsBoard, DartsPlayerPositions, DartsInitReticlePos)
|
||
|
||
//writing the names on the chalkboard
|
||
|
||
eDartsPlayerOne = GET_PLAYER_PED_ENUM(piDartPlayers[0])
|
||
SWITCH eDartsPlayerOne
|
||
CASE CHAR_MICHAEL
|
||
sDartsPlayerOne = GET_DART_LOCAL_PLAYER_NAME("MICHAEL")
|
||
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_TUTORIAL_SHOWN)
|
||
sPlayerFacialAnimClip = "darts_ig_intro_player_0_face"
|
||
ELSE
|
||
sPlayerFacialAnimClip = "darts_ig_intro_alt1_player_0_face"
|
||
ENDIF
|
||
BREAK
|
||
CASE CHAR_FRANKLIN
|
||
sDartsPlayerOne = GET_DART_LOCAL_PLAYER_NAME("FRANKLIN")
|
||
bFranklin = TRUE
|
||
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_TUTORIAL_SHOWN)
|
||
sPlayerFacialAnimClip = "darts_ig_intro_player_1_face"
|
||
ELSE
|
||
sPlayerFacialAnimClip = "darts_ig_intro_alt1_player_1_face"
|
||
ENDIF
|
||
BREAK
|
||
CASE CHAR_TREVOR
|
||
sDartsPlayerOne = GET_DART_LOCAL_PLAYER_NAME("TREVOR")
|
||
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_TUTORIAL_SHOWN)
|
||
sPlayerFacialAnimClip = "darts_ig_intro_player_2_face"
|
||
ELSE
|
||
sPlayerFacialAnimClip = "darts_ig_intro_alt1_player_2_face"
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
IF NOT IS_ENTITY_DEAD(FRIEND_A_PED_ID())
|
||
// setting name for friend activity
|
||
eDartsPlayerTwo = GET_PLAYER_PED_ENUM(FRIEND_A_PED_ID())
|
||
IF eDartsPlayerTwo = NO_CHARACTER
|
||
eDartsPlayerTwo = GET_NPC_PED_ENUM(FRIEND_A_PED_ID())
|
||
ENDIF
|
||
SWITCH eDartsPlayerTwo
|
||
CASE CHAR_MICHAEL
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("MICHAEL")
|
||
BREAK
|
||
CASE CHAR_FRANKLIN
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("FRANKLIN")
|
||
BREAK
|
||
CASE CHAR_TREVOR
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("TREVOR")
|
||
BREAK
|
||
CASE CHAR_LAMAR
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("LAMAR")
|
||
SET_PED_COMPONENT_VARIATION(FRIEND_A_PED_ID(), PED_COMP_HAND, 2, 0)
|
||
BREAK
|
||
CASE CHAR_JIMMY
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("JIMMY")
|
||
BREAK
|
||
DEFAULT
|
||
sDartsPlayerTwo = "NEW_GUY"
|
||
BREAK
|
||
ENDSWITCH
|
||
CDEBUG1LN(DEBUG_DARTS, "Setting name for friend activity to ", sDartsPlayerTwo)
|
||
ELSE
|
||
// Setting random name for ped
|
||
iNameTemp = GET_RANDOM_INT_IN_RANGE(0, 200)
|
||
IF DartsLocation = DARTSLOCATION_ROCK_CLUB
|
||
IF iNameTemp < 51
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("RAYMOND")
|
||
iP2NameHash = HASH("RAYMOND")
|
||
ELIF iNameTemp < 101
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("JOHAN")
|
||
iP2NameHash = HASH("JOHAN")
|
||
ELIF iNameTemp < 151
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("STAN")
|
||
iP2NameHash = HASH("STAN")
|
||
ELSE
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("VINCE")
|
||
iP2NameHash = HASH("VINCE")
|
||
ENDIF
|
||
ELSE
|
||
IF iNameTemp < 51
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("KRISTY")
|
||
iP2NameHash = HASH("KRISTY")
|
||
ELIF iNameTemp < 101
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("MARLENE")
|
||
iP2NameHash = HASH("MARLENE")
|
||
ELIF iNameTemp < 151
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("LORIE")
|
||
iP2NameHash = HASH("LORIE")
|
||
ELSE
|
||
sDartsPlayerTwo = GET_DART_LOCAL_PLAYER_NAME("SHELLEY")
|
||
iP2NameHash = HASH("SHELLEY")
|
||
ENDIF
|
||
ENDIF
|
||
CDEBUG1LN(DEBUG_DARTS, "Setting name for non friend activity to ", sDartsPlayerTwo)
|
||
ENDIF
|
||
|
||
oiReticle = CREATE_OBJECT(modelReticleRegular, DartsInitReticlePos.vInitReticlePos)
|
||
|
||
DartGame.iDartGamesWon[0] = 0
|
||
DartGame.iDartGamesWon[1] = 0
|
||
|
||
//iDartStartTime = GET_GAME_TIMER()
|
||
|
||
DartGame.Stage = STAGE_SPAWNING
|
||
CDEBUG1LN(DEBUG_DARTS, "Finished Stage_streaming")
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE STAGE_SPAWNING
|
||
|
||
IF NOT IS_INTERPOLATING_TO_SCRIPT_CAMS()
|
||
|
||
oiDartChallenge = CREATE_OBJECT(PROP_DART_1, DartsInitReticlePos.vInitReticlePos)
|
||
|
||
INIT_PEDS(DartGame.DartsBoard.fBoardHeading, DartsPlayerPositions, piNearbyPeds, DartsArgs)
|
||
DARTS_ADD_NAMES(DartsSB, sDartsPlayerOne, sDartsPlayerTwo)
|
||
|
||
CLEAR_PED_TASKS(piDartPlayers[1])
|
||
|
||
camDartsSync = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0,0,0>>)
|
||
|
||
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
||
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Set vehicle save position, set player to walking")
|
||
ENDIF
|
||
|
||
//bVehicleSaved = ODDJOB_SAVE_VEHICLE_AND_WARP(VehicleSaveArgs, PICK_VECTOR((DartsLocation = DARTSLOCATION_ROCK_CLUB), << -572.0901, 268.8933, 81.7819 >>, << 1995.0244, 3055.6152, 46.0753 >>),
|
||
// TRUE,PICK_FLOAT((DartsLocation = DARTSLOCATION_ROCK_CLUB), 85.7488, 241.7907))
|
||
|
||
|
||
ADD_PED_FOR_DIALOGUE(DartGame.DartsConvo, 0, PLAYER_PED_ID(), sDartsPlayerOne)
|
||
|
||
IF IS_ENTITY_DEAD(FRIEND_A_PED_ID())
|
||
CDEBUG1LN(DEBUG_DARTS, "Adding dialogue for a non-friend activity")
|
||
|
||
//TODO: fix dialogue
|
||
IF DartsLocation = DARTSLOCATION_ROCK_CLUB
|
||
ADD_PED_FOR_DIALOGUE(DartGame.DartsConvo, 3, piDartPlayers[1], "DartsBillLost1")
|
||
ELSE
|
||
ADD_PED_FOR_DIALOGUE(DartGame.DartsConvo, 3, piDartPlayers[1], "DartsMelHick1")
|
||
ENDIF
|
||
|
||
iSplashStage = -1
|
||
ELSE
|
||
|
||
ADD_PED_FOR_DIALOGUE(DartGame.DartsConvo, 3, FRIEND_A_PED_ID(), sDartsPlayerTwo)
|
||
CDEBUG1LN(DEBUG_DARTS, "This is a friend activity, dialogue to be added later")
|
||
CDEBUG1LN(DEBUG_DARTS, "Also setting the intro scene to be skipped")
|
||
RESTART_TIMER_NOW(DialogTimer)
|
||
iSplashStage = 6
|
||
ENDIF
|
||
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_TUTORIAL_SHOWN)
|
||
iSplashStage = -1
|
||
ELSE
|
||
iSplashStage = 3
|
||
ENDIF
|
||
|
||
UPDATE_HIGHLIGHT(DartsSB, 0)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Finished STAGE_SPAWNING")
|
||
DartGame.Stage = STAGE_CHALLENGE
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE STAGE_CHALLENGE
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
AND IS_PED_ON_FOOT(piDartPlayers[0])
|
||
AND NOT IS_PED_IN_ANY_VEHICLE(piDartPlayers[0], TRUE)
|
||
AND IS_PED_ON_FOOT(piDartPlayers[1])
|
||
AND NOT IS_PED_IN_ANY_VEHICLE(piDartPlayers[1], TRUE)
|
||
|
||
bVehicleSaved = ODDJOB_SAVE_VEHICLE(VehicleSaveArgs)
|
||
|
||
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
|
||
AND GET_GAME_TIMER() >= iAllowSkipCutsceneTime + 1000
|
||
AND iSplashStage != 9
|
||
IF NOT IS_SCREEN_FADED_OUT()
|
||
AND NOT IS_SCREEN_FADING_OUT()
|
||
DO_SCREEN_FADE_OUT(500)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF IS_SCREEN_FADED_OUT()
|
||
AND iSplashStage != 9
|
||
HANG_UP_AND_PUT_AWAY_PHONE()
|
||
KILL_ANY_CONVERSATION()
|
||
iSplashStage = 9
|
||
ENDIF
|
||
|
||
SWITCH iSplashStage
|
||
// -------------- First game in a session -------------------------
|
||
CASE -1
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
iSceneId = CREATE_SYNCHRONIZED_SCENE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(DartsArgs.oiDartBoard, << 0.337842, -0.243051, -0.329731 >>),
|
||
<< 0, 0, GET_ENTITY_HEADING(DartsArgs.oiDartBoard) - 3.783146>>)
|
||
camDartsSync = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
|
||
PLAY_SYNCHRONIZED_CAM_ANIM(camDartsSync, iSceneId, "darts_ig_intro_cam", "mini@dartsintro")
|
||
SET_CAM_ACTIVE(camDartsSync, TRUE)
|
||
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[0])
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[1])
|
||
CLEAR_PED_TASKS_IMMEDIATELY(piDartPlayers[0])
|
||
CLEAR_PED_TASKS_IMMEDIATELY(piDartPlayers[1])
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[1], iSceneId, "mini@dartsintro", "darts_ig_intro_guy1", INSTANT_BLEND_IN, INSTANT_BLEND_OUT )
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[0], iSceneId, "mini@dartsintro", "darts_ig_intro_guy2", INSTANT_BLEND_IN, INSTANT_BLEND_OUT )
|
||
TASK_PLAY_ANIM(piDartPlayers[1], "mini@dartsintro", "darts_ig_intro_guy1_face", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
|
||
TASK_PLAY_ANIM(piDartPlayers[0], "mini@dartsintro", sPlayerFacialAnimClip, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
|
||
PLAY_SYNCHRONIZED_ENTITY_ANIM( oiDartChallenge, iSceneId, "darts_ig_intro_dart","mini@dartsintro" , INSTANT_BLEND_IN )
|
||
//PLAY_PED_AMBIENT_SPEECH(piDartPlayers[0], "DARTS_REQUEST_GAME")
|
||
START_TIMER_NOW_SAFE(DialogTimer)
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 0
|
||
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSceneId)
|
||
|
||
IF NOT bRequestGameSaid
|
||
IF GET_TIMER_IN_SECONDS_SAFE(DialogTimer) > 1.5
|
||
PLAY_PED_AMBIENT_SPEECH(piDartPlayers[0], "DARTS_REQUEST_GAME", SPEECH_PARAMS_FORCE_NORMAL)
|
||
bRequestGameSaid = TRUE
|
||
CANCEL_TIMER(DialogTimer)
|
||
ENDIF
|
||
ELSE
|
||
IF NOT IS_AMBIENT_SPEECH_PLAYING(piDartPlayers[0])
|
||
IF NOT bAcceptGameSaid
|
||
IF NOT IS_TIMER_STARTED(DialogTimer)
|
||
RESTART_TIMER_NOW(DialogTimer)
|
||
ELIF GET_TIMER_IN_SECONDS_SAFE(DialogTimer) > 0.5
|
||
PLAY_AGREE_AUDIO(piDartPlayers[1])
|
||
CANCEL_TIMER(DialogTimer)
|
||
bAcceptGameSaid = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
SWITCH iTurn
|
||
CASE 0
|
||
START_TIMER_NOW_SAFE(DialogTimer)
|
||
|
||
PRINT_HELP("DARTS_HOW_TO_2")
|
||
iTurn++
|
||
BREAK
|
||
|
||
CASE 1
|
||
// IF GET_TIMER_IN_SECONDS_SAFE(DialogTimer) > 1.25
|
||
// CANCEL_TIMER(DialogTimer)
|
||
// PLAY_PED_AMBIENT_SPEECH(piDartPlayers[0], "DARTS_REQUEST_GAME")
|
||
// ENDIF
|
||
|
||
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.25
|
||
START_TIMER_NOW_SAFE(DialogTimer)
|
||
PRINT_HELP("DARTS_HOW_TO_3")
|
||
iTurn++
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 2
|
||
// IF GET_TIMER_IN_SECONDS_SAFE(DialogTimer) > 1.25
|
||
// CANCEL_TIMER(DialogTimer)
|
||
// PLAY_AGREE_AUDIO(piDartPlayers[1])
|
||
// ENDIF
|
||
|
||
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.55
|
||
PRINT_HELP("DARTS_HOW_3A")
|
||
iTurn++
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 3
|
||
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.85
|
||
PRINT_HELP("DARTS_HOW_3A")
|
||
iTurn++
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.95
|
||
CDEBUG1LN(DEBUG_DARTS, "sync scene almost done, going to splash stage 1")
|
||
bActivateScoreBoard = TRUE
|
||
iSplashStage++
|
||
ELSE
|
||
IF (GET_GAME_TIMER() % 1000) < 50
|
||
CDEBUG1LN(DEBUG_DARTS, "sync scene phase = ", GET_SYNCHRONIZED_SCENE_PHASE(iSceneId))
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 1
|
||
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.99
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
DARTS_TUTORIAL_CAM(DartGame.DartsBoard.vDartBoard, DartGame.DartsBoard.fBoardHeading,
|
||
GET_TUTORIAL_CAM_COORD_OFFSET(TS_DOUBLE), GET_TUTORIAL_CAM_ROT_OFFSET(), 0, TRUE)
|
||
|
||
iTurn = 0
|
||
CLEAR_HELP()
|
||
|
||
DESTROY_CAM(camDartsSync)
|
||
CLEAR_PED_TASKS (piDartPlayers[0])
|
||
CLEAR_PED_TASKS (piDartPlayers[1])
|
||
STOP_SYNCHRONIZED_ENTITY_ANIM( oiDartChallenge, INSTANT_BLEND_OUT, FALSE)
|
||
|
||
DELETE_OBJECT(oiDartChallenge)
|
||
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_GREETING))
|
||
|
||
CANCEL_TIMER(DialogTimer)
|
||
DartGame.Stage = STAGE_SPLASH
|
||
iSplashStage = 0
|
||
ENDIF
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "sync scene is still running")
|
||
ENDIF
|
||
BREAK
|
||
|
||
// -------------- Succesive games in a session -------------------------
|
||
CASE 3
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
iSceneId = CREATE_SYNCHRONIZED_SCENE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(DartsArgs.oiDartBoard, << 0.337842, -0.243051, -0.329731 >>),
|
||
<< 0, 0, GET_ENTITY_HEADING(DartsArgs.oiDartBoard) - 3.783146>>)
|
||
camDartsSync = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
|
||
PLAY_SYNCHRONIZED_CAM_ANIM(camDartsSync, iSceneId, "darts_ig_intro_alt1_cam", "mini@dartsintro_alt1")
|
||
SET_CAM_ACTIVE(camDartsSync, TRUE)
|
||
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[0])
|
||
TASK_CLEAR_LOOK_AT(piDartPlayers[1])
|
||
CLEAR_PED_TASKS_IMMEDIATELY(piDartPlayers[0])
|
||
CLEAR_PED_TASKS_IMMEDIATELY(piDartPlayers[1])
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[1], iSceneId, "mini@dartsintro_alt1", "darts_ig_intro_alt1_guy1", INSTANT_BLEND_IN, INSTANT_BLEND_OUT )
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[0], iSceneId, "mini@dartsintro_alt1", "darts_ig_intro_alt1_guy2", INSTANT_BLEND_IN, INSTANT_BLEND_OUT )
|
||
TASK_PLAY_ANIM(piDartPlayers[1], "mini@dartsintro_alt1", "darts_ig_intro_alt1_guy1_face", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
|
||
TASK_PLAY_ANIM(piDartPlayers[0], "mini@dartsintro_alt1", sPlayerFacialAnimClip, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
|
||
PLAY_SYNCHRONIZED_ENTITY_ANIM( oiDartChallenge, iSceneId, "darts_ig_intro_alt1_dart","mini@dartsintro_alt1" , INSTANT_BLEND_IN )
|
||
START_TIMER_NOW_SAFE(DialogTimer)
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 4
|
||
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSceneId)
|
||
|
||
IF NOT bRequestGameSaid
|
||
IF GET_TIMER_IN_SECONDS_SAFE(DialogTimer) > 0.5
|
||
PLAY_PED_AMBIENT_SPEECH(piDartPlayers[0], "DARTS_REQUEST_GAME", SPEECH_PARAMS_FORCE_NORMAL)
|
||
bRequestGameSaid = TRUE
|
||
CANCEL_TIMER(DialogTimer)
|
||
ENDIF
|
||
ELSE
|
||
IF NOT IS_AMBIENT_SPEECH_PLAYING(piDartPlayers[0])
|
||
IF NOT bAcceptGameSaid
|
||
IF NOT IS_TIMER_STARTED(DialogTimer)
|
||
RESTART_TIMER_NOW(DialogTimer)
|
||
ELIF GET_TIMER_IN_SECONDS_SAFE(DialogTimer) > 0.25
|
||
PLAY_AGREE_AUDIO(piDartPlayers[1])
|
||
CANCEL_TIMER(DialogTimer)
|
||
bAcceptGameSaid = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
|
||
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.95
|
||
CDEBUG1LN(DEBUG_DARTS, "sync scene almost done, going to splash stage 1")
|
||
bActivateScoreBoard = TRUE
|
||
iSplashStage++
|
||
ELSE
|
||
IF (GET_GAME_TIMER() % 1000) < 50
|
||
CDEBUG1LN(DEBUG_DARTS, "sync scene phase = ", GET_SYNCHRONIZED_SCENE_PHASE(iSceneId))
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 5
|
||
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.99
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
|
||
DARTS_GAME_CAM()
|
||
|
||
DESTROY_CAM(camDartsSync)
|
||
CLEAR_PED_TASKS (piDartPlayers[0])
|
||
CLEAR_PED_TASKS (piDartPlayers[1])
|
||
STOP_SYNCHRONIZED_ENTITY_ANIM( oiDartChallenge, INSTANT_BLEND_OUT, FALSE)
|
||
|
||
DELETE_OBJECT(oiDartChallenge)
|
||
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_GREETING))
|
||
|
||
CANCEL_TIMER(DialogTimer)
|
||
DartGame.Stage = STAGE_SPLASH
|
||
iSplashStage = 0
|
||
ENDIF
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "sync scene is still running")
|
||
ENDIF
|
||
BREAK
|
||
|
||
// -------------- skipping the intro -------------------------
|
||
CASE 9
|
||
IF IS_SCREEN_FADED_OUT()
|
||
|
||
bActivateScoreBoard = TRUE
|
||
|
||
iTurn = 0
|
||
CLEAR_HELP()
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
SET_ENTITY_COORDS(piDartPlayers[0], DartsPlayerPositions.vDartPlayrPos)
|
||
SET_ENTITY_HEADING(piDartPlayers[0], DartGame.DartsBoard.fBoardHeading)
|
||
SET_ENTITY_COORDS(piDartPlayers[1], DartsPlayerPositions.vOpponentPos)
|
||
SET_ENTITY_HEADING(piDartPlayers[1], DartGame.DartsBoard.fBoardHeading)
|
||
CLEAR_PED_TASKS (piDartPlayers[0])
|
||
CLEAR_PED_TASKS (piDartPlayers[1])
|
||
ENDIF
|
||
|
||
DESTROY_CAM(camDartsSync)
|
||
STOP_SYNCHRONIZED_ENTITY_ANIM( oiDartChallenge, INSTANT_BLEND_OUT, FALSE)
|
||
DELETE_OBJECT(oiDartChallenge)
|
||
|
||
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_TUTORIAL_SHOWN)
|
||
DARTS_TUTORIAL_CAM(DartGame.DartsBoard.vDartBoard, DartGame.DartsBoard.fBoardHeading,
|
||
GET_TUTORIAL_CAM_COORD_OFFSET(TS_DOUBLE), GET_TUTORIAL_CAM_ROT_OFFSET(), 0, TRUE)
|
||
ELSE
|
||
DARTS_GAME_CAM()
|
||
ENDIF
|
||
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_GREETING))
|
||
|
||
CANCEL_TIMER(DialogTimer)
|
||
|
||
DO_SCREEN_FADE_IN(500)
|
||
|
||
DartGame.Stage = STAGE_SPLASH
|
||
iSplashStage = 0
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE STAGE_SPLASH
|
||
|
||
SWITCH iSplashStage
|
||
CASE 0
|
||
CDEBUG1LN(DEBUG_DARTS, "STAGE_SPLASH, setting up cam iSplashStage = ", iSplashStage)
|
||
|
||
iAllowSkipCutsceneTime = GET_GAME_TIMER()
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
SET_ENTITY_COORDS(piDartPlayers[0], DartsPlayerPositions.vDartPlayrPos)
|
||
SET_ENTITY_HEADING(piDartPlayers[0], DartGame.DartsBoard.fBoardHeading)
|
||
SET_ENTITY_COORDS(piDartPlayers[1], DartsPlayerPositions.vOpponentPos)
|
||
SET_ENTITY_HEADING(piDartPlayers[1], DartGame.DartsBoard.fBoardHeading)
|
||
ENDIF
|
||
|
||
//iSplashStage++ // skipping splash screen
|
||
START_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MENU))
|
||
|
||
iSplashStage = 0
|
||
CDEBUG1LN(DEBUG_DARTS, "Going to STAGE_TUTORIAL")
|
||
DartGame.Stage = STAGE_TUTORIAL
|
||
|
||
BREAK
|
||
CASE 1
|
||
// print splash
|
||
IF (GET_GAME_TIMER() - iAllowSkipCutsceneTime) > 1500
|
||
CDEBUG1LN(DEBUG_DARTS, "STAGE_SPLASH, printing splash iSplashStage = ", iSplashStage)
|
||
|
||
SET_SCALEFORM_BIG_MESSAGE(DartsUI.siBigMessage, "DARTS_TITLE")
|
||
//SET_SCALEFORM_BIG_MESSAGE(DartsUI.siBigMessage, "DARTS_TITLE", "", 4000, HUD_COLOUR_BLUELIGHT)
|
||
//SET_SCALEFORM_BIG_MESSAGE_WITH_NUMBER(DartsUI.siBigMessage, "DARTS_SETS", 301, "DARTS_SETD")
|
||
//SET_SCALEFORM_BIG_MESSAGE_WITH_NUMBER_IN_STRAPLINE(DartsUI.siBigMessage, "DARTS_TITLE", 301, "DARTS_CURRENT")
|
||
//SET_SCALEFORM_BIG_MESSAGE_WITH_STRING_IN_STRAPLINE(DartsUI.siBigMessage, "DARTS_TITLE", "DARTS_WOPP", "DARTS_RANK")
|
||
//SET_SCALEFORM_BIG_MESSAGE_WITH_PLAYER_NAME_IN_STRAPLINE(DartsUI.siBigMessage, "DARTS_TITLE", "DARTS_FIRST", GET_PLAYER_NAME(PLAYER_ID()))
|
||
CDEBUG1LN(DEBUG_DARTS, "STAGE_SPLASH, player name is = ", GET_PLAYER_NAME(PLAYER_ID()))
|
||
|
||
iSplashStage++
|
||
//ENDIF
|
||
ENDIF
|
||
BREAK
|
||
CASE 2
|
||
|
||
IF NOT UPDATE_SCALEFORM_BIG_MESSAGE(DartsUI.siBigMessage, TRUE)
|
||
CDEBUG1LN(DEBUG_DARTS, "STAGE_SPLASH, proceeding iSplashStage = ", iSplashStage)
|
||
|
||
START_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MENU))
|
||
|
||
iSplashStage = 0
|
||
CDEBUG1LN(DEBUG_DARTS, "Finished STAGE_TUTORIAL")
|
||
DartGame.Stage = STAGE_TUTORIAL
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
BREAK
|
||
|
||
CASE STAGE_TUTORIAL
|
||
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_TUTORIAL_SHOWN) //g_bDartsTutorialShown
|
||
IF DARTS_TUTORIAL(DartsTutorialStage, DartGame.DartsBoard, DartGame.AIBrain,
|
||
DartGame.TurnStage, DartGame.TutorialDarts, TutorialTimer)//DartGame)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "FINISHED STAGE_TUTORIAL")
|
||
|
||
SET_BIT(g_iDartsTutorialFlags, gDARTS_TUTORIAL_SHOWN)
|
||
|
||
DartGame.Stage = STAGE_INIT_MENU
|
||
ENDIF
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "TUTORIAL ALREADY SHOWN, SKIPPING")
|
||
//SET_CAM_ACTIVE_WITH_INTERP(camDartGame, camTutorial, 1500)
|
||
SET_CAM_ACTIVE(camDartGame, TRUE)
|
||
|
||
DartGame.Stage = STAGE_INIT_MENU
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE STAGE_INIT_MENU
|
||
|
||
IF IS_SCREEN_FADED_OUT()
|
||
DO_SCREEN_FADE_IN(500)
|
||
ENDIF
|
||
|
||
SWITCH iSplashStage
|
||
CASE 0
|
||
IF NOT DOES_ENTITY_EXIST(FRIEND_A_PED_ID())
|
||
IF NOT IS_BIT_SET(g_iDartsTutorialFlags, gDARTS_ALT_START_POS)
|
||
SET_BIT(g_iDartsTutorialFlags, gDARTS_ALT_START_POS)
|
||
ELSE
|
||
CLEAR_BIT(g_iDartsTutorialFlags, gDARTS_ALT_START_POS)
|
||
ENDIF
|
||
|
||
DARTS_SETUP_START_MENU(DartsUI)//, TRUE)
|
||
|
||
iSplashStage++
|
||
ELSE
|
||
DARTS_SETUP_START_MENU(DartsUI)//, TRUE)
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
CASE 1
|
||
|
||
//Check if the aspect ratio has changed during the minigame
|
||
IF IS_PC_VERSION()
|
||
IF fOldAspectRatio <> GET_ASPECT_RATIO(FALSE)
|
||
fOldAspectRatio = GET_ASPECT_RATIO(FALSE)
|
||
SET_CAM_FOV(camDartGame,GET_CAM_FOV_AR_BASED(fOldAspectRatio))
|
||
SET_CAM_FOV(camDartGame2,GET_CAM_FOV_AR_BASED(fOldAspectRatio))
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF DARTS_UPDATE_START_MENU(DartsUI, DartGame.iNumDartLegs, DartGame.iNumDartSets)
|
||
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MENU))
|
||
|
||
IF DartGame.iNumDartLegs > 0
|
||
CDEBUG1LN(DEBUG_DARTS, "INIT_MENU - legs = ", DartGame.iNumDartLegs)
|
||
CDEBUG1LN(DEBUG_DARTS, "INIT_MENU - sets = ", DartGame.iNumDartSets)
|
||
iSplashStage = 0
|
||
|
||
IF DartGame.iNumDartLegs > 1
|
||
OR DartGame.iNumDartSets > 1
|
||
UPDATE_SB_SETS_LEGS(DartsSB, 0,0,0,0)
|
||
bUsedSetsLegs = TRUE
|
||
ENDIF
|
||
|
||
CLEANUP_MENU_ASSETS()
|
||
|
||
DartGame.Stage = STAGE_STARTING
|
||
|
||
ELIF DartGame.iNumDartLegs < 0
|
||
DartGame.Stage = STAGE_CLEANUP
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
BREAK
|
||
|
||
CASE STAGE_STARTING
|
||
CDEBUG1LN(DEBUG_DARTS, "Got to STAGE_START")
|
||
|
||
IF DO_START_GAME(DartGame, DartsSB, DartsUI)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Re - Calculating difficulty level")
|
||
|
||
DartGame.AIBrain.eDifficulty = DARTSDIFF_HARD
|
||
|
||
IF g_savedGlobals.sDartsData.iTotalDartGames >= 5
|
||
AND g_savedGlobals.sDartsData.fWinPct >= 0.80
|
||
DartGame.AIBrain.eDifficulty = DARTSDIFF_VERY_HARD
|
||
CDEBUG1LN(DEBUG_DARTS, "setting difficulty to VERY HARD")
|
||
ELIF g_savedGlobals.sDartsData.iTotalDartGames >= 3
|
||
AND g_savedGlobals.sDartsData.fWinPct >= 0.66
|
||
DartGame.AIBrain.eDifficulty = DARTSDIFF_HARD
|
||
CDEBUG1LN(DEBUG_DARTS, "setting difficulty to HARD")
|
||
ELSE
|
||
DartGame.AIBrain.eDifficulty = DARTSDIFF_NORMAL
|
||
CDEBUG1LN(DEBUG_DARTS, "setting difficulty to MEDIUM")
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Re - Calculating wobbles")
|
||
|
||
IF SHOULD_DARTS_LEVEL_HELP_SHOW(g_savedGlobals.sDartsData.iTotalDartGames, iLevelBit)
|
||
CDEBUG1LN(DEBUG_DARTS, "show the level up prompt")
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_SHOW_LEVEL_UP, TRUE)
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "no level up prompt to show")
|
||
ENDIF
|
||
|
||
fScaledWobble = GET_WOBBLE_LEVEL(g_savedGlobals.sDartsData.iTotalDartGames)
|
||
fScaledRealWobble = GET_REAL_WOBBLE_LEVEL(g_savedGlobals.sDartsData.iTotalDartGames)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "total darts games = ", g_savedGlobals.sDartsData.iTotalDartGames)
|
||
CDEBUG1LN(DEBUG_DARTS, "scaled wobble = ", fScaledWobble)
|
||
CDEBUG1LN(DEBUG_DARTS, "scaled real wobble = ", fScaledRealWobble)
|
||
|
||
fWobbleFactor = fScaledWobble
|
||
fRealWobFactor = fScaledRealWobble
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, "Going to STAGE_IN_PROGRESS")
|
||
|
||
DartsStats[DARTS_SCLB_STAT_NUM_MATCHES]++
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
CLEAR_PED_TASKS_IMMEDIATELY(piDartPlayers[1])
|
||
SET_ENTITY_COORDS(piDartPlayers[1], DartsPlayerPositions.vOpponentPos)
|
||
SET_ENTITY_HEADING(piDartPlayers[1], DartGame.DartsBoard.fBoardHeading)
|
||
ENDIF
|
||
|
||
IF IS_TIMER_STARTED(ThrowTimer)
|
||
CANCEL_TIMER(ThrowTimer)
|
||
ENDIF
|
||
|
||
START_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MATCH))
|
||
|
||
PLAY_BOAST_AUDIO(piDartPlayers[1])
|
||
|
||
DartGame.Stage = STAGE_IN_PROGRESS
|
||
DartGame.TurnStage = DPS_AIM
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE STAGE_IN_PROGRESS
|
||
//Check if the aspect ratio has changed during the minigame
|
||
IF IS_PC_VERSION()
|
||
IF fOldAspectRatio <> GET_ASPECT_RATIO(FALSE)
|
||
fOldAspectRatio = GET_ASPECT_RATIO(FALSE)
|
||
SET_CAM_FOV(camDartGame,GET_CAM_FOV_AR_BASED(fOldAspectRatio))
|
||
SET_CAM_FOV(camDartGame2,GET_CAM_FOV_AR_BASED(fOldAspectRatio))
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// doing outro streams during gameplay to speed up start time
|
||
IF NOT bOutroRequested
|
||
REQUEST_ANIM_DICT("mini@dartsoutro")
|
||
bOutroRequested = TRUE
|
||
ENDIF
|
||
IF NOT bOutroStreamed
|
||
IF bOutroRequested
|
||
IF NOT HAS_ANIM_DICT_LOADED("mini@dartsoutro")
|
||
CDEBUG1LN(DEBUG_DARTS, "streaming outro anims")
|
||
ELSE
|
||
bOutroStreamed = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
//game loop until a winner is decided
|
||
DO_IN_PROGRESS(DartGame, DartsInitReticlePos, DartsSB, DartsUI, ThrowTimer)//, DartsLocation)
|
||
BREAK
|
||
|
||
CASE STAGE_GAME_TRANSITION
|
||
|
||
SWITCH iSplashStage
|
||
CASE 0
|
||
IF GET_TIMER_IN_SECONDS_SAFE(DartGame.miscTimer) > 0.5
|
||
CLEAR_HELP()
|
||
CLEAR_PRINTS()
|
||
|
||
//ANOTHER_GAME_CAM_MP(PLAYER_PED_ID())
|
||
ANOTHER_GAME_CAM_SETS_LEGS(PLAYER_PED_ID())
|
||
|
||
UPDATE_SB_SETS_LEGS(DartsSB, DartGame.iDartSetsWon[0], DartGame.iDartSetsWon[1], DartGame.iDartGamesWon[0], DartGame.iDartGamesWon[1])
|
||
|
||
INT idx, idy
|
||
REPEAT NUM_DART_PLAYERS idx
|
||
REPEAT NUM_DART_TURNS idy
|
||
RESET_DART(DartGame.Darts[idx][idy])
|
||
ENDREPEAT
|
||
|
||
DARTS_CLEAR_SCORES(DartsSB, idx)
|
||
ENDREPEAT
|
||
|
||
//big message here
|
||
IF DartGame.bSetJustWon
|
||
IF DartGame.bDartWinner
|
||
SET_SHARD_BIG_MESSAGE(DartsUI.siMidMessage, "DARTS_WINNER", "DARTS_SETW", DEFAULT, SHARD_MESSAGE_MIDSIZED, HUD_COLOUR_YELLOW)
|
||
ELSE
|
||
SET_SHARD_BIG_MESSAGE(DartsUI.siMidMessage, "DARTS_LOSER", "DARTS_SETL", DEFAULT, SHARD_MESSAGE_MIDSIZED, HUD_COLOUR_RED)
|
||
ENDIF
|
||
DartGame.bSetJustWon = FALSE
|
||
ELSE
|
||
IF DartGame.bDartWinner
|
||
SET_SHARD_BIG_MESSAGE(DartsUI.siMidMessage, "DARTS_WINNER", "DARTS_LEGW", DEFAULT, SHARD_MESSAGE_MIDSIZED, HUD_COLOUR_YELLOW)
|
||
ELSE
|
||
SET_SHARD_BIG_MESSAGE(DartsUI.siMidMessage, "DARTS_LOSER", "DARTS_LEGL", DEFAULT, SHARD_MESSAGE_MIDSIZED, HUD_COLOUR_RED)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
INT iWhichOutro
|
||
|
||
FLOAT fResolution
|
||
fResolution = GET_ASPECT_RATIO(TRUE)
|
||
CDEBUG1LN(DEBUG_DARTS, " fResolution = ", fResolution)
|
||
|
||
IF fResolution > 2.0
|
||
CDEBUG1LN(DEBUG_DARTS, " resolution is eyefinity")
|
||
scenePosition = << 1992.29407, 3047.57690, 46.21517 >>
|
||
sceneRotation = << 0.000, 0.000, 138.740 >>
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "resolution is not eyefinity")
|
||
scenePosition = << 1992.33569, 3047.92432, 46.21517 >>
|
||
sceneRotation = << 0.000, 0.000, 136.740 >>
|
||
ENDIF
|
||
|
||
iWhichOutro = GET_WHICH_DARTS_OUTRO() //GET_RANDOM_INT_IN_RANGE(0, iAnimLimit)
|
||
|
||
CDEBUG1LN(DEBUG_DARTS, " iWhichOutro = ", iWhichOutro)
|
||
|
||
iSceneID = CREATE_SYNCHRONIZED_SCENE(scenePosition, sceneRotation)
|
||
camDartsSync = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
|
||
PLAY_SYNCHRONIZED_CAM_ANIM(camDartsSync, iSceneID, sOutroCam[iWhichOutro], "mini@dartsoutro")
|
||
SET_CAM_ACTIVE(camDartsSync, TRUE)
|
||
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[0])
|
||
AND NOT IS_PED_INJURED(piDartPlayers[1])
|
||
IF DartGame.bDartWinner
|
||
BOOL bFirstGame
|
||
IF (DartGame.iDartSBGamesWon[0] + DartGame.iDartSBGamesWon[1]) = 1
|
||
bFirstGame = TRUE
|
||
ELSE
|
||
bFirstGame = FALSE
|
||
ENDIF
|
||
|
||
PLAY_SOUND_FRONTEND (-1, "TENNIS_POINT_WON", "HUD_AWARDS")
|
||
|
||
PLAY_WIN_AUDIO(piDartPlayers, bFirstGame)
|
||
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[0], iSceneID, "mini@dartsoutro", sOutroWin[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[1], iSceneID, "mini@dartsoutro", sOutroLoss[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_PLAY_ANIM(PLAYER_PED_ID(), sFacialDictPlayer, sFacialClip[GET_RANDOM_INT_IN_RANGE(0, 3)], SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_SECONDARY)
|
||
ELSE
|
||
PLAY_SOUND_FRONTEND (-1, "OTHER_TEXT", "HUD_AWARDS")
|
||
|
||
PLAY_LOSS_AUDIO(piDartPlayers)
|
||
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[1], iSceneID, "mini@dartsoutro", sOutroWin[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_SYNCHRONIZED_SCENE (piDartPlayers[0], iSceneID, "mini@dartsoutro", sOutroLoss[iWhichOutro], INSTANT_BLEND_IN, WALK_BLEND_OUT )
|
||
TASK_PLAY_ANIM(piDartPlayers[1], sFacialDictPed, sFacialClip[GET_RANDOM_INT_IN_RANGE(0, 3)], SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_SECONDARY)
|
||
ENDIF
|
||
ENDIF
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 1
|
||
IF NOT UPDATE_SHARD_BIG_MESSAGE(DartsUI.siMidMessage, TRUE)
|
||
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE 2
|
||
CANCEL_TIMER(DartGame.miscTimer)
|
||
bGameOverSpeechPlayed = FALSE
|
||
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_COMPLETE))
|
||
|
||
DARTS_GAME_CAM()
|
||
|
||
IF DOES_CAM_EXIST(camDartsSync)
|
||
DESTROY_CAM(camDartsSync)
|
||
ENDIF
|
||
|
||
iSplashStage = 0
|
||
DartGame.Stage = STAGE_STARTING
|
||
BREAK
|
||
|
||
ENDSWITCH
|
||
BREAK
|
||
|
||
CASE STAGE_GAME_END
|
||
|
||
IF GET_TIMER_IN_SECONDS_SAFE(DartGame.miscTimer) > 0.92 //0.75
|
||
REPLAY_GAME_LOOP(DartGame, DartsUI, DartsSB, DartsEndScreen, bUsedSetsLegs)
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE STAGE_FINISHED //game has ended
|
||
|
||
//Render the pass screen, Check to see if we can cleanup when done
|
||
bCanGoToCleanup = RENDER_ENDSCREEN(dartsEndScreen)
|
||
|
||
IF NOT IS_ENTITY_DEAD(FRIEND_A_PED_ID())
|
||
CDEBUG1LN(DEBUG_DARTS, "on friend activity, going straight to cleanup")
|
||
CLEAR_PED_TASKS(piDartPlayers[1])
|
||
DartGame.Stage = STAGE_CLEANUP
|
||
ENDIF
|
||
|
||
SWITCH iSplashStage
|
||
CASE 0
|
||
CLEAR_PED_TASKS(piDartPlayers[0])
|
||
CDEBUG1LN(DEBUG_DARTS, "Got to STAGE_FINISHED, getting ready to up")
|
||
|
||
IF NOT (bInSyncCam)
|
||
CDEBUG1LN(DEBUG_DARTS, "just killing all cams")
|
||
RENDER_SCRIPT_CAMS(FALSE, bInSyncCam)
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_DARTS, "using catch up cam")
|
||
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
||
ENDIF
|
||
|
||
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
||
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
||
|
||
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
||
|
||
CLEAR_PRINTS()
|
||
|
||
TASK_LOOK_AT_ENTITY(piDartPlayers[0], piDartPlayers[1], 5000, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
|
||
|
||
RESTART_TIMER_NOW(DialogTimer)
|
||
iSplashStage++
|
||
BREAK
|
||
CASE 1
|
||
IF GET_TIMER_IN_SECONDS(DialogTimer) > 0.1 //1.0
|
||
IF NOT bPlayerQuitEarly
|
||
//PLAY_PED_AMBIENT_SPEECH(piDartPlayers[0], "GAME_GOOD_OTHER") // add this ambient speech when it's ready
|
||
ENDIF
|
||
|
||
RESTART_TIMER_NOW(DialogTimer)
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
CASE 2
|
||
IF GET_TIMER_IN_SECONDS(DialogTimer) > 0.3
|
||
|
||
IF NOT IS_PED_INJURED(piDartPlayers[1])
|
||
IF NOT bPlayerQuitEarly
|
||
PLAY_DARTS_SPEECH(piDartPlayers[0], "GENERIC_THANKS", TRUE, SPEECH_PARAMS_FORCE_FRONTEND)
|
||
//PLAY_DARTS_SPEECH(piDartPlayers[1], "GENERIC_THANKS", FALSE, SPEECH_PARAMS_FORCE_FRONTEND)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
RESTART_TIMER_NOW(DialogTimer)
|
||
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
CASE 3
|
||
IF bCanGoToCleanup OR bPlayerQuitEarly
|
||
DartGame.Stage = STAGE_CLEANUP
|
||
iSplashStage++
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
BREAK
|
||
|
||
CASE STAGE_PLAYER_QUIT
|
||
DARTS_QUIT_UI(DartsUI)
|
||
|
||
IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
||
//OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
||
PLAY_EARLY_QUIT_AUDIO(piDartPlayers[1])
|
||
CDEBUG1LN(DEBUG_DARTS, "Player chose to Quit")
|
||
DartsResult = AR_playerQuit
|
||
|
||
bPlayerQuitEarly = TRUE
|
||
|
||
IF IS_AUDIO_SCENE_ACTIVE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MATCH))
|
||
STOP_AUDIO_SCENE(GET_DARTS_RAVE_SCENE(DARTSRAVE_MATCH))
|
||
ENDIF
|
||
|
||
DartGame.Stage = STAGE_FINISHED
|
||
ENDIF
|
||
|
||
IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
||
//OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
||
CDEBUG1LN(DEBUG_DARTS, "Player chose to Resume")
|
||
IF DartGame.TurnStage = DPS_AIM
|
||
CDEBUG1LN(DEBUG_DARTS, "Re randomizing reticle")
|
||
bInitReticle = FALSE
|
||
ENDIF
|
||
|
||
DARTS_SET_UI_FLAG(DartsUI.iFlags, DARTS_UIFLAGS_SETUP_QUITUI, FALSE)
|
||
DartGame.Stage = STAGE_IN_PROGRESS
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE STAGE_CLEANUP
|
||
CDEBUG1LN(DEBUG_DARTS, "Got to STAGE_CLEANUP, getting ready to up")
|
||
CLEANUP_DARTS_GAME(DartGame, DartsUI, DartsEndScreen)
|
||
BREAK
|
||
ENDSWITCH
|
||
ENDIF
|
||
ENDWHILE
|
||
ENDSCRIPT
|
||
|