Check map errors

This commit is contained in:
Miloslav Ciz 2025-03-11 16:49:11 +01:00
parent 0f40d57a22
commit a1e5f50e58
4 changed files with 72 additions and 33 deletions

45
game.h
View file

@ -775,8 +775,9 @@ uint8_t LCR_mapIsBeaten(const char *name)
return 0;
}
void LCR_gameLoadMap(unsigned int mapIndex)
uint8_t LCR_gameLoadMap(unsigned int mapIndex)
{
uint8_t result;
char name[LCR_MAP_NAME_MAX_LEN + 1];
name[0] = 0;
@ -794,8 +795,9 @@ void LCR_gameLoadMap(unsigned int mapIndex)
name[i + 1] = 0;
}
LCR_mapLoadFromStr(LCR_gameGetNextDataStrChar,name);
result = LCR_mapLoadFromStr(LCR_gameGetNextDataStrChar,name);
LCR_game.mapBeaten = LCR_mapIsBeaten(LCR_currentMap.name);
return result;
}
/**
@ -846,13 +848,12 @@ unsigned int LCR_gameLoadReplay(unsigned int replayIndex)
nameHash == _LCR_simpleStrHash(LCR_gameGetNextDataStrChar,';'))
{
LCR_LOG2("map name hash matches");
LCR_gameLoadMap(mapIndex);
if (mapHash == LCR_currentMap.hash)
if (LCR_gameLoadMap(mapIndex) && mapHash == LCR_currentMap.hash)
return mapIndex;
else
{
LCR_LOG2("map hash doesn't match");
LCR_LOG2("bad map");
// map hash doesn't match
skipTo = mapIndex + 1;
break;
@ -1058,10 +1059,17 @@ void LCR_gameInit(int argc, const char **argv)
if (quickLoad == 1)
{
LCR_gameLoadMap(LCR_countData('M') - 1);
LCR_gameSetState(LCR_GAME_STATE_LOADING);
LCR_game.menu.selectedTab = 1;
LCR_gameLoadDataFileChunk(0,'M');
if (LCR_gameLoadMap(LCR_countData('M') - 1))
{
LCR_gameSetState(LCR_GAME_STATE_LOADING);
LCR_game.menu.selectedTab = 1;
LCR_gameLoadDataFileChunk(0,'M');
}
else
{
LCR_LOG0("couldn't load map");
LCR_gameSetState(LCR_GAME_STATE_END);
}
}
else if (quickLoad == 2 || quickLoad == 3)
{
@ -1480,9 +1488,15 @@ void LCR_gameHandleInput(void)
break;
case 1: // maps
LCR_gameLoadMap(LCR_game.dataFile.firstItemIndex +
LCR_game.menu.selectedItem);
LCR_gameSetState(LCR_GAME_STATE_LOADING);
if (LCR_gameLoadMap(LCR_game.dataFile.firstItemIndex +
LCR_game.menu.selectedItem))
LCR_gameSetState(LCR_GAME_STATE_LOADING);
else
{
LCR_LOG0("couldn't load map");
LCR_gamePopupMessage(LCR_texts[LCR_TEXTS_FAIL]);
}
break;
case 2: // view replay
@ -1534,6 +1548,9 @@ uint8_t LCR_gameStep(uint32_t time)
LCR_game.time = time;
if (LCR_game.state == LCR_GAME_STATE_END)
return 0;
for (int i = 0; i < LCR_KEYS_TOTAL; ++i)
LCR_game.keyStates[i] = LCR_keyPressed(i) ?
(LCR_game.keyStates[i] < 255 ? LCR_game.keyStates[i] + 1 : 255) : 0;
@ -1694,7 +1711,7 @@ uint8_t LCR_gameStep(uint32_t time)
LCR_game.frame++;
LCR_LOG2("game step (end)");
return LCR_game.state != LCR_GAME_STATE_END;
return 1;
}
uint8_t LCR_gameGetNextAudioSample(void)