diff --git a/source/common/compositesaveame.h b/source/common/compositesaveame.h index 00adeefed..85ebe6a8d 100644 --- a/source/common/compositesaveame.h +++ b/source/common/compositesaveame.h @@ -17,9 +17,7 @@ class CompositeSavegameWriter public: void Clear() { - subfiles.Reset(); - subfilenames.Reset(); - isCompressed.Reset(); + subfiles.DeleteAndClear(); } void SetFileName(const char* fn) { diff --git a/source/common/menu/menu.h b/source/common/menu/menu.h index 3349c600d..51458572c 100644 --- a/source/common/menu/menu.h +++ b/source/common/menu/menu.h @@ -717,7 +717,6 @@ class DTextEnterMenu : public DMenu FString mEnterString; int mEnterSize; - int mEnterPos; bool mInputGridOkay; int InputGridX; int InputGridY; diff --git a/source/common/menu/menuinput.cpp b/source/common/menu/menuinput.cpp index a0297eb85..8f7d07b7c 100644 --- a/source/common/menu/menuinput.cpp +++ b/source/common/menu/menuinput.cpp @@ -67,7 +67,7 @@ DTextEnterMenu::DTextEnterMenu(DMenu *parent, FFont *dpf, FString textbuffer, in : DMenu(parent) { mEnterString = textbuffer; - mEnterPos = maxlen; + mEnterSize = maxlen; mInputGridOkay = (showgrid && (m_showinputgrid == 0)) || (m_showinputgrid >= 1); if (mEnterString.Len() > 0) { @@ -116,7 +116,7 @@ bool DTextEnterMenu::Responder(event_t *ev) char ch = (char)ev->data1; if ((ev->subtype == EV_GUI_KeyDown || ev->subtype == EV_GUI_KeyRepeat) && ch == '\b') { - if (mEnterPos > 0) + if (mEnterString.Len() > 0) { mEnterString.DeleteLastCharacter(); } diff --git a/source/exhumed/src/exhumed.cpp b/source/exhumed/src/exhumed.cpp index 77ef4dff8..e7ec2f3da 100644 --- a/source/exhumed/src/exhumed.cpp +++ b/source/exhumed/src/exhumed.cpp @@ -979,6 +979,13 @@ void mysetbrightness(char nBrightness) g_visibility = 2048 - (nBrightness << 9); } +// Replicate original DOS EXE behaviour when pointer is null +static const char *safeStrtok(char *s, const char *d) +{ + const char *r = strtok(s, d); + return r ? r : ""; +} + void CheckKeys() { if (buttonMap.ButtonDown(gamefunc_Enlarge_Screen)) @@ -1074,21 +1081,16 @@ void CheckKeys() if (ch == asc_Enter) { - char *pToken = strtok(sHollyStr, " "); + const char *pToken = safeStrtok(sHollyStr, " "); - if (nStringLen == 0 || pToken == NULL) // bjd - added this check. watcom allows passing NULL to strcmp so the below checks will all fail OK on DOS but will cause a crash on Windows - { - bHolly = kFalse; - StatusMessage(1, " "); - } - else if (!strcmp(pToken, "GOTO")) + if (!strcmp(pToken, "GOTO")) { // move player to X, Y coordinates int nSprite = PlayerList[0].nSprite; - pToken = strtok(NULL, ","); + pToken = safeStrtok(NULL, ","); sprite[nSprite].x = atoi(pToken); - pToken = strtok(NULL, ","); + pToken = safeStrtok(NULL, ","); sprite[nSprite].y = atoi(pToken); setsprite(nSprite, &sprite[nSprite].pos); @@ -1096,13 +1098,8 @@ void CheckKeys() } else if (!strcmp(pToken, "LEVEL")) { - pToken = strtok(NULL, " "); - if (pToken) { - levelnew = atoi(pToken); - } - else { - levelnew = 0; // replicate original DOS EXE behaviour when no level number is specified. - } + pToken = safeStrtok(NULL, " "); + levelnew = atoi(pToken); } else if (!strcmp(pToken, "DOORS")) { @@ -1126,7 +1123,7 @@ void CheckKeys() // i = nNetPlayerCount; if (!nNetPlayerCount) { - pToken = strtok(NULL, " "); + pToken = safeStrtok(NULL, " "); switch (atoi(pToken)) { // TODO - enums? diff --git a/source/platform/win32/game_icon.ico b/source/platform/win32/game_icon.ico index 0bfa7fb2c..84ad9228d 100644 Binary files a/source/platform/win32/game_icon.ico and b/source/platform/win32/game_icon.ico differ diff --git a/source/sw/src/ninja.cpp b/source/sw/src/ninja.cpp index 22a2938db..6f955c1bc 100644 --- a/source/sw/src/ninja.cpp +++ b/source/sw/src/ninja.cpp @@ -2605,11 +2605,13 @@ static saveable_data saveable_ninja_data[] = SAVE_DATA(sg_NinjaGrabThroat), SAVE_DATA(s_NinjaDie), SAVE_DATA(s_NinjaDieSliced), + SAVE_DATA(s_NinjaDieSlicedHack), SAVE_DATA(s_NinjaDead), SAVE_DATA(s_NinjaDeathJump), SAVE_DATA(s_NinjaDeathFall), SAVE_DATA(sg_NinjaDie), SAVE_DATA(sg_NinjaDieSliced), + SAVE_DATA(sg_NinjaDieSlicedHack), SAVE_DATA(sg_NinjaDead), SAVE_DATA(sg_NinjaDeathJump), SAVE_DATA(sg_NinjaDeathFall),