2240 lines
76 KiB
Scheme
Executable File
2240 lines
76 KiB
Scheme
Executable File
|
|
/////////
|
|
/// Functions and datatypes concerning the display of the end screen described at
|
|
/// https://devstar.rockstargames.com/wiki/index.php/MISSION_BOX
|
|
///
|
|
///
|
|
///
|
|
///
|
|
///
|
|
/// Ak
|
|
//////////
|
|
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "menu_public.sch"
|
|
USING "shared_hud_displays.sch"
|
|
USING "screenDisplayState.sch"
|
|
|
|
// ESC = End Screen Constant
|
|
|
|
//########## POSITIONING VARS ############
|
|
CONST_FLOAT ESC_LINE_Y_ADVANCE 25.0 //Advance distance between stat entries? 0.0347 = 25 pixel advance
|
|
CONST_FLOAT ESC_LINE_Y_GAP 2.0 //Border thickness 0.00278 = 2 pixel advance
|
|
CONST_FLOAT ESC_LINE_Y_ADVANCE_HEADER 30.0 //Vertical length of the header/footer for stats? 0.04722222192 = 34 pixel advance
|
|
CONST_FLOAT ESC_1ST_LINE_UP 2.0 //How much the 1st white line moves up
|
|
CONST_FLOAT ESC_1ST_ELEM_GAP 0.3 //How much the 1st element is below the line
|
|
CONST_FLOAT ESC_1ST_ELEM_EXTRA_GAP 0.2 //Extra spacing if there are elements in the list
|
|
CONST_FLOAT ESC_COMPLETION_GAP 0.2 //Spacing before the completion box
|
|
CONST_FLOAT ESC_HALF_WIDTH 0.1125 //Half the width of the stats screen
|
|
CONST_FLOAT ESC_INDENT 0.006 //Left/right screen indent?
|
|
CONST_FLOAT ESC_Y_POSITION 0.3 //2725 //Distance between header and stats, should be about 0.2625 after scaling
|
|
CONST_FLOAT ESC_X_PIXEL 0.00078125//0.00052083333 //
|
|
CONST_FLOAT ESC_Y_PIXEL 0.00138888888//0.00092592592 //
|
|
CONST_FLOAT ESC_Y_PIXEL_LINE 0.00092592592
|
|
CONST_FLOAT ESC_SOCIAL_BULLSHIT_TAB_Y 0.138888888//0.092592592 //
|
|
|
|
CONST_INT MEDAL_PIX_SIDE 16
|
|
|
|
//########## TIMING VARS ############
|
|
CONST_INT ESC_MOVE_UP_TIME 600
|
|
CONST_INT ESC_BLEND_TIME 1500
|
|
CONST_INT ESC_DEFAULT_TIME 15000 //Default time until animating out
|
|
CONST_INT ESC_ROLL_UP_GRACE 333 //Time to roll-up stats before it stops rendering
|
|
CONST_INT ESC_MOVE_UP_GRACE 666 //Time after start when it begins moving the text up
|
|
|
|
|
|
//########## ASPECT RATIO VARS ############
|
|
const_float AR4_3 1.3333333
|
|
const_float AR16_9 1.7777777
|
|
const_float AR16_10 1.6
|
|
|
|
//################################## FUNCTIONS ###########################################
|
|
|
|
//Gets a modifier float based on the screen aspect ratio
|
|
FUNC FLOAT GET_ASPECT_RATIO_MODIFIER()
|
|
FLOAT fMod = 1.0
|
|
IF IS_PC_VERSION()
|
|
// IF ABSF(GET_ASPECT_RATIO(FALSE) - AR16_10) <0.1 //16:10, most UI errors
|
|
// RETURN 1.04
|
|
// ELIF ABSF(GET_ASPECT_RATIO(FALSE) - AR4_3) <0.1
|
|
// RETURN 1.10
|
|
// ELSE
|
|
// RETURN 1.0
|
|
// ENDIF
|
|
|
|
//At 16:9 (1.777) things look normal widescreen (low vertical spacing)
|
|
//At 4:3 (1.333) things should have bigger vertical spacing
|
|
//Therefore, Increase vertical spacing smoothly between
|
|
//1.0 - 1.03 for ARs of
|
|
//1.777 - 1.333 => fmod = 1.0 + (1.777-AR)/0.444 *.03
|
|
//fMod -= (AR16_9 - GET_ASPECT_RATIO(FALSE)) / (AR16_9-AR4_3) * 0.03
|
|
ENDIF
|
|
|
|
// if GET_FRAME_COUNT() % 5 = 0
|
|
// CPRINTLN(debug_mission_stats,"AR multiplier ",fMod)
|
|
// ENDIF
|
|
RETURN fMod
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT PIXEL_X(FLOAT PIXELSIZE)
|
|
RETURN PIXELSIZE * ESC_X_PIXEL
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT PIXEL_Y(FLOAT PIXELSIZE)
|
|
RETURN PIXELSIZE * ESC_Y_PIXEL //* GET_ASPECT_RATIO_MODIFIER()
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT PIXEL_Y_LINE(FLOAT PIXELSIZE)
|
|
RETURN PIXELSIZE * ESC_Y_PIXEL_LINE //* GET_ASPECT_RATIO_MODIFIER()
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT Get_PT_scale(FLOAT PTSIZE)
|
|
RETURN PTSIZE * 0.025// * GET_ASPECT_RATIO_MODIFIER()
|
|
ENDFUNC
|
|
|
|
|
|
PROC END_SCREEN_WORK_OUT_WIDTHS(END_SCREEN_DATASET &esd)
|
|
|
|
//SET_TEXT_WRAP(fontLeft,fontRight)
|
|
|
|
FLOAT width = 0.0
|
|
|
|
/*
|
|
INT iTitleSubelements
|
|
END_SCREEN_TITLE_SUB_ELEMENT_TYPE titleSubElementType[MAX_END_SCREEN_TITLE_SUB_ELEMENTS]
|
|
TEXT_LABEL_63 titleSubstrings[MAX_END_SCREEN_TITLE_SUBSTRINGS]
|
|
INT iTitleSubInts[MAX_END_SCREEN_TITLE_SUBINTEGERS]
|
|
*/
|
|
|
|
|
|
SET_TEXT_JUSTIFICATION(FONT_CENTRE)
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(16))
|
|
|
|
IF esd.iTitleSubelements = 0
|
|
IF esd.titleIsUserName
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(esd.title)
|
|
width = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ELSE
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(esd.title)
|
|
width = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDIF
|
|
ELSE
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT("STRING")
|
|
INT iIntCount = 0
|
|
INT iStrCount = 0
|
|
INT i = 0
|
|
REPEAT esd.iTitleSubelements i
|
|
SWITCH esd.titleSubElementType[i]
|
|
CASE ESTSET_INT
|
|
ADD_TEXT_COMPONENT_INTEGER(esd.iTitleSubInts[iIntCount])
|
|
++iIntCount
|
|
BREAK
|
|
CASE ESTSET_STRING
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(esd.titleSubstrings[iStrCount] )
|
|
++iStrCount
|
|
BREAK
|
|
CASE ESTSET_LITERAL_STRING
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(esd.titleSubstrings[iStrCount])
|
|
++iStrCount
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDREPEAT
|
|
width = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
ENDIF
|
|
|
|
|
|
IF width > (ESC_HALF_WIDTH*2 - ESC_INDENT*2)
|
|
esd.fTrueHalfWidth = (width/2.0) + ESC_INDENT*2
|
|
ENDIF
|
|
|
|
|
|
//check the width of all the elements
|
|
//check the width of the completion line
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
|
|
IF IS_SCREEN_FADING_OUT() OR IS_SCREEN_FADED_OUT()
|
|
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_FADE)
|
|
ENDIF
|
|
SET_SCRIPT_GFX_DRAW_BEHIND_PAUSEMENU(FALSE)
|
|
|
|
ENDPROC
|
|
|
|
PROC PRIVATE_RENDER_ENDSCREEN_LABEL(STRING tl, FLOAT x, FLOAT y,BOOL c = FALSE, BOOL isPlayerName = FALSE, TEXT_FONTS TextFont = FONT_STANDARD)
|
|
|
|
SET_TEXT_CENTRE(c)
|
|
SET_TEXT_FONT(TextFont)
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
|
|
IF isPlayerName
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(tl)
|
|
ELSE
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(tl)
|
|
ENDIF
|
|
//SET_COLOUR_OF_NEXT_TEXT_COMPONENT(HUD_COLOUR_BLACK)
|
|
//ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(tl)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(x, y)
|
|
ENDPROC
|
|
|
|
PROC PRIVATE_RENDER_ENDSCREEN_LABEL_WITH_LITERAL_STRING(STRING tl,STRING tlSubString, FLOAT x, FLOAT y,BOOL c = FALSE, TEXT_FONTS TextFont = FONT_STANDARD)
|
|
|
|
SET_TEXT_CENTRE(c)
|
|
SET_TEXT_FONT(TextFont)
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(tl)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(tlSubString)
|
|
|
|
//SET_COLOUR_OF_NEXT_TEXT_COMPONENT(HUD_COLOUR_BLACK)
|
|
//ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(tl)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(x, y)
|
|
ENDPROC
|
|
|
|
PROC PRIVATE_RENDER_ENDSCREEN_MISSION_LABEL(STRING tl, FLOAT x, FLOAT y,TEXT_FONTS TextFont = FONT_STANDARD)
|
|
SET_TEXT_CENTRE(TRUE)
|
|
SET_TEXT_FONT(TextFont)
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(tl)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(x, y)
|
|
ENDPROC
|
|
|
|
PROC PRIVATE_RENDER_ENDSCREEN_VALUE(INT valueA, INT valueB,
|
|
FLOAT x, FLOAT y,
|
|
STRING base,
|
|
END_SCREEN_ELEMENT_FORMATTING format)
|
|
|
|
HUD_COLOURS hucu = HUD_COLOUR_WHITE
|
|
|
|
//set the string value if needed
|
|
SET_TEXT_CENTRE(FALSE)
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
|
|
//add any needed sub values
|
|
|
|
|
|
//do backing effects
|
|
FLOAT width = 0.0
|
|
FLOAT xw = 8* ESC_X_PIXEL
|
|
FLOAT yh = 16* ESC_Y_PIXEL
|
|
INT r = 93
|
|
INT g = 182
|
|
INT b = 229
|
|
|
|
IF format = ESEF_DOLLAR_VALUE_REDBACK
|
|
r = 194
|
|
g = 80
|
|
b = 80
|
|
ENDIF
|
|
|
|
SWITCH format
|
|
//CASE ESEF_DOLLAR_VALUE
|
|
CASE ESEF_DOLLAR_VALUE_REDBACK
|
|
CASE ESEF_DOLLAR_VALUE_BLUEBACK
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(18))//CUSTOM_MENU_TEXT_SCALE_Y*1.2857)
|
|
SET_TEXT_FONT(FONT_CONDENSED)
|
|
IF valueA < 0
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT("ESMINDOLLA")
|
|
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(-1*valueA, INTEGER_FORMAT_COMMA_SEPARATORS)
|
|
width = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(FALSE)
|
|
ELSE
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT("ESDOLLA")
|
|
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(valueA, INTEGER_FORMAT_COMMA_SEPARATORS)
|
|
width = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(FALSE)
|
|
ENDIF
|
|
|
|
width -= (width % ESC_X_PIXEL) //trim the sub pixel amount
|
|
|
|
|
|
DRAW_SPRITE("CommonMenu", "BettingBox_Left",
|
|
x-(width), //+ (ESC_X_PIXEL*4),
|
|
y+yh*0.6 + ESC_Y_PIXEL*2,
|
|
xw,yh,
|
|
0.0,
|
|
r,g,b,255)
|
|
|
|
DRAW_SPRITE("CommonMenu", "BettingBox_Centre",
|
|
x-width*0.5 - (ESC_X_PIXEL*2),
|
|
y+yh*0.6 + ESC_Y_PIXEL*2,
|
|
width - xw*0.5,yh,
|
|
0.0,
|
|
r,g,b,255)
|
|
|
|
DRAW_SPRITE("CommonMenu", "BettingBox_Right",
|
|
x- (ESC_X_PIXEL*4),
|
|
y+yh*0.6+ ESC_Y_PIXEL*2,
|
|
xw,yh,
|
|
0.0,
|
|
r,g,b,255)
|
|
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SET_COLOUR_OF_NEXT_TEXT_COMPONENT(hucu)
|
|
//start the string
|
|
SWITCH format
|
|
CASE ESEF_RAW_PERCENT
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("PERCENTAGE")
|
|
ADD_TEXT_COMPONENT_INTEGER(valueA)
|
|
|
|
BREAK
|
|
CASE ESEF_RAW_INTEGER
|
|
SET_TEXT_FONT(FONT_STYLE_FIXED_WIDTH_NUMBERS)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("FO_NUM")
|
|
ADD_TEXT_COMPONENT_INTEGER(valueA)
|
|
|
|
BREAK
|
|
CASE ESEF_FRACTION
|
|
SET_TEXT_FONT(FONT_STYLE_FIXED_WIDTH_NUMBERS)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("FO_TWO_NUM")
|
|
ADD_TEXT_COMPONENT_INTEGER(valueA)
|
|
ADD_TEXT_COMPONENT_INTEGER(valueB)
|
|
|
|
BREAK
|
|
|
|
CASE ESEF_DOLLAR_VALUE_REDBACK
|
|
CASE ESEF_DOLLAR_VALUE_BLUEBACK
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(18))//CUSTOM_MENU_TEXT_SCALE_Y*1.2857)
|
|
FALLTHRU
|
|
CASE ESEF_DOLLAR_VALUE
|
|
|
|
IF valueA < 0
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("ESMINDOLLA")
|
|
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(-1*valueA, INTEGER_FORMAT_COMMA_SEPARATORS)
|
|
ELSE
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("ESDOLLA")
|
|
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(valueA, INTEGER_FORMAT_COMMA_SEPARATORS)
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE ESEF_RAW_STRING
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(base)
|
|
BREAK
|
|
CASE ESEF_RAW_USERNAME
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(base)
|
|
BREAK
|
|
CASE ESEF_TIME_H_M_S
|
|
SET_TEXT_FONT(FONT_STYLE_FIXED_WIDTH_NUMBERS)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(ValueA, TIME_FORMAT_HOURS | TIME_FORMAT_MINUTES | TIME_FORMAT_SECONDS)
|
|
BREAK
|
|
CASE ESEF_TIME_M_S
|
|
SET_TEXT_FONT(FONT_STYLE_FIXED_WIDTH_NUMBERS)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(ValueA, TIME_FORMAT_MINUTES | TIME_FORMAT_SECONDS )
|
|
BREAK
|
|
|
|
CASE ESEF_TIME_M_S_MS
|
|
SET_TEXT_FONT(FONT_STYLE_FIXED_WIDTH_NUMBERS)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(ValueA, TIME_FORMAT_MINUTES | TIME_FORMAT_SECONDS | TIME_FORMAT_MILLISECONDS | TEXT_FORMAT_USE_DOT_FOR_MILLISECOND_DIVIDER)
|
|
BREAK
|
|
CASE ESEF_TIME_M_S_MS_WITH_PERIOD //1506472
|
|
SET_TEXT_FONT(FONT_STYLE_FIXED_WIDTH_NUMBERS)
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TIME(ValueA, TIME_FORMAT_MINUTES | TIME_FORMAT_SECONDS | TIME_FORMAT_MILLISECONDS | TEXT_FORMAT_USE_DOT_FOR_MILLISECOND_DIVIDER)
|
|
BREAK
|
|
CASE ESEF_DISTANCE_VALUE_METERS
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("AHD_DIST")
|
|
ADD_TEXT_COMPONENT_INTEGER(valueA)
|
|
BREAK
|
|
CASE ESEF_SINGLE_NUMBER_SUB
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(base)
|
|
ADD_TEXT_COMPONENT_INTEGER(valueA)
|
|
ADD_TEXT_COMPONENT_INTEGER(valueB)
|
|
|
|
BREAK
|
|
CASE ESEF_DOUBLE_NUMBER_SUB_LEFT
|
|
CASE ESEF_DOUBLE_NUMBER_SUB
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(base)
|
|
ADD_TEXT_COMPONENT_INTEGER(valueA)
|
|
ADD_TEXT_COMPONENT_INTEGER(valueB)
|
|
|
|
BREAK
|
|
CASE ESEF_LEFT_AND_RIGHT_SUBSTRINGS
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(base)
|
|
ADD_TEXT_COMPONENT_INTEGER(valueB)
|
|
|
|
BREAK
|
|
CASE ESEF_TWO_STRINGS
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(base)
|
|
BREAK
|
|
//CASE ESEF_LEFT_SIDE_INT_SUBSTRING //this only applys a substring to name
|
|
ENDSWITCH
|
|
|
|
IF format != ESEF_LEFT_SIDE_INT_SUBSTRING
|
|
IF format = ESEF_DOLLAR_VALUE_REDBACK
|
|
OR format = ESEF_DOLLAR_VALUE_BLUEBACK
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(x- ESC_X_PIXEL*4, y)
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y
|
|
ELSE
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(x, y)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC PRIVATE_RENDER_ENSCREEN_ELEMENT(END_SCREEN_DATASET &esd, INT iNth, FLOAT yat, FLOAT fontLeft,FLOAT fontRight,INT EndScreenAlpha)
|
|
|
|
//END_SCREEN_ELEMENT_FORMATTING
|
|
//TEXT_LABEL ElementName[iNth]
|
|
//TEXT_LABEL ElementText[iNth]
|
|
//INT ElementValA[iNth]
|
|
//INT ElementValB[iNth]
|
|
//END_SCREEN_CHECK_MARK_STATUS ElementCheck[iNth]
|
|
//BOOL ElementInvalidation[iNth]
|
|
//IF esd.ElementInvalidation[iNth]
|
|
// SET_TEXT_COLOUR(10,10,10,255)
|
|
//ELSE
|
|
INT txt_R,txt_G,txt_B,txt_A
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE,txt_R,txt_G,txt_B,txt_A)
|
|
SET_TEXT_COLOUR(txt_R,txt_G,txt_B,EndScreenAlpha)
|
|
//ENDIF
|
|
|
|
|
|
|
|
SET_TEXT_WRAP(fontLeft,fontRight)
|
|
SET_TEXT_JUSTIFICATION(FONT_LEFT)
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y
|
|
//render the name
|
|
SET_TEXT_CENTRE(FALSE)
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
|
|
|
|
|
|
IF esd.ElementIsPlayerName[iNth]
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("STRING")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(esd.ElementName[iNth])
|
|
ELSE
|
|
|
|
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT(esd.ElementName[iNth])
|
|
IF esd.ElementFormat[iNth] = ESEF_LEFT_AND_RIGHT_SUBSTRINGS
|
|
OR esd.ElementFormat[iNth] = ESEF_LEFT_SIDE_INT_SUBSTRING
|
|
ADD_TEXT_COMPONENT_INTEGER(esd.ElementValA[iNth])
|
|
ENDIF
|
|
ENDIF
|
|
//SET_COLOUR_OF_NEXT_TEXT_COMPONENT(HUD_COLOUR_BLACK)
|
|
//ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(tl)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(fontleft, yat)
|
|
|
|
|
|
|
|
|
|
|
|
FLOAT TRUEright = fontRight
|
|
FLOAT ficonw
|
|
FLOAT ficonh
|
|
//FLOAT ficonwh
|
|
//FLOAT ficonhh
|
|
|
|
|
|
|
|
SWITCH esd.ElementCheck[iNth]
|
|
CASE ESCM_NO_MARK
|
|
BREAK
|
|
CASE ESCM_UNCHECKED
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_BOX_EMPTY,
|
|
FALSE,TRUE,
|
|
ficonw,ficonh)
|
|
|
|
//ficonwh = ficonw*0.5
|
|
//ficonhh = ficonh*0.5
|
|
|
|
//render the unchecked box
|
|
DRAW_SPRITE("CommonMenu", GET_MENU_ICON_TEXTURE(MENU_ICON_BOX_EMPTY,FALSE),
|
|
(fontRight)- ESC_INDENT, yat +PIXEL_Y(ESC_LINE_Y_GAP)+ (0.25*ficonh),
|
|
ficonw, ficonh,
|
|
0,
|
|
255, 255, 255, EndScreenAlpha)
|
|
|
|
TRUEright -= ficonw*0.38 + ESC_INDENT//width of check mark
|
|
BREAK
|
|
CASE ESCM_CHECKED
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_BOX_TICK,
|
|
FALSE,TRUE,
|
|
ficonw,ficonh)
|
|
//ficonwh = ficonw*0.5
|
|
//ficonhh = ficonh*0.5
|
|
//render the checked box
|
|
DRAW_SPRITE("CommonMenu", GET_MENU_ICON_TEXTURE(MENU_ICON_BOX_TICK,FALSE),
|
|
(fontRight)- ESC_INDENT , yat +PIXEL_Y(ESC_LINE_Y_GAP)+ (0.25*ficonh),
|
|
ficonw, ficonh,
|
|
0,
|
|
255, 255, 255, EndScreenAlpha)
|
|
|
|
TRUEright -= ficonw*0.38 + ESC_INDENT//width of check mark
|
|
BREAK
|
|
CASE ESCM_INVALIDATED
|
|
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_BOX_CROSS,
|
|
FALSE,TRUE,
|
|
ficonw,ficonh)
|
|
//ficonwh = ficonw*0.5
|
|
//ficonhh = ficonh*0.5
|
|
//render the checked box
|
|
DRAW_SPRITE("CommonMenu", GET_MENU_ICON_TEXTURE(MENU_ICON_BOX_CROSS,FALSE),
|
|
(fontRight)- ESC_INDENT , yat +PIXEL_Y(ESC_LINE_Y_GAP) + (0.25*ficonh),
|
|
ficonw, ficonh,
|
|
0,
|
|
255, 255, 255, EndScreenAlpha)
|
|
|
|
TRUEright -= ficonw*0.38 + ESC_INDENT//width of check mark
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
|
|
IF esd.ElementFormat[iNth] = ESEF_NAME_ONLY
|
|
EXIT
|
|
ENDIF
|
|
//render the value
|
|
|
|
|
|
IF esd.ElementFormat[iNth] = ESEF_DOUBLE_NUMBER_SUB_LEFT
|
|
SET_TEXT_JUSTIFICATION(FONT_LEFT)
|
|
ELSE
|
|
SET_TEXT_JUSTIFICATION(FONT_RIGHT)
|
|
ENDIF
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y
|
|
|
|
IF esd.ElementFormat[iNth] = ESEF_DOLLAR_VALUE_BLUEBACK
|
|
OR esd.ElementFormat[iNth] = ESEF_DOLLAR_VALUE_REDBACK
|
|
SET_TEXT_WRAP(fontLeft,TRUEright - ESC_X_PIXEL*3)
|
|
ELSE
|
|
SET_TEXT_WRAP(fontLeft,TRUEright + ESC_X_PIXEL*2)
|
|
ENDIF
|
|
SET_TEXT_COLOUR(txt_R,txt_G,txt_B,EndScreenAlpha)
|
|
|
|
|
|
PRIVATE_RENDER_ENDSCREEN_VALUE(
|
|
esd.ElementValA[iNth], esd.ElementValB[iNth],
|
|
fontRight, yat,
|
|
esd.ElementText[iNth],
|
|
esd.ElementFormat[iNth])
|
|
//esd.ElementInvalidation[iNth])
|
|
|
|
//CPRINTLN(DEBUG_MISSION_STATS, "PRIVATE_RENDER_ENSCREEN_ELEMENT: <eleminvalidation> invalidation for ", iNth, " is ", esd.ElementInvalidation[iNth])
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC FORCE_ENDSCREEN_ANIM_OUT(END_SCREEN_DATASET &esd)
|
|
esd.bShowSkipperPrompt = FALSE
|
|
esd.bHoldOnEnd = FALSE
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement+500
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_RENDERED_TEXT_WIDTH(STRING str)
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(str)
|
|
RETURN END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE) / 2
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_RENDERED_TEXT_WIDTH_LITERAL_STRING(STRING str,STRING str2)
|
|
BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(str)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(str2)
|
|
RETURN END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE) / 2
|
|
ENDFUNC
|
|
|
|
//FUNC CONTROL_ACTION GET_RENDER_ENDSCREEN_ACCEPT_BUTTON()
|
|
// IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
// RETURN INPUT_CONTEXT
|
|
// ENDIF
|
|
//
|
|
// RETURN INPUT_FRONTEND_ACCEPT
|
|
//ENDFUNC
|
|
//
|
|
//FUNC CONTROL_ACTION GET_RENDER_ENDSCREEN_EXPAND_BUTTON()
|
|
// IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
// RETURN INPUT_JUMP
|
|
// ENDIF
|
|
//
|
|
// RETURN INPUT_FRONTEND_X
|
|
//ENDFUNC
|
|
|
|
PROC ENDSCREEN_ADD_SKIP_BUTTONS(END_SCREEN_DATASET &esd, BOOL bAddExpandButton)
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "CLEAR_ALL")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
#IF NOT USE_TU_CHANGES
|
|
//Removing this fixes #1813267.
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "SET_CLEAR_SPACE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
#ENDIF
|
|
|
|
// Turn on PC clickable instructional buttons
|
|
IF IS_PC_VERSION()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
//Add accept button
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT))
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ES_HELP")
|
|
|
|
// Clickable
|
|
IF IS_PC_VERSION()
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(INPUT_FRONTEND_ENDSCREEN_ACCEPT))
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
//Add expand button (if required)
|
|
IF bAddExpandButton
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND))
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ES_XPAND")
|
|
|
|
// Clickable
|
|
IF IS_PC_VERSION()
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(INPUT_FRONTEND_ENDSCREEN_EXPAND))
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
ENDPROC
|
|
|
|
PROC ENDSCREEN_ADD_VOTE_BUTTONS(END_SCREEN_DATASET &esd)
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "CLEAR_ALL")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
#IF NOT USE_TU_CHANGES
|
|
//Removing this fixes #1813267.
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "SET_CLEAR_SPACE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
#ENDIF
|
|
|
|
// Turn on PC clickable instructional buttons
|
|
IF IS_PC_VERSION()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
//up
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_UP))
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ES_HELP_TU")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
//down
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN))
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ES_HELP_TD")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
//cancel
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL))
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ES_HELP_AB")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
//assumes that the scaleform is already loaded
|
|
//call at your own risk
|
|
/// PARAMS:
|
|
/// esd -
|
|
///
|
|
///
|
|
PROC RAW_ENDSCREEN_DRAW(END_SCREEN_DATASET &esd, FLOAT skipperMult = 1.0, BOOL shortShard = FALSE)
|
|
|
|
Int EndScreenAlpha = round(esd.fFadeOutMult * 255)
|
|
|
|
FLOAT yat = GET_ASPECT_RATIO_MODIFIER()*0.25//(ESC_Y_POSITION - 0.15)
|
|
|
|
// CPRINTLN(debug_luke,"")
|
|
// CPRINTLN(debug_luke,"Started drawing at ",yat," mult:",esd.fScrollOutMult)
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(esd.splash)
|
|
IF esd.fTitleUpMult >= 0.0//10
|
|
IF !esd.bStartedFailformAnim
|
|
// CPRINTLN(debug_luke,"Set-up 1st stage screen")
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash, "SHOW_MISSION_PASSED_MESSAGE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(esd.passed_splash_message) //BIG_TEXT "Mission Passed"
|
|
|
|
IF esd.CompletionType = ESC_MULTI_COMPLETION
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(esd.title)
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(esd.title) //MESSAGE_TEXT optional, not used
|
|
ENDIF
|
|
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(150) //alpha of shard (MP)
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(100) //alpha of shard
|
|
ENDIF
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) //unknown needs to be here...
|
|
|
|
IF esd.CompletionType = ESC_MULTI_COMPLETION
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(esd.iElements - 1) //NUMBER OF STATS LINES (FOR SETTING BACKGROUND HEIGHT)
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(esd.iElements) //NUMBER OF STATS LINES (FOR SETTING BACKGROUND HEIGHT)
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(shortShard) //For when there is no medal text and 2nd white line
|
|
|
|
IF esd.CompletionType = ESC_MULTI_COMPLETION
|
|
OR esd.CompletionType = ESC_STRING_COMPLETION
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(HUD_COLOUR_BLACK))//Manually setting the shard colour
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(HUD_COLOUR_MENU_HIGHLIGHT))//Manually setting the shard colour
|
|
ENDIF
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
esd.bStartedFailformAnim = TRUE
|
|
ENDIF
|
|
|
|
//Call Transition up to move the message to its original position ONLY if pass screen has elements
|
|
IF esd.iElements > 0 AND !esd.bStartedMoveUp AND esd.IGameTimerReplacement > ESC_MOVE_UP_TIME
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash, "TRANSITION_UP")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.15) //Transition timing
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) //Prevent auto-expansion
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
esd.bStartedMoveUp = TRUE
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
|
|
//B* 1825616: Move the pass screen lower on Armenian_1 (due to help text box)
|
|
// IF ARE_STRINGS_EQUAL(esd.title, "M_ARM1")
|
|
// yAt += 0.05 * GET_ASPECT_RATIO_MODIFIER()
|
|
// ENDIF
|
|
|
|
// CPRINTLN(debug_luke,"Still drawing at ",yat)
|
|
//Draw splash title scaleform positioned/based on aspect ratio
|
|
// DRAW_SCALEFORM_MOVIE(esd.splash,0.5,yat,AR16_9/ GET_ASPECT_RATIO(FALSE),1,255,255,255,255)
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(esd.splash,255,255,255,255)
|
|
|
|
ENDIF
|
|
|
|
// CPRINTLN(debug_luke, "End screen blend in ", esd.fBlendInProgress, " sum ",esd.fBlendInTargetYSum, " tmult = ", esd.fTitleUpMult," M alpha: ",EndScreenAlpha)
|
|
|
|
FLOAT currentH = (esd.fBlendInTargetYSum*esd.fBlendInProgress)*(1.0 - esd.fScrollOutMult)
|
|
FLOAT socialH = 0.0
|
|
|
|
IF esd.bVoteModeEnabled
|
|
socialH = ((ESC_SOCIAL_BULLSHIT_TAB_Y + PIXEL_Y(ESC_LINE_Y_GAP*2))*esd.fVoteBarProg)*(1.0 - esd.fScrollOutMult)
|
|
currentH += 3*socialH
|
|
ENDIF
|
|
|
|
IF esd.fScrollOutMult != 0.0
|
|
FLOAT min = 0//PIXEL_Y(ESC_LINE_Y_ADVANCE_HEADER)//+ PIXEL_Y(ESC_LINE_Y_GAP*2) // title box
|
|
IF currentH < min
|
|
currentH = min
|
|
ENDIF
|
|
ELSE
|
|
FLOAT min = 0// PIXEL_Y(ESC_LINE_Y_ADVANCE_HEADER) - PIXEL_Y(ESC_LINE_Y_GAP)// Completion box
|
|
IF esd.fTitleUpMult >= 0.975
|
|
IF currentH < min
|
|
currentH = min
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
yat = ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER()
|
|
// IF ARE_STRINGS_EQUAL(esd.title,"M_ARM1")
|
|
// yAt += 0.05 * GET_ASPECT_RATIO_MODIFIER()
|
|
// ENDIF
|
|
|
|
IF esd.bCenterMessageMode
|
|
yat = 0.5
|
|
ENDIF
|
|
|
|
FLOAT w = esd.fTrueHalfWidth *2
|
|
|
|
IF esd.CompletionType != ESC_MULTI_COMPLETION
|
|
//B* 1918481: increase width if title text is too long
|
|
FLOAT textW = GET_RENDERED_TEXT_WIDTH(esd.title)
|
|
if w < textW
|
|
w = textW + 3*ESC_INDENT
|
|
ENDIF
|
|
|
|
//B* 2092218: IF on a small aspect ratio, increase width of the box
|
|
IF GET_ASPECT_RATIO(FALSE) < 1.4
|
|
w *= 1.3
|
|
ENDIF
|
|
|
|
//B* 2023018: If completion space is too small, increase width
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(esd.CompletionLiteralString)
|
|
textW = GET_RENDERED_TEXT_WIDTH_LITERAL_STRING(esd.CompletionResultString,esd.CompletionLiteralString)
|
|
ELSE
|
|
textW = GET_RENDERED_TEXT_WIDTH(esd.CompletionResultString)
|
|
ENDIF
|
|
FLOAT medalOffset = (END_SCREEN_CURSIVE_COMP_X_OFFSET+0.05) / GET_ASPECT_RATIO_MODIFIER()/2.5
|
|
|
|
//B*-2173541: correction for 800x600 PC res
|
|
IF (esd.CompletionType = ESC_FRACTION_COMPLETION OR esd.CompletionType = ESC_PERCENTAGE_COMPLETION)
|
|
AND esd.CompletionMedalState != ESMS_NO_MEDAL
|
|
IF w < textW + 2.6*medalOffset
|
|
w = textW + 2.6*medalOffset
|
|
ENDIF
|
|
ELIF esd.CompletionType = ESC_CASH_COMPLETION // 3207525 (Only used in MP)
|
|
IF w < textW + 2.6*medalOffset
|
|
w = textW + 2.6*medalOffset
|
|
ENDIF
|
|
ELSE
|
|
IF w < textW + 1.9*medalOffset
|
|
w = textW + 2*medalOffset
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
FLOAT fontLeft = (0.499 - w/2) + ESC_INDENT // request both moved slightly to the left
|
|
FLOAT fontRight = (0.499 + w/2) - ESC_INDENT // request both moved slightly to the left
|
|
|
|
// Moved these back to here, wanted to only set them exclusive if endscreen is managing the button prompts, but everything else is written expecting us to set them exclusive whether we're managing the buttons or not
|
|
SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
|
|
SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND)
|
|
|
|
// B*2276517 - Player can now press esc to close endscreen, if player control is on during endscreen
|
|
SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
|
|
|
|
//show the "press button to continue prompt if needed
|
|
IF esd.bShowSkipperPrompt OR esd.bVoteModeEnabled
|
|
IF (esd.iEndScreenDisplayFinish-((ESC_DEFAULT_TIME-1000)*skipperMult)) < esd.IGameTimerReplacement //normal mode: show buttons 14 seconds before end screen finishes
|
|
OR (esd.bVoteModeEnabled AND esd.fBlendInProgress > 0.95 AND (esd.iEndScreenDisplayFinish-(ESC_DEFAULT_TIME *2/3)) < esd.IGameTimerReplacement) //vote mode
|
|
IF esd.bVoteModeEnabled
|
|
//timing
|
|
|
|
IF esd.iVoteTimer < 0// init
|
|
esd.iVoteTimer *= -1
|
|
esd.iVoteTimer = esd.IGameTimerReplacement + esd.iVoteTimer
|
|
ENDIf
|
|
IF esd.iVoteTimer > 0
|
|
IF (esd.iVoteTimer - esd.IGameTimerReplacement) > 0
|
|
DRAW_GENERIC_TIMER(esd.iVoteTimer - esd.IGameTimerReplacement ,"TIMER_TIME")
|
|
ELSE
|
|
esd.iVoteTimer = 0
|
|
esd.eVoteResult = ESSRV_TIMEOUT
|
|
esd.bVoteModeEnabled = FALSE
|
|
esd.bHoldOnEnd = FALSE
|
|
esd.bShowSkipperPrompt = FALSE
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement+500
|
|
esd.iVoteTimer = 0
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
|
|
//scroll out effect
|
|
IF esd.fVoteBarProg < 1.0
|
|
esd.fVoteBarProg += 0.0 +@ (1.0/0.166)
|
|
IF esd.fVoteBarProg > 1.0
|
|
esd.fVoteBarProg = 1.0
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
//SET_TEXT_WRAP(fontLeft,fontRight)
|
|
//SET_TEXT_JUSTIFICATION(FONT_RIGHT)
|
|
//SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y
|
|
//PRIVATE_RENDER_ENDSCREEN_LABEL("MTPHPERCONT", fontLeft, yat+currentH)//
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
HIDE_LOADING_ON_FADE_THIS_FRAME()
|
|
ENDIF
|
|
IF esd.button != NULL AND ( esd.fScrollOutMult < 0.10)
|
|
AND (esd.IGameTimerReplacement <= esd.iEndScreenDisplayFinish) //Don't render buttons when screen animates out
|
|
//B* disable street names while the end screen is rendering
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_DISTRICT_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME)
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(esd.button,255,255,255,EndScreenAlpha)
|
|
ENDIF
|
|
|
|
|
|
IF esd.bVoteModeEnabled
|
|
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_LIGHT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_HEAVY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_ALTERNATE)
|
|
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
|
|
IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_UP)
|
|
PLAY_SOUND_FRONTEND(-1,"CONTINUE","HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
esd.bVoteModeEnabled = FALSE
|
|
esd.bHoldOnEnd = FALSE
|
|
esd.bShowSkipperPrompt = FALSE
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement+500
|
|
esd.eVoteResult = ESSRV_THUMBS_UP
|
|
esd.iVoteTimer = 0
|
|
PLAY_SOUND_FRONTEND (-1, "continue", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
ENDIF
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
|
|
IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_DOWN)
|
|
PLAY_SOUND_FRONTEND(-1,"CONTINUE","HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
esd.bVoteModeEnabled = FALSE
|
|
esd.bHoldOnEnd = FALSE
|
|
esd.bShowSkipperPrompt = FALSE
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement+500
|
|
esd.eVoteResult = ESSRV_THUMBS_DOWN
|
|
esd.iVoteTimer = 0
|
|
PLAY_SOUND_FRONTEND (-1, "continue", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
ENDIF
|
|
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL)
|
|
PLAY_SOUND_FRONTEND(-1,"CONTINUE","HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
esd.bVoteModeEnabled = FALSE
|
|
esd.bHoldOnEnd = FALSE
|
|
esd.bShowSkipperPrompt = FALSE
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement+500
|
|
esd.eVoteResult = ESSRV_ABSTAIN
|
|
esd.iVoteTimer = 0
|
|
PLAY_SOUND_FRONTEND (-1, "continue", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
ENDIF
|
|
|
|
ELSE
|
|
IF esd.bShowSkipperPrompt
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_DISTRICT_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME)
|
|
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_LIGHT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_HEAVY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_ALTERNATE)
|
|
|
|
// DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT) // Don't need to disable these now endscreen has it's own inputs
|
|
// DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND)
|
|
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) // B*2276517 - Player can now press esc to close endscreen, if player control is on during endscreen
|
|
PLAY_SOUND_FRONTEND(-1,"CONTINUE","HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
esd.bShowSkipperPrompt = FALSE
|
|
esd.bHoldOnEnd = FALSE
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement+500
|
|
PLAY_SOUND_FRONTEND (-1, "continue", "HUD_FRONTEND_DEFAULT_SOUNDSET", FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Positioning/alpha variables
|
|
FLOAT fHDiff
|
|
FLOAT fadeMult
|
|
|
|
//==================================================== TITLE BOX ===========================================================
|
|
// PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
// INT r,g,b,a
|
|
// GET_HUD_COLOUR(HUD_COLOUR_PAUSE_BG,r,g,b,a)
|
|
// a = round(255 * 0.73) //73% black
|
|
// #IF NOT IS_NEXTGEN_BUILD
|
|
// DRAW_RECT(0.5, yat+(currentH*0.5),
|
|
// w, currentH,
|
|
// r,g,b,round(esd.fFadeOutMult*a))
|
|
// #ENDIF
|
|
// #IF IS_NEXTGEN_BUILD
|
|
// DRAW_SPRITE("MPHud", "MissionPassedGradient",
|
|
// 0.5, yat+(currentH*0.5),
|
|
// w, currentH,
|
|
// 0, r,g,b,round(esd.fFadeOutMult*a))
|
|
// #ENDIF
|
|
|
|
//==================================================== WHITE LINE ===========================================================
|
|
|
|
// IF currentH >= PIXEL_Y(ESC_LINE_Y_GAP)
|
|
//// draw whiteline top
|
|
// PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
//
|
|
//// #IF NOT IS_NEXTGEN_BUILD
|
|
//// DRAW_RECT(0.5, yat-(PIXEL_Y(ESC_LINE_Y_GAP-0.5)-ESC_Y_PIXEL),
|
|
//// w, PIXEL_Y(ESC_LINE_Y_GAP),
|
|
//// 255,255,255,EndScreenAlpha)
|
|
//// #ENDIF
|
|
//// #IF IS_NEXTGEN_BUILD
|
|
//// DRAW_SPRITE("MPHud", "MissionPassedGradient",
|
|
//// 0.5,yat-(PIXEL_Y(ESC_LINE_Y_GAP-0.5)-ESC_Y_PIXEL),
|
|
//// w,PIXEL_Y(ESC_LINE_Y_GAP),
|
|
//// 0,
|
|
//// 255,255,255,EndScreenAlpha)
|
|
//// #ENDIF
|
|
// ELSE
|
|
// EXIT
|
|
// ENDIF
|
|
// yat += PIXEL_Y(ESC_LINE_Y_GAP)
|
|
|
|
//==================================================== TITLE BOX ===========================================================
|
|
|
|
//draw the title string
|
|
INT txt_R,txt_G,txt_B,txt_A
|
|
GET_HUD_COLOUR(HUD_COLOUR_WHITE,txt_R,txt_G,txt_B,txt_A)
|
|
SET_TEXT_COLOUR(txt_R,txt_G,txt_B,EndScreenAlpha)
|
|
SET_TEXT_WRAP(fontLeft,fontRight)
|
|
SET_TEXT_JUSTIFICATION(FONT_CENTRE)
|
|
// #IF NOT IS_NEXTGEN_BUILD
|
|
// SET_TEXT_SCALE(1.0, Get_PT_scale(16)) //17.36
|
|
// #ENDIF
|
|
// #IF IS_NEXTGEN_BUILD
|
|
// SET_TEXT_SCALE(1.0, 0.6)//END_SCREEN_CURSIVE_TITLE_SCALE)
|
|
// #ENDIF
|
|
#IF NOT IS_NEXTGEN_BUILD
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y)
|
|
#ENDIF
|
|
#IF IS_NEXTGEN_BUILD
|
|
SET_TEXT_SCALE(1.0, 0.4)//END_SCREEN_CURSIVE_COMP_SCALE)
|
|
#ENDIF
|
|
|
|
yat = yat-PIXEL_Y(6)
|
|
//0.00092592592 1/1080
|
|
|
|
//
|
|
// // IS THE USERNAME BEING USED
|
|
// IF esd.titleIsUserName
|
|
// #IF NOT IS_NEXTGEN_BUILD
|
|
// PRIVATE_RENDER_ENDSCREEN_MISSION_LABEL(esd.title,0.5,yat) //+PIXEL_Y(ESC_LINE_Y_GAP)
|
|
// #ENDIF
|
|
// #IF IS_NEXTGEN_BUILD
|
|
// PRIVATE_RENDER_ENDSCREEN_MISSION_LABEL(esd.title,0.5,yat) //+PIXEL_Y(ESC_LINE_Y_GAP)
|
|
// #ENDIF
|
|
|
|
// yat = yat+PIXEL_Y(5)
|
|
|
|
// ELSE
|
|
// // DISPLAY MISSION TITLE
|
|
//
|
|
// IF esd.iTitleSubelements = 0
|
|
// #IF NOT IS_NEXTGEN_BUILD
|
|
// PRIVATE_RENDER_ENDSCREEN_LABEL(esd.title,0.5,yat+ESC_Y_PIXEL,TRUE,DEFAULT) //+PIXEL_Y(ESC_LINE_Y_GAP)
|
|
// #ENDIF
|
|
// #IF IS_NEXTGEN_BUILD
|
|
// PRIVATE_RENDER_ENDSCREEN_LABEL(esd.title,0.5,
|
|
// yat+ESC_Y_PIXEL+END_SCREEN_CURSIVE_TITLE_Y_OFFSET,
|
|
// TRUE,DEFAULT,FONT_CURSIVE) //+PIXEL_Y(ESC_LINE_Y_GAP)
|
|
// #ENDIF
|
|
// ELSE
|
|
//
|
|
// // TITLE WITH ELEMENTS
|
|
// SET_TEXT_CENTRE(TRUE)
|
|
// #IF NOT IS_NEXTGEN_BUILD
|
|
// SET_TEXT_FONT(FONT_STANDARD)
|
|
// #ENDIF
|
|
// #IF IS_NEXTGEN_BUILD
|
|
// SET_TEXT_FONT(FONT_CURSIVE)
|
|
// #ENDIF
|
|
// PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
// BEGIN_TEXT_COMMAND_DISPLAY_TEXT(esd.title)
|
|
// INT iIntCount = 0
|
|
// INT iStrCount = 0
|
|
// INT i = 0
|
|
// REPEAT esd.iTitleSubelements i
|
|
// SWITCH esd.titleSubElementType[i]
|
|
// CASE ESTSET_INT
|
|
// ADD_TEXT_COMPONENT_INTEGER(esd.iTitleSubInts[iIntCount])
|
|
// ++iIntCount
|
|
// BREAK
|
|
// CASE ESTSET_STRING
|
|
// ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(esd.titleSubstrings[iStrCount] )
|
|
// ++iStrCount
|
|
// BREAK
|
|
// CASE ESTSET_LITERAL_STRING
|
|
// ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(esd.titleSubstrings[iStrCount])
|
|
// ++iStrCount
|
|
// BREAK
|
|
// ENDSWITCH
|
|
// ENDREPEAT
|
|
// END_TEXT_COMMAND_DISPLAY_TEXT(0.5,yat+ESC_Y_PIXEL)//yat+PIXEL_Y(1.85))
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
//===========================================================================================================================
|
|
//==================================================== WHITE LINE ===========================================================
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE_HEADER)-(PIXEL_Y(ESC_LINE_Y_GAP*ESC_1ST_LINE_UP))
|
|
// CPRINTLN(debug_dan,"Curr/Yat LINE:",currentH,"/",yAt,"/",PIXEL_Y(ESC_LINE_Y_GAP*15))
|
|
fHDiff = currentH - PIXEL_Y(ESC_LINE_Y_GAP*14)
|
|
IF fHDiff >= 0
|
|
//draw whiteline top
|
|
fadeMult = CLAMP(fHDiff/(0.6*PIXEL_Y(ESC_LINE_Y_ADVANCE)),0,1.0)
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
#IF IS_NEXTGEN_BUILD
|
|
DRAW_RECT(0.5,
|
|
yat-(PIXEL_Y(ESC_LINE_Y_GAP-0.5)-ESC_Y_PIXEL),
|
|
w,
|
|
PIXEL_Y_LINE(1), //PIXEL_Y(1),
|
|
txt_R,txt_G,txt_B,ROUND(fadeMult*txt_A))
|
|
// DRAW_SPRITE("MPHud", "MissionPassedGradient",
|
|
// 0.5,
|
|
// yat+(PIXEL_Y(ESC_LINE_Y_GAP*0.5)),
|
|
// w,
|
|
// PIXEL_Y(ESC_LINE_Y_GAP),
|
|
// 0,
|
|
// txt_R,txt_G,txt_B,EndScreenAlpha)
|
|
#ENDIF
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
//===========================================================================================================================
|
|
//=================================================== ELEMENTS BOX ==========================================================
|
|
yat += PIXEL_Y(ESC_LINE_Y_GAP*ESC_1ST_ELEM_GAP)
|
|
// CPRINTLN(debug_luke,"Curr/Yat elem box:",currentH,"/",yAt)
|
|
IF esd.iElements > 0
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE*ESC_1ST_ELEM_EXTRA_GAP) //6.25 pxls
|
|
ENDIF
|
|
|
|
|
|
INT i = 0
|
|
REPEAT esd.iElements i
|
|
// CPRINTLN(debug_dan,"currH: ",currentH," yAt: ",yAt," -",ESC_Y_POSITION* GET_ASPECT_RATIO_MODIFIER())
|
|
fHDiff = currentH - (yat-ESC_Y_POSITION* GET_ASPECT_RATIO_MODIFIER())
|
|
IF fHDiff >= 0
|
|
//slight fade-out if this is the last element to render
|
|
fadeMult = CLAMP(fHDiff/(0.8*PIXEL_Y(ESC_LINE_Y_ADVANCE)),0,1.0)
|
|
// CPRINTLN(debug_dan,"drawing stat ",i," at alpha ",fadeMult)
|
|
//draw each of the content lines
|
|
PRIVATE_RENDER_ENSCREEN_ELEMENT(esd, i, yat+PIXEL_Y(ESC_LINE_Y_GAP), fontLeft, fontRight,ROUND(EndScreenAlpha * fadeMult))
|
|
ELSE
|
|
EXIT
|
|
ENDIF
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE)
|
|
|
|
IF esd.CompletionType = ESC_MULTI_COMPLETION
|
|
IF i = esd.iMidIndex - 1
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE*ESC_1ST_ELEM_EXTRA_GAP)//6.25 pxls
|
|
// CPRINTLN(debug_dan,"Curr/Yat LINE:",currentH,"/",yAt - ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER())
|
|
fHDiff = currentH - (yat-ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER())
|
|
IF fHDiff >= 0
|
|
yat += PIXEL_Y(ESC_LINE_Y_GAP)//y at the bottom of the white line
|
|
fadeMult = CLAMP(fHDiff/(0.6*PIXEL_Y(ESC_LINE_Y_ADVANCE)),0,1.0)
|
|
//draw whiteline before end
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
#IF IS_NEXTGEN_BUILD
|
|
DRAW_RECT(0.5,
|
|
yat+(PIXEL_Y(ESC_LINE_Y_GAP*0.5)),
|
|
w,
|
|
PIXEL_Y_LINE(1), //PIXEL_Y(1),
|
|
txt_R,txt_G,txt_B,ROUND(fadeMult*txt_A))
|
|
#ENDIF
|
|
|
|
yat += PIXEL_Y(ESC_LINE_Y_GAP*ESC_1ST_ELEM_GAP)
|
|
// CPRINTLN(debug_luke,"Curr/Yat elem box:",currentH,"/",yAt)
|
|
IF esd.iElements > 0
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE*ESC_1ST_ELEM_EXTRA_GAP) //6.25 pxls
|
|
ENDIF
|
|
ELSE
|
|
CWARNINGLN(DEBUG_MISSION_STATS, "exit??? ", currentH, " >= ", (yat-ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER()))
|
|
// EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF esd.CompletionType = ESC_MULTI_COMPLETION
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
//===========================================================================================================================
|
|
//==================================================== WHITE LINE ===========================================================
|
|
IF esd.iElements > 0// AND esd.bShowCompletion
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE*ESC_1ST_ELEM_EXTRA_GAP)//6.25 pxls
|
|
// CPRINTLN(debug_dan,"Curr/Yat LINE:",currentH,"/",yAt - ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER())
|
|
fHDiff = currentH - (yat-ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER())
|
|
IF fHDiff >= 0
|
|
yat += PIXEL_Y(ESC_LINE_Y_GAP)//y at the bottom of the white line
|
|
fadeMult = CLAMP(fHDiff/(0.6*PIXEL_Y(ESC_LINE_Y_ADVANCE)),0,1.0)
|
|
//draw whiteline before end
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
#IF IS_NEXTGEN_BUILD
|
|
DRAW_RECT(0.5,
|
|
yat+(PIXEL_Y(ESC_LINE_Y_GAP*0.5)),
|
|
w,
|
|
PIXEL_Y_LINE(1), //PIXEL_Y(1),
|
|
txt_R,txt_G,txt_B,ROUND(fadeMult*txt_A))
|
|
#ENDIF
|
|
ELSE
|
|
CWARNINGLN(DEBUG_MISSION_STATS, "exit??? ", currentH, " >= ", (yat-ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER()))
|
|
// EXIT
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
//===========================================================================================================================
|
|
//================================================= COMPLETION BOX ==========================================================
|
|
IF esd.bShowCompletion
|
|
// CPRINTLN(debug_dan,"Curr/Yat box:",currentH,"/",yAt - ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER())
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE*ESC_COMPLETION_GAP)
|
|
fHDiff = currentH - (yat-ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER())
|
|
IF fHDiff >=0
|
|
fadeMult = CLAMP(fHDiff/(0.8*PIXEL_Y(ESC_LINE_Y_ADVANCE)),0,1.0)
|
|
// CPRINTLN(debug_luke,"Curr/Yat completion:",currentH,"/",yAt)
|
|
SET_TEXT_COLOUR(txt_R,txt_G,txt_B,ROUND(fadeMult * EndScreenAlpha))
|
|
|
|
//Medal dimensions
|
|
FLOAT ficonw, ficonh
|
|
GET_MENU_ICON_SCREEN_RESOLUTION(MENU_ICON_BOX_EMPTY,FALSE,TRUE,ficonw,ficonh)
|
|
|
|
FLOAT completionLeft = fontLeft, completionRight = fontRight
|
|
|
|
#IF IS_NEXTGEN_BUILD
|
|
IF GET_CURRENT_LANGUAGE() = LANGUAGE_ENGLISH
|
|
completionLeft = fontLeft + (END_SCREEN_CURSIVE_COMP_X_OFFSET / GET_ASPECT_RATIO_MODIFIER()/2.5)
|
|
completionRight = fontRight - (END_SCREEN_CURSIVE_COMP_X_OFFSET/ GET_ASPECT_RATIO_MODIFIER()/2.5)
|
|
|
|
IF esd.CompletionType = ESC_FRACTION_COMPLETION
|
|
completionLeft = fontLeft + ((END_SCREEN_CURSIVE_COMP_X_OFFSET+0.05) / GET_ASPECT_RATIO_MODIFIER()/2.5)
|
|
completionRight = fontRight - ((END_SCREEN_CURSIVE_COMP_X_OFFSET+0.05) / GET_ASPECT_RATIO_MODIFIER()/2.5)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
//If no medal awarded, move slightly right to keep centred
|
|
IF esd.CompletionMedalState = ESMS_NO_MEDAL
|
|
completionLeft += (ficonw*0.28 + ESC_INDENT)/2
|
|
completionRight += (ficonw*0.28 + ESC_INDENT)/2
|
|
ENDIF
|
|
|
|
//TODO Draw completion line here
|
|
IF esd.CompletionType != ESC_STRING_COMPLETION
|
|
SET_TEXT_WRAP(completionLeft,completionRight)
|
|
SET_TEXT_JUSTIFICATION(FONT_LEFT)
|
|
ELSE
|
|
completionLeft = 0.5
|
|
SET_TEXT_JUSTIFICATION(FONT_CENTRE)
|
|
ENDIF
|
|
#IF NOT IS_NEXTGEN_BUILD
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y)
|
|
PRIVATE_RENDER_ENDSCREEN_LABEL(esd.CompletionResultString,completionLeft,yat+PIXEL_Y(ESC_LINE_Y_GAP*2))//4pxls after white line
|
|
#ENDIF
|
|
#IF IS_NEXTGEN_BUILD
|
|
SET_TEXT_SCALE(1.0, 0.4)//END_SCREEN_CURSIVE_COMP_SCALE)
|
|
IF IS_STRING_NULL_OR_EMPTY(esd.CompletionLiteralString)
|
|
PRIVATE_RENDER_ENDSCREEN_LABEL(esd.CompletionResultString,completionLeft,yat+PIXEL_Y(ESC_LINE_Y_GAP*2), DEFAULT, DEFAULT)//4pxls after white
|
|
ELSE
|
|
PRIVATE_RENDER_ENDSCREEN_LABEL_WITH_LITERAL_STRING(esd.CompletionResultString,esd.CompletionLiteralString,completionLeft,yat+PIXEL_Y(ESC_LINE_Y_GAP*2), DEFAULT, DEFAULT)//4pxls after white line
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
//and percentage if needed
|
|
|
|
SET_TEXT_WRAP(completionLeft,completionRight)
|
|
SET_TEXT_JUSTIFICATION(FONT_RIGHT)
|
|
#IF NOT IS_NEXTGEN_BUILD
|
|
SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y)
|
|
#ENDIF
|
|
#IF IS_NEXTGEN_BUILD
|
|
SET_TEXT_SCALE(1.0, 0.4)//END_SCREEN_CURSIVE_COMP_SCALE)
|
|
#ENDIF
|
|
SET_TEXT_CENTRE(FALSE)
|
|
#IF NOT IS_NEXTGEN_BUILD
|
|
SET_TEXT_FONT(FONT_STANDARD)
|
|
#ENDIF
|
|
#IF IS_NEXTGEN_BUILD
|
|
//SET_TEXT_FONT(FONT_CURSIVE)
|
|
#ENDIF
|
|
PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
|
|
FLOAT medalRight = completionRight
|
|
|
|
#IF NOT IS_NEXTGEN_BUILD
|
|
TEXT_LABEL medaldictionary = "CommonMenu"
|
|
TEXT_LABEL medalsprite = "Common_Medal"
|
|
#ENDIF
|
|
#IF IS_NEXTGEN_BUILD
|
|
TEXT_LABEL medaldictionary = "MPHud"
|
|
TEXT_LABEL_31 medalsprite = "MissionPassedMedal"
|
|
#ENDIF
|
|
|
|
medalRight -= ficonw*0.28 + ESC_INDENT//ESC_X_PIXEL*(MEDAL_PIX_SIDE/1.5)
|
|
|
|
SET_TEXT_WRAP(completionLeft,medalRight)
|
|
SET_TEXT_COLOUR(txt_R,txt_G,txt_B,ROUND(fadeMult * EndScreenAlpha))
|
|
|
|
SWITCH esd.CompletionType
|
|
CASE ESC_PERCENTAGE_COMPLETION
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("PERCENTAGE")
|
|
ADD_TEXT_COMPONENT_INTEGER(esd.iCompletionValueA)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(completionLeft, yat+PIXEL_Y(ESC_LINE_Y_GAP*2))//4pxls after white line
|
|
BREAK
|
|
|
|
CASE ESC_FRACTION_COMPLETION
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("FO_TWO_NUM")
|
|
ADD_TEXT_COMPONENT_INTEGER(esd.iCompletionValueA)
|
|
ADD_TEXT_COMPONENT_INTEGER(esd.iCompletionValueB)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(completionLeft, yat+PIXEL_Y(ESC_LINE_Y_GAP*2))//4pxls after white line
|
|
BREAK
|
|
|
|
CASE ESC_XP_COMPLETION
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("MTPHPER_XPNO")
|
|
ADD_TEXT_COMPONENT_INTEGER(esd.iCompletionValueA)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(completionLeft, yat+PIXEL_Y(ESC_LINE_Y_GAP*2))//4pxls after white line
|
|
BREAK
|
|
|
|
CASE ESC_CASH_COMPLETION
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("ESDOLLA")
|
|
// ADD_TEXT_COMPONENT_INTEGER(esd.iCompletionValueA)
|
|
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(esd.iCompletionValueA, INTEGER_FORMAT_COMMA_SEPARATORS)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(completionLeft, yat+PIXEL_Y(ESC_LINE_Y_GAP*2))//4pxls after white line
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
REQUEST_STREAMED_TEXTURE_DICT(medaldictionary)
|
|
|
|
IF esd.CompletionMedalState != ESMS_NO_MEDAL
|
|
AND HAS_STREAMED_TEXTURE_DICT_LOADED(medaldictionary)
|
|
INT mr = 255
|
|
INT mg = 255
|
|
INT mb = 255
|
|
INT ma = EndScreenAlpha
|
|
SWITCH esd.CompletionMedalState
|
|
CASE ESMS_BRONZE
|
|
GET_HUD_COLOUR(HUD_COLOUR_BRONZE,mr,mg,mb,ma)
|
|
BREAK
|
|
CASE ESMS_GOLD
|
|
GET_HUD_COLOUR(HUD_COLOUR_GOLD,mr,mg,mb,ma)
|
|
BREAK
|
|
CASE ESMS_SILVER
|
|
GET_HUD_COLOUR(HUD_COLOUR_SILVER,mr,mg,mb,ma)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//FLOAT fmedalwh = ESC_X_PIXEL*(MEDAL_PIX_SIDE/3)
|
|
FLOAT fmedalhh = ESC_Y_PIXEL*(MEDAL_PIX_SIDE/3)
|
|
|
|
FLOAT fmedalw = ESC_X_PIXEL*MEDAL_PIX_SIDE*2//twice the size for new texture
|
|
FLOAT fmedalh = ESC_Y_PIXEL*MEDAL_PIX_SIDE*2//twice the size for new texture
|
|
FLOAT fmedalcx = (completionRight+PIXEL_X(4))- ESC_INDENT
|
|
FLOAT fmedalcy = yat + (PIXEL_Y(END_SCREEN_MEDAL_Y_OFFSET)) + fmedalhh
|
|
|
|
//Move medal left if no completion text
|
|
IF esd.CompletionType = INT_TO_ENUM(END_SCREEN_COMPLETION_TYPE,-1)
|
|
fmedalCx -= ESC_INDENT*6
|
|
ENDIF
|
|
|
|
fmedalw *= END_SCREEN_MEDAL_SCALE
|
|
fmedalh *= END_SCREEN_MEDAL_SCALE
|
|
|
|
DRAW_SPRITE(medaldictionary, medalsprite,
|
|
fmedalCx,//(completionRight) - fmedalwh*1.1,
|
|
fmedalCy, //fmedalhh+
|
|
fmedalw, fmedalh,
|
|
0,
|
|
mr, mg, mb, ROUND(fadeMult * EndScreenAlpha))
|
|
ENDIF
|
|
|
|
//===========================================================================================================================
|
|
//==================================================== WHITE LINE ===========================================================
|
|
yat += PIXEL_Y(ESC_LINE_Y_ADVANCE_HEADER)-(ESC_LINE_Y_GAP)
|
|
// CPRINTLN(debug_luke,"Curr/Yat line3:",currentH,"/",yAt)
|
|
// IF currentH >= (yat-ESC_Y_POSITION * GET_ASPECT_RATIO_MODIFIER())
|
|
// //draw whiteline before end
|
|
// PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
// #IF NOT IS_NEXTGEN_BUILD
|
|
// DRAW_RECT(0.5,
|
|
// yat,//-(PIXEL_Y(ESC_LINE_Y_GAP*0.5)),
|
|
// w,
|
|
// PIXEL_Y(ESC_LINE_Y_GAP),
|
|
// 255,255,255,EndScreenAlpha)
|
|
// #ENDIF
|
|
// #IF IS_NEXTGEN_BUILD
|
|
//// DRAW_SPRITE("MPHud", "MissionPassedGradient",
|
|
//// 0.5,
|
|
//// yat,//-(PIXEL_Y(ESC_LINE_Y_GAP*0.5)),
|
|
//// w,
|
|
//// PIXEL_Y(ESC_LINE_Y_GAP),
|
|
//// 0,
|
|
//// 255,255,255,EndScreenAlpha)
|
|
// #ENDIF
|
|
// ELSE
|
|
// EXIT
|
|
// ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
// CPRINTLN(debug_dan,"")
|
|
|
|
//===========================================================================================================================
|
|
//===================================================== VOTE BOX ============================================================
|
|
|
|
// IF esd.bVoteModeEnabled AND socialH > 0.0
|
|
// FLOAT remainder = socialH
|
|
// remainder -= socialH*0.08
|
|
// yat += socialH*0.08
|
|
// //[ES_HELP_SOC1:MISHSTA]
|
|
// //Let the ~y~Social Club Community~s~ know if you
|
|
//
|
|
// //draw the title string
|
|
// IF esd.fVoteBarProg > 0.08
|
|
// SET_TEXT_COLOUR(txt_R,txt_G,txt_B,EndScreenAlpha)
|
|
// SET_TEXT_WRAP(fontLeft,fontRight)
|
|
// SET_TEXT_JUSTIFICATION(FONT_CENTRE)
|
|
// SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y)
|
|
// PRIVATE_RENDER_ENDSCREEN_LABEL("ES_HELP_SOC1",0.5,yat+PIXEL_Y(ESC_LINE_Y_GAP*2),TRUE)
|
|
// ENDIF
|
|
//
|
|
//
|
|
// remainder -= socialH*0.2
|
|
// yat += socialH*0.2
|
|
// //[ES_HELP_SOC2:MISHSTA]
|
|
// //enjoyed this race. Vote here:
|
|
//
|
|
// //draw the title string
|
|
// IF esd.fVoteBarProg > 0.28
|
|
// SET_TEXT_COLOUR(txt_R,txt_G,txt_B,EndScreenAlpha)
|
|
// SET_TEXT_WRAP(fontLeft,fontRight)
|
|
// SET_TEXT_JUSTIFICATION(FONT_CENTRE)
|
|
// SET_TEXT_SCALE(1.0, Get_PT_scale(14))//CUSTOM_MENU_TEXT_SCALE_Y)
|
|
// if esd.eVoteGameType = ESMGT_RACE
|
|
// PRIVATE_RENDER_ENDSCREEN_LABEL("ES_HELP_SOC2",0.5,yat+PIXEL_Y(ESC_LINE_Y_GAP*2),TRUE)
|
|
// elif esd.eVoteGameType = ESMGT_DEATHMATCH
|
|
// PRIVATE_RENDER_ENDSCREEN_LABEL("ES_HELP_SOC2b",0.5,yat+PIXEL_Y(ESC_LINE_Y_GAP*2),TRUE)
|
|
// elif esd.eVoteGameType = ESMGT_MISSION
|
|
// PRIVATE_RENDER_ENDSCREEN_LABEL("ES_HELP_SOC2c",0.5,yat+PIXEL_Y(ESC_LINE_Y_GAP*2),TRUE)
|
|
// endif
|
|
// ENDIF
|
|
//
|
|
// remainder -= socialH*0.3
|
|
// yat += socialH*0.3
|
|
// //[ES_HELP_SOC3:MISHSTA]
|
|
// //Like / Dislike
|
|
//
|
|
// //draw the title string
|
|
// IF esd.fVoteBarProg > 0.58
|
|
// SET_TEXT_COLOUR(txt_R,txt_G,txt_B,EndScreenAlpha)
|
|
// SET_TEXT_WRAP(fontLeft,fontRight)
|
|
// SET_TEXT_JUSTIFICATION(FONT_CENTRE)
|
|
// SET_TEXT_SCALE(1.0, Get_PT_scale(17))
|
|
// PRIVATE_RENDER_ENDSCREEN_LABEL("ES_HELP_SOC3",0.5,yat+PIXEL_Y(ESC_LINE_Y_GAP*2),TRUE)
|
|
// //draw thumbs
|
|
// FLOAT fThumbw = ESC_X_PIXEL * MEDAL_PIX_SIDE * 3
|
|
// FLOAT fThumbh = ESC_Y_PIXEL * MEDAL_PIX_SIDE * 3
|
|
// FLOAT fThumbhh = ESC_Y_PIXEL* (MEDAL_PIX_SIDE/3)
|
|
//
|
|
// SET_TEXT_SCALE(1.0, Get_PT_scale(17))
|
|
// BEGIN_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT("ES_HELP_SOC3")
|
|
// FLOAT wx = END_TEXT_COMMAND_GET_SCREEN_WIDTH_OF_DISPLAY_TEXT(TRUE)
|
|
//
|
|
//
|
|
// //left thumb
|
|
// DRAW_SPRITE("MPLeaderboard", "Leaderboard_thumb",
|
|
// 0.5 - (wx*0.5) - (fThumbw*0.6),
|
|
// yat + (PIXEL_Y(9)) + fThumbhh,
|
|
// fThumbw, fThumbh, 0,255, 255, 255, EndScreenAlpha)
|
|
//
|
|
// //right thumb
|
|
// DRAW_SPRITE("MPLeaderboard", "Leaderboard_thumb",
|
|
// 0.5+ (wx*0.5) + (fThumbw*0.6),
|
|
// yat + (PIXEL_Y(9)) + fThumbhh,
|
|
// fThumbw, fThumbh, 180,255, 255, 255, EndScreenAlpha)
|
|
//
|
|
// ENDIF
|
|
//
|
|
// IF remainder > 0
|
|
// yat += remainder
|
|
// ENDIF
|
|
//
|
|
//
|
|
// ENDIF
|
|
//===========================================================================================================================
|
|
//==================================================== WHITE LINE ===========================================================
|
|
// IF currentH >= (yat-ESC_Y_POSITION* GET_ASPECT_RATIO_MODIFIER())
|
|
// //draw whiteline before end
|
|
// PRIVATE_ENDSCREEN_DRAW_ORDER()
|
|
// #IF NOT IS_NEXTGEN_BUILD
|
|
// DRAW_RECT(0.5,
|
|
// yat, //-(PIXEL_Y(ESC_LINE_Y_GAP*0.5)),
|
|
// w,
|
|
// PIXEL_Y(ESC_LINE_Y_GAP),
|
|
// 255,255,255,EndScreenAlpha)
|
|
// #ENDIF
|
|
// #IF IS_NEXTGEN_BUILD
|
|
//// DRAW_SPRITE("MPHud", "MissionPassedGradient",
|
|
//// 0.5,
|
|
//// yat, //-(PIXEL_Y(ESC_LINE_Y_GAP*0.5)),
|
|
//// w,
|
|
//// PIXEL_Y(ESC_LINE_Y_GAP),
|
|
//// 0,
|
|
//// 255,255,255,EndScreenAlpha)
|
|
//// #ENDIF
|
|
// ELSE
|
|
// EXIT
|
|
// ENDIF
|
|
//===========================================================================================================================
|
|
|
|
ENDPROC
|
|
Proc INIT_ENDSCREEN_VALUES(END_SCREEN_DATASET &esd)
|
|
|
|
esd.fFadeOutMult = 1.0
|
|
esd.iFadeOutSplashTimer = 0
|
|
esd.fVoteBarProg = 0.0
|
|
esd.iEndScreenDisplayFinish = 0
|
|
esd.fTitleUpMult = 0.0
|
|
esd.fScrollOutMult = 0.0
|
|
esd.fBlendInProgress = 0.0
|
|
esd.fBlendInTargetYSum = 0.0 //the precalculated target height
|
|
esd.bTransitionOutCalled = FALSE
|
|
esd.bDoneFlash = FALSE
|
|
esd.IGameTimerReplacement = 0
|
|
esd.bNoLoadingScreenEnabled = FALSE
|
|
esd.bStatsExpanded = FALSE
|
|
esd.bAlwaysShowStats = FALSE
|
|
|
|
esd.fTrueHalfWidth = ESC_HALF_WIDTH
|
|
|
|
esd.bStartedFailformAnim = FALSE
|
|
esd.bStartedMoveUp = FALSE
|
|
|
|
esd.iLastFrameRendered = 0
|
|
esd.bLastRender = FALSE
|
|
|
|
esd.fCircMult = 1
|
|
|
|
ENDPROC
|
|
PROC RESET_ENDSCREEN(END_SCREEN_DATASET &esd)
|
|
//SCALEFORM_INDEX splash
|
|
INIT_ENDSCREEN_VALUES(esd)
|
|
|
|
esd.iVoteTimer = 0
|
|
esd.iTitleSubelements = 0
|
|
esd.iElements = 0
|
|
esd.bVoteModeEnabled = FALSE
|
|
esd.eVoteResult = ESSRV_UNSET
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// CALL THIS BEFORE PREPARE IF YOU USE IT
|
|
PROC ENDSCREEN_CONFIGURE_VOTE_PANEL(END_SCREEN_DATASET &esd,INT iVoteDurationSeconds,END_SCREEN_MP_GAME_TYPE gameType = ESMGT_RACE)
|
|
|
|
esd.bVoteModeEnabled = TRUE
|
|
esd.fVoteBarProg = 0.0
|
|
esd.eVoteResult = ESSRV_UNSET
|
|
esd.iVoteTimer = -iVoteDurationSeconds*1000
|
|
esd.bHoldOnEnd = TRUE
|
|
esd.eVoteGameType = gameType
|
|
ENDPROC
|
|
|
|
FUNC END_SCREEN_SOCIAL_RETURN_VALUE GET_ENDSCREEN_SOCIAL_RETURN_VALUE(END_SCREEN_DATASET &esd)
|
|
RETURN esd.eVoteResult
|
|
ENDFUNC
|
|
|
|
PROC DEBUG_ENDSCREEN_DRAW(END_SCREEN_DATASET &esd)
|
|
UNUSED_PARAMETER(esd)
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_23 tlTime
|
|
Float yAt = 0.6, xAt = 0.7
|
|
|
|
//Draw end screen timer
|
|
tlTime ="Time: "
|
|
tlTime+= esd.IGameTimerReplacement
|
|
tlTime+= "/"
|
|
tlTime+= esd.iEndScreenDisplayFinish
|
|
SET_TEXT_SCALE(0.7,0.7)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(xAt,yAt,"STRING",tlTime)
|
|
yAt +=0.05
|
|
|
|
//Draw blend-out
|
|
tlTime ="Blend-in: "
|
|
tlTime+= ROUND(esd.fBlendInProgress*100)
|
|
SET_TEXT_SCALE(0.7,0.7)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(xAt,yAt,"STRING",tlTime)
|
|
yAt +=0.05
|
|
|
|
//Draw circ mult
|
|
tlTime ="Circ mult: "
|
|
tlTime+= ROUND(esd.fCircMult*100)
|
|
SET_TEXT_SCALE(0.7,0.7)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(xAt,yAt,"STRING",tlTime)
|
|
yAt +=0.05
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
//populate
|
|
//prepare
|
|
//render
|
|
//shutdown
|
|
|
|
|
|
/// PURPOSE:
|
|
/// render the data in the heist endscreen structure
|
|
/// PARAMS:
|
|
/// esd - data handle
|
|
/// bBlock - if true will block and re-render until done
|
|
/// otherwise will return state until done
|
|
/// skipperMultiplier - How much pressing A to skip will acceperate the screen timer
|
|
/// shortShard - shorter version of the shard (for no stat pass screens)
|
|
/// bIgnoreOwnTimer - Won't stop rendering while this is true - makes stop time = current + 1 sec each time it's set
|
|
///
|
|
/// RETURNS:
|
|
/// True when render complete
|
|
FUNC BOOL RENDER_ENDSCREEN(END_SCREEN_DATASET &esd, BOOL bBlockUntilDone = FALSE,FLOAT skipperMultiplier = 1.0,
|
|
BOOL shortShard = FALSE, BOOL bIgnoreOwnTimer = FALSE, BOOL bAllowReexpand = FALSE)
|
|
|
|
//Only render once a frame, return FALSE to avoid thinking the screen has stopped rendering naturally
|
|
IF GET_FRAME_COUNT() = esd.iLastFrameRendered
|
|
CPRINTLN(debug_mission_stats,"Already rendered this frame (",esd.iLastFrameRendered,"), avoiding double draw")
|
|
RETURN esd.bLastRender
|
|
ENDIF
|
|
esd.iLastFrameRendered = GET_FRAME_COUNT()
|
|
|
|
// DEBUG_ENDSCREEN_DRAW(esd)
|
|
|
|
// PT Fix 1558760
|
|
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
|
|
IF IS_PED_DEAD_OR_DYING(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
esd.bLastRender = TRUE
|
|
RETURN TRUE // bail out
|
|
ENDIF
|
|
|
|
IF IS_PED_BEING_ARRESTED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
esd.bLastRender = TRUE
|
|
RETURN TRUE // bail out
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT esd.bNoLoadingScreenEnabled
|
|
IF IS_SCREEN_FADED_OUT()
|
|
OR IS_SCREEN_FADING_OUT()
|
|
SET_NO_LOADING_SCREEN(TRUE)
|
|
esd.bNoLoadingScreenEnabled = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//DRAW_GENERIC_TIMER
|
|
//DRAW_TIMER_HUD
|
|
|
|
//Before disabling the special ability toggle, first clear any active abilities.
|
|
#IF USE_TU_CHANGES
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
|
|
IF IS_SPECIAL_ABILITY_ACTIVE(PLAYER_ID())
|
|
CPRINTLN(DEBUG_MISSION_STATS, "RENDER_ENDSCREEN: Clearing player special ability as end screen is displaying.")
|
|
SPECIAL_ABILITY_DEACTIVATE(PLAYER_ID())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_DISTRICT_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME)
|
|
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_WHEEL)
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CHARACTER_WHEEL)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_SECONDARY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_PC)
|
|
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
IF GET_ARE_CAMERA_CONTROLS_DISABLED() // B*2277553 - Now checking for camera off, not player control off
|
|
OR (IS_SCREEN_FADED_OUT() AND NOT IS_SCREEN_FADING_IN())
|
|
SET_MOUSE_CURSOR_THIS_FRAME()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Stop the comms controller queue timers from ticking while the end screen is drawing.
|
|
g_bPauseCommsQueuesThisFrame = TRUE
|
|
|
|
IF NOT esd.bDoneFlash
|
|
SWITCH GET_PLAYER_PED_ENUM(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
CASE CHAR_FRANKLIN
|
|
ANIMPOSTFX_PLAY("SuccessFranklin",1000,FALSE)
|
|
BREAK
|
|
CASE CHAR_TREVOR
|
|
ANIMPOSTFX_PLAY("SuccessTrevor",1000,FALSE)
|
|
BREAK
|
|
DEFAULT//CASE CHAR_MICHAEL or MP
|
|
ANIMPOSTFX_PLAY("SuccessMichael",1000,FALSE)
|
|
BREAK
|
|
ENDSWITCH
|
|
esd.bDoneFlash = TRUE
|
|
ENDIF
|
|
|
|
|
|
|
|
IF esd.iEndScreenDisplayFinish = 0
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement + FLOOR(ESC_DEFAULT_TIME *skipperMultiplier)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "RENDER_ENDSCREEN: first call on dataset, setting timer")
|
|
ENDIF
|
|
//Update own timer to never stop rendering
|
|
IF bIgnoreOwnTimer AND esd.IGameTimerReplacement >= esd.iEndScreenDisplayFinish - ESC_BLEND_TIME
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement + 2*ESC_BLEND_TIME
|
|
ENDIF
|
|
|
|
IF esd.fBlendInTargetYSum = 0.0 //recalcuate the height
|
|
esd.fBlendInTargetYSum += PIXEL_Y(ESC_LINE_Y_ADVANCE_HEADER) // Title box should = 33pxls
|
|
esd.fBlendInTargetYSum += esd.iElements* PIXEL_Y(ESC_LINE_Y_ADVANCE)
|
|
IF esd.iElements > 0
|
|
|
|
esd.fBlendInTargetYSum += PIXEL_Y(ESC_LINE_Y_ADVANCE*0.5)
|
|
|
|
ENDIF
|
|
IF esd.bShowCompletion
|
|
esd.fBlendInTargetYSum += PIXEL_Y(ESC_LINE_Y_ADVANCE_HEADER) - PIXEL_Y(ESC_LINE_Y_GAP)//completion
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BOOL rendering = TRUE
|
|
|
|
WHILE rendering
|
|
//Set the 'end screen on' global boolean to true
|
|
SET_RESULT_SCREEN_DISPLAYING_STATE(TRUE)
|
|
|
|
//render the data
|
|
esd.IGameTimerReplacement += round(0 +@ 1000)
|
|
|
|
RAW_ENDSCREEN_DRAW(esd,skipperMultiplier,shortShard)
|
|
|
|
#IF NOT IS_NEXTGEN_BUILD
|
|
CONST_FLOAT fCONST_TitleUpDelta 0.15
|
|
CONST_FLOAT fCONST_FadeOutDelta 0.81
|
|
CONST_FLOAT fCONST_ScrollOutDelta 0.14
|
|
#ENDIF
|
|
#IF IS_NEXTGEN_BUILD
|
|
CONST_FLOAT fCONST_TitleUpDelta 0.225
|
|
CONST_FLOAT fCONST_FadeOutDelta 1.215
|
|
CONST_FLOAT fCONST_ScrollOutDelta 0.30
|
|
//Circular interp constants
|
|
// Stats scroll speed increases in both expand and contract
|
|
// Contract is slower (as per shard anim) so it's multiplied locally
|
|
CONST_FLOAT fCONST_CircInterpDelta 0.07
|
|
CONST_FLOAT fCONST_CircMultMin 0.75
|
|
CONST_FLOAT fCONST_CircMultMax 1.15
|
|
#ENDIF
|
|
|
|
|
|
IF esd.IGameTimerReplacement > esd.iEndScreenDisplayFinish + ESC_MOVE_UP_GRACE - ESC_DEFAULT_TIME*skipperMultiplier //text move up time
|
|
IF esd.fTitleUpMult < 1.0
|
|
esd.fTitleUpMult += 0.0 +@ (1.0/fCONST_TitleUpDelta)
|
|
ENDIF
|
|
ENDIF
|
|
esd.fTitleUpMult= CLAMP(esd.fTitleUpMult,0.0,1.0)
|
|
|
|
IF esd.IGameTimerReplacement > esd.iEndScreenDisplayFinish - ESC_ROLL_UP_GRACE
|
|
IF NOT esd.bHoldOnEnd
|
|
IF esd.bStatsExpanded
|
|
esd.bStatsExpanded = FALSE
|
|
esd.bAlwaysShowStats = FALSE
|
|
esd.fCircMult = fCONST_CircMultMin //Reset interp multiplier
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash,"ROLL_UP_BACKGROUND")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
esd.fFadeOutMult -= 0.0 +@ (1.0/fCONST_FadeOutDelta)
|
|
endif
|
|
ENDIF
|
|
esd.fFadeOutMult = CLAMP(esd.fFadeOutMult,0.0,1.0)
|
|
|
|
IF esd.fFadeOutMult <= 0.70
|
|
and not esd.bTransitionOutCalled
|
|
AND (esd.splash != NULL)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash, "TRANSITION_OUT")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
esd.iFadeOutSplashTimer = esd.IGameTimerReplacement
|
|
esd.bTransitionOutCalled = true
|
|
endif
|
|
|
|
IF esd.IGameTimerReplacement > esd.iEndScreenDisplayFinish - ESC_ROLL_UP_GRACE
|
|
IF NOT esd.bHoldOnEnd
|
|
IF esd.fScrollOutMult < 1.0
|
|
esd.fScrollOutMult += 0.0 +@ (1.0/fCONST_ScrollOutDelta)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
esd.fScrollOutMult = CLAMP(esd.fScrollOutMult,0.0,1.0)
|
|
|
|
// If control method has changed, update buttons
|
|
IF esd.bShowSkipperPrompt
|
|
IF HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL)
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(esd.button)
|
|
IF NOT esd.bVoteModeEnabled
|
|
ENDSCREEN_ADD_SKIP_BUTTONS(esd, (NOT esd.bStatsExpanded) AND (esd.iElements > 0))
|
|
// ELSE
|
|
// ENDSCREEN_ADD_VOTE_BUTTONS(esd) // Not sure if the vote screen exists anymore, so haven't been able to test this bit. It should in theory be fine though if voting screen needs to be made to refresh sprites.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//update the blend
|
|
//Check to see if stats should be expanded, only if not transitioning out
|
|
// we need to check the disabled control as on PC expand is jump
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND)
|
|
AND esd.iEndScreenDisplayFinish > esd.IGameTimerReplacement+ESC_ROLL_UP_GRACE
|
|
IF NOT esd.bAlwaysShowStats AND esd.iElements != 0 AND HAS_SCALEFORM_MOVIE_LOADED(esd.button)
|
|
AND esd.IGameTimerReplacement > esd.iEndScreenDisplayFinish + 1165 - 15000*skipperMultiplier //grace period for stats dropdown
|
|
//Check whether to expand or contract
|
|
IF NOT esd.bStatsExpanded
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash,"ROLL_DOWN_BACKGROUND")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
esd.bStatsExpanded = TRUE
|
|
esd.fCircMult = fCONST_CircMultMin //Reset interp multiplier
|
|
//Increase the timer in case it is close to closing-out
|
|
IF esd.IGameTimerReplacement > esd.iEndScreenDisplayFinish - 5000
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement + 5000
|
|
ENDIF
|
|
ELIF bAllowReexpand //Only if allowed, default is FALSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash,"ROLL_UP_BACKGROUND")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
esd.bStatsExpanded = FALSE
|
|
esd.fCircMult = fCONST_CircMultMin //Reset interp multiplier
|
|
ENDIF
|
|
|
|
//Re-draw buttons with "expand" removed
|
|
ENDSCREEN_ADD_SKIP_BUTTONS(esd, (NOT esd.bStatsExpanded) AND (esd.iElements > 0))
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Expand stats multiplier (goes up when expanding, down when not
|
|
IF (esd.bStatsExpanded OR esd.bAlwaysShowStats) AND esd.iElements != 0
|
|
IF esd.IGameTimerReplacement > esd.iEndScreenDisplayFinish + 1165 - 15000*skipperMultiplier // grace period
|
|
IF esd.bAlwaysShowStats AND NOT esd.bStatsExpanded
|
|
esd.bStatsExpanded = TRUE
|
|
esd.fCircMult = fCONST_CircMultMin //Reset interp multiplier
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash,"ROLL_DOWN_BACKGROUND")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
//Clamp-increase the blendinprogress
|
|
esd.fBlendInProgress = CLAMP(esd.fBlendInProgress+@ (1.0/fCONST_ScrollOutDelta*esd.fCircMult),0.0,1.0)
|
|
esd.fCircMult = CLAMP(esd.fCircMult + fconst_circInterpDelta,fCONST_CircMultMin,fCONST_CircMultMax)
|
|
ENDIF
|
|
ELSE
|
|
//Clamp-decrease the blendinprogress
|
|
esd.fBlendInProgress = CLAMP(esd.fBlendInProgress-@ (1.0/fCONST_ScrollOutDelta*esd.fCircMult*0.01),0.0,1.0)
|
|
esd.fCircMult = CLAMP(esd.fCircMult + fconst_circInterpDelta,fCONST_CircMultMin,fCONST_CircMultMax)
|
|
ENDIF
|
|
//check to see if done
|
|
IF esd.IGameTimerReplacement > esd.iEndScreenDisplayFinish
|
|
|
|
IF esd.bHoldOnEnd
|
|
//display x to continue button if need be
|
|
//wait for button press
|
|
//if so then rendering = false
|
|
IF NOT esd.bVoteModeEnabled
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
|
|
// rendering = FALSE
|
|
esd.bHoldOnEnd = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF esd.IGameTimerReplacement - esd.iFadeOutSplashTimer > 1000
|
|
and esd.bTransitionOutCalled
|
|
rendering = FALSE
|
|
endif
|
|
ENDIF
|
|
endif
|
|
|
|
//Store last frame's rendering result (negated, returns true when done rendering)
|
|
esd.bLastRender = !rendering
|
|
|
|
IF bBlockUntilDone
|
|
WAIT(0)
|
|
ELSE
|
|
//Set the 'end screen on' global boolean to false
|
|
IF !rendering
|
|
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
|
|
ENDIF
|
|
RETURN !rendering
|
|
ENDIF
|
|
|
|
|
|
ENDWHILE
|
|
//made it out! the screen process is complete.
|
|
CPRINTLN(DEBUG_MISSION_STATS, "RENDER_ENDSCREEN: process complete")
|
|
|
|
//Set the 'end screen on' global boolean to false
|
|
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
//Force pass screen to transition out by simulating Accept being pressed
|
|
PROC ENDSCREEN_START_TRANSITION_OUT(END_SCREEN_DATASET &esd)
|
|
//Only do it if it is the case
|
|
IF esd.bHoldOnEnd OR esd.IGameTimerReplacement <= esd.iEndScreenDisplayFinish
|
|
esd.bHoldOnEnd = FALSE
|
|
esd.iEndScreenDisplayFinish = esd.IGameTimerReplacement -1
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
//Population calls
|
|
PROC SET_ENDSCREEN_DATASET_HEADER(END_SCREEN_DATASET &esd,
|
|
STRING splash,
|
|
STRING title,
|
|
BOOL bTitleIsUserName = FALSE)
|
|
//
|
|
|
|
esd.passed_splash_message = splash
|
|
esd.title = title
|
|
|
|
|
|
esd.titleIsUserName = bTitleIsUserName
|
|
esd.eSplashType = ESST_REGULAR
|
|
ENDPROC
|
|
|
|
PROC SET_ENDSCREEN_DATASET_SPLASH_WITH_SUBINTS(END_SCREEN_DATASET &esd,
|
|
STRING splash,
|
|
INT ValueA,
|
|
INT ValueB = 0,
|
|
BOOL UseBoth = FALSE)
|
|
//
|
|
esd.passed_splash_message = splash
|
|
esd.iSplashSubA = ValueA
|
|
esd.iSplashSubB = ValueB
|
|
IF UseBoth
|
|
esd.eSplashType = ESST_TWO_SUB
|
|
ELSE
|
|
esd.eSplashType = ESST_ONE_SUB
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC SET_ENDSCREEN_DATASET_HEADER_SINGLE_SUB_LITERAL_STRING(END_SCREEN_DATASET &esd,STRING str)
|
|
//
|
|
esd.iTitleSubelements = 1
|
|
esd.titleSubElementType[0] = ESTSET_LITERAL_STRING
|
|
esd.titleSubstrings[0] = str
|
|
ENDPROC
|
|
|
|
PROC SET_ENDSCREEN_DATASET_HEADER_SINGLE_SUB_STRING(END_SCREEN_DATASET &esd,STRING str)
|
|
//
|
|
esd.iTitleSubelements = 1
|
|
esd.titleSubElementType[0] = ESTSET_STRING
|
|
esd.titleSubstrings[0] = str
|
|
ENDPROC
|
|
|
|
PROC SET_ENDSCREEN_DATASET_HEADER_SINGLE_SUB_INT(END_SCREEN_DATASET &esd,
|
|
INT value)
|
|
//
|
|
esd.iTitleSubelements = 1
|
|
esd.titleSubElementType[0] = ESTSET_INT
|
|
esd.iTitleSubInts[0] = value
|
|
ENDPROC
|
|
|
|
PROC SET_ENDSCREEN_DATASET_HEADER_SUB_INT_STRING_INT(END_SCREEN_DATASET &esd,
|
|
INT valueA,STRING str,INT valueB)
|
|
//
|
|
esd.iTitleSubelements = 3
|
|
esd.titleSubElementType[0] = ESTSET_INT
|
|
esd.titleSubElementType[1] = ESTSET_STRING
|
|
esd.titleSubElementType[2] = ESTSET_INT
|
|
|
|
esd.iTitleSubInts[0] = valueA
|
|
esd.iTitleSubInts[1] = valueB
|
|
|
|
esd.titleSubstrings[0] = str
|
|
ENDPROC
|
|
|
|
PROC SET_ENDSCREEN_DATASET_HEADER_SUB_INT_STRING(END_SCREEN_DATASET &esd,
|
|
INT value,STRING str)
|
|
//
|
|
esd.iTitleSubelements = 2
|
|
esd.titleSubElementType[0] = ESTSET_INT
|
|
esd.titleSubElementType[1] = ESTSET_STRING
|
|
|
|
esd.iTitleSubInts[0] = value
|
|
|
|
esd.titleSubstrings[0] = str
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(END_SCREEN_DATASET &esd,
|
|
END_SCREEN_ELEMENT_FORMATTING type,
|
|
STRING name,
|
|
STRING text,
|
|
INT valueA,
|
|
INT valueB,
|
|
END_SCREEN_CHECK_MARK_STATUS checkState,
|
|
BOOL bNameIsPlayerName = FALSE)
|
|
|
|
//
|
|
IF esd.iElements = END_SCREEN_MAX_ELEMENTS
|
|
EXIT
|
|
ENDIF
|
|
INT i = esd.iElements
|
|
esd.ElementFormat[i] = type
|
|
esd.ElementName[i] = name
|
|
esd.ElementText[i] = text
|
|
esd.ElementValA[i] = valueA
|
|
esd.ElementValB[i] = valueB
|
|
esd.ElementCheck[i] = checkState
|
|
//esd.ElementInvalidation[i] = bInvalidated
|
|
CDEBUG1LN(DEBUG_MISSION_STATS,GET_THIS_SCRIPT_NAME(),"-> ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT: name ",name, " val A:",valueA," val B:",valueB," check:",ENUM_TO_INT(checkState))
|
|
esd.ElementIsPlayerName[i] = bNameIsPlayerName
|
|
++esd.iElements
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC SET_ENDSCREEN_COMPLETION_LINE_STATE(END_SCREEN_DATASET &esd,
|
|
BOOL bShow,
|
|
STRING resultString,
|
|
INT valueA,
|
|
INT valueB,
|
|
END_SCREEN_COMPLETION_TYPE type = ESC_PERCENTAGE_COMPLETION,
|
|
END_SCREEN_MEDAL_STATUS medal = ESMS_NO_MEDAL
|
|
, INT iMidIndex = 0 )
|
|
//
|
|
esd.bShowCompletion = bShow
|
|
esd.CompletionResultString = resultString
|
|
esd.CompletionLiteralString = ""
|
|
esd.iCompletionValueA = valueA
|
|
esd.iCompletionValueB = valueB
|
|
esd.CompletionType = type
|
|
|
|
esd.CompletionMedalState = medal
|
|
|
|
esd.iMidIndex = iMidIndex
|
|
ENDPROC
|
|
|
|
PROC SET_ENDSCREEN_COMPLETION_LINE_STATE_WITH_LITERAL_STRING(END_SCREEN_DATASET &esd,
|
|
BOOL bShow,
|
|
STRING resultString,
|
|
STRING literalString,
|
|
INT valueA,
|
|
INT valueB,
|
|
END_SCREEN_COMPLETION_TYPE type = ESC_PERCENTAGE_COMPLETION,
|
|
END_SCREEN_MEDAL_STATUS medal = ESMS_NO_MEDAL
|
|
, INT iMidIndex = 0 )
|
|
//
|
|
esd.bShowCompletion = bShow
|
|
esd.CompletionResultString = resultString
|
|
esd.CompletionLiteralString = literalString
|
|
|
|
esd.iCompletionValueA = valueA
|
|
esd.iCompletionValueB = valueB
|
|
esd.CompletionType = type
|
|
|
|
esd.CompletionMedalState = medal
|
|
|
|
esd.iMidIndex = iMidIndex
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Prep the scaleform part of the end screen, call this after you have finished calling populate
|
|
/// functions on it.
|
|
/// If not set to block returns if it has completely prepped the scaleform
|
|
/// RETURNS:
|
|
///
|
|
FUNC BOOL ENDSCREEN_PREPARE(END_SCREEN_DATASET &esd, BOOL bBlockUntilLoaded = TRUE, BOOL bCenterMessageMode = FALSE)
|
|
|
|
//esd.bShowCompletion = FALSE
|
|
// ENDSCREEN_CONFIGURE_VOTE_PANEL(esd,30)
|
|
esd.bCenterMessageMode = bCenterMessageMode
|
|
INIT_ENDSCREEN_VALUES(esd) // prep values
|
|
|
|
END_SCREEN_WORK_OUT_WIDTHS(esd)
|
|
|
|
//Check if this is a race, enable always expanding stats if yes
|
|
IF ARE_STRINGS_EQUAL(esd.CompletionResultString,"SPR_RESULT") OR (ARE_STRINGS_EQUAL(esd.CompletionResultString,"") AND esd.iElements > 0)
|
|
esd.bAlwaysShowStats = TRUE
|
|
ENDIF
|
|
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
REQUEST_STREAMED_TEXTURE_DICT("MPHud") // 3209804
|
|
ENDIF
|
|
|
|
IF esd.splash = NULL
|
|
//do the request
|
|
REQUEST_STREAMED_TEXTURE_DICT("CommonMenu")
|
|
REQUEST_STREAMED_TEXTURE_DICT("MPLeaderboard")
|
|
REQUEST_STREAMED_TEXTURE_DICT("MPHud")
|
|
//IF bCenterMessageMode
|
|
//esd.splash = REQUEST_SCALEFORM_MOVIE("MP_BIG_MESSAGE_CENTERED")
|
|
//ELSE
|
|
esd.splash = REQUEST_SCALEFORM_MOVIE("MP_BIG_MESSAGE_FREEMODE")
|
|
//ENDIF
|
|
esd.bStartedFailformAnim = FALSE
|
|
esd.bstartedMoveUp = FALSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<ENDSCREEN_PREPARE> Requested CommonMenu / MPLeaderboard / MPHud")
|
|
ENDIF
|
|
|
|
// Speirs added to fix PT 1575220
|
|
// IF esd.bShowSkipperPrompt AND esd.button = NULL
|
|
esd.button = REQUEST_SCALEFORM_MOVIE_INSTANCE("INSTRUCTIONAL_BUTTONS")
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<ENDSCREEN_PREPARE> Requested instructional button scaleform. ID: ", NATIVE_TO_INT(esd.button), ".")
|
|
// ENDIF
|
|
|
|
IF bBlockUntilLoaded
|
|
#IF IS_DEBUG_BUILD
|
|
INT iWaitCount = 0
|
|
#ENDIF
|
|
|
|
WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(esd.splash))
|
|
OR (NOT HAS_STREAMED_TEXTURE_DICT_LOADED("CommonMenu"))
|
|
OR (NOT HAS_STREAMED_TEXTURE_DICT_LOADED("MPLeaderboard"))
|
|
OR (NOT HAS_STREAMED_TEXTURE_DICT_LOADED("MPHud"))
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<ENDSCREEN_PREPARE> Waiting for scaleform movie and textures to load (iWaitCount: ", iWaitCount, ").")
|
|
iWaitCount++
|
|
#ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
IF esd.bShowSkipperPrompt OR esd.bVoteModeEnabled
|
|
WHILE NOT HAS_SCALEFORM_MOVIE_LOADED(esd.button)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<ENDSCREEN_PREPARE> Waiting for button movie.")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF (NOT HAS_SCALEFORM_MOVIE_LOADED(esd.splash))
|
|
OR (NOT HAS_STREAMED_TEXTURE_DICT_LOADED("CommonMenu"))
|
|
OR (NOT HAS_STREAMED_TEXTURE_DICT_LOADED("MPLeaderboard"))
|
|
OR (NOT HAS_STREAMED_TEXTURE_DICT_LOADED("MPHud"))
|
|
CPRINTLN(DEBUG_MISSION_STATS, "ENDSCREEN_PREPARE: Movie or textures not loaded in none blocking mode, returning false")
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF esd.bShowSkipperPrompt
|
|
IF NOT HAS_SCALEFORM_MOVIE_LOADED(esd.button)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<ENDSCREEN_PREPARE> Waiting for button movie.")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
// IF esd.bCenterMessageMode
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash, "SHOW_CENTERED_MP_MESSAGE")
|
|
// ELSE
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(esd.splash, "SHOW_CENTERED_MP_MESSAGE")
|
|
// ENDIF
|
|
//
|
|
//
|
|
//
|
|
// IF esd.eSplashType = ESST_REGULAR
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(esd.passed_splash_message)
|
|
// ELSE
|
|
// BEGIN_TEXT_COMMAND_SCALEFORM_STRING(esd.passed_splash_message)
|
|
// ADD_TEXT_COMPONENT_INTEGER(esd.iSplashSubA)
|
|
// IF esd.eSplashType = ESST_TWO_SUB
|
|
// ADD_TEXT_COMPONENT_INTEGER(esd.iSplashSubB)
|
|
// ENDIF
|
|
// END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
// ENDIF
|
|
//
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")//esd.title) //this will need to be hidden
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(100)//alpha
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)//anim
|
|
// END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE()
|
|
|
|
|
|
|
|
|
|
|
|
IF esd.bShowSkipperPrompt
|
|
IF esd.bVoteModeEnabled //NOT USED?? 11/09/2014 lukeAustin. No voting in SP. Hangover from old script.
|
|
|
|
ENDSCREEN_ADD_VOTE_BUTTONS(esd)
|
|
|
|
ELIF esd.iElements != 0
|
|
|
|
ENDSCREEN_ADD_SKIP_BUTTONS(esd, TRUE)
|
|
|
|
ELSE
|
|
|
|
ENDSCREEN_ADD_SKIP_BUTTONS(esd, FALSE)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
g_bResultScreenPrepared= TRUE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "ENDSCREEN_PREPARE: Complete")
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
|
|
/// PURPOSE:
|
|
/// call to release your end screen scaleform elements
|
|
/// PARAMS:
|
|
/// esd -
|
|
PROC ENDSCREEN_SHUTDOWN(END_SCREEN_DATASET &esd, BOOL bResetButton = FALSE)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "ENDSCREEN_SHUTDOWN: Marking dataset scaleform as no longer needed")
|
|
IF esd.splash != NULL
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(esd.splash)
|
|
esd.splash = NULL
|
|
ENDIF
|
|
|
|
IF (esd.bShowSkipperPrompt
|
|
OR bResetButton)
|
|
AND esd.button != NULL
|
|
//2285274 - Other scripts may keep this scaleform in memory for other uses.
|
|
//By default turn off mouse input in case they don't need it.
|
|
IF IS_PC_VERSION()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(esd.button, "TOGGLE_MOUSE_BUTTONS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "ENDSCREEN_SHUTDOWN: Set instructional button scaleform as no longer needed.")
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(esd.button)
|
|
esd.button = NULL
|
|
ENDIF
|
|
|
|
IF esd.bNoLoadingScreenEnabled
|
|
SET_NO_LOADING_SCREEN(FALSE)
|
|
esd.bNoLoadingScreenEnabled = FALSE
|
|
ENDIF
|
|
|
|
//1321416
|
|
IF NOT g_bEndScreenSuppressFadeIn
|
|
IF NOT IS_PLAYER_DEAD(GET_PLAYER_INDEX())//1454085
|
|
IF NOT g_flowUnsaved.bUpdatingGameflow
|
|
IF IS_SCREEN_FADED_OUT() AND (NOT IS_REPEAT_PLAY_ACTIVE())//1416830
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//1925793: Mark stat screen as not displaying, just to be safe
|
|
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
|
|
|
|
ENDPROC
|