|
|
|
@ -4279,8 +4279,9 @@ void SFG_drawMenu()
@@ -4279,8 +4279,9 @@ void SFG_drawMenu()
|
|
|
|
|
i++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SFG_drawText("0.7 CC0",SFG_HUD_MARGIN,SFG_GAME_RESOLUTION_Y - SFG_HUD_MARGIN |
|
|
|
|
- SFG_FONT_SIZE_SMALL * SFG_FONT_CHARACTER_SIZE,SFG_FONT_SIZE_SMALL,4,0,0); |
|
|
|
|
SFG_drawText(SFG_VERSION_STRING " CC0",SFG_HUD_MARGIN,SFG_GAME_RESOLUTION_Y - |
|
|
|
|
SFG_HUD_MARGIN - SFG_FONT_SIZE_SMALL * SFG_FONT_CHARACTER_SIZE, |
|
|
|
|
SFG_FONT_SIZE_SMALL,4,0,0); |
|
|
|
|
|
|
|
|
|
#if SFG_OS_IS_MALWARE |
|
|
|
|
if (SFG_game.blink) |
|
|
|
@ -4296,7 +4297,103 @@ void SFG_drawMenu()
@@ -4296,7 +4297,103 @@ void SFG_drawMenu()
|
|
|
|
|
void SFG_drawWinOverlay() |
|
|
|
|
{ |
|
|
|
|
uint32_t t = RCL_min(SFG_WIN_ANIMATION_DURATION, |
|
|
|
|
SFG_game.frameTime - SFG_game.stateChangeTime); |
|
|
|
|
SFG_game.frameTime - SFG_game.stateChangeTime); |
|
|
|
|
|
|
|
|
|
uint32_t t2 = RCL_min(t,SFG_WIN_ANIMATION_DURATION / 4); |
|
|
|
|
|
|
|
|
|
#define STRIP_HEIGHT (SFG_GAME_RESOLUTION_Y / 2) |
|
|
|
|
#define INNER_STRIP_HEIGHT ((STRIP_HEIGHT * 3) / 4) |
|
|
|
|
#define STRIP_START ((SFG_GAME_RESOLUTION_Y - STRIP_HEIGHT) / 2) |
|
|
|
|
|
|
|
|
|
RCL_Unit l = (t2 * STRIP_HEIGHT * 4) / SFG_WIN_ANIMATION_DURATION; |
|
|
|
|
|
|
|
|
|
uint8_t n = (t * 5) / SFG_WIN_ANIMATION_DURATION; |
|
|
|
|
|
|
|
|
|
for (uint16_t y = STRIP_START; y < STRIP_START + l; ++y) |
|
|
|
|
for (uint16_t x = 0; x < SFG_GAME_RESOLUTION_X; ++x) |
|
|
|
|
SFG_setGamePixel(x,y,
|
|
|
|
|
RCL_abs(y - (SFG_GAME_RESOLUTION_Y / 2)) <= (INNER_STRIP_HEIGHT / 2) ? |
|
|
|
|
0 : 172); |
|
|
|
|
|
|
|
|
|
char textLine[] = "level done"; |
|
|
|
|
|
|
|
|
|
uint16_t y = SFG_GAME_RESOLUTION_Y / 2 -
|
|
|
|
|
((STRIP_HEIGHT + INNER_STRIP_HEIGHT) / 2) / 2; |
|
|
|
|
|
|
|
|
|
uint16_t x = (SFG_GAME_RESOLUTION_X -
|
|
|
|
|
SFG_textHorizontalSize(textLine,SFG_FONT_SIZE_BIG)) / 2; |
|
|
|
|
|
|
|
|
|
SFG_drawText(textLine,x,y,SFG_FONT_SIZE_BIG,7 + SFG_game.blink * 95,255,0); |
|
|
|
|
|
|
|
|
|
uint32_t timeTotal = SFG_SAVE_TOTAL_TIME; |
|
|
|
|
|
|
|
|
|
// don't show totals in level 1:
|
|
|
|
|
uint8_t blink = (SFG_game.blink) && (SFG_currentLevel.levelNumber != 0) |
|
|
|
|
&& (timeTotal != 0); |
|
|
|
|
|
|
|
|
|
if (t >= (SFG_WIN_ANIMATION_DURATION / 2)) |
|
|
|
|
{ |
|
|
|
|
y += (SFG_FONT_SIZE_BIG + SFG_FONT_SIZE_MEDIUM) * SFG_FONT_CHARACTER_SIZE; |
|
|
|
|
x = SFG_HUD_MARGIN; |
|
|
|
|
|
|
|
|
|
#define CHAR_SIZE (SFG_FONT_SIZE_SMALL * SFG_FONT_CHARACTER_SIZE) |
|
|
|
|
|
|
|
|
|
uint32_t time = blink ? timeTotal : SFG_currentLevel.completionTime10sOfS; |
|
|
|
|
|
|
|
|
|
x += SFG_drawNumber(time / 10,x,y,SFG_FONT_SIZE_SMALL,7) * |
|
|
|
|
CHAR_SIZE; |
|
|
|
|
|
|
|
|
|
char timeRest[5] = ".X s"; |
|
|
|
|
|
|
|
|
|
timeRest[1] = '0' + (time % 10); |
|
|
|
|
|
|
|
|
|
SFG_drawText(timeRest,x,y,SFG_FONT_SIZE_SMALL,7,4,0); |
|
|
|
|
|
|
|
|
|
x = SFG_HUD_MARGIN; |
|
|
|
|
y += (SFG_FONT_SIZE_BIG + SFG_FONT_SIZE_MEDIUM) * SFG_FONT_CHARACTER_SIZE; |
|
|
|
|
|
|
|
|
|
if (blink) |
|
|
|
|
{ |
|
|
|
|
x += (SFG_drawNumber(SFG_game.save[10] + SFG_game.save[11] * 256,x,y, |
|
|
|
|
SFG_FONT_SIZE_SMALL,7) + 1) * CHAR_SIZE; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
x += SFG_drawNumber(SFG_currentLevel.monstersDead,x,y, |
|
|
|
|
SFG_FONT_SIZE_SMALL,7) * CHAR_SIZE; |
|
|
|
|
|
|
|
|
|
SFG_drawText("/",x,y,SFG_FONT_SIZE_SMALL,7,1,0); |
|
|
|
|
|
|
|
|
|
x += CHAR_SIZE; |
|
|
|
|
|
|
|
|
|
x += (SFG_drawNumber(SFG_currentLevel.monsterRecordCount,x,y, |
|
|
|
|
SFG_FONT_SIZE_SMALL,7) + 1) * CHAR_SIZE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SFG_drawText(SFG_TEXT_KILLS,x,y,SFG_FONT_SIZE_SMALL,7,255,0); |
|
|
|
|
|
|
|
|
|
if ((t >= (SFG_WIN_ANIMATION_DURATION - 1)) &&
|
|
|
|
|
(SFG_currentLevel.levelNumber != (SFG_NUMBER_OF_LEVELS - 1))) |
|
|
|
|
{ |
|
|
|
|
y += (SFG_FONT_SIZE_BIG + SFG_FONT_SIZE_MEDIUM) * SFG_FONT_CHARACTER_SIZE; |
|
|
|
|
|
|
|
|
|
SFG_drawText(SFG_TEXT_SAVE_PROMPT, |
|
|
|
|
(SFG_GAME_RESOLUTION_X - SFG_textHorizontalSize(SFG_TEXT_SAVE_PROMPT, |
|
|
|
|
SFG_FONT_SIZE_MEDIUM)) / 2,y,SFG_FONT_SIZE_MEDIUM,7,255,0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#undef CHAR_SIZE |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#undef STRIP_HEIGHT |
|
|
|
|
#undef STRIP_START |
|
|
|
|
#undef INNER_STRIP_HEIGHT |
|
|
|
|
} |
|
|
|
|
/*
|
|
|
|
|
void SFG_drawWinOverlay() |
|
|
|
|
{ |
|
|
|
|
uint32_t t = RCL_min(SFG_WIN_ANIMATION_DURATION, |
|
|
|
|
SFG_game.frameTime - SFG_game.stateChangeTime); |
|
|
|
|
|
|
|
|
|
uint32_t t2 = RCL_min(t,SFG_WIN_ANIMATION_DURATION / 4); |
|
|
|
|
|
|
|
|
@ -4400,6 +4497,7 @@ void SFG_drawWinOverlay()
@@ -4400,6 +4497,7 @@ void SFG_drawWinOverlay()
|
|
|
|
|
#undef STRIP_START |
|
|
|
|
#undef INNER_STRIP_HEIGHT |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
void SFG_draw() |
|
|
|
|
{ |
|
|
|
|