[Scummvm-git-logs] scummvm master -> 75d647e071ad392dddcc4610a58acd8326efdfa8
criezy
criezy at scummvm.org
Sat Apr 3 00:24:46 UTC 2021
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f9292bc97a SUPERNOVA: Fix display of text on intro and outro screen
75d647e071 SUPERNOVA: Fix access to unallocated memory in intro screens
Commit: f9292bc97ac884a5c670507b1e6dcb21c8de5b4e
https://github.com/scummvm/scummvm/commit/f9292bc97ac884a5c670507b1e6dcb21c8de5b4e
Author: Thierry Crozat (criezy at scummvm.org)
Date: 2021-04-03T01:24:36+01:00
Commit Message:
SUPERNOVA: Fix display of text on intro and outro screen
This was a regression from 54b0b4ac4 that prevents from adding
null characters to a Common::String. For those screens the game
passes multiple strings as a single strings containing a '\0'
to separate the different parts. But that '\0' was no longer
added. I am now using '\1' and updated the parsing in the text
display to handle this.
Changed paths:
engines/supernova/screen.cpp
engines/supernova/supernova1/rooms.cpp
engines/supernova/supernova2/rooms.cpp
diff --git a/engines/supernova/screen.cpp b/engines/supernova/screen.cpp
index 6d7071720f..4bfcdf9247 100644
--- a/engines/supernova/screen.cpp
+++ b/engines/supernova/screen.cpp
@@ -175,7 +175,7 @@ bool Marquee::renderCharacter() {
} else
return false;
break;
- case '\0':
+ case '\1':
clearText();
_text++;
_textWidth = Screen::textWidth(_text);
@@ -494,7 +494,7 @@ int Screen::textWidth(const uint16 key) {
int Screen::textWidth(const char *text) {
int charWidth = 0;
- while (*text != '\0') {
+ while (*text != '\0' && *text != '\1') {
byte c = *text++;
if (c < 32) {
continue;
diff --git a/engines/supernova/supernova1/rooms.cpp b/engines/supernova/supernova1/rooms.cpp
index 4981f40903..2ea13b6914 100644
--- a/engines/supernova/supernova1/rooms.cpp
+++ b/engines/supernova/supernova1/rooms.cpp
@@ -64,19 +64,19 @@ Intro::Intro(SupernovaEngine *vm, GameManager1 *gm) {
_shouldExit = false;
_introText =
- _vm->getGameString(kStringIntro1) + '\0' +
- _vm->getGameString(kStringIntro2) + '\0' +
- _vm->getGameString(kStringIntro3) + '\0' +
- _vm->getGameString(kStringIntro4) + '\0' +
- _vm->getGameString(kStringIntro5) + '\0' +
- _vm->getGameString(kStringIntro6) + '\0' +
- _vm->getGameString(kStringIntro7) + '\0' +
- _vm->getGameString(kStringIntro8) + '\0' +
- _vm->getGameString(kStringIntro9) + '\0' +
- _vm->getGameString(kStringIntro10) + '\0' +
- _vm->getGameString(kStringIntro11) + '\0' +
- _vm->getGameString(kStringIntro12) + '\0' +
- _vm->getGameString(kStringIntro13) + '\0';
+ _vm->getGameString(kStringIntro1) + '\1' +
+ _vm->getGameString(kStringIntro2) + '\1' +
+ _vm->getGameString(kStringIntro3) + '\1' +
+ _vm->getGameString(kStringIntro4) + '\1' +
+ _vm->getGameString(kStringIntro5) + '\1' +
+ _vm->getGameString(kStringIntro6) + '\1' +
+ _vm->getGameString(kStringIntro7) + '\1' +
+ _vm->getGameString(kStringIntro8) + '\1' +
+ _vm->getGameString(kStringIntro9) + '\1' +
+ _vm->getGameString(kStringIntro10) + '\1' +
+ _vm->getGameString(kStringIntro11) + '\1' +
+ _vm->getGameString(kStringIntro12) + '\1' +
+ _vm->getGameString(kStringIntro13) + '\1';
}
void Intro::onEntrance() {
@@ -4092,20 +4092,20 @@ Outro::Outro(SupernovaEngine *vm, GameManager1 *gm) {
_shown[0] = kShownFalse;
_outroText =
- _vm->getGameString(kStringOutro1) + '\0' +
- _vm->getGameString(kStringOutro2) + '\0' +
- _vm->getGameString(kStringOutro3) + '\0' +
- _vm->getGameString(kStringOutro4) + '\0' +
- _vm->getGameString(kStringOutro5) + '\0' +
- _vm->getGameString(kStringOutro6) + '\0' +
- _vm->getGameString(kStringOutro7) + '\0' +
- _vm->getGameString(kStringOutro8) + '\0' +
- _vm->getGameString(kStringOutro9) + '\0' +
- _vm->getGameString(kStringOutro10) + '\0' +
- _vm->getGameString(kStringOutro11) + '\0' +
- _vm->getGameString(kStringOutro12) + '\0' +
- _vm->getGameString(kStringOutro13) + '\0' +
- _vm->getGameString(kStringOutro14) + '\0';
+ _vm->getGameString(kStringOutro1) + '\1' +
+ _vm->getGameString(kStringOutro2) + '\1' +
+ _vm->getGameString(kStringOutro3) + '\1' +
+ _vm->getGameString(kStringOutro4) + '\1' +
+ _vm->getGameString(kStringOutro5) + '\1' +
+ _vm->getGameString(kStringOutro6) + '\1' +
+ _vm->getGameString(kStringOutro7) + '\1' +
+ _vm->getGameString(kStringOutro8) + '\1' +
+ _vm->getGameString(kStringOutro9) + '\1' +
+ _vm->getGameString(kStringOutro10) + '\1' +
+ _vm->getGameString(kStringOutro11) + '\1' +
+ _vm->getGameString(kStringOutro12) + '\1' +
+ _vm->getGameString(kStringOutro13) + '\1' +
+ _vm->getGameString(kStringOutro14) + '\1';
}
void Outro::onEntrance() {
diff --git a/engines/supernova/supernova2/rooms.cpp b/engines/supernova/supernova2/rooms.cpp
index 096855a105..bbbc5f9f8f 100644
--- a/engines/supernova/supernova2/rooms.cpp
+++ b/engines/supernova/supernova2/rooms.cpp
@@ -52,19 +52,19 @@ Intro2::Intro2(SupernovaEngine *vm, GameManager2 *gm) {
_objectState[8] = Object(_id, kStringKeycard, kStringDefaultDescription, MUSCARD, TAKE, 255, 255, 0);
_introText =
- _vm->getGameString(kStringIntro1) + '\0' +
- _vm->getGameString(kStringIntro2) + '\0' +
- _vm->getGameString(kStringIntro3) + '\0' +
- _vm->getGameString(kStringIntro4) + '\0' +
- _vm->getGameString(kStringIntro5) + '\0' +
- "^Matthias Neef#" + '\0' +
- "^Sascha Otterbach#" + '\0' +
- "^Thomas Mazzoni#" + '\0' +
- "^Matthias Klein#" + '\0' +
- "^Gerrit Rothmaier#" + '\0' +
- "^Thomas Hassler#" + '\0' +
- "^Rene Kach#" + '\0' +
- '\233' + '\0';
+ _vm->getGameString(kStringIntro1) + '\1' +
+ _vm->getGameString(kStringIntro2) + '\1' +
+ _vm->getGameString(kStringIntro3) + '\1' +
+ _vm->getGameString(kStringIntro4) + '\1' +
+ _vm->getGameString(kStringIntro5) + '\1' +
+ "^Matthias Neef#" + '\1' +
+ "^Sascha Otterbach#" + '\1' +
+ "^Thomas Mazzoni#" + '\1' +
+ "^Matthias Klein#" + '\1' +
+ "^Gerrit Rothmaier#" + '\1' +
+ "^Thomas Hassler#" + '\1' +
+ "^Rene Kach#" + '\1' +
+ '\233' + '\1';
}
void Intro2::onEntrance() {
@@ -1906,28 +1906,28 @@ Ship::Ship(SupernovaEngine *vm, GameManager2 *gm) {
_objectState[6] = Object(_id, kStringCable, kStringCableDescription2, CABLE, TAKE | COMBINABLE, 255, 255, 8 + kSectionInvert);
_outroText =
- _vm->getGameString(kStringIntro1) + '\0' +
- _vm->getGameString(kStringIntro2) + '\0' +
- _vm->getGameString(kStringIntro3) + '\0' +
- _vm->getGameString(kStringIntro4) + '\0' +
- _vm->getGameString(kStringIntro5) + '\0' +
- "^Matthias Neef#" + '\0' +
- "^Sascha Otterbach#" + '\0' +
- "^Thomas Mazzoni#" + '\0' +
- "^Matthias Klein#" + '\0' +
- "^Gerrit Rothmaier#" + '\0' +
- "^Thomas Hassler#" + '\0' +
- "^Rene Kach#" + '\0' +
- '\233' + '\0';
+ _vm->getGameString(kStringIntro1) + '\1' +
+ _vm->getGameString(kStringIntro2) + '\1' +
+ _vm->getGameString(kStringIntro3) + '\1' +
+ _vm->getGameString(kStringIntro4) + '\1' +
+ _vm->getGameString(kStringIntro5) + '\1' +
+ "^Matthias Neef#" + '\1' +
+ "^Sascha Otterbach#" + '\1' +
+ "^Thomas Mazzoni#" + '\1' +
+ "^Matthias Klein#" + '\1' +
+ "^Gerrit Rothmaier#" + '\1' +
+ "^Thomas Hassler#" + '\1' +
+ "^Rene Kach#" + '\1' +
+ '\233' + '\1';
Common::String waitString = "##################";
_outroText2 =
- waitString + '\0' +
- _vm->getGameString(kStringOutro1) + '\0' +
- _vm->getGameString(kStringOutro2) + '\0' +
- _vm->getGameString(kStringOutro3) + '\0' +
- _vm->getGameString(kStringOutro4) + '\0' +
- _vm->getGameString(kStringOutro5) + '\0' +
- '\233' + '\0';
+ waitString + '\1' +
+ _vm->getGameString(kStringOutro1) + '\1' +
+ _vm->getGameString(kStringOutro2) + '\1' +
+ _vm->getGameString(kStringOutro3) + '\1' +
+ _vm->getGameString(kStringOutro4) + '\1' +
+ _vm->getGameString(kStringOutro5) + '\1' +
+ '\233' + '\1';
}
void Ship::onEntrance() {
Commit: 75d647e071ad392dddcc4610a58acd8326efdfa8
https://github.com/scummvm/scummvm/commit/75d647e071ad392dddcc4610a58acd8326efdfa8
Author: Thierry Crozat (criezy at scummvm.org)
Date: 2021-04-03T01:24:36+01:00
Commit Message:
SUPERNOVA: Fix access to unallocated memory in intro screens
Changed paths:
engines/supernova/screen.cpp
diff --git a/engines/supernova/screen.cpp b/engines/supernova/screen.cpp
index 4bfcdf9247..83694addb2 100644
--- a/engines/supernova/screen.cpp
+++ b/engines/supernova/screen.cpp
@@ -496,7 +496,9 @@ int Screen::textWidth(const char *text) {
int charWidth = 0;
while (*text != '\0' && *text != '\1') {
byte c = *text++;
- if (c < 32) {
+ if (c < 32 || c == 155) {
+ // 155 is used for looping in Marquee text and is not used otherwise
+ // (it is beyond the end of the font).
continue;
} else if (c == 225) {
c = 35;
More information about the Scummvm-git-logs
mailing list