splashscreen.inc
splashscreen.inc
CPP1/****d* PawnLibs/splashscreen/SPLASH_SCREEN_MAX_LEADERS2 * Summary3 * How many leaders can be displayed on the splash screen.4 * Synopsis5 */6#define SPLASH_SCREEN_MAX_LEADERS 107/******/89#define SPLASH_SCREEN_MAX_NAME_LEADERS 61011/****d* PawnLibs/splashscreen/SPLASH_SCREEN_MAX_RESULTS12 * Summary13 * How many different detailed result types exist.14 * Synopsis15 */16#define SPLASH_SCREEN_MAX_RESULTS 417/******/1819/****d* PawnLibs/splashscreen/SPLASH_SCREEN_MAX_NAME_RESULTS20 * Summary21 * Maximum length of result type name.22 * Synopsis23 */24#define SPLASH_SCREEN_MAX_NAME_RESULTS 1025/******/2627/****d* PawnLibs/splashscreen/USER_NAME_LENGTH_IN_CELLS28 * Summary29 * Maximum length of user name in cells.30 * Synopsis31 */32#define USER_NAME_LENGTH_IN_CELLS 333/******/3435#define LEADERBOARD_SIZE 303637#include "string.inc"38#include "leaderboard.inc"39#include "graphics.inc"40#include "topology.inc"41#include "log.inc"4243/****s* PawnLibs/splashscreen/LEADER_DATA44 * Summary45 * Array with named fields which represents a line in score table.46 * Synopsis47 */48#define LEADER_DATA .leaderName[USER_NAME_LENGTH_IN_CELLS], .leaderScore[4], .longNameFlag49/*50 * Description51 * Fields:52 * * leaderName - user name53 * * leaderScore - user score54 * * longNameFlag - flag that user name is too long and should be truncated55 * See also56 * * USER_NAME_LENGTH_IN_CELLS57 ******/5859/****s* PawnLibs/splashscreen/RESULT_DATA60 * Summary61 * Array with named fields which represents result data line62 * Synopsis63 */64#define RESULT_DATA .parameterName[SPLASH_SCREEN_MAX_NAME_RESULTS], .value[4], .valueType65/*66 * Description67 * Fields:68 * * parameterName - result name to display69 * * value - result value to display70 * * valueType - result type71 * See also72 * * SPLASH_SCREEN_MAX_NAME_RESULTS73 ******/7475const EMPTY_PART = 0;76const FIRST_LEADER_GROUP = 1;77const SECOND_LEADER_GROUP = 2;78const HIGH_SCORE = 3;79const LEADERBOARD_SPRITE = 4;80const GAME_TITLE = 5;81const MAIN_IMAGE = 6;82const LAST_RESULT = 7;83const LAST_PARAMETER_1 = 8;84const LAST_PARAMETER_2 = 9;85const LAST_PARAMETER_3 = 10;86const TWIST_ICON = 11;87const QR_CODE = 12;88const TWIST_TO_START = 13;89const TAP_ICON = 14;9091const SPLASH_SCREEN_FONT = 0;92const LEADER_TABLE_FONT = 7;9394// Special sprites95new ss_background_sprite = 0;96new ss_leaderboard_icon = 0;97new ss_results_icon = 0;98new ss_main_image = 0;99new ss_twist_1 = 0;100new ss_twist_2 = 0;101new ss_tap_icon = 0;102new ss_QR_code = 0;103new ss_name = 0;104105new baseColor = 0xFFFFFFFF;106new keyColor = 0xFFFFFFFF;107108new splashScreen_sideType[SCREENS_MAX][.sideType, .angle] = [109 [TOPOLOGY_orientation:ORIENTATION_UP, 180],110 [TOPOLOGY_orientation:ORIENTATION_UP, 180],111 [TOPOLOGY_orientation:ORIENTATION_UP, 180],112]113114new leaderBoardTable {} = {115 TWIST_TO_START,116 GAME_TITLE,117 MAIN_IMAGE,118 TWIST_ICON,119 TWIST_TO_START,120 GAME_TITLE,121 QR_CODE,122 TWIST_ICON,123 TWIST_TO_START,124 EMPTY_PART,125 EMPTY_PART,126 TWIST_ICON,127 EMPTY_PART,128 TWIST_TO_START,129 TWIST_ICON,130 EMPTY_PART,131 HIGH_SCORE,132 LEADERBOARD_SPRITE,133 FIRST_LEADER_GROUP,134 SECOND_LEADER_GROUP,135 HIGH_SCORE,136 LEADERBOARD_SPRITE,137 FIRST_LEADER_GROUP,138 SECOND_LEADER_GROUP,139};140141new leaderBoardTableWithSaves {} = {142 TWIST_ICON,143 GAME_TITLE,144 MAIN_IMAGE,145 TAP_ICON,146 TWIST_ICON,147 GAME_TITLE,148 QR_CODE,149 TAP_ICON,150 LAST_PARAMETER_3,151 LAST_PARAMETER_2,152 LAST_RESULT,153 LAST_PARAMETER_1,154 LAST_PARAMETER_3,155 LAST_PARAMETER_2,156 LAST_RESULT,157 LAST_PARAMETER_1,158 HIGH_SCORE,159 LEADERBOARD_SPRITE,160 FIRST_LEADER_GROUP,161 SECOND_LEADER_GROUP,162 HIGH_SCORE,163 LEADERBOARD_SPRITE,164 FIRST_LEADER_GROUP,165 SECOND_LEADER_GROUP,166};167168new leaderBoardTableResultsOnly {} = {169 TWIST_TO_START,170 GAME_TITLE,171 MAIN_IMAGE,172 TWIST_ICON,173 TWIST_TO_START,174 GAME_TITLE,175 QR_CODE,176 TWIST_ICON,177 LAST_PARAMETER_3,178 LAST_PARAMETER_2,179 LAST_RESULT,180 LAST_PARAMETER_1,181 LAST_PARAMETER_3,182 LAST_PARAMETER_2,183 LAST_RESULT,184 LAST_PARAMETER_1,185 HIGH_SCORE,186 LEADERBOARD_SPRITE,187 FIRST_LEADER_GROUP,188 SECOND_LEADER_GROUP,189 HIGH_SCORE,190 LEADERBOARD_SPRITE,191 FIRST_LEADER_GROUP,192 SECOND_LEADER_GROUP,193};194195/****c* PawnLibs/splashscreen/e_ssLeadersDataType196 * Summary197 * Enumeration of results type in the leader board.198 * Synopsis199 */200const e_ssLeadersDataType: {201 ssTypeNumber = 1,202 ssTypeTime = 2,203}204/*205 * Description206 * * ssTypeNumber - display scores in the leader board207 * * ssTypeTime - display time in the leader board208 ******/209210/****c* PawnLibs/splashscreen/e_ssLeaderBoardType211 * Summary212 * Enumeration of the leader board types.213 * Synopsis214 */215const e_ssLeaderBoardType: {216 ssNoSaves = 0,217 ssContinue = 1,218 ssResultsOnly = 2,219}220/*221 * Description222 * * ssNoSaves - first run of the application and it does not have saves and223 * previous results224 * * ssContinue - application has a save to continue from225 * * ssResultsOnly - application has previous results but does not have a save226 * to continue from227 ******/228229new splashScreenAnimationTime = 0;230new splashScreenKnowTopology = 0;231new e_ssLeaderBoardType:splashScreenLeaderBoardType = 0;232new splashscreenCounter = 0;233new splashscreenIsAppVersionSet = 0;234235new leaderBoardText[] = "LEADERBOARD";236new twistToStartText[] = "TWIST TO START";237new lastResultsText[] = "LAST RESULTS";238239new splashscreen_neighbor[TOPOLOGY_FACELET_INFO];240241// Default leaderboard for splashscreen242new leadersSplashScreen[SPLASH_SCREEN_MAX_LEADERS][LEADER_DATA] = [243 ["Alex", "1000000", 0],244 ["Kim", "999999", 0],245 ["Beth", "999998", 0],246 ["Ethan", "999997", 0],247 ["Mia", "999996", 0],248 ["Lucas", "999995", 0],249 ["Jonas", "999994", 0],250 ["Diego", "999993", 0],251 ["Chloe", "999992", 0],252 ["Simon", "999991", 0],253];254255// Default parameters for example256new resultsSplashScreen[SPLASH_SCREEN_MAX_RESULTS][RESULT_DATA] = [257 ["SCORE", "0", e_ssLeadersDataType:ssTypeNumber],258 ["TWISTS", "0", e_ssLeadersDataType:ssTypeNumber],259 ["TIME", "0", e_ssLeadersDataType:ssTypeTime],260 ["RECORD", "0", e_ssLeadersDataType:ssTypeNumber],261];262263new splashscreen_userName[USER_NAME_LENGTH_IN_CELLS];264new splashscreen_basicInfo[LB_INFO];265new splashscreen_leadTableScore[LEADERBOARD_SIZE];266267new splashscreenPlayerScore[4];268new splashscreenInScriptRecord = 0;269new splashscreenInWebRecord = 0;270271new threeDots[] = "...";272new zeroValue[4] = "0";273new ssApplicationVersionStr[4] = "v";274275new displayCenter[GFX_POINT] = [120, 120];276277ssSetFacelet(module, screen) {278 new facelet[TOPOLOGY_FACELET];279 facelet.module = module;280 facelet.screen = screen;281 return facelet;282}283284ReverseBytes(dword) {285 return ((dword >> 24) & 0xFF) | ((dword >> 8) & 0xFF00) | ((dword << 8) & 0xFF0000) | ((dword << 24) & 0xFF000000);286}287288ssToString(data, dataType) {289 new dataStr[4];290 new leaderData = data;291 if (dataType == e_ssLeadersDataType:ssTypeTime) {292 leaderData /= 1000;293 strformat(dataStr, sizeof(dataStr), true, "%d:%02d", leaderData / 60, leaderData % 60);294 } else {295 strformat(dataStr, sizeof(dataStr), true, "%d", leaderData);296 }297 return dataStr;298}299300SplashScreen_SetScreenData(screen) {301 splashScreen_sideType[screen].angle = TOPOLOGY_getAngle(ssSetFacelet(SELF_ID, screen), TOPOLOGY_orientation_mode:ORIENTATION_MODE_SPLASH);302303 splashscreen_neighbor = TOPOLOGY_getAdjacentFacelet(ssSetFacelet(SELF_ID, screen), TOPOLOGY_neighbor:NEIGHBOR_RIGHT);304 splashScreen_sideType[splashscreen_neighbor.screen].sideType = TOPOLOGY_getFaceletOrientation(ssSetFacelet(SELF_ID, splashscreen_neighbor.screen));305 splashScreen_sideType[splashscreen_neighbor.screen].angle = TOPOLOGY_getAngle(ssSetFacelet(SELF_ID, splashscreen_neighbor.screen), TOPOLOGY_orientation_mode:ORIENTATION_MODE_SPLASH);306307 splashscreen_neighbor = TOPOLOGY_getAdjacentFacelet(ssSetFacelet(SELF_ID, screen), TOPOLOGY_neighbor:NEIGHBOR_BOTTOM);308 splashScreen_sideType[splashscreen_neighbor.screen].sideType = TOPOLOGY_getFaceletOrientation(ssSetFacelet(SELF_ID, splashscreen_neighbor.screen));309 splashScreen_sideType[splashscreen_neighbor.screen].angle = TOPOLOGY_getAngle(ssSetFacelet(SELF_ID, splashscreen_neighbor.screen), TOPOLOGY_orientation_mode:ORIENTATION_MODE_SPLASH);310}311312/****f* PawnLibs/splashscreen/ssSetApplicationVersion313 * Summary314 * Set text for application version.315 * Synopsis316 */317ssSetApplicationVersion(appVersion[])318/*319 * Description320 * Receive application version in text format321 * and concatenate with 'v' symbol. Version is322 * written under QR code.323 * Inputs324 * * appVersion - application version in string format like "1.2.3"325 * History326 * * v5.1 - function added327 * Source328 */329{330 strcat(ssApplicationVersionStr, appVersion, sizeof(ssApplicationVersionStr));331 splashscreenIsAppVersionSet = 1;332}333/******/334335/****f* PawnLibs/splashscreen/InitSplashScreenLeaders336 * Summary337 * Set leaders table to draw on a splash screen.338 * Synopsis339 */340stock InitSplashScreenLeaders(gameLeaders[SPLASH_SCREEN_MAX_LEADERS][LEADER_DATA])341/*342 * Inputs343 * * gameLeaders - leaders data344 * See also345 * * SPLASH_SCREEN_MAX_LEADERS346 * * LEADER_DATA347 * Source348 */349{350 for (new i = 0; i < SPLASH_SCREEN_MAX_LEADERS; ++i) {351 leadersSplashScreen[i] = gameLeaders[i];352 }353}354/******/355356/****f* PawnLibs/splashscreen/InitSplashScreenResults357 * Summary358 * Set game results to draw on a splash screen.359 * Synopsis360 */361stock InitSplashScreenResults(gameResults[SPLASH_SCREEN_MAX_RESULTS][RESULT_DATA])362/*363 * Inputs364 * * gameResults - game results data365 * See also366 * * SPLASH_SCREEN_MAX_RESULTS367 * * RESULT_DATA368 * Source369 */370{371 for (new i = 0; i < SPLASH_SCREEN_MAX_RESULTS; ++i) {372 resultsSplashScreen[i] = gameResults[i];373 resultsSplashScreen[i].value = ssToString(gameResults[i].value, gameResults[i].valueType);374 }375 splashscreenInScriptRecord = gameResults[SPLASH_SCREEN_MAX_RESULTS - 1].value;376}377/******/378379/****f* PawnLibs/splashscreen/InitSplashScreenSprites380 * Summary381 * Customize splash screen.382 * Synopsis383 */384stock InitSplashScreenSprites(backgroundSprite = -1,385 mainImageSprite = -1,386 gameNameSprite = -1,387 QRcodeSprite = -1,388 leaderboardIcon = -1,389 resultsIcon = -1,390 twistIcon_1 = -1,391 twistIcon_2 = -1,392 tapIcon = -1)393/*394 * Description395 * Set IDs of sprite used to draw different elements of the splash screen.396 * Inputs397 * * backgroundSprite - ID of a background image398 * * mainImageSprite - ID of an application logo, may differ from a menu399 * icon400 * * gameNameSprite - ID of an image with application name, to display it with401 * some custom font402 * * QRcodeSprite - ID of a QR code403 * * leaderboardIcon - ID of a leader board icon404 * * resultsIcon - ID of a result icon405 * * twistIcon_1, twistIcon_2 - IDs of twist animation images406 * * tapIcon - ID of the tap icon407 * Source408 */409{410411 ss_background_sprite = backgroundSprite;412 ss_main_image = mainImageSprite;413 ss_name = gameNameSprite;414 ss_QR_code = QRcodeSprite;415 ss_leaderboard_icon = leaderboardIcon;416 ss_results_icon = resultsIcon;417 ss_twist_1 = twistIcon_1;418 ss_twist_2 = twistIcon_2;419 ss_tap_icon = tapIcon;420421 if (ss_background_sprite < 0) {422 LOG_w("splashscreen.inc: Background sprite is not initialized");423 }424 if (ss_main_image < 0) {425 LOG_w("splashscreen.inc: Main image sprite is not initialized");426 }427 if (ss_name < 0) {428 LOG_w("splashscreen.inc: Game name sprite is not initialized");429 }430 if (ss_QR_code < 0) {431 LOG_w("splashscreen.inc: QR code sprite is not initialized");432 }433 if (ss_leaderboard_icon < 0) {434 LOG_w("splashscreen.inc: Leaderboard icon sprite is not initialized");435 }436 if (ss_results_icon < 0) {437 LOG_w("splashscreen.inc: Results icon sprite is not initialized");438 }439 if (ss_twist_1 < 0) {440 LOG_w("splashscreen.inc: Twist icon 1-st sprite is not initialized");441 }442 if (ss_twist_2 < 0) {443 LOG_w("splashscreen.inc: Twist icon 2-nd sprite is not initialized");444 }445 if (ss_tap_icon < 0) {446 LOG_w("splashscreen.inc: Tap icon sprite is not initialized");447 }448}449/******/450451/****f* PawnLibs/splashscreen/InitSplashScreenBasics452 * Summary453 * Set how splash screen should be displayed.454 * Synopsis455 */456stock InitSplashScreenBasics(base = 0xFFFFFFFF, key = 0xFFFFFFFF,457 e_ssLeaderBoardType:leaderBoardType = ssNoSaves,458 e_ssLeadersDataType:dataType = ssTypeNumber)459/*460 * Inputs461 * * base - base color for all text labels in ARGB8888 format462 * * key - accent color for text labels in ARGB8888 format463 * * leaderBoardType - type of splash screen464 * * dataType - type of results in the leader board465 * See also466 * * e_ssLeaderBoardType467 * * e_ssLeadersDataType468 * Source469 */470{471472 splashScreenLeaderBoardType = leaderBoardType;473474 baseColor = base;475 keyColor = key;476477 getUserName(splashscreen_userName);478 LB_getInfo(splashscreen_basicInfo);479 LB_getScore(splashscreen_leadTableScore);480481 splashscreen_userName[0] = ReverseBytes(splashscreen_userName[0]);482 if (splashscreen_userName[1]) {483 splashscreen_userName[1] = (splashscreen_userName[1] & 0xFF000000) >> 24;484 splashscreen_userName[2] = 0;485 }486487 new pawnCell = 0;488 new curName[USER_NAME_LENGTH_IN_CELLS];489 for (new leaderI = 0; leaderI < SPLASH_SCREEN_MAX_LEADERS; ++leaderI) {490 if (leaderI < splashscreen_basicInfo.leadCount) {491 new leaderName[USER_NAME_LENGTH_IN_CELLS];492 new nameCell = 0;493 curName[0] = ReverseBytes(splashscreen_leadTableScore[pawnCell]);494 curName[1] = ReverseBytes(splashscreen_leadTableScore[pawnCell + 1]);495496 leaderName[nameCell] = curName[nameCell];497 ++pawnCell;498 ++nameCell;499500 if (curName[nameCell]) {501 leaderName[nameCell] = (curName[nameCell] & 0xFF000000);502 leadersSplashScreen[leaderI].longNameFlag = (curName[nameCell] & 0x00FFFFFF);503 }504505 ++pawnCell;506 leadersSplashScreen[leaderI].leaderName = leaderName;507508 leadersSplashScreen[leaderI].leaderScore = ssToString(splashscreen_leadTableScore[pawnCell], dataType);509510 ++pawnCell;511 } else if (splashscreen_basicInfo.leadCount > 0) {512 leadersSplashScreen[leaderI].leaderScore = zeroValue;513 }514 }515 splashscreenInWebRecord = splashscreen_basicInfo.selfScore;516 splashscreenPlayerScore = ssToString(splashscreen_basicInfo.selfScore, dataType);517}518/******/519520InitSplashScreenAngles() {521 for (new screen = 0; screen < SCREENS_MAX; ++screen) {522 if (TOPOLOGY_getFaceletOrientation(ssSetFacelet(SELF_ID, screen)) == TOPOLOGY_orientation:ORIENTATION_UP) {523 splashScreen_sideType[screen].sideType = TOPOLOGY_orientation:ORIENTATION_UP;524 SplashScreen_SetScreenData(screen);525 break;526 } else if (TOPOLOGY_getFaceletOrientation(ssSetFacelet(SELF_ID, screen)) == TOPOLOGY_orientation:ORIENTATION_DOWN) {527 splashScreen_sideType[screen].sideType = TOPOLOGY_orientation:ORIENTATION_DOWN;528 SplashScreen_SetScreenData(screen);529 break;530 }531 }532}533534/****f* PawnLibs/splashscreen/DrawSplashScreen535 * Summary536 * Add splash screen on a scene for rendering.537 * Synopsis538 */539stock DrawSplashScreen(screen, backgroundAngle = 0, localDeltaTime = 0)540/*541 * Description542 * Adds graphical primitives on the scene to render the splash screen. Should543 * be used in between GFX_setRenderTarget() and GFX_render() calls.544 * Technically it can be used for be used in baked image but it does not make545 * sense because splash screen implements a twist animation.546 * Inputs547 * * screen - number of the screen to draw the splash screen548 * * backgroundAngle - at which angle background should be drawn on that549 * screen, useful for complex non-symmetrical backgrounds550 * * localDeltaTime - time delta from previous call for the twist animation551 * See also552 * * GFX_setRenderTarget()553 * * GFX_render()554 * Source555 */556{557558 if (screen == 0) {559 splashScreenAnimationTime += localDeltaTime;560 ++splashscreenCounter;561 }562563 if (splashscreenCounter == 1) {564 InitSplashScreenAngles();565 }566567 new screenAngle = splashScreen_sideType[screen].angle;568569 if (ss_background_sprite < 0) {570 GFX_clear(0xFFFFFFFF);571 } else {572 GFX_drawImage(displayCenter, 0xFF, 0xFF00FF, 100, 100, backgroundAngle, MIRROR_BLANK, ss_background_sprite);573 }574575 new leaderboardElement = EMPTY_PART;576 new leaderboardPosition = splashScreen_sideType[screen].sideType * TOPOLOGY_POSITIONS_MAX + (screenAngle / 90);577 if (splashScreenLeaderBoardType == e_ssLeaderBoardType:ssResultsOnly) {578 leaderboardElement = leaderBoardTableResultsOnly { leaderboardPosition };579 } else if (splashScreenLeaderBoardType == e_ssLeaderBoardType:ssContinue) {580 leaderboardElement = leaderBoardTableWithSaves { leaderboardPosition };581 } else {582 leaderboardElement = leaderBoardTable { leaderboardPosition };583 }584585 switch (leaderboardElement) {586 case FIRST_LEADER_GROUP: {587 new offset = 0;588 for (new i = 0; i < 5; ++i) {589 new nameColor = baseColor;590 offset = 210 - (40 * i);591 new center[GFX_POINT];592 center.x = 200;593 center.y = offset;594 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_RIGHT_TOP_CORNER, baseColor, "%d", i + 1);595 if (splashscreen_basicInfo.selfPosition == (i + 1)) {596 nameColor = keyColor;597 }598 center.x = 190;599 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_LEFT_TOP_CORNER, nameColor, leadersSplashScreen[i].leaderName);600 if (leadersSplashScreen[i].longNameFlag) {601 center.x = 124;602 center.y = offset - 5;603 GFX_drawText(center, LEADER_TABLE_FONT - 2, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_LEFT_TOP_CORNER, nameColor, threeDots);604 }605 center.x = 10;606 center.y = offset;607 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_RIGHT_TOP_CORNER, keyColor, leadersSplashScreen[i].leaderScore);608 }609 }610 case SECOND_LEADER_GROUP: {611 new offset = 0;612 for (new i = 5; i < SPLASH_SCREEN_MAX_LEADERS; ++i) {613 new nameColor = baseColor;614 offset = 30 + (40 * (i - 5));615 if ((i >= 8) && (splashscreen_basicInfo.selfPosition > SPLASH_SCREEN_MAX_LEADERS)) {616 if (i == 8) {617 new center[GFX_POINT];618 center.x = offset;619 center.y = 190;620 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_LEFT_TOP_CORNER, nameColor, threeDots);621 } else if (i == 9) {622 new center[GFX_POINT];623 center.x = offset;624 center.y = 200;625 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_RIGHT_TOP_CORNER, baseColor, "%d", splashscreen_basicInfo.selfPosition);626 center.y = 190;627 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_LEFT_TOP_CORNER, nameColor, splashscreen_userName);628 center.y = 10;629 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_RIGHT_TOP_CORNER, keyColor, splashscreenPlayerScore);630 if (splashscreen_userName[1]) {631 center.x = offset + 5;632 center.y = 124;633 GFX_drawText(center, LEADER_TABLE_FONT - 2, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_LEFT_TOP_CORNER, nameColor, threeDots);634 }635 }636 } else {637 new center[GFX_POINT];638 center.x = offset;639 center.y = 200;640 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_RIGHT_TOP_CORNER, baseColor, "%d", i + 1);641 if (splashscreen_basicInfo.selfPosition == (i + 1)) {642 nameColor = keyColor;643 }644 center.y = 190;645 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_LEFT_TOP_CORNER, nameColor, leadersSplashScreen[i].leaderName);646 if (leadersSplashScreen[i].longNameFlag) {647 new center[GFX_POINT];648 center.x = offset + 5;649 center.y = 124;650 GFX_drawText(center, LEADER_TABLE_FONT - 2, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_LEFT_TOP_CORNER, nameColor, threeDots);651 }652 center.y = 10;653 GFX_drawText(center, LEADER_TABLE_FONT, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_RIGHT_TOP_CORNER, keyColor, leadersSplashScreen[i].leaderScore);654 }655 }656 }657 case HIGH_SCORE: {658 new center[GFX_POINT];659 center.x = 120;660 center.y = 104;661 if (splashScreenLeaderBoardType != e_ssLeaderBoardType:ssNoSaves) {662 if (splashscreenInScriptRecord > splashscreenInWebRecord) {663 GFX_drawText(center, 15, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, resultsSplashScreen[3].value);664 } else {665 GFX_drawText(center, 15, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, splashscreenPlayerScore);666 }667 center.y = 142;668 GFX_drawText(center, 9, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, "personal best");669 } else {670 GFX_drawText(center, 15, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, leadersSplashScreen[0].leaderScore);671 center.y = 142;672 GFX_drawText(center, 9, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, "high score");673 }674 }675 case LEADERBOARD_SPRITE: {676 if (ss_leaderboard_icon >= 0) {677 GFX_drawImage(displayCenter, 0xFF, 0xFF00FF, 100, 100, screenAngle, MIRROR_BLANK, ss_leaderboard_icon);678 }679 new center[GFX_POINT];680 center.x = 40;681 center.y = 120;682 GFX_drawText(center, 10, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_BOTTOM_CENTER, baseColor, leaderBoardText);683 }684 case GAME_TITLE: {685 if (ss_name >= 0) {686 GFX_drawImage(displayCenter, 0xFF, 0xFF00FF, 100, 100, screenAngle, MIRROR_BLANK, ss_name);687 }688 }689 case MAIN_IMAGE: {690 if (ss_main_image >= 0) {691 GFX_drawImage(displayCenter, 0xFF, 0xFF00FF, 100, 100, screenAngle, MIRROR_BLANK, ss_main_image);692 }693 }694 case LAST_RESULT: {695 if (ss_results_icon >= 0) {696 GFX_drawImage(displayCenter, 0xFF, 0xFF00FF, 100, 100, screenAngle, MIRROR_BLANK, ss_results_icon);697 }698 new center[GFX_POINT];699 center.x = 120;700 center.y = 40;701 GFX_drawText(center, 10, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_BOTTOM_CENTER, baseColor, lastResultsText);702 }703 case LAST_PARAMETER_1: {704 new center[GFX_POINT];705 center.x = 104;706 center.y = 120;707 GFX_drawText(center, 15, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, resultsSplashScreen[0].value);708 center.x = 144;709 GFX_drawText(center, 10, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, resultsSplashScreen[0].parameterName);710 }711 case LAST_PARAMETER_2: {712 new center[GFX_POINT];713 center.x = 136;714 center.y = 120;715 GFX_drawText(center, 15, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, resultsSplashScreen[1].value);716 center.x = 96;717 GFX_drawText(center, 10, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, resultsSplashScreen[1].parameterName);718 }719 case LAST_PARAMETER_3: {720 new center[GFX_POINT];721 center.x = 120;722 center.y = 104;723 GFX_drawText(center, 15, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, resultsSplashScreen[2].value);724 center.y = 144;725 GFX_drawText(center, 10, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, resultsSplashScreen[2].parameterName);726 }727 case QR_CODE: {728 if (ss_QR_code >= 0) {729 GFX_drawImage(displayCenter, 0xFF, 0xFF00FF, 100, 100, screenAngle, MIRROR_BLANK, ss_QR_code);730 }731 if (splashscreenIsAppVersionSet) {732 GFX_drawText([120, 20], 9, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, ssApplicationVersionStr);733 }734 }735 case TWIST_ICON: {736 if (ss_twist_1 >= 0) {737 new center[GFX_POINT];738 center.x = 120;739 center.y = (splashScreenLeaderBoardType != e_ssLeaderBoardType:ssContinue) ? 120 : 92;740 GFX_drawImage(center, 0xFF, 0xFF00FF, 100, 100, screenAngle, MIRROR_BLANK, (splashScreenAnimationTime > 500) ? (ss_twist_2) : (ss_twist_1));741 }742 if (splashScreenAnimationTime > 1000) {743 splashScreenAnimationTime = 0;744 }745 if (splashScreenLeaderBoardType == e_ssLeaderBoardType:ssContinue) {746 new center[GFX_POINT];747 center.x = 120;748 center.y = 176;749 GFX_drawText(center, 9, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, "TWIST");750 center.y = 204;751 GFX_drawText(center, 9, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, "TO CONTINUE");752 }753 }754 case TWIST_TO_START: {755 new condition_1 = ((screenAngle % 180) > 0);756 new condition_2 = ((screenAngle % 180) == 0);757 new center[GFX_POINT];758 center.x = 120 * condition_2 + 140 * condition_1;759 center.y = 92 * condition_2 + 120 * condition_1;760 GFX_drawText(center, 17, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, "TWIST");761 center.x = 120 * condition_2 + 92 * condition_1;762 center.y = 140 * condition_2 + 120 * condition_1;763 GFX_drawText(center, 10, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, "TO START");764 }765 case TAP_ICON: {766 if (ss_tap_icon >= 0) {767 new center[GFX_POINT];768 center.x = 92;769 center.y = 120;770 GFX_drawImage(center, 0xFF, 0xFF00FF, 100, 100, screenAngle, MIRROR_BLANK, ss_tap_icon);771 }772 new center[GFX_POINT];773 center.x = 176;774 center.y = 120;775 GFX_drawText(center, 9, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, keyColor, "TRIPLE TAP");776 center.x = 204;777 GFX_drawText(center, 9, screenAngle, SPLASH_SCREEN_FONT, TEXT_ALIGN_CENTER, baseColor, "TO START NEW");778 }779 default : {}780 }781}782/******/783784
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.