[Scummvm-git-logs] scummvm master -> 6953dd9204953269b071be77dbc512421dab030a
neuromancer
noreply at scummvm.org
Sat Sep 9 09:04:01 UTC 2023
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
44ad141bae FREESCAPE: added more global objects for dark for amiga
72bdf05d9f FREESCAPE: improved cga code for dark and driller
42833df30b FREESCAPE: glPolygonOffset depends on the area scale
6953dd9204 FREESCAPE: avoid waiting for users to press a key when starting driller demos
Commit: 44ad141baea50c26646ba6098e0ca2fa70c4c064
https://github.com/scummvm/scummvm/commit/44ad141baea50c26646ba6098e0ca2fa70c4c064
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-09T10:53:11+02:00
Commit Message:
FREESCAPE: added more global objects for dark for amiga
Changed paths:
engines/freescape/area.cpp
engines/freescape/area.h
engines/freescape/games/dark/amiga.cpp
engines/freescape/loaders/8bitBinaryLoader.cpp
diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index d3b113cf6e0..c31451defa9 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -488,4 +488,16 @@ void Area::addStructure(Area *global) {
}
}
+void Area::changeObjectID(uint16 objectID, uint16 newObjectID) {
+ assert(!objectWithID(newObjectID));
+ Object *obj = objectWithID(objectID);
+ assert(obj);
+ obj->_objectID = newObjectID;
+ _addedObjects.erase(objectID);
+ _addedObjects[newObjectID] = obj;
+
+ (*_objectsByID).erase(objectID);
+ (*_objectsByID)[newObjectID] = obj;
+}
+
} // End of namespace Freescape
diff --git a/engines/freescape/area.h b/engines/freescape/area.h
index 519d2152093..227b8432c65 100644
--- a/engines/freescape/area.h
+++ b/engines/freescape/area.h
@@ -45,6 +45,7 @@ public:
Common::String _name;
Object *objectWithID(uint16 objectID);
Object *entranceWithID(uint16 objectID);
+ void changeObjectID(uint16 objectID, uint16 newObjectID);
ObjectArray getSensors();
uint16 getAreaID();
uint16 getAreaFlags();
diff --git a/engines/freescape/games/dark/amiga.cpp b/engines/freescape/games/dark/amiga.cpp
index 51b6f005a9c..0bbb89cc561 100644
--- a/engines/freescape/games/dark/amiga.cpp
+++ b/engines/freescape/games/dark/amiga.cpp
@@ -75,7 +75,15 @@ void DarkEngine::loadAssetsAmigaFullGame() {
_border = loadAndConvertNeoImage(stream, 0x1b762);
load8bitBinary(stream, 0x2e96a, 16);
loadPalettes(stream, 0x2e638);
+ loadGlobalObjects(stream, 0x30f0 - 50, 24);
loadMessagesVariableSize(stream, 0x3d37, 66);
+ _areaMap[255]->changeObjectID(11, 250);
+
+ for (auto &it : _areaMap) {
+ addWalls(it._value);
+ addECDs(it._value);
+ addSkanner(it._value);
+ }
}
void DarkEngine::drawAmigaAtariSTUI(Graphics::Surface *surface) {
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index ab3b07fc70f..ad3e4c23f75 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -272,6 +272,10 @@ Object *FreescapeEngine::load8bitObject(Common::SeekableReadStream *file) {
// object ID
uint16 objectID = readField(file, 8);
+
+ if (objectID == 224 && objectType == 29)
+ objectType = (ObjectType)7;
+
// size of object on disk; we've accounted for 8 bytes
// already so we can subtract that to get the remaining
// length beyond here
@@ -281,13 +285,13 @@ Object *FreescapeEngine::load8bitObject(Common::SeekableReadStream *file) {
error("Not enough bytes %d to read object %d with type %d", byteSizeOfObject, objectID, objectType);
}
- if (objectType > ObjectType::kGroupType && isDemo()) {
+ if (objectType > ObjectType::kGroupType && isDemo() && isCastle()) {
// Castle DOS demo has an invalid object, which should not be parsed.
debugC(1, kFreescapeDebugParser, "WARNING: invalid object %d!", objectID);
readArray(file, byteSizeOfObject - 9);
return nullptr;
}
-
+ assert(objectType <= ObjectType::kGroupType);
assert(byteSizeOfObject >= 9);
byteSizeOfObject = byteSizeOfObject - 9;
if (objectID == 255 && objectType == ObjectType::kEntranceType) {
Commit: 72bdf05d9f45fb269990fa24a7a5e905b54944e3
https://github.com/scummvm/scummvm/commit/72bdf05d9f45fb269990fa24a7a5e905b54944e3
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-09T10:53:11+02:00
Commit Message:
FREESCAPE: improved cga code for dark and driller
Changed paths:
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/games/dark/dark.cpp
engines/freescape/games/dark/dos.cpp
engines/freescape/games/driller/dos.cpp
engines/freescape/games/palettes.cpp
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index bd080326e10..177436bbc76 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -144,6 +144,7 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
_viewArea = _fullscreenViewArea;
_rnd = new Common::RandomSource("freescape");
_gfx = nullptr;
+ _rawCGAPaletteByArea = nullptr;
_speaker = nullptr;
_savedScreen = nullptr;
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 3664252ec5c..7243947c161 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -68,17 +68,17 @@ enum {
kFreescapeDebugMedia = 1 << 4,
};
-struct entrancesTableEntry {
- int id;
- int position[3];
-};
-
struct soundFx {
int size;
int sampleRate;
byte *data;
};
+struct CGAPaletteEntry {
+ int areaId;
+ byte *palette;
+};
+
class SizedPCSpeaker : public Audio::PCSpeaker {
public:
bool endOfStream() const override { return !isPlaying(); }
@@ -176,6 +176,8 @@ public:
Graphics::ManagedSurface *loadAndCenterScrImage(Common::SeekableReadStream *stream);
void loadPalettes(Common::SeekableReadStream *file, int offset);
void swapPalette(uint16 areaID);
+ virtual byte *findCGAPalette(uint16 levelID);
+ const CGAPaletteEntry *_rawCGAPaletteByArea;
Common::HashMap<uint16, byte *> _paletteByArea;
void loadColorPalette();
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index 4a9bf4ef2a2..5863ae28bf3 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -671,6 +671,8 @@ void DarkEngine::drawBinaryClock(Graphics::Surface *surface, int xPosition, int
}
void DarkEngine::drawIndicator(Graphics::Surface *surface, int xPosition, int yPosition) {
+ if (_indicators.size() == 0)
+ return;
if (_hasFallen)
surface->copyRectToSurface(*_indicators[0], xPosition, yPosition, Common::Rect(_indicators[0]->w, _indicators[0]->h));
else if (_flyMode)
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index 236717a3d00..0a7539cfb14 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -29,12 +29,63 @@ namespace Freescape {
extern byte kEGADefaultPalette[16][3];
+byte kDarkCGAPalettePinkBlue[4][3] = {
+ {0x00, 0x00, 0x00},
+ {0x00, 0xaa, 0xaa},
+ {0xaa, 0x00, 0xaa},
+ {0xaa, 0xaa, 0xaa},
+};
+
+byte kDarkCGAPaletteRedGreen[4][3] = {
+ {0x00, 0x00, 0x00},
+ {0x00, 0xaa, 0x00},
+ {0xaa, 0x00, 0x00},
+ {0xaa, 0x55, 0x00},
+};
+
+static const CGAPaletteEntry rawCGAPaletteByArea[] {
+ {1, (byte *)kDarkCGAPaletteRedGreen},
+ {2, (byte *)kDarkCGAPalettePinkBlue},
+ {3, (byte *)kDarkCGAPaletteRedGreen},
+ {4, (byte *)kDarkCGAPalettePinkBlue},
+ {5, (byte *)kDarkCGAPaletteRedGreen},
+ {6, (byte *)kDarkCGAPalettePinkBlue},
+ {7, (byte *)kDarkCGAPaletteRedGreen},
+ {8, (byte *)kDarkCGAPaletteRedGreen}, // Verified
+ {9, (byte *)kDarkCGAPaletteRedGreen},
+ {10, (byte *)kDarkCGAPalettePinkBlue},
+ {11, (byte *)kDarkCGAPaletteRedGreen},
+ {12, (byte *)kDarkCGAPalettePinkBlue},
+ {13, (byte *)kDarkCGAPaletteRedGreen},
+ {14, (byte *)kDarkCGAPalettePinkBlue},
+ {15, (byte *)kDarkCGAPaletteRedGreen}, // Verified
+ {16, (byte *)kDarkCGAPalettePinkBlue},
+ {17, (byte *)kDarkCGAPalettePinkBlue},
+ {18, (byte *)kDarkCGAPaletteRedGreen}, // Verified
+ {19, (byte *)kDarkCGAPaletteRedGreen},
+ {20, (byte *)kDarkCGAPalettePinkBlue},
+ {21, (byte *)kDarkCGAPaletteRedGreen},
+ {22, (byte *)kDarkCGAPalettePinkBlue},
+ {23, (byte *)kDarkCGAPaletteRedGreen},
+ {25, (byte *)kDarkCGAPalettePinkBlue},
+ {27, (byte *)kDarkCGAPaletteRedGreen},
+ {28, (byte *)kDarkCGAPalettePinkBlue},
+
+ {31, (byte *)kDarkCGAPaletteRedGreen},
+ {32, (byte *)kDarkCGAPalettePinkBlue},
+ {127, (byte *)kDarkCGAPaletteRedGreen},
+ {0, 0} // This marks the end
+};
+
void DarkEngine::initDOS() {
if (_renderMode == Common::kRenderEGA)
_viewArea = Common::Rect(40, 24, 279, 124);
+ else if (_renderMode == Common::kRenderCGA)
+ _viewArea = Common::Rect(40, 24, 279, 124);
else
error("Invalid or unknown render mode");
+ _rawCGAPaletteByArea = (const CGAPaletteEntry *)&rawCGAPaletteByArea;
_maxEnergy = 79;
_maxShield = 79;
}
@@ -108,26 +159,46 @@ void DarkEngine::loadAssetsDOSFullGame() {
addECDs(it._value);
addSkanner(it._value);
}
+
+ _indicators.push_back(loadBundledImage("dark_fallen_indicator"));
+ _indicators.push_back(loadBundledImage("dark_crouch_indicator"));
+ _indicators.push_back(loadBundledImage("dark_walk_indicator"));
+ _indicators.push_back(loadBundledImage("dark_jet_indicator"));
+
+ for (auto &it : _indicators)
+ it->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
+
} else if (_renderMode == Common::kRenderCGA) {
+ file.open("SCN1C.DAT");
+ if (file.isOpen()) {
+ _title = load8bitBinImage(&file, 0x0);
+ _title->setPalette((byte *)&kDarkCGAPalettePinkBlue, 0, 4);
+ }
+ file.close();
file.open("DSIDEC.EXE");
if (!file.isOpen())
error("Failed to open DSIDEC.EXE");
- load8bitBinary(&file, 0x7bb0, 4); // TODO
- } else
- error("Invalid or unsupported render mode %s for Dark Side", Common::getRenderModeDescription(_renderMode));
- _indicators.push_back(loadBundledImage("dark_fallen_indicator"));
- _indicators.push_back(loadBundledImage("dark_crouch_indicator"));
- _indicators.push_back(loadBundledImage("dark_walk_indicator"));
- _indicators.push_back(loadBundledImage("dark_jet_indicator"));
+ loadFonts(&file, 0x8496);
+ loadMessagesFixedSize(&file, 0x2d65, 16, 27);
+ loadGlobalObjects(&file, 0x2554, 23);
+ load8bitBinary(&file, 0x8600, 16);
+ _border = load8bitBinImage(&file, 0x210);
+ _border->setPalette((byte *)&kDarkCGAPalettePinkBlue, 0, 4);
- for (auto &it : _indicators)
- it->convertToInPlace(_gfx->_texturePixelFormat, nullptr);
+ for (auto &it : _areaMap) {
+ addWalls(it._value);
+ addECDs(it._value);
+ addSkanner(it._value);
+ }
+ swapPalette(1);
+ } else
+ error("Invalid or unsupported render mode %s for Dark Side", Common::getRenderModeDescription(_renderMode));
}
void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
- uint32 color = _renderMode == Common::kRenderCGA ? 1 : 14;
+ uint32 color = _renderMode == Common::kRenderCGA ? 3 : 14;
uint8 r, g, b;
_gfx->readFromPalette(color, r, g, b);
@@ -154,7 +225,6 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
int seconds, minutes, hours;
getTimeFromCountdown(seconds, minutes, hours);
- // TODO: implement binary clock
Common::String message;
int deadline;
@@ -169,7 +239,7 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
int energy = _gameStateVars[k8bitVariableEnergy]; // called fuel in this game
int shield = _gameStateVars[k8bitVariableShield];
- _gfx->readFromPalette(9, r, g, b);
+ _gfx->readFromPalette(_renderMode == Common::kRenderCGA ? 1 : 9, r, g, b);
uint32 blue = _gfx->_texturePixelFormat.ARGBToColor(0xFF, r, g, b);
if (shield >= 0) {
@@ -189,7 +259,7 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
energyBar = Common::Rect(72, 148, 151 - (_maxEnergy - energy), 153);
surface->fillRect(energyBar, blue);
}
- uint32 clockColor = _gfx->_texturePixelFormat.ARGBToColor(0xFF, 0xFF, 0xFF, 0xFF);
+ uint32 clockColor = _renderMode == Common::kRenderCGA ? front : _gfx->_texturePixelFormat.ARGBToColor(0xFF, 0xFF, 0xFF, 0xFF);
drawBinaryClock(surface, 300, 124, clockColor, back);
drawIndicator(surface, 160, 136);
}
diff --git a/engines/freescape/games/driller/dos.cpp b/engines/freescape/games/driller/dos.cpp
index efd8dd6a470..37960a57e11 100644
--- a/engines/freescape/games/driller/dos.cpp
+++ b/engines/freescape/games/driller/dos.cpp
@@ -29,6 +29,54 @@ namespace Freescape {
extern byte kCGAPalettePinkBlueWhiteData[4][3];
extern byte kEGADefaultPalette[16][3];
+byte kDrillerCGAPalettePinkBlue[4][3] = {
+ {0x00, 0x00, 0x00},
+ {0x00, 0xaa, 0xaa},
+ {0xaa, 0x00, 0xaa},
+ {0xaa, 0xaa, 0xaa},
+};
+
+byte kDrillerCGAPaletteRedGreen[4][3] = {
+ {0x00, 0x00, 0x00},
+ {0x00, 0xaa, 0x00},
+ {0xaa, 0x00, 0x00},
+ {0xaa, 0x55, 0x00},
+};
+
+static const CGAPaletteEntry rawCGAPaletteByArea[] {
+ {1, (byte *)kDrillerCGAPaletteRedGreen},
+ {2, (byte *)kDrillerCGAPalettePinkBlue},
+ {3, (byte *)kDrillerCGAPaletteRedGreen},
+ {4, (byte *)kDrillerCGAPalettePinkBlue},
+ {5, (byte *)kDrillerCGAPaletteRedGreen},
+ {6, (byte *)kDrillerCGAPalettePinkBlue},
+ {7, (byte *)kDrillerCGAPaletteRedGreen},
+ {8, (byte *)kDrillerCGAPalettePinkBlue},
+ {9, (byte *)kDrillerCGAPaletteRedGreen},
+ {10, (byte *)kDrillerCGAPalettePinkBlue},
+ {11, (byte *)kDrillerCGAPaletteRedGreen},
+ {12, (byte *)kDrillerCGAPalettePinkBlue},
+ {13, (byte *)kDrillerCGAPaletteRedGreen},
+ {14, (byte *)kDrillerCGAPalettePinkBlue},
+ {15, (byte *)kDrillerCGAPaletteRedGreen},
+ {16, (byte *)kDrillerCGAPalettePinkBlue},
+ {17, (byte *)kDrillerCGAPalettePinkBlue},
+ {18, (byte *)kDrillerCGAPalettePinkBlue},
+ {19, (byte *)kDrillerCGAPaletteRedGreen},
+ {20, (byte *)kDrillerCGAPalettePinkBlue},
+ {21, (byte *)kDrillerCGAPaletteRedGreen},
+ {22, (byte *)kDrillerCGAPalettePinkBlue},
+ {23, (byte *)kDrillerCGAPaletteRedGreen},
+ {25, (byte *)kDrillerCGAPalettePinkBlue},
+ {27, (byte *)kDrillerCGAPaletteRedGreen},
+ {28, (byte *)kDrillerCGAPalettePinkBlue},
+
+ {31, (byte *)kDrillerCGAPaletteRedGreen},
+ {32, (byte *)kDrillerCGAPalettePinkBlue},
+ {127, (byte *)kDrillerCGAPaletteRedGreen},
+ {0, 0} // This marks the end
+};
+
void DrillerEngine::initDOS() {
if (_renderMode == Common::kRenderEGA)
_viewArea = Common::Rect(40, 16, 280, 117);
@@ -37,6 +85,7 @@ void DrillerEngine::initDOS() {
else
error("Invalid or unknown render mode");
+ _rawCGAPaletteByArea = (const CGAPaletteEntry *)&rawCGAPaletteByArea;
_moveFowardArea = Common::Rect(73, 144, 101, 152);
_moveLeftArea = Common::Rect(73, 150, 86, 159);
_moveRightArea = Common::Rect(88, 152, 104, 160);
diff --git a/engines/freescape/games/palettes.cpp b/engines/freescape/games/palettes.cpp
index 4e39c9f89b9..5bd981108cb 100644
--- a/engines/freescape/games/palettes.cpp
+++ b/engines/freescape/games/palettes.cpp
@@ -162,62 +162,6 @@ void FreescapeEngine::loadPalettes(Common::SeekableReadStream *file, int offset)
}
}
-enum {
- kDrillerCGAPalettePinkBlue = 0,
- kDrillerCGAPaletteRedGreen = 1,
-};
-
-static const struct CGAPalettteEntry {
- int areaId;
- int palette;
-} rawCGAPaletteTable[] {
- {1, kDrillerCGAPaletteRedGreen},
- {2, kDrillerCGAPalettePinkBlue},
- {3, kDrillerCGAPaletteRedGreen},
- {4, kDrillerCGAPalettePinkBlue},
- {5, kDrillerCGAPaletteRedGreen},
- {6, kDrillerCGAPalettePinkBlue},
- {7, kDrillerCGAPaletteRedGreen},
- {8, kDrillerCGAPalettePinkBlue},
- {9, kDrillerCGAPaletteRedGreen},
- {10, kDrillerCGAPalettePinkBlue},
- {11, kDrillerCGAPaletteRedGreen},
- {12, kDrillerCGAPalettePinkBlue},
- {13, kDrillerCGAPaletteRedGreen},
- {14, kDrillerCGAPalettePinkBlue},
- {15, kDrillerCGAPaletteRedGreen},
- {16, kDrillerCGAPalettePinkBlue},
- {17, kDrillerCGAPalettePinkBlue},
- {18, kDrillerCGAPalettePinkBlue},
- {19, kDrillerCGAPaletteRedGreen},
- {20, kDrillerCGAPalettePinkBlue},
- {21, kDrillerCGAPaletteRedGreen},
- {22, kDrillerCGAPalettePinkBlue},
- {23, kDrillerCGAPaletteRedGreen},
- {25, kDrillerCGAPalettePinkBlue},
- {27, kDrillerCGAPaletteRedGreen},
- {28, kDrillerCGAPalettePinkBlue},
-
- {31, kDrillerCGAPaletteRedGreen},
- {32, kDrillerCGAPalettePinkBlue},
- {127, kDrillerCGAPaletteRedGreen},
- {0, 0} // This marks the end
-};
-
-byte kDrillerCGAPalettePinkBlueData[4][3] = {
- {0x00, 0x00, 0x00},
- {0x00, 0xaa, 0xaa},
- {0xaa, 0x00, 0xaa},
- {0xaa, 0xaa, 0xaa},
-};
-
-byte kDrillerCGAPaletteRedGreenData[4][3] = {
- {0x00, 0x00, 0x00},
- {0x00, 0xaa, 0x00},
- {0xaa, 0x00, 0x00},
- {0xaa, 0x55, 0x00},
-};
-
void FreescapeEngine::swapPalette(uint16 levelID) {
if (isAmiga() || isAtariST()) {
// The following palette was not available in the demo, so we select another one
@@ -245,21 +189,7 @@ void FreescapeEngine::swapPalette(uint16 levelID) {
free(palette);
processBorder();
} else if (isDOS() && _renderMode == Common::kRenderCGA) {
- const CGAPalettteEntry *entry = rawCGAPaletteTable;
- while (entry->areaId) {
- if (entry->areaId == levelID) {
- if (entry->palette == kDrillerCGAPaletteRedGreen) {
- _gfx->_palette = (byte *)kDrillerCGAPaletteRedGreenData;
- } else if (entry->palette == kDrillerCGAPalettePinkBlue) {
- _gfx->_palette = (byte *)kDrillerCGAPalettePinkBlueData;
- } else
- error("Invalid CGA palette to use");
- break;
- }
- entry++;
- }
-
- assert(entry->areaId == levelID);
+ _gfx->_palette = findCGAPalette(levelID);
if (!_border)
return;
_border->setPalette(_gfx->_palette, 0, 4);
@@ -274,4 +204,18 @@ void FreescapeEngine::swapPalette(uint16 levelID) {
}
+byte *FreescapeEngine::findCGAPalette(uint16 levelID) {
+ const CGAPaletteEntry *entry = _rawCGAPaletteByArea;
+ byte *palette = nullptr;
+ while (entry->areaId) {
+ if (entry->areaId == levelID) {
+ palette = entry->palette;
+ break;
+ }
+ entry++;
+ }
+
+ return palette;
+}
+
} // End of namespace Freescape
Commit: 42833df30b393ba233f38587ea0104a1a3a42aa4
https://github.com/scummvm/scummvm/commit/42833df30b393ba233f38587ea0104a1a3a42aa4
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-09T10:53:11+02:00
Commit Message:
FREESCAPE: glPolygonOffset depends on the area scale
Changed paths:
engines/freescape/gfx.cpp
engines/freescape/gfx.h
engines/freescape/gfx_opengl.cpp
engines/freescape/movement.cpp
diff --git a/engines/freescape/gfx.cpp b/engines/freescape/gfx.cpp
index db0dc6dda5c..df2f16c427b 100644
--- a/engines/freescape/gfx.cpp
+++ b/engines/freescape/gfx.cpp
@@ -55,6 +55,8 @@ Renderer::Renderer(int screenW, int screenH, Common::RenderMode renderMode) {
}
_colorPair[i] = 0;
}
+
+ _scale = 1;
}
Renderer::~Renderer() {}
diff --git a/engines/freescape/gfx.h b/engines/freescape/gfx.h
index 1a190222117..423d126c61e 100644
--- a/engines/freescape/gfx.h
+++ b/engines/freescape/gfx.h
@@ -132,6 +132,8 @@ public:
int _underFireBackgroundColor;
byte _stipples[16][128];
+ int _scale;
+
/**
* Select the window where to render
*
diff --git a/engines/freescape/gfx_opengl.cpp b/engines/freescape/gfx_opengl.cpp
index f6eafa711bc..43aa17347cf 100644
--- a/engines/freescape/gfx_opengl.cpp
+++ b/engines/freescape/gfx_opengl.cpp
@@ -316,7 +316,7 @@ void OpenGLRenderer::renderFace(const Common::Array<Math::Vector3d> &vertices) {
void OpenGLRenderer::polygonOffset(bool enabled) {
if (enabled) {
glEnable(GL_POLYGON_OFFSET_FILL);
- glPolygonOffset(-10.0f, 1.0f);
+ glPolygonOffset(-40.0f / MIN(4, _scale), 1.0f);
} else {
glPolygonOffset(0, 0);
glDisable(GL_POLYGON_OFFSET_FILL);
diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index 265643f12fe..5f3ff7bab6e 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -128,6 +128,9 @@ void FreescapeEngine::traverseEntrance(uint16 entranceID) {
}
_pitch = rotation.x();
+ // This is a workaround to avoid the camera looking at direct angles,
+ // polygons tends to disappear where the colinear
+ _pitch++;
if (rotation.y() > 0 && rotation.y() <= 45)
_yaw = rotation.y();
else if (rotation.y() <= 0 || (rotation.y() >= 180 && rotation.y() < 270))
@@ -151,6 +154,7 @@ void FreescapeEngine::traverseEntrance(uint16 entranceID) {
_position.setValue(1, _position.y() + _playerHeight);
_sensors = _currentArea->getSensors();
+ _gfx->_scale = _currentArea->_scale;
}
void FreescapeEngine::activate() {
Commit: 6953dd9204953269b071be77dbc512421dab030a
https://github.com/scummvm/scummvm/commit/6953dd9204953269b071be77dbc512421dab030a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-09-09T10:53:11+02:00
Commit Message:
FREESCAPE: avoid waiting for users to press a key when starting driller demos
Changed paths:
engines/freescape/ui.cpp
diff --git a/engines/freescape/ui.cpp b/engines/freescape/ui.cpp
index 96628138dc6..ef63131db21 100644
--- a/engines/freescape/ui.cpp
+++ b/engines/freescape/ui.cpp
@@ -113,9 +113,12 @@ void FreescapeEngine::borderScreen() {
return;
if (isDriller()) {
+ if (isAmiga() || isAtariST())
+ return; // TODO: add animation
+
drawBorderScreenAndWait(nullptr);
- if (isAmiga() || isAtariST() || isDemo())
+ if (isDemo())
return;
}
More information about the Scummvm-git-logs
mailing list