Files
2025-09-29 00:52:08 +02:00

650 lines
17 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_misc.sch"
USING "commands_script.sch"
USING "commands_pad.sch"
USING "cellphone_public.sch"
USING "cellphone_private.sch"
USING "dialogue_public.sch"
USING "player_ped_public.sch"
USING "stack_sizes.sch"
USING "mission_repeat_public.sch"
USING "mission_stat_public.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : appVLSI.sc
// AUTHOR : Steve T
// DESCRIPTION : Used to launch hacking app from cellphone whilst displaying a
// : a scaleform loading screen.
//
//
//
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//Notes:
// AppDummyApp0 used as ENUM reference
// Launch currently voiced in Cellphone_FLASHHAND
/*
IF SelectedAppIndex = ENUM_TO_INT (AppDummyApp0)
b_AppLaunchVoided = TRUE
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("CELLPHONE_FH - Circuit breaker has no actual script association. No script requested or launched.")
cdPrintstring("CELLPHONE_FH - Setting fake Circuit Breaker launch global g_HackingAppHasBeenLaunched to TRUE.")
cdPrintnl()
#endif
g_HackingAppHasBeenLaunched = TRUE
ENDIF
*/
//Fill_App_Sheet (AppDummyApp0, "CELL_CIRCBREAK", 8, "DummyHackScrp", 54, 1, App_O1_UNLOCKED, App_O2_LOCKED, App_O3_LOCKED) in Cellphone_PRIVATE sets up app sheet details.
BOOL b_InitialVLSISetup = FALSE
ENUM eHack_Stage
HS_INITIALISE,
HS_WAITING_FOR_ACTIVATE,
HS_UNLOCKING,
HS_POST_UNLOCK_PAUSE
ENDENUM
eHack_Stage HackStage
PROC Set_Up_Test_VLSI_App()
/*
//Just testing with trackify methods.
BEGIN_SCALEFORM_MOVIE_METHOD (SF_MovieIndex, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (23) //System
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0) //System
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (100)//(FLOOR(10.0)) //The lower this number the further away the target will be on the radar.
IF IS_BIT_SET (BitSet_CellphoneDisplay_Continued, g_BSC_SKIP_TRACKIFY_LOADING_SCREEN)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (TRUE) //Skips loading screen.
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (FALSE) //Show loading screen.
ENDIF
IF IS_BIT_SET (BitSet_CellphoneDisplay_Continued, g_BSC_HIDE_TRACKIFY_TARGET_ARROW)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (FALSE) //Hide arrow on target blip.
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (TRUE) //Show arrow on target blip.
ENDIF
END_SCALEFORM_MOVIE_METHOD()
*/
//Should be something like this:
/*
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER (SF_MovieIndex, "DISPLAY_VIEW", 23, TO_FLOAT(1))
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex, "SHOW_HACKING_APP")
BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_101")
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER (SF_MovieIndex, "DISPLAY_VIEW", 23, TO_FLOAT(1))
*/
//Temp routine.
IF HackStage = HS_INITIALISE
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("AppVLSI - Requested DLC_MPHEIST/HEIST_HACK_SNAKE soundbank.")
cdPrintnl()
#endif
REQUEST_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_HACK_SNAKE")
WHILE REQUEST_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_HACK_SNAKE") = FALSE
WAIT(0)
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("AppVLSI - Waiting on DLC_MPHEIST/HEIST_HACK_SNAKE soundbank to load...")
cdPrintnl()
#endif
ENDWHILE
//New scaleform routine that uses Trackify Loading Screen enum to manipulate hacking screen.
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY", 23)
BEGIN_SCALEFORM_MOVIE_METHOD (SF_MovieIndex, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (23) //System
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0) //System
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (-99) //Negative angle removes target.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (100)//(FLOOR(10.0)) //The lower this number the further away the target will be on the radar.
//Updated because of Trackify changes which mean loading screens take an enum rather than a bool.
//LOADING_SCREEN_TYPE_HACKING = 2
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (FALSE) //Hide arrow on target blip.
IF IS_BIT_SET (BitSet_CellphoneDisplay_Third, g_BSTHIRD_DISPLAY_TRACKIFY_RELATIVE_HEIGHT)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT (0.0)
ENDIF
END_SCALEFORM_MOVIE_METHOD()
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER (SF_MovieIndex, "DISPLAY_VIEW", 23, TO_FLOAT(1))
HackStage = HS_WAITING_FOR_ACTIVATE
ELSE
IF HackStage = HS_WAITING_FOR_ACTIVATE
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY", 23)
//New scaleform routine that uses Trackify Loading Screen enum to manipulate hacking screen.
BEGIN_SCALEFORM_MOVIE_METHOD (SF_MovieIndex, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (23) //System
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0) //System
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (-99) //Negative angle removes target.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (100)//(FLOOR(10.0)) //The lower this number the further away the target will be on the radar.
//Updated because of Trackify changes which mean loading screens take an enum rather than a bool.
//LOADING_SCREEN_TYPE_HACKING_ACTIVE = 3
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (3)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (FALSE) //Hide arrow on target blip.
IF IS_BIT_SET (BitSet_CellphoneDisplay_Third, g_BSTHIRD_DISPLAY_TRACKIFY_RELATIVE_HEIGHT)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT (0.0)
ENDIF
END_SCALEFORM_MOVIE_METHOD()
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER (SF_MovieIndex, "DISPLAY_VIEW", 23, TO_FLOAT(1))
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("AppVLSI - Updating Hack screen to UNLOCKING.")
cdPrintnl()
#endif
HackStage = HS_UNLOCKING
ENDIF
ENDIF
ENDPROC
PROC Set_Up_VLSI_Buttons()
IF g_b_ToggleButtonLabels
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 1,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_201") //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_213") //"NO" - Negative
ELSE
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 1,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"NO" - Negative
ENDIF
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_OTHER, 0,
1, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"Error!" - Other
CLEAR_BIT (BitSet_CellphoneDisplay, g_BS_OTHER_OPTION_IS_DISPLAYED)
ENDPROC
PROC Set_Up_VLSI_Buttons_Unlocking()
IF g_b_ToggleButtonLabels
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 0,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_201") //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_213") //"NO" - Negative
ELSE
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 0,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"NO" - Negative
ENDIF
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_OTHER, 0,
1, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"Error!" - Other
CLEAR_BIT (BitSet_CellphoneDisplay, g_BS_OTHER_OPTION_IS_DISPLAYED)
ENDPROC
PROC Cleanup_and_Terminate()
RELEASE_NAMED_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_HACK_SNAKE")
#if IS_DEBUG_BUILD
PRINTNL()
PRINTSTRING ("AppVLSI - appVLSI exiting normally and removing soundbank...")
PRINTNL()
cdPrintnl()
cdPrintstring ("AppVLSI - S_P_D appVLSI exiting normally and removing soundbank...")
cdPrintnl()
#endif
TERMINATE_THIS_THREAD()
ENDPROC
SCRIPT
//Ensure this script persists during network game
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
HackStage = HS_INITIALISE
IF b_InitialVLSISetup = FALSE
Set_Up_Test_VLSI_App()
Set_Up_VLSI_Buttons()
b_InitialVLSISetup = TRUE
ENDIF
WHILE TRUE
WAIT(0)
IF g_Cellphone.PhoneDS <> PDS_ONGOING_CALL //i.e a phonecall is not attempting to get through to the player.
SWITCH g_Cellphone.PhoneDS
CASE PDS_RUNNINGAPP
//We need to set this critical bool up:
//g_HackingAppHasBeenLaunched = TRUE
//after an appVLSI loading screen, to let Colin C's stuff know that his minigame should be launched.
//Then CLEANUP_AND_TERMINATE?
IF HackStage = HS_WAITING_FOR_ACTIVATE
IF Is_Phone_Control_Just_Pressed (FRONTEND_CONTROL, INT_TO_ENUM (CONTROL_ACTION, PHONE_POSITIVE_INPUT))
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("App VLSI - Positive button pressed during wait phase. Proceeding to UNLOCK stage.")
cdPrintnl()
#endif
//Play_Select_Beep()
PLAY_SOUND_FRONTEND(-1, "Lester_Laugh_Phone", "DLC_HEIST_HACKING_SNAKE_SOUNDS")
g_InputButtonJustPressed = TRUE
Set_Up_Test_VLSI_App()
Set_Up_VLSI_Buttons_Unlocking()
SETTIMERA(0)
SETTIMERB(0)
ENDIF
ENDIF
IF HackStage = HS_UNLOCKING
//Just a little routine to play some beeps during the unlock pause.
IF TIMERB() > 499
//Play_Select_Beep()
SETTIMERB(0)
ENDIF
IF TIMERA() > 2200
HackStage = HS_POST_UNLOCK_PAUSE
ENDIF
ENDIF
IF HackStage = HS_POST_UNLOCK_PAUSE
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("App VLSI - setting g_HackingAppHasBeenLaunched to TRUE now pause has expired.")
cdPrintnl()
#endif
g_HackingAppHasBeenLaunched = TRUE
ENDIF
BREAK
CASE PDS_COMPLEXAPP
IF Is_Phone_Control_Just_Pressed (FRONTEND_CONTROL, INT_TO_ENUM (CONTROL_ACTION, PHONE_GO_BACK_INPUT)) //Go back action - user opted to return to full text message list from single message display.
Play_Back_Beep()
g_InputButtonJustPressed = TRUE
IF g_CellPhone.PhoneDS > PDS_AWAY //make sure that the following state assignment cannot interfere with AWAY or DISABLED assignment.
g_Cellphone.PhoneDS = PDS_RUNNINGAPP
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("STATE ASSIGNMENT 23198. AppVLSI assigns PDS_RUNNINGAPP")
cdPrintnl()
#endif
ENDIF
ENDIF
BREAK
DEFAULT
#if IS_DEBUG_BUILD
PRINTSTRING("AppVLSI in default state. Should terminate if exit check in place.")
PRINTNL()
#endif
BREAK
ENDSWITCH
IF CHECK_FOR_APPLICATION_EXIT()
Cleanup_and_Terminate()
ENDIF
ELSE
//This is an important section! It tells this script what to do when a call, be it answerphone or other phonecall, comes through.
//It is important to look at how appTextMessage interacts with any change to this section as it relies upon this script to make a call to any message sender.
BeforeCallPhoneDS = PDS_MAXIMUM //After a call has finished the phone display state usually alters to whatever it was before the call came through.
//We don't really want to go back to the "calling Repeat" screen after an answerphone message so we set it to PDS_MAXIMUM
//here. We could just as easily put the phone completely away if need be.
//NB - This also means that when browsing the Repeats list, if a calls comes through and it terminates then we default
//back to MAXIMUM mode not browsing the Repeats list.
Cleanup_and_Terminate() //Likewise, having this here will make sure this script is terminated should any call come through...
ENDIF
IF CHECK_FOR_ABNORMAL_EXIT()
Cleanup_and_Terminate()
ENDIF
ENDWHILE
ENDSCRIPT