Fix replays

This commit is contained in:
Miloslav Ciz 2025-03-10 21:33:49 +01:00
parent c4bd226d8f
commit 588acd1e7f
6 changed files with 34 additions and 23 deletions

22
game.h
View file

@ -233,7 +233,7 @@ static inline void LCR_gameDrawPixelXYSafe(unsigned int x, unsigned int y,
#include "renderer.h"
#define LCR_MENU_MAX_ITEMS 9 // don't change
#define LCR_RESOURCE_ITEM_CHUNK (LCR_MENU_MAX_ITEMS - 1)
#define LCR_DATA_ITEM_CHUNK (LCR_MENU_MAX_ITEMS - 1)
#define LCR_MENU_TABS 4
#if LCR_SETTING_GHOST_MAX_SAMPLES == 0
@ -884,9 +884,9 @@ void _LCR_gameDataCharWrite(char c)
while (_LCR_gameDataFileBuffer[i])
{
if (i >= LCR_GAME_DATA_FILE_BUFFER_SIZE - 2)
if (i >= LCR_GAME_DATA_FILE_BUFFER_SIZE - 3)
{
_LCR_gameDataFileBuffer[i] = c;
_LCR_gameDataFileBuffer[i + 1] = c;
LCR_appendDataStr(_LCR_gameDataFileBuffer);
_LCR_gameDataFileBuffer[0] = 0;
return;
@ -906,7 +906,7 @@ void _LCR_gameDataCharWrite(char c)
}
/**
Loads up to LCR_RESOURCE_ITEM_CHUNK items of given type, starting at given
Loads up to LCR_DATA_ITEM_CHUNK items of given type, starting at given
index (among items of the same type). This will also load the menu item names.
*/
void LCR_gameLoadDataFileChunk(unsigned int startIndex, char magicNumber)
@ -959,7 +959,7 @@ void LCR_gameLoadDataFileChunk(unsigned int startIndex, char magicNumber)
state = 255;
LCR_game.menu.itemCount++;
if (LCR_game.menu.itemCount >= LCR_RESOURCE_ITEM_CHUNK)
if (LCR_game.menu.itemCount >= LCR_DATA_ITEM_CHUNK)
break;
}
else
@ -1369,7 +1369,7 @@ void LCR_gameHandleInput(void)
else if (LCR_game.menu.selectedTab != 0 &&
LCR_game.dataFile.firstItemIndex != 0)
{
LCR_game.menu.selectedItem = LCR_RESOURCE_ITEM_CHUNK - 1;
LCR_game.menu.selectedItem = LCR_DATA_ITEM_CHUNK - 1;
LCR_audioPlaySound(LCR_SOUND_CLICK);
scrolled = -1;
}
@ -1392,7 +1392,7 @@ void LCR_gameHandleInput(void)
LCR_audioPlaySound(LCR_SOUND_CLICK);
}
else if (LCR_game.dataFile.firstItemIndex +
LCR_RESOURCE_ITEM_CHUNK < LCR_game.dataFile.itemsTotal)
LCR_DATA_ITEM_CHUNK < LCR_game.dataFile.itemsTotal)
{
LCR_game.menu.selectedItem = 0;
LCR_audioPlaySound(LCR_SOUND_CLICK);
@ -1434,7 +1434,8 @@ void LCR_gameHandleInput(void)
break;
case 3:
if (LCR_game.statePrev == LCR_GAME_STATE_RUN_FINISHED)
if (LCR_game.statePrev == LCR_GAME_STATE_RUN_FINISHED &&
!LCR_racing.playingReplay)
LCR_gameSaveReplay();
else
LCR_gamePopupMessage(LCR_texts[LCR_TEXTS_FAIL]);
@ -1488,7 +1489,7 @@ void LCR_gameHandleInput(void)
{
LCR_gameLoadDataFileChunk(
(tabSwitchedTo > 0) ? 0 : (LCR_game.dataFile.firstItemIndex +
scrolled * LCR_RESOURCE_ITEM_CHUNK),
scrolled * LCR_DATA_ITEM_CHUNK),
LCR_game.menu.selectedTab == 1 ? 'M' : 'R');
if (LCR_game.menu.selectedTab == 1)
@ -1559,7 +1560,8 @@ uint8_t LCR_gameStep(uint32_t time)
{
LCR_LOG1("finished");
if (LCR_game.runTime <= LCR_currentMap.targetTime)
if (LCR_game.runTime <= LCR_currentMap.targetTime &&
!LCR_racing.playingReplay)
{
LCR_gameSaveReplay();