[Scummvm-git-logs] scummvm master -> 60a17e75b70c079b57ca7cf863e4f9ddde06c4cd
fracturehill
76959842+fracturehill at users.noreply.github.com
Tue Apr 13 20:22:57 UTC 2021
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5a7a2d8086 NANCY: Fix off-by-one drawing errors
864db52a09 NANCY: Implement Second Chance
60a17e75b7 NANCY: Fix action record graphics after state change
Commit: 5a7a2d808678ccf03d7fcec194eaa203032c018f
https://github.com/scummvm/scummvm/commit/5a7a2d808678ccf03d7fcec194eaa203032c018f
Author: fracturehill (strahy at outlook.com)
Date: 2021-04-13T23:21:16+03:00
Commit Message:
NANCY: Fix off-by-one drawing errors
Changed the readRect() method so it correctly adds one more pixel to the width and height. Fixed a couple of off-by-one errors in the viewport scrolling code. Set the menu and help buttons as transparent to avoid drawing green lines when they're pressed.
Changed paths:
engines/nancy/font.cpp
engines/nancy/ui/button.cpp
engines/nancy/ui/viewport.cpp
engines/nancy/ui/viewport.h
engines/nancy/util.h
diff --git a/engines/nancy/font.cpp b/engines/nancy/font.cpp
index b024381d31..ea8f1abff9 100644
--- a/engines/nancy/font.cpp
+++ b/engines/nancy/font.cpp
@@ -187,8 +187,6 @@ Common::Rect Font::getCharacterSourceRect(char chr) const {
}
}
ret = _symbolRects[offset];
- ret.right += 1;
- ret.bottom += 1;
return ret;
}
diff --git a/engines/nancy/ui/button.cpp b/engines/nancy/ui/button.cpp
index b7b77dcb0c..fcf51e438b 100644
--- a/engines/nancy/ui/button.cpp
+++ b/engines/nancy/ui/button.cpp
@@ -54,6 +54,7 @@ void MenuButton::init() {
bsum->skip(16);
readRect(*bsum, _screenPosition);
setVisible(false);
+ setTransparent(true);
RenderObject::init();
}
@@ -74,6 +75,7 @@ void HelpButton::init() {
bsum->skip(16);
readRect(*bsum, _screenPosition);
setVisible(false);
+ setTransparent(true);
RenderObject::init();
}
diff --git a/engines/nancy/ui/viewport.cpp b/engines/nancy/ui/viewport.cpp
index 69d8b61497..b592ff07a6 100644
--- a/engines/nancy/ui/viewport.cpp
+++ b/engines/nancy/ui/viewport.cpp
@@ -231,10 +231,10 @@ void Viewport::setPreviousFrame() {
}
void Viewport::setVerticalScroll(uint scroll) {
- assert(scroll + _drawSurface.h + 1 <= _fullFrame.h);
+ assert(scroll + _drawSurface.h <= _fullFrame.h);
Common::Rect sourceBounds = _screenPosition;
- sourceBounds.moveTo(0, scroll + 1);
+ sourceBounds.moveTo(0, scroll);
_drawSurface.create(_fullFrame, sourceBounds);
_needsRedraw = true;
diff --git a/engines/nancy/ui/viewport.h b/engines/nancy/ui/viewport.h
index 543130d482..c68c36a949 100644
--- a/engines/nancy/ui/viewport.h
+++ b/engines/nancy/ui/viewport.h
@@ -65,8 +65,8 @@ public:
uint16 getFrameCount() const { return _decoder.isVideoLoaded() ? _decoder.getFrameCount() : 0; }
uint16 getCurFrame() const { return _currentFrame; }
- uint16 getCurVerticalScroll() const { return _drawSurface.getOffsetFromOwner().y - 1; }
- uint16 getMaxScroll() const { return _fullFrame.h - _drawSurface.h - 1; }
+ uint16 getCurVerticalScroll() const { return _drawSurface.getOffsetFromOwner().y; }
+ uint16 getMaxScroll() const { return _fullFrame.h - _drawSurface.h; }
Common::Rect getBoundsByFormat(uint format) const; // used by video
diff --git a/engines/nancy/util.h b/engines/nancy/util.h
index eff86a8a47..50489c78fc 100644
--- a/engines/nancy/util.h
+++ b/engines/nancy/util.h
@@ -30,8 +30,8 @@ namespace Nancy {
inline void readRect(Common::SeekableReadStream &stream, Common::Rect &inRect) {
inRect.left = stream.readSint32LE();
inRect.top = stream.readSint32LE();
- inRect.right = stream.readSint32LE();
- inRect.bottom = stream.readSint32LE();
+ inRect.right = stream.readSint32LE() + 1;
+ inRect.bottom = stream.readSint32LE() + 1;
}
// Reads an 8-character filename from a 10-character source
Commit: 864db52a09e82ba797bac5de71825076fc3252a9
https://github.com/scummvm/scummvm/commit/864db52a09e82ba797bac5de71825076fc3252a9
Author: fracturehill (strahy at outlook.com)
Date: 2021-04-13T23:21:16+03:00
Commit Message:
NANCY: Implement Second Chance
Implemented Second Chance, which is the original engine's autosave system. This is disabled by default, since it replaces ScummVM's built-in autosaves.
Changed paths:
engines/nancy/action/recordtypes.cpp
engines/nancy/action/recordtypes.h
engines/nancy/dialogs.cpp
engines/nancy/dialogs.h
engines/nancy/nancy.cpp
engines/nancy/nancy.h
engines/nancy/state/mainmenu.cpp
diff --git a/engines/nancy/action/recordtypes.cpp b/engines/nancy/action/recordtypes.cpp
index 59582aa0c5..43468360a4 100644
--- a/engines/nancy/action/recordtypes.cpp
+++ b/engines/nancy/action/recordtypes.cpp
@@ -20,6 +20,8 @@
*
*/
+#include "common/config-manager.h"
+
#include "engines/nancy/nancy.h"
#include "engines/nancy/sound.h"
#include "engines/nancy/resource.h"
@@ -210,6 +212,19 @@ void SaveContinueGame::readData(Common::SeekableReadStream &stream) {
stream.skip(1);
}
+void SaveContinueGame::execute() {
+ if (ConfMan.getBool("second_chance")) {
+ if (_state == kBegin) {
+ // Slight hack, skip first call to let the graphics render once and provide the correct thumbnail
+ _state = kRun;
+ return;
+ }
+
+ g_nancy->saveGameState(g_nancy->getAutosaveSlot(), "Second Chance", true);
+ }
+ _isDone = true;
+}
+
void TurnOffMainRendering::readData(Common::SeekableReadStream &stream) {
stream.skip(1);
}
diff --git a/engines/nancy/action/recordtypes.h b/engines/nancy/action/recordtypes.h
index 437d5be446..bbbc722f2f 100644
--- a/engines/nancy/action/recordtypes.h
+++ b/engines/nancy/action/recordtypes.h
@@ -193,6 +193,7 @@ protected:
class SaveContinueGame : public ActionRecord {
public:
virtual void readData(Common::SeekableReadStream &stream) override;
+ virtual void execute() override;
protected:
virtual Common::String getRecordTypeName() const override { return "SaveContinueGame"; }
diff --git a/engines/nancy/dialogs.cpp b/engines/nancy/dialogs.cpp
index 3c3ebf4232..750d562954 100644
--- a/engines/nancy/dialogs.cpp
+++ b/engines/nancy/dialogs.cpp
@@ -42,6 +42,9 @@ NancyOptionsWidget::NancyOptionsWidget(GuiObject *boss, const Common::String &na
_characterSpeechCheckbox = new GUI::CheckboxWidget(widgetsBoss(), "NancyOptionsDialog.CharacterSpeech", _("Character Speech"), _("Enable NPC speech. Only works if speech is enabled in the Audio settings."));
_originalMenusCheckbox = new GUI::CheckboxWidget(widgetsBoss(), "NancyOptionsDialog.OriginalMenus", _("Use original menus"), _("Use the original engine's main, save/load, and setup menus. ScummVM's Global Main Menu can still be accessed through its keymap."));
+ // I18N: Second Chance is the name of the original engine's autosave system
+ _secondChanceCheckbox = new GUI::CheckboxWidget(widgetsBoss(), "NancyOptionsDialog.SecondChance", _("Enable Second Chance"), _("Enable the Second Chance feature, which automatically saves at specific scenes. Enabling this disables timed autosaves."));
+
new GUI::StaticTextWidget(widgetsBoss(), "NancyOptionsDialog.SpeechSettingsLabel", _("Speech Options"));
new GUI::StaticTextWidget(widgetsBoss(), "NancyOptionsDialog.EngineSettingsLabel", _("Engine Options"));
}
@@ -50,12 +53,14 @@ void NancyOptionsWidget::load() {
_playerSpeechCheckbox->setState(ConfMan.getBool("player_speech", _domain));
_characterSpeechCheckbox->setState(ConfMan.getBool("character_speech", _domain));
_originalMenusCheckbox->setState(ConfMan.getBool("original_menus", _domain));
+ _secondChanceCheckbox->setState(ConfMan.getBool("second_chance", _domain));
}
bool NancyOptionsWidget::save() {
ConfMan.setBool("player_speech", _playerSpeechCheckbox->getState(), _domain);
ConfMan.setBool("character_speech", _characterSpeechCheckbox->getState(), _domain);
ConfMan.setBool("original_menus", _originalMenusCheckbox->getState(), _domain);
+ ConfMan.setBool("second_chance", _secondChanceCheckbox->getState(), _domain);
return true;
}
@@ -70,6 +75,7 @@ void NancyOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Common::Str
.addSpace(16)
.addWidget("EngineSettingsLabel", "OptionsLabel")
.addWidget("OriginalMenus", "Checkbox")
+ .addWidget("SecondChance", "Checkbox")
.closeLayout()
.closeDialog();
}
diff --git a/engines/nancy/dialogs.h b/engines/nancy/dialogs.h
index 53da8ff657..6515bdd82b 100644
--- a/engines/nancy/dialogs.h
+++ b/engines/nancy/dialogs.h
@@ -43,6 +43,7 @@ private:
GUI::CheckboxWidget *_playerSpeechCheckbox;
GUI::CheckboxWidget *_characterSpeechCheckbox;
GUI::CheckboxWidget *_originalMenusCheckbox;
+ GUI::CheckboxWidget *_secondChanceCheckbox;
};
class CheatDialog : public GUI::Dialog {
diff --git a/engines/nancy/nancy.cpp b/engines/nancy/nancy.cpp
index b3a0d0fe7d..ce23f44632 100644
--- a/engines/nancy/nancy.cpp
+++ b/engines/nancy/nancy.cpp
@@ -118,6 +118,14 @@ bool NancyEngine::canSaveGameStateCurrently() {
return Action::PlayPrimaryVideoChan0::_activePrimaryVideo == nullptr;
}
+bool NancyEngine::canSaveAutosaveCurrently() {
+ if (ConfMan.getBool("second_chance")) {
+ return false;
+ } else {
+ return Engine::canSaveAutosaveCurrently();
+ }
+}
+
bool NancyEngine::hasFeature(EngineFeature f) const {
return (f == kSupportsReturnToLauncher) ||
(f == kSupportsLoadingDuringRuntime) ||
@@ -293,6 +301,7 @@ void NancyEngine::bootGameEngine() {
ConfMan.registerDefault("player_speech", true);
ConfMan.registerDefault("character_speech", true);
ConfMan.registerDefault("original_menus", false);
+ ConfMan.registerDefault("second_chance", false);
// Load archive
Common::SeekableReadStream *stream = SearchMan.createReadStreamForMember("data1.cab");
diff --git a/engines/nancy/nancy.h b/engines/nancy/nancy.h
index bca65a7a98..d602a02bcf 100644
--- a/engines/nancy/nancy.h
+++ b/engines/nancy/nancy.h
@@ -91,6 +91,7 @@ public:
virtual Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
virtual bool canLoadGameStateCurrently() override;
virtual bool canSaveGameStateCurrently() override;
+ virtual bool canSaveAutosaveCurrently() override;
const char *getCopyrightString() const;
uint32 getGameFlags() const;
diff --git a/engines/nancy/state/mainmenu.cpp b/engines/nancy/state/mainmenu.cpp
index 69abb3b8f0..52d1373d5d 100644
--- a/engines/nancy/state/mainmenu.cpp
+++ b/engines/nancy/state/mainmenu.cpp
@@ -155,8 +155,13 @@ void MainMenu::stop() {
}
break;
case 4:
- // Second Chance, TODO
- _state = kRun;
+ // Second Chance
+ if (!Scene::hasInstance()) {
+ NancySceneState.process(); // run once to init the state
+ }
+
+ g_nancy->loadGameState(g_nancy->getAutosaveSlot());
+ g_nancy->setState(NancyState::kScene);
break;
case 5:
// Game Setup, TODO
@@ -164,7 +169,7 @@ void MainMenu::stop() {
break;
case 6:
// Exit Game
- g_nancy->quitGame(); // Consider returning to launcher instead?
+ g_nancy->quitGame();
break;
case 7:
// Help
Commit: 60a17e75b70c079b57ca7cf863e4f9ddde06c4cd
https://github.com/scummvm/scummvm/commit/60a17e75b70c079b57ca7cf863e4f9ddde06c4cd
Author: fracturehill (strahy at outlook.com)
Date: 2021-04-13T23:21:17+03:00
Commit Message:
NANCY: Fix action record graphics after state change
Fixed all instances where an action record would incorrectly register its graphics when exiting the Scene state instead of when entering it.
Changed paths:
engines/nancy/action/leverpuzzle.cpp
engines/nancy/action/orderingpuzzle.cpp
engines/nancy/action/passwordpuzzle.cpp
engines/nancy/action/primaryvideo.cpp
engines/nancy/action/recordtypes.cpp
engines/nancy/action/rotatinglockpuzzle.cpp
engines/nancy/action/secondarymovie.cpp
engines/nancy/action/secondaryvideo.cpp
engines/nancy/action/sliderpuzzle.cpp
engines/nancy/action/staticbitmapanim.cpp
diff --git a/engines/nancy/action/leverpuzzle.cpp b/engines/nancy/action/leverpuzzle.cpp
index b15d1c383f..ff5e854e70 100644
--- a/engines/nancy/action/leverpuzzle.cpp
+++ b/engines/nancy/action/leverpuzzle.cpp
@@ -227,7 +227,7 @@ void LeverPuzzle::handleInput(NancyInput &input) {
}
void LeverPuzzle::onPause(bool pause) {
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/orderingpuzzle.cpp b/engines/nancy/action/orderingpuzzle.cpp
index 14b0a55afd..c5ea10d7ee 100644
--- a/engines/nancy/action/orderingpuzzle.cpp
+++ b/engines/nancy/action/orderingpuzzle.cpp
@@ -203,7 +203,7 @@ void OrderingPuzzle::handleInput(NancyInput &input) {
}
void OrderingPuzzle::onPause(bool pause) {
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/passwordpuzzle.cpp b/engines/nancy/action/passwordpuzzle.cpp
index dcf4a27f28..65edb00fd2 100644
--- a/engines/nancy/action/passwordpuzzle.cpp
+++ b/engines/nancy/action/passwordpuzzle.cpp
@@ -212,7 +212,7 @@ void PasswordPuzzle::handleInput(NancyInput &input) {
}
void PasswordPuzzle::onPause(bool pause) {
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/primaryvideo.cpp b/engines/nancy/action/primaryvideo.cpp
index d77164780c..f4fc2408ae 100644
--- a/engines/nancy/action/primaryvideo.cpp
+++ b/engines/nancy/action/primaryvideo.cpp
@@ -148,7 +148,7 @@ void PlayPrimaryVideoChan0::updateGraphics() {
void PlayPrimaryVideoChan0::onPause(bool pause) {
_decoder.pauseVideo(pause);
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/recordtypes.cpp b/engines/nancy/action/recordtypes.cpp
index 43468360a4..4186e503db 100644
--- a/engines/nancy/action/recordtypes.cpp
+++ b/engines/nancy/action/recordtypes.cpp
@@ -423,7 +423,7 @@ void ShowInventoryItem::execute() {
}
void ShowInventoryItem::onPause(bool pause) {
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/rotatinglockpuzzle.cpp b/engines/nancy/action/rotatinglockpuzzle.cpp
index c6f158464a..8bb6b8ff7a 100644
--- a/engines/nancy/action/rotatinglockpuzzle.cpp
+++ b/engines/nancy/action/rotatinglockpuzzle.cpp
@@ -215,7 +215,7 @@ void RotatingLockPuzzle::handleInput(NancyInput &input) {
}
void RotatingLockPuzzle::onPause(bool pause) {
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/secondarymovie.cpp b/engines/nancy/action/secondarymovie.cpp
index d8ae742609..2f79bea328 100644
--- a/engines/nancy/action/secondarymovie.cpp
+++ b/engines/nancy/action/secondarymovie.cpp
@@ -133,7 +133,7 @@ void PlaySecondaryMovie::updateGraphics() {
void PlaySecondaryMovie::onPause(bool pause) {
_decoder.pauseVideo(pause);
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/secondaryvideo.cpp b/engines/nancy/action/secondaryvideo.cpp
index 490528cf06..83cd3cbe40 100644
--- a/engines/nancy/action/secondaryvideo.cpp
+++ b/engines/nancy/action/secondaryvideo.cpp
@@ -127,7 +127,7 @@ void PlaySecondaryVideo::updateGraphics() {
void PlaySecondaryVideo::onPause(bool pause) {
_decoder.pauseVideo(pause);
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/sliderpuzzle.cpp b/engines/nancy/action/sliderpuzzle.cpp
index 6f2853eab6..1aed740409 100644
--- a/engines/nancy/action/sliderpuzzle.cpp
+++ b/engines/nancy/action/sliderpuzzle.cpp
@@ -290,7 +290,7 @@ void SliderPuzzle::handleInput(NancyInput &input) {
}
void SliderPuzzle::onPause(bool pause) {
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
diff --git a/engines/nancy/action/staticbitmapanim.cpp b/engines/nancy/action/staticbitmapanim.cpp
index 4e041b7d56..95aceee3e3 100644
--- a/engines/nancy/action/staticbitmapanim.cpp
+++ b/engines/nancy/action/staticbitmapanim.cpp
@@ -168,7 +168,7 @@ void PlayStaticBitmapAnimation::execute() {
}
void PlayStaticBitmapAnimation::onPause(bool pause) {
- if (pause) {
+ if (!pause) {
registerGraphics();
}
}
More information about the Scummvm-git-logs
mailing list