///////// /// 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: 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, " 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, " 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, " 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, " 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, " 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