diff --git a/source/exhumed/src/exhumed.cpp b/source/exhumed/src/exhumed.cpp index b5e077e4c..c8395035d 100644 --- a/source/exhumed/src/exhumed.cpp +++ b/source/exhumed/src/exhumed.cpp @@ -60,6 +60,7 @@ int32_t registerosdcommands(void); void InitFonts(); int htimer = 0; +bool EndLevel = false; /* these are XORed in the original game executable then XORed back to normal when the game first starts. Here they are normally */ const char *gString[] = @@ -925,7 +926,7 @@ void CheckKeys() } else if (!strcmp(pToken, "EXIT")) { - FinishLevel(); + EndLevel = true; } else if (!strcmp(pToken, "CREATURE")) { @@ -1920,6 +1921,12 @@ GAMELOOP: { tclocks += 4; GameMove(); + if (EndLevel) + { + EndLevel = false; + FinishLevel(); + break; + } } } } @@ -2730,4 +2737,9 @@ void LoadTextureState() } +CCMD(ex_endlevel) +{ + EndLevel = true; +} + END_PS_NS diff --git a/source/exhumed/src/exhumed.h b/source/exhumed/src/exhumed.h index 687af134c..878cc0ef3 100644 --- a/source/exhumed/src/exhumed.h +++ b/source/exhumed/src/exhumed.h @@ -107,58 +107,6 @@ enum basepal_t { BASEPALCOUNT }; -#pragma pack(push, 1) -struct demo_header -{ - uint8_t nMap; - int16_t nWeapons; - int16_t nCurrentWeapon; - int16_t clip; - int16_t items; - - int16_t nHealth; - int16_t field_2; - int16_t nAction; - int16_t nSprite; - int16_t bIsMummified; - int16_t someNetVal; - int16_t invincibility; - int16_t nAir; - int16_t nSeq; - int16_t nMaskAmount; - uint16_t keys; - int16_t nMagic; - uint8_t item[8]; - int16_t nAmmo[7]; // TODO - kMaxWeapons? - int16_t pad[2]; - int16_t nCurrentWeapon2; - int16_t field_3FOUR; - int16_t bIsFiring; - int16_t field_38; - int16_t field_3A; - int16_t field_3C; - int16_t nRun; - - int16_t nLives; -}; - -struct demo_input -{ - int32_t moveframes; - - int32_t xVel; - int32_t yVel; - int16_t nAngle; - uint16_t buttons; - int16_t nTarget; - uint8_t horizon; - int8_t nItem; - int32_t h; - uint8_t i; - uint8_t pad[11]; -}; -#pragma pack(pop) - void ExitGame(); void ShutDown(void); void DebugOut(const char *fmt, ...); @@ -215,6 +163,7 @@ void UpdateScreenSize(); void HandleAsync(); +extern bool EndLevel; extern int32_t g_commandSetup; extern int32_t g_noSetup; diff --git a/source/exhumed/src/menu.cpp b/source/exhumed/src/menu.cpp index 80ca87138..1b7a1e326 100644 --- a/source/exhumed/src/menu.cpp +++ b/source/exhumed/src/menu.cpp @@ -289,42 +289,7 @@ int menu_LoadGameMenu() void menu_GameLoad2(FILE *fp, bool bIsDemo) { - if (bIsDemo) - { - demo_header header; - fread(&header, 1, sizeof(demo_header), fp); - - GameStats.nMap = header.nMap; - GameStats.nWeapons = header.nWeapons; - GameStats.nCurrentWeapon = header.nCurrentWeapon; - GameStats.clip = header.clip; - GameStats.items = header.items; - GameStats.player.nHealth = header.nHealth; - GameStats.player.field_2 = header.field_2; - GameStats.player.nAction = header.nAction; - GameStats.player.nSprite = header.nSprite; - GameStats.player.bIsMummified = header.bIsMummified; - GameStats.player.someNetVal = header.someNetVal; - GameStats.player.invincibility = header.invincibility; - GameStats.player.nAir = header.nAir; - GameStats.player.nSeq = header.nSeq; - GameStats.player.nMaskAmount = header.nMaskAmount; - GameStats.player.keys = header.keys; - GameStats.player.nMagic = header.nMagic; - Bmemcpy(GameStats.player.items, header.item, sizeof(header.item)); - Bmemcpy(GameStats.player.nAmmo, header.nAmmo, sizeof(header.nAmmo)); - Bmemcpy(GameStats.player.pad, header.pad, sizeof(header.pad)); - GameStats.player.nCurrentWeapon = header.nCurrentWeapon2; - GameStats.player.field_3FOUR = header.field_3FOUR; - GameStats.player.bIsFiring = header.bIsFiring; - GameStats.player.field_38 = header.field_38; - GameStats.player.field_3A = header.field_3A; - GameStats.player.field_3C = header.field_3C; - GameStats.player.nRun = header.nRun; - GameStats.nLives = header.nLives; - } - else - fread(&GameStats, sizeof(GameStats), 1, fp); + fread(&GameStats, sizeof(GameStats), 1, fp); nPlayerWeapons[nLocalPlayer] = GameStats.nWeapons; diff --git a/source/exhumed/src/object.cpp b/source/exhumed/src/object.cpp index f2db9d14a..ed376da95 100644 --- a/source/exhumed/src/object.cpp +++ b/source/exhumed/src/object.cpp @@ -1543,7 +1543,7 @@ void DoFinale() } else if (nFinaleStage == 3 && (int)totalclock >= dword_1542FC) { - FinishLevel(); + EndLevel = true; } } else diff --git a/source/exhumed/src/player.cpp b/source/exhumed/src/player.cpp index 43e00f137..3ec38e856 100644 --- a/source/exhumed/src/player.cpp +++ b/source/exhumed/src/player.cpp @@ -1274,7 +1274,7 @@ void FuncPlayer(int a, int nDamage, int nRun) } else { - FinishLevel(); + EndLevel = true; } return; @@ -2708,7 +2708,7 @@ do_default_b: { if (!bInDemo) { - FinishLevel(); + EndLevel = true; } else { //inputState.keySetState(32, 1); // Huh, what?