1518 lines
56 KiB
XML
Executable File
1518 lines
56 KiB
XML
Executable File
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//│ Author: Ben Rollinson Date: 27/05/10 │
|
|
//╞═════════════════════════════════════════════════════════════════════════════╡
|
|
//│ │
|
|
//│ Generic Heist Control Header │
|
|
//│ │
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "commands_camera.sch"
|
|
USING "script_buttons.sch"
|
|
USING "flow_help_public.sch"
|
|
|
|
CONST_INT CREW_STAT1_BITMASK (BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9|BIT10|BIT11|BIT12|BIT13|BIT14)
|
|
CONST_INT CREW_STAT2_BITMASK (BIT15|BIT16|BIT17|BIT18|BIT19|BIT20|BIT21|BIT22|BIT23|BIT24|BIT25|BIT26|BIT27|BIT28|BIT29)
|
|
CONST_INT CREW_STAT2_SHIFT 15
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
STRUCT DebugCrewSelector
|
|
INT iLinkedHeistChoice
|
|
INT iSelectedSlot
|
|
INT iTimeLastSelectionChange
|
|
BOOL bFinalised
|
|
ENDSTRUCT
|
|
|
|
FUNC STRING PRIVATE_Get_Crew_Dialogue_Debug_String(CrewDialogueSlot eCrewDialogueSlot)
|
|
SWITCH eCrewDialogueSlot
|
|
CASE CRDS_PICK_GUSTAV RETURN "PICK_GUSTAV" BREAK
|
|
CASE CRDS_PICK_KARL RETURN "PICK_KARL" BREAK
|
|
CASE CRDS_PICK_HUGH RETURN "PICK_HUGH" BREAK
|
|
CASE CRDS_PICK_NORM RETURN "PICK_NORM" BREAK
|
|
CASE CRDS_PICK_DARYL RETURN "PICK_DARYL" BREAK
|
|
CASE CRDS_PICK_PAIGE RETURN "PICK_PAIGE" BREAK
|
|
CASE CRDS_PICK_CHRIS RETURN "PICK_CHRIS" BREAK
|
|
CASE CRDS_PICK_EDDIE RETURN "PICK_EDDIE" BREAK
|
|
CASE CRDS_PICK_KARIM RETURN "PICK_KARIM" BREAK
|
|
CASE CRDS_PICK_PACKIE RETURN "PICK_PACKIE" BREAK
|
|
CASE CRDS_PICK_CHEF RETURN "PICK_CHEF" BREAK
|
|
CASE CRDS_PICK_RICKIE RETURN "PICK_RICKIE" BREAK
|
|
CASE CRDS_PICK_TALINA RETURN "PICK_TALINA" BREAK
|
|
CASE CRDS_MET_PACKIE RETURN "MET_PACKIE" BREAK
|
|
CASE CRDS_MET_RICKIE RETURN "MET_RICKIE" BREAK
|
|
CASE CRDS_MET_TALINA RETURN "MET_TALINA" BREAK
|
|
CASE CRDS_MET_CHEF RETURN "MET_CHEF" BREAK
|
|
CASE CRDS_USED_JEWEL RETURN "USED_JEWEL" BREAK
|
|
CASE CRDS_USED_PALETO RETURN "USED_PALETO" BREAK
|
|
CASE CRDS_USED_AGENCY RETURN "USED_AGENCY" BREAK
|
|
CASE CRDS_USED_JEWEL_PALETO RETURN "USED_JEWEL_PALETO" BREAK
|
|
CASE CRDS_USED_JEWEL_AGENCY RETURN "USED_JEWEL_AGENCY" BREAK
|
|
CASE CRDS_USED_ALL RETURN "USED_ALL" BREAK
|
|
CASE CRDS_USED_RICKIE_LAST_ONE RETURN "USED_RICKIE_LAST_ONE" BREAK
|
|
CASE CRDS_USED_RICKIE_LAST_TWO RETURN "USED_RICKIE_LAST_TWO" BREAK
|
|
CASE CRDS_USED_KARIM_LAST_ONE RETURN "USED_KARIM_LAST_ONE" BREAK
|
|
CASE CRDS_USED_KARIM_LAST_TWO RETURN "USED_KARIM_LAST_TWO" BREAK
|
|
CASE CRDS_USED_CHRIS_JEWEL RETURN "USED_CHRIS_JEWEL" BREAK
|
|
CASE CRDS_USED_CHRIS_AGENCY RETURN "USED_CHRIS_AGENCY" BREAK
|
|
CASE CRDS_USED_CHRIS_JEWEL_AGENCY RETURN "USED_CHRIS_JEWEL_AGENCY" BREAK
|
|
CASE CRDS_USED_BADG_AGENCY RETURN "USED_BADG_AGENCY" BREAK
|
|
ENDSWITCH
|
|
RETURN "ERROR"
|
|
ENDFUNC
|
|
|
|
FUNC STRING PRIVATE_Get_Crew_Used_Bit_Debug_String(INT iCrewUsedBit)
|
|
SWITCH iCrewUsedBit
|
|
CASE CREW_USED_JEWEL_GUSTAV RETURN "JEWEL_GUSTAV" BREAK
|
|
CASE CREW_USED_JEWEL_PACKIE RETURN "JEWEL_PACKIE" BREAK
|
|
CASE CREW_USED_JEWEL_CHRIS RETURN "JEWEL_CHRIS" BREAK
|
|
CASE CREW_USED_JEWEL_RICKIE RETURN "JEWEL_RICKIE" BREAK
|
|
CASE CREW_USED_JEWEL_PAIGE RETURN "JEWEL_PAIGE" BREAK
|
|
CASE CREW_USED_JEWEL_EDDIE RETURN "JEWEL_EDDIE" BREAK
|
|
CASE CREW_USED_JEWEL_KARIM RETURN "JEWEL_KARIM" BREAK
|
|
CASE CREW_USED_PALETO_GUSTAV RETURN "PALETO_GUSTAV" BREAK
|
|
CASE CREW_USED_PALETO_PACKIE RETURN "PALETO_PACKIE" BREAK
|
|
CASE CREW_USED_PALETO_CHEF RETURN "PALETO_CHEF" BREAK
|
|
CASE CREW_USED_AGENCY_GUSTAV RETURN "AGENCY_GUSTAV" BREAK
|
|
CASE CREW_USED_AGENCY_PACKIE RETURN "AGENCY_PACKIE" BREAK
|
|
CASE CREW_USED_AGENCY_DARYL RETURN "AGENCY_DARYL" BREAK
|
|
CASE CREW_USED_AGENCY_HUGH RETURN "AGENCY_HUGH" BREAK
|
|
CASE CREW_USED_AGENCY_CHRIS RETURN "AGENCY_CHRIS" BREAK
|
|
CASE CREW_USED_AGENCY_RICKIE RETURN "AGENCY_RICKIE" BREAK
|
|
CASE CREW_USED_AGENCY_EDDIE RETURN "AGENCY_EDDIE" BREAK
|
|
CASE CREW_USED_AGENCY_NORM RETURN "AGENCY_NORM" BREAK
|
|
CASE CREW_USED_AGENCY_KARIM RETURN "AGENCY_KARIM" BREAK
|
|
CASE CREW_USED_AGENCY_PAIGE RETURN "AGENCY_PAIGE" BREAK
|
|
CASE CREW_USED_AGENCY_TALINA RETURN "AGENCY_TALINA" BREAK
|
|
ENDSWITCH
|
|
RETURN "ERROR"
|
|
ENDFUNC
|
|
|
|
FUNC STRING PRIVATE_Get_Heist_Choice_Debug_String(INT paramHeistChoice)
|
|
|
|
SWITCH paramHeistChoice
|
|
CASE HEIST_CHOICE_JEWEL_STEALTH RETURN "JEWEL_STEALTH" BREAK
|
|
CASE HEIST_CHOICE_JEWEL_HIGH_IMPACT RETURN "JEWEL_HIGH_IMPACT" BREAK
|
|
CASE HEIST_CHOICE_DOCKS_BLOW_UP_BOAT RETURN "DOCKS_BLOW_UP_BOAT" BREAK
|
|
CASE HEIST_CHOICE_DOCKS_DEEP_SEA RETURN "DOCKS_DEEP_SEA" BREAK
|
|
CASE HEIST_CHOICE_RURAL_NO_TANK RETURN "RURAL_NO_TANK" BREAK
|
|
CASE HEIST_CHOICE_AGENCY_FIRETRUCK RETURN "AGENCY_FIRETRUCK" BREAK
|
|
CASE HEIST_CHOICE_AGENCY_HELICOPTER RETURN "AGENCY_HELICOPTER" BREAK
|
|
CASE HEIST_CHOICE_FINALE_TRAFFCONT RETURN "FINALE_TRAFFCONT" BREAK
|
|
CASE HEIST_CHOICE_FINALE_HELI RETURN "FINALE_HELI" BREAK
|
|
CASE HEIST_CHOICE_EMPTY RETURN "EMPTY" BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN "INVALID!"
|
|
ENDFUNC
|
|
|
|
#ENDIF
|
|
|
|
|
|
FUNC INT PRIVATE_Get_Heist_Index_From_Finale_Mission(SP_MISSIONS paramMission)
|
|
#IF NOT USE_SP_DLC
|
|
SWITCH paramMission
|
|
CASE SP_HEIST_JEWELRY_2
|
|
RETURN HEIST_JEWEL
|
|
BREAK
|
|
CASE SP_HEIST_DOCKS_2A
|
|
CASE SP_HEIST_DOCKS_2B
|
|
RETURN HEIST_DOCKS
|
|
BREAK
|
|
CASE SP_HEIST_RURAL_2
|
|
RETURN HEIST_RURAL_BANK
|
|
BREAK
|
|
CASE SP_HEIST_AGENCY_3A
|
|
CASE SP_HEIST_AGENCY_3B
|
|
RETURN HEIST_AGENCY
|
|
BREAK
|
|
CASE SP_HEIST_FINALE_2A
|
|
CASE SP_HEIST_FINALE_2B
|
|
RETURN HEIST_FINALE
|
|
BREAK
|
|
ENDSWITCH
|
|
#ENDIF
|
|
#IF USE_SP_DLC
|
|
UNUSED_PARAMETER(paramMission)
|
|
#ENDIF
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
|
|
FUNC FLOW_INT_IDS Get_Heist_Choice_FlowInt_For_Heist(INT iHeistIndex)
|
|
|
|
#IF USE_CLF_DLC
|
|
iHeistIndex = iHeistIndex
|
|
FLOW_INT_IDS eHeistChoiceFlowInt = FLOWINT_NONE
|
|
RETURN eHeistChoiceFlowInt
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
iHeistIndex = iHeistIndex
|
|
FLOW_INT_IDS eHeistChoiceFlowInt = FLOWINT_NONE
|
|
RETURN eHeistChoiceFlowInt
|
|
#ENDIF
|
|
|
|
#IF NOT USE_SP_DLC
|
|
FLOW_INT_IDS eHeistChoiceFlowInt
|
|
|
|
SWITCH(iHeistIndex)
|
|
CASE HEIST_JEWEL
|
|
eHeistChoiceFlowInt = FLOWINT_HEIST_CHOICE_JEWEL
|
|
BREAK
|
|
CASE HEIST_DOCKS
|
|
eHeistChoiceFlowInt = FLOWINT_HEIST_CHOICE_DOCKS
|
|
BREAK
|
|
CASE HEIST_RURAL_BANK
|
|
eHeistChoiceFlowInt = FLOWINT_HEIST_CHOICE_RURAL
|
|
BREAK
|
|
CASE HEIST_AGENCY
|
|
eHeistChoiceFlowInt = FLOWINT_HEIST_CHOICE_AGENCY
|
|
BREAK
|
|
CASE HEIST_FINALE
|
|
eHeistChoiceFlowInt = FLOWINT_HEIST_CHOICE_FINALE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN eHeistChoiceFlowInt
|
|
#ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT Get_Choice_In_Heist_Choice_Slot(INT iHeist, INT iSlotIndex)
|
|
|
|
SWITCH iHeist
|
|
CASE HEIST_JEWEL
|
|
SWITCH iSlotIndex
|
|
CASE 0
|
|
RETURN HEIST_CHOICE_JEWEL_HIGH_IMPACT
|
|
BREAK
|
|
CASE 1
|
|
RETURN HEIST_CHOICE_JEWEL_STEALTH
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Get_Choice_In_Heist_Choice_Slot: Invalid slot index for Jewelry Heist.")
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE HEIST_DOCKS
|
|
SWITCH iSlotIndex
|
|
CASE 0
|
|
RETURN HEIST_CHOICE_DOCKS_BLOW_UP_BOAT
|
|
BREAK
|
|
CASE 1
|
|
RETURN HEIST_CHOICE_DOCKS_DEEP_SEA
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Get_Choice_In_Heist_Choice_Slot: Invalid slot index for Docks Heist.")
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE HEIST_RURAL_BANK
|
|
SWITCH iSlotIndex
|
|
CASE 0
|
|
RETURN HEIST_CHOICE_RURAL_NO_TANK
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Get_Choice_In_Heist_Choice_Slot: Invalid slot index for Rural Bank Heist.")
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE HEIST_AGENCY
|
|
SWITCH iSlotIndex
|
|
CASE 0
|
|
RETURN HEIST_CHOICE_AGENCY_FIRETRUCK
|
|
BREAK
|
|
CASE 1
|
|
RETURN HEIST_CHOICE_AGENCY_HELICOPTER
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Get_Choice_In_Heist_Choice_Slot: Invalid slot index for Agency Heist.")
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE HEIST_FINALE
|
|
SWITCH iSlotIndex
|
|
CASE 0
|
|
RETURN HEIST_CHOICE_FINALE_TRAFFCONT
|
|
BREAK
|
|
CASE 1
|
|
RETURN HEIST_CHOICE_FINALE_HELI
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Get_Choice_In_Heist_Choice_Slot: Invalid slot index for Finale Heist.")
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SCRIPT_ASSERT("Get_Choice_In_Heist_Choice_Slot: Invalid heist index.")
|
|
RETURN HEIST_CHOICE_EMPTY
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT Get_Heist_Choice_Base_Index(INT iHeistChoice)
|
|
|
|
SWITCH iHeistChoice
|
|
CASE HEIST_CHOICE_JEWEL_STEALTH
|
|
CASE HEIST_CHOICE_DOCKS_BLOW_UP_BOAT
|
|
CASE HEIST_CHOICE_RURAL_NO_TANK
|
|
CASE HEIST_CHOICE_AGENCY_FIRETRUCK
|
|
CASE HEIST_CHOICE_FINALE_TRAFFCONT
|
|
RETURN 0
|
|
BREAK
|
|
|
|
CASE HEIST_CHOICE_JEWEL_HIGH_IMPACT
|
|
CASE HEIST_CHOICE_DOCKS_DEEP_SEA
|
|
CASE HEIST_CHOICE_AGENCY_HELICOPTER
|
|
CASE HEIST_CHOICE_FINALE_HELI
|
|
RETURN 1
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SCRIPT_ASSERT("Get_Heist_Choice_Base_Index: The INT passed was not a valid heist choice. Tell BenR.")
|
|
RETURN -1
|
|
|
|
ENDFUNC
|
|
|
|
|
|
FUNC FLOW_INT_IDS Get_Heist_Choice_FlowInt_ID(INT iHeist)
|
|
#if USE_CLF_DLC
|
|
iHeist = iHeist
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
iHeist = iHeist
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
SWITCH(iHeist)
|
|
CASE HEIST_JEWEL
|
|
RETURN FLOWINT_HEIST_CHOICE_JEWEL
|
|
BREAK
|
|
CASE HEIST_DOCKS
|
|
RETURN FLOWINT_HEIST_CHOICE_DOCKS
|
|
BREAK
|
|
CASE HEIST_RURAL_BANK
|
|
RETURN FLOWINT_HEIST_CHOICE_RURAL
|
|
BREAK
|
|
CASE HEIST_AGENCY
|
|
RETURN FLOWINT_HEIST_CHOICE_AGENCY
|
|
BREAK
|
|
CASE HEIST_FINALE
|
|
RETURN FLOWINT_HEIST_CHOICE_FINALE
|
|
BREAK
|
|
ENDSWITCH
|
|
#endif
|
|
#endif
|
|
SCRIPT_ASSERT("Get_Heist_Choice_FlowInt_ID: Invalid heist index.")
|
|
RETURN FLOWINT_NONE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC FLOW_INT_IDS Get_Heist_Board_Mode_FlowInt_ID(INT iHeist)
|
|
#if USE_CLF_DLC
|
|
iHeist = iHeist
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
iHeist = iHeist
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
SWITCH(iHeist)
|
|
CASE HEIST_JEWEL
|
|
RETURN FLOWINT_HEIST_BOARD_MODE_JEWEL
|
|
BREAK
|
|
CASE HEIST_DOCKS
|
|
RETURN FLOWINT_HEIST_BOARD_MODE_DOCKS
|
|
BREAK
|
|
CASE HEIST_RURAL_BANK
|
|
RETURN FLOWINT_HEIST_BOARD_MODE_RURAL
|
|
BREAK
|
|
CASE HEIST_AGENCY
|
|
RETURN FLOWINT_HEIST_BOARD_MODE_AGENCY
|
|
BREAK
|
|
CASE HEIST_FINALE
|
|
RETURN FLOWINT_HEIST_BOARD_MODE_FINALE
|
|
BREAK
|
|
ENDSWITCH
|
|
#endif
|
|
#endif
|
|
SCRIPT_ASSERT("Get_Heist_Board_Mode_FlowInt_ID: Invalid heist index.")
|
|
RETURN FLOWINT_NONE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL Is_Heist_Display_Group_Active(INT iHeist, g_eBoardDisplayGroups eDisplayGroup)
|
|
RETURN IS_BIT_SET(g_savedGlobals.sHeistData.iDisplayGroupVisibleBitset[iHeist], ENUM_TO_INT(eDisplayGroup))
|
|
ENDFUNC
|
|
|
|
|
|
FUNC STRING PRIVATE_Get_Crew_Member_Name_Label(CrewMember crewMem)
|
|
SWITCH crewMem
|
|
CASE CM_GUNMAN_G_GUSTAV
|
|
RETURN "HC_N_GUS"
|
|
BREAK
|
|
CASE CM_GUNMAN_G_KARL
|
|
RETURN "HC_N_KAR"
|
|
BREAK
|
|
CASE CM_GUNMAN_G_PACKIE_UNLOCK
|
|
RETURN "HC_N_PAC"
|
|
BREAK
|
|
CASE CM_GUNMAN_G_CHEF_UNLOCK
|
|
RETURN "HC_N_CHE"
|
|
BREAK
|
|
CASE CM_GUNMAN_M_HUGH
|
|
RETURN "HC_N_HUG"
|
|
BREAK
|
|
CASE CM_GUNMAN_B_NORM
|
|
RETURN "HC_N_NOR"
|
|
BREAK
|
|
CASE CM_GUNMAN_B_DARYL
|
|
RETURN "HC_N_DAR"
|
|
BREAK
|
|
CASE CM_HACKER_G_PAIGE
|
|
RETURN "HC_N_PAI"
|
|
BREAK
|
|
CASE CM_HACKER_M_CHRIS
|
|
RETURN "HC_N_CHR"
|
|
BREAK
|
|
CASE CM_HACKER_B_RICKIE_UNLOCK
|
|
RETURN "HC_N_RIC"
|
|
BREAK
|
|
CASE CM_DRIVER_G_EDDIE
|
|
RETURN "HC_N_EDD"
|
|
BREAK
|
|
CASE CM_DRIVER_G_TALINA_UNLOCK
|
|
RETURN "HC_N_TAL"
|
|
BREAK
|
|
CASE CM_DRIVER_B_KARIM
|
|
RETURN "HC_N_KRM"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SCRIPT_ASSERT("PRIVATE_Get_Crew_Member_Name_Label: Invalid crew member enum. Bug BenR.")
|
|
RETURN "ERROR!"
|
|
ENDFUNC
|
|
|
|
|
|
FUNC STRING PRIVATE_Get_Crew_Member_First_Name_Label(CrewMember crewMem)
|
|
SWITCH crewMem
|
|
CASE CM_GUNMAN_G_GUSTAV
|
|
RETURN "HC_FN_GUS"
|
|
BREAK
|
|
CASE CM_GUNMAN_G_KARL
|
|
RETURN "HC_FN_KAR"
|
|
BREAK
|
|
CASE CM_GUNMAN_G_PACKIE_UNLOCK
|
|
RETURN "HC_FN_PAC"
|
|
BREAK
|
|
CASE CM_GUNMAN_G_CHEF_UNLOCK
|
|
RETURN "HC_FN_CHE"
|
|
BREAK
|
|
CASE CM_GUNMAN_M_HUGH
|
|
RETURN "HC_FN_HUG"
|
|
BREAK
|
|
CASE CM_GUNMAN_B_NORM
|
|
RETURN "HC_FN_NOR"
|
|
BREAK
|
|
CASE CM_GUNMAN_B_DARYL
|
|
RETURN "HC_FN_DAR"
|
|
BREAK
|
|
|
|
CASE CM_HACKER_G_PAIGE
|
|
RETURN "HC_FN_PAI"
|
|
BREAK
|
|
CASE CM_HACKER_M_CHRIS
|
|
RETURN "HC_FN_CHR"
|
|
BREAK
|
|
CASE CM_HACKER_B_RICKIE_UNLOCK
|
|
RETURN "HC_FN_RIC"
|
|
BREAK
|
|
CASE CM_DRIVER_G_EDDIE
|
|
RETURN "HC_FN_EDD"
|
|
BREAK
|
|
CASE CM_DRIVER_G_TALINA_UNLOCK
|
|
RETURN "HC_FN_TAL"
|
|
BREAK
|
|
CASE CM_DRIVER_B_KARIM
|
|
RETURN "HC_FN_KRM"
|
|
BREAK
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("PRIVATE_Get_Crew_Member_First_Name_Label: Invalid crew member enum. Bug BenR.")
|
|
RETURN "ERROR!"
|
|
ENDFUNC
|
|
|
|
|
|
FUNC STRING PRIVATE_Get_Heist_Choice_Name_Label(INT iHeistChoice)
|
|
SWITCH iHeistChoice
|
|
CASE HEIST_CHOICE_JEWEL_STEALTH RETURN "HC_J_STEALTH" BREAK
|
|
CASE HEIST_CHOICE_JEWEL_HIGH_IMPACT RETURN "HC_J_IMPACT" BREAK
|
|
CASE HEIST_CHOICE_DOCKS_BLOW_UP_BOAT RETURN "HC_D_BLOW_UP" BREAK
|
|
CASE HEIST_CHOICE_DOCKS_DEEP_SEA RETURN "HC_D_DEEP_SEA" BREAK
|
|
CASE HEIST_CHOICE_RURAL_NO_TANK RETURN "HC_R_NO_TANK" BREAK
|
|
CASE HEIST_CHOICE_AGENCY_FIRETRUCK RETURN "HC_A_FIRETRUCK" BREAK
|
|
CASE HEIST_CHOICE_AGENCY_HELICOPTER RETURN "HC_A_HELICOPTER" BREAK
|
|
CASE HEIST_CHOICE_FINALE_TRAFFCONT RETURN "HC_F_TRAFFCONT" BREAK
|
|
CASE HEIST_CHOICE_FINALE_HELI RETURN "HC_F_HELI" BREAK
|
|
ENDSWITCH
|
|
|
|
SCRIPT_ASSERT("PRIVATE_Get_Heist_Choice_Name_Label: Invalid heist choice int. Bug BenR.")
|
|
RETURN "ERROR!"
|
|
ENDFUNC
|
|
|
|
|
|
PROC PRIVATE_Clear_Crew_Used_Flags_For_Heist(INT iHeist)
|
|
SWITCH iHeist
|
|
CASE HEIST_JEWEL
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_GUSTAV)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_PACKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_CHRIS)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_RICKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_PAIGE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_EDDIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_KARIM)
|
|
BREAK
|
|
|
|
CASE HEIST_RURAL_BANK
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_PALETO_GUSTAV)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_PALETO_PACKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_PALETO_CHEF)
|
|
BREAK
|
|
|
|
CASE HEIST_AGENCY
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_GUSTAV)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_PACKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_DARYL)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_HUGH)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_CHRIS)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_RICKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_EDDIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_NORM)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_KARIM)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_PAIGE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_TALINA)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Update_Crew_Used_Flags_For_Heist(INT iHeist)
|
|
#if USE_CLF_DLC
|
|
iHeist = iHeist
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
iHeist = iHeist
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
|
|
INT iCrewIndex
|
|
INT iHeistChoice
|
|
|
|
PRIVATE_Clear_Crew_Used_Flags_For_Heist(iHeist)
|
|
|
|
SWITCH iHeist
|
|
CASE HEIST_JEWEL
|
|
CDEBUG1LN(DEBUG_HEIST, "Updating used crew member flags for HEIST_JEWEL.")
|
|
iHeistChoice = g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_JEWEL]
|
|
REPEAT g_sHeistChoiceData[iHeistChoice].iCrewSize iCrewIndex
|
|
SWITCH g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]
|
|
CASE CM_GUNMAN_G_GUSTAV
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_GUSTAV)
|
|
BREAK
|
|
CASE CM_GUNMAN_G_PACKIE_UNLOCK
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_PACKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(CRDS_MET_PACKIE))
|
|
BREAK
|
|
CASE CM_HACKER_M_CHRIS
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_CHRIS)
|
|
BREAK
|
|
CASE CM_HACKER_B_RICKIE_UNLOCK
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_RICKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(CRDS_MET_RICKIE))
|
|
BREAK
|
|
CASE CM_HACKER_G_PAIGE
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_PAIGE)
|
|
BREAK
|
|
CASE CM_DRIVER_G_EDDIE
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_EDDIE)
|
|
BREAK
|
|
CASE CM_DRIVER_B_KARIM
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_JEWEL_KARIM)
|
|
BREAK
|
|
ENDSWITCH
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]))
|
|
ENDREPEAT
|
|
BREAK
|
|
|
|
CASE HEIST_RURAL_BANK
|
|
CDEBUG1LN(DEBUG_HEIST, "Updating used crew member flags for HEIST_RURAL_BANK.")
|
|
iHeistChoice = g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_RURAL]
|
|
REPEAT g_sHeistChoiceData[iHeistChoice].iCrewSize iCrewIndex
|
|
SWITCH g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]
|
|
CASE CM_GUNMAN_G_GUSTAV
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_PALETO_GUSTAV)
|
|
BREAK
|
|
CASE CM_GUNMAN_G_PACKIE_UNLOCK
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_PALETO_PACKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(CRDS_MET_PACKIE))
|
|
BREAK
|
|
CASE CM_GUNMAN_G_CHEF_UNLOCK
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_PALETO_CHEF)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(CRDS_MET_CHEF))
|
|
BREAK
|
|
ENDSWITCH
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]))
|
|
ENDREPEAT
|
|
BREAK
|
|
|
|
CASE HEIST_AGENCY
|
|
CDEBUG1LN(DEBUG_HEIST, "Updating used crew member flags for HEIST_AGENCY.")
|
|
iHeistChoice = g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_AGENCY]
|
|
REPEAT g_sHeistChoiceData[iHeistChoice].iCrewSize iCrewIndex
|
|
SWITCH g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]
|
|
CASE CM_GUNMAN_G_GUSTAV
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_GUSTAV)
|
|
BREAK
|
|
CASE CM_GUNMAN_G_PACKIE_UNLOCK
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_PACKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(CRDS_MET_PACKIE))
|
|
BREAK
|
|
CASE CM_GUNMAN_B_DARYL
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_DARYL)
|
|
BREAK
|
|
CASE CM_GUNMAN_M_HUGH
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_HUGH)
|
|
BREAK
|
|
CASE CM_GUNMAN_B_NORM
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_NORM)
|
|
BREAK
|
|
CASE CM_HACKER_M_CHRIS
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_CHRIS)
|
|
BREAK
|
|
CASE CM_HACKER_B_RICKIE_UNLOCK
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_RICKIE)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(CRDS_MET_RICKIE))
|
|
BREAK
|
|
CASE CM_HACKER_G_PAIGE
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_PAIGE)
|
|
BREAK
|
|
CASE CM_DRIVER_G_EDDIE
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_EDDIE)
|
|
BREAK
|
|
CASE CM_DRIVER_B_KARIM
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_KARIM)
|
|
BREAK
|
|
CASE CM_DRIVER_G_TALINA_UNLOCK
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewUsedBitset, CREW_USED_AGENCY_TALINA)
|
|
CLEAR_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(CRDS_MET_TALINA))
|
|
BREAK
|
|
ENDSWITCH
|
|
SET_BIT(g_savedGlobals.sHeistData.iCrewDialogueBitset, ENUM_TO_INT(g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]))
|
|
ENDREPEAT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG3LN(DEBUG_HEIST, "CREW DIALOGUE BITS")
|
|
INT iBitIndex
|
|
REPEAT CRDS_MAX_SLOTS iBitIndex
|
|
IF IS_BIT_SET(g_savedGlobals.sHeistData.iCrewDialogueBitset, iBitIndex)
|
|
CDEBUG3LN(DEBUG_HEIST, "Bit ", PRIVATE_Get_Crew_Dialogue_Debug_String(INT_TO_ENUM(CrewDialogueSlot, iBitIndex)), " TRUE.")
|
|
ELSE
|
|
CDEBUG3LN(DEBUG_HEIST, "Bit ", PRIVATE_Get_Crew_Dialogue_Debug_String(INT_TO_ENUM(CrewDialogueSlot, iBitIndex)), " FALSE.")
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
CDEBUG3LN(DEBUG_HEIST, "CREW USED BITS")
|
|
REPEAT CREW_USED_MAX iBitIndex
|
|
IF IS_BIT_SET(g_savedGlobals.sHeistData.iCrewUsedBitset, iBitIndex)
|
|
CDEBUG3LN(DEBUG_HEIST, "Bit ", PRIVATE_Get_Crew_Used_Bit_Debug_String(iBitIndex), " TRUE.")
|
|
ELSE
|
|
CDEBUG3LN(DEBUG_HEIST, "Bit ", PRIVATE_Get_Crew_Used_Bit_Debug_String(iBitIndex), " FALSE.")
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
|
|
#endif //DLC check
|
|
#endif
|
|
ENDPROC
|
|
|
|
|
|
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//╞════════════════════════╡ Heist Social Club Stats ╞═════════════════════════╡
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC STRING PRIVATE_Get_Heist_Choice_Stat_Debug_String(STATSENUM paramHeistChoiceStat)
|
|
SWITCH paramHeistChoiceStat
|
|
CASE HCS_JEWEL_GAMEPLAY_CHOICE RETURN "HCS_JEWEL_GAMEPLAY_CHOICE" BREAK
|
|
CASE HCS_JEWEL_CREW1_CHOICE RETURN "HCS_JEWEL_CREW1_CHOICE" BREAK
|
|
CASE HCS_JEWEL_CREW2_CHOICE RETURN "HCS_JEWEL_CREW2_CHOICE" BREAK
|
|
CASE HCS_JEWEL_CREW3_CHOICE RETURN "HCS_JEWEL_CREW3_CHOICE" BREAK
|
|
CASE HCS_PORT_GAMEPLAY_CHOICE RETURN "HCS_PORT_GAMEPLAY_CHOICE" BREAK
|
|
CASE HCS_PALETO_CREW1_CHOICE RETURN "HCS_PALETO_CREW1_CHOICE" BREAK
|
|
CASE HCS_BUREAU_GAMEPLAY_CHOICE RETURN "HCS_BUREAU_GAMEPLAY_CHOICE" BREAK
|
|
CASE HCS_BUREAU_CREW1_CHOICE RETURN "HCS_BUREAU_CREW1_CHOICE" BREAK
|
|
CASE HCS_BUREAU_CREW2_CHOICE RETURN "HCS_BUREAU_CREW2_CHOICE" BREAK
|
|
CASE HCS_BUREAU_CREW3_CHOICE RETURN "HCS_BUREAU_CREW3_CHOICE" BREAK
|
|
CASE HCS_BIGS_GAMEPLAY_CHOICE RETURN "HCS_BIGS_GAMEPLAY_CHOICE" BREAK
|
|
CASE HCS_BIGS_CREW1_CHOICE RETURN "HCS_BIGS_CREW1_CHOICE" BREAK
|
|
CASE HCS_BIGS_CREW2_CHOICE RETURN "HCS_BIGS_CREW2_CHOICE" BREAK
|
|
CASE HCS_BIGS_CREW3_CHOICE RETURN "HCS_BIGS_CREW3_CHOICE" BREAK
|
|
CASE HCS_BIGS_CREW4_CHOICE RETURN "HCS_BIGS_CREW4_CHOICE" BREAK
|
|
CASE HCS_BIGS_CREW5_CHOICE RETURN "HCS_BIGS_CREW5_CHOICE" BREAK
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("PRIVATE_Get_Heist_Choice_Stat_Debug_String: Passed stat was not a heist choice stat.")
|
|
RETURN "ERROR!"
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
|
|
FUNC STATSENUM PRIVATE_Get_Heist_Gameplay_Choice_Stat(INT paramHeist)
|
|
SWITCH paramHeist
|
|
CASE HEIST_JEWEL RETURN HCS_JEWEL_GAMEPLAY_CHOICE BREAK
|
|
CASE HEIST_DOCKS RETURN HCS_PORT_GAMEPLAY_CHOICE BREAK
|
|
CASE HEIST_AGENCY RETURN HCS_BUREAU_GAMEPLAY_CHOICE BREAK
|
|
CASE HEIST_FINALE RETURN HCS_BIGS_GAMEPLAY_CHOICE BREAK
|
|
ENDSWITCH
|
|
RETURN CITIES_PASSED //Using this as a NULL value.
|
|
ENDFUNC
|
|
|
|
|
|
FUNC STATSENUM PRIVATE_Get_Heist_Crew_Choice_Stat_For_Index(INT paramHeist, INT paramCrewIndex)
|
|
SWITCH paramHeist
|
|
CASE HEIST_JEWEL
|
|
SWITCH paramCrewIndex
|
|
CASE 0 RETURN HCS_JEWEL_CREW1_CHOICE BREAK
|
|
CASE 1 RETURN HCS_JEWEL_CREW2_CHOICE BREAK
|
|
CASE 2 RETURN HCS_JEWEL_CREW3_CHOICE BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE HEIST_RURAL_BANK
|
|
SWITCH paramCrewIndex
|
|
CASE 0 RETURN HCS_PALETO_CREW1_CHOICE BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE HEIST_AGENCY
|
|
SWITCH paramCrewIndex
|
|
CASE 0 RETURN HCS_BUREAU_CREW1_CHOICE BREAK
|
|
CASE 1 RETURN HCS_BUREAU_CREW2_CHOICE BREAK
|
|
CASE 2 RETURN HCS_BUREAU_CREW3_CHOICE BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE HEIST_FINALE
|
|
SWITCH paramCrewIndex
|
|
CASE 0 RETURN HCS_BIGS_CREW1_CHOICE BREAK
|
|
CASE 1 RETURN HCS_BIGS_CREW2_CHOICE BREAK
|
|
CASE 2 RETURN HCS_BIGS_CREW3_CHOICE BREAK
|
|
CASE 3 RETURN HCS_BIGS_CREW4_CHOICE BREAK
|
|
CASE 4 RETURN HCS_BIGS_CREW5_CHOICE BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
ENDSWITCH
|
|
RETURN CITIES_PASSED //Using this as a NULL value.
|
|
ENDFUNC
|
|
|
|
|
|
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//╞══════════════════════════╡ Crew Stat Management ╞══════════════════════════╡
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
FUNC STRING PRIVATE_Get_Crew_Type_Stat_Name_Label_At_Index(CrewMemberType paramCrewType, INT paramStatIndex)
|
|
SWITCH paramCrewType
|
|
CASE CMT_GUNMAN
|
|
SWITCH paramStatIndex
|
|
CASE 0 RETURN "HC_STA_G1" BREAK
|
|
CASE 1 RETURN "HC_STA_G2" BREAK
|
|
CASE 2 RETURN "HC_STA_G3" BREAK
|
|
CASE 3 RETURN "HC_STA_G4" BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE CMT_HACKER
|
|
SWITCH paramStatIndex
|
|
CASE 0 RETURN "HC_STA_H1" BREAK
|
|
CASE 1 RETURN "HC_STA_H2" BREAK
|
|
CASE 2 RETURN "HC_STA_H3" BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE CMT_DRIVER
|
|
SWITCH paramStatIndex
|
|
CASE 0 RETURN "HC_STA_D1" BREAK
|
|
CASE 1 RETURN "HC_STA_D2" BREAK
|
|
CASE 2 RETURN "HC_STA_D3" BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SCRIPT_ASSERT("PRIVATE_Get_Crew_Type_Stat_Name_Label_At_Index: Crew type doesn't have a stat at the specified index.")
|
|
RETURN "ERROR!"
|
|
ENDFUNC
|
|
|
|
|
|
PROC PRIVATE_Store_Crew_Member_Stat_At_Index_Local(INT paramStatIndex, INT paramStatValue, INT ¶mStatsA, INT ¶mStatsB)
|
|
SWITCH paramStatIndex
|
|
CASE 0
|
|
paramStatsA -= paramStatsA & CREW_STAT1_BITMASK
|
|
paramStatsA |= paramStatValue
|
|
EXIT
|
|
BREAK
|
|
CASE 1
|
|
paramStatsA -= paramStatsA & CREW_STAT2_BITMASK
|
|
paramStatsA |= SHIFT_LEFT(paramStatValue, CREW_STAT2_SHIFT)
|
|
EXIT
|
|
BREAK
|
|
CASE 2
|
|
paramStatsB -= paramStatsB & CREW_STAT1_BITMASK
|
|
paramStatsB |= paramStatValue
|
|
EXIT
|
|
BREAK
|
|
CASE 3
|
|
paramStatsB -= paramStatsB & CREW_STAT2_BITMASK
|
|
paramStatsB |= SHIFT_LEFT(paramStatValue, CREW_STAT2_SHIFT)
|
|
EXIT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SCRIPT_ASSERT("PRIVATE_Store_Crew_Member_Stat_At_Index_Local: Invalid stat index passed. Index must be in range 0->3.")
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Store_Crew_Member_Stat_At_Index(CrewMember paramCrewMember, INT paramStatIndex, INT paramStatValue)
|
|
PRIVATE_Store_Crew_Member_Stat_At_Index_Local( paramStatIndex,
|
|
paramStatValue,
|
|
g_SavedGlobals.sHeistData.sCrewActiveData[paramCrewMember].statsA,
|
|
g_SavedGlobals.sHeistData.sCrewActiveData[paramCrewMember].statsB)
|
|
ENDPROC
|
|
|
|
|
|
FUNC INT PRIVATE_Get_Crew_Member_Stat_At_Index_Local(INT paramStatIndex, INT paramStatsA, INT paramStatsB)
|
|
SWITCH paramStatIndex
|
|
CASE 0
|
|
CASE 1
|
|
RETURN SHIFT_RIGHT(paramStatsA, 15*paramStatIndex) & CREW_STAT1_BITMASK
|
|
BREAK
|
|
CASE 2
|
|
CASE 3
|
|
RETURN SHIFT_RIGHT(paramStatsB, 15*(paramStatIndex-2)) & CREW_STAT1_BITMASK
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SCRIPT_ASSERT("PRIVATE_Get_Crew_Member_Stat_At_Index_Local: Invalid stat index passed. Index must be in range 0->3.")
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT PRIVATE_Get_Crew_Member_Stat_At_Index(CrewMember paramCrewMember, INT paramStatIndex)
|
|
RETURN PRIVATE_Get_Crew_Member_Stat_At_Index_Local( paramStatIndex,
|
|
g_SavedGlobals.sHeistData.sCrewActiveData[paramCrewMember].statsA,
|
|
g_SavedGlobals.sHeistData.sCrewActiveData[paramCrewMember].statsB)
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT PRIVATE_Get_Gunman_Stat_Max_Value(CrewGunmanStat paramStat)
|
|
SWITCH paramStat
|
|
CASE CGS_MAX_HEALTH RETURN 1000 BREAK
|
|
CASE CGS_ACCURACY RETURN 100 BREAK
|
|
CASE CGS_SHOOT_RATE RETURN 100 BREAK
|
|
CASE CGS_WEAPON_CHOICE RETURN 100 BREAK
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("PRIVATE_Get_Gunman_Stat_Max_Value: Undefined gunman stat passed.")
|
|
RETURN 0
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT PRIVATE_Get_Hacker_Stat_Max_Value(CrewHackerStat paramStat)
|
|
SWITCH paramStat
|
|
CASE CHS_SYS_KNOWLEDGE RETURN 100 BREAK
|
|
CASE CHS_DECRYPT_SKILL RETURN 100 BREAK
|
|
CASE CHS_ACCESS_SPEED RETURN 100 BREAK
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("PRIVATE_Get_Hacker_Stat_Max_Value: Undefined hacker stat passed.")
|
|
RETURN 0
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT PRIVATE_Get_Driver_Stat_Max_Value(CrewDriverStat paramStat)
|
|
SWITCH paramStat
|
|
CASE CDS_DRIVING_SKILL RETURN 100 BREAK
|
|
CASE CDS_COMPOSURE RETURN 100 BREAK
|
|
CASE CDS_VEHICLE_CHOICE RETURN 100 BREAK
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("PRIVATE_Get_Driver_Stat_Max_Value: Undefined driver stat passed.")
|
|
RETURN 0
|
|
ENDFUNC
|
|
|
|
|
|
PROC PRIVATE_Update_Crew_Member_Skill_Level_From_Stats(CrewMember paramCrewMember)
|
|
|
|
//If the crew member is already at the highest skill level, no point in recalculating.
|
|
IF g_SavedGlobals.sHeistData.sCrewActiveData[paramCrewMember].skill = CMSK_GOOD
|
|
EXIT
|
|
ENDIF
|
|
|
|
FLOAT fAverageStatPercentage = 0.0
|
|
INT iStat
|
|
|
|
SWITCH g_sCrewMemberStaticData[paramCrewMember].type
|
|
CASE CMT_GUNMAN
|
|
REPEAT 4 iStat
|
|
fAverageStatPercentage += (TO_FLOAT(PRIVATE_Get_Crew_Member_Stat_At_Index(paramCrewMember, iStat)) / TO_FLOAT(PRIVATE_Get_Gunman_Stat_Max_Value(INT_TO_ENUM(CrewGunmanStat, iStat))) * 100.0)
|
|
ENDREPEAT
|
|
fAverageStatPercentage /= 4.0
|
|
BREAK
|
|
|
|
CASE CMT_HACKER
|
|
REPEAT 3 iStat
|
|
fAverageStatPercentage += (TO_FLOAT(PRIVATE_Get_Crew_Member_Stat_At_Index(paramCrewMember, iStat)) / TO_FLOAT(PRIVATE_Get_Hacker_Stat_Max_Value(INT_TO_ENUM(CrewHackerStat, iStat))) * 100.0)
|
|
ENDREPEAT
|
|
fAverageStatPercentage /= 3.0
|
|
BREAK
|
|
|
|
CASE CMT_DRIVER
|
|
REPEAT 3 iStat
|
|
fAverageStatPercentage += (TO_FLOAT(PRIVATE_Get_Crew_Member_Stat_At_Index(paramCrewMember, iStat)) / TO_FLOAT(PRIVATE_Get_Driver_Stat_Max_Value(INT_TO_ENUM(CrewDriverStat, iStat))) * 100.0)
|
|
ENDREPEAT
|
|
fAverageStatPercentage /= 3.0
|
|
BREAK
|
|
ENDSWITCH
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> ", GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Member_First_Name_Label(paramCrewMember)), "'s average stat percentage is now ", fAverageStatPercentage, ".")
|
|
|
|
IF fAverageStatPercentage > 66.6
|
|
IF g_SavedGlobals.sHeistData.sCrewActiveData[paramCrewMember].skill < CMSK_GOOD
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> ", GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Member_First_Name_Label(paramCrewMember)), "'s base skill level increased to CMSK_GOOD.")
|
|
g_savedGlobals.sHeistData.sCrewActiveData[paramCrewMember].skill = CMSK_GOOD
|
|
ENDIF
|
|
ELIF fAverageStatPercentage > 33.3
|
|
IF g_SavedGlobals.sHeistData.sCrewActiveData[paramCrewMember].skill < CMSK_MEDIUM
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> ", GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Member_First_Name_Label(paramCrewMember)), "'s base skill level increased to CMSK_MEDIUM.")
|
|
g_savedGlobals.sHeistData.sCrewActiveData[paramCrewMember].skill = CMSK_MEDIUM
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Update_Heist_Choice_Stat_From_FlowInt(INT paramHeist)
|
|
#if USE_CLF_DLC
|
|
paramHeist = paramHeist
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
paramHeist = paramHeist
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
INT iChoiceValue
|
|
SWITCH paramHeist
|
|
CASE HEIST_JEWEL
|
|
iChoiceValue = g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_JEWEL]
|
|
IF iChoiceValue = HEIST_CHOICE_JEWEL_STEALTH
|
|
CPRINTLN(DEBUG_HEIST, "Setting SP_HEIST_CHOSE_JEWEL_STEALTH stat to TRUE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_JEWEL_STEALTH, TRUE)
|
|
ELSE
|
|
CPRINTLN(DEBUG_HEIST, "Setting SP_HEIST_CHOSE_JEWEL_STEALTH stat to FALSE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_JEWEL_STEALTH, FALSE)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE HEIST_DOCKS
|
|
iChoiceValue = g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_DOCKS]
|
|
IF iChoiceValue = HEIST_CHOICE_DOCKS_BLOW_UP_BOAT
|
|
CPRINTLN(DEBUG_HEIST, "Setting SP_HEIST_CHOSE_DOCKS_SINK_SHIP stat to TRUE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_DOCKS_SINK_SHIP, TRUE)
|
|
ELSE
|
|
CPRINTLN(DEBUG_HEIST, "Setting SP_HEIST_CHOSE_DOCKS_SINK_SHIP stat to FALSE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_DOCKS_SINK_SHIP, FALSE)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE HEIST_AGENCY
|
|
iChoiceValue = g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_AGENCY]
|
|
IF iChoiceValue = HEIST_CHOICE_AGENCY_FIRETRUCK
|
|
CPRINTLN(DEBUG_HEIST, "Setting SP_HEIST_CHOSE_BUREAU_FIRECREW stat to TRUE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_BUREAU_FIRECREW, TRUE)
|
|
ELSE
|
|
CPRINTLN(DEBUG_HEIST, "Setting SP_HEIST_CHOSE_BUREAU_FIRECREW stat to FALSE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_BUREAU_FIRECREW, FALSE)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE HEIST_FINALE
|
|
iChoiceValue = g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_FINALE]
|
|
IF iChoiceValue = HEIST_CHOICE_FINALE_TRAFFCONT
|
|
CPRINTLN(DEBUG_HEIST, "Setting HEIST_CHOICE_FINALE_TRAFFCONT stat to TRUE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_BIGS_TRAFFIC, TRUE)
|
|
ELSE
|
|
CPRINTLN(DEBUG_HEIST, "Setting HEIST_CHOICE_FINALE_TRAFFCONT stat to FALSE.")
|
|
STAT_SET_BOOL(SP_HEIST_CHOSE_BIGS_TRAFFIC, FALSE)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
#endif
|
|
#endif
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Display_Feed_For_All_Crew_Member_Stat_Increases(INT iHeistChoice, INT iAliveCrewCount)
|
|
|
|
IF iAliveCrewCount != 0
|
|
INT iCrewIndex
|
|
TEXT_LABEL_23 txtCrewFeedLabel = "FEED_CREW_S"
|
|
txtCrewFeedLabel += iAliveCrewCount
|
|
|
|
BEGIN_TEXT_COMMAND_THEFEED_POST(txtCrewFeedLabel)
|
|
REPEAT g_sHeistChoiceData[iHeistChoice].iCrewSize iCrewIndex
|
|
CrewMember crewMem = g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sHeistData.iCrewDeadBitset, ENUM_TO_INT(crewMem))
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(PRIVATE_Get_Crew_Member_Name_Label(crewMem))
|
|
ENDIF
|
|
ENDREPEAT
|
|
END_TEXT_COMMAND_THEFEED_POST_TICKER(FALSE)
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_HEIST_CREW_SKILLUP)
|
|
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
PRINT_HELP("AM_H_CRWLVL")
|
|
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_HEIST_CREW_SKILLUP)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Display_Feed_For_Crew_Member_Stat_Increase(CrewMember paramCrewMember, CrewMemberType paramCrewType, INT paramCrewIndex)
|
|
STRING strCrewName = PRIVATE_Get_Crew_Member_Name_Label(paramCrewMember)
|
|
|
|
FEED_TEXT_ICON eIcon
|
|
SWITCH paramCrewType
|
|
CASE CMT_GUNMAN eIcon = TEXT_ICON_SHOOTER BREAK
|
|
CASE CMT_DRIVER eIcon = TEXT_ICON_DRIVER BREAK
|
|
CASE CMT_HACKER eIcon = TEXT_ICON_HACKER BREAK
|
|
ENDSWITCH
|
|
|
|
UNUSED_PARAMETER(paramCrewIndex)
|
|
|
|
BEGIN_TEXT_COMMAND_THEFEED_POST("FEED_CREW_S1")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(strCrewName)
|
|
END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT(strCrewName, strCrewName, TRUE, eIcon, "")
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_HEIST_CREW_SKILLUP)
|
|
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
PRINT_HELP("AM_H_CRWLVL")
|
|
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_HEIST_CREW_SKILLUP)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Display_Feed_For_Gunman_Stat_Increases(CrewMember paramCrewMember, INT paramCrewIndex)
|
|
PRIVATE_Display_Feed_For_Crew_Member_Stat_Increase(paramCrewMember, CMT_GUNMAN, paramCrewIndex)
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Display_Feed_For_Driver_Stat_Increases(CrewMember paramCrewMember, INT paramCrewIndex)
|
|
PRIVATE_Display_Feed_For_Crew_Member_Stat_Increase(paramCrewMember, CMT_DRIVER, paramCrewIndex)
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Display_Feed_For_Hacker_Stat_Increases(CrewMember paramCrewMember, INT paramCrewIndex)
|
|
PRIVATE_Display_Feed_For_Crew_Member_Stat_Increase(paramCrewMember, CMT_HACKER, paramCrewIndex)
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Prime_Heist_Crew_Stat_Tracking_On_Mission_Start(SP_MISSIONS paramMission)
|
|
#if USE_CLF_DLC
|
|
paramMission = paramMission
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
paramMission = paramMission
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
IF NOT g_bHeistTempCrewStatsPrimed
|
|
|
|
INT iHeist = PRIVATE_Get_Heist_Index_From_Finale_Mission(paramMission)
|
|
FLOW_INT_IDS eHeistChoiceID = Get_Heist_Choice_FlowInt_For_Heist(iHeist)
|
|
|
|
//Double check the Paleto Score choice has been set.
|
|
IF paramMission = SP_HEIST_RURAL_2
|
|
IF g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_RURAL] != HEIST_CHOICE_RURAL_NO_TANK
|
|
g_savedGlobals.sFlow.controls.intIDs[FLOWINT_HEIST_CHOICE_RURAL] = HEIST_CHOICE_RURAL_NO_TANK
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_sMissionStaticData[paramMission].settingsBitset, MF_INDEX_IS_HEIST)
|
|
|
|
IF iHeist != -1
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Priming heist crew member stat tracking as a heist starts.")
|
|
INT iHeistChoice = g_savedGlobals.sFlow.controls.intIDs[eHeistChoiceID]
|
|
INT iCrewIndex
|
|
REPEAT g_sHeistChoiceData[iHeistChoice].iCrewSize iCrewIndex
|
|
CrewMember eCrewMember = g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]
|
|
g_sHeistTempStats[iCrewIndex].statsIncreased = FALSE
|
|
g_sHeistTempStats[iCrewIndex].statsA = g_SavedGlobals.sHeistData.sCrewActiveData[eCrewMember].statsA
|
|
g_sHeistTempStats[iCrewIndex].statsB = g_SavedGlobals.sHeistData.sCrewActiveData[eCrewMember].statsB
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Starting stats stored for ", GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Member_First_Name_Label(eCrewMember)), ".")
|
|
INT iTemp
|
|
REPEAT 4 iTemp
|
|
IF (iTemp < 3) OR (g_sCrewMemberStaticData[eCrewMember].type = CMT_GUNMAN)
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> ", GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Type_Stat_Name_Label_At_Index(g_sCrewMemberStaticData[eCrewMember].type, iTemp)), " = ", PRIVATE_Get_Crew_Member_Stat_At_Index_Local(iTemp, g_sHeistTempStats[iCrewIndex].statsA, g_sHeistTempStats[iCrewIndex].statsB))
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
ENDREPEAT
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Heist crew member stats flagged as primed.")
|
|
g_bHeistTempCrewStatsPrimed = TRUE
|
|
ELSE
|
|
SCRIPT_ASSERT("FINALISE_HEIST_CREW_STAT_INCREASES_ON_MISSION_PASS: A mission is flagged with MF_IS_HEIST when it isn't a heist finale.")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#endif //DLC check
|
|
#endif
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Finalise_Heist_Crew_Stat_Increments_On_Mission_Pass(SP_MISSIONS paramMission)
|
|
IF IS_BIT_SET(g_sMissionStaticData[paramMission].settingsBitset, MF_INDEX_IS_HEIST)
|
|
INT iHeist = PRIVATE_Get_Heist_Index_From_Finale_Mission(paramMission)
|
|
|
|
IF iHeist != -1
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Finalising heist crew member stats as a heist passes.")
|
|
INT iHeistChoice = g_savedGlobals.sFlow.controls.intIDs[Get_Heist_Choice_FlowInt_For_Heist(iHeist)]
|
|
INT iCrewIndex
|
|
REPEAT g_sHeistChoiceData[iHeistChoice].iCrewSize iCrewIndex
|
|
CrewMember eCrewMember = g_savedGlobals.sHeistData.eSelectedCrew[iHeistChoice][iCrewIndex]
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sHeistData.iCrewDeadBitset, ENUM_TO_INT(eCrewMember))
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Finalising stats for ", GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Member_First_Name_Label(eCrewMember)), ".")
|
|
g_SavedGlobals.sHeistData.sCrewActiveData[eCrewMember].statsA = g_sHeistTempStats[iCrewIndex].statsA
|
|
g_SavedGlobals.sHeistData.sCrewActiveData[eCrewMember].statsB = g_sHeistTempStats[iCrewIndex].statsB
|
|
PRIVATE_Update_Crew_Member_Skill_Level_From_Stats(eCrewMember)
|
|
ENDIF
|
|
ENDREPEAT
|
|
ELSE
|
|
SCRIPT_ASSERT("FINALISE_HEIST_CREW_STAT_INCREASES_ON_MISSION_PASS: A mission is flagged with MF_IS_HEIST when it isn't a heist finale.")
|
|
ENDIF
|
|
ENDIF
|
|
IF g_bHeistTempCrewStatsPrimed
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Clearing heist crew member stat prime as we finalise stats.")
|
|
g_bHeistTempCrewStatsPrimed = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Increment_Single_Gunman_Stat_During_Heist(INT heistCrewIndex, CrewGunmanStat stat)
|
|
INT iOldValue = PRIVATE_Get_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
INT iMaxValue = PRIVATE_Get_Gunman_Stat_Max_Value(stat)
|
|
|
|
IF iOldValue < iMaxValue
|
|
INT iIncrement = ROUND(TO_FLOAT(iMaxValue) * 0.25)
|
|
INT iNewValue = iOldValue + iIncrement
|
|
|
|
IF iNewValue > iMaxValue
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Old:", iOldValue, " Adding:", iIncrement, " New:", iMaxValue, ". (Maxed)")
|
|
PRIVATE_Store_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), iMaxValue, g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
ELSE
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Old:", iOldValue, " Adding:", iIncrement, " New:", iNewValue, ".")
|
|
PRIVATE_Store_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), iNewValue, g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Increment_Single_Hacker_Stat_During_Heist(INT heistCrewIndex, CrewHackerStat stat)
|
|
INT iOldValue = PRIVATE_Get_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
INT iMaxValue = PRIVATE_Get_Hacker_Stat_Max_Value(stat)
|
|
|
|
IF iOldValue < iMaxValue
|
|
INT iIncrement = ROUND(TO_FLOAT(iMaxValue) * 0.25)
|
|
INT iNewValue = iOldValue + iIncrement
|
|
|
|
IF iNewValue > iMaxValue
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Old:", iOldValue, " Adding:", iIncrement, " New:", iMaxValue, ". (Maxed)")
|
|
PRIVATE_Store_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), iMaxValue, g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
ELSE
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Old:", iOldValue, " Adding:", iIncrement, " New:", iNewValue, ".")
|
|
PRIVATE_Store_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), iNewValue, g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Increment_Single_Driver_Stat_During_Heist(INT heistCrewIndex, CrewDriverStat stat)
|
|
INT iOldValue = PRIVATE_Get_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
INT iMaxValue = PRIVATE_Get_Driver_Stat_Max_Value(stat)
|
|
|
|
IF iOldValue < iMaxValue
|
|
INT iIncrement = ROUND(TO_FLOAT(iMaxValue) * 0.25)
|
|
INT iNewValue = iOldValue + iIncrement
|
|
|
|
IF iNewValue > iMaxValue
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Old:", iOldValue, " Adding:", iIncrement, " New:", iMaxValue, ". (Maxed)")
|
|
PRIVATE_Store_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), iMaxValue, g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
ELSE
|
|
CPRINTLN(DEBUG_HEIST, "<CREWSTAT> Old:", iOldValue, " Adding:", iIncrement, " New:", iNewValue, ".")
|
|
PRIVATE_Store_Crew_Member_Stat_At_Index_Local(ENUM_TO_INT(stat), iNewValue, g_sHeistTempStats[heistCrewIndex].statsA, g_sHeistTempStats[heistCrewIndex].statsB)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Set_Valid_Crew_Member_For_Heist_Choice_Slot(INT heistChoice, INT slot)
|
|
|
|
CrewMember eCrewRandom
|
|
BOOL bFoundMatch = FALSE
|
|
|
|
//Search for a random crew member of the correct type to fill this slot.
|
|
WHILE NOT bFoundMatch
|
|
eCrewRandom = INT_TO_ENUM(CrewMember, GET_RANDOM_INT_IN_RANGE(1, ENUM_TO_INT(CM_MAX_CREW_MEMBERS)))
|
|
bFoundMatch = TRUE
|
|
|
|
//Is this crew member the correct type?
|
|
IF g_sCrewMemberStaticData[eCrewRandom].type != g_sHeistChoiceData[heistChoice].eCrewType[slot]
|
|
bFoundMatch = FALSE
|
|
ENDIF
|
|
|
|
//Is this crew member unlocked?
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sHeistData.iCrewUnlockedBitset, ENUM_TO_INT(eCrewRandom))
|
|
bFoundMatch = FALSE
|
|
ENDIF
|
|
|
|
//Is this crew member dead?
|
|
IF IS_BIT_SET(g_savedGlobals.sHeistData.iCrewDeadBitset, ENUM_TO_INT(eCrewRandom))
|
|
bFoundMatch = FALSE
|
|
ENDIF
|
|
|
|
//Special case. Block using Chef on the Agency Heist.
|
|
IF eCrewRandom = CM_GUNMAN_G_CHEF_UNLOCK
|
|
IF heistChoice = HEIST_CHOICE_AGENCY_FIRETRUCK
|
|
OR heistChoice = HEIST_CHOICE_AGENCY_HELICOPTER
|
|
bFoundMatch = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Is this random crew member already used?
|
|
INT index
|
|
REPEAT g_sHeistChoiceData[heistChoice].iCrewSize index
|
|
IF index != slot
|
|
IF eCrewRandom = g_savedGlobals.sHeistData.eSelectedCrew[heistChoice][index]
|
|
bFoundMatch = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDWHILE
|
|
|
|
//Save selected crew member into relevant slot.
|
|
g_savedGlobals.sHeistData.eSelectedCrew[heistChoice][slot] = eCrewRandom
|
|
|
|
CPRINTLN(DEBUG_HEIST, "<CREW-VALID> Repaired crew member for ", PRIVATE_Get_Heist_Choice_Debug_String(heistChoice), " slot ", slot, " to ", GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Member_Name_Label(eCrewRandom)), ".")
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Reset_Heist_End_Screen_Crew_Member_Statuses(INT heistIndex)
|
|
|
|
INT index
|
|
REPEAT MAX_CREW_SIZE index
|
|
g_savedGlobals.sHeistData.sEndScreenData[heistIndex].eCrewStatus[index] = CMST_NOT_SET
|
|
g_savedGlobals.sHeistData.sEndScreenData[heistIndex].iCrewMemberTake[index] = 0
|
|
ENDREPEAT
|
|
|
|
ENDPROC
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//╞═══════════════════════════╡ Debug Crew Selector ╞═══════════════════════════╡
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
PROC PRIVATE_Configure_Crew_Selector_Heading_Text(INT r, INT g, INT b, INT a)
|
|
SET_TEXT_SCALE (0.33, 0.37)
|
|
SET_TEXT_WRAP(0.0, 1.0)
|
|
SET_TEXT_DROPSHADOW (0,0,0,0,0)
|
|
SET_TEXT_COLOUR(r,g,b,a)
|
|
SET_TEXT_EDGE (1,0,0,0,a)
|
|
SET_TEXT_PROPORTIONAL (TRUE)
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Configure_Crew_Selector_Normal_Text(INT r, INT g, INT b, INT a)
|
|
SET_TEXT_SCALE (0.26, 0.28)
|
|
SET_TEXT_WRAP(0.0, 1.0)
|
|
SET_TEXT_DROPSHADOW (0,0,0,0,0)
|
|
SET_TEXT_COLOUR(r,g,b,a)
|
|
SET_TEXT_EDGE (1,0,0,0,a)
|
|
SET_TEXT_PROPORTIONAL (TRUE)
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
ENDPROC
|
|
|
|
|
|
FUNC CrewMember PRIVATE_Get_Next_Member_In_Slot(DebugCrewSelector &selector, BOOL bScanForwards)
|
|
INT iCurrent = ENUM_TO_INT(g_savedGlobals.sHeistData.eSelectedCrew[selector.iLinkedHeistChoice][selector.iSelectedSlot])
|
|
|
|
WHILE TRUE
|
|
IF bScanForwards
|
|
iCurrent++
|
|
IF iCurrent > (ENUM_TO_INT(CM_MAX_CREW_MEMBERS)-1)
|
|
iCurrent = ENUM_TO_INT(CM_GUNMAN_G_GUSTAV)
|
|
ENDIF
|
|
ELSE
|
|
iCurrent --
|
|
IF iCurrent <= 0
|
|
iCurrent = ENUM_TO_INT(CM_MAX_CREW_MEMBERS)-1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Is this crew member unlocked?
|
|
IF IS_BIT_SET(g_savedGlobals.sHeistData.iCrewUnlockedBitset, iCurrent)
|
|
//Is this crew member still alive?
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sHeistData.iCrewDeadBitset, iCurrent)
|
|
//Special case. Block using Chef on the Agency Heist.
|
|
IF NOT (INT_TO_ENUM(CrewMember, iCurrent) = CM_GUNMAN_G_CHEF_UNLOCK AND (selector.iLinkedHeistChoice = HEIST_CHOICE_AGENCY_FIRETRUCK OR selector.iLinkedHeistChoice = HEIST_CHOICE_AGENCY_HELICOPTER))
|
|
//Is this crew member the correct type?
|
|
IF g_sCrewMemberStaticData[iCurrent].type = g_sHeistChoiceData[selector.iLinkedHeistChoice].eCrewType[selector.iSelectedSlot]
|
|
//Is this crew member selected in another slot?
|
|
BOOL bAlreadySelected = FALSE
|
|
INT index
|
|
REPEAT MAX_CREW_SIZE index
|
|
IF index <> selector.iSelectedSlot
|
|
IF ENUM_TO_INT(g_savedGlobals.sHeistData.eSelectedCrew[selector.iLinkedHeistChoice][index]) = iCurrent
|
|
bAlreadySelected = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
IF NOT bAlreadySelected
|
|
RETURN INT_TO_ENUM(CrewMember,iCurrent)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF iCurrent = ENUM_TO_INT(g_savedGlobals.sHeistData.eSelectedCrew[selector.iLinkedHeistChoice][selector.iSelectedSlot])
|
|
RETURN INT_TO_ENUM(CrewMember,iCurrent)
|
|
ENDIF
|
|
ENDWHILE
|
|
|
|
//Will never reach here.
|
|
RETURN CM_ERROR
|
|
ENDFUNC
|
|
|
|
|
|
|
|
PROC PRIVATE_Manage_Crew_Selector_Input(DebugCrewSelector &selector)
|
|
|
|
IF (GET_GAME_TIMER() - selector.iTimeLastSelectionChange) > 250
|
|
INT iStickLeftX, iStickLeftY, iTemp
|
|
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(iStickLeftX, iStickLeftY, iTemp, iTemp)
|
|
|
|
IF IS_BUTTON_JUST_PRESSED(PAD1, CROSS)
|
|
OR IS_BUTTON_JUST_PRESSED(PAD1, DPADRIGHT)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_RETURN)
|
|
OR iStickLeftX > 85
|
|
IF selector.iSelectedSlot >= (g_sHeistChoiceData[selector.iLinkedHeistChoice].iCrewSize - 1)
|
|
selector.bFinalised = TRUE
|
|
ELSE
|
|
selector.iSelectedSlot++
|
|
selector.iTimeLastSelectionChange = GET_GAME_TIMER()
|
|
ENDIF
|
|
ELIF IS_BUTTON_JUST_PRESSED(PAD1, CIRCLE)
|
|
OR IS_BUTTON_JUST_PRESSED(PAD1, DPADLEFT)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_BACK)
|
|
OR iStickLeftX < -85
|
|
selector.iSelectedSlot--
|
|
selector.iTimeLastSelectionChange = GET_GAME_TIMER()
|
|
IF selector.iSelectedSlot < 0
|
|
selector.iSelectedSlot = 0
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_BUTTON_JUST_PRESSED(PAD1, TRIANGLE)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_ESCAPE)
|
|
selector.bFinalised = TRUE
|
|
ENDIF
|
|
|
|
IF IS_BUTTON_JUST_PRESSED(PAD1, DPADDOWN)
|
|
OR iStickLeftY > 85
|
|
g_savedGlobals.sHeistData.eSelectedCrew[selector.iLinkedHeistChoice][selector.iSelectedSlot] = PRIVATE_Get_Next_Member_In_Slot(selector, TRUE)
|
|
selector.iTimeLastSelectionChange = GET_GAME_TIMER()
|
|
ELIF IS_BUTTON_JUST_PRESSED(PAD1, DPADUP)
|
|
OR iStickLeftY < -85
|
|
g_savedGlobals.sHeistData.eSelectedCrew[selector.iLinkedHeistChoice][selector.iSelectedSlot] = PRIVATE_Get_Next_Member_In_Slot(selector, FALSE)
|
|
selector.iTimeLastSelectionChange = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Draw_Crew_Selector_Slot(INT slotIndex, DebugCrewSelector &selector)
|
|
|
|
INT iHighlightIncrease = 0
|
|
FLOAT fSlotXPos = 0.58 - (g_sHeistChoiceData[selector.iLinkedHeistChoice].iCrewSize*0.16*0.5) + (slotIndex*0.16)
|
|
FLOAT fHalfStringWidth
|
|
TEXT_LABEL_31 tStringData
|
|
|
|
//Draw selector slot background.
|
|
IF selector.iSelectedSlot = slotIndex
|
|
iHighlightIncrease = 25
|
|
ENDIF
|
|
|
|
DRAW_RECT(fSlotXPos, 0.51, 0.12, 0.24, 10 + iHighlightIncrease, 10 + iHighlightIncrease, 10 + iHighlightIncrease, 200)
|
|
|
|
//Display slot type.
|
|
STRING strSlotType
|
|
SWITCH g_sHeistChoiceData[selector.iLinkedHeistChoice].eCrewType[slotIndex]
|
|
CASE CMT_GUNMAN
|
|
strSlotType = "Gunman"
|
|
BREAK
|
|
CASE CMT_DRIVER
|
|
strSlotType = "Driver"
|
|
BREAK
|
|
CASE CMT_HACKER
|
|
strSlotType = "Hacker"
|
|
BREAK
|
|
|
|
DEFAULT
|
|
SCRIPT_ASSERT("PRIVATE_Draw_Crew_Selector_Slot: Invalid crew member type set for heist choice slot. Bug BenR")
|
|
BREAK
|
|
ENDSWITCH
|
|
PRIVATE_Configure_Crew_Selector_Heading_Text(225,225,225,180)
|
|
fHalfStringWidth = GET_STRING_WIDTH_WITH_STRING("STRING", strSlotType) * 0.5
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(fSlotXPos-fHalfStringWidth, 0.635, "STRING", strSlotType)
|
|
|
|
CrewMember eSelectedCrew = g_savedGlobals.sHeistData.eSelectedCrew[selector.iLinkedHeistChoice][slotIndex]
|
|
|
|
//Display selected crew member info.
|
|
IF eSelectedCrew = CM_ERROR
|
|
SCRIPT_ASSERT("PRIVATE_Draw_Crew_Selector_Slot: Slot has an invalid crew member selected. Bug BenR")
|
|
ELIF eSelectedCrew = CM_EMPTY
|
|
//Display empty slot info.
|
|
PRIVATE_Configure_Crew_Selector_Normal_Text(200+iHighlightIncrease,200+iHighlightIncrease,200+iHighlightIncrease,180)
|
|
fHalfStringWidth = GET_STRING_WIDTH_WITH_STRING("STRING", "-EMPTY-") * 0.5
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(fSlotXPos-fHalfStringWidth, 0.50, "STRING", "-EMPTY-")
|
|
ELSE
|
|
//Display crewmember specific info.
|
|
//Name.
|
|
PRIVATE_Configure_Crew_Selector_Normal_Text(200+iHighlightIncrease,200+iHighlightIncrease,200+iHighlightIncrease,180)
|
|
tStringData = "NAME: "
|
|
tStringData += GET_STRING_FROM_TEXT_FILE(PRIVATE_Get_Crew_Member_Name_Label(eSelectedCrew))
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(fSlotXPos-0.05, 0.435, "STRING", tStringData)
|
|
|
|
//Skill.
|
|
PRIVATE_Configure_Crew_Selector_Normal_Text(200+iHighlightIncrease,200+iHighlightIncrease,200+iHighlightIncrease,180)
|
|
tStringData = "SKILL: "
|
|
SWITCH g_savedGlobals.sHeistData.sCrewActiveData[eSelectedCrew].skill
|
|
CASE CMSK_BAD
|
|
tStringData += "Poor"
|
|
BREAK
|
|
CASE CMSK_MEDIUM
|
|
tStringData += "Average"
|
|
BREAK
|
|
CASE CMSK_GOOD
|
|
tStringData += "Good"
|
|
BREAK
|
|
ENDSWITCH
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(fSlotXPos-0.05, 0.475, "STRING", tStringData)
|
|
|
|
//Cut.
|
|
PRIVATE_Configure_Crew_Selector_Normal_Text(200+iHighlightIncrease,200+iHighlightIncrease,200+iHighlightIncrease,180)
|
|
tStringData = "JOB CUT: "
|
|
tStringData += g_sCrewMemberStaticData[eSelectedCrew].jobCut
|
|
tStringData += "%"
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(fSlotXPos-0.05, 0.555, "STRING", tStringData)
|
|
|
|
// //Accuracy.
|
|
// PRIVATE_Configure_Crew_Selector_Normal_Text(200+iHighlightIncrease,200+iHighlightIncrease,200+iHighlightIncrease,180)
|
|
// tStringData = "ACCURACY: "
|
|
// tStringData += g_sCrewMemberData[eSelectedCrew].accuracy
|
|
// tStringData += "%"
|
|
// DISPLAY_TEXT_WITH_LITERAL_STRING(fSlotXPos-0.05, 0.515, "STRING", tStringData)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Draw_Crew_Selector_Foreground(INT heistIndex, DebugCrewSelector &selector)
|
|
INT iSlotIndex
|
|
FLOAT fHalfStringWidth
|
|
TEXT_LABEL_63 tTitle
|
|
|
|
SWITCH heistIndex
|
|
CASE HEIST_JEWEL
|
|
tTitle = "DEBUG CREW - The Jewel Store Job"
|
|
BREAK
|
|
CASE HEIST_DOCKS
|
|
tTitle = "DEBUG CREW - The Port of LS Heist"
|
|
BREAK
|
|
CASE HEIST_RURAL_BANK
|
|
tTitle = "DEBUG CREW - The Paleto Score"
|
|
BREAK
|
|
CASE HEIST_AGENCY
|
|
tTitle = "DEBUG CREW - The Agency Heist"
|
|
BREAK
|
|
CASE HEIST_FINALE
|
|
tTitle = "DEBUG CREW - The Big Score"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//Draw debug selector title.
|
|
PRIVATE_Configure_Crew_Selector_Heading_Text(245,245,245,180)
|
|
fHalfStringWidth = GET_STRING_WIDTH_WITH_STRING("STRING", tTitle)*0.5
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(0.5-fHalfStringWidth, 0.345, "STRING", tTitle)
|
|
|
|
IF g_sHeistChoiceData[selector.iLinkedHeistChoice].iCrewSize = 0
|
|
PRIVATE_Configure_Crew_Selector_Heading_Text(200,200,200,160)
|
|
fHalfStringWidth = GET_STRING_WIDTH_WITH_STRING("STRING", "-No crew to select-")*0.5
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(0.5-fHalfStringWidth, 0.5, "STRING", "-No crew to select-")
|
|
ELSE
|
|
REPEAT g_sHeistChoiceData[selector.iLinkedHeistChoice].iCrewSize iSlotIndex
|
|
PRIVATE_Draw_Crew_Selector_Slot(iSlotIndex, selector)
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_Draw_Crew_Selector_Background(DebugCrewSelector &selector)
|
|
//Wash screen black.
|
|
DRAW_RECT(0.5,0.5,1.0,1.0,0,0,0,255)
|
|
|
|
//Get screen aspect ratio.
|
|
INT iScreenX
|
|
INT iScreenY
|
|
GET_SCREEN_RESOLUTION(iScreenX,iScreenY)
|
|
FLOAT fAspectRatio = TO_FLOAT(iScreenY) / TO_FLOAT(iScreenX)
|
|
|
|
//Calculate width required to fit in the required number of selector slots.
|
|
FLOAT fSelectorWidth = 0.16*g_sHeistChoiceData[selector.iLinkedHeistChoice].iCrewSize
|
|
|
|
IF fSelectorWidth < 0.22
|
|
fSelectorWidth = 0.22
|
|
ENDIF
|
|
|
|
DRAW_RECT(0.5,0.5,fSelectorWidth,0.35,25,25,25,220)
|
|
DRAW_RECT( 0.5,0.5,
|
|
fSelectorWidth + (0.012 * fAspectRatio),
|
|
0.35 + 0.012,
|
|
25,25,25,100)
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|