[Scummvm-git-logs] scummvm master -> 72bcb58aeef308cde105718dd6e115bdd3196e35
dreammaster
paulfgilbert at gmail.com
Sat Apr 18 23:11:29 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
72bcb58aee ULTIMA4: Fixes to screen and tile initialization
Commit: 72bcb58aeef308cde105718dd6e115bdd3196e35
https://github.com/scummvm/scummvm/commit/72bcb58aeef308cde105718dd6e115bdd3196e35
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-18T16:11:14-07:00
Commit Message:
ULTIMA4: Fixes to screen and tile initialization
Changed paths:
engines/ultima/ultima4/gfx/screen.cpp
engines/ultima/ultima4/gfx/screen.h
engines/ultima/ultima4/map/tileanim.cpp
engines/ultima/ultima4/ultima4.cpp
diff --git a/engines/ultima/ultima4/gfx/screen.cpp b/engines/ultima/ultima4/gfx/screen.cpp
index ae8aeb5b86..7761ebebff 100644
--- a/engines/ultima/ultima4/gfx/screen.cpp
+++ b/engines/ultima/ultima4/gfx/screen.cpp
@@ -81,6 +81,59 @@ Screen::~Screen() {
}
void Screen::init() {
+ _filterNames.clear();
+ _filterNames.push_back("point");
+ _filterNames.push_back("2xBi");
+ _filterNames.push_back("2xSaI");
+ _filterNames.push_back("Scale2x");
+
+ _lineOfSightStyles.clear();
+ _lineOfSightStyles.push_back("DOS");
+ _lineOfSightStyles.push_back("Enhanced");
+
+ screenLoadGraphicsFromConf();
+
+ debug(1, "using %s scaler\n", settings._filter.c_str());
+
+ /* if we can't use vga, reset to default:ega */
+ if (!u4isUpgradeAvailable() && settings._videoType == "VGA")
+ settings._videoType = "EGA";
+
+
+ KeyHandler::setKeyRepeat(settings._keydelay, settings._keyinterval);
+
+ /* find the tile animations for our tileset */
+ _tileAnims = nullptr;
+ for (Std::vector<TileAnimSet *>::const_iterator i = _tileAnimSets.begin(); i != _tileAnimSets.end(); i++) {
+ TileAnimSet *set = *i;
+ if (set->_name == settings._videoType)
+ _tileAnims = set;
+ }
+ if (!_tileAnims)
+ errorFatal("unable to find tile animations for \"%s\" video mode in graphics.xml", settings._videoType.c_str());
+
+ _dungeonTileChars.clear();
+ _dungeonTileChars["brick_floor"] = CHARSET_FLOOR;
+ _dungeonTileChars["up_ladder"] = CHARSET_LADDER_UP;
+ _dungeonTileChars["down_ladder"] = CHARSET_LADDER_DOWN;
+ _dungeonTileChars["up_down_ladder"] = CHARSET_LADDER_UPDOWN;
+ _dungeonTileChars["chest"] = '$';
+ _dungeonTileChars["ceiling_hole"] = CHARSET_FLOOR;
+ _dungeonTileChars["floor_hole"] = CHARSET_FLOOR;
+ _dungeonTileChars["magic_orb"] = CHARSET_ORB;
+ _dungeonTileChars["ceiling_hole"] = 'T';
+ _dungeonTileChars["floor_hole"] = 'T';
+ _dungeonTileChars["fountain"] = 'F';
+ _dungeonTileChars["secret_door"] = CHARSET_SDOOR;
+ _dungeonTileChars["brick_wall"] = CHARSET_WALL;
+ _dungeonTileChars["dungeon_door"] = CHARSET_ROOM;
+ _dungeonTileChars["avatar"] = CHARSET_REDDOT;
+ _dungeonTileChars["dungeon_room"] = CHARSET_ROOM;
+ _dungeonTileChars["dungeon_altar"] = CHARSET_ANKH;
+ _dungeonTileChars["energy_field"] = '^';
+ _dungeonTileChars["fire_field"] = '^';
+ _dungeonTileChars["poison_field"] = '^';
+ _dungeonTileChars["sleep_field"] = '^';
}
void Screen::clear() {
@@ -166,70 +219,11 @@ MouseCursorSurface *Screen::loadMouseCursor(Shared::File &src) {
return c;
}
-void Screen::screenInit() {
- _filterNames.clear();
- _filterNames.push_back("point");
- _filterNames.push_back("2xBi");
- _filterNames.push_back("2xSaI");
- _filterNames.push_back("Scale2x");
-
- _lineOfSightStyles.clear();
- _lineOfSightStyles.push_back("DOS");
- _lineOfSightStyles.push_back("Enhanced");
-
- _charSetInfo = NULL;
- _gemTilesInfo = NULL;
-
- screenLoadGraphicsFromConf();
-
- debug(1, "using %s scaler\n", settings._filter.c_str());
-
- /* if we can't use vga, reset to default:ega */
- if (!u4isUpgradeAvailable() && settings._videoType == "VGA")
- settings._videoType = "EGA";
-
-
- KeyHandler::setKeyRepeat(settings._keydelay, settings._keyinterval);
-
- /* find the tile animations for our tileset */
- _tileAnims = NULL;
- for (Std::vector<TileAnimSet *>::const_iterator i = _tileAnimSets.begin(); i != _tileAnimSets.end(); i++) {
- TileAnimSet *set = *i;
- if (set->_name == settings._videoType)
- _tileAnims = set;
- }
- if (!_tileAnims)
- errorFatal("unable to find tile animations for \"%s\" video mode in graphics.xml", settings._videoType.c_str());
-
- _dungeonTileChars.clear();
- _dungeonTileChars["brick_floor"] = CHARSET_FLOOR;
- _dungeonTileChars["up_ladder"] = CHARSET_LADDER_UP;
- _dungeonTileChars["down_ladder"] = CHARSET_LADDER_DOWN;
- _dungeonTileChars["up_down_ladder"] = CHARSET_LADDER_UPDOWN;
- _dungeonTileChars["chest"] = '$';
- _dungeonTileChars["ceiling_hole"] = CHARSET_FLOOR;
- _dungeonTileChars["floor_hole"] = CHARSET_FLOOR;
- _dungeonTileChars["magic_orb"] = CHARSET_ORB;
- _dungeonTileChars["ceiling_hole"] = 'T';
- _dungeonTileChars["floor_hole"] = 'T';
- _dungeonTileChars["fountain"] = 'F';
- _dungeonTileChars["secret_door"] = CHARSET_SDOOR;
- _dungeonTileChars["brick_wall"] = CHARSET_WALL;
- _dungeonTileChars["dungeon_door"] = CHARSET_ROOM;
- _dungeonTileChars["avatar"] = CHARSET_REDDOT;
- _dungeonTileChars["dungeon_room"] = CHARSET_ROOM;
- _dungeonTileChars["dungeon_altar"] = CHARSET_ANKH;
- _dungeonTileChars["energy_field"] = '^';
- _dungeonTileChars["fire_field"] = '^';
- _dungeonTileChars["poison_field"] = '^';
- _dungeonTileChars["sleep_field"] = '^';
-}
-
void Screen::screenReInit() {
intro->deleteIntro(); /* delete intro stuff */
Tileset::unloadAllImages(); /* unload tilesets, which will be reloaded lazily as needed */
ImageMgr::destroy();
- _tileAnims = NULL;
+ _tileAnims = nullptr;
clear();
init(); // re-init screen stuff (loading new backgrounds, etc.)
intro->init(); /* re-fix the backgrounds loaded and scale images, etc. */
@@ -381,7 +375,7 @@ void Screen::screenLoadGraphicsFromConf() {
Layout *Screen::screenLoadLayoutFromConf(const ConfigElement &conf) {
Layout *layout;
- static const char *typeEnumStrings[] = { "standard", "gem", "dungeon_gem", NULL };
+ static const char *typeEnumStrings[] = { "standard", "gem", "dungeon_gem", nullptr };
layout = new Layout();
layout->_name = conf.getString("name");
@@ -466,7 +460,7 @@ bool Screen::screenTileUpdate(TileView *view, const Coords &coords, bool redraw)
}
void Screen::screenUpdate(TileView *view, bool showmap, bool blackout) {
- ASSERT(g_context != NULL, "context has not yet been initialized");
+ ASSERT(g_context != nullptr, "context has not yet been initialized");
if (blackout) {
screenEraseMapArea();
@@ -547,7 +541,7 @@ void Screen::screenDrawImageInMapArea(const Common::String &name) {
}
void Screen::screenTextColor(int color) {
- if (_charSetInfo == NULL) {
+ if (_charSetInfo == nullptr) {
_charSetInfo = imageMgr->get(BKGD_CHARSET);
if (!_charSetInfo)
errorFatal("ERROR 1003: Unable to load the \"%s\" data file.\t\n\nIs %s installed?\n\nVisit the XU4 website for additional information.\n\thttp://xu4.sourceforge.net/", BKGD_CHARSET, settings._game.c_str());
@@ -570,7 +564,7 @@ void Screen::screenTextColor(int color) {
}
void Screen::screenShowChar(int chr, int x, int y) {
- if (_charSetInfo == NULL) {
+ if (_charSetInfo == nullptr) {
_charSetInfo = imageMgr->get(BKGD_CHARSET);
if (!_charSetInfo)
error("ERROR 1001: Unable to load the \"%s\" data file", BKGD_CHARSET);
@@ -582,7 +576,7 @@ void Screen::screenShowChar(int chr, int x, int y) {
}
void Screen::screenScrollMessageArea() {
- ASSERT(_charSetInfo != NULL && _charSetInfo->_image != NULL, "charset not initialized!");
+ ASSERT(_charSetInfo != nullptr && _charSetInfo->_image != nullptr, "charset not initialized!");
Image *screen = imageMgr->get("screen")->_image;
@@ -1184,7 +1178,7 @@ void Screen::screenShowGemTile(Layout *layout, Map *map, MapTile &t, bool focus,
layout->_tileShape.y * settings._scale);
}
} else {
- if (_gemTilesInfo == NULL) {
+ if (_gemTilesInfo == nullptr) {
_gemTilesInfo = imageMgr->get(BKGD_GEMTILES);
if (!_gemTilesInfo)
errorFatal("ERROR 1002: Unable to load the \"%s\" data file.\t\n\nIs %s installed?\n\nVisit the XU4 website for additional information.\n\thttp://xu4.sourceforge.net/", BKGD_GEMTILES, settings._game.c_str());
@@ -1218,7 +1212,7 @@ Layout *Screen::screenGetGemLayout(const Map *map) {
return layout;
}
errorFatal("no dungeon gem layout found!\n");
- return NULL;
+ return nullptr;
} else
return _gemLayout;
}
@@ -1338,7 +1332,7 @@ void Screen::screenWait(int numberOfAnimationFrames) {
}
Image *Screen::screenScale(Image *src, int scale, int n, int filter) {
- Image *dest = NULL;
+ Image *dest = nullptr;
bool isTransparent;
unsigned int transparentIndex;
bool alpha = src->isAlphaOn();
@@ -1388,7 +1382,7 @@ Image *Screen::screenScaleDown(Image *src, int scale) {
dest = Image::create(src->width() / scale, src->height() / scale, src->isIndexed(), Image::HARDWARE);
if (!dest)
- return NULL;
+ return nullptr;
if (!dest)
dest = Image::duplicate(src);
diff --git a/engines/ultima/ultima4/gfx/screen.h b/engines/ultima/ultima4/gfx/screen.h
index f40b2bb471..2b11d2578a 100644
--- a/engines/ultima/ultima4/gfx/screen.h
+++ b/engines/ultima/ultima4/gfx/screen.h
@@ -211,9 +211,6 @@ public:
*/
void setMouseCursor(MouseCursor cursor);
- void screenInit(void);
- void screenRefreshTimerInit(void);
-
/**
* Re-initializes the screen and implements any changes made in settings
*/
@@ -231,7 +228,7 @@ public:
void screenEraseTextArea(int x, int y, int width, int height);
void screenGemUpdate(void);
- void screenMessage(const char *fmt, ...) GCC_PRINTF(1, 2);
+ void screenMessage(const char *fmt, ...);
void screenPrompt(void);
void screenRedrawMapArea(void);
void screenRedrawTextArea(int x, int y, int width, int height);
@@ -250,7 +247,7 @@ public:
* Draw a character from the charset onto the screen.
*/
void screenShowChar(int chr, int x, int y);
- void screenTextAt(int x, int y, const char *fmt, ...) GCC_PRINTF(3, 4);
+ void screenTextAt(int x, int y, const char *fmt, ...);
/**
* Change the current text color
diff --git a/engines/ultima/ultima4/map/tileanim.cpp b/engines/ultima/ultima4/map/tileanim.cpp
index abd2b1617b..4baa21dea8 100644
--- a/engines/ultima/ultima4/map/tileanim.cpp
+++ b/engines/ultima/ultima4/map/tileanim.cpp
@@ -43,15 +43,14 @@ TileAnimTransform *TileAnimTransform::create(const ConfigElement &conf) {
switch (type) {
case 0:
- transform = new TileAnimInvertTransform(conf.getInt("x"),
- conf.getInt("y"),
- conf.getInt("width"),
- conf.getInt("height"));
+ transform = new TileAnimInvertTransform(
+ conf.getInt("x"), conf.getInt("y"),
+ conf.getInt("width"), conf.getInt("height"));
break;
case 1: {
- transform = new TileAnimPixelTransform(conf.getInt("x"),
- conf.getInt("y"));
+ transform = new TileAnimPixelTransform(
+ conf.getInt("x"), conf.getInt("y"));
vector<ConfigElement> children = conf.getChildren();
for (Std::vector<ConfigElement>::iterator i = children.begin(); i != children.end(); i++) {
@@ -60,10 +59,9 @@ TileAnimTransform *TileAnimTransform::create(const ConfigElement &conf) {
((TileAnimPixelTransform *)transform)->_colors.push_back(rgba);
}
}
+ break;
}
- break;
-
case 2:
transform = new TileAnimScrollTransform(conf.getInt("increment"));
break;
@@ -73,10 +71,9 @@ TileAnimTransform *TileAnimTransform::create(const ConfigElement &conf) {
break;
case 4: {
- transform = new TileAnimPixelColorTransform(conf.getInt("x"),
- conf.getInt("y"),
- conf.getInt("width"),
- conf.getInt("height"));
+ transform = new TileAnimPixelColorTransform(
+ conf.getInt("x"), conf.getInt("y"),
+ conf.getInt("width"), conf.getInt("height"));
vector<ConfigElement> children = conf.getChildren();
for (Std::vector<ConfigElement>::iterator i = children.begin(); i != children.end(); i++) {
@@ -84,9 +81,11 @@ TileAnimTransform *TileAnimTransform::create(const ConfigElement &conf) {
RGBA *rgba = loadColorFromConf(*i);
if (i == children.begin())
((TileAnimPixelColorTransform *)transform)->_start = rgba;
- else ((TileAnimPixelColorTransform *)transform)->_end = rgba;
+ else
+ ((TileAnimPixelColorTransform *)transform)->_end = rgba;
}
}
+ break;
}
default:
diff --git a/engines/ultima/ultima4/ultima4.cpp b/engines/ultima/ultima4/ultima4.cpp
index 79f913b92f..87a4894bf4 100644
--- a/engines/ultima/ultima4/ultima4.cpp
+++ b/engines/ultima/ultima4/ultima4.cpp
@@ -90,9 +90,14 @@ bool Ultima4Engine::initialize() {
_screen->init();
setDebugger(new Debugger());
+ soundInit();
+ Tileset::loadAll();
+ creatureMgr->getInstance();
+
_saveSlotToLoad = ConfMan.hasKey("save_slot") ? ConfMan.getInt("save_slot") : -1;
+
return true;
}
@@ -101,7 +106,6 @@ void Ultima4Engine::startup() {
soundInit();
Tileset::loadAll();
- creatureMgr->getInstance();
if (!skipInfo) {
// do the intro
More information about the Scummvm-git-logs
mailing list