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

1131 lines
45 KiB
Scheme
Executable File

// minigame_UIInputs.sch
USING "minigames_helpers.sch"
CONST_INT MAX_INST_BUTTONS_PER_LABEL 2
CONST_INT MAX_INST_BUTTONS 4
CONST_INT ANALOG_OFFSET 128
ENUM MINIGAME_INST_ORIENTATION
SF_UI_Horizontal = 0,
SF_UI_Vertical = 1
ENDENUM
STRUCT SCRIPT_SCALEFORM_UI
SCALEFORM_INDEX sfMov = NULL
INT iBools = 0
MINIGAME_INST_ORIENTATION eOrient = SF_UI_Horizontal
// Can have 2 buttons per label.
CONTROL_ACTION eInputs[MAX_INST_BUTTONS*MAX_INST_BUTTONS_PER_LABEL]
STRING eButtons[MAX_INST_BUTTONS*MAX_INST_BUTTONS_PER_LABEL]
STRING sLabels[MAX_INST_BUTTONS]
ENDSTRUCT
ENUM SCRIPT_SCALEFORM_BOOLS
SF_UI_LOADED = BIT0,
SF_UI_CREATED_ButtonDown = BIT1,
SF_UI_CREATED_ButtonUp = BIT2,
SF_UI_IsForMenu = BIT3
ENDENUM
/// PURPOSE:
/// Checks to see if the script scaleform UI passed in is valid or not, also checks to see if it's loaded..
/// RETURNS:
/// TRUE if valid and loaded. Also sets an internal flag that says the mov is loaded.
FUNC BOOL IS_SCRIPT_SCALEFORM_UI_VALID_AND_LOADED(SCRIPT_SCALEFORM_UI & sfMovieStruct)
IF (sfMovieStruct.sfMov <> NULL)
IF HAS_SCALEFORM_MOVIE_LOADED(sfMovieStruct.sfMov)
SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_LOADED)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Sets up the instructions for use
/// NOTE, iNumCols is a funny param. If it's set to 0, it makes one horizontal bar of commands. If it's set to 1, it
/// draws 1 vertical bar.
/// RETURNS:
/// The movie that has been requested
PROC SETUP_MINIGAME_INSTRUCTIONS(SCRIPT_SCALEFORM_UI & sfMovieStruct, BOOL bVertical,
STRING eButton1 = NULL, STRING sLabel1 = NULL,
STRING eButton2 = NULL, STRING sLabel2 = NULL,
STRING eButton3 = NULL, STRING sLabel3 = NULL,
STRING eButton4 = NULL, STRING sLabel4 = NULL)
IF (sfMovieStruct.sfMov = NULL)
sfMovieStruct.sfMov = REQUEST_SCALEFORM_MOVIE_INSTANCE("instructional_buttons")
ENDIF
sfMovieStruct.iBools = 0
sfMovieStruct.eInputs[0] = MAX_INPUTS
sfMovieStruct.eInputs[1] = MAX_INPUTS
sfMovieStruct.eInputs[2] = MAX_INPUTS
sfMovieStruct.eInputs[3] = MAX_INPUTS
sfMovieStruct.eInputs[4] = MAX_INPUTS
sfMovieStruct.eInputs[5] = MAX_INPUTS
sfMovieStruct.eInputs[6] = MAX_INPUTS
sfMovieStruct.eInputs[7] = MAX_INPUTS
sfMovieStruct.eButtons[0] = eButton1
sfMovieStruct.eButtons[1] = eButton2
sfMovieStruct.eButtons[2] = eButton3
sfMovieStruct.eButtons[3] = eButton4
sfMovieStruct.eButtons[4] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.eButtons[5] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.eButtons[6] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.eButtons[7] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.sLabels[0] = sLabel1
sfMovieStruct.sLabels[1] = sLabel2
sfMovieStruct.sLabels[2] = sLabel3
sfMovieStruct.sLabels[3] = sLabel4
IF bVertical
sfMovieStruct.eOrient = SF_UI_Vertical
ELSE
sfMovieStruct.eOrient = SF_UI_Horizontal
ENDIF
IF HAS_SCALEFORM_MOVIE_LOADED(sfMovieStruct.sfMov)
SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_LOADED)
ENDIF
ENDPROC
/// PURPOSE:
/// Sets up the instructions for use
/// NOTE, iNumCols is a funny param. If it's set to 0, it makes one horizontal bar of commands. If it's set to 1, it
/// draws 1 vertical bar.
/// RETURNS:
/// The movie that has been requested
PROC SETUP_MINIGAME_INSTRUCTION_INPUTS(SCRIPT_SCALEFORM_UI & sfMovieStruct, BOOL bVertical,
CONTROL_ACTION eInput1 = MAX_INPUTS, STRING sLabel1 = NULL,
CONTROL_ACTION eInput2 = MAX_INPUTS, STRING sLabel2 = NULL,
CONTROL_ACTION eInput3 = MAX_INPUTS, STRING sLabel3 = NULL,
CONTROL_ACTION eInput4 = MAX_INPUTS, STRING sLabel4 = NULL)
IF (sfMovieStruct.sfMov = NULL)
sfMovieStruct.sfMov = REQUEST_SCALEFORM_MOVIE_INSTANCE("instructional_buttons")
ENDIF
sfMovieStruct.iBools = 0
sfMovieStruct.eInputs[0] = eInput1
sfMovieStruct.eInputs[1] = eInput2
sfMovieStruct.eInputs[2] = eInput3
sfMovieStruct.eInputs[3] = eInput4
sfMovieStruct.eInputs[4] = MAX_INPUTS
sfMovieStruct.eInputs[5] = MAX_INPUTS
sfMovieStruct.eInputs[6] = MAX_INPUTS
sfMovieStruct.eInputs[7] = MAX_INPUTS
sfMovieStruct.eButtons[0] = PICK_STRING(eInput1 != MAX_INPUTS, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, eInput1), "")
sfMovieStruct.eButtons[1] = PICK_STRING(eInput2 != MAX_INPUTS, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, eInput2), "")
sfMovieStruct.eButtons[2] = PICK_STRING(eInput3 != MAX_INPUTS, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, eInput3), "")
sfMovieStruct.eButtons[3] = PICK_STRING(eInput4 != MAX_INPUTS, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, eInput4), "")
sfMovieStruct.eButtons[4] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.eButtons[5] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.eButtons[6] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.eButtons[7] = NULL//INT_TO_ENUM(TEXT_LABEL_63, -1)
sfMovieStruct.sLabels[0] = sLabel1
sfMovieStruct.sLabels[1] = sLabel2
sfMovieStruct.sLabels[2] = sLabel3
sfMovieStruct.sLabels[3] = sLabel4
IF bVertical
sfMovieStruct.eOrient = SF_UI_Vertical
ELSE
sfMovieStruct.eOrient = SF_UI_Horizontal
ENDIF
IF HAS_SCALEFORM_MOVIE_LOADED(sfMovieStruct.sfMov)
SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_LOADED)
ENDIF
ENDPROC
/// PURPOSE:
/// Sets a set of MINIGAME_INSTRUCTIONS as part of a UI, so that they're shifted and attached to that UI.
PROC SET_INSTRUCTIONS_ATTACHED_TO_MINIGAME_UI(SCRIPT_SCALEFORM_UI & sfMovieStruct, BOOL bIsAttached = TRUE)
IF bIsAttached
SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_IsForMenu)
sfMovieStruct.eOrient = SF_UI_Horizontal
ELSE
CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_IsForMenu)
ENDIF
ENDPROC
/// PURPOSE:
/// Pushes a minigame instruction into a movie.
/// PARAMS:
/// instrToAdd - the butotn press to give the instruction
/// labelToAdd - the label to give the instruction
/// bInFirstEmpty - If this is TRUE, it ignores iAtIndex, and inserts it into the first empty slot (where the instruction is still null)
/// iAtSlot - If this is > 0, and bInFirstEmpty = FALSE, it overwrites an instruction at the given slot. If that slot is empty, it will fill it in.
PROC INSERT_MINIGAME_INSTRUCTION(SCRIPT_SCALEFORM_UI & sfMovieStruct, STRING instrToAdd, STRING labelToAdd, BOOL bInFirstEmpty = TRUE, INT iAtSlot = -1)
IF NOT IS_SCRIPT_SCALEFORM_UI_VALID_AND_LOADED(sfMovieStruct)
DEBUG_MESSAGE("INSERT_MINIGAME_INSTRUCTION failing.")
EXIT
ENDIF
CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
INT index
IF bInFirstEmpty
REPEAT MAX_INST_BUTTONS index
IF IS_STRING_NULL_OR_EMPTY(sfMovieStruct.sLabels[index])
sfMovieStruct.eInputs[index] = MAX_INPUTS
sfMovieStruct.eButtons[index] = instrToAdd
sfMovieStruct.sLabels[index] = labelToAdd
ENDIF
ENDREPEAT
ELSE
// Check to see what iAtIndex is, that's where the instruction is going.
IF (iAtSlot > 0)
sfMovieStruct.eInputs[iAtSlot] = MAX_INPUTS
sfMovieStruct.eButtons[iAtSlot] = instrToAdd
sfMovieStruct.sLabels[iAtSlot] = labelToAdd
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Pushes a minigame instruction into a movie.
/// PARAMS:
/// instrToAdd - the butotn press to give the instruction
/// labelToAdd - the label to give the instruction
/// bInFirstEmpty - If this is TRUE, it ignores iAtIndex, and inserts it into the first empty slot (where the instruction is still null)
/// iAtSlot - If this is > 0, and bInFirstEmpty = FALSE, it overwrites an instruction at the given slot. If that slot is empty, it will fill it in.
PROC INSERT_MINIGAME_INSTRUCTION_INPUT(SCRIPT_SCALEFORM_UI & sfMovieStruct, CONTROL_ACTION inputToAdd, STRING labelToAdd, BOOL bInFirstEmpty = TRUE, INT iAtSlot = -1)
IF NOT IS_SCRIPT_SCALEFORM_UI_VALID_AND_LOADED(sfMovieStruct)
DEBUG_MESSAGE("INSERT_MINIGAME_INSTRUCTION failing.")
EXIT
ENDIF
CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
INT index
IF bInFirstEmpty
REPEAT MAX_INST_BUTTONS index
IF IS_STRING_NULL_OR_EMPTY(sfMovieStruct.sLabels[index])
sfMovieStruct.eInputs[index] = inputToAdd
sfMovieStruct.eButtons[index] = PICK_STRING(inputToAdd != MAX_INPUTS, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, inputToAdd), "")
sfMovieStruct.sLabels[index] = labelToAdd
ENDIF
ENDREPEAT
ELSE
// Check to see what iAtIndex is, that's where the instruction is going.
IF (iAtSlot > 0)
sfMovieStruct.eInputs[iAtSlot] = inputToAdd
sfMovieStruct.eButtons[iAtSlot] = PICK_STRING(inputToAdd != MAX_INPUTS, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, inputToAdd), "")
sfMovieStruct.sLabels[iAtSlot] = labelToAdd
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Handles a single use context using the scaleform UI
/// USES ONLY TRIGGERBUTTON and TRIGGERLABEL
/// PARAMS:
/// sfMovieStruct - The VALID movie.
/// RETURNS:
/// TRUE if it was pressed. FALSE if not.
PROC UPDATE_SIMPLE_INSTRUCTION(SCRIPT_SCALEFORM_UI & sfMovieStruct)
IF NOT IS_SCRIPT_SCALEFORM_UI_VALID_AND_LOADED(sfMovieStruct)
DEBUG_MESSAGE("UPDATE_SIMPLE_INSTRUCTION failing.")
EXIT
ENDIF
// Always draw the prompt and monitor input.
IF IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_IsForMenu)
DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.39,0.467,1.0,1.0,255,255,255,0)
ELSE
DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.5,0.5,1.0,1.0,255,255,255,0)
ENDIF
// If controls have changed, re-calculate button strings
IF HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL)
INT index
REPEAT COUNT_OF(sfMovieStruct.eInputs) index
IF sfMovieStruct.eInputs[index] != MAX_INPUTS
sfMovieStruct.eButtons[index] = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, sfMovieStruct.eInputs[index])
ENDIF
ENDREPEAT
CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
ENDIF
// If we're loaded, this is a simple instruction. OOnly has a single button down. Track that.
IF NOT IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_CLEAR_SPACE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(200.0)
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT_EMPTY")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sfMovieStruct.eButtons[0])
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[0])
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eOrient)))
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_BACKGROUND_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
END_SCALEFORM_MOVIE_METHOD()
SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
ENDIF
ENDPROC
/// PURPOSE:
/// Handles a single use context using the scaleform UI
/// USES ONLY TRIGGERBUTTON and TRIGGERLABEL
/// PARAMS:
/// sfMovieStruct - The VALID movie.
/// RETURNS:
/// TRUE if it was pressed. FALSE if not.
PROC UPDATE_MINIGAME_INSTRUCTIONS_NOW(SCRIPT_SCALEFORM_UI & sfMovieStruct)
IF NOT IS_SCRIPT_SCALEFORM_UI_VALID_AND_LOADED(sfMovieStruct)
DEBUG_MESSAGE("UPDATE_SIMPLE_INSTRUCTION failing.")
EXIT
ENDIF
INT index = 0
// Always draw the prompt and monitor input.
IF IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_IsForMenu)
DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.39,0.467,1.0,1.0,255,255,255,0)
ELSE
DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.5,0.5,1.0,1.0,255,255,255,0)
ENDIF
// If controls have changed, re-calculate button strings
IF HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL)
REPEAT COUNT_OF(sfMovieStruct.eInputs) index
IF sfMovieStruct.eInputs[index] != MAX_INPUTS
sfMovieStruct.eButtons[index] = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, sfMovieStruct.eInputs[index])
ENDIF
ENDREPEAT
CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
ENDIF
// If we're loaded, this is a simple instruction. OOnly has a single button down. Track that.
IF NOT IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_CLEAR_SPACE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(200.0)
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT_EMPTY")
END_SCALEFORM_MOVIE_METHOD()
FLOAT fSlot = 0
REPEAT MAX_INST_BUTTONS index
IF NOT IS_STRING_NULL_OR_EMPTY(sfMovieStruct.sLabels[index])
// May need to draw multi labels if we've got a multi button in this slot.
IF (NOT IS_STRING_NULL_OR_EMPTY(sfMovieStruct.eButtons[index + MAX_INST_BUTTONS]))
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sfMovieStruct.eButtons[index + MAX_INST_BUTTONS])
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sfMovieStruct.eButtons[index])
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[index])
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sfMovieStruct.eButtons[index])
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[index])
END_SCALEFORM_MOVIE_METHOD()
ENDIF
// Advance a slot.
fSlot += 1
ENDIF
ENDREPEAT
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eOrient)))
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_BACKGROUND_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
END_SCALEFORM_MOVIE_METHOD()
SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
ENDIF
ENDPROC
/// PURPOSE:
/// Always draws the subset of up to 8 instructions, doesn't require a button to be held down to display the menu.
/// Basically the same as DRAW_MINIGAME_INSTRUCTIONS, but always creates the menu instead of waiting for a button.
PROC DRAW_MINIGAME_INSTRUCTIONS_NOW(SCRIPT_SCALEFORM_UI & sfMovieStruct)
IF NOT IS_SCRIPT_SCALEFORM_UI_VALID_AND_LOADED(sfMovieStruct)
DEBUG_MESSAGE("DRAW_MINIGAME_INSTRUCTIONS_NOW failing.")
EXIT
ENDIF
// Always draw.
// IF IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_IsForMenu)
// DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.39,0.467,1.0,1.0,255,255,255,0)
// ELSE
// DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.5,0.5,1.0,1.0,255,255,255,0)
// ENDIF
DRAW_SCALEFORM_MOVIE_FULLSCREEN(sfMovieStruct.sfMov,255,255,255,0)
// If controls have changed, re-calculate button strings
IF HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL)
INT index
REPEAT COUNT_OF(sfMovieStruct.eInputs) index
IF sfMovieStruct.eInputs[index] != MAX_INPUTS
sfMovieStruct.eButtons[index] = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, sfMovieStruct.eInputs[index])
ENDIF
ENDREPEAT
CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
ENDIF
// Only need to call this block once.
IF NOT IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_CLEAR_SPACE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(200.0)
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT_EMPTY")
END_SCALEFORM_MOVIE_METHOD()
FLOAT fSlot = 0
INT index
REPEAT MAX_INST_BUTTONS index
// If there's a 2nd instruction in that slot, print that. Otherwise, print nothing.
IF NOT IS_STRING_NULL_OR_EMPTY(sfMovieStruct.sLabels[index])
IF NOT IS_STRING_NULL_OR_EMPTY(sfMovieStruct.eButtons[index + MAX_INST_BUTTONS])
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sfMovieStruct.eButtons[index + MAX_INST_BUTTONS])
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sfMovieStruct.eButtons[index])
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[index])
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(sfMovieStruct.eButtons[index])
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[index])
END_SCALEFORM_MOVIE_METHOD()
ENDIF
fSlot += 1
ENDIF
ENDREPEAT
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eOrient)))
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_BACKGROUND_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
END_SCALEFORM_MOVIE_METHOD()
SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
ENDIF
ENDPROC
/// PURPOSE:
/// Draws up to 8 minigame instructions on screen. Hides until a button is pressed, then pops up all the instructions while it's pressed.
/// PARAMS:
/// sfMovieStruct - the movie struct
//PROC DRAW_MINIGAME_INSTRUCTIONS(SCRIPT_SCALEFORM_UI & sfMovieStruct)
// IF NOT IS_SCRIPT_SCALEFORM_UI_VALID_AND_LOADED(sfMovieStruct)
// DEBUG_MESSAGE("DRAW_MINIGAME_INSTRUCTIONS failing.")
// EXIT
// ENDIF
//
// // Always draw.
// IF IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_IsForMenu)
// DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.39,0.467,1.0,1.0,255,255,255,0)
// ELSE
// DRAW_SCALEFORM_MOVIE(sfMovieStruct.sfMov, 0.5,0.5,1.0,1.0,255,255,255,0)
// ENDIF
//
// IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, padButton)
// // If the button is pressed, we need to call the new setup, but only once!
// IF NOT IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_CREATED_ButtonDown)
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_CLEAR_SPACE")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(200.0)
// END_SCALEFORM_MOVIE_METHOD()
//
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT_EMPTY")
// END_SCALEFORM_MOVIE_METHOD()
//
// FLOAT fSlot = 0
// INT index
// FOR index = 1 TO MAX_INST_BUTTONS - 1
// IF NOT IS_STRING_NULL_OR_EMPTY(sfMovieStruct.sLabels[index])
// IF (ENUM_TO_INT(sfMovieStruct.eButtons[index + MAX_INST_BUTTONS]) > -1)
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eButtons[index + MAX_INST_BUTTONS])))
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eButtons[index])))
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[index])
// END_SCALEFORM_MOVIE_METHOD()
//
// ELSE
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eButtons[index])))
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[index])
// END_SCALEFORM_MOVIE_METHOD()
// ENDIF
//
// fSlot += 1
// ENDIF
// ENDFOR
//
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eOrient)))
// END_SCALEFORM_MOVIE_METHOD()
//
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_BACKGROUND_COLOUR")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
// END_SCALEFORM_MOVIE_METHOD()
//
// SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonDown)
// CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
// ENDIF
// ELSE
// // If the button is not set, then we need to call the enw setup, but only once!
// IF NOT IS_BITMASK_AS_ENUM_SET(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_CLEAR_SPACE")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(200.0)
// END_SCALEFORM_MOVIE_METHOD()
//
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT_EMPTY")
// END_SCALEFORM_MOVIE_METHOD()
//
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_DATA_SLOT")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eButtons[0])))
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sfMovieStruct.sLabels[0])
// END_SCALEFORM_MOVIE_METHOD()
//
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "DRAW_INSTRUCTIONAL_BUTTONS")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(sfMovieStruct.eOrient)))
// END_SCALEFORM_MOVIE_METHOD()
//
// BEGIN_SCALEFORM_MOVIE_METHOD(sfMovieStruct.sfMov, "SET_BACKGROUND_COLOUR")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0)
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(80)
// END_SCALEFORM_MOVIE_METHOD()
//
// SET_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonUp)
// CLEAR_BITMASK_AS_ENUM(sfMovieStruct.iBools, SF_UI_CREATED_ButtonDown)
// ENDIF
// ENDIF
//
//ENDPROC
/// PURPOSE:
/// Cleans the script scaleform UI struct. Should be called before re-use.
PROC CLEANUP_MINIGAME_INSTRUCTIONS(SCRIPT_SCALEFORM_UI & sfMovieStruct)
IF (sfMovieStruct.sfMov <> NULL)
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(sfMovieStruct.sfMov)
sfMovieStruct.sfMov = NULL
ENDIF
sfMovieStruct.iBools = 0
sfMovieStruct.eOrient = SF_UI_Horizontal
sfMovieStruct.eButtons[0] = NULL
sfMovieStruct.eButtons[1] = NULL
sfMovieStruct.eButtons[2] = NULL
sfMovieStruct.eButtons[3] = NULL
sfMovieStruct.eButtons[4] = NULL
sfMovieStruct.eButtons[5] = NULL
sfMovieStruct.eButtons[6] = NULL
sfMovieStruct.eButtons[7] = NULL
sfMovieStruct.eInputs[0] = MAX_INPUTS
sfMovieStruct.eInputs[1] = MAX_INPUTS
sfMovieStruct.eInputs[2] = MAX_INPUTS
sfMovieStruct.eInputs[3] = MAX_INPUTS
sfMovieStruct.eInputs[4] = MAX_INPUTS
sfMovieStruct.eInputs[5] = MAX_INPUTS
sfMovieStruct.eInputs[6] = MAX_INPUTS
sfMovieStruct.eInputs[7] = MAX_INPUTS
sfMovieStruct.sLabels[0] = NULL
sfMovieStruct.sLabels[1] = NULL
sfMovieStruct.sLabels[2] = NULL
sfMovieStruct.sLabels[3] = NULL
ENDPROC
///////////////////////
/// INTRO UI ///
///////////////////////
PROC INTROUI_SET_DATA_SLOT_2STRINGS(SCALEFORM_INDEX introUI, INT iSlot1, INT iSlot2, STRING Label, STRING Value)
IF IS_STRING_NULL(Label)
Label = ""
ENDIF
IF IS_STRING_NULL(Value)
Value = ""
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(Value)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(Label)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_SET_DATA_SLOT(SCALEFORM_INDEX introUI, INT iSlot1, INT iSlot2, INT iSlot3, FLOAT fSlot4, STRING sText)
IF IS_STRING_NULL(sText)
sText = ""
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot3)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot4)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sText)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
/// PURPOSE:
/// This is for UI slots that need an extra data slot (currently, TIME.)
PROC INTROUI_SET_DATA_SLOT_5(SCALEFORM_INDEX introUI, INT iSlot1, INT iSlot2, INT iSlot3, FLOAT fSlot4, FLOAT fSlot5, STRING sText)
IF IS_STRING_NULL(sText)
sText = ""
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot3)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot4)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSlot5)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sText)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_SET_MISSION_TITLE(SCALEFORM_INDEX introUI, STRING sTitle = NULL, STRING sText = NULL)
IF IS_STRING_NULL(sTitle)
sTitle = ""
ENDIF
IF IS_STRING_NULL(sText)
sText = ""
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_MISSION_TITLE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sText)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_SET_MISSION_TITLE_WITH_SUBSTRING(SCALEFORM_INDEX introUI, STRING sTitle = NULL, STRING sText = NULL, STRING sTextInsert = NULL)
IF IS_STRING_NULL(sTitle)
sTitle = ""
ENDIF
IF IS_STRING_NULL(sText)
sText = ""
ENDIF
IF IS_STRING_NULL(sTextInsert)
sTextInsert = ""
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_MISSION_TITLE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sText)
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(sTextInsert)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_SET_MISSION_BG_COLOUR(SCALEFORM_INDEX introUI, INT iRed = 214, INT iGreen = 189, INT iBlue = 97)
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_MISSION_BG_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRed)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iGreen)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBlue)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_SET_MISSION_SUBTITLE_COLOUR(SCALEFORM_INDEX introUI, INT iRed = 0, INT iGreen = 0, INT iBlue = 0)
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_MISSION_SUBTITLE_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRed)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iGreen)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBlue)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_SET_MEDAL(SCALEFORM_INDEX introUI, INT iMedal = 0)
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_MEDAL")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMedal)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_SET_TOTAL_STRING(SCALEFORM_INDEX introUI, STRING sTotalString)
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_TOTAL")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(-99)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(-99)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTotalString)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_DRAW_MENU_LIST(SCALEFORM_INDEX introUI)
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "DRAW_MENU_LIST")
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC INTROUI_HIGHLIGHT_ITEM(SCALEFORM_INDEX introUI, INT iHighlight = 0, BOOL bHighlight = FALSE)
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "HIGHLIGHT_ITEM")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iHighlight)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bHighlight)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
FUNC SCALEFORM_INDEX REQUEST_INTRO_UI()
RETURN REQUEST_SCALEFORM_MOVIE("mission_complete")
ENDFUNC
PROC SETUP_INTRO_UI_BASIC(SCALEFORM_INDEX introUI, STRING sTitle, STRING sDetails)
INTROUI_SET_MISSION_TITLE(introUI, sTitle, sDetails)
INTROUI_SET_MISSION_BG_COLOUR(introUI, 214, 189, 97)
INTROUI_SET_MISSION_SUBTITLE_COLOUR(introUI, 0, 0, 0)
INTROUI_SET_MEDAL(introUI, 0)
INTROUI_DRAW_MENU_LIST(introUI)
INTROUI_HIGHLIGHT_ITEM(introUI, 0)
ENDPROC
PROC SETUP_INTRO_UI_WITH_SUBSTRING(SCALEFORM_INDEX introUI, STRING sTitle, STRING sDetails, STRING sTextInsert)
INTROUI_SET_MISSION_TITLE_WITH_SUBSTRING(introUI, sTitle, sDetails, sTextInsert)
INTROUI_SET_MISSION_BG_COLOUR(introUI, 214, 189, 97)
INTROUI_SET_MISSION_SUBTITLE_COLOUR(introUI, 0, 0, 0)
INTROUI_SET_MEDAL(introUI, 0)
INTROUI_DRAW_MENU_LIST(introUI)
INTROUI_HIGHLIGHT_ITEM(introUI, 0)
ENDPROC
PROC ADD_INTRO_UI_DATA_ITEM(SCALEFORM_INDEX introUI, STRING sItem, INT iSlot, INT iType, INT iCheckboxStatus, INT iData)
INTROUI_SET_DATA_SLOT(introUI, iSlot, iCheckboxStatus, iType, TO_FLOAT(iData), sItem)
ENDPROC
PROC ADD_INTRO_UI_LIST_ITEM(SCALEFORM_INDEX introUI, STRING sItem, INT iSlot)
INTROUI_SET_DATA_SLOT(introUI, iSlot, 0, 7, 0.0, sItem)
ENDPROC
PROC CLEAR_INTRO_UI_SLOTS(SCALEFORM_INDEX introUI)
BEGIN_SCALEFORM_MOVIE_METHOD(introUI, "SET_DATA_SLOT_EMPTY")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC SELECT_INTRO_UI_LIST_ITEM(SCALEFORM_INDEX introUI, INT iSlot, BOOL bHighlight)
INTROUI_HIGHLIGHT_ITEM(introUI, iSlot, bHighlight)
ENDPROC
PROC DISPLAY_INTRO_UI(SCALEFORM_INDEX introUI)
DRAW_SCALEFORM_MOVIE(introUI, 0.1632, 0.307, 0.225, 0.5111, 255, 255, 255, 0)
ENDPROC
PROC CLEANUP_INTRO_UI(SCALEFORM_INDEX introUI)
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(introUI)
ENDPROC
///////////////////////
/// QUIT UI ///
///////////////////////
PROC QUITUI_SET_TEXT(SCALEFORM_INDEX quitUI, STRING sTitle = NULL, STRING sText = NULL)
IF IS_STRING_NULL(sTitle)
sTitle = ""
ENDIF
IF IS_STRING_NULL(sText)
sText = ""
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(quitUI, "SET_TEXT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sText)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
/// PURPOSE:
/// Set the quit text with a title, all text, and substring with a number.
/// PARAMS:
/// quitUI -
/// sTitle -
/// sText -
/// iNum -
PROC QUITUI_SET_TEXT_WITH_NUMBER_SUBSTRING(SCALEFORM_INDEX quitUI, STRING sTitle = NULL, STRING sText = NULL, INT iNum = -1)
IF IS_STRING_NULL(sTitle)
sTitle = ""
ENDIF
IF IS_STRING_NULL(sText)
sText = ""
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(quitUI, "SET_TEXT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sText)
ADD_TEXT_COMPONENT_INTEGER(iNum)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC QUITUI_TRANSITION_IN(SCALEFORM_INDEX quitUI, INT iMSIn = 0)
BEGIN_SCALEFORM_MOVIE_METHOD(quitUI, "TRANSITION_IN")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMSIn)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
PROC QUITUI_TRANSITION_OUT(SCALEFORM_INDEX quitUI, INT iMSOut = 0)
BEGIN_SCALEFORM_MOVIE_METHOD(quitUI, "TRANSITION_OUT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMSOut)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
FUNC SCALEFORM_INDEX REQUEST_QUIT_UI()
RETURN REQUEST_SCALEFORM_MOVIE("mission_quit")
ENDFUNC
PROC SETUP_QUIT_UI(SCALEFORM_INDEX quitUI, STRING sTitle, STRING sDetails)
QUITUI_SET_TEXT(quitUI, sTitle, sDetails)
QUITUI_TRANSITION_IN(quitUI, 0)
ENDPROC
/// PURPOSE:
/// Sets text with a number and transitions in
/// PARAMS:
/// quitUI -
/// sTitle -
/// sDetails -
/// iNum -
PROC SETUP_QUIT_UI_WITH_NUMBER_SUBSTRING(SCALEFORM_INDEX quitUI, STRING sTitle, STRING sDetails, INT iNum)
QUITUI_SET_TEXT_WITH_NUMBER_SUBSTRING(quitUI, sTitle, sDetails, iNum)
QUITUI_TRANSITION_IN(quitUI, 0)
ENDPROC
/// PURPOSE:
/// Nearly the same as SETUP function but doens't call QUITUI_TRANSITION_IN
/// PARAMS:
/// quitUI -
/// sTitle -
/// sDetails -
/// iNum -
PROC UPDATE_QUIT_UI_WITH_NUMBER_SUBSTRING(SCALEFORM_INDEX quitUI, STRING sTitle, STRING sDetails, INT iNum)
QUITUI_SET_TEXT_WITH_NUMBER_SUBSTRING(quitUI, sTitle, sDetails, iNum)
ENDPROC
PROC DISPLAY_QUIT_UI(SCALEFORM_INDEX quitUI)
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
DRAW_SCALEFORM_MOVIE(quitUI, 0.5,0.5,1.0 ,1.0 ,255,255,255,0)
ENDPROC
PROC CLEANUP_QUIT_UI(SCALEFORM_INDEX quitUI)
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(quitUI)
ENDPROC
CONST_INT DEFAULT_SPLASH_DURATION 4000
CONST_INT DEFAULT_SPLASH_R 253
CONST_INT DEFAULT_SPLASH_G 214
CONST_INT DEFAULT_SPLASH_B 83
CONST_INT DEFAULT_SPLASH_A 255
CONST_INT SPLASH_RED_R 235
CONST_INT SPLASH_RED_G 36
CONST_INT SPLASH_RED_B 39
STRUCT SCRIPT_SCALEFORM_SPLASH
SCALEFORM_INDEX siMovie
INT iDuration
structTimer movieTimer
ENDSTRUCT
/// PURPOSE:
/// Asks for the scaleform splash text ui.
FUNC SCALEFORM_INDEX REQUEST_SCALEFORM_SPLASH_UI()
RETURN REQUEST_SCALEFORM_MOVIE("SPLASH_TEXT")
ENDFUNC
/// PURPOSE:
/// Set splash text for a given duration
/// PARAMS:
/// scaleformIndex -
/// label - splash text string
/// iDuration - duration in milliseconds
PROC SET_SCALEFORM_SPLASH_TEXT(SCRIPT_SCALEFORM_SPLASH & scaleformStruct, STRING labeToDisp, INT iDuration = DEFAULT_SPLASH_DURATION,
INT iColor_R = DEFAULT_SPLASH_R, INT iColor_G = DEFAULT_SPLASH_G, INT iColor_B = DEFAULT_SPLASH_B, INT iColor_A = DEFAULT_SPLASH_A)
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SET_SPLASH_TEXT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(labeToDisp)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iDuration)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_R)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_G)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_B)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_A)
END_SCALEFORM_MOVIE_METHOD()
// Restart our timer for updating.
RESTART_TIMER_NOW(scaleformStruct.movieTimer)
// Store the duration.
scaleformStruct.iDuration = iDuration
ENDPROC
/// PURPOSE:
/// Set splash text for a given duration
/// PARAMS:
/// scaleformIndex -
/// label - splash text string
/// iNum - Number to insert into the string.
/// iDuration - duration in milliseconds
PROC SET_SCALEFORM_SPLASH_TEXT_WITH_NUMBER(SCRIPT_SCALEFORM_SPLASH & scaleformStruct, STRING labeToDisp, INT iNum, INT iDuration = DEFAULT_SPLASH_DURATION,
INT iColor_R = DEFAULT_SPLASH_R, INT iColor_G = DEFAULT_SPLASH_G, INT iColor_B = DEFAULT_SPLASH_B, INT iColor_A = DEFAULT_SPLASH_A)
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SET_SPLASH_TEXT")
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(labeToDisp)
ADD_TEXT_COMPONENT_INTEGER(iNum)
END_TEXT_COMMAND_SCALEFORM_STRING()
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iDuration)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_R)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_G)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_B)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_A)
END_SCALEFORM_MOVIE_METHOD()
// Restart our timer for updating.
RESTART_TIMER_NOW(scaleformStruct.movieTimer)
// Store the duration.
scaleformStruct.iDuration = iDuration
ENDPROC
/// PURPOSE:
/// Set splash text for a given duration
/// PARAMS:
/// scaleformIndex -
/// label - splash text string
/// iNum - Number to insert into the string.
/// iDuration - duration in milliseconds
PROC SET_SCALEFORM_SPLASH_TEXT_WITH_STRING(SCRIPT_SCALEFORM_SPLASH & scaleformStruct, STRING labeToDisp, STRING subString, INT iDuration = DEFAULT_SPLASH_DURATION,
INT iColor_R = DEFAULT_SPLASH_R, INT iColor_G = DEFAULT_SPLASH_G, INT iColor_B = DEFAULT_SPLASH_B, INT iColor_A = DEFAULT_SPLASH_A)
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SET_SPLASH_TEXT")
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(labeToDisp)
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(subString)
END_TEXT_COMMAND_SCALEFORM_STRING()
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iDuration)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_R)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_G)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_B)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_A)
END_SCALEFORM_MOVIE_METHOD()
// Restart our timer for updating.
RESTART_TIMER_NOW(scaleformStruct.movieTimer)
// Store the duration.
scaleformStruct.iDuration = iDuration
ENDPROC
/// PURPOSE:
/// Set splash text for a given duration using the player's username/gamertag
/// Used mainly in MP
/// PARAMS:
/// scaleformIndex -
/// label - splash text string
/// iNum - Number to insert into the string.
/// iDuration - duration in milliseconds
PROC SET_SCALEFORM_SPLASH_TEXT_WITH_PLAYER_NAME(SCRIPT_SCALEFORM_SPLASH & scaleformStruct, STRING labeToDisp, STRING sPlayerName, INT iDuration = DEFAULT_SPLASH_DURATION,
INT iColor_R = DEFAULT_SPLASH_R, INT iColor_G = DEFAULT_SPLASH_G, INT iColor_B = DEFAULT_SPLASH_B, INT iColor_A = DEFAULT_SPLASH_A)
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SET_SPLASH_TEXT")
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(labeToDisp)
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(sPlayerName)
END_TEXT_COMMAND_SCALEFORM_STRING()
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iDuration)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_R)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_G)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_B)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_A)
END_SCALEFORM_MOVIE_METHOD()
// Restart our timer for updating.
RESTART_TIMER_NOW(scaleformStruct.movieTimer)
// Store the duration.
scaleformStruct.iDuration = iDuration
ENDPROC
/// PURPOSE:
/// Renders a scaleform splash movie.
/// RETURNS:
/// FALSE when the movie is done drawing and you should move on.
FUNC BOOL UPDATE_SCALEFORM_SPLASH(SCRIPT_SCALEFORM_SPLASH & scaleformStruct, BOOL bAllowSkip = FALSE)
IF NOT IS_TIMER_STARTED(scaleformStruct.movieTimer)
RESTART_TIMER_NOW(scaleformStruct.movieTimer)
ENDIF
// Hide the reticle.
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE)
// Draw the moobie.
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
DRAW_SCALEFORM_MOVIE(scaleformStruct.siMovie, 0.5, 0.5, 1.0 ,1.0, 255,255,255,0)
// If we can skip, detect that button press
IF bAllowSkip
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
RETURN FALSE
ENDIF
ENDIF
// When it's no longer visible, return FALSE. -- Changed. Now, when its curation is up, return FALSE
IF (scaleformStruct.iDuration = -1)
RETURN TRUE
ENDIF
// Is it time to leave?
IF (GET_TIMER_IN_SECONDS(scaleformStruct.movieTimer) * 1000.0 > TO_FLOAT(scaleformStruct.iDuration))
CANCEL_TIMER(scaleformStruct.movieTimer)
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Checks to see if this scaleform splash would be displaying. Mainly for Golf, as golf was using an odd method to check this.
FUNC BOOL WOULD_SCALEFORM_SPLASH_BE_VISIBLE(SCRIPT_SCALEFORM_SPLASH & scaleformStruct)
IF NOT IS_TIMER_STARTED(scaleformStruct.movieTimer)
RETURN FALSE
ENDIF
RETURN (GET_TIMER_IN_SECONDS(scaleformStruct.movieTimer) * 1000.0 <= TO_FLOAT(scaleformStruct.iDuration))
ENDFUNC
/// PURPOSE:
/// When attempting to manually control the entering and exiting of the scaleform splash text, use this function to set the text
// to display. DOES NOT TAKE A TIME AS YOU MUST USE SPLASH_TEXT_TRANSITION_IN & SPLASH_TEXT_TRANSITION_OUT.
PROC SET_SCALEFORM_SPLASH_TEXT_LABEL(SCRIPT_SCALEFORM_SPLASH & scaleformStruct, STRING labeToDisp,
INT iColor_R = DEFAULT_SPLASH_R, INT iColor_G = DEFAULT_SPLASH_G, INT iColor_B = DEFAULT_SPLASH_B, INT iColor_A = DEFAULT_SPLASH_A,
BOOL bStartNow = FALSE)
scaleformStruct.iDuration = -1
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SPLASH_TEXT_LABEL")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(labeToDisp)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_R)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_G)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_B)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iColor_A)
END_SCALEFORM_MOVIE_METHOD()
IF bStartNow
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SPLASH_TEXT_TRANSITION_IN")
END_SCALEFORM_MOVIE_METHOD()
ENDIF
ENDPROC
/// PURPOSE:
/// When you want to manually control when your splash text comes in, use this.
/// YOU MUST CALL UPDATE_SCALEFORM_SPLASH & SPLASH_TEXT_TRANSITION_OUT, manually.
PROC SPLASH_TEXT_TRANSITION_IN(SCRIPT_SCALEFORM_SPLASH & scaleformStruct)
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SPLASH_TEXT_TRANSITION_IN")
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
/// PURPOSE:
/// When you want to manually control when your splash text goes out, use this.
/// YOU MUST CALL UPDATE_SCALEFORM_SPLASH & SPLASH_TEXT_TRANSITION_IN, manually.
PROC SPLASH_TEXT_TRANSITION_OUT(SCRIPT_SCALEFORM_SPLASH & scaleformStruct)
scaleformStruct.iDuration = 300
RESTART_TIMER_NOW(scaleformStruct.movieTimer)
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, "SPLASH_TEXT_TRANSITION_OUT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(300)
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
/// PURPOSE:
/// Functional replacement of GET_POSITION_OF_ANALOGUE_STICKS usable for release as per Imran's email
/// PARAMS:
/// returnLeftX -
/// returnLeftY -
/// returnRightX -
/// returnRightY -
/// bIsControlEnabled - GET_CONTROL_NORMAL won't return values if player control has been disabled, so we'll need to know if player's control has been taken away.
/// You can use IS_PLAYER_CONTROL_ON(PLAYER_ID()) as the last parameter to perform a check every frame.
PROC GET_ANALOG_STICK_VALUES(INT &returnLeftX, INT &returnLeftY, INT &returnRightX, INT &returnRightY, BOOL bIsControlEnabled = TRUE, BOOL bUnboundValues = TRUE)
FLOAT LeftX, LeftY, RightX, RightY
IF bUnboundValues = FALSE
IF bIsControlEnabled
LeftX = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X)
LeftY = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y)
RightX = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
RightY = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
ELSE
LeftX = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X)
LeftY = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y)
RightX = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
RightY = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
ENDIF
ELSE
IF bIsControlEnabled
LeftX = GET_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X)
LeftY = GET_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y)
RightX = GET_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
RightY = GET_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
ELSE
LeftX = GET_DISABLED_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X)
LeftY = GET_DISABLED_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y)
RightX = GET_DISABLED_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
RightY = GET_DISABLED_CONTROL_UNBOUND_NORMAL(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
ENDIF
ENDIF
returnLeftX = ROUND(ANALOG_OFFSET * LeftX)
returnLeftY = ROUND(ANALOG_OFFSET * LeftY)
returnRightX = ROUND(ANALOG_OFFSET * RightX)
returnRightY = ROUND(ANALOG_OFFSET * RightY)
ENDPROC
PROC GET_ANALOG_STICK_VALUES_MOVE_INPUT(FLOAT &returnLeftX, FLOAT &returnLeftY, FLOAT &returnRightX, FLOAT &returnRightY, BOOL bIsControlEnabled = TRUE)
FLOAT LeftX, LeftY, RightX, RightY
IF bIsControlEnabled
LeftX = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_LR)
LeftY = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_UD)
RightX = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_LOOK_LR)
RightY = GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_LOOK_UD)
ELSE
LeftX = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_LR)
LeftY = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_UD)
RightX = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_LOOK_LR)
RightY = GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_LOOK_UD)
ENDIF
returnLeftX = (LeftX + 1) / 2 //ROUND(ANALOG_OFFSET * LeftX)
returnLeftY = (LeftY + 1) / 2 //ROUND(ANALOG_OFFSET * LeftY)
returnRightX = (RightX + 1) / 2 //ROUND(ANALOG_OFFSET * RightX)
returnRightY = (RightY + 1) / 2 //ROUND(ANALOG_OFFSET * RightY)
ENDPROC