[Scummvm-git-logs] scummvm master -> 9ed3755e7d3e766f2eba4435bea563c9b1639fa8
mgerhardy
noreply at scummvm.org
Thu Oct 10 12:01:14 UTC 2024
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
048800582f TWINE: palette code unified with original sources
733ed796a1 TWINE: removed fadeIn and fadeOut and use the original method names
a7dfd9fe01 TWINE: converted palettes to Graphics::Palette
747efced7c TWINE: restore palette as found in the original sources in svga and mcga change functions
f59b041175 TWINE: moved dark/normal palette mode code into life script
56f936f256 TWINE: removed unused additional palette instance
9ed3755e7d TWINE: unified holomap code with original sources
Commit: 048800582f053ad155536c55914ddc6d35b7992e
https://github.com/scummvm/scummvm/commit/048800582f053ad155536c55914ddc6d35b7992e
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-10T14:01:06+02:00
Commit Message:
TWINE: palette code unified with original sources
also made more use of Graphics::Palette
Changed paths:
engines/twine/renderer/screens.cpp
engines/twine/renderer/screens.h
diff --git a/engines/twine/renderer/screens.cpp b/engines/twine/renderer/screens.cpp
index debeb416551..1765b1f190d 100644
--- a/engines/twine/renderer/screens.cpp
+++ b/engines/twine/renderer/screens.cpp
@@ -201,29 +201,14 @@ void Screens::fadeOut(const uint32 *pal) {
}
void Screens::fadePal(uint8 r, uint8 g, uint8 b, const uint32 *rgbaPal, int32 intensity) {
- uint32 pal[NUMOFCOLORS];
-
- int32 counter = 0;
+ Graphics::Palette pal{NUMOFCOLORS};
const uint8 *paletteIn = (const uint8 *)rgbaPal;
- uint8 *paletteOut = (uint8 *)pal;
- uint8 *newR = &paletteOut[0];
- uint8 *newG = &paletteOut[1];
- uint8 *newB = &paletteOut[2];
- uint8 *newA = &paletteOut[3];
-
for (int32 i = 0; i < NUMOFCOLORS; i++) {
- *newR = lerp(r, paletteIn[counter], 100, intensity);
- *newG = lerp(g, paletteIn[counter + 1], 100, intensity);
- *newB = lerp(b, paletteIn[counter + 2], 100, intensity);
- *newA = 0xFF;
-
- newR += 4;
- newG += 4;
- newB += 4;
- newA += 4;
-
- counter += 4;
+ const byte newR = lerp(r, paletteIn[i * 4 + 0], 100, intensity);
+ const byte newG = lerp(g, paletteIn[i * 4 + 1], 100, intensity);
+ const byte newB = lerp(b, paletteIn[i * 4 + 2], 100, intensity);
+ pal.set(i, newR, newG, newB);
}
_engine->setPalette(pal);
@@ -231,7 +216,7 @@ void Screens::fadePal(uint8 r, uint8 g, uint8 b, const uint32 *rgbaPal, int32 in
}
void Screens::fadeToBlack(const uint32 *ptrpal) {
- if (_fadeBlackPal) {
+ if (_flagBlackPal) {
return;
}
@@ -240,7 +225,7 @@ void Screens::fadeToBlack(const uint32 *ptrpal) {
fadePal(0, 0, 0, ptrpal, n);
}
- _fadeBlackPal = true;
+ _flagBlackPal = true;
}
void Screens::whiteFade() {
@@ -270,7 +255,7 @@ void Screens::fadeToPal(const uint32 *pal) {
_engine->setPalette(pal);
- _fadeBlackPal = false;
+ _flagBlackPal = false;
}
void Screens::setBlackPal() {
@@ -279,34 +264,26 @@ void Screens::setBlackPal() {
_engine->setPalette(_ptrPal);
- _fadeBlackPal = true;
+ _flagBlackPal = true;
}
void Screens::fadePalToPal(const uint32 *ptrpal, const uint32 *ptrpal2) {
Graphics::Palette workpal{NUMOFCOLORS};
- int32 counter = 0;
- int32 intensity = 0;
-
const uint8 *pal1p = (const uint8 *)ptrpal;
const uint8 *pal2p = (const uint8 *)ptrpal2;
- do {
- FrameMarker frame(_engine, DEFAULT_HZ);
- counter = 0;
-
+ for (int m = 0; m < 100; ++m) {
+ FrameMarker frame(_engine, DEFAULT_HZ); // VSync()
for (int32 i = 0; i < NUMOFCOLORS; i++) {
- byte newR = lerp(pal1p[counter + 0], pal2p[counter + 0], 100, intensity);
- byte newG = lerp(pal1p[counter + 1], pal2p[counter + 1], 100, intensity);
- byte newB = lerp(pal1p[counter + 2], pal2p[counter + 2], 100, intensity);
+ byte newR = lerp(pal1p[i * 4 + 0], pal2p[i * 4 + 0], 100, m);
+ byte newG = lerp(pal1p[i * 4 + 1], pal2p[i * 4 + 1], 100, m);
+ byte newB = lerp(pal1p[i * 4 + 2], pal2p[i * 4 + 2], 100, m);
workpal.set(i, newR, newG, newB);
-
- counter += 4;
}
_engine->setPalette(workpal);
- intensity++;
_engine->_frontVideoBuffer.update();
- } while (intensity <= 100);
+ }
}
void Screens::fadeToRed(const uint32 *pal) {
diff --git a/engines/twine/renderer/screens.h b/engines/twine/renderer/screens.h
index 8d55b6c379c..d1178f254cd 100644
--- a/engines/twine/renderer/screens.h
+++ b/engines/twine/renderer/screens.h
@@ -48,7 +48,6 @@ private:
public:
Screens(TwinEEngine *engine) : _engine(engine) {}
- /** In-game palette (should not be used, except in special case. otherwise use other images functions instead) */
Graphics::Palette _palette{0};
int32 mapLba2Palette(int32 palIndex);
@@ -59,8 +58,11 @@ public:
/** converted custom palette */
uint32 _palettePcx[NUMOFCOLORS]{0};
+ /** converted in-game palette */
+ uint32 _mainPaletteRGBA[NUMOFCOLORS]{0};
+
/** flag to check in the game palette was changed */
- bool _fadeBlackPal = false;
+ bool _flagBlackPal = false;
/** flag to check if the main flag is locked */
bool _flagFade = false;
@@ -68,9 +70,6 @@ public:
/** flag to check if we are using a different palette than the main one */
bool _flagPalettePcx = false;
- /** converted in-game palette */
- uint32 _mainPaletteRGBA[NUMOFCOLORS]{0};
-
/** Load and display Adeline Logo */
bool adelineLogo();
Commit: 733ed796a1dee1e9c463c062e7161edf8c9a35c1
https://github.com/scummvm/scummvm/commit/733ed796a1dee1e9c463c062e7161edf8c9a35c1
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-10T14:01:06+02:00
Commit Message:
TWINE: removed fadeIn and fadeOut and use the original method names
Changed paths:
engines/twine/movies.cpp
engines/twine/renderer/redraw.cpp
engines/twine/renderer/screens.cpp
engines/twine/renderer/screens.h
engines/twine/slideshow.cpp
diff --git a/engines/twine/movies.cpp b/engines/twine/movies.cpp
index d60d5be6c9d..a304f43053c 100644
--- a/engines/twine/movies.cpp
+++ b/engines/twine/movies.cpp
@@ -437,7 +437,7 @@ bool Movies::playMovie(const char *name) { // PlayAnimFla
_engine->_screens->convertPalToRGBA(_engine->_screens->_palette.data(), _engine->_screens->_palettePcx);
if (currentFrame == 0) {
// fade in the first frame
- _engine->_screens->fadeIn(_engine->_screens->_palettePcx);
+ _engine->_screens->fadeToPal(_engine->_screens->_palettePcx);
} else {
_engine->setPalette(_engine->_screens->_palettePcx);
}
diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index fed78509490..4bd6d0ff730 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -881,7 +881,7 @@ void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
if (bgRedraw) {
_engine->freezeTime(false);
if (_engine->_scene->_newCube != SCENE_CEILING_GRID_FADE_1 && _engine->_scene->_newCube != SCENE_CEILING_GRID_FADE_2) {
- _engine->_screens->fadeOut(_engine->_screens->_ptrPal);
+ _engine->_screens->fadeToBlack(_engine->_screens->_ptrPal);
}
_engine->_screens->clearScreen();
@@ -894,7 +894,7 @@ void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
_engine->saveFrontBuffer();
if (_engine->_scene->_newCube != SCENE_CEILING_GRID_FADE_1 && _engine->_scene->_newCube != SCENE_CEILING_GRID_FADE_2) {
- _engine->_screens->fadeIn(_engine->_screens->_ptrPal);
+ _engine->_screens->fadeToPal(_engine->_screens->_ptrPal);
}
} else {
blitBackgroundAreas();
diff --git a/engines/twine/renderer/screens.cpp b/engines/twine/renderer/screens.cpp
index 1765b1f190d..f8852bb728b 100644
--- a/engines/twine/renderer/screens.cpp
+++ b/engines/twine/renderer/screens.cpp
@@ -102,7 +102,7 @@ bool Screens::loadImageDelay(TwineImage image, int32 seconds) {
fadePal(0, 0, 0, _palettePcx, 100);
return true;
}
- fadeOut(_palettePcx);
+ fadeToBlack(_palettePcx);
return false;
}
@@ -190,16 +190,6 @@ void Screens::convertPalToRGBA(const uint8 *in, uint32 *out) {
}
}
-void Screens::fadeIn(const uint32 *pal) {
- fadeToPal(pal);
-
- _engine->setPalette(pal);
-}
-
-void Screens::fadeOut(const uint32 *pal) {
- fadeToBlack(pal);
-}
-
void Screens::fadePal(uint8 r, uint8 g, uint8 b, const uint32 *rgbaPal, int32 intensity) {
Graphics::Palette pal{NUMOFCOLORS};
@@ -247,13 +237,13 @@ void Screens::fadeWhiteToPal(const uint32 *ptrpal) {
}
}
-void Screens::fadeToPal(const uint32 *pal) {
+void Screens::fadeToPal(const uint32 *ptrpal) {
for (int32 i = 0; i <= 100; i += 3) {
FrameMarker frame(_engine, DEFAULT_HZ); // VSync()
- fadePal(0, 0, 0, pal, i);
+ fadePal(0, 0, 0, ptrpal, i);
}
- _engine->setPalette(pal);
+ _engine->setPalette(ptrpal);
_flagBlackPal = false;
}
@@ -286,17 +276,17 @@ void Screens::fadePalToPal(const uint32 *ptrpal, const uint32 *ptrpal2) {
}
}
-void Screens::fadeToRed(const uint32 *pal) {
+void Screens::fadeToRed(const uint32 *ptrpal) {
for (int32 i = 100; i >= 0; i -= 2) {
FrameMarker frame(_engine, DEFAULT_HZ);
- fadePal(255, 0, 0, pal, i);
+ fadePal(255, 0, 0, ptrpal, i);
}
}
-void Screens::fadeRedToPal(const uint32 *pal) {
+void Screens::fadeRedToPal(const uint32 *ptrpal) {
for (int32 i = 0; i <= 100; i += 2) {
FrameMarker frame(_engine, DEFAULT_HZ);
- fadePal(255, 0, 0, pal, i);
+ fadePal(255, 0, 0, ptrpal, i);
}
}
diff --git a/engines/twine/renderer/screens.h b/engines/twine/renderer/screens.h
index d1178f254cd..58189f14837 100644
--- a/engines/twine/renderer/screens.h
+++ b/engines/twine/renderer/screens.h
@@ -113,18 +113,6 @@ public:
bool loadBitmapDelay(const char *image, int32 seconds);
- /**
- * Fade image in
- * @param palette current palette to fade in
- */
- void fadeIn(const uint32 *palette);
-
- /**
- * Fade image out
- * @param palette current palette to fade out
- */
- void fadeOut(const uint32 *palette);
-
/**
* Linear interpolation of the given value between start and end
* @param value color component
diff --git a/engines/twine/slideshow.cpp b/engines/twine/slideshow.cpp
index 4c1282cb270..80d92947284 100644
--- a/engines/twine/slideshow.cpp
+++ b/engines/twine/slideshow.cpp
@@ -145,11 +145,11 @@ private:
}
void scriptFadeIn() {
- _engine->_screens->fadeIn(_pal);
+ _engine->_screens->fadeToPal(_pal);
}
void scriptFadeOut() {
- _engine->_screens->fadeOut(_pal);
+ _engine->_screens->fadeToBlack(_pal);
}
void scriptPCX(const Common::String ¶ms) {
Commit: a7dfd9fe01fe069ff926252e4a8ae33907c857bb
https://github.com/scummvm/scummvm/commit/a7dfd9fe01fe069ff926252e4a8ae33907c857bb
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-10T14:01:06+02:00
Commit Message:
TWINE: converted palettes to Graphics::Palette
Changed paths:
engines/twine/movies.cpp
engines/twine/movies.h
engines/twine/renderer/redraw.cpp
engines/twine/renderer/screens.cpp
engines/twine/renderer/screens.h
engines/twine/resources/resources.cpp
engines/twine/script/script_life.cpp
engines/twine/script/script_life_v2.cpp
engines/twine/slideshow.cpp
diff --git a/engines/twine/movies.cpp b/engines/twine/movies.cpp
index a304f43053c..e691b8a2f98 100644
--- a/engines/twine/movies.cpp
+++ b/engines/twine/movies.cpp
@@ -188,16 +188,16 @@ void Movies::drawNextFrameFla() {
case kLoadPalette: {
int16 numOfColor = stream.readSint16LE();
int16 startColor = stream.readSint16LE();
- if (_engine->_screens->_palette.size() < (uint)(numOfColor + startColor)) {
+ if (_paletteOrg.size() < (uint)(numOfColor + startColor)) {
Graphics::Palette palette(numOfColor + startColor);
- palette.set(_engine->_screens->_palette, 0, _engine->_screens->_palette.size());
- _engine->_screens->_palette = palette;
+ palette.set(_paletteOrg, 0, _paletteOrg.size());
+ _paletteOrg = palette;
}
for (int16 i = 0; i < numOfColor; ++i) {
const byte r = stream.readByte();
const byte g = stream.readByte();
const byte b = stream.readByte();
- _engine->_screens->_palette.set(i + startColor, r, g, b);
+ _paletteOrg.set(i + startColor, r, g, b);
}
break;
}
@@ -211,8 +211,7 @@ void Movies::drawNextFrameFla() {
// FLA movies don't use cross fade
// fade out tricky
if (_fadeOut != 1) {
- _engine->_screens->convertPalToRGBA(_engine->_screens->_palette.data(), _engine->_screens->_palettePcx);
- _engine->_screens->fadeToBlack(_engine->_screens->_palettePcx);
+ _engine->_screens->fadeToBlack(_paletteOrg);
_fadeOut = 1;
}
break;
@@ -434,19 +433,17 @@ bool Movies::playMovie(const char *name) { // PlayAnimFla
// Only blit to screen if isn't a fade
if (_fadeOut == -1) {
- _engine->_screens->convertPalToRGBA(_engine->_screens->_palette.data(), _engine->_screens->_palettePcx);
if (currentFrame == 0) {
// fade in the first frame
- _engine->_screens->fadeToPal(_engine->_screens->_palettePcx);
+ _engine->_screens->fadeToPal(_paletteOrg);
} else {
- _engine->setPalette(_engine->_screens->_palettePcx);
+ _engine->setPalette(_paletteOrg);
}
}
// TRICKY: fade in tricky
if (_fadeOutFrames >= 2) {
- _engine->_screens->convertPalToRGBA(_engine->_screens->_palette.data(), _engine->_screens->_palettePcx);
- _engine->_screens->fadeToPal(_engine->_screens->_palettePcx);
+ _engine->_screens->fadeToPal(_paletteOrg);
_fadeOut = -1;
_fadeOutFrames = 0;
}
@@ -457,7 +454,7 @@ bool Movies::playMovie(const char *name) { // PlayAnimFla
warning("Unsupported fla version: %u, %s", version, fileNamePath.c_str());
}
- _engine->_screens->fadeToBlack(_engine->_screens->_palettePcx);
+ _engine->_screens->fadeToBlack(_paletteOrg);
_engine->_sound->stopSamples();
return finished;
diff --git a/engines/twine/movies.h b/engines/twine/movies.h
index 3c103df305f..7c8cd8dd0e8 100644
--- a/engines/twine/movies.h
+++ b/engines/twine/movies.h
@@ -25,6 +25,7 @@
#include "common/memstream.h"
#include "common/scummsys.h"
#include "common/file.h"
+#include "graphics/palette.h"
namespace TwinE {
@@ -66,6 +67,7 @@ private:
/** Auxiliar FLA fade out variable to count frames between the fade */
int32 _fadeOutFrames = 0;
bool _flagFirst = false;
+ Graphics::Palette _paletteOrg{0};
/** FLA movie file buffer */
uint8 _flaBuffer[FLASCREEN_WIDTH * FLASCREEN_HEIGHT] {0};
diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index 4bd6d0ff730..c9f21c11838 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -930,9 +930,9 @@ void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
if (_engine->_screens->_flagFade) {
if (_engine->_screens->_flagPalettePcx) {
- _engine->_screens->fadeToPal(_engine->_screens->_ptrPal);
+ _engine->_screens->fadeToPal(_engine->_screens->_palettePcx);
} else {
- _engine->_screens->fadeToPal(_engine->_screens->_mainPaletteRGBA);
+ _engine->_screens->fadeToPal(_engine->_screens->_ptrPal);
}
_engine->_screens->_flagFade = false;
}
diff --git a/engines/twine/renderer/screens.cpp b/engines/twine/renderer/screens.cpp
index f8852bb728b..0b9f70704bc 100644
--- a/engines/twine/renderer/screens.cpp
+++ b/engines/twine/renderer/screens.cpp
@@ -64,15 +64,15 @@ void Screens::loadMenuImage(bool fadeIn) {
}
void Screens::loadCustomPalette(const TwineResource &resource) {
- if (!HQR::getPaletteEntry(_palette, resource)) {
+ if (!HQR::getPaletteEntry(_palettePcx, resource)) {
error("Failed to get palette entry for custom palette: %s:%d", resource.hqr, resource.index);
}
if (_palette.size() != NUMOFCOLORS) {
warning("Unexpected palette size %s:%i", resource.hqr, resource.index);
}
- debug(3, "palette %s:%i with %u colors", resource.hqr, resource.index, _palette.size());
- convertPalToRGBA(_palette.data(), _palettePcx);
+ debug(3, "palette %s:%i with %u colors", resource.hqr, resource.index, _palettePcx.size());
+ _palette = _palettePcx;
}
void Screens::loadImage(TwineImage image, bool fadeIn) {
@@ -84,15 +84,15 @@ void Screens::loadImage(TwineImage image, bool fadeIn) {
debug(0, "Load image: %i", image.image.index);
Graphics::ManagedSurface& target = _engine->_frontVideoBuffer;
target.transBlitFrom(src, src.getBounds(), target.getBounds(), 0, false, 0, 0xff, nullptr, true);
- const uint32 *pal = _ptrPal;
+ const Graphics::Palette *pal = &_ptrPal;
if (image.palette.index != -1) {
loadCustomPalette(image.palette);
- pal = _palettePcx;
+ pal = &_palettePcx;
}
if (fadeIn) {
- fadeToPal(pal);
+ fadeToPal(*pal);
} else {
- _engine->setPalette(pal);
+ _engine->setPalette(*pal);
}
}
@@ -178,26 +178,15 @@ int32 Screens::lerp(int32 val1, int32 val2, int32 nbstep, int32 step) { // Regl
return (((val2 - val1) * step) / nbstep) + val1;
}
-void Screens::convertPalToRGBA(const uint8 *in, uint32 *out) {
- uint8 *paletteOut = (uint8 *)out;
- for (int i = 0; i < NUMOFCOLORS; i++) {
- paletteOut[0] = in[0];
- paletteOut[1] = in[1];
- paletteOut[2] = in[2];
- paletteOut[3] = 0xFF;
- paletteOut += 4;
- in += 3;
- }
-}
-
-void Screens::fadePal(uint8 r, uint8 g, uint8 b, const uint32 *rgbaPal, int32 intensity) {
+void Screens::fadePal(uint8 r, uint8 g, uint8 b, const Graphics::Palette &rgbaPal, int32 intensity) {
Graphics::Palette pal{NUMOFCOLORS};
- const uint8 *paletteIn = (const uint8 *)rgbaPal;
for (int32 i = 0; i < NUMOFCOLORS; i++) {
- const byte newR = lerp(r, paletteIn[i * 4 + 0], 100, intensity);
- const byte newG = lerp(g, paletteIn[i * 4 + 1], 100, intensity);
- const byte newB = lerp(b, paletteIn[i * 4 + 2], 100, intensity);
+ byte rIn, gIn, bIn;
+ rgbaPal.get(i, rIn, gIn, bIn);
+ const byte newR = lerp(r, rIn, 100, intensity);
+ const byte newG = lerp(g, gIn, 100, intensity);
+ const byte newB = lerp(b, bIn, 100, intensity);
pal.set(i, newR, newG, newB);
}
@@ -205,7 +194,7 @@ void Screens::fadePal(uint8 r, uint8 g, uint8 b, const uint32 *rgbaPal, int32 in
_engine->_frontVideoBuffer.update();
}
-void Screens::fadeToBlack(const uint32 *ptrpal) {
+void Screens::fadeToBlack(const Graphics::Palette &ptrpal) {
if (_flagBlackPal) {
return;
}
@@ -230,14 +219,14 @@ void Screens::whiteFade() {
}
}
-void Screens::fadeWhiteToPal(const uint32 *ptrpal) {
+void Screens::fadeWhiteToPal(const Graphics::Palette &ptrpal) {
for (int32 n = 0; n <= 100; ++n) {
FrameMarker frame(_engine, DEFAULT_HZ); // VSync()
fadePal(255, 255, 255, ptrpal, n);
}
}
-void Screens::fadeToPal(const uint32 *ptrpal) {
+void Screens::fadeToPal(const Graphics::Palette &ptrpal) {
for (int32 i = 0; i <= 100; i += 3) {
FrameMarker frame(_engine, DEFAULT_HZ); // VSync()
fadePal(0, 0, 0, ptrpal, i);
@@ -250,24 +239,28 @@ void Screens::fadeToPal(const uint32 *ptrpal) {
void Screens::setBlackPal() {
_palette.clear();
- memset(_ptrPal, 0, sizeof(_ptrPal));
+ _ptrPal.clear();
_engine->setPalette(_ptrPal);
_flagBlackPal = true;
}
-void Screens::fadePalToPal(const uint32 *ptrpal, const uint32 *ptrpal2) {
+void Screens::fadePalToPal(const Graphics::Palette &ptrpal, const Graphics::Palette &ptrpal2) {
Graphics::Palette workpal{NUMOFCOLORS};
- const uint8 *pal1p = (const uint8 *)ptrpal;
- const uint8 *pal2p = (const uint8 *)ptrpal2;
for (int m = 0; m < 100; ++m) {
FrameMarker frame(_engine, DEFAULT_HZ); // VSync()
for (int32 i = 0; i < NUMOFCOLORS; i++) {
- byte newR = lerp(pal1p[i * 4 + 0], pal2p[i * 4 + 0], 100, m);
- byte newG = lerp(pal1p[i * 4 + 1], pal2p[i * 4 + 1], 100, m);
- byte newB = lerp(pal1p[i * 4 + 2], pal2p[i * 4 + 2], 100, m);
+ byte r1, g1, b1;
+ ptrpal.get(i, r1, g1, b1);
+
+ byte r2, g2, b2;
+ ptrpal2.get(i, r2, g2, b2);
+
+ byte newR = lerp(r1, r2, 100, m);
+ byte newG = lerp(g1, g2, 100, m);
+ byte newB = lerp(b1, b2, 100, m);
workpal.set(i, newR, newG, newB);
}
@@ -276,14 +269,14 @@ void Screens::fadePalToPal(const uint32 *ptrpal, const uint32 *ptrpal2) {
}
}
-void Screens::fadeToRed(const uint32 *ptrpal) {
+void Screens::fadeToRed(const Graphics::Palette &ptrpal) {
for (int32 i = 100; i >= 0; i -= 2) {
FrameMarker frame(_engine, DEFAULT_HZ);
fadePal(255, 0, 0, ptrpal, i);
}
}
-void Screens::fadeRedToPal(const uint32 *ptrpal) {
+void Screens::fadeRedToPal(const Graphics::Palette &ptrpal) {
for (int32 i = 0; i <= 100; i += 2) {
FrameMarker frame(_engine, DEFAULT_HZ);
fadePal(255, 0, 0, ptrpal, i);
@@ -292,13 +285,13 @@ void Screens::fadeRedToPal(const uint32 *ptrpal) {
void Screens::setDarkPal() {
ScopedEngineFreeze scoped(_engine);
- if (!HQR::getPaletteEntry(_palette, Resources::HQR_RESS_FILE, RESSHQR_DARKPAL)) {
+ if (!HQR::getPaletteEntry(_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_DARKPAL)) {
error("Failed to get palette entry for dark palette");
}
- convertPalToRGBA(_palette.data(), _ptrPal);
+ _palette = _palettePcx;
if (!_flagFade) {
// set the palette hard if it should not get faded
- _engine->setPalette(_ptrPal);
+ _engine->setPalette(_palettePcx);
}
_flagPalettePcx = true;
}
@@ -307,7 +300,7 @@ void Screens::setNormalPal() {
_flagPalettePcx = false;
if (!_flagFade) {
// reset the palette hard if it should not get faded
- _engine->setPalette(_mainPaletteRGBA);
+ _engine->setPalette(_ptrPal);
}
}
diff --git a/engines/twine/renderer/screens.h b/engines/twine/renderer/screens.h
index 58189f14837..a979526a2bc 100644
--- a/engines/twine/renderer/screens.h
+++ b/engines/twine/renderer/screens.h
@@ -43,23 +43,19 @@ private:
* @param palette palette to adjust
* @param intensity intensity value to adjust
*/
- void fadePal(uint8 r, uint8 g, uint8 b, const uint32 *palette, int32 intensity);
+ void fadePal(uint8 r, uint8 g, uint8 b, const Graphics::Palette &palette, int32 intensity);
public:
Screens(TwinEEngine *engine) : _engine(engine) {}
- Graphics::Palette _palette{0};
-
int32 mapLba2Palette(int32 palIndex);
- /** converted in-game palette */
- uint32 _ptrPal[NUMOFCOLORS]{0};
-
- /** converted custom palette */
- uint32 _palettePcx[NUMOFCOLORS]{0};
+ /** main palette */
+ Graphics::Palette _ptrPal{0};
+ Graphics::Palette _palettePcx{0};
- /** converted in-game palette */
- uint32 _mainPaletteRGBA[NUMOFCOLORS]{0};
+ // TODO: remove me
+ Graphics::Palette _palette{0};
/** flag to check in the game palette was changed */
bool _flagBlackPal = false;
@@ -73,8 +69,6 @@ public:
/** Load and display Adeline Logo */
bool adelineLogo();
- void convertPalToRGBA(const uint8 *in, uint32 *out);
-
/**
* @sa setNormalPal
*/
@@ -129,20 +123,20 @@ public:
* @param pal1 palette from adjust
* @param pal2 palette to adjust
*/
- void fadePalToPal(const uint32 *pal1, const uint32 *pal2);
+ void fadePalToPal(const Graphics::Palette &pal1, const Graphics::Palette &pal2);
/**
* Fade image to black
* @param palette current palette to fade
*/
- void fadeToBlack(const uint32 *palette);
- void fadeWhiteToPal(const uint32 *ptrpal);
+ void fadeToBlack(const Graphics::Palette &palette);
+ void fadeWhiteToPal(const Graphics::Palette &ptrpal);
/**
* Fade image with another palette source
* @param palette current palette to fade
*/
- void fadeToPal(const uint32 *palette);
+ void fadeToPal(const Graphics::Palette &palette);
/** Fade black palette to white palette */
void whiteFade();
@@ -154,13 +148,13 @@ public:
* Fade palette to red palette
* @param palette current palette to fade
*/
- void fadeToRed(const uint32 *palette);
+ void fadeToRed(const Graphics::Palette &palette);
/**
* Fade red to palette
* @param palette current palette to fade
*/
- void fadeRedToPal(const uint32 *palette);
+ void fadeRedToPal(const Graphics::Palette &palette);
/**
* Copy a determinate screen buffer to another
diff --git a/engines/twine/resources/resources.cpp b/engines/twine/resources/resources.cpp
index 1f0b203779d..3400339ce93 100644
--- a/engines/twine/resources/resources.cpp
+++ b/engines/twine/resources/resources.cpp
@@ -52,8 +52,7 @@ void Resources::initPalettes() {
if (!HQR::getPaletteEntry(_engine->_screens->_palette, Resources::HQR_RESS_FILE, RESSHQR_MAINPAL)) {
error("Failed to load main palette");
}
- _engine->_screens->convertPalToRGBA(_engine->_screens->_palette.data(), _engine->_screens->_mainPaletteRGBA);
- _engine->_screens->convertPalToRGBA(_engine->_screens->_palette.data(), _engine->_screens->_ptrPal);
+ _engine->_screens->_ptrPal = _engine->_screens->_palette;
_engine->setPalette(_engine->_screens->_ptrPal);
}
diff --git a/engines/twine/script/script_life.cpp b/engines/twine/script/script_life.cpp
index 4474754f68e..6950d65298c 100644
--- a/engines/twine/script/script_life.cpp
+++ b/engines/twine/script/script_life.cpp
@@ -1392,12 +1392,12 @@ int32 ScriptLife::lZOOM(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::ZOOM(%i)", zoomScreen);
if (zoomScreen && !engine->_redraw->_flagMCGA && engine->_cfgfile.SceZoom) {
- engine->_screens->fadeToBlack(engine->_screens->_mainPaletteRGBA);
+ engine->_screens->fadeToBlack(engine->_screens->_ptrPal);
engine->extInitMcga();
engine->_screens->setBlackPal();
engine->_screens->_flagFade = true;
} else if (!zoomScreen && engine->_redraw->_flagMCGA) {
- engine->_screens->fadeToBlack(engine->_screens->_mainPaletteRGBA);
+ engine->_screens->fadeToBlack(engine->_screens->_ptrPal);
engine->extInitSvga();
engine->_screens->setBlackPal();
engine->_screens->_flagFade = true;
@@ -1758,7 +1758,7 @@ int32 ScriptLife::lGRM_OFF(TwinEEngine *engine, LifeScriptContext &ctx) {
int32 ScriptLife::lFADE_PAL_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_PAL_RED()");
ScopedEngineFreeze scoped(engine);
- engine->_screens->fadeToRed(engine->_screens->_mainPaletteRGBA);
+ engine->_screens->fadeToRed(engine->_screens->_ptrPal);
engine->_screens->_flagPalettePcx = false;
return 0;
}
@@ -1770,9 +1770,9 @@ int32 ScriptLife::lFADE_PAL_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
int32 ScriptLife::lFADE_ALARM_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_ALARM_RED()");
ScopedEngineFreeze scoped(engine);
- HQR::getPaletteEntry(engine->_screens->_palette, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->convertPalToRGBA(engine->_screens->_palette.data(), engine->_screens->_ptrPal);
- engine->_screens->fadeToRed(engine->_screens->_ptrPal);
+ HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
+ engine->_screens->_palette = engine->_screens->_palettePcx;
+ engine->_screens->fadeToRed(engine->_screens->_palettePcx);
engine->_screens->_flagPalettePcx = true;
return 0;
}
@@ -1784,9 +1784,9 @@ int32 ScriptLife::lFADE_ALARM_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
int32 ScriptLife::lFADE_ALARM_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_ALARM_PAL()");
ScopedEngineFreeze scoped(engine);
- HQR::getPaletteEntry(engine->_screens->_palette, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->convertPalToRGBA(engine->_screens->_palette.data(), engine->_screens->_ptrPal);
- engine->_screens->fadePalToPal(engine->_screens->_ptrPal, engine->_screens->_mainPaletteRGBA);
+ HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
+ engine->_screens->_palette = engine->_screens->_palettePcx;
+ engine->_screens->fadePalToPal(engine->_screens->_palettePcx, engine->_screens->_ptrPal);
engine->_screens->_flagPalettePcx = false;
return 0;
}
@@ -1798,7 +1798,7 @@ int32 ScriptLife::lFADE_ALARM_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
int32 ScriptLife::lFADE_RED_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_RED_PAL()");
ScopedEngineFreeze scoped(engine);
- engine->_screens->fadeRedToPal(engine->_screens->_mainPaletteRGBA);
+ engine->_screens->fadeRedToPal(engine->_screens->_ptrPal);
engine->_screens->_flagPalettePcx = false;
return 0;
}
@@ -1810,9 +1810,9 @@ int32 ScriptLife::lFADE_RED_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
int32 ScriptLife::lFADE_RED_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_RED_ALARM()");
ScopedEngineFreeze scoped(engine);
- HQR::getPaletteEntry(engine->_screens->_palette, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->convertPalToRGBA(engine->_screens->_palette.data(), engine->_screens->_ptrPal);
- engine->_screens->fadeRedToPal(engine->_screens->_ptrPal);
+ HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
+ engine->_screens->_palette = engine->_screens->_palettePcx;
+ engine->_screens->fadeRedToPal(engine->_screens->_palettePcx);
engine->_screens->_flagPalettePcx = true;
return 0;
}
@@ -1824,9 +1824,9 @@ int32 ScriptLife::lFADE_RED_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
int32 ScriptLife::lFADE_PAL_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_PAL_ALARM()");
ScopedEngineFreeze scoped(engine);
- HQR::getPaletteEntry(engine->_screens->_palette, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->convertPalToRGBA(engine->_screens->_palette.data(), engine->_screens->_ptrPal);
- engine->_screens->fadePalToPal(engine->_screens->_mainPaletteRGBA, engine->_screens->_ptrPal);
+ HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
+ engine->_screens->_palette = engine->_screens->_palettePcx;
+ engine->_screens->fadePalToPal(engine->_screens->_ptrPal, engine->_screens->_palettePcx);
engine->_screens->_flagPalettePcx = true;
return 0;
}
diff --git a/engines/twine/script/script_life_v2.cpp b/engines/twine/script/script_life_v2.cpp
index 1e945c254a5..079025dfa3e 100644
--- a/engines/twine/script/script_life_v2.cpp
+++ b/engines/twine/script/script_life_v2.cpp
@@ -202,8 +202,8 @@ int32 ScriptLifeV2::lPALETTE(TwinEEngine *engine, LifeScriptContext &ctx) {
const int32 palIndex = engine->_screens->mapLba2Palette(ctx.stream.readByte());
debugC(3, kDebugLevels::kDebugScripts, "LIFE::PALETTE(%i)", palIndex);
ScopedEngineFreeze scoped(engine);
- HQR::getPaletteEntry(engine->_screens->_palette, Resources::HQR_RESS_FILE, palIndex);
- engine->_screens->convertPalToRGBA(engine->_screens->_palette.data(), engine->_screens->_ptrPal);
+ HQR::getPaletteEntry(engine->_screens->_ptrPal, Resources::HQR_RESS_FILE, palIndex);
+ engine->_screens->_palette = engine->_screens->_ptrPal;
engine->setPalette(engine->_screens->_ptrPal);
engine->_screens->_flagPalettePcx = true;
return 0;
diff --git a/engines/twine/slideshow.cpp b/engines/twine/slideshow.cpp
index 80d92947284..b04666da314 100644
--- a/engines/twine/slideshow.cpp
+++ b/engines/twine/slideshow.cpp
@@ -22,6 +22,7 @@
#include "twine/slideshow.h"
#include "common/file.h"
#include "common/tokenizer.h"
+#include "graphics/palette.h"
#include "image/pcx.h"
#include "twine/movies.h"
#include "twine/renderer/screens.h"
@@ -37,18 +38,10 @@ private:
int _textY = 0;
bool _aborted = false;
int _lineHeight = 40;
- uint32 _pal[NUMOFCOLORS]{};
+ Graphics::Palette _pal{0};
void setPalette(const uint8 *in, int colors) {
- uint8 *paletteOut = (uint8 *)_pal;
- for (int i = 0; i < colors; i++) {
- paletteOut[0] = in[0];
- paletteOut[1] = in[1];
- paletteOut[2] = in[2];
- paletteOut[3] = 0xFF;
- paletteOut += 4;
- in += 3;
- }
+ _pal = Graphics::Palette(in, colors);
_engine->setPalette(_pal);
}
@@ -109,7 +102,8 @@ private:
void scriptText(const Common::String ¶ms) {
if (!params.empty()) {
- _pal[255] = _pal[15] = 0xffffffff;
+ _pal.set(255, 0, 0, 0);
+ _pal.set(15, 0, 0, 0);
_engine->setPalette(_pal);
const int32 length = _engine->_text->sizeFont(params.c_str());
const int x = 0;
@@ -121,7 +115,8 @@ private:
void scriptRText(const Common::String ¶ms) {
if (!params.empty()) {
- _pal[255] = _pal[15] = 0xffffffff;
+ _pal.set(255, 0, 0, 0);
+ _pal.set(15, 0, 0, 0);
_engine->setPalette(_pal);
const int32 length = _engine->_text->sizeFont(params.c_str());
const int x = _engine->width() - length;
@@ -134,7 +129,8 @@ private:
void scriptTitle(const Common::String ¶ms) {
if (!params.empty()) {
- _pal[255] = _pal[15] = 0xffffffff;
+ _pal.set(255, 0, 0, 0);
+ _pal.set(15, 0, 0, 0);
_engine->setPalette(_pal);
const int32 length = _engine->_text->sizeFont(params.c_str());
const int x = _engine->width() / 2 - length / 2;
Commit: 747efced7c0ddf10778fe0ae510a15cba061fa5d
https://github.com/scummvm/scummvm/commit/747efced7c0ddf10778fe0ae510a15cba061fa5d
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-10T14:01:06+02:00
Commit Message:
TWINE: restore palette as found in the original sources in svga and mcga change functions
Changed paths:
engines/twine/twine.cpp
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index eeddcbcf77e..7dc75f2baae 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -639,10 +639,18 @@ void TwinEEngine::playIntro() {
void TwinEEngine::extInitMcga() {
_redraw->_flagMCGA = true;
+ if (_screens->_flagPalettePcx)
+ setPalette(_screens->_palettePcx);
+ else
+ setPalette(_screens->_ptrPal);
}
void TwinEEngine::extInitSvga() {
_redraw->_flagMCGA = false;
+ if (_screens->_flagPalettePcx)
+ setPalette(_screens->_palettePcx);
+ else
+ setPalette(_screens->_ptrPal);
}
void TwinEEngine::testRestoreModeSVGA(bool redraw) {
Commit: f59b0411759a5fe6f8889d738488101b40c8afa6
https://github.com/scummvm/scummvm/commit/f59b0411759a5fe6f8889d738488101b40c8afa6
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-10T14:01:07+02:00
Commit Message:
TWINE: moved dark/normal palette mode code into life script
Changed paths:
engines/twine/debugger/console.cpp
engines/twine/debugger/console.h
engines/twine/debugger/debugtools.cpp
engines/twine/renderer/screens.cpp
engines/twine/renderer/screens.h
engines/twine/scene/extra.cpp
engines/twine/scene/extra.h
engines/twine/scene/gamestate.cpp
engines/twine/scene/scene.cpp
engines/twine/script/script_life.cpp
diff --git a/engines/twine/debugger/console.cpp b/engines/twine/debugger/console.cpp
index ef4c4b1f075..9a4a173e580 100644
--- a/engines/twine/debugger/console.cpp
+++ b/engines/twine/debugger/console.cpp
@@ -49,7 +49,6 @@ TwinEConsole::TwinEConsole(TwinEEngine *engine) : _engine(engine), GUI::Debugger
registerCmd("toggle_scenery_view", WRAP_METHOD(TwinEConsole, doToggleSceneryView));
registerCmd("magic_points", WRAP_METHOD(TwinEConsole, doAddMagicPoints));
registerCmd("dumpfile", WRAP_METHOD(TwinEConsole, doDumpFile));
- registerCmd("toggle_darkpal", WRAP_METHOD(TwinEConsole, doToggleDarkPal));
registerCmd("toggle_zones", WRAP_METHOD(TwinEConsole, doToggleZoneRendering));
registerCmd("toggle_tracks", WRAP_METHOD(TwinEConsole, doToggleTrackRendering));
registerCmd("toggle_godmode", WRAP_METHOD(TwinEConsole, doToggleGodMode));
@@ -317,17 +316,6 @@ bool TwinEConsole::doGiveKashes(int argc, const char **argv) {
return true;
}
-bool TwinEConsole::doToggleDarkPal(int argc, const char **argv) {
- if (_engine->_screens->_flagPalettePcx) {
- debugPrintf("Disabling dark palette\n");
- _engine->_screens->setNormalPal();
- } else {
- debugPrintf("Enabling dark palette\n");
- _engine->_screens->setDarkPal();
- }
- return true;
-}
-
bool TwinEConsole::doSetHeroPosition(int argc, const char **argv) {
IVec3 &pos = _engine->_scene->_sceneHero->_posObj;
if (argc < 4) {
diff --git a/engines/twine/debugger/console.h b/engines/twine/debugger/console.h
index e54ed4a60e5..bdbffdab621 100644
--- a/engines/twine/debugger/console.h
+++ b/engines/twine/debugger/console.h
@@ -46,7 +46,6 @@ private:
bool doSetLife(int argc, const char **argv);
bool doGiveAllItems(int argc, const char **argv);
bool doChangeScene(int argc, const char **argv);
- bool doToggleDarkPal(int argc, const char **argv);
bool doToggleAutoAggressive(int argc, const char **argv);
bool doGiveKey(int argc, const char **argv);
bool doGiveGas(int argc, const char **argv);
diff --git a/engines/twine/debugger/debugtools.cpp b/engines/twine/debugger/debugtools.cpp
index d1647af86fc..a3616372b64 100644
--- a/engines/twine/debugger/debugtools.cpp
+++ b/engines/twine/debugger/debugtools.cpp
@@ -180,9 +180,6 @@ static void paletteWindow(TwinEEngine *engine) {
if (ImGui::Begin("Palettes", &engine->_debugState->_paletteWindow)) {
const Graphics::Palette &palette = engine->_frontVideoBuffer.getPalette();
ImGuiEx::Palette(palette);
-
- ImGui::SeparatorText("Last loaded palette");
- ImGuiEx::Palette(engine->_screens->_palette);
}
ImGui::End();
}
@@ -753,18 +750,18 @@ static void debuggerMenu(TwinEEngine *engine) {
actor->_posObj.y += 1000;
}
if (ImGui::BeginMenu("Palettes")) {
+ LifeScriptContext fakeCtx(0, engine->_scene->_sceneHero);
if (ImGui::MenuItem("Show palette")) {
engine->_debugState->_paletteWindow = true;
}
if (ImGui::MenuItem("Dark palette")) {
- engine->_screens->setDarkPal();
+ engine->_scriptLife->lSET_DARK_PAL(engine, fakeCtx);
}
if (ImGui::MenuItem("Normal palette")) {
- engine->_screens->setNormalPal();
+ engine->_scriptLife->lSET_NORMAL_PAL(engine, fakeCtx);
}
#if 0
// TODO: the fade functions are blocking and break the imgui begin/end cycle
- LifeScriptContext fakeCtx(0, engine->_scene->_sceneHero);
if (ImGui::MenuItem("lFADE_PAL_RED")) {
engine->_scriptLife->lFADE_PAL_RED(engine, fakeCtx);
}
diff --git a/engines/twine/renderer/screens.cpp b/engines/twine/renderer/screens.cpp
index 0b9f70704bc..af61b4d65d8 100644
--- a/engines/twine/renderer/screens.cpp
+++ b/engines/twine/renderer/screens.cpp
@@ -283,27 +283,6 @@ void Screens::fadeRedToPal(const Graphics::Palette &ptrpal) {
}
}
-void Screens::setDarkPal() {
- ScopedEngineFreeze scoped(_engine);
- if (!HQR::getPaletteEntry(_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_DARKPAL)) {
- error("Failed to get palette entry for dark palette");
- }
- _palette = _palettePcx;
- if (!_flagFade) {
- // set the palette hard if it should not get faded
- _engine->setPalette(_palettePcx);
- }
- _flagPalettePcx = true;
-}
-
-void Screens::setNormalPal() {
- _flagPalettePcx = false;
- if (!_flagFade) {
- // reset the palette hard if it should not get faded
- _engine->setPalette(_ptrPal);
- }
-}
-
void Screens::copyScreen(const Graphics::ManagedSurface &source, Graphics::ManagedSurface &destination) {
destination.blitFrom(source);
}
diff --git a/engines/twine/renderer/screens.h b/engines/twine/renderer/screens.h
index a979526a2bc..aa4a8ce4fa3 100644
--- a/engines/twine/renderer/screens.h
+++ b/engines/twine/renderer/screens.h
@@ -69,16 +69,6 @@ public:
/** Load and display Adeline Logo */
bool adelineLogo();
- /**
- * @sa setNormalPal
- */
- void setDarkPal();
- /**
- * @sa setDarkPal()
- * Reset the palette to the main palette after the script changed it via @c setDarkPal()
- */
- void setNormalPal();
-
/**
* Load a custom palette
* @param index \a RESS.HQR entry index (starting from 0)
diff --git a/engines/twine/scene/extra.cpp b/engines/twine/scene/extra.cpp
index b11d58ccd30..17dcc8094b2 100644
--- a/engines/twine/scene/extra.cpp
+++ b/engines/twine/scene/extra.cpp
@@ -122,7 +122,7 @@ int32 Extra::addExtraExplode(int32 x, int32 y, int32 z) {
return -1;
}
-void Extra::resetExtras() {
+void Extra::clearExtra() {
for (int32 i = 0; i < EXTRA_MAX_ENTRIES; i++) {
ExtraListStruct *extra = &_extraList[i];
extra->sprite = -1;
diff --git a/engines/twine/scene/extra.h b/engines/twine/scene/extra.h
index 3a114e94ec3..6befd01572f 100644
--- a/engines/twine/scene/extra.h
+++ b/engines/twine/scene/extra.h
@@ -113,7 +113,7 @@ public:
}
/** Reset all used extras */
- void resetExtras();
+ void clearExtra();
int32 initSpecial(int32 x, int32 y, int32 z, ExtraSpecialType type);
int32 addExtraBonus(int32 x, int32 y, int32 z, int32 xAngle, int32 yAngle, int32 type, int32 bonusAmount);
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index 11d5acf7402..260bc6619a0 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -66,7 +66,7 @@ void GameState::init3DGame() {
void GameState::initGameStateVars() {
debug(2, "Init game state variables");
- _engine->_extra->resetExtras();
+ _engine->_extra->clearExtra();
for (int32 i = 0; i < OVERLAY_MAX_ENTRIES; i++) {
_engine->_redraw->overlayList[i].num = -1;
diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index d73f339cd25..4c7e0a1ebd7 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -495,7 +495,7 @@ bool Scene::loadScene(int32 index) {
}
void Scene::clearScene() {
- _engine->_extra->resetExtras();
+ _engine->_extra->clearExtra();
// ClearFlagsCube
for (int32 i = 0; i < ARRAYSIZE(_listFlagCube); i++) {
@@ -506,7 +506,7 @@ void Scene::clearScene() {
_engine->_redraw->overlayList[i].num = -1;
}
- _engine->_screens->setNormalPal();
+ _engine->_screens->_flagPalettePcx = false;
}
void Scene::reloadCurrentScene() {
diff --git a/engines/twine/script/script_life.cpp b/engines/twine/script/script_life.cpp
index 6950d65298c..914be194c57 100644
--- a/engines/twine/script/script_life.cpp
+++ b/engines/twine/script/script_life.cpp
@@ -1876,7 +1876,16 @@ int32 ScriptLife::lASK_CHOICE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
*/
int32 ScriptLife::lSET_DARK_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::SET_DARK_PAL()");
- engine->_screens->setDarkPal();
+ ScopedEngineFreeze scoped(engine);
+ if (!HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_DARKPAL)) {
+ error("Failed to get palette entry for dark palette");
+ }
+ engine->_screens->_palette = engine->_screens->_palettePcx;
+ if (!engine->_screens->_flagFade) {
+ // set the palette hard if it should not get faded
+ engine->setPalette(engine->_screens->_palettePcx);
+ }
+ engine->_screens->_flagPalettePcx = true;
return 0;
}
@@ -1886,7 +1895,11 @@ int32 ScriptLife::lSET_DARK_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
*/
int32 ScriptLife::lSET_NORMAL_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::SET_NORMAL_PAL()");
- engine->_screens->setNormalPal();
+ engine->_screens->_flagPalettePcx = false;
+ if (!engine->_screens->_flagFade) {
+ // reset the palette hard if it should not get faded
+ engine->setPalette(engine->_screens->_ptrPal);
+ }
return 0;
}
Commit: 56f936f2567118f07d248ff7b35f929b1ef4de3e
https://github.com/scummvm/scummvm/commit/56f936f2567118f07d248ff7b35f929b1ef4de3e
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-10T14:01:07+02:00
Commit Message:
TWINE: removed unused additional palette instance
Changed paths:
engines/twine/holomap_v1.cpp
engines/twine/metaengine.cpp
engines/twine/renderer/screens.cpp
engines/twine/renderer/screens.h
engines/twine/resources/resources.cpp
engines/twine/script/script_life.cpp
engines/twine/script/script_life_v2.cpp
diff --git a/engines/twine/holomap_v1.cpp b/engines/twine/holomap_v1.cpp
index 96df55c01de..cc0dc618533 100644
--- a/engines/twine/holomap_v1.cpp
+++ b/engines/twine/holomap_v1.cpp
@@ -25,6 +25,7 @@
#include "common/memstream.h"
#include "common/stream.h"
#include "common/types.h"
+#include "graphics/palette.h"
#include "twine/audio/sound.h"
#include "twine/menu/interface.h"
#include "twine/parser/anim.h"
@@ -130,7 +131,7 @@ void HolomapV1::initHoloDatas() {
const int32 n = NUM_HOLOMAPCOLORS * 3;
for (int32 i = 0; i < n; i += 3, j++) {
byte r, g, b;
- _engine->_screens->_palette.get(j, r, g, b);
+ _engine->_screens->_palettePcx.get(j, r, g, b);
_paletteHolomap[i + 0] = r;
_paletteHolomap[i + 1] = g;
_paletteHolomap[i + 2] = b;
@@ -139,7 +140,7 @@ void HolomapV1::initHoloDatas() {
j = HOLOMAP_PALETTE_INDEX;
for (int32 i = n; i < 2 * n - 3; i += 3, j++) {
byte r, g, b;
- _engine->_screens->_palette.get(j, r, g, b);
+ _engine->_screens->_palettePcx.get(j, r, g, b);
_paletteHolomap[i + 0] = r;
_paletteHolomap[i + 1] = g;
_paletteHolomap[i + 2] = b;
@@ -372,7 +373,7 @@ void HolomapV1::drawHolomapTrajectory(int32 trajectoryIndex) {
int16 trajAnimFrameIdx = 0;
int32 waterPaletteChangeTimer = 0;
- bool fadeInPalette = true;
+ bool flagpal = true;
_engine->_input->enableKeyMap(holomapKeyMapId);
for (;;) {
FrameMarker frame(_engine);
@@ -381,7 +382,7 @@ void HolomapV1::drawHolomapTrajectory(int32 trajectoryIndex) {
break;
}
- if (!fadeInPalette && waterPaletteChangeTimer < _engine->timerRef) {
+ if (!flagpal && waterPaletteChangeTimer < _engine->timerRef) {
// animate the water surface
_engine->setPalette(HOLOMAP_PALETTE_INDEX, NUM_HOLOMAPCOLORS, &_paletteHolomap[3 * _holomapPaletteIndex++]);
if (_holomapPaletteIndex == NUM_HOLOMAPCOLORS) {
@@ -417,16 +418,16 @@ void HolomapV1::drawHolomapTrajectory(int32 trajectoryIndex) {
++trajAnimFrameIdx;
}
- if (fadeInPalette) {
- fadeInPalette = false;
- //_engine->_screens->fadeToPal(_engine->_screens->_paletteRGBACustom);
+ if (flagpal) {
+ flagpal = false;
+ _engine->_screens->fadeToPal(_engine->_screens->_palettePcx);
}
++_engine->timerRef;
debugC(3, kDebugLevels::kDebugTime, "Holomap time: %i", _engine->timerRef);
}
_engine->_screens->clearScreen();
- _engine->setPalette(_engine->_screens->_ptrPal);
+ _engine->_screens->fadeToBlack(_engine->_screens->_palettePcx);
_engine->_gameState->init3DGame();
_engine->_interface->restoreClip();
@@ -535,7 +536,8 @@ void HolomapV1::holoMap() {
_engine->_sound->stopSamples();
_engine->_interface->unsetClip();
_engine->_screens->clearScreen();
- _engine->_screens->fadeToBlack(_engine->_screens->_ptrPal);
+
+ const Graphics::Palette savepalette = _engine->_screens->_palettePcx;
initHoloDatas();
@@ -691,6 +693,8 @@ void HolomapV1::holoMap() {
_engine->_input->enableKeyMap(mainKeyMapId);
_engine->_text->initSceneTextBank();
+ _engine->_screens->_palettePcx = savepalette;
+
free(holomapImagePtr);
}
diff --git a/engines/twine/metaengine.cpp b/engines/twine/metaengine.cpp
index 5ef79f7f873..71815f50807 100644
--- a/engines/twine/metaengine.cpp
+++ b/engines/twine/metaengine.cpp
@@ -28,6 +28,7 @@
#include "common/translation.h"
#include "engines/advancedDetector.h"
#include "graphics/managed_surface.h"
+#include "graphics/palette.h"
#include "graphics/scaler.h"
#include "twine/achievements_tables.h"
#include "twine/detection.h"
@@ -195,7 +196,11 @@ void TwinEMetaEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
TwinEEngine *engine = (TwinEEngine *)g_engine;
const Graphics::ManagedSurface &managedSurface = engine->_workVideoBuffer;
const Graphics::Surface &screenSurface = managedSurface.rawSurface();
- ::createThumbnail(&thumb, (const uint8 *)screenSurface.getPixels(), screenSurface.w, screenSurface.h, engine->_screens->_palette.data());
+ Graphics::Palette *pal = &engine->_screens->_ptrPal;
+ if (engine->_screens->_flagPalettePcx) {
+ pal = &engine->_screens->_palettePcx;
+ }
+ ::createThumbnail(&thumb, (const uint8 *)screenSurface.getPixels(), screenSurface.w, screenSurface.h, pal->data());
}
//
diff --git a/engines/twine/renderer/screens.cpp b/engines/twine/renderer/screens.cpp
index af61b4d65d8..52c359b30bc 100644
--- a/engines/twine/renderer/screens.cpp
+++ b/engines/twine/renderer/screens.cpp
@@ -68,11 +68,10 @@ void Screens::loadCustomPalette(const TwineResource &resource) {
error("Failed to get palette entry for custom palette: %s:%d", resource.hqr, resource.index);
}
- if (_palette.size() != NUMOFCOLORS) {
+ if (_palettePcx.size() != NUMOFCOLORS) {
warning("Unexpected palette size %s:%i", resource.hqr, resource.index);
}
debug(3, "palette %s:%i with %u colors", resource.hqr, resource.index, _palettePcx.size());
- _palette = _palettePcx;
}
void Screens::loadImage(TwineImage image, bool fadeIn) {
@@ -238,7 +237,6 @@ void Screens::fadeToPal(const Graphics::Palette &ptrpal) {
}
void Screens::setBlackPal() {
- _palette.clear();
_ptrPal.clear();
_engine->setPalette(_ptrPal);
diff --git a/engines/twine/renderer/screens.h b/engines/twine/renderer/screens.h
index aa4a8ce4fa3..55aeb09defa 100644
--- a/engines/twine/renderer/screens.h
+++ b/engines/twine/renderer/screens.h
@@ -54,9 +54,6 @@ public:
Graphics::Palette _ptrPal{0};
Graphics::Palette _palettePcx{0};
- // TODO: remove me
- Graphics::Palette _palette{0};
-
/** flag to check in the game palette was changed */
bool _flagBlackPal = false;
diff --git a/engines/twine/resources/resources.cpp b/engines/twine/resources/resources.cpp
index 3400339ce93..52526c01dd6 100644
--- a/engines/twine/resources/resources.cpp
+++ b/engines/twine/resources/resources.cpp
@@ -49,10 +49,9 @@ Resources::~Resources() {
}
void Resources::initPalettes() {
- if (!HQR::getPaletteEntry(_engine->_screens->_palette, Resources::HQR_RESS_FILE, RESSHQR_MAINPAL)) {
+ if (!HQR::getPaletteEntry(_engine->_screens->_ptrPal, Resources::HQR_RESS_FILE, RESSHQR_MAINPAL)) {
error("Failed to load main palette");
}
- _engine->_screens->_ptrPal = _engine->_screens->_palette;
_engine->setPalette(_engine->_screens->_ptrPal);
}
diff --git a/engines/twine/script/script_life.cpp b/engines/twine/script/script_life.cpp
index 914be194c57..b72d4c23e03 100644
--- a/engines/twine/script/script_life.cpp
+++ b/engines/twine/script/script_life.cpp
@@ -1771,7 +1771,6 @@ int32 ScriptLife::lFADE_ALARM_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_ALARM_RED()");
ScopedEngineFreeze scoped(engine);
HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->_palette = engine->_screens->_palettePcx;
engine->_screens->fadeToRed(engine->_screens->_palettePcx);
engine->_screens->_flagPalettePcx = true;
return 0;
@@ -1785,7 +1784,6 @@ int32 ScriptLife::lFADE_ALARM_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_ALARM_PAL()");
ScopedEngineFreeze scoped(engine);
HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->_palette = engine->_screens->_palettePcx;
engine->_screens->fadePalToPal(engine->_screens->_palettePcx, engine->_screens->_ptrPal);
engine->_screens->_flagPalettePcx = false;
return 0;
@@ -1811,7 +1809,6 @@ int32 ScriptLife::lFADE_RED_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_RED_ALARM()");
ScopedEngineFreeze scoped(engine);
HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->_palette = engine->_screens->_palettePcx;
engine->_screens->fadeRedToPal(engine->_screens->_palettePcx);
engine->_screens->_flagPalettePcx = true;
return 0;
@@ -1825,7 +1822,6 @@ int32 ScriptLife::lFADE_PAL_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::FADE_PAL_ALARM()");
ScopedEngineFreeze scoped(engine);
HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
- engine->_screens->_palette = engine->_screens->_palettePcx;
engine->_screens->fadePalToPal(engine->_screens->_ptrPal, engine->_screens->_palettePcx);
engine->_screens->_flagPalettePcx = true;
return 0;
@@ -1880,7 +1876,6 @@ int32 ScriptLife::lSET_DARK_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
if (!HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_DARKPAL)) {
error("Failed to get palette entry for dark palette");
}
- engine->_screens->_palette = engine->_screens->_palettePcx;
if (!engine->_screens->_flagFade) {
// set the palette hard if it should not get faded
engine->setPalette(engine->_screens->_palettePcx);
diff --git a/engines/twine/script/script_life_v2.cpp b/engines/twine/script/script_life_v2.cpp
index 079025dfa3e..f8c2f676cd4 100644
--- a/engines/twine/script/script_life_v2.cpp
+++ b/engines/twine/script/script_life_v2.cpp
@@ -203,7 +203,6 @@ int32 ScriptLifeV2::lPALETTE(TwinEEngine *engine, LifeScriptContext &ctx) {
debugC(3, kDebugLevels::kDebugScripts, "LIFE::PALETTE(%i)", palIndex);
ScopedEngineFreeze scoped(engine);
HQR::getPaletteEntry(engine->_screens->_ptrPal, Resources::HQR_RESS_FILE, palIndex);
- engine->_screens->_palette = engine->_screens->_ptrPal;
engine->setPalette(engine->_screens->_ptrPal);
engine->_screens->_flagPalettePcx = true;
return 0;
Commit: 9ed3755e7d3e766f2eba4435bea563c9b1639fa8
https://github.com/scummvm/scummvm/commit/9ed3755e7d3e766f2eba4435bea563c9b1639fa8
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-10T14:01:07+02:00
Commit Message:
TWINE: unified holomap code with original sources
Changed paths:
engines/twine/holomap_v1.cpp
engines/twine/holomap_v1.h
diff --git a/engines/twine/holomap_v1.cpp b/engines/twine/holomap_v1.cpp
index cc0dc618533..ec2262bceba 100644
--- a/engines/twine/holomap_v1.cpp
+++ b/engines/twine/holomap_v1.cpp
@@ -286,7 +286,7 @@ void HolomapV1::drawHoloMap(uint8 *holomapImage, uint32 holomapImageSize) {
}
}
-void HolomapV1::drawHolomapText(int32 centerx, int32 top, const char *title) {
+void HolomapV1::drawTitle(int32 centerx, int32 top, const char *title) {
const int32 size = _engine->_text->sizeFont(title);
const int32 x = centerx - size / 2;
const int32 y = top;
@@ -529,18 +529,18 @@ void HolomapV1::drawListPos(int calpha, int cbeta, int cgamma, bool pos) {
void HolomapV1::holoMap() {
const int32 alphaLightTmp = _engine->_scene->_alphaLight;
const int32 betaLightTmp = _engine->_scene->_betaLight;
-
- _engine->_gameState->init3DGame();
+ const Graphics::Palette savepalette = _engine->_screens->_palettePcx;
_engine->_screens->fadeToBlack(_engine->_screens->_ptrPal);
_engine->_sound->stopSamples();
_engine->_interface->unsetClip();
_engine->_screens->clearScreen();
- const Graphics::Palette savepalette = _engine->_screens->_palettePcx;
-
initHoloDatas();
+ // TODO: not visible
+ drawTitle(_engine->width() / 2, 25, "HoloMap");
+
const int32 cameraPosX = _engine->width() / 2;
const int32 cameraPosY = scale(190);
_engine->_renderer->setProjection(cameraPosX, cameraPosY, 128, 1024, 1024);
@@ -556,8 +556,6 @@ void HolomapV1::holoMap() {
}
int32 current = _engine->_scene->_numCube;
- _engine->_text->drawHolomapLocation(_listHoloPos[current].mess);
-
int32 otimer = _engine->timerRef;
int32 dalpha = ClampAngle(_listHoloPos[current].alpha);
int32 dbeta = ClampAngle(_listHoloPos[current].beta);
@@ -568,6 +566,7 @@ void HolomapV1::holoMap() {
int32 obeta = dbeta;
bool automove = false;
bool flagredraw = true;
+ bool dialstat = true;
int waterPaletteChangeTimer = 0;
bool flagpal = true;
_engine->_input->enableKeyMap(holomapKeyMapId);
@@ -583,7 +582,7 @@ void HolomapV1::holoMap() {
if (current == -1) {
current = _engine->_scene->_numCube;
}
- _engine->_text->drawHolomapLocation(_listHoloPos[current].mess);
+ dialstat = true;
oalpha = calpha;
obeta = cbeta;
otimer = _engine->timerRef;
@@ -596,7 +595,7 @@ void HolomapV1::holoMap() {
if (current == -1) {
current = _engine->_scene->_numCube;
}
- _engine->_text->drawHolomapLocation(_listHoloPos[current].mess);
+ dialstat = true;
oalpha = calpha;
obeta = cbeta;
otimer = _engine->timerRef;
@@ -660,7 +659,6 @@ void HolomapV1::holoMap() {
drawHoloMap(holomapImagePtr, holomapImageSize);
drawListPos(calpha, cbeta, cgamma, true);
_engine->_interface->restoreClip();
- drawHolomapText(_engine->width() / 2, 25, "HoloMap");
if (automove) {
// draw cursor
const Common::Rect &targetRect = _engine->centerOnScreen(SIZE_CURSOR * 2, SIZE_CURSOR * 2);
@@ -672,6 +670,11 @@ void HolomapV1::holoMap() {
automove = false;
}
+ if (dialstat) {
+ _engine->_text->drawHolomapLocation(_listHoloPos[current].mess);
+ dialstat = false;
+ }
+
++_engine->timerRef;
debugC(3, kDebugLevels::kDebugTime, "Holomap time: %i", _engine->timerRef);
diff --git a/engines/twine/holomap_v1.h b/engines/twine/holomap_v1.h
index c128ae9a506..17ac8f2a474 100644
--- a/engines/twine/holomap_v1.h
+++ b/engines/twine/holomap_v1.h
@@ -71,7 +71,7 @@ private:
int32 _holomapPaletteIndex = 0;
uint8 _paletteHolomap[NUMOFCOLORS * 3]{0};
- void drawHolomapText(int32 centerx, int32 top, const char *title);
+ void drawTitle(int32 centerx, int32 top, const char *title);
int32 searchNextArrow(int32 num) const;
int32 searchPrevArrow(int32 num) const;
More information about the Scummvm-git-logs
mailing list