[Scummvm-git-logs] scummvm master -> e06afde2d6c0f61d94763da008349127add8d96f
dreammaster
paulfgilbert at gmail.com
Sun Jun 14 02:24:50 UTC 2020
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e522661d82 GLK: COMPREHEND: Fix monster randomness
ea862e0772 GLK: COMPREHEND: Added endgame screen display
8152652e6e GLK: COMPREHEND: Don't allow saving during TR intro
824b5dfc08 GLK: COMPREHEND: Fix rendering of items separate from backgrounds
439736ab77 GLK: COMPREHEND: Move restarting game to outer game loop
e06afde2d6 GLK: COMPREHEND: Reset vampire & werewolf on savegame load
Commit: e522661d82d2ca633d0fbd452031efa64f254de0
https://github.com/scummvm/scummvm/commit/e522661d82d2ca633d0fbd452031efa64f254de0
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-06-13T17:59:36-07:00
Commit Message:
GLK: COMPREHEND: Fix monster randomness
Changed paths:
engines/glk/comprehend/game_tr.cpp
diff --git a/engines/glk/comprehend/game_tr.cpp b/engines/glk/comprehend/game_tr.cpp
index 68ff5b0c83..cc5e12f430 100644
--- a/engines/glk/comprehend/game_tr.cpp
+++ b/engines/glk/comprehend/game_tr.cpp
@@ -97,33 +97,33 @@ bool TransylvaniaGame::updateMonster(const TransylvaniaMonster *monsterInfo) {
uint16 turn_count;
room = &_rooms[_currentRoom];
- turn_count = _variables[VAR_TURN_COUNT];
+ if (!(room->_flags & monsterInfo->_roomAllowFlag))
+ return false;
+ turn_count = _variables[VAR_TURN_COUNT];
monster = get_item(monsterInfo->_object);
+
if (monster->_room == _currentRoom) {
// The monster is in the current room - leave it there
return true;
}
- if ((room->_flags & monsterInfo->_roomAllowFlag) &&
- !_flags[monsterInfo->_deadFlag] &&
+ if (!_flags[monsterInfo->_deadFlag] &&
turn_count > monsterInfo->_minTurnsBefore) {
/*
* The monster is alive and allowed to move to the current
* room. Randomly decide whether on not to. If not, move
* it back to limbo.
*/
- if ((getRandomNumber(0x7fffffff) % monsterInfo->_randomness) == 0) {
+ if (getRandomNumber(255) > monsterInfo->_randomness) {
move_object(monster, _currentRoom);
_variables[15] = turn_count + 1;
} else {
move_object(monster, ROOM_NOWHERE);
}
-
- return true;
}
- return false;
+ return true;
}
bool TransylvaniaGame::isMonsterInRoom(const TransylvaniaMonster *monsterInfo) {
@@ -165,7 +165,7 @@ void TransylvaniaGame::beforeTurn() {
return;
Room *room = &_rooms[_currentRoom];
- if (!(room->_flags & ROOMFLAG_FOREST) && (_variables[VAR_TURN_COUNT] % 255) >= 4
+ if ((room->_flags & ROOMFLAG_FOREST) && (_variables[VAR_TURN_COUNT] % 255) >= 4
&& getRandomNumber(255) < 40) {
int stringNum = _miceReleased ? 108 : 107;
console_println(_strings[stringNum].c_str());
Commit: ea862e077286fb9721c09179a4285ea5db9b31a1
https://github.com/scummvm/scummvm/commit/ea862e077286fb9721c09179a4285ea5db9b31a1
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-06-13T17:59:36-07:00
Commit Message:
GLK: COMPREHEND: Added endgame screen display
Changed paths:
engines/glk/comprehend/game_tr.cpp
engines/glk/comprehend/game_tr.h
diff --git a/engines/glk/comprehend/game_tr.cpp b/engines/glk/comprehend/game_tr.cpp
index cc5e12f430..38532319eb 100644
--- a/engines/glk/comprehend/game_tr.cpp
+++ b/engines/glk/comprehend/game_tr.cpp
@@ -208,14 +208,13 @@ void TransylvaniaGame::handleSpecialOpcode(uint8 operand) {
case 4:
// Game over - failure
console_println(_strings2[138].c_str());
- if (tolower(console_get_key()) == 'r')
- game_restart();
- else
- g_comprehend->quitGame();
+ checkForRestart();
break;
- case 0x05:
+ case 5:
// Won the game
+ g_comprehend->drawLocationPicture(40);
+ checkForRestart();
break;
case 6:
@@ -244,6 +243,13 @@ void TransylvaniaGame::handleSpecialOpcode(uint8 operand) {
}
}
+void TransylvaniaGame::checkForRestart() {
+ if (tolower(console_get_key()) == 'r')
+ game_restart();
+ else
+ g_comprehend->quitGame();
+}
+
#define READ_LINE do { \
g_comprehend->readLine(buffer, sizeof(buffer)); \
if (g_comprehend->shouldQuit()) return; \
diff --git a/engines/glk/comprehend/game_tr.h b/engines/glk/comprehend/game_tr.h
index 70e4a059e5..4642e91735 100644
--- a/engines/glk/comprehend/game_tr.h
+++ b/engines/glk/comprehend/game_tr.h
@@ -38,6 +38,7 @@ private:
bool updateMonster(const TransylvaniaMonster *monsterInfo);
bool isMonsterInRoom(const TransylvaniaMonster *monsterInfo);
+ void checkForRestart();
public:
TransylvaniaGame();
~TransylvaniaGame() override {}
Commit: 8152652e6e85a06065cb9696e9d3a6d13df6235e
https://github.com/scummvm/scummvm/commit/8152652e6e85a06065cb9696e9d3a6d13df6235e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-06-13T17:59:37-07:00
Commit Message:
GLK: COMPREHEND: Don't allow saving during TR intro
Changed paths:
engines/glk/comprehend/comprehend.cpp
engines/glk/comprehend/comprehend.h
engines/glk/comprehend/game_tr.cpp
diff --git a/engines/glk/comprehend/comprehend.cpp b/engines/glk/comprehend/comprehend.cpp
index e9b8ef6285..4231125b71 100644
--- a/engines/glk/comprehend/comprehend.cpp
+++ b/engines/glk/comprehend/comprehend.cpp
@@ -46,7 +46,7 @@ Comprehend *g_comprehend;
Comprehend::Comprehend(OSystem *syst, const GlkGameDescription &gameDesc) : GlkAPI(syst, gameDesc), _topWindow(nullptr), _bottomWindow(nullptr),
_drawSurface(nullptr), _game(nullptr), _pics(nullptr), _saveSlot(-1),
- _graphicsEnabled(true), _drawFlags(0) {
+ _graphicsEnabled(true), _drawFlags(0), _disableSaves(false) {
g_comprehend = this;
}
@@ -154,6 +154,7 @@ void Comprehend::readLine(char *buffer, size_t maxLen) {
int Comprehend::readChar() {
glk_request_char_event(_bottomWindow);
+ setDisableSaves(true);
event_t ev;
while (ev.type != evtype_CharInput) {
@@ -165,6 +166,7 @@ int Comprehend::readChar() {
}
}
+ setDisableSaves(false);
return ev.val1;
}
diff --git a/engines/glk/comprehend/comprehend.h b/engines/glk/comprehend/comprehend.h
index 593ffc2e4e..9937280ca0 100644
--- a/engines/glk/comprehend/comprehend.h
+++ b/engines/glk/comprehend/comprehend.h
@@ -50,6 +50,7 @@ class Comprehend : public GlkAPI {
private:
int _saveSlot; ///< Save slot when loading savegame from launcher
bool _graphicsEnabled;
+ bool _disableSaves;
public:
GraphicsWindow *_topWindow;
TextBufferWindow *_bottomWindow;
@@ -170,6 +171,27 @@ public:
ComprehendGame *getGame() const {
return _game;
}
+
+ /**
+ * Returns true if a savegame can be loaded
+ */
+ bool canLoadGameStateCurrently() override {
+ return !_disableSaves && GlkAPI::canLoadGameStateCurrently();
+ }
+
+ /**
+ * Returns true if the game can be saved
+ */
+ bool canSaveGameStateCurrently() override {
+ return !_disableSaves && GlkAPI::canSaveGameStateCurrently();
+ }
+
+ /**
+ * Set whether saving and loading is currently available
+ */
+ void setDisableSaves(bool flag) {
+ _disableSaves = flag;
+ }
};
extern Comprehend *g_comprehend;
diff --git a/engines/glk/comprehend/game_tr.cpp b/engines/glk/comprehend/game_tr.cpp
index 38532319eb..95ed841b46 100644
--- a/engines/glk/comprehend/game_tr.cpp
+++ b/engines/glk/comprehend/game_tr.cpp
@@ -257,6 +257,7 @@ void TransylvaniaGame::checkForRestart() {
void TransylvaniaGame::beforeGame() {
char buffer[128];
+ g_comprehend->setDisableSaves(true);
// Draw the title
g_comprehend->drawPicture(TITLE_IMAGE);
@@ -271,6 +272,8 @@ void TransylvaniaGame::beforeGame() {
// And your next of kin - This isn't stored by the game
console_println(_strings[0x21].c_str());
READ_LINE;
+
+ g_comprehend->setDisableSaves(false);
}
} // namespace Comprehend
Commit: 824b5dfc080ab555174548498fdbeb79a6c793b2
https://github.com/scummvm/scummvm/commit/824b5dfc080ab555174548498fdbeb79a6c793b2
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-06-13T19:02:06-07:00
Commit Message:
GLK: COMPREHEND: Fix rendering of items separate from backgrounds
Changed paths:
engines/glk/comprehend/pics.cpp
diff --git a/engines/glk/comprehend/pics.cpp b/engines/glk/comprehend/pics.cpp
index 2fa555b57b..138a87f694 100644
--- a/engines/glk/comprehend/pics.cpp
+++ b/engines/glk/comprehend/pics.cpp
@@ -379,12 +379,15 @@ void Pics::drawPicture(int pictureNum) const {
} else if (pictureNum >= ITEMS_OFFSET) {
pictureNum -= ITEMS_OFFSET;
+ ctx._drawSurface->clear(0);
_items[pictureNum / IMAGES_PER_FILE].draw(
pictureNum % IMAGES_PER_FILE, &ctx);
} else {
if (pictureNum < LOCATIONS_NO_BG_OFFSET)
ctx._drawSurface->clearScreen(G_COLOR_WHITE);
+ else
+ ctx._drawSurface->clear(0);
pictureNum %= 100;
_rooms[pictureNum / IMAGES_PER_FILE].draw(
Commit: 439736ab77f66fdaf7dd0d33742df7f89a1e797b
https://github.com/scummvm/scummvm/commit/439736ab77f66fdaf7dd0d33742df7f89a1e797b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-06-13T19:18:51-07:00
Commit Message:
GLK: COMPREHEND: Move restarting game to outer game loop
This avoids crashes that were happening due to the
freed game scripts still trying to be processed after
they'd been destroyed during the restarting process
Changed paths:
engines/glk/comprehend/game.cpp
engines/glk/comprehend/game.h
engines/glk/comprehend/game_tr.cpp
engines/glk/comprehend/game_tr.h
diff --git a/engines/glk/comprehend/game.cpp b/engines/glk/comprehend/game.cpp
index 6934a76adf..b39751dc66 100644
--- a/engines/glk/comprehend/game.cpp
+++ b/engines/glk/comprehend/game.cpp
@@ -52,7 +52,7 @@ struct Sentence {
}
};
-ComprehendGame::ComprehendGame() : _gameStrings(nullptr) {
+ComprehendGame::ComprehendGame() : _gameStrings(nullptr), _ended(false) {
}
ComprehendGame::~ComprehendGame() {
@@ -282,12 +282,18 @@ void ComprehendGame::game_restore() {
(void)g_comprehend->loadGameState(c - '0');
}
-void ComprehendGame::game_restart() {
+bool ComprehendGame::handle_restart() {
console_println(stringLookup(_gameStrings->game_restart).c_str());
- console_get_key();
+ _ended = false;
- loadGame();
- _updateFlags = UPDATE_ALL;
+ if (tolower(console_get_key()) == 'r') {
+ loadGame();
+ _updateFlags = UPDATE_ALL;
+ return true;
+ } else {
+ g_comprehend->quitGame();
+ return false;
+ }
}
WordIndex *ComprehendGame::is_word_pair(Word *word1, Word *word2) {
@@ -1185,6 +1191,8 @@ void ComprehendGame::read_input() {
beforePrompt();
doBeforeTurn();
+ if (_ended)
+ return;
// If we're in full screen text, we can afford a blank row between
// any game response and the next line of text
@@ -1231,8 +1239,12 @@ void ComprehendGame::playGame() {
beforeGame();
_updateFlags = (uint)UPDATE_ALL;
- while (!g_comprehend->shouldQuit())
+ while (!g_comprehend->shouldQuit()) {
read_input();
+
+ if (_ended && !handle_restart())
+ break;
+ }
}
uint ComprehendGame::getRandomNumber(uint max) const {
diff --git a/engines/glk/comprehend/game.h b/engines/glk/comprehend/game.h
index 95f0efd1cb..5fac93782a 100644
--- a/engines/glk/comprehend/game.h
+++ b/engines/glk/comprehend/game.h
@@ -39,6 +39,8 @@ struct GameStrings;
struct Sentence;
class ComprehendGame : public GameData, public OpcodeMap {
+private:
+ bool _ended;
public:
const GameStrings *_gameStrings;
@@ -62,7 +64,10 @@ private:
protected:
void game_save();
void game_restore();
- void game_restart();
+ void game_restart() {
+ _ended = true;
+ }
+ bool handle_restart();
int console_get_key();
void console_println(const char *text);
void move_object(Item *item, int new_room);
diff --git a/engines/glk/comprehend/game_tr.cpp b/engines/glk/comprehend/game_tr.cpp
index 95ed841b46..c3265293e9 100644
--- a/engines/glk/comprehend/game_tr.cpp
+++ b/engines/glk/comprehend/game_tr.cpp
@@ -208,13 +208,13 @@ void TransylvaniaGame::handleSpecialOpcode(uint8 operand) {
case 4:
// Game over - failure
console_println(_strings2[138].c_str());
- checkForRestart();
+ game_restart();
break;
case 5:
// Won the game
g_comprehend->drawLocationPicture(40);
- checkForRestart();
+ game_restart();
break;
case 6:
@@ -243,13 +243,6 @@ void TransylvaniaGame::handleSpecialOpcode(uint8 operand) {
}
}
-void TransylvaniaGame::checkForRestart() {
- if (tolower(console_get_key()) == 'r')
- game_restart();
- else
- g_comprehend->quitGame();
-}
-
#define READ_LINE do { \
g_comprehend->readLine(buffer, sizeof(buffer)); \
if (g_comprehend->shouldQuit()) return; \
diff --git a/engines/glk/comprehend/game_tr.h b/engines/glk/comprehend/game_tr.h
index 4642e91735..70e4a059e5 100644
--- a/engines/glk/comprehend/game_tr.h
+++ b/engines/glk/comprehend/game_tr.h
@@ -38,7 +38,6 @@ private:
bool updateMonster(const TransylvaniaMonster *monsterInfo);
bool isMonsterInRoom(const TransylvaniaMonster *monsterInfo);
- void checkForRestart();
public:
TransylvaniaGame();
~TransylvaniaGame() override {}
Commit: e06afde2d6c0f61d94763da008349127add8d96f
https://github.com/scummvm/scummvm/commit/e06afde2d6c0f61d94763da008349127add8d96f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-06-13T19:24:18-07:00
Commit Message:
GLK: COMPREHEND: Reset vampire & werewolf on savegame load
Changed paths:
engines/glk/comprehend/game_tr.cpp
diff --git a/engines/glk/comprehend/game_tr.cpp b/engines/glk/comprehend/game_tr.cpp
index c3265293e9..69859f3dc6 100644
--- a/engines/glk/comprehend/game_tr.cpp
+++ b/engines/glk/comprehend/game_tr.cpp
@@ -189,6 +189,10 @@ void TransylvaniaGame::beforeTurn() {
void TransylvaniaGame::synchronizeSave(Common::Serializer &s) {
ComprehendGame::synchronizeSave(s);
s.syncAsByte(_miceReleased);
+
+ // As a post-step, ensure the vampire and werewolf aren't present
+ get_item(ITEM_WEREWOLF)->_room = 0xff;
+ get_item(ITEM_VAMPIRE)->_room = 0xff;
}
void TransylvaniaGame::handleSpecialOpcode(uint8 operand) {
More information about the Scummvm-git-logs
mailing list