aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure3
-rw-r--r--engines/agi/op_test.cpp2
-rw-r--r--engines/cge/text.cpp4
-rw-r--r--engines/cge/vga13h.cpp1
-rw-r--r--engines/dreamweb/newplace.cpp2
-rw-r--r--engines/hopkins/graphics.cpp4
-rw-r--r--engines/hopkins/saveload.cpp2
-rw-r--r--engines/kyra/gui_eob.cpp13
-rw-r--r--engines/kyra/gui_lol.cpp2
-rw-r--r--engines/kyra/items_lol.cpp1
-rw-r--r--engines/kyra/lol.cpp4
-rw-r--r--engines/kyra/scene_eob.cpp2
-rw-r--r--engines/kyra/scene_lol.cpp2
-rw-r--r--engines/kyra/screen_eob.cpp2
-rw-r--r--engines/kyra/sequences_hof.cpp7
-rw-r--r--engines/kyra/sprites_eob.cpp7
-rw-r--r--engines/kyra/sprites_lol.cpp5
-rw-r--r--engines/kyra/timer_eob.cpp1
-rw-r--r--engines/parallaction/dialogue.cpp2
-rw-r--r--engines/parallaction/disk_ns.cpp2
-rw-r--r--engines/parallaction/input.cpp6
-rw-r--r--engines/parallaction/parser_ns.cpp4
-rw-r--r--engines/parallaction/sound_br.cpp4
-rw-r--r--engines/sci/console.cpp1
-rw-r--r--engines/sci/parser/vocabulary.cpp2
-rw-r--r--engines/sci/resource.cpp1
-rw-r--r--engines/sci/sound/drivers/midi.cpp3
-rw-r--r--engines/sword25/util/lua/ldo.cpp10
-rw-r--r--engines/sword25/util/lua/lua.h10
-rw-r--r--engines/wintermute/ad/ad_actor.cpp4
-rw-r--r--engines/wintermute/ad/ad_actor.h12
-rw-r--r--engines/wintermute/ad/ad_entity.cpp2
-rw-r--r--engines/wintermute/ad/ad_entity.h10
-rw-r--r--engines/wintermute/ad/ad_game.cpp40
-rw-r--r--engines/wintermute/ad/ad_game.h48
-rw-r--r--engines/wintermute/ad/ad_inventory.h2
-rw-r--r--engines/wintermute/ad/ad_inventory_box.cpp4
-rw-r--r--engines/wintermute/ad/ad_inventory_box.h12
-rw-r--r--engines/wintermute/ad/ad_item.cpp2
-rw-r--r--engines/wintermute/ad/ad_item.h14
-rw-r--r--engines/wintermute/ad/ad_layer.h14
-rw-r--r--engines/wintermute/ad/ad_node_state.cpp3
-rw-r--r--engines/wintermute/ad/ad_object.cpp17
-rw-r--r--engines/wintermute/ad/ad_object.h34
-rw-r--r--engines/wintermute/ad/ad_path.h2
-rw-r--r--engines/wintermute/ad/ad_path_point.h2
-rw-r--r--engines/wintermute/ad/ad_region.h10
-rw-r--r--engines/wintermute/ad/ad_response.cpp32
-rw-r--r--engines/wintermute/ad/ad_response.h22
-rw-r--r--engines/wintermute/ad/ad_response_box.cpp46
-rw-r--r--engines/wintermute/ad/ad_response_box.h14
-rw-r--r--engines/wintermute/ad/ad_response_context.h8
-rw-r--r--engines/wintermute/ad/ad_rot_level.h5
-rw-r--r--engines/wintermute/ad/ad_scale_level.h2
-rw-r--r--engines/wintermute/ad/ad_scene.cpp34
-rw-r--r--engines/wintermute/ad/ad_scene.h24
-rw-r--r--engines/wintermute/ad/ad_sentence.cpp10
-rw-r--r--engines/wintermute/ad/ad_sentence.h4
-rw-r--r--engines/wintermute/ad/ad_sprite_set.h2
-rw-r--r--engines/wintermute/ad/ad_talk_def.h2
-rw-r--r--engines/wintermute/ad/ad_talk_holder.h10
-rw-r--r--engines/wintermute/ad/ad_talk_node.h2
-rw-r--r--engines/wintermute/ad/ad_waypoint_group.h8
-rw-r--r--engines/wintermute/base/base.cpp7
-rw-r--r--engines/wintermute/base/base_active_rect.cpp3
-rw-r--r--engines/wintermute/base/base_active_rect.h4
-rw-r--r--engines/wintermute/base/base_engine.cpp32
-rw-r--r--engines/wintermute/base/base_engine.h7
-rw-r--r--engines/wintermute/base/base_fader.cpp11
-rw-r--r--engines/wintermute/base/base_file_manager.cpp6
-rw-r--r--engines/wintermute/base/base_frame.cpp13
-rw-r--r--engines/wintermute/base/base_frame.h12
-rw-r--r--engines/wintermute/base/base_game.cpp325
-rw-r--r--engines/wintermute/base/base_game.h138
-rw-r--r--engines/wintermute/base/base_game_music.cpp4
-rw-r--r--engines/wintermute/base/base_game_music.h4
-rw-r--r--engines/wintermute/base/base_game_settings.cpp222
-rw-r--r--engines/wintermute/base/base_game_settings.h71
-rw-r--r--engines/wintermute/base/base_named_object.h2
-rw-r--r--engines/wintermute/base/base_object.cpp3
-rw-r--r--engines/wintermute/base/base_object.h12
-rw-r--r--engines/wintermute/base/base_parser.cpp8
-rw-r--r--engines/wintermute/base/base_parser.h8
-rw-r--r--engines/wintermute/base/base_persistence_manager.cpp14
-rw-r--r--engines/wintermute/base/base_point.h4
-rw-r--r--engines/wintermute/base/base_region.cpp12
-rw-r--r--engines/wintermute/base/base_region.h16
-rw-r--r--engines/wintermute/base/base_script_holder.cpp9
-rw-r--r--engines/wintermute/base/base_script_holder.h10
-rw-r--r--engines/wintermute/base/base_scriptable.cpp2
-rw-r--r--engines/wintermute/base/base_scriptable.h2
-rw-r--r--engines/wintermute/base/base_sprite.cpp17
-rw-r--r--engines/wintermute/base/base_sprite.h18
-rw-r--r--engines/wintermute/base/base_string_table.cpp11
-rw-r--r--engines/wintermute/base/base_sub_frame.cpp11
-rw-r--r--engines/wintermute/base/base_sub_frame.h2
-rw-r--r--engines/wintermute/base/base_surface_storage.cpp15
-rw-r--r--engines/wintermute/base/base_transition_manager.cpp5
-rw-r--r--engines/wintermute/base/base_viewport.cpp9
-rw-r--r--engines/wintermute/base/base_viewport.h6
-rw-r--r--engines/wintermute/base/file/base_package.h2
-rw-r--r--engines/wintermute/base/gfx/base_renderer.h40
-rw-r--r--engines/wintermute/base/gfx/base_surface.cpp2
-rw-r--r--engines/wintermute/base/gfx/base_surface.h6
-rw-r--r--engines/wintermute/base/particles/part_emitter.cpp13
-rw-r--r--engines/wintermute/base/particles/part_emitter.h10
-rw-r--r--engines/wintermute/base/particles/part_particle.h12
-rw-r--r--engines/wintermute/base/save_thumb_helper.cpp (renamed from engines/wintermute/base/base_save_thumb_helper.cpp)20
-rw-r--r--engines/wintermute/base/save_thumb_helper.h (renamed from engines/wintermute/base/base_save_thumb_helper.h)11
-rw-r--r--engines/wintermute/base/saveload.cpp2
-rw-r--r--engines/wintermute/base/scriptables/script.cpp2
-rw-r--r--engines/wintermute/base/scriptables/script.h4
-rw-r--r--engines/wintermute/base/scriptables/script_engine.cpp2
-rw-r--r--engines/wintermute/base/scriptables/script_ext_array.h2
-rw-r--r--engines/wintermute/base/scriptables/script_ext_file.h2
-rw-r--r--engines/wintermute/base/scriptables/script_ext_mem_buffer.h2
-rw-r--r--engines/wintermute/base/scriptables/script_ext_string.cpp2
-rw-r--r--engines/wintermute/base/scriptables/script_ext_string.h2
-rw-r--r--engines/wintermute/base/scriptables/script_stack.h2
-rw-r--r--engines/wintermute/base/scriptables/script_value.h2
-rw-r--r--engines/wintermute/base/sound/base_sound.h2
-rw-r--r--engines/wintermute/base/sound/base_sound_buffer.h4
-rw-r--r--engines/wintermute/base/sound/base_sound_manager.cpp5
-rw-r--r--engines/wintermute/base/sound/base_sound_manager.h5
-rw-r--r--engines/wintermute/base/timer.cpp74
-rw-r--r--engines/wintermute/base/timer.h57
-rw-r--r--engines/wintermute/debugger.cpp4
-rw-r--r--engines/wintermute/graphics/transparent_surface.cpp7
-rw-r--r--engines/wintermute/module.mk4
-rw-r--r--engines/wintermute/system/sys_class_registry.cpp4
-rw-r--r--engines/wintermute/ui/ui_button.cpp2
-rw-r--r--engines/wintermute/ui/ui_button.h10
-rw-r--r--engines/wintermute/ui/ui_edit.cpp2
-rw-r--r--engines/wintermute/ui/ui_edit.h18
-rw-r--r--engines/wintermute/ui/ui_entity.h10
-rw-r--r--engines/wintermute/ui/ui_object.h16
-rw-r--r--engines/wintermute/ui/ui_text.cpp2
-rw-r--r--engines/wintermute/ui/ui_text.h10
-rw-r--r--engines/wintermute/ui/ui_tiled_image.h2
-rw-r--r--engines/wintermute/ui/ui_window.cpp14
-rw-r--r--engines/wintermute/ui/ui_window.h12
-rw-r--r--engines/wintermute/video/video_player.h6
-rw-r--r--engines/wintermute/video/video_theora_player.cpp26
-rw-r--r--engines/wintermute/video/video_theora_player.h45
-rw-r--r--engines/wintermute/wintermute.cpp42
145 files changed, 1289 insertions, 855 deletions
diff --git a/configure b/configure
index d3dc71e44d..70648631e7 100755
--- a/configure
+++ b/configure
@@ -3655,7 +3655,8 @@ if test "$_opengl" = auto ; then
# Test the current header for OpenGL
cat > $TMPC << EOF
#include <$i>
-int main(void) { return GL_VERSION_1_1; }
+#include <stdio.h>
+int main(void) { printf("ANTIVIRUS FALSE POSITIVE WORKAROUND"); return GL_VERSION_1_1; }
EOF
cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl=yes && break
diff --git a/engines/agi/op_test.cpp b/engines/agi/op_test.cpp
index 4d5e6fffe1..124a1cfcb7 100644
--- a/engines/agi/op_test.cpp
+++ b/engines/agi/op_test.cpp
@@ -82,7 +82,7 @@ void condIsSet(AgiGame *state, uint8 *p) {
}
void condIsSetV(AgiGame *state, uint8 *p) {
- state->testResult = testIsSet(getvar(p[1]));
+ state->testResult = testIsSet(getvar(p[0]));
}
void condIsSetV1(AgiGame *state, uint8 *p) {
diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp
index a8ce8777c5..27bb0608fd 100644
--- a/engines/cge/text.cpp
+++ b/engines/cge/text.cpp
@@ -68,7 +68,7 @@ int16 Text::count() {
for (line = tf.readLine(); !tf.eos(); line = tf.readLine()) {
char *s;
-
+ assert(line.size() <= 513);
strcpy(tmpStr, line.c_str());
if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL)
continue;
@@ -101,7 +101,7 @@ void Text::load() {
for (idx = 0, line = tf.readLine(); !tf.eos(); line = tf.readLine()) {
int n = line.size();
char *s;
-
+ assert(n <= 513);
strcpy(tmpStr, line.c_str());
if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL)
continue;
diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp
index e178795b7c..56a0754527 100644
--- a/engines/cge/vga13h.cpp
+++ b/engines/cge/vga13h.cpp
@@ -214,6 +214,7 @@ Sprite *Sprite::expand() {
for (line = sprf.readLine(); !sprf.eos(); line = sprf.readLine()) {
len = line.size();
+ assert(len <= 513);
strcpy(tmpStr, line.c_str());
lcnt++;
if (len == 0 || *tmpStr == '.')
diff --git a/engines/dreamweb/newplace.cpp b/engines/dreamweb/newplace.cpp
index 5b4b0260f5..6b1f9d097b 100644
--- a/engines/dreamweb/newplace.cpp
+++ b/engines/dreamweb/newplace.cpp
@@ -140,7 +140,7 @@ void DreamWebEngine::putUnderCentre() {
}
void DreamWebEngine::locationPic() {
- const int roomPics[] = { 5, 0, 3, 2, 4, 1, 10, 9, 8, 6, 11, 4, 7, 7, 0 };
+ const int roomPics[] = { 5, 0, 3, 2, 4, 1, 10, 9, 8, 6, 11, 4, 7, 7, 0, 0 };
byte picture = roomPics[_destPos];
if (picture >= 6)
diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp
index 15788338db..f978a5803f 100644
--- a/engines/hopkins/graphics.cpp
+++ b/engines/hopkins/graphics.cpp
@@ -644,13 +644,13 @@ void GraphicsManager::setColorPercentage2(int palIndex, int r, int g, int b) {
_palette[palOffset + 1] = gv;
_palette[palOffset + 2] = bv;
- WRITE_LE_UINT16(&_paletteBuffer[2 * palIndex], mapRGB(rv, gv, bv));
+ WRITE_UINT16(&_paletteBuffer[2 * palIndex], mapRGB(rv, gv, bv));
}
void GraphicsManager::changePalette(const byte *palette) {
const byte *srcP = &palette[0];
for (int idx = 0; idx < PALETTE_SIZE; ++idx, srcP += 3) {
- WRITE_LE_UINT16(&_paletteBuffer[2 * idx], mapRGB(srcP[0], srcP[1], srcP[2]));
+ WRITE_UINT16(&_paletteBuffer[2 * idx], mapRGB(srcP[0], srcP[1], srcP[2]));
}
}
diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp
index 0576b851cd..af0b043641 100644
--- a/engines/hopkins/saveload.cpp
+++ b/engines/hopkins/saveload.cpp
@@ -292,7 +292,7 @@ void SaveLoadManager::convertThumb16To8(Graphics::Surface *thumb16, Graphics::Su
byte paletteG[PALETTE_SIZE];
byte paletteB[PALETTE_SIZE];
for (int palIndex = 0; palIndex < PALETTE_SIZE; ++palIndex) {
- uint16 p = READ_LE_UINT16(&_vm->_graphicsMan->_palettePixels[palIndex * 2]);
+ uint16 p = READ_UINT16(&_vm->_graphicsMan->_palettePixels[palIndex * 2]);
pixelFormat16.colorToRGB(p, paletteR[palIndex], paletteG[palIndex], paletteB[palIndex]);
}
diff --git a/engines/kyra/gui_eob.cpp b/engines/kyra/gui_eob.cpp
index ed3aaefbd9..9b4c09d7f4 100644
--- a/engines/kyra/gui_eob.cpp
+++ b/engines/kyra/gui_eob.cpp
@@ -1300,24 +1300,24 @@ void EoBCoreEngine::gui_processWeaponSlotClickRight(int charIndex, int slotIndex
case 14:
// Potion
- usePotion(charIndex, wslot);
+ usePotion(charIndex, slotIndex);
break;
case 18:
- useWand(charIndex, wslot);
+ useWand(charIndex, slotIndex);
break;
case 19:
// eob2 horn
- useHorn(charIndex, wslot);
+ useHorn(charIndex, slotIndex);
break;
case 20:
if (vl == 1)
inflictCharacterDamage(charIndex, 200);
else
- useMagicScroll(charIndex, 55, wslot);
- deleteInventoryItem(charIndex, wslot);
+ useMagicScroll(charIndex, 55, slotIndex);
+ deleteInventoryItem(charIndex, slotIndex);
break;
default:
@@ -2056,9 +2056,8 @@ void GUI_EoB::runCampMenu() {
if (inputFlag == _vm->_keyMap[Common::KEYCODE_ESCAPE])
inputFlag = 0x8007;
- else if (inputFlag == _vm->_keyMap[Common::KEYCODE_KP5] || inputFlag == _vm->_keyMap[Common::KEYCODE_SPACE] || inputFlag == _vm->_keyMap[Common::KEYCODE_RETURN]) {
+ else if (prevHighlightButton && (inputFlag == _vm->_keyMap[Common::KEYCODE_KP5] || inputFlag == _vm->_keyMap[Common::KEYCODE_SPACE] || inputFlag == _vm->_keyMap[Common::KEYCODE_RETURN]))
inputFlag = 0x8000 + prevHighlightButton->index;
- }
Button *clickedButton = _vm->gui_getButton(buttonList, inputFlag & 0x7FFF);
diff --git a/engines/kyra/gui_lol.cpp b/engines/kyra/gui_lol.cpp
index f7a5386574..b73eddbaf3 100644
--- a/engines/kyra/gui_lol.cpp
+++ b/engines/kyra/gui_lol.cpp
@@ -697,7 +697,7 @@ void LoLEngine::gui_toggleButtonDisplayMode(int shapeIndex, int mode) {
t = _system->getMillis();
if (_buttonPressTimer > t)
delay(_buttonPressTimer - t);
-
+ // fall through
case 2:
mode = 0;
_lastButtonShape = 0;
diff --git a/engines/kyra/items_lol.cpp b/engines/kyra/items_lol.cpp
index f7fd04bab8..f4024471d2 100644
--- a/engines/kyra/items_lol.cpp
+++ b/engines/kyra/items_lol.cpp
@@ -265,6 +265,7 @@ bool LoLEngine::addItemToInventory(Item itemIndex) {
gui_drawInventory();
}
+ assert(pos > 0 && pos < 48);
_inventory[pos] = itemIndex;
gui_drawInventory();
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp
index f7696d45b5..3af65d9b7a 100644
--- a/engines/kyra/lol.cpp
+++ b/engines/kyra/lol.cpp
@@ -1363,7 +1363,7 @@ void LoLEngine::setCharacterMagicOrHitPoints(int charNum, int type, int points,
{ 0x21, 0xAA, 0x99, 0x00, 0x4253 }
};
- if (charNum > 3)
+ if (charNum > 2)
return;
LoLCharacter *c = &_characters[charNum];
@@ -1851,7 +1851,7 @@ int LoLEngine::playCharacterScriptChat(int charId, int mode, int restorePortrait
} else if (charId > 0) {
int i = 0;
- for (; i < 4; i++) {
+ for (; i < 3; i++) {
if (_characters[i].id != charId || !(_characters[i].flags & 1))
continue;
if (charId == ch)
diff --git a/engines/kyra/scene_eob.cpp b/engines/kyra/scene_eob.cpp
index 84cf4a3809..45de232cb6 100644
--- a/engines/kyra/scene_eob.cpp
+++ b/engines/kyra/scene_eob.cpp
@@ -259,7 +259,7 @@ Common::String EoBCoreEngine::initLevelData(int sub) {
}
if (_flags.gameID == GI_EOB2)
- pos = initScriptTimers(pos);
+ initScriptTimers(pos);
return _curGfxFile;
}
diff --git a/engines/kyra/scene_lol.cpp b/engines/kyra/scene_lol.cpp
index f1045d2ddf..c8618bc3bb 100644
--- a/engines/kyra/scene_lol.cpp
+++ b/engines/kyra/scene_lol.cpp
@@ -315,7 +315,7 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight
if (_lastSpecialColor == 1)
_lastSpecialColor = 0x44;
else if (_lastSpecialColor == 0x66)
- _lastSpecialColor = scumm_stricmp(file, "YVEL2") ? 0xCC : 0x44;
+ _lastSpecialColor = file ? (scumm_stricmp(file, "YVEL2") ? 0xCC : 0x44) : 0x44;
else if (_lastSpecialColor == 0x6B)
_lastSpecialColor = 0xCC;
else
diff --git a/engines/kyra/screen_eob.cpp b/engines/kyra/screen_eob.cpp
index b1b26357f8..ae62e522e7 100644
--- a/engines/kyra/screen_eob.cpp
+++ b/engines/kyra/screen_eob.cpp
@@ -456,8 +456,6 @@ uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool enco
if (col < 0x10) {
*pal++ = s;
c = colorMap[s] = col++;
- if (!col)
- c = 0;
} else {
c = 0;
}
diff --git a/engines/kyra/sequences_hof.cpp b/engines/kyra/sequences_hof.cpp
index e70bbca88b..306f504b9e 100644
--- a/engines/kyra/sequences_hof.cpp
+++ b/engines/kyra/sequences_hof.cpp
@@ -942,8 +942,8 @@ void SeqPlayer_HOF::playAnimation(WSAMovie_v2 *wsaObj, int startFrame, int lastF
bool finished = false;
uint32 startTime = _system->getMillis();
- int origW = wsaObj->width();
- int origH = wsaObj->width();
+ int origW = wsaObj ? wsaObj->width() : 0;
+ int origH = wsaObj ? wsaObj->height() : 0;
int drwX = x;
int drwY = y;
int drwW = origW;
@@ -1041,7 +1041,8 @@ void SeqPlayer_HOF::playDialogueAnimation(uint16 strID, uint16 soundID, int text
int dur = int(strlen(_sequenceStrings[strID])) * (_vm->gameFlags().isTalkie ? 7 : 15);
if (_vm->textEnabled()) {
int slot = displaySubTitle(strID, textPosX, textPosY, dur, textWidth);
- _textSlots[slot].textcolor = textColor;
+ if (slot >= 0)
+ _textSlots[slot].textcolor = textColor;
}
_specialAnimTimeOutTotal = _system->getMillis() + dur * _vm->tickLength();
int curframe = animStartFrame;
diff --git a/engines/kyra/sprites_eob.cpp b/engines/kyra/sprites_eob.cpp
index 962efe6a4e..1d4c143185 100644
--- a/engines/kyra/sprites_eob.cpp
+++ b/engines/kyra/sprites_eob.cpp
@@ -247,6 +247,9 @@ void EoBCoreEngine::updateAttackingMonsterFlags() {
m2 = m;
}
+ if (!m2)
+ return;
+
if (m2->type == 7)
setScriptFlags(4);
@@ -551,8 +554,6 @@ void EoBCoreEngine::drawMonsters(int index) {
SpriteDecoration *dcr = &_monsterDecorations[(p->decorations[ii] - 1) * 6 + subFrame + shpIndex - 1];
- if (!dcr)
- continue;
if (!dcr->shp)
continue;
@@ -652,6 +653,8 @@ void EoBCoreEngine::drawFlyingObjects(int index) {
}
}
+ assert(shp);
+
shp = _screen->scaleShape(shp, sclValue);
if (rstFade) {
diff --git a/engines/kyra/sprites_lol.cpp b/engines/kyra/sprites_lol.cpp
index 88b24e1367..4d4d596bac 100644
--- a/engines/kyra/sprites_lol.cpp
+++ b/engines/kyra/sprites_lol.cpp
@@ -503,7 +503,6 @@ int LoLEngine::checkBlockOccupiedByParty(int x, int y, int testFlag) {
void LoLEngine::drawBlockObjects(int blockArrayIndex) {
LevelBlockProperty *l = _visibleBlocks[blockArrayIndex];
uint16 s = l->assignedObjects;
- LoLObject *obj = findObject(s);
if (l->direction != _currentDirection) {
l->drawObjects = 0;
@@ -511,8 +510,7 @@ void LoLEngine::drawBlockObjects(int blockArrayIndex) {
while (s) {
reassignDrawObjects(_currentDirection, s, l, true);
- obj = findObject(s);
- s = obj->nextAssignedObject;
+ s = findObject(s)->nextAssignedObject;
}
}
@@ -567,6 +565,7 @@ void LoLEngine::drawBlockObjects(int blockArrayIndex) {
case 2:
case 6:
flg |= 0x10;
+ // fall through
case 0:
case 4:
shpIndex = _flyingItemShapes[shpIndex].shapeLeft;
diff --git a/engines/kyra/timer_eob.cpp b/engines/kyra/timer_eob.cpp
index effda22ac9..f7a4e23006 100644
--- a/engines/kyra/timer_eob.cpp
+++ b/engines/kyra/timer_eob.cpp
@@ -249,6 +249,7 @@ void EoBCoreEngine::timerSpecialCharacterUpdate(int timerNum) {
case 2:
case 3:
setCharEventTimer(charIndex, (c->effectFlags & 0x10000) ? 9 : 36, evt + 2, 1);
+ // fall through
case 0:
case 1:
case 4:
diff --git a/engines/parallaction/dialogue.cpp b/engines/parallaction/dialogue.cpp
index 78cc23311f..06ffd0b89b 100644
--- a/engines/parallaction/dialogue.cpp
+++ b/engines/parallaction/dialogue.cpp
@@ -238,7 +238,7 @@ int16 DialogueManager::selectAnswerN() {
_selection = _balloonMan->hitTestDialogueBalloon(_mousePos.x, _mousePos.y);
- VisibleAnswer *oldAnswer = &_visAnswers[_oldSelection];
+ VisibleAnswer *oldAnswer = (_oldSelection == NO_ANSWER_SELECTED) ? NULL : &_visAnswers[_oldSelection];
VisibleAnswer *answer = &_visAnswers[_selection];
if (_selection != _oldSelection) {
diff --git a/engines/parallaction/disk_ns.cpp b/engines/parallaction/disk_ns.cpp
index f03f16ca37..4c4893ec61 100644
--- a/engines/parallaction/disk_ns.cpp
+++ b/engines/parallaction/disk_ns.cpp
@@ -394,7 +394,7 @@ Frames* DosDisk_ns::loadFrames(const char* name) {
- path data [bit 8] (walkable areas)
*/
void DosDisk_ns::unpackBackground(Common::ReadStream *stream, byte *screen, byte *mask, byte *path) {
- byte storage[127];
+ byte storage[128];
uint32 storageLen = 0, len = 0;
uint32 j = 0;
diff --git a/engines/parallaction/input.cpp b/engines/parallaction/input.cpp
index 4fbd9b99cc..484e210893 100644
--- a/engines/parallaction/input.cpp
+++ b/engines/parallaction/input.cpp
@@ -551,8 +551,12 @@ void Input::setInventoryCursor(ItemName name) {
case GType_BRA: {
byte *src = _mouseArrow->getData(0);
byte *dst = _comboArrow->getData(0);
- memcpy(dst, src, _comboArrow->getSize(0));
// FIXME: destination offseting is not clear
+ Common::Rect srcRect, dstRect;
+ _mouseArrow->getRect(0, srcRect);
+ _comboArrow->getRect(0, dstRect);
+ for (uint y = 0; y < (uint)srcRect.height(); y++)
+ memcpy(dst + y * dstRect.width(), src + y * srcRect.width(), srcRect.width());
_vm->_inventoryRenderer->drawItem(name, dst + _mouseComboProps_BR._yOffset * _mouseComboProps_BR._width + _mouseComboProps_BR._xOffset, _mouseComboProps_BR._width);
CursorMan.replaceCursor(dst, _mouseComboProps_BR._width, _mouseComboProps_BR._height, 0, 0, 0);
break;
diff --git a/engines/parallaction/parser_ns.cpp b/engines/parallaction/parser_ns.cpp
index 41ff74f0b4..ac5e7c7135 100644
--- a/engines/parallaction/parser_ns.cpp
+++ b/engines/parallaction/parser_ns.cpp
@@ -292,7 +292,7 @@ void LocationParser_ns::parseAnimation(AnimationList &list, char *name) {
AnimationPtr a(new Animation);
_zoneProg++;
- strncpy(a->_name, name, ZONENAME_LENGTH);
+ Common::strlcpy(a->_name, name, ZONENAME_LENGTH);
a->_flags |= kFlagsIsAnimation;
list.push_front(AnimationPtr(a));
@@ -1312,7 +1312,7 @@ void LocationParser_ns::parseZone(ZoneList &list, char *name) {
ZonePtr z(new Zone);
_zoneProg++;
- strncpy(z->_name, name, ZONENAME_LENGTH);
+ Common::strlcpy(z->_name, name, ZONENAME_LENGTH);
ctxt.z = z;
diff --git a/engines/parallaction/sound_br.cpp b/engines/parallaction/sound_br.cpp
index ad510eb1f1..4a643aaf1d 100644
--- a/engines/parallaction/sound_br.cpp
+++ b/engines/parallaction/sound_br.cpp
@@ -507,10 +507,14 @@ void SoundMan_br::execute(int command, const char *parm) {
stopMusic();
break;
case SC_SETMUSICFILE:
+ if (!parm)
+ error("no parameter passed to SC_SETMUSICFILE");
setMusicFile(parm);
break;
case SC_PLAYSFX:
+ if (!parm)
+ error("no parameter passed to SC_PLAYSFX");
playSfx(parm, _sfxChannel, _sfxLooping, _sfxVolume);
break;
case SC_STOPSFX:
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index c5ff6b454b..50fae61de0 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -2227,6 +2227,7 @@ bool Console::cmdIsSample(int argc, const char **argv) {
DebugPrintf("Sample size: %d, sample rate: %d, channels: %d, digital channel number: %d\n",
track->digitalSampleSize, track->digitalSampleRate, track->channelCount, track->digitalChannelNr);
+ delete soundRes;
return true;
}
diff --git a/engines/sci/parser/vocabulary.cpp b/engines/sci/parser/vocabulary.cpp
index e56158ecc1..f5b79d6c5e 100644
--- a/engines/sci/parser/vocabulary.cpp
+++ b/engines/sci/parser/vocabulary.cpp
@@ -494,8 +494,6 @@ void Vocabulary::debugDecipherSaidBlock(const byte *addr) {
case 0xf9:
debugN(">");
break;
- case 0xff:
- break;
}
}
} while (nextItem != 0xff);
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp
index c9c0d25bc6..1da0c5dccc 100644
--- a/engines/sci/resource.cpp
+++ b/engines/sci/resource.cpp
@@ -1152,7 +1152,6 @@ ResVersion ResourceManager::detectMapVersion() {
}
break;
} else if (rsrc->getSourceType() == kSourceMacResourceFork) {
- delete fileStream;
return kResVersionSci11Mac;
}
}
diff --git a/engines/sci/sound/drivers/midi.cpp b/engines/sci/sound/drivers/midi.cpp
index a3d01753ff..a31d5f9a81 100644
--- a/engines/sci/sound/drivers/midi.cpp
+++ b/engines/sci/sound/drivers/midi.cpp
@@ -913,7 +913,8 @@ int MidiPlayer_Midi::open(ResourceManager *resMan) {
if (res) {
if (isMt32GmPatch(res->data, res->size)) {
readMt32GmPatch(res->data, res->size);
- strncpy((char *)_goodbyeMsg, " ScummVM ", 20);
+ // Note that _goodbyeMsg is not zero-terminated
+ memcpy(_goodbyeMsg, " ScummVM ", 20);
} else {
readMt32Patch(res->data, res->size);
}
diff --git a/engines/sword25/util/lua/ldo.cpp b/engines/sword25/util/lua/ldo.cpp
index c162a62e98..a230097f2a 100644
--- a/engines/sword25/util/lua/ldo.cpp
+++ b/engines/sword25/util/lua/ldo.cpp
@@ -98,6 +98,16 @@ static void resetstack (lua_State *L, int status) {
}
+// Added in ScummVM. Refer to http://www.lua.org/manual/5.1/manual.html
+static const char* luaErrorDescription[] = {
+ "No error",
+ "Coroutine yield", // not an actual error, see lua_resume
+ "Runtime error",
+ "Syntax error during pre-compilation", // refer to lua_load
+ "Memory allocation error",
+ "Error while running the error handler function"
+};
+
void luaD_throw (lua_State *L, int errcode) {
if (L->errorJmp) {
L->errorJmp->status = errcode;
diff --git a/engines/sword25/util/lua/lua.h b/engines/sword25/util/lua/lua.h
index 768ec1ad74..a3b7573ca5 100644
--- a/engines/sword25/util/lua/lua.h
+++ b/engines/sword25/util/lua/lua.h
@@ -48,16 +48,6 @@
#define LUA_ERRMEM 4
#define LUA_ERRERR 5
-// Added in ScummVM. Refer to http://www.lua.org/manual/5.1/manual.html
-static const char* luaErrorDescription[] = {
- "No error",
- "Coroutine yield", // not an actual error, see lua_resume
- "Runtime error",
- "Syntax error during pre-compilation", // refer to lua_load
- "Memory allocation error",
- "Error while running the error handler function"
-};
-
typedef struct lua_State lua_State;
typedef int (*lua_CFunction) (lua_State *L);
diff --git a/engines/wintermute/ad/ad_actor.cpp b/engines/wintermute/ad/ad_actor.cpp
index 1346a090f6..9879cc9f40 100644
--- a/engines/wintermute/ad/ad_actor.cpp
+++ b/engines/wintermute/ad/ad_actor.cpp
@@ -752,7 +752,7 @@ bool AdActor::update() {
_tempSprite2 = _sentence->_currentSprite;
}
- bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime);
+ bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime);
if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) {
if (timeIsUp) {
_sentence->finish();
@@ -915,7 +915,7 @@ void AdActor::getNextStep() {
//////////////////////////////////////////////////////////////////////////
-void AdActor::initLine(BasePoint startPt, BasePoint endPt) {
+void AdActor::initLine(const BasePoint &startPt, const BasePoint &endPt) {
_pFCount = MAX((abs(endPt.x - startPt.x)) , (abs(endPt.y - startPt.y)));
_pFStepX = (double)(endPt.x - startPt.x) / _pFCount;
diff --git a/engines/wintermute/ad/ad_actor.h b/engines/wintermute/ad/ad_actor.h
index bcec9db319..3630c6665b 100644
--- a/engines/wintermute/ad/ad_actor.h
+++ b/engines/wintermute/ad/ad_actor.h
@@ -83,24 +83,24 @@ private:
AdSpriteSet *getAnimByName(const Common::String &animName);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
bool setDefaultAnimNames();
BaseSprite *getTalkStanceOld(const char *stance);
bool mergeAnims(const char *animsFilename);
BaseSprite *_animSprite2;
- void initLine(BasePoint startPt, BasePoint endPt);
+ void initLine(const BasePoint &startPt, const BasePoint &endPt);
void getNextStep();
void followPath();
double _pFStepX;
double _pFStepY;
double _pFX;
double _pFY;
- int _pFCount;
+ int32 _pFCount;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_entity.cpp b/engines/wintermute/ad/ad_entity.cpp
index 259b68f291..6e47d0f072 100644
--- a/engines/wintermute/ad/ad_entity.cpp
+++ b/engines/wintermute/ad/ad_entity.cpp
@@ -627,7 +627,7 @@ bool AdEntity::update() {
_tempSprite2 = _sentence->_currentSprite;
}
- bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime);
+ bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime);
if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) {
if (timeIsUp) {
_sentence->finish();
diff --git a/engines/wintermute/ad/ad_entity.h b/engines/wintermute/ad/ad_entity.h
index 94921aaa27..c23b37366d 100644
--- a/engines/wintermute/ad/ad_entity.h
+++ b/engines/wintermute/ad/ad_entity.h
@@ -42,7 +42,7 @@ public:
void updatePosition();
virtual int getHeight();
BaseRegion *_region;
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
virtual bool update();
virtual bool display();
AdEntity(BaseGame *inGame);
@@ -56,10 +56,10 @@ public:
const char* getItemName() const;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
private:
int32 _walkToX;
int32 _walkToY;
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index b9775ba7d1..fac59dc473 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -43,7 +43,6 @@
#include "engines/wintermute/base/base_object.h"
#include "engines/wintermute/base/base_parser.h"
#include "engines/wintermute/base/sound/base_sound.h"
-#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/base/base_surface_storage.h"
#include "engines/wintermute/base/base_transition_manager.h"
#include "engines/wintermute/base/base_sprite.h"
@@ -520,9 +519,14 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
if (_responseBox) {
AdResponse *res = new AdResponse(_gameRef);
if (res) {
- res->_iD = id;
- res->setText(text);
- _stringTable->expand(&res->_text);
+ res->setID(id);
+
+ char *expandedText = new char[strlen(text) + 1];
+ Common::strlcpy(expandedText, text, strlen(text) + 1);
+ expandStringByStringTable(&expandedText);
+ res->setText(expandedText);
+ delete[] expandedText;
+
if (!val1->isNULL()) {
res->setIcon(val1->getString());
}
@@ -850,10 +854,10 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
int height = stack->pop()->getInt();
if (width <= 0) {
- width = _renderer->_width;
+ width = _renderer->getWidth();
}
if (height <= 0) {
- height = _renderer->_height;
+ height = _renderer->getHeight();
}
if (!_sceneViewport) {
@@ -1498,7 +1502,7 @@ bool AdGame::scheduleChangeScene(const char *filename, bool fadeIn) {
//////////////////////////////////////////////////////////////////////////
-bool AdGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) {
+bool AdGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const {
BaseGame::getVersion(verMajor, verMinor, nullptr, nullptr);
if (extMajor) {
@@ -1743,7 +1747,7 @@ bool AdGame::endDlgBranch(const char *branchName, const char *scriptName, const
//////////////////////////////////////////////////////////////////////////
bool AdGame::clearBranchResponses(char *name) {
for (uint32 i = 0; i < _responsesBranch.size(); i++) {
- if (scumm_stricmp(name, _responsesBranch[i]->_context) == 0) {
+ if (scumm_stricmp(name, _responsesBranch[i]->getContext()) == 0) {
delete _responsesBranch[i];
_responsesBranch.remove_at(i);
i--;
@@ -1767,11 +1771,11 @@ bool AdGame::addBranchResponse(int id) {
//////////////////////////////////////////////////////////////////////////
-bool AdGame::branchResponseUsed(int id) {
+bool AdGame::branchResponseUsed(int id) const {
char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr;
for (uint32 i = 0; i < _responsesBranch.size(); i++) {
if (_responsesBranch[i]->_id == id) {
- if ((context == nullptr && _responsesBranch[i]->_context == nullptr) || scumm_stricmp(context, _responsesBranch[i]->_context) == 0) {
+ if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0) {
return true;
}
}
@@ -1794,12 +1798,12 @@ bool AdGame::addGameResponse(int id) {
//////////////////////////////////////////////////////////////////////////
-bool AdGame::gameResponseUsed(int id) {
+bool AdGame::gameResponseUsed(int id) const {
char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr;
for (uint32 i = 0; i < _responsesGame.size(); i++) {
- AdResponseContext *respContext = _responsesGame[i];
+ const AdResponseContext *respContext = _responsesGame[i];
if (respContext->_id == id) {
- if ((context == nullptr && respContext->_context == nullptr) || ((context != nullptr && respContext->_context != nullptr) && scumm_stricmp(context, respContext->_context) == 0)) {
+ if ((context == nullptr && respContext->getContext() == nullptr) || ((context != nullptr && respContext->getContext() != nullptr) && scumm_stricmp(context, respContext->getContext()) == 0)) {
return true;
}
}
@@ -1814,7 +1818,7 @@ bool AdGame::resetResponse(int id) {
for (uint32 i = 0; i < _responsesGame.size(); i++) {
if (_responsesGame[i]->_id == id) {
- if ((context == nullptr && _responsesGame[i]->_context == nullptr) || scumm_stricmp(context, _responsesGame[i]->_context) == 0) {
+ if ((context == nullptr && _responsesGame[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesGame[i]->getContext()) == 0) {
delete _responsesGame[i];
_responsesGame.remove_at(i);
break;
@@ -1824,7 +1828,7 @@ bool AdGame::resetResponse(int id) {
for (uint32 i = 0; i < _responsesBranch.size(); i++) {
if (_responsesBranch[i]->_id == id) {
- if ((context == nullptr && _responsesBranch[i]->_context == nullptr) || scumm_stricmp(context, _responsesBranch[i]->_context) == 0) {
+ if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0) {
delete _responsesBranch[i];
_responsesBranch.remove_at(i);
break;
@@ -1959,7 +1963,7 @@ bool AdGame::isItemTaken(char *itemName) {
}
//////////////////////////////////////////////////////////////////////////
-AdItem *AdGame::getItemByName(const char *name) {
+AdItem *AdGame::getItemByName(const char *name) const {
for (uint32 i = 0; i < _items.size(); i++) {
if (scumm_stricmp(_items[i]->getName(), name) == 0) {
return _items[i];
@@ -2260,10 +2264,10 @@ bool AdGame::displayDebugInfo() {
char str[100];
if (_gameRef->_debugDebugMode) {
sprintf(str, "Mouse: %d, %d (scene: %d, %d)", _mousePos.x, _mousePos.y, _mousePos.x + _scene->getOffsetLeft(), _mousePos.y + _scene->getOffsetTop());
- _systemFont->drawText((byte *)str, 0, 90, _renderer->_width, TAL_RIGHT);
+ _systemFont->drawText((byte *)str, 0, 90, _renderer->getWidth(), TAL_RIGHT);
sprintf(str, "Scene: %s (prev: %s)", (_scene && _scene->getName()) ? _scene->getName() : "???", _prevSceneName ? _prevSceneName : "???");
- _systemFont->drawText((byte *)str, 0, 110, _renderer->_width, TAL_RIGHT);
+ _systemFont->drawText((byte *)str, 0, 110, _renderer->getWidth(), TAL_RIGHT);
}
return BaseGame::displayDebugInfo();
}
diff --git a/engines/wintermute/ad/ad_game.h b/engines/wintermute/ad/ad_game.h
index 81c79a3da8..2032a1723f 100644
--- a/engines/wintermute/ad/ad_game.h
+++ b/engines/wintermute/ad/ad_game.h
@@ -44,15 +44,15 @@ class AdResponseContext;
class AdResponseBox;
class AdGame : public BaseGame {
public:
- virtual bool onScriptShutdown(ScScript *script);
+ virtual bool onScriptShutdown(ScScript *script) override;
- virtual bool onMouseLeftDown();
- virtual bool onMouseLeftUp();
- virtual bool onMouseLeftDblClick();
- virtual bool onMouseRightDown();
- virtual bool onMouseRightUp();
+ virtual bool onMouseLeftDown() override;
+ virtual bool onMouseLeftUp() override;
+ virtual bool onMouseLeftDblClick() override;
+ virtual bool onMouseRightDown() override;
+ virtual bool onMouseRightUp() override;
- virtual bool displayDebugInfo();
+ virtual bool displayDebugInfo() override;
bool addSpeechDir(const char *dir);
bool removeSpeechDir(const char *dir);
@@ -63,37 +63,37 @@ public:
bool _tempDisableSaveState;
virtual bool resetContent();
bool addItem(AdItem *item);
- AdItem *getItemByName(const char *name);
+ AdItem *getItemByName(const char *name) const;
AdObject *_inventoryOwner;
bool isItemTaken(char *itemName);
bool registerInventory(AdInventory *inv);
bool unregisterInventory(AdInventory *inv);
- virtual bool displayContent(bool update = true, bool displayAll = false);
+ virtual bool displayContent(bool update = true, bool displayAll = false) override;
- bool gameResponseUsed(int ID);
+ bool gameResponseUsed(int ID) const;
bool addGameResponse(int ID);
bool resetResponse(int ID);
- bool branchResponseUsed(int ID);
+ bool branchResponseUsed(int ID) const;
bool addBranchResponse(int ID);
bool clearBranchResponses(char *name);
bool startDlgBranch(const char *branchName, const char *scriptName, const char *eventName);
bool endDlgBranch(const char *branchName, const char *scriptName, const char *eventName);
- virtual bool windowLoadHook(UIWindow *win, char **buf, char **params);
- virtual bool windowScriptMethodHook(UIWindow *win, ScScript *script, ScStack *stack, const char *name);
+ virtual bool windowLoadHook(UIWindow *win, char **buf, char **params) override;
+ virtual bool windowScriptMethodHook(UIWindow *win, ScScript *script, ScStack *stack, const char *name) override;
AdSceneState *getSceneState(const char *filename, bool saving);
BaseViewport *_sceneViewport;
- int _texItemLifeTime;
- int _texWalkLifeTime;
- int _texStandLifeTime;
- int _texTalkLifeTime;
+ int32 _texItemLifeTime;
+ int32 _texWalkLifeTime;
+ int32 _texStandLifeTime;
+ int32 _texTalkLifeTime;
TTalkSkipButton _talkSkipButton;
- virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor);
+ virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const override;
bool scheduleChangeScene(const char *filename, bool fadeIn);
void setPrevSceneName(const char *name);
void setPrevSceneFilename(const char *name);
@@ -126,12 +126,12 @@ public:
bool loadItemsBuffer(byte *buffer, bool merge = false);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
bool validMouse();
private:
- virtual bool externalCall(ScScript *script, ScStack *stack, ScStack *thisStack, char *name);
+ virtual bool externalCall(ScScript *script, ScStack *stack, ScStack *thisStack, char *name) override;
AdObject *_invObject;
BaseArray<AdInventory *> _inventories;
@@ -151,8 +151,8 @@ private:
BaseArray<AdSceneState *> _sceneStates;
BaseArray<char *> _dlgPendingBranches;
- BaseArray<AdResponseContext *> _responsesBranch;
- BaseArray<AdResponseContext *> _responsesGame;
+ BaseArray<const AdResponseContext *> _responsesBranch;
+ BaseArray<const AdResponseContext *> _responsesGame;
AdResponseBox *_responseBox;
AdInventoryBox *_inventoryBox;
diff --git a/engines/wintermute/ad/ad_inventory.h b/engines/wintermute/ad/ad_inventory.h
index f226a65612..999200b465 100644
--- a/engines/wintermute/ad/ad_inventory.h
+++ b/engines/wintermute/ad/ad_inventory.h
@@ -44,7 +44,7 @@ public:
AdInventory(BaseGame *inGame);
virtual ~AdInventory();
BaseArray<AdItem *> _takenItems;
- int _scrollOffset;
+ int32 _scrollOffset;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_inventory_box.cpp b/engines/wintermute/ad/ad_inventory_box.cpp
index 194d975155..4bb0905688 100644
--- a/engines/wintermute/ad/ad_inventory_box.cpp
+++ b/engines/wintermute/ad/ad_inventory_box.cpp
@@ -120,8 +120,8 @@ bool AdInventoryBox::display() {
if (_closeButton) {
_closeButton->_posX = _closeButton->_posY = 0;
- _closeButton->_width = _gameRef->_renderer->_width;
- _closeButton->_height = _gameRef->_renderer->_height;
+ _closeButton->_width = _gameRef->_renderer->getWidth();
+ _closeButton->_height = _gameRef->_renderer->getHeight();
_closeButton->display();
}
diff --git a/engines/wintermute/ad/ad_inventory_box.h b/engines/wintermute/ad/ad_inventory_box.h
index cb6d084562..9792b1ea66 100644
--- a/engines/wintermute/ad/ad_inventory_box.h
+++ b/engines/wintermute/ad/ad_inventory_box.h
@@ -43,8 +43,8 @@ public:
bool _visible;
virtual bool display();
UIButton *_closeButton;
- int _spacing;
- int _scrollOffset;
+ int32 _spacing;
+ int32 _scrollOffset;
Rect32 _itemsArea;
bool listen(BaseScriptHolder *param1, uint32 param2);
UIWindow *_window;
@@ -52,12 +52,12 @@ public:
virtual ~AdInventoryBox();
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
private:
bool _exclusive;
- int _scrollBy;
- int _itemHeight;
- int _itemWidth;
+ int32 _scrollBy;
+ int32 _itemHeight;
+ int32 _itemWidth;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_item.cpp b/engines/wintermute/ad/ad_item.cpp
index 8534956120..578105105c 100644
--- a/engines/wintermute/ad/ad_item.cpp
+++ b/engines/wintermute/ad/ad_item.cpp
@@ -378,7 +378,7 @@ bool AdItem::update() {
_tempSprite2 = _sentence->_currentSprite;
}
- bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime);
+ bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime);
if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) {
if (timeIsUp) {
_sentence->finish();
diff --git a/engines/wintermute/ad/ad_item.h b/engines/wintermute/ad/ad_item.h
index 79978f9f72..b8351448a7 100644
--- a/engines/wintermute/ad/ad_item.h
+++ b/engines/wintermute/ad/ad_item.h
@@ -51,15 +51,15 @@ public:
bool loadBuffer(byte *buffer, bool complete = true);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
private:
bool _displayAmount;
- int _amount;
- int _amountOffsetX;
- int _amountOffsetY;
+ int32 _amount;
+ int32 _amountOffsetX;
+ int32 _amountOffsetY;
TTextAlign _amountAlign;
char *_amountString;
};
diff --git a/engines/wintermute/ad/ad_layer.h b/engines/wintermute/ad/ad_layer.h
index de65e2822f..8fe4d4f91e 100644
--- a/engines/wintermute/ad/ad_layer.h
+++ b/engines/wintermute/ad/ad_layer.h
@@ -36,21 +36,21 @@ public:
bool _closeUp;
DECLARE_PERSISTENT(AdLayer, BaseObject)
bool _active;
- int _height;
- int _width;
+ int32 _height;
+ int32 _width;
bool _main;
AdLayer(BaseGame *inGame);
virtual ~AdLayer();
BaseArray<AdSceneNode *> _nodes;
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_node_state.cpp b/engines/wintermute/ad/ad_node_state.cpp
index 34e220569f..c741dec54f 100644
--- a/engines/wintermute/ad/ad_node_state.cpp
+++ b/engines/wintermute/ad/ad_node_state.cpp
@@ -29,7 +29,6 @@
#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/ad/ad_node_state.h"
#include "engines/wintermute/ad/ad_entity.h"
-#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/utils/utils.h"
#include "engines/wintermute/platform_osystem.h"
@@ -122,7 +121,7 @@ void AdNodeState::setCaption(const char *caption, int caseVal) {
_caption[caseVal - 1] = new char[strlen(caption) + 1];
if (_caption[caseVal - 1]) {
strcpy(_caption[caseVal - 1], caption);
- _gameRef->_stringTable->expand(&_caption[caseVal - 1]);
+ _gameRef->expandStringByStringTable(&_caption[caseVal - 1]);
}
}
diff --git a/engines/wintermute/ad/ad_object.cpp b/engines/wintermute/ad/ad_object.cpp
index a41ed9fbc3..9026b2849c 100644
--- a/engines/wintermute/ad/ad_object.cpp
+++ b/engines/wintermute/ad/ad_object.cpp
@@ -38,7 +38,6 @@
#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/base/base_frame.h"
#include "engines/wintermute/base/base_sprite.h"
-#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/base/base_sub_frame.h"
#include "engines/wintermute/base/base_surface_storage.h"
#include "engines/wintermute/base/font/base_font.h"
@@ -901,11 +900,11 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
_sentence->_sound = nullptr;
_sentence->setText(text);
- _gameRef->_stringTable->expand(&_sentence->_text);
+ _gameRef->expandStringByStringTable(&_sentence->_text);
_sentence->setStances(stances);
_sentence->_duration = duration;
_sentence->_align = Align;
- _sentence->_startTime = _gameRef->_timer;
+ _sentence->_startTime = _gameRef->getTimer()->getTime();
_sentence->_currentStance = -1;
_sentence->_font = _font == nullptr ? _gameRef->getSystemFont() : _font;
_sentence->_freezable = _freezable;
@@ -913,7 +912,7 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
// try to locate speech file automatically
bool deleteSound = false;
if (!sound) {
- char *key = _gameRef->_stringTable->getKey(text);
+ char *key = _gameRef->getKeyFromStringTable(text);
if (key) {
sound = ((AdGame *)_gameRef)->findSpeechFile(key);
delete[] key;
@@ -960,10 +959,10 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
if (_subtitlesWidth > 0) {
width = _subtitlesWidth;
} else {
- if ((x < _gameRef->_renderer->_width / 4 || x > _gameRef->_renderer->_width * 0.75) && !_gameRef->_touchInterface) {
- width = MAX(_gameRef->_renderer->_width / 4, MIN(x * 2, (_gameRef->_renderer->_width - x) * 2));
+ if ((x < _gameRef->_renderer->getWidth() / 4 || x > _gameRef->_renderer->getWidth() * 0.75) && !_gameRef->_touchInterface) {
+ width = MAX(_gameRef->_renderer->getWidth() / 4, MIN(x * 2, (_gameRef->_renderer->getWidth() - x) * 2));
} else {
- width = _gameRef->_renderer->_width / 2;
+ width = _gameRef->_renderer->getWidth() / 2;
}
}
@@ -982,8 +981,8 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
}
- x = MIN(MAX(0, x), _gameRef->_renderer->_width - width);
- y = MIN(MAX(0, y), _gameRef->_renderer->_height - height);
+ x = MIN(MAX(0, x), _gameRef->_renderer->getWidth() - width);
+ y = MIN(MAX(0, y), _gameRef->_renderer->getHeight() - height);
_sentence->_width = width;
diff --git a/engines/wintermute/ad/ad_object.h b/engines/wintermute/ad/ad_object.h
index 39480e3446..c6573315da 100644
--- a/engines/wintermute/ad/ad_object.h
+++ b/engines/wintermute/ad/ad_object.h
@@ -55,17 +55,17 @@ public:
bool updateBlockRegion();
- virtual bool getExtendedFlag(const char *flagName);
- virtual bool resetSoundPan();
- virtual bool updateSounds();
+ virtual bool getExtendedFlag(const char *flagName) override;
+ virtual bool resetSoundPan() override;
+ virtual bool updateSounds() override;
bool reset();
DECLARE_PERSISTENT(AdObject, BaseObject)
virtual void talk(const char *text, const char *sound = nullptr, uint32 duration = 0, const char *stances = nullptr, TTextAlign align = TAL_CENTER);
- virtual int getHeight();
+ virtual int getHeight() override;
bool setFont(const char *filename);
- virtual bool update();
- virtual bool display();
+ virtual bool update() override;
+ virtual bool display() override;
bool _drawn;
bool _active;
@@ -79,14 +79,14 @@ public:
AdWaypointGroup *_currentWptGroup;
AdInventory *getInventory();
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
- virtual bool afterMove();
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
+ virtual bool afterMove() override;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
bool updateSpriteAttachments();
bool displaySpriteAttachments(bool preDisplay);
@@ -109,13 +109,13 @@ protected:
bool getScale(float *scaleX, float *scaleY);
private:
bool _partFollowParent;
- int _partOffsetX;
- int _partOffsetY;
+ int32 _partOffsetX;
+ int32 _partOffsetY;
bool _subtitlesModRelative;
bool _subtitlesModXCenter;
- int _subtitlesModX;
- int _subtitlesModY;
- int _subtitlesWidth;
+ int32 _subtitlesModX;
+ int32 _subtitlesModY;
+ int32 _subtitlesWidth;
AdRegion *_currentRegions[MAX_NUM_REGIONS];
BaseArray<AdObject *> _attachmentsPre;
BaseArray<AdObject *> _attachmentsPost;
diff --git a/engines/wintermute/ad/ad_path.h b/engines/wintermute/ad/ad_path.h
index 6b043197aa..3f38355b94 100644
--- a/engines/wintermute/ad/ad_path.h
+++ b/engines/wintermute/ad/ad_path.h
@@ -47,7 +47,7 @@ public:
AdPath(BaseGame *inGame);
virtual ~AdPath();
BaseArray<BasePoint *> _points;
- int _currIndex;
+ int32 _currIndex;
bool _ready;
};
diff --git a/engines/wintermute/ad/ad_path_point.h b/engines/wintermute/ad/ad_path_point.h
index 58457976c8..04648b1733 100644
--- a/engines/wintermute/ad/ad_path_point.h
+++ b/engines/wintermute/ad/ad_path_point.h
@@ -42,7 +42,7 @@ public:
virtual ~AdPathPoint();
AdPathPoint *_origin;
bool _marked;
- int _distance;
+ int32 _distance;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_region.h b/engines/wintermute/ad/ad_region.h
index 960dde5f15..bc9eab085e 100644
--- a/engines/wintermute/ad/ad_region.h
+++ b/engines/wintermute/ad/ad_region.h
@@ -41,17 +41,17 @@ public:
virtual ~AdRegion();
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
bool hasDecoration() const;
bool isBlocked() const;
uint32 getAlpha() const;
float getZoom() const;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
private:
uint32 _alpha;
float _zoom;
diff --git a/engines/wintermute/ad/ad_response.cpp b/engines/wintermute/ad/ad_response.cpp
index e4993b9ad4..0e6817ae6f 100644
--- a/engines/wintermute/ad/ad_response.cpp
+++ b/engines/wintermute/ad/ad_response.cpp
@@ -143,4 +143,36 @@ bool AdResponse::persist(BasePersistenceManager *persistMgr) {
return STATUS_OK;
}
+void AdResponse::setID(int32 id) {
+ _iD = id;
+}
+
+BaseSprite *AdResponse::getIcon() const {
+ return _icon;
+}
+
+BaseSprite *AdResponse::getIconHover() const {
+ return _iconHover;
+}
+
+BaseSprite *AdResponse::getIconPressed() const {
+ return _iconPressed;
+}
+
+BaseFont *AdResponse::getFont() const {
+ return _font;
+}
+
+int32 AdResponse::getID() const {
+ return _iD;
+}
+
+const char *AdResponse::getText() const {
+ return _text;
+}
+
+const char *AdResponse::getTextOrig() const {
+ return _textOrig;
+}
+
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_response.h b/engines/wintermute/ad/ad_response.h
index 2119067d3e..57cd302e9d 100644
--- a/engines/wintermute/ad/ad_response.h
+++ b/engines/wintermute/ad/ad_response.h
@@ -43,17 +43,29 @@ public:
bool setIconHover(const char *filename);
bool setIconPressed(const char *filename);
void setText(const char *text);
- int32 _iD;
+ void setID(int32 id);
+ BaseSprite *getIcon() const;
+ BaseSprite *getIconHover() const;
+ BaseSprite *getIconPressed() const;
+ BaseFont *getFont() const;
+ int32 getID() const;
+
+ const char *getText() const;
+ const char *getTextOrig() const;
+
+ AdResponse(BaseGame *inGame);
+ virtual ~AdResponse();
+ TResponseType _responseType;
+private:
BaseSprite *_icon;
BaseSprite *_iconHover;
BaseSprite *_iconPressed;
BaseFont *_font;
+
+ int32 _iD;
+
char *_text;
char *_textOrig;
- AdResponse(BaseGame *inGame);
- virtual ~AdResponse();
- TResponseType _responseType;
-
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp
index c891d2a019..a4e59c6a49 100644
--- a/engines/wintermute/ad/ad_response_box.cpp
+++ b/engines/wintermute/ad/ad_response_box.cpp
@@ -144,16 +144,16 @@ bool AdResponseBox::createButtons() {
btn->_sharedFonts = btn->_sharedImages = true;
btn->_sharedCursors = true;
// iconic
- if (_responses[i]->_icon) {
- btn->_image = _responses[i]->_icon;
- if (_responses[i]->_iconHover) {
- btn->_imageHover = _responses[i]->_iconHover;
+ if (_responses[i]->getIcon()) {
+ btn->_image = _responses[i]->getIcon();
+ if (_responses[i]->getIconHover()) {
+ btn->_imageHover = _responses[i]->getIconHover();
}
- if (_responses[i]->_iconPressed) {
- btn->_imagePress = _responses[i]->_iconPressed;
+ if (_responses[i]->getIconPressed()) {
+ btn->_imagePress = _responses[i]->getIconPressed();
}
- btn->setCaption(_responses[i]->_text);
+ btn->setCaption(_responses[i]->getText());
if (_cursor) {
btn->_cursor = _cursor;
} else if (_gameRef->_activeCursor) {
@@ -162,7 +162,7 @@ bool AdResponseBox::createButtons() {
}
// textual
else {
- btn->setText(_responses[i]->_text);
+ btn->setText(_responses[i]->getText());
btn->_font = (_font == nullptr) ? _gameRef->getSystemFont() : _font;
btn->_fontHover = (_fontHover == nullptr) ? _gameRef->getSystemFont() : _fontHover;
btn->_fontPress = btn->_fontHover;
@@ -173,13 +173,13 @@ bool AdResponseBox::createButtons() {
}
- if (_responses[i]->_font) {
- btn->_font = _responses[i]->_font;
+ if (_responses[i]->getFont()) {
+ btn->_font = _responses[i]->getFont();
}
btn->_width = _responseArea.right - _responseArea.left;
if (btn->_width <= 0) {
- btn->_width = _gameRef->_renderer->_width;
+ btn->_width = _gameRef->_renderer->getWidth();
}
}
btn->setName("response");
@@ -196,7 +196,7 @@ bool AdResponseBox::createButtons() {
_respButtons.add(btn);
if (_responseArea.bottom - _responseArea.top < btn->_height) {
- _gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->_text);
+ _gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->getText());
_responseArea.bottom += (btn->_height - (_responseArea.bottom - _responseArea.top));
}
}
@@ -515,8 +515,8 @@ bool AdResponseBox::display() {
// go exclusive
if (_shieldWindow) {
_shieldWindow->_posX = _shieldWindow->_posY = 0;
- _shieldWindow->_width = _gameRef->_renderer->_width;
- _shieldWindow->_height = _gameRef->_renderer->_height;
+ _shieldWindow->_width = _gameRef->_renderer->getWidth();
+ _shieldWindow->_height = _gameRef->_renderer->getHeight();
_shieldWindow->display();
}
@@ -548,7 +548,7 @@ bool AdResponseBox::listen(BaseScriptHolder *param1, uint32 param2) {
_scrollOffset++;
} else if (scumm_stricmp(obj->getName(), "response") == 0) {
if (_waitingScript) {
- _waitingScript->_stack->pushInt(_responses[param2]->_iD);
+ _waitingScript->_stack->pushInt(_responses[param2]->getID());
}
handleResponse(_responses[param2]);
_waitingScript = nullptr;
@@ -601,7 +601,7 @@ bool AdResponseBox::weedResponses() {
for (uint32 i = 0; i < _responses.size(); i++) {
switch (_responses[i]->_responseType) {
case RESPONSE_ONCE:
- if (adGame->branchResponseUsed(_responses[i]->_iD)) {
+ if (adGame->branchResponseUsed(_responses[i]->getID())) {
delete _responses[i];
_responses.remove_at(i);
i--;
@@ -609,7 +609,7 @@ bool AdResponseBox::weedResponses() {
break;
case RESPONSE_ONCE_GAME:
- if (adGame->gameResponseUsed(_responses[i]->_iD)) {
+ if (adGame->gameResponseUsed(_responses[i]->getID())) {
delete _responses[i];
_responses.remove_at(i);
i--;
@@ -642,13 +642,13 @@ UIWindow *AdResponseBox::getResponseWindow() {
return _window;
}
-void AdResponseBox::addResponse(AdResponse *response) {
+void AdResponseBox::addResponse(const AdResponse *response) {
_responses.add(response);
}
int32 AdResponseBox::getIdForResponseNum(uint32 num) const {
assert(num < _responses.size());
- return _responses[num]->_iD;
+ return _responses[num]->getID();
}
bool AdResponseBox::handleResponseNum(uint32 num) {
@@ -656,18 +656,18 @@ bool AdResponseBox::handleResponseNum(uint32 num) {
}
//////////////////////////////////////////////////////////////////////////
-bool AdResponseBox::handleResponse(AdResponse *response) {
- setLastResponseText(response->_text, response->_textOrig);
+bool AdResponseBox::handleResponse(const AdResponse *response) {
+ setLastResponseText(response->getText(), response->getTextOrig());
AdGame *adGame = (AdGame *)_gameRef;
switch (response->_responseType) {
case RESPONSE_ONCE:
- adGame->addBranchResponse(response->_iD);
+ adGame->addBranchResponse(response->getID());
break;
case RESPONSE_ONCE_GAME:
- adGame->addGameResponse(response->_iD);
+ adGame->addGameResponse(response->getID());
break;
default:
debugC(kWintermuteDebugGeneral, "AdResponseBox::HandleResponse - Unhandled enum");
diff --git a/engines/wintermute/ad/ad_response_box.h b/engines/wintermute/ad/ad_response_box.h
index 3b180062b6..cb57b98924 100644
--- a/engines/wintermute/ad/ad_response_box.h
+++ b/engines/wintermute/ad/ad_response_box.h
@@ -44,8 +44,8 @@ public:
BaseObject *getPrevAccessObject(BaseObject *CurrObject);
bool getObjects(BaseArray<UIObject *> &objects, bool interactiveOnly);
- void addResponse(AdResponse* response);
- bool handleResponse(AdResponse *response);
+ void addResponse(const AdResponse* response);
+ bool handleResponse(const AdResponse *response);
bool handleResponseNum(uint32 num);
int32 getIdForResponseNum(uint32 num) const;
void setLastResponseText(const char *text, const char *textOrig);
@@ -73,21 +73,21 @@ public:
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
UIWindow *getResponseWindow();
uint32 getNumResponses() const;
private:
- int _spacing;
- int _scrollOffset;
+ int32 _spacing;
+ int32 _scrollOffset;
BaseFont *_fontHover;
BaseFont *_font;
bool _horizontal;
Rect32 _responseArea;
- int _verticalAlign;
+ int32 _verticalAlign;
TTextAlign _align;
BaseArray<UIButton *> _respButtons;
- BaseArray<AdResponse *> _responses;
+ BaseArray<const AdResponse *> _responses;
UIWindow *_shieldWindow;
char *_lastResponseText;
char *_lastResponseTextOrig;
diff --git a/engines/wintermute/ad/ad_response_context.h b/engines/wintermute/ad/ad_response_context.h
index 14bc1abd93..dd0008a728 100644
--- a/engines/wintermute/ad/ad_response_context.h
+++ b/engines/wintermute/ad/ad_response_context.h
@@ -37,12 +37,14 @@ namespace Wintermute {
class AdResponseContext : public BaseClass {
public:
void setContext(const char *context);
- int _id;
- char *_context;
+ const char *getContext() const { return _context; }
+ int32 _id;
+
DECLARE_PERSISTENT(AdResponseContext, BaseClass)
AdResponseContext(BaseGame *inGame);
virtual ~AdResponseContext();
-
+private:
+ char *_context;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_rot_level.h b/engines/wintermute/ad/ad_rot_level.h
index d7f5f8edf0..3466e46ba5 100644
--- a/engines/wintermute/ad/ad_rot_level.h
+++ b/engines/wintermute/ad/ad_rot_level.h
@@ -34,12 +34,13 @@
namespace Wintermute {
class AdRotLevel : public BaseObject {
+ float _rotation;
public:
DECLARE_PERSISTENT(AdRotLevel, BaseObject)
AdRotLevel(BaseGame *inGame);
virtual ~AdRotLevel();
- float _rotation;
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ float getRotation() const { return _rotation; }
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
};
diff --git a/engines/wintermute/ad/ad_scale_level.h b/engines/wintermute/ad/ad_scale_level.h
index 5c206423cf..516f507a5a 100644
--- a/engines/wintermute/ad/ad_scale_level.h
+++ b/engines/wintermute/ad/ad_scale_level.h
@@ -39,7 +39,7 @@ public:
DECLARE_PERSISTENT(AdScaleLevel, BaseObject)
AdScaleLevel(BaseGame *inGame);
virtual ~AdScaleLevel();
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
float getScale() const;
diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index f305c2f60e..699ef0685d 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -189,7 +189,7 @@ void AdScene::cleanup() {
//////////////////////////////////////////////////////////////////////////
-bool AdScene::getPath(BasePoint source, BasePoint target, AdPath *path, BaseObject *requester) {
+bool AdScene::getPath(const BasePoint &source, const BasePoint &target, AdPath *path, BaseObject *requester) {
if (!_pfReady) {
return false;
} else {
@@ -420,7 +420,7 @@ bool AdScene::isWalkableAt(int x, int y, bool checkFreeObjects, BaseObject *requ
//////////////////////////////////////////////////////////////////////////
-int AdScene::getPointsDist(BasePoint p1, BasePoint p2, BaseObject *requester) {
+int AdScene::getPointsDist(const BasePoint &p1, const BasePoint &p2, BaseObject *requester) {
double xStep, yStep, x, y;
int xLength, yLength, xCount, yCount;
int x1, y1, x2, y2;
@@ -755,7 +755,7 @@ bool AdScene::loadBuffer(byte *buffer, bool complete) {
break;
case TOKEN_CAMERA:
- strcpy(camera, (char *)params);
+ Common::strlcpy(camera, (char *)params, MAX_PATH_LENGTH);
break;
case TOKEN_EDITOR_MARGIN_H:
@@ -931,13 +931,13 @@ bool AdScene::traverseNodes(bool doUpdate) {
if (_autoScroll) {
// adjust horizontal scroll
- if (_gameRef->_timer - _lastTimeH >= _scrollTimeH) {
- int timesMissed = (_gameRef->_timer - _lastTimeH) / _scrollTimeH;
+ if (_gameRef->getTimer()->getTime() - _lastTimeH >= _scrollTimeH) {
+ int timesMissed = (_gameRef->getTimer()->getTime() - _lastTimeH) / _scrollTimeH;
// Cap the amount of catch-up to avoid jittery characters.
if (timesMissed > 2) {
timesMissed = 2;
}
- _lastTimeH = _gameRef->_timer;
+ _lastTimeH = _gameRef->getTimer()->getTime();
if (_offsetLeft < _targetOffsetLeft) {
_offsetLeft += _scrollPixelsH * timesMissed;
_offsetLeft = MIN(_offsetLeft, _targetOffsetLeft);
@@ -948,13 +948,13 @@ bool AdScene::traverseNodes(bool doUpdate) {
}
// adjust vertical scroll
- if (_gameRef->_timer - _lastTimeV >= _scrollTimeV) {
- int timesMissed = (_gameRef->_timer - _lastTimeV) / _scrollTimeV;
+ if (_gameRef->getTimer()->getTime() - _lastTimeV >= _scrollTimeV) {
+ int timesMissed = (_gameRef->getTimer()->getTime() - _lastTimeV) / _scrollTimeV;
// Cap the amount of catch-up to avoid jittery characters.
if (timesMissed > 2) {
timesMissed = 2;
}
- _lastTimeV = _gameRef->_timer;
+ _lastTimeV = _gameRef->getTimer()->getTime();
if (_offsetTop < _targetOffsetTop) {
_offsetTop += _scrollPixelsV * timesMissed;
_offsetTop = MIN(_offsetTop, _targetOffsetTop);
@@ -1014,8 +1014,8 @@ bool AdScene::traverseNodes(bool doUpdate) {
}
if (_shieldWindow) {
_shieldWindow->_posX = _shieldWindow->_posY = 0;
- _shieldWindow->_width = _gameRef->_renderer->_width;
- _shieldWindow->_height = _gameRef->_renderer->_height;
+ _shieldWindow->_width = _gameRef->_renderer->getWidth();
+ _shieldWindow->_height = _gameRef->_renderer->getHeight();
_shieldWindow->display();
}
}
@@ -1694,10 +1694,10 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
int height = stack->pop()->getInt();
if (width <= 0) {
- width = _gameRef->_renderer->_width;
+ width = _gameRef->_renderer->getWidth();
}
if (height <= 0) {
- height = _gameRef->_renderer->_height;
+ height = _gameRef->_renderer->getHeight();
}
if (!_viewport) {
@@ -2569,10 +2569,10 @@ bool AdScene::getViewportSize(int *width, int *height) {
}
} else {
if (width) {
- *width = _gameRef->_renderer->_width;
+ *width = _gameRef->_renderer->getWidth();
}
if (height) {
- *height = _gameRef->_renderer->_height;
+ *height = _gameRef->_renderer->getHeight();
}
}
return STATUS_OK;
@@ -2774,11 +2774,11 @@ float AdScene::getRotationAt(int x, int y) {
}
int delta_x = next->_posX - prev->_posX;
- float delta_rot = next->_rotation - prev->_rotation;
+ float delta_rot = next->getRotation() - prev->getRotation();
x -= prev->_posX;
float percent = (float)x / ((float)delta_x / 100.0f);
- return prev->_rotation + delta_rot / 100 * percent;
+ return prev->getRotation() + delta_rot / 100 * percent;
}
diff --git a/engines/wintermute/ad/ad_scene.h b/engines/wintermute/ad/ad_scene.h
index 9cc8135889..9ddef73b65 100644
--- a/engines/wintermute/ad/ad_scene.h
+++ b/engines/wintermute/ad/ad_scene.h
@@ -87,7 +87,7 @@ public:
float getScaleAt(int y);
bool sortScaleLevels();
bool sortRotLevels();
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
uint32 getAlphaAt(int x, int y, bool colorCheck = false);
bool _paralaxScrolling;
void skipTo(int offsetX, int offsetY);
@@ -96,7 +96,7 @@ public:
void skipToObject(BaseObject *object);
void scrollToObject(BaseObject *object);
void scrollTo(int offsetX, int offsetY);
- virtual bool update();
+ virtual bool update() override;
bool _autoScroll;
int _targetOffsetTop;
int _targetOffsetLeft;
@@ -117,7 +117,7 @@ public:
bool isWalkableAt(int x, int y, bool checkFreeObjects = false, BaseObject *requester = nullptr);
AdLayer *_mainLayer;
float getZoomAt(int x, int y);
- bool getPath(BasePoint source, BasePoint target, AdPath *path, BaseObject *requester = nullptr);
+ bool getPath(const BasePoint &source, const BasePoint &target, AdPath *path, BaseObject *requester = nullptr);
AdScene(BaseGame *inGame);
virtual ~AdScene();
BaseArray<AdLayer *> _layers;
@@ -125,12 +125,12 @@ public:
BaseArray<AdWaypointGroup *> _waypointGroups;
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- int _width;
- int _height;
+ int32 _width;
+ int32 _height;
bool addObject(AdObject *Object);
bool removeObject(AdObject *Object);
- int _editorMarginH;
- int _editorMarginV;
+ int32 _editorMarginH;
+ int32 _editorMarginV;
uint32 _editorColFrame;
uint32 _editorColEntity;
uint32 _editorColRegion;
@@ -153,13 +153,13 @@ public:
BaseArray<AdRotLevel *> _rotLevels;
virtual bool restoreDeviceObjects();
- int getPointsDist(BasePoint p1, BasePoint p2, BaseObject *requester = nullptr);
+ int getPointsDist(const BasePoint &p1, const BasePoint &p2, BaseObject *requester = nullptr);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
private:
diff --git a/engines/wintermute/ad/ad_sentence.cpp b/engines/wintermute/ad/ad_sentence.cpp
index 47b22a1ab3..9192b74c4e 100644
--- a/engines/wintermute/ad/ad_sentence.cpp
+++ b/engines/wintermute/ad/ad_sentence.cpp
@@ -56,7 +56,7 @@ AdSentence::AdSentence(BaseGame *inGame) : BaseClass(inGame) {
_font = nullptr;
_pos.x = _pos.y = 0;
- _width = _gameRef->_renderer->_width;
+ _width = _gameRef->_renderer->getWidth();
_align = (TTextAlign)TAL_CENTER;
@@ -214,7 +214,7 @@ bool AdSentence::display() {
x = MAX(x, 0);
- x = MIN(x, _gameRef->_renderer->_width - _width);
+ x = MIN(x, _gameRef->_renderer->getWidth() - _width);
y = MAX(y, 0);
_font->drawText((byte *)_text, x, y, _width, _align);
@@ -314,9 +314,9 @@ bool AdSentence::update(TDirection dir) {
/*
if (_sound) CurrentTime = _sound->GetPositionTime();
- else CurrentTime = _gameRef->_timer - _startTime;
+ else CurrentTime = _gameRef->getTimer()->getTime() - _startTime;
*/
- currentTime = _gameRef->_timer - _startTime;
+ currentTime = _gameRef->getTimer()->getTime() - _startTime;
bool talkNodeFound = false;
for (uint32 i = 0; i < _talkDef->_nodes.size(); i++) {
@@ -355,7 +355,7 @@ bool AdSentence::update(TDirection dir) {
//////////////////////////////////////////////////////////////////////////
bool AdSentence::canSkip() {
// prevent accidental sentence skipping (TODO make configurable)
- return (_gameRef->_timer - _startTime) > 300;
+ return (_gameRef->getTimer()->getTime() - _startTime) > 300;
}
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_sentence.h b/engines/wintermute/ad/ad_sentence.h
index e7c94030b9..6f255578f7 100644
--- a/engines/wintermute/ad/ad_sentence.h
+++ b/engines/wintermute/ad/ad_sentence.h
@@ -56,14 +56,14 @@ public:
BaseSound *_sound;
TTextAlign _align;
bool display();
- int _width;
+ int32 _width;
Point32 _pos;
BaseFont *_font;
char *getNextStance();
char *getCurrentStance();
void setStances(const char *stances);
void setText(const char *text);
- int _currentStance;
+ int32 _currentStance;
uint32 _startTime;
char *_stances;
char *_text;
diff --git a/engines/wintermute/ad/ad_sprite_set.h b/engines/wintermute/ad/ad_sprite_set.h
index 3960b5dcc7..61043aa3d6 100644
--- a/engines/wintermute/ad/ad_sprite_set.h
+++ b/engines/wintermute/ad/ad_sprite_set.h
@@ -37,7 +37,7 @@ class BaseSprite;
class AdSpriteSet : public BaseObject {
public:
bool containsSprite(BaseSprite *sprite);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0) override;
BaseSprite *getSprite(TDirection direction);
DECLARE_PERSISTENT(AdSpriteSet, BaseObject)
BaseObject *_owner;
diff --git a/engines/wintermute/ad/ad_talk_def.h b/engines/wintermute/ad/ad_talk_def.h
index d147212775..2375360d89 100644
--- a/engines/wintermute/ad/ad_talk_def.h
+++ b/engines/wintermute/ad/ad_talk_def.h
@@ -50,7 +50,7 @@ public:
BaseArray<AdTalkNode *> _nodes;
char *_defaultSpriteFilename;
BaseSprite *_defaultSprite;
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0) override;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_talk_holder.h b/engines/wintermute/ad/ad_talk_holder.h
index d52ebf63c0..501acbc885 100644
--- a/engines/wintermute/ad/ad_talk_holder.h
+++ b/engines/wintermute/ad/ad_talk_holder.h
@@ -37,7 +37,7 @@ class AdTalkHolder : public AdObject {
public:
DECLARE_PERSISTENT(AdTalkHolder, AdObject)
virtual BaseSprite *getTalkStance(const char *stance);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
BaseSprite *_sprite;
BaseArray<BaseSprite *> _talkSprites;
BaseArray<BaseSprite *> _talkSpritesEx;
@@ -45,10 +45,10 @@ public:
virtual ~AdTalkHolder();
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
};
diff --git a/engines/wintermute/ad/ad_talk_node.h b/engines/wintermute/ad/ad_talk_node.h
index 7dfd861f85..012fa2133e 100644
--- a/engines/wintermute/ad/ad_talk_node.h
+++ b/engines/wintermute/ad/ad_talk_node.h
@@ -47,7 +47,7 @@ public:
AdTalkNode(BaseGame *inGame);
virtual ~AdTalkNode();
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent = 0) override;
char *_spriteFilename;
BaseSprite *_sprite;
uint32 _startTime;
diff --git a/engines/wintermute/ad/ad_waypoint_group.h b/engines/wintermute/ad/ad_waypoint_group.h
index 7e427313e6..79b28e0d22 100644
--- a/engines/wintermute/ad/ad_waypoint_group.h
+++ b/engines/wintermute/ad/ad_waypoint_group.h
@@ -38,7 +38,7 @@ public:
void cleanup();
bool mimic(AdWaypointGroup *wpt, float scale = 100.0f, int x = 0, int y = 0);
DECLARE_PERSISTENT(AdWaypointGroup, BaseObject)
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
AdWaypointGroup(BaseGame *inGame);
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
@@ -50,10 +50,10 @@ public:
virtual ScValue *scGetProperty(const Common::String &name);
virtual bool scSetProperty(const char *name, ScValue *value);
private:
- int _editorSelectedPoint;
+ int32 _editorSelectedPoint;
float _lastMimicScale;
- int _lastMimicX;
- int _lastMimicY;
+ int32 _lastMimicX;
+ int32 _lastMimicY;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base.cpp b/engines/wintermute/base/base.cpp
index c0459b0ce5..d01972b82f 100644
--- a/engines/wintermute/base/base.cpp
+++ b/engines/wintermute/base/base.cpp
@@ -28,6 +28,7 @@
#include "engines/wintermute/base/base.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_parser.h"
#include "engines/wintermute/base/base_dynamic_buffer.h"
@@ -105,7 +106,7 @@ bool BaseClass::parseEditorProperty(byte *buffer, bool complete) {
if (complete) {
if (parser.getCommand((char **)&buffer, commands, (char **)&params) != TOKEN_EDITOR_PROPERTY) {
- _gameRef->LOG(0, "'EDITOR_PROPERTY' keyword expected.");
+ BaseEngine::LOG(0, "'EDITOR_PROPERTY' keyword expected.");
return STATUS_FAILED;
}
buffer = params;
@@ -143,7 +144,7 @@ bool BaseClass::parseEditorProperty(byte *buffer, bool complete) {
delete[] propValue;
propName = nullptr;
propValue = nullptr;
- _gameRef->LOG(0, "Syntax error in EDITOR_PROPERTY definition");
+ BaseEngine::LOG(0, "Syntax error in EDITOR_PROPERTY definition");
return STATUS_FAILED;
}
if (cmd == PARSERR_GENERIC || propName == nullptr || propValue == nullptr) {
@@ -151,7 +152,7 @@ bool BaseClass::parseEditorProperty(byte *buffer, bool complete) {
delete[] propValue;
propName = nullptr;
propValue = nullptr;
- _gameRef->LOG(0, "Error loading EDITOR_PROPERTY definition");
+ BaseEngine::LOG(0, "Error loading EDITOR_PROPERTY definition");
return STATUS_FAILED;
}
diff --git a/engines/wintermute/base/base_active_rect.cpp b/engines/wintermute/base/base_active_rect.cpp
index 4c62cf9561..7a91854c57 100644
--- a/engines/wintermute/base/base_active_rect.cpp
+++ b/engines/wintermute/base/base_active_rect.cpp
@@ -28,6 +28,7 @@
#include "engines/wintermute/base/base_active_rect.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_region.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/platform_osystem.h"
@@ -89,7 +90,7 @@ void BaseActiveRect::clipRect() {
Rect32 rc;
bool customViewport;
_gameRef->getCurrentViewportRect(&rc, &customViewport);
- BaseRenderer *Rend = _gameRef->_renderer;
+ BaseRenderer *Rend = BaseEngine::getRenderer();
if (!customViewport) {
rc.left -= Rend->_drawOffsetX;
diff --git a/engines/wintermute/base/base_active_rect.h b/engines/wintermute/base/base_active_rect.h
index 7ef8374814..982a0902d0 100644
--- a/engines/wintermute/base/base_active_rect.h
+++ b/engines/wintermute/base/base_active_rect.h
@@ -45,8 +45,8 @@ public:
BaseSubFrame *_frame;
BaseObject *_owner;
BaseRegion *_region;
- int _offsetX;
- int _offsetY;
+ int32 _offsetX;
+ int32 _offsetY;
Rect32 _rect;
BaseActiveRect(BaseGame *inGameOwner = nullptr);
BaseActiveRect(BaseGame *inGameOwner, BaseObject *owner, BaseSubFrame *frame, int x, int y, int width, int height, float zoomX = 100, float zoomY = 100, bool precise = true);
diff --git a/engines/wintermute/base/base_engine.cpp b/engines/wintermute/base/base_engine.cpp
index a13ca4d919..d4b17a0a64 100644
--- a/engines/wintermute/base/base_engine.cpp
+++ b/engines/wintermute/base/base_engine.cpp
@@ -90,4 +90,36 @@ uint32 BaseEngine::randInt(int from, int to) {
return _rnd->getRandomNumberRng(from, to);
}
+BaseSoundMgr *BaseEngine::getSoundMgr() {
+ if (instance()._gameRef) {
+ return _gameRef->_soundMgr;
+ } else {
+ return nullptr;
+ }
+}
+
+BaseRenderer *BaseEngine::getRenderer() {
+ if (instance()._gameRef) {
+ return instance()._gameRef->_renderer;
+ } else {
+ return nullptr;
+ }
+}
+
+const Timer *BaseEngine::getTimer() {
+ if (instance()._gameRef) {
+ return instance()._gameRef->getTimer();
+ } else {
+ return nullptr;
+ }
+}
+
+const Timer *BaseEngine::getLiveTimer() {
+ if (instance()._gameRef) {
+ return instance()._gameRef->getLiveTimer();
+ } else {
+ return nullptr;
+ }
+}
+
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base_engine.h b/engines/wintermute/base/base_engine.h
index f04c594699..d972e6ebbc 100644
--- a/engines/wintermute/base/base_engine.h
+++ b/engines/wintermute/base/base_engine.h
@@ -39,7 +39,10 @@ namespace Wintermute {
class BaseFileManager;
class BaseRegistry;
class BaseGame;
+class BaseSoundMgr;
+class BaseRenderer;
class SystemClassRegistry;
+class Timer;
class BaseEngine : public Common::Singleton<Wintermute::BaseEngine> {
void init(Common::Language lang);
BaseFileManager *_fileManager;
@@ -60,6 +63,10 @@ public:
SystemClassRegistry *getClassRegistry() { return _classReg; }
BaseGame *getGameRef() { return _gameRef; }
BaseFileManager *getFileManager() { return _fileManager; }
+ BaseSoundMgr *getSoundMgr();
+ static BaseRenderer *getRenderer();
+ static const Timer *getTimer();
+ static const Timer *getLiveTimer();
static void LOG(bool res, const char *fmt, ...);
const char *getGameId() { return _gameId.c_str(); }
};
diff --git a/engines/wintermute/base/base_fader.cpp b/engines/wintermute/base/base_fader.cpp
index 8f74d71caf..0d17b07a9d 100644
--- a/engines/wintermute/base/base_fader.cpp
+++ b/engines/wintermute/base/base_fader.cpp
@@ -27,7 +27,8 @@
*/
#include "engines/wintermute/base/base_fader.h"
-#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/timer.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "common/util.h"
@@ -71,7 +72,7 @@ bool BaseFader::update() {
if (_system) {
time = g_system->getMillis() - _startTime;
} else {
- time = _gameRef->_timer - _startTime;
+ time = BaseEngine::getTimer()->getTime() - _startTime;
}
if (time >= _duration) {
@@ -97,7 +98,7 @@ bool BaseFader::display() {
}
if (_currentAlpha > 0x00) {
- _gameRef->_renderer->fadeToColor(_red, _green, _blue, _currentAlpha);
+ BaseEngine::getRenderer()->fadeToColor(_red, _green, _blue, _currentAlpha);
}
return STATUS_OK;
}
@@ -129,7 +130,7 @@ bool BaseFader::fadeIn(uint32 sourceColor, uint32 duration, bool system) {
if (_system) {
_startTime = g_system->getMillis();
} else {
- _startTime = _gameRef->_timer;
+ _startTime = BaseEngine::getTimer()->getTime();
}
return STATUS_OK;
@@ -155,7 +156,7 @@ bool BaseFader::fadeOut(uint32 targetColor, uint32 duration, bool system) {
if (_system) {
_startTime = g_system->getMillis();
} else {
- _startTime = _gameRef->_timer;
+ _startTime = BaseEngine::getTimer()->getTime();
}
diff --git a/engines/wintermute/base/base_file_manager.cpp b/engines/wintermute/base/base_file_manager.cpp
index 28e0b3af6e..4c7c31562d 100644
--- a/engines/wintermute/base/base_file_manager.cpp
+++ b/engines/wintermute/base/base_file_manager.cpp
@@ -192,7 +192,9 @@ bool BaseFileManager::registerPackages() {
Common::FSList files;
for (Common::FSList::iterator it = _packagePaths.begin(); it != _packagePaths.end(); ++it) {
debugC(kWintermuteDebugFileAccess, "Should register folder: %s %s", (*it).getPath().c_str(), (*it).getName().c_str());
- (*it).getChildren(files, Common::FSNode::kListFilesOnly);
+ if ((*it).getChildren(files, Common::FSNode::kListFilesOnly)) {
+ warning("getChildren() failed for path: %s", (*it).getDisplayName().c_str());
+ }
for (Common::FSList::iterator fileIt = files.begin(); fileIt != files.end(); ++fileIt) {
if (!fileIt->getName().hasSuffix(".dcp")) {
continue;
@@ -249,7 +251,7 @@ Common::SeekableReadStream *BaseFileManager::openPkgFile(const Common::String &f
upcName.toUppercase();
Common::SeekableReadStream *file = nullptr;
char fileName[MAX_PATH_LENGTH];
- strcpy(fileName, upcName.c_str());
+ Common::strlcpy(fileName, upcName.c_str(), MAX_PATH_LENGTH);
// correct slashes
for (uint32 i = 0; i < upcName.size(); i++) {
diff --git a/engines/wintermute/base/base_frame.cpp b/engines/wintermute/base/base_frame.cpp
index 8a190c729b..382e8acbe0 100644
--- a/engines/wintermute/base/base_frame.cpp
+++ b/engines/wintermute/base/base_frame.cpp
@@ -27,8 +27,9 @@
*/
#include "engines/wintermute/base/base_parser.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_frame.h"
-#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_object.h"
#include "engines/wintermute/base/base_dynamic_buffer.h"
#include "engines/wintermute/base/sound/base_sound_manager.h"
#include "engines/wintermute/base/sound/base_sound.h"
@@ -264,8 +265,8 @@ bool BaseFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) {
}
_sound = new BaseSound(_gameRef);
if (!_sound || DID_FAIL(_sound->setSound(params, Audio::Mixer::kSFXSoundType, false))) {
- if (_gameRef->_soundMgr->_soundAvailable) {
- _gameRef->LOG(0, "Error loading sound '%s'.", params);
+ if (BaseEngine::instance().getSoundMgr()->_soundAvailable) {
+ BaseEngine::LOG(0, "Error loading sound '%s'.", params);
}
delete _sound;
_sound = nullptr;
@@ -294,12 +295,12 @@ bool BaseFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) {
}
}
if (cmd == PARSERR_TOKENNOTFOUND) {
- _gameRef->LOG(0, "Syntax error in FRAME definition");
+ BaseEngine::LOG(0, "Syntax error in FRAME definition");
return STATUS_FAILED;
}
if (cmd == PARSERR_GENERIC) {
- _gameRef->LOG(0, "Error loading FRAME definition");
+ BaseEngine::LOG(0, "Error loading FRAME definition");
return STATUS_FAILED;
}
@@ -314,7 +315,7 @@ bool BaseFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) {
if (!sub->_surface) {
delete sub;
- _gameRef->LOG(0, "Error loading SUBFRAME");
+ BaseEngine::LOG(0, "Error loading SUBFRAME");
return STATUS_FAILED;
}
diff --git a/engines/wintermute/base/base_frame.h b/engines/wintermute/base/base_frame.h
index 5ed0b92bba..954851c77f 100644
--- a/engines/wintermute/base/base_frame.h
+++ b/engines/wintermute/base/base_frame.h
@@ -47,8 +47,8 @@ public:
bool getBoundingRect(Rect32 *rect, int x, int y, float scaleX = 100, float scaleY = 100);
bool saveAsText(BaseDynamicBuffer *buffer, int indent);
- int _moveY;
- int _moveX;
+ int32 _moveY;
+ int32 _moveX;
uint32 _delay;
BaseArray<BaseSubFrame *> _subframes;
bool draw(int x, int y, BaseObject *registerOwner = nullptr, float zoomX = 100, float zoomY = 100, bool precise = true, uint32 alpha = 0xFFFFFFFF, bool allFrames = false, float rotate = 0.0f, TSpriteBlendMode blendMode = BLEND_NORMAL);
@@ -60,10 +60,10 @@ public:
BaseArray<const char *> _applyEvent;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
private:
bool _keyframe;
bool _editorExpanded;
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 94ea36cd06..0f2a3d1260 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -30,6 +30,7 @@
#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/base/base_game_music.h"
+#include "engines/wintermute/base/base_game_settings.h"
#include "engines/wintermute/base/base_fader.h"
#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/base/font/base_font.h"
@@ -43,11 +44,10 @@
#include "engines/wintermute/base/base_sub_frame.h"
#include "engines/wintermute/base/base_transition_manager.h"
#include "engines/wintermute/base/base_viewport.h"
-#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/base/base_region.h"
-#include "engines/wintermute/base/base_save_thumb_helper.h"
#include "engines/wintermute/base/base_surface_storage.h"
#include "engines/wintermute/base/saveload.h"
+#include "engines/wintermute/base/save_thumb_helper.h"
#include "engines/wintermute/base/scriptables/script_value.h"
#include "engines/wintermute/base/scriptables/script_engine.h"
#include "engines/wintermute/base/scriptables/script_stack.h"
@@ -81,7 +81,7 @@ IMPLEMENT_PERSISTENT(BaseGame, true)
//////////////////////////////////////////////////////////////////////
-BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gameId) {
+BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gameId), _timerNormal(), _timerLive() {
_shuttingDown = false;
_state = GAME_RUNNING;
@@ -122,14 +122,6 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam
_subtitles = true;
_videoSubtitles = true;
- _timer = 0;
- _timerDelta = 0;
- _timerLast = 0;
-
- _liveTimer = 0;
- _liveTimerDelta = 0;
- _liveTimerLast = 0;
-
_sequence = 0;
_mousePos.x = _mousePos.y = 0;
@@ -143,22 +135,8 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam
_useD3D = false;
- _stringTable = new BaseStringTable(this);
-
_musicSystem = new BaseGameMusic(this);
- _settingsResWidth = 800;
- _settingsResHeight = 600;
- _settingsRequireAcceleration = false;
- _settingsRequireSound = false;
- _settingsTLMode = 0;
- _settingsAllowWindowed = true;
- _settingsGameFile = nullptr;
- _settingsAllowAdvanced = false;
- _settingsAllowAccessTab = true;
- _settingsAllowAboutTab = true;
- _settingsAllowDesktopRes = false;
-
_editorForceScripts = false;
_editorAlwaysRegister = false;
@@ -171,7 +149,6 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam
_scheduledLoadSlot = -1;
_personalizedSave = false;
- _compressedSavegames = true;
_editorMode = false;
//_doNotExpandStrings = false;
@@ -192,8 +169,6 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam
_thumbnailWidth = _thumbnailHeight = 0;
- _richSavedGames = false;
- _savedGameExt = "dsv";
_localSaveDir = "saves";
_saveDirChecked = false;
@@ -237,6 +212,8 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam
#else*/
_touchInterface = false;
_constrainedMemory = false;
+
+ _settings = new BaseGameSettings(this);
//#endif
}
@@ -253,8 +230,6 @@ BaseGame::~BaseGame() {
cleanup();
- delete[] _settingsGameFile;
-
delete _cachedThumbnail;
delete _mathClass;
@@ -269,10 +244,8 @@ BaseGame::~BaseGame() {
//SAFE_DELETE(_keyboardState);
delete _renderer;
- delete _stringTable;
delete _musicSystem;
-
- _settingsGameFile = nullptr;
+ delete _settings;
_cachedThumbnail = nullptr;
@@ -287,8 +260,8 @@ BaseGame::~BaseGame() {
_soundMgr = nullptr;
_renderer = nullptr;
- _stringTable = nullptr;
_musicSystem = nullptr;
+ _settings = nullptr;
DEBUG_DebugDisable();
debugC(kWintermuteDebugLog, "--- shutting down normally ---\n");
@@ -364,6 +337,42 @@ bool BaseGame::cleanup() {
return STATUS_OK;
}
+//////////////////////////////////////////////////////////////////////
+bool BaseGame::initConfManSettings() {
+ if (ConfMan.hasKey("debug_mode")) {
+ if (ConfMan.getBool("debug_mode")) {
+ DEBUG_DebugEnable("./wme.log");
+ }
+ }
+
+ if (ConfMan.hasKey("show_fps")) {
+ _debugShowFPS = ConfMan.getBool("show_fps");
+ } else {
+ _debugShowFPS = false;
+ }
+
+ if (ConfMan.hasKey("disable_smartcache")) {
+ _smartCache = ConfMan.getBool("disable_smartcache");
+ } else {
+ _smartCache = true;
+ }
+
+ if (!_smartCache) {
+ LOG(0, "Smart cache is DISABLED");
+ }
+ return STATUS_OK;
+}
+
+//////////////////////////////////////////////////////////////////////
+bool BaseGame::initRenderer() {
+ bool windowedMode = !ConfMan.getBool("fullscreen");
+ return _renderer->initRenderer(_settings->getResWidth(), _settings->getResHeight(), windowedMode);
+}
+
+//////////////////////////////////////////////////////////////////////
+bool BaseGame::loadGameSettingsFile() {
+ return loadFile(_settings->getGameFile());
+}
//////////////////////////////////////////////////////////////////////
bool BaseGame::initialize1() {
@@ -446,8 +455,8 @@ bool BaseGame::initialize2() { // we know whether we are going to be accelerated
//////////////////////////////////////////////////////////////////////
bool BaseGame::initialize3() { // renderer is initialized
- _posX = _renderer->_width / 2;
- _posY = _renderer->_height / 2;
+ _posX = _renderer->getWidth() / 2;
+ _posY = _renderer->getHeight() / 2;
_renderer->initIndicator();
return STATUS_OK;
}
@@ -544,16 +553,12 @@ bool BaseGame::initLoop() {
_lastTime = _currentTime;
_fpsTime += _deltaTime;
- _liveTimerDelta = _liveTimer - _liveTimerLast;
- _liveTimerLast = _liveTimer;
- _liveTimer += MIN((uint32)1000, _deltaTime);
+ _timerLive.updateTime(_deltaTime, 1000);
if (_state != GAME_FROZEN) {
- _timerDelta = _timer - _timerLast;
- _timerLast = _timer;
- _timer += MIN((uint32)1000, _deltaTime);
+ _timerNormal.updateTime(_deltaTime, 1000);
} else {
- _timerDelta = 0;
+ _timerNormal.setTimeDelta(0);
}
_framesRendered++;
@@ -603,7 +608,7 @@ void BaseGame::setOffset(int offsetX, int offsetY) {
}
//////////////////////////////////////////////////////////////////////////
-void BaseGame::getOffset(int *offsetX, int *offsetY) {
+void BaseGame::getOffset(int *offsetX, int *offsetY) const {
if (offsetX != nullptr) {
*offsetX = _offsetX;
}
@@ -992,7 +997,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
clearOld = val->getBool();
}
- if (DID_FAIL(_stringTable->loadFile(filename, clearOld))) {
+ if (DID_FAIL(_settings->loadStringTable(filename, clearOld))) {
stack->pushBool(false);
} else {
stack->pushBool(true);
@@ -1070,7 +1075,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
ScValue *val = stack->pop();
char *str = new char[strlen(val->getString()) + 1];
strcpy(str, val->getString());
- _stringTable->expand(&str);
+ expandStringByStringTable(&str);
stack->pushString(str);
delete[] str;
return STATUS_OK;
@@ -1088,9 +1093,9 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
int x = stack->pop()->getInt();
int y = stack->pop()->getInt();
x = MAX(x, 0);
- x = MIN(x, _renderer->_width);
+ x = MIN(x, _renderer->getWidth());
y = MAX(y, 0);
- y = MIN(y, _renderer->_height);
+ y = MIN(y, _renderer->getHeight());
Point32 p;
p.x = x + _renderer->_drawOffsetX;
p.y = y + _renderer->_drawOffsetY;
@@ -1588,8 +1593,8 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
else if (strcmp(name, "ScreenshotEx") == 0) {
stack->correctParams(3);
const char *filename = stack->pop()->getString();
- int sizeX = stack->pop()->getInt(_renderer->_width);
- int sizeY = stack->pop()->getInt(_renderer->_height);
+ int sizeX = stack->pop()->getInt(_renderer->getWidth());
+ int sizeY = stack->pop()->getInt(_renderer->getHeight());
bool ret = _gameRef->_renderer->saveScreenShot(filename, sizeX, sizeY);
@@ -1819,7 +1824,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
else if (strcmp(name, "StoreSaveThumbnail") == 0) {
stack->correctParams(0);
delete _cachedThumbnail;
- _cachedThumbnail = new BaseSaveThumbHelper(this);
+ _cachedThumbnail = new SaveThumbHelper(this);
if (DID_FAIL(_cachedThumbnail->storeThumbnail())) {
delete _cachedThumbnail;
_cachedThumbnail = nullptr;
@@ -1968,7 +1973,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) {
// CurrentTime (RO)
//////////////////////////////////////////////////////////////////////////
else if (name == "CurrentTime") {
- _scValue->setInt((int)_timer);
+ _scValue->setInt((int)getTimer()->getTime());
return _scValue;
}
@@ -1984,7 +1989,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) {
// WindowedMode (RO)
//////////////////////////////////////////////////////////////////////////
else if (name == "WindowedMode") {
- _scValue->setBool(_renderer->_windowed);
+ _scValue->setBool(_renderer->isWindowed());
return _scValue;
}
@@ -2024,7 +2029,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) {
// ScreenWidth (RO)
//////////////////////////////////////////////////////////////////////////
else if (name == "ScreenWidth") {
- _scValue->setInt(_renderer->_width);
+ _scValue->setInt(_renderer->getWidth());
return _scValue;
}
@@ -2032,7 +2037,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) {
// ScreenHeight (RO)
//////////////////////////////////////////////////////////////////////////
else if (name == "ScreenHeight") {
- _scValue->setInt(_renderer->_height);
+ _scValue->setInt(_renderer->getHeight());
return _scValue;
}
@@ -2564,8 +2569,8 @@ bool BaseGame::displayQuickMsg() {
// display
for (uint32 i = 0; i < _quickMessages.size(); i++) {
- _systemFont->drawText((const byte *)_quickMessages[i]->getText(), 0, posY, _renderer->_width);
- posY += _systemFont->getTextHeight((const byte *)_quickMessages[i]->getText(), _renderer->_width);
+ _systemFont->drawText((const byte *)_quickMessages[i]->getText(), 0, posY, _renderer->getWidth());
+ posY += _systemFont->getTextHeight((const byte *)_quickMessages[i]->getText(), _renderer->getWidth());
}
return STATUS_OK;
}
@@ -2996,7 +3001,7 @@ bool BaseGame::saveGame(int slot, const char *desc, bool quickSave) {
//////////////////////////////////////////////////////////////////////////
-bool BaseGame::loadGame(int slot) {
+bool BaseGame::loadGame(uint32 slot) {
//_gameRef->LOG(0, "Load start %d", BaseUtils::GetUsedMemMB());
_loading = false;
@@ -3043,132 +3048,6 @@ bool BaseGame::displayWindows(bool inGame) {
}
//////////////////////////////////////////////////////////////////////////
-bool BaseGame::loadSettings(const char *filename) {
- TOKEN_TABLE_START(commands)
- TOKEN_TABLE(SETTINGS)
- TOKEN_TABLE(GAME)
- TOKEN_TABLE(STRING_TABLE)
- TOKEN_TABLE(RESOLUTION)
- TOKEN_TABLE(REQUIRE_3D_ACCELERATION)
- TOKEN_TABLE(REQUIRE_SOUND)
- TOKEN_TABLE(HWTL_MODE)
- TOKEN_TABLE(ALLOW_WINDOWED_MODE)
- TOKEN_TABLE(ALLOW_ACCESSIBILITY_TAB)
- TOKEN_TABLE(ALLOW_ABOUT_TAB)
- TOKEN_TABLE(ALLOW_ADVANCED)
- TOKEN_TABLE(ALLOW_DESKTOP_RES)
- TOKEN_TABLE(REGISTRY_PATH)
- TOKEN_TABLE(RICH_SAVED_GAMES)
- TOKEN_TABLE(SAVED_GAME_EXT)
- TOKEN_TABLE(GUID)
- TOKEN_TABLE_END
-
-
- byte *origBuffer = BaseFileManager::getEngineInstance()->readWholeFile(filename);
- if (origBuffer == nullptr) {
- _gameRef->LOG(0, "BaseGame::LoadSettings failed for file '%s'", filename);
- return STATUS_FAILED;
- }
-
- bool ret = STATUS_OK;
-
- byte *buffer = origBuffer;
- byte *params;
- int cmd;
- BaseParser parser;
-
- if (parser.getCommand((char **)&buffer, commands, (char **)&params) != TOKEN_SETTINGS) {
- _gameRef->LOG(0, "'SETTINGS' keyword expected in game settings file.");
- return STATUS_FAILED;
- }
- buffer = params;
- while ((cmd = parser.getCommand((char **)&buffer, commands, (char **)&params)) > 0) {
- switch (cmd) {
- case TOKEN_GAME:
- delete[] _settingsGameFile;
- _settingsGameFile = new char[strlen((char *)params) + 1];
- if (_settingsGameFile) {
- strcpy(_settingsGameFile, (char *)params);
- }
- break;
-
- case TOKEN_STRING_TABLE:
- if (DID_FAIL(_stringTable->loadFile((char *)params))) {
- cmd = PARSERR_GENERIC;
- }
- break;
-
- case TOKEN_RESOLUTION:
- parser.scanStr((char *)params, "%d,%d", &_settingsResWidth, &_settingsResHeight);
- break;
-
- case TOKEN_REQUIRE_3D_ACCELERATION:
- parser.scanStr((char *)params, "%b", &_settingsRequireAcceleration);
- break;
-
- case TOKEN_REQUIRE_SOUND:
- parser.scanStr((char *)params, "%b", &_settingsRequireSound);
- break;
-
- case TOKEN_HWTL_MODE:
- parser.scanStr((char *)params, "%d", &_settingsTLMode);
- break;
-
- case TOKEN_ALLOW_WINDOWED_MODE:
- parser.scanStr((char *)params, "%b", &_settingsAllowWindowed);
- break;
-
- case TOKEN_ALLOW_DESKTOP_RES:
- parser.scanStr((char *)params, "%b", &_settingsAllowDesktopRes);
- break;
-
- case TOKEN_ALLOW_ADVANCED:
- parser.scanStr((char *)params, "%b", &_settingsAllowAdvanced);
- break;
-
- case TOKEN_ALLOW_ACCESSIBILITY_TAB:
- parser.scanStr((char *)params, "%b", &_settingsAllowAccessTab);
- break;
-
- case TOKEN_ALLOW_ABOUT_TAB:
- parser.scanStr((char *)params, "%b", &_settingsAllowAboutTab);
- break;
-
- case TOKEN_REGISTRY_PATH:
- //BaseEngine::instance().getRegistry()->setBasePath((char *)params);
- break;
-
- case TOKEN_RICH_SAVED_GAMES:
- parser.scanStr((char *)params, "%b", &_richSavedGames);
- break;
-
- case TOKEN_SAVED_GAME_EXT:
- _savedGameExt = (char *)params;
- break;
-
- case TOKEN_GUID:
- break;
- }
- }
- if (cmd == PARSERR_TOKENNOTFOUND) {
- _gameRef->LOG(0, "Syntax error in game settings '%s'", filename);
- ret = STATUS_FAILED;
- }
- if (cmd == PARSERR_GENERIC) {
- _gameRef->LOG(0, "Error loading game settings '%s'", filename);
- ret = STATUS_FAILED;
- }
-
- _settingsAllowWindowed = true; // TODO: These two settings should probably be cleaned out altogether.
- _compressedSavegames = true;
-
- delete[] origBuffer;
-
- return ret;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
bool BaseGame::persist(BasePersistenceManager *persistMgr) {
if (!persistMgr->getIsSaving()) {
cleanup();
@@ -3213,13 +3092,8 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) {
persistMgr->transfer(TMEMBER(_videoFont));
persistMgr->transfer(TMEMBER(_videoSubtitles));
- persistMgr->transfer(TMEMBER(_timer));
- persistMgr->transfer(TMEMBER(_timerDelta));
- persistMgr->transfer(TMEMBER(_timerLast));
-
- persistMgr->transfer(TMEMBER(_liveTimer));
- persistMgr->transfer(TMEMBER(_liveTimerDelta));
- persistMgr->transfer(TMEMBER(_liveTimerLast));
+ _timerNormal.persist(persistMgr);
+ _timerLive.persist(persistMgr);
_renderer->persistSaveLoadImages(persistMgr);
@@ -3349,7 +3223,7 @@ void BaseGame::handleKeyRelease(Common::Event *event) {
//////////////////////////////////////////////////////////////////////////
-bool BaseGame::handleMouseWheel(int delta) {
+bool BaseGame::handleMouseWheel(int32 delta) {
bool handled = false;
if (_focusedWindow) {
handled = _gameRef->_focusedWindow->handleMouseWheel(delta);
@@ -3379,7 +3253,7 @@ bool BaseGame::handleMouseWheel(int delta) {
//////////////////////////////////////////////////////////////////////////
-bool BaseGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) {
+bool BaseGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const {
if (verMajor) {
*verMajor = DCGF_VER_MAJOR;
}
@@ -3402,11 +3276,11 @@ bool BaseGame::getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *
void BaseGame::setWindowTitle() {
if (_renderer) {
char title[512];
- strcpy(title, _caption[0]);
+ Common::strlcpy(title, _caption[0], 512);
if (title[0] != '\0') {
- strcat(title, " - ");
+ Common::strlcat(title, " - ", 512);
}
- strcat(title, "WME Lite");
+ Common::strlcat(title, "WME Lite", 512);
Utf8String utf8Title;
@@ -3473,15 +3347,15 @@ bool BaseGame::popViewport() {
_renderer->setViewport(_viewportStack[_viewportSP]->getRect());
} else _renderer->setViewport(_renderer->_drawOffsetX,
_renderer->_drawOffsetY,
- _renderer->_width + _renderer->_drawOffsetX,
- _renderer->_height + _renderer->_drawOffsetY);
+ _renderer->getWidth() + _renderer->_drawOffsetX,
+ _renderer->getHeight() + _renderer->_drawOffsetY);
return STATUS_OK;
}
//////////////////////////////////////////////////////////////////////////
-bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) {
+bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) const {
if (rect == nullptr) {
return STATUS_FAILED;
} else {
@@ -3493,8 +3367,8 @@ bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) {
} else {
BasePlatform::setRect(rect, _renderer->_drawOffsetX,
_renderer->_drawOffsetY,
- _renderer->_width + _renderer->_drawOffsetX,
- _renderer->_height + _renderer->_drawOffsetY);
+ _renderer->getWidth() + _renderer->_drawOffsetX,
+ _renderer->getHeight() + _renderer->_drawOffsetY);
if (custom) {
*custom = false;
}
@@ -3506,7 +3380,7 @@ bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) {
//////////////////////////////////////////////////////////////////////////
-bool BaseGame::getCurrentViewportOffset(int *offsetX, int *offsetY) {
+bool BaseGame::getCurrentViewportOffset(int *offsetX, int *offsetY) const {
if (_viewportSP >= 0) {
if (offsetX) {
*offsetX = _viewportStack[_viewportSP]->_offsetX;
@@ -3835,7 +3709,7 @@ bool BaseGame::onMouseMiddleUp() {
//////////////////////////////////////////////////////////////////////////
bool BaseGame::onPaint() {
- if (_renderer && _renderer->_windowed && _renderer->_ready) {
+ if (_renderer && _renderer->isWindowed() && _renderer->isReady()) {
_renderer->initLoop();
displayContent(false, true);
displayDebugInfo();
@@ -3858,42 +3732,43 @@ bool BaseGame::onWindowClose() {
//////////////////////////////////////////////////////////////////////////
bool BaseGame::displayDebugInfo() {
- char str[100];
-
+ const uint32 strLength = 100;
+ char str[strLength];
+
if (_debugShowFPS) {
sprintf(str, "FPS: %d", _gameRef->_fps);
_systemFont->drawText((byte *)str, 0, 0, 100, TAL_LEFT);
}
if (_gameRef->_debugDebugMode) {
- if (!_gameRef->_renderer->_windowed) {
- sprintf(str, "Mode: %dx%dx%d", _renderer->_width, _renderer->_height, _renderer->_bPP);
+ if (!_gameRef->_renderer->isWindowed()) {
+ sprintf(str, "Mode: %dx%dx%d", _renderer->getWidth(), _renderer->getHeight(), _renderer->getBPP());
} else {
- sprintf(str, "Mode: %dx%d windowed", _renderer->_width, _renderer->_height);
+ sprintf(str, "Mode: %dx%d windowed", _renderer->getWidth(), _renderer->getHeight());
}
- strcat(str, " (");
- strcat(str, _renderer->getName().c_str());
- strcat(str, ")");
- _systemFont->drawText((byte *)str, 0, 0, _renderer->_width, TAL_RIGHT);
+ Common::strlcat(str, " (", strLength);
+ Common::strlcat(str, _renderer->getName().c_str(), strLength);
+ Common::strlcat(str, ")", strLength);
+ _systemFont->drawText((byte *)str, 0, 0, _renderer->getWidth(), TAL_RIGHT);
_renderer->displayDebugInfo();
int scrTotal, scrRunning, scrWaiting, scrPersistent;
scrTotal = _scEngine->getNumScripts(&scrRunning, &scrWaiting, &scrPersistent);
sprintf(str, "Running scripts: %d (r:%d w:%d p:%d)", scrTotal, scrRunning, scrWaiting, scrPersistent);
- _systemFont->drawText((byte *)str, 0, 70, _renderer->_width, TAL_RIGHT);
+ _systemFont->drawText((byte *)str, 0, 70, _renderer->getWidth(), TAL_RIGHT);
- sprintf(str, "Timer: %d", _timer);
- _gameRef->_systemFont->drawText((byte *)str, 0, 130, _renderer->_width, TAL_RIGHT);
+ sprintf(str, "Timer: %d", getTimer()->getTime());
+ _gameRef->_systemFont->drawText((byte *)str, 0, 130, _renderer->getWidth(), TAL_RIGHT);
if (_activeObject != nullptr) {
- _systemFont->drawText((const byte *)_activeObject->getName(), 0, 150, _renderer->_width, TAL_RIGHT);
+ _systemFont->drawText((const byte *)_activeObject->getName(), 0, 150, _renderer->getWidth(), TAL_RIGHT);
}
sprintf(str, "GfxMem: %dMB", _usedMem / (1024 * 1024));
- _systemFont->drawText((byte *)str, 0, 170, _renderer->_width, TAL_RIGHT);
+ _systemFont->drawText((byte *)str, 0, 170, _renderer->getWidth(), TAL_RIGHT);
}
@@ -4004,7 +3879,7 @@ void BaseGame::autoSaveOnExit() {
}
//////////////////////////////////////////////////////////////////////////
-void BaseGame::addMem(int bytes) {
+void BaseGame::addMem(int32 bytes) {
_usedMem += bytes;
}
@@ -4013,4 +3888,18 @@ AnsiString BaseGame::getDeviceType() const {
return "computer";
}
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::loadSettings(const char *filename) {
+ return _settings->loadSettings(filename);
+}
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::expandStringByStringTable(char **str) const {
+ _settings->expandStringByStringTable(str);
+}
+
+char *BaseGame::getKeyFromStringTable(const char *str) const {
+ return _settings->getKeyFromStringTable(str);
+}
+
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base_game.h b/engines/wintermute/base/base_game.h
index 5666fb818c..d51255d013 100644
--- a/engines/wintermute/base/base_game.h
+++ b/engines/wintermute/base/base_game.h
@@ -30,6 +30,7 @@
#define WINTERMUTE_BASE_GAME_H
#include "engines/wintermute/base/base_object.h"
+#include "engines/wintermute/base/timer.h"
#include "engines/wintermute/persistent.h"
#include "engines/wintermute/coll_templ.h"
#include "engines/wintermute/math/rect32.h"
@@ -44,21 +45,21 @@ class BaseFader;
class BaseFont;
class BaseFileManager;
class BaseTransitionMgr;
-class ScEngine;
class BaseFontStorage;
class BaseGameMusic;
-class BaseStringTable;
class BaseQuickMsg;
-class UIWindow;
class BaseViewport;
class BaseRenderer;
class BaseRegistry;
-class BaseSaveThumbHelper;
class BaseSurfaceStorage;
-class SXMath;
class BaseKeyboardState;
+class BaseGameSettings;
+class ScEngine;
+class SXMath;
+class UIWindow;
class VideoPlayer;
class VideoTheoraPlayer;
+class SaveThumbHelper;
class BaseGame: public BaseObject {
public:
@@ -94,10 +95,10 @@ public:
bool _shuttingDown;
virtual bool displayDebugInfo();
- bool _debugShowFPS;
- bool _suspendedRendering;
- int _soundBufferSizeSec;
+ void setShowFPS(bool enabled) { _debugShowFPS = enabled; }
+
+ bool getSuspendedRendering() const { return _suspendedRendering; }
TTextEncoding _textEncoding;
bool _textRTL;
@@ -107,16 +108,16 @@ public:
void DEBUG_DumpClassRegistry();
bool setWaitCursor(const char *filename);
- int _thumbnailWidth;
- int _thumbnailHeight;
+ uint32 getSaveThumbWidth() const { return _thumbnailWidth; }
+ uint32 getSaveThumbHeight() const { return _thumbnailHeight; }
bool _editorMode;
- void getOffset(int *offsetX, int *offsetY);
- void setOffset(int offsetX, int offsetY);
+ void getOffset(int *offsetX, int *offsetY) const;
+ void setOffset(int32 offsetX, int32 offsetY);
int getSequence();
- int _offsetY;
- int _offsetX;
+ int32 _offsetY;
+ int32 _offsetX;
float _offsetPercentX;
float _offsetPercentY;
@@ -128,10 +129,18 @@ public:
uint32 _currentTime;
uint32 _deltaTime;
+ // Init-functions:
+ bool initConfManSettings();
+ bool initRenderer();
+ bool loadGameSettingsFile();
bool initialize1();
bool initialize2();
bool initialize3();
BaseTransitionMgr *_transMgr;
+
+ // String Table
+ void expandStringByStringTable(char **str) const;
+ char *getKeyFromStringTable(const char *str) const;
void LOG(bool res, const char *fmt, ...);
@@ -144,45 +153,39 @@ public:
BaseGame(const Common::String &gameId);
virtual ~BaseGame();
- void DEBUG_DebugDisable();
- void DEBUG_DebugEnable(const char *filename = nullptr);
bool _debugDebugMode;
- void *_debugLogFile;
- int _sequence;
+ int32 _sequence;
virtual bool loadFile(const char *filename);
virtual bool loadBuffer(byte *buffer, bool complete = true);
- int _viewportSP;
+ int32 _viewportSP;
- BaseStringTable *_stringTable;
- int _settingsResWidth;
- int _settingsResHeight;
- char *_settingsGameFile;
bool _suppressScriptErrors;
bool _mouseLeftDown; // TODO: Hide
virtual bool externalCall(ScScript *script, ScStack *stack, ScStack *thisStack, char *name);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
// compatibility bits
bool _compatKillMethodThreads;
- const char* getGameId() { return _gameId.c_str(); }
+ const char* getGameId() const { return _gameId.c_str(); }
void setGameId(const Common::String& gameId) { _gameId = gameId; }
uint32 _surfaceGCCycleTime;
bool _smartCache; // RO
bool _subtitles; // RO
- int _scheduledLoadSlot;
- bool _loading;
+ int32 _scheduledLoadSlot;
+
+ bool getIsLoading() const { return _loading; }
- virtual bool handleMouseWheel(int delta);
+ virtual bool handleMouseWheel(int32 delta);
bool _quitting;
- virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor);
+ virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const;
virtual bool handleKeypress(Common::Event *event, bool printable = false);
virtual void handleKeyRelease(Common::Event *event);
@@ -201,9 +204,9 @@ public:
bool displayWindows(bool inGame = false);
bool _useD3D;
virtual bool cleanup();
- bool loadGame(int slot);
+ bool loadGame(uint32 slot);
bool loadGame(const char *filename);
- bool saveGame(int slot, const char *desc, bool quickSave = false);
+ bool saveGame(int32 slot, const char *desc, bool quickSave = false);
virtual bool showCursor();
BaseObject *_activeObject;
@@ -212,14 +215,13 @@ public:
TGameState _state;
TGameState _origState;
bool _origInteractive;
- uint32 _timer;
- uint32 _timerDelta;
- uint32 _timerLast;
-
- uint32 _liveTimer;
- uint32 _liveTimerDelta;
- uint32 _liveTimerLast;
+ const Timer *getTimer() const { return &_timerNormal; }
+ const Timer *getLiveTimer() const { return &_timerLive; }
+private:
+ Timer _timerNormal;
+ Timer _timerLive;
+public:
BaseObject *_capturedObject;
Point32 _mousePos;
bool validObject(BaseObject *object);
@@ -233,20 +235,20 @@ public:
virtual bool displayContentSimple();
bool _forceNonStreamedSounds;
void resetMousePos();
- int _subtitlesSpeed;
+ int32 _subtitlesSpeed;
void setInteractive(bool state);
virtual bool windowLoadHook(UIWindow *win, char **buf, char **params);
virtual bool windowScriptMethodHook(UIWindow *win, ScScript *script, ScStack *stack, const char *name);
- bool getCurrentViewportOffset(int *offsetX = nullptr, int *offsetY = nullptr);
- bool getCurrentViewportRect(Rect32 *rect, bool *custom = nullptr);
+ bool getCurrentViewportOffset(int *offsetX = nullptr, int *offsetY = nullptr) const;
+ bool getCurrentViewportRect(Rect32 *rect, bool *custom = nullptr) const;
bool popViewport();
bool pushViewport(BaseViewport *Viewport);
bool setActiveObject(BaseObject *Obj);
BaseSprite *_lastCursor;
bool drawCursor(BaseSprite *Cursor);
- BaseSaveThumbHelper *_cachedThumbnail;
- void addMem(int bytes);
+ SaveThumbHelper *_cachedThumbnail;
+ void addMem(int32 bytes);
bool _touchInterface;
bool _constrainedMemory;
protected:
@@ -254,36 +256,38 @@ protected:
BaseFont *_videoFont;
BaseSprite *_loadingIcon;
- int _loadingIconX;
- int _loadingIconY;
- int _loadingIconPersistent;
+ int32 _loadingIconX;
+ int32 _loadingIconY;
+ int32 _loadingIconPersistent;
BaseFader *_fader;
- int _freezeLevel;
+ int32 _freezeLevel;
VideoPlayer *_videoPlayer;
VideoTheoraPlayer *_theoraPlayer;
private:
+ bool _debugShowFPS;
+ void *_debugLogFile;
+ void DEBUG_DebugDisable();
+ void DEBUG_DebugEnable(const char *filename = nullptr);
+
BaseObject *_mainObject;
bool _mouseRightDown;
bool _mouseMidlleDown;
- bool _settingsRequireAcceleration;
- bool _settingsAllowWindowed;
- bool _settingsAllowAdvanced;
- bool _settingsAllowAccessTab;
- bool _settingsAllowAboutTab;
- bool _settingsRequireSound;
- bool _settingsAllowDesktopRes;
- int _settingsTLMode;
+
+ BaseGameSettings *_settings;
+
+ int32 _soundBufferSizeSec;
+
virtual bool invalidateDeviceObjects();
virtual bool restoreDeviceObjects();
// TODO: This can probably be removed completely:
bool _saveDirChecked;
- bool _richSavedGames;
+
Common::String _localSaveDir;
- Common::String _savedGameExt;
+ bool _loading;
bool _reportTextureFormat;
@@ -298,12 +302,16 @@ private:
void *_engineLogCallbackData;
bool _videoSubtitles;
- bool _compressedSavegames;
bool _personalizedSave;
+ uint32 _thumbnailWidth;
+ uint32 _thumbnailHeight;
+
void setWindowTitle();
+ bool _suspendedRendering;
+
BaseSprite *_cursorNoninteractive;
BaseKeyboardState *_keyboardState;
@@ -326,13 +334,13 @@ private:
time = 0;
}
- int posX;
- int posY;
+ int32 posX;
+ int32 posY;
uint32 time;
};
LastClickInfo _lastClick[2];
- bool isDoubleClick(int buttonIndex);
+ bool isDoubleClick(int32 buttonIndex);
uint32 _usedMem;
@@ -340,7 +348,7 @@ private:
protected:
// WME Lite specific
bool _autoSaveOnExit;
- int _autoSaveSlot;
+ uint32 _autoSaveSlot;
bool _cursorHidden;
public:
diff --git a/engines/wintermute/base/base_game_music.cpp b/engines/wintermute/base/base_game_music.cpp
index 8dff41d854..a39deb8d8d 100644
--- a/engines/wintermute/base/base_game_music.cpp
+++ b/engines/wintermute/base/base_game_music.cpp
@@ -177,7 +177,7 @@ bool BaseGameMusic::updateMusicCrossfade() {
_music[_musicCrossfadeChannel2]->play();
}
- uint32 currentTime = _gameRef->_liveTimer - _musicCrossfadeStartTime;
+ uint32 currentTime = _gameRef->getLiveTimer()->getTime() - _musicCrossfadeStartTime;
if (currentTime >= _musicCrossfadeLength) {
_musicCrossfadeRunning = false;
@@ -469,7 +469,7 @@ bool BaseGameMusic::scCallMethod(ScScript *script, ScStack *stack, ScStack *this
return STATUS_OK;
}
- _musicCrossfadeStartTime = _gameRef->_liveTimer;
+ _musicCrossfadeStartTime = _gameRef->getLiveTimer()->getTime();
_musicCrossfadeChannel1 = channel1;
_musicCrossfadeChannel2 = channel2;
_musicCrossfadeLength = fadeLength;
diff --git a/engines/wintermute/base/base_game_music.h b/engines/wintermute/base/base_game_music.h
index 058a8cadef..0ac904b8c1 100644
--- a/engines/wintermute/base/base_game_music.h
+++ b/engines/wintermute/base/base_game_music.h
@@ -64,8 +64,8 @@ private:
bool _musicCrossfadeSwap;
uint32 _musicCrossfadeStartTime;
uint32 _musicCrossfadeLength;
- int _musicCrossfadeChannel1;
- int _musicCrossfadeChannel2;
+ int32 _musicCrossfadeChannel1;
+ int32 _musicCrossfadeChannel2;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base_game_settings.cpp b/engines/wintermute/base/base_game_settings.cpp
new file mode 100644
index 0000000000..55fbe39fd2
--- /dev/null
+++ b/engines/wintermute/base/base_game_settings.cpp
@@ -0,0 +1,222 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#include "engines/wintermute/base/base_game_settings.h"
+#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/base_file_manager.h"
+#include "engines/wintermute/base/base_string_table.h"
+#include "engines/wintermute/base/base_parser.h"
+#include "engines/wintermute/wintypes.h"
+
+namespace Wintermute {
+
+BaseGameSettings::BaseGameSettings(BaseGame *gameRef) {
+ _resWidth = 800;
+ _resHeight = 600;
+ _requireAcceleration = false;
+ _requireSound = false;
+ _TLMode = 0;
+ _allowWindowed = true;
+ _gameFile = nullptr;
+ _allowAdvanced = false;
+ _allowAccessTab = true;
+ _allowAboutTab = true;
+ _allowDesktopRes = false;
+
+ _compressedSavegames = true;
+ _richSavedGames = false;
+ _savedGameExt = "dsv";
+
+ _stringTable = new BaseStringTable(gameRef);
+}
+
+BaseGameSettings::~BaseGameSettings() {
+ delete[] _gameFile;
+ _gameFile = nullptr;
+ delete _stringTable;
+ _stringTable = nullptr;
+}
+
+TOKEN_DEF_START
+TOKEN_DEF(GAME)
+TOKEN_DEF(STRING_TABLE)
+TOKEN_DEF(RESOLUTION)
+TOKEN_DEF(SETTINGS)
+TOKEN_DEF(REQUIRE_3D_ACCELERATION)
+TOKEN_DEF(REQUIRE_SOUND)
+TOKEN_DEF(HWTL_MODE)
+TOKEN_DEF(ALLOW_WINDOWED_MODE)
+TOKEN_DEF(ALLOW_ACCESSIBILITY_TAB)
+TOKEN_DEF(ALLOW_ABOUT_TAB)
+TOKEN_DEF(ALLOW_ADVANCED)
+TOKEN_DEF(ALLOW_DESKTOP_RES)
+TOKEN_DEF(REGISTRY_PATH)
+TOKEN_DEF(RICH_SAVED_GAMES)
+TOKEN_DEF(SAVED_GAME_EXT)
+TOKEN_DEF(GUID)
+TOKEN_DEF_END
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseGameSettings::loadSettings(const char *filename) {
+ TOKEN_TABLE_START(commands)
+ TOKEN_TABLE(SETTINGS)
+ TOKEN_TABLE(GAME)
+ TOKEN_TABLE(STRING_TABLE)
+ TOKEN_TABLE(RESOLUTION)
+ TOKEN_TABLE(REQUIRE_3D_ACCELERATION)
+ TOKEN_TABLE(REQUIRE_SOUND)
+ TOKEN_TABLE(HWTL_MODE)
+ TOKEN_TABLE(ALLOW_WINDOWED_MODE)
+ TOKEN_TABLE(ALLOW_ACCESSIBILITY_TAB)
+ TOKEN_TABLE(ALLOW_ABOUT_TAB)
+ TOKEN_TABLE(ALLOW_ADVANCED)
+ TOKEN_TABLE(ALLOW_DESKTOP_RES)
+ TOKEN_TABLE(REGISTRY_PATH)
+ TOKEN_TABLE(RICH_SAVED_GAMES)
+ TOKEN_TABLE(SAVED_GAME_EXT)
+ TOKEN_TABLE(GUID)
+ TOKEN_TABLE_END
+
+
+ byte *origBuffer = BaseFileManager::getEngineInstance()->readWholeFile(filename);
+ if (origBuffer == nullptr) {
+ BaseEngine::LOG(0, "BaseGame::LoadSettings failed for file '%s'", filename);
+ return STATUS_FAILED;
+ }
+
+ bool ret = STATUS_OK;
+
+ byte *buffer = origBuffer;
+ byte *params;
+ int cmd;
+ BaseParser parser;
+
+ if (parser.getCommand((char **)&buffer, commands, (char **)&params) != TOKEN_SETTINGS) {
+ BaseEngine::LOG(0, "'SETTINGS' keyword expected in game settings file.");
+ return STATUS_FAILED;
+ }
+ buffer = params;
+ while ((cmd = parser.getCommand((char **)&buffer, commands, (char **)&params)) > 0) {
+ switch (cmd) {
+ case TOKEN_GAME:
+ delete[] _gameFile;
+ _gameFile = new char[strlen((char *)params) + 1];
+ if (_gameFile) {
+ strcpy(_gameFile, (char *)params);
+ }
+ break;
+
+ case TOKEN_STRING_TABLE:
+ if (DID_FAIL(_stringTable->loadFile((char *)params))) {
+ cmd = PARSERR_GENERIC;
+ }
+ break;
+
+ case TOKEN_RESOLUTION:
+ parser.scanStr((char *)params, "%d,%d", &_resWidth, &_resHeight);
+ break;
+
+ case TOKEN_REQUIRE_3D_ACCELERATION:
+ parser.scanStr((char *)params, "%b", &_requireAcceleration);
+ break;
+
+ case TOKEN_REQUIRE_SOUND:
+ parser.scanStr((char *)params, "%b", &_requireSound);
+ break;
+
+ case TOKEN_HWTL_MODE:
+ parser.scanStr((char *)params, "%d", &_TLMode);
+ break;
+
+ case TOKEN_ALLOW_WINDOWED_MODE:
+ parser.scanStr((char *)params, "%b", &_allowWindowed);
+ break;
+
+ case TOKEN_ALLOW_DESKTOP_RES:
+ parser.scanStr((char *)params, "%b", &_allowDesktopRes);
+ break;
+
+ case TOKEN_ALLOW_ADVANCED:
+ parser.scanStr((char *)params, "%b", &_allowAdvanced);
+ break;
+
+ case TOKEN_ALLOW_ACCESSIBILITY_TAB:
+ parser.scanStr((char *)params, "%b", &_allowAccessTab);
+ break;
+
+ case TOKEN_ALLOW_ABOUT_TAB:
+ parser.scanStr((char *)params, "%b", &_allowAboutTab);
+ break;
+
+ case TOKEN_REGISTRY_PATH:
+ //BaseEngine::instance().getRegistry()->setBasePath((char *)params);
+ break;
+
+ case TOKEN_RICH_SAVED_GAMES:
+ parser.scanStr((char *)params, "%b", &_richSavedGames);
+ break;
+
+ case TOKEN_SAVED_GAME_EXT:
+ _savedGameExt = (char *)params;
+ break;
+
+ case TOKEN_GUID:
+ break;
+ }
+ }
+ if (cmd == PARSERR_TOKENNOTFOUND) {
+ BaseEngine::LOG(0, "Syntax error in game settings '%s'", filename);
+ ret = STATUS_FAILED;
+ }
+ if (cmd == PARSERR_GENERIC) {
+ BaseEngine::LOG(0, "Error loading game settings '%s'", filename);
+ ret = STATUS_FAILED;
+ }
+
+ _allowWindowed = true; // TODO: These two settings should probably be cleaned out altogether.
+ _compressedSavegames = true;
+
+ delete[] origBuffer;
+
+ return ret;
+}
+
+bool BaseGameSettings::loadStringTable(const char *filename, bool clearOld) {
+ return _stringTable->loadFile(filename, clearOld);
+}
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGameSettings::expandStringByStringTable(char **str) const {
+ _stringTable->expand(str);
+}
+
+char *BaseGameSettings::getKeyFromStringTable(const char *str) const {
+ return _stringTable->getKey(str);
+}
+
+} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base_game_settings.h b/engines/wintermute/base/base_game_settings.h
new file mode 100644
index 0000000000..1dfb0b50cc
--- /dev/null
+++ b/engines/wintermute/base/base_game_settings.h
@@ -0,0 +1,71 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#ifndef WINTERMUTE_BASE_GAME_SETTINGS_H
+#define WINTERMUTE_BASE_GAME_SETTINGS_H
+
+#include "common/str.h"
+
+namespace Wintermute {
+class BaseStringTable;
+class BaseGame;
+class BaseGameSettings {
+public:
+ const char *getGameFile() const { return (_gameFile ? _gameFile : "default.game"); }
+ int getResWidth() const { return _resWidth; }
+ int getResHeight() const { return _resHeight; }
+
+ BaseGameSettings(BaseGame *gameRef);
+ ~BaseGameSettings();
+ bool loadSettings(const char *filename);
+ bool loadStringTable(const char *filename, bool clearOld);
+ void expandStringByStringTable(char **str) const;
+ char *getKeyFromStringTable(const char *str) const;
+private:
+ char *_gameFile;
+ int _resWidth;
+ int _resHeight;
+ BaseStringTable *_stringTable;
+// Not ever used:
+ int _TLMode;
+ bool _compressedSavegames;
+ Common::String _savedGameExt;
+ bool _requireAcceleration;
+ bool _allowWindowed;
+ bool _allowAdvanced;
+ bool _allowAccessTab;
+ bool _allowAboutTab;
+ bool _requireSound;
+ bool _allowDesktopRes;
+// TODO: This can probably be removed completely:
+ bool _richSavedGames;
+};
+
+} // end of namespace Wintermute
+
+#endif
diff --git a/engines/wintermute/base/base_named_object.h b/engines/wintermute/base/base_named_object.h
index 77a00cee45..d25fec4a82 100644
--- a/engines/wintermute/base/base_named_object.h
+++ b/engines/wintermute/base/base_named_object.h
@@ -42,7 +42,7 @@ public:
virtual ~BaseNamedObject(void);
BaseNamedObject(TDynamicConstructor, TDynamicConstructor);
- const char *getName() { return _name; }
+ const char *getName() const { return _name; }
void setName(const char *name);
};
diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp
index 898c0497a2..75ba4fb50f 100644
--- a/engines/wintermute/base/base_object.cpp
+++ b/engines/wintermute/base/base_object.cpp
@@ -33,7 +33,6 @@
#include "engines/wintermute/base/sound/base_sound.h"
#include "engines/wintermute/base/sound/base_sound_manager.h"
#include "engines/wintermute/base/base_game.h"
-#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/platform_osystem.h"
@@ -150,7 +149,7 @@ void BaseObject::setCaption(const char *caption, int caseVal) {
_caption[caseVal - 1] = new char[strlen(caption) + 1];
if (_caption[caseVal - 1]) {
strcpy(_caption[caseVal - 1], caption);
- _gameRef->_stringTable->expand(&_caption[caseVal - 1]);
+ _gameRef->expandStringByStringTable(&_caption[caseVal - 1]);
}
}
diff --git a/engines/wintermute/base/base_object.h b/engines/wintermute/base/base_object.h
index c8491c2cf6..7afe9cf94c 100644
--- a/engines/wintermute/base/base_object.h
+++ b/engines/wintermute/base/base_object.h
@@ -72,7 +72,7 @@ protected:
bool _ready;
Rect32 _rect;
bool _rectSet;
- int _iD;
+ int32 _iD;
char *_soundEvent;
public:
TSpriteBlendMode _blendMode;
@@ -84,7 +84,7 @@ public:
virtual bool resetSoundPan();
virtual bool updateSounds();
bool updateOneSound(BaseSound *sound);
- int _sFXVolume;
+ int32 _sFXVolume;
virtual bool handleMouseWheel(int delta);
virtual bool handleMouse(TMouseEvent event, TMouseButton button);
@@ -136,10 +136,10 @@ public:
public:
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base_parser.cpp b/engines/wintermute/base/base_parser.cpp
index 7f18c1f0cf..a7e3bd5efb 100644
--- a/engines/wintermute/base/base_parser.cpp
+++ b/engines/wintermute/base/base_parser.cpp
@@ -27,8 +27,8 @@
*/
#include "engines/wintermute/base/base_parser.h"
-#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/platform_osystem.h"
#include "common/str.h"
#include "common/util.h"
@@ -275,7 +275,7 @@ float BaseParser::getTokenFloat(char **buf) {
//////////////////////////////////////////////////////////////////////
-int BaseParser::getTokenInt(char **buf) {
+int32 BaseParser::getTokenInt(char **buf) {
Common::String token = getToken(buf);
const char *t = token.c_str();
if (!((*t >= '0' && *t <= '9') || *t == '-')) {
@@ -298,11 +298,11 @@ void BaseParser::skipToken(char **buf, char *tok, char * /*msg*/) {
//////////////////////////////////////////////////////////////////////
-int BaseParser::scanStr(const char *in, const char *format, ...) {
+int32 BaseParser::scanStr(const char *in, const char *format, ...) {
va_list arg;
va_start(arg, format);
- int num = 0;
+ int32 num = 0;
in += strspn(in, " \t\n\f");
while (*format && *in) {
diff --git a/engines/wintermute/base/base_parser.h b/engines/wintermute/base/base_parser.h
index 87a936c624..4953ac3c0b 100644
--- a/engines/wintermute/base/base_parser.h
+++ b/engines/wintermute/base/base_parser.h
@@ -59,26 +59,26 @@ namespace Wintermute {
class BaseParser {
public:
struct TokenDesc {
- int32 id;
+ int32 id;
const char *token;
};
public:
- int scanStr(const char *in, const char *format, ...);
+ int32 scanStr(const char *in, const char *format, ...);
int32 getCommand(char **buf, const TokenDesc *tokens, char **params);
BaseParser();
virtual ~BaseParser();
private:
char *getLastOffender();
void skipToken(char **buf, char *tok, char *msg = nullptr);
- int getTokenInt(char **buf);
+ int32 getTokenInt(char **buf);
float getTokenFloat(char **buf);
Common::String getToken(char **buf);
char *getAssignmentText(char **buf);
char *getSubText(char **buf, char open, char close);
void skipCharacters(char **buf, const char *toSkip);
int32 getObject(char **buf, const TokenDesc *tokens, char **name, char **data);
- int _parserLine;
+ int32 _parserLine;
char _lastOffender[255];
char *_whiteSpace;
};
diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp
index 84a1c2ec67..12bc62d5dc 100644
--- a/engines/wintermute/base/base_persistence_manager.cpp
+++ b/engines/wintermute/base/base_persistence_manager.cpp
@@ -31,10 +31,10 @@
#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_persistence_manager.h"
-#include "engines/wintermute/base/base_save_thumb_helper.h"
#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/math/vector2.h"
#include "engines/wintermute/base/gfx/base_image.h"
+#include "engines/wintermute/base/save_thumb_helper.h"
#include "engines/wintermute/base/sound/base_sound.h"
#include "engines/wintermute/graphics/transparent_surface.h"
#include "engines/wintermute/wintermute.h"
@@ -79,6 +79,16 @@ BasePersistenceManager::BasePersistenceManager(const char *savePrefix, bool dele
_savedVerMajor = _savedVerMinor = _savedVerBuild = 0;
_savedExtMajor = _savedExtMinor = 0;
+ _savedTimestamp.tm_sec = 0;
+ _savedTimestamp.tm_min = 0;
+ _savedTimestamp.tm_hour = 0;
+ _savedTimestamp.tm_mday = 0;
+ _savedTimestamp.tm_mon = 0;
+ _savedTimestamp.tm_year = 0;
+ _savedTimestamp.tm_wday = 0;
+
+ _savedPlayTime = 0;
+
_thumbnailDataSize = 0;
_thumbnailData = nullptr;
if (savePrefix) {
@@ -218,7 +228,7 @@ bool BasePersistenceManager::initSave(const char *desc) {
if (_saveStream) {
// get thumbnails
if (!_gameRef->_cachedThumbnail) {
- _gameRef->_cachedThumbnail = new BaseSaveThumbHelper(_gameRef);
+ _gameRef->_cachedThumbnail = new SaveThumbHelper(_gameRef);
if (DID_FAIL(_gameRef->_cachedThumbnail->storeThumbnail(true))) {
delete _gameRef->_cachedThumbnail;
_gameRef->_cachedThumbnail = nullptr;
diff --git a/engines/wintermute/base/base_point.h b/engines/wintermute/base/base_point.h
index c0bbd3102e..26568d5d0b 100644
--- a/engines/wintermute/base/base_point.h
+++ b/engines/wintermute/base/base_point.h
@@ -39,8 +39,8 @@ public:
DECLARE_PERSISTENT(BasePoint, BaseClass)
BasePoint();
BasePoint(int initX, int initY);
- int y;
- int x;
+ int32 y;
+ int32 x;
virtual ~BasePoint();
};
diff --git a/engines/wintermute/base/base_region.cpp b/engines/wintermute/base/base_region.cpp
index a3a23f770a..51d222be4c 100644
--- a/engines/wintermute/base/base_region.cpp
+++ b/engines/wintermute/base/base_region.cpp
@@ -29,7 +29,7 @@
#include "engines/wintermute/base/base_region.h"
#include "engines/wintermute/base/base_parser.h"
#include "engines/wintermute/base/base_dynamic_buffer.h"
-#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/scriptables/script.h"
#include "engines/wintermute/base/scriptables/script_stack.h"
#include "engines/wintermute/base/scriptables/script_value.h"
@@ -104,7 +104,7 @@ bool BaseRegion::pointInRegion(int x, int y) {
bool BaseRegion::loadFile(const char *filename) {
byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename);
if (buffer == nullptr) {
- _gameRef->LOG(0, "BaseRegion::LoadFile failed for file '%s'", filename);
+ BaseEngine::LOG(0, "BaseRegion::LoadFile failed for file '%s'", filename);
return STATUS_FAILED;
}
@@ -113,7 +113,7 @@ bool BaseRegion::loadFile(const char *filename) {
setFilename(filename);
if (DID_FAIL(ret = loadBuffer(buffer, true))) {
- _gameRef->LOG(0, "Error parsing REGION file '%s'", filename);
+ BaseEngine::LOG(0, "Error parsing REGION file '%s'", filename);
}
@@ -154,7 +154,7 @@ bool BaseRegion::loadBuffer(byte *buffer, bool complete) {
if (complete) {
if (parser.getCommand((char **)&buffer, commands, (char **)&params) != TOKEN_REGION) {
- _gameRef->LOG(0, "'REGION' keyword expected.");
+ BaseEngine::LOG(0, "'REGION' keyword expected.");
return STATUS_FAILED;
}
buffer = params;
@@ -206,7 +206,7 @@ bool BaseRegion::loadBuffer(byte *buffer, bool complete) {
}
}
if (cmd == PARSERR_TOKENNOTFOUND) {
- _gameRef->LOG(0, "Syntax error in REGION definition");
+ BaseEngine::LOG(0, "Syntax error in REGION definition");
return STATUS_FAILED;
}
@@ -446,7 +446,7 @@ typedef struct {
} dPoint;
//////////////////////////////////////////////////////////////////////////
-bool BaseRegion::ptInPolygon(int x, int y) {
+bool BaseRegion::ptInPolygon(int32 x, int32 y) {
if (_points.size() < 3) {
return false;
}
diff --git a/engines/wintermute/base/base_region.h b/engines/wintermute/base/base_region.h
index 6b7905fe53..67ca158897 100644
--- a/engines/wintermute/base/base_region.h
+++ b/engines/wintermute/base/base_region.h
@@ -39,10 +39,10 @@ public:
void cleanup();
bool mimic(BaseRegion *region, float scale = 100.0f, int x = 0, int y = 0);
bool getBoundingRect(Rect32 *rect);
- bool ptInPolygon(int x, int y);
+ bool ptInPolygon(int32 x, int32 y);
DECLARE_PERSISTENT(BaseRegion, BaseObject)
bool _active;
- int _editorSelectedPoint;
+ int32 _editorSelectedPoint;
BaseRegion(BaseGame *inGame);
virtual ~BaseRegion();
bool pointInRegion(int x, int y);
@@ -55,14 +55,14 @@ public:
virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent, const char *nameOverride);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
private:
float _lastMimicScale;
- int _lastMimicX;
- int _lastMimicY;
+ int32 _lastMimicX;
+ int32 _lastMimicY;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base_script_holder.cpp b/engines/wintermute/base/base_script_holder.cpp
index d1a9d4aa46..036bac1dd8 100644
--- a/engines/wintermute/base/base_script_holder.cpp
+++ b/engines/wintermute/base/base_script_holder.cpp
@@ -29,6 +29,7 @@
#include "engines/wintermute/ad/ad_game.h"
#include "engines/wintermute/base/base_script_holder.h"
#include "engines/wintermute/base/base_parser.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/scriptables/script_value.h"
#include "engines/wintermute/base/scriptables/script_engine.h"
#include "engines/wintermute/base/scriptables/script.h"
@@ -301,7 +302,7 @@ bool BaseScriptHolder::addScript(const char *filename) {
for (uint32 i = 0; i < _scripts.size(); i++) {
if (scumm_stricmp(_scripts[i]->_filename, filename) == 0) {
if (_scripts[i]->_state != SCRIPT_FINISHED) {
- _gameRef->LOG(0, "BaseScriptHolder::AddScript - trying to add script '%s' mutiple times (obj: '%s')", filename, getName());
+ BaseEngine::LOG(0, "BaseScriptHolder::AddScript - trying to add script '%s' mutiple times (obj: '%s')", filename, getName());
return STATUS_OK;
}
}
@@ -382,7 +383,7 @@ bool BaseScriptHolder::parseProperty(byte *buffer, bool complete) {
if (complete) {
if (parser.getCommand((char **)&buffer, commands, (char **)&params) != TOKEN_PROPERTY) {
- _gameRef->LOG(0, "'PROPERTY' keyword expected.");
+ BaseEngine::LOG(0, "'PROPERTY' keyword expected.");
return STATUS_FAILED;
}
buffer = params;
@@ -420,7 +421,7 @@ bool BaseScriptHolder::parseProperty(byte *buffer, bool complete) {
delete[] propValue;
propName = nullptr;
propValue = nullptr;
- _gameRef->LOG(0, "Syntax error in PROPERTY definition");
+ BaseEngine::LOG(0, "Syntax error in PROPERTY definition");
return STATUS_FAILED;
}
if (cmd == PARSERR_GENERIC || propName == nullptr || propValue == nullptr) {
@@ -428,7 +429,7 @@ bool BaseScriptHolder::parseProperty(byte *buffer, bool complete) {
delete[] propValue;
propName = nullptr;
propValue = nullptr;
- _gameRef->LOG(0, "Error loading PROPERTY definition");
+ BaseEngine::LOG(0, "Error loading PROPERTY definition");
return STATUS_FAILED;
}
diff --git a/engines/wintermute/base/base_script_holder.h b/engines/wintermute/base/base_script_holder.h
index 320f0fb07a..38a3f935d3 100644
--- a/engines/wintermute/base/base_script_holder.h
+++ b/engines/wintermute/base/base_script_holder.h
@@ -59,11 +59,11 @@ public:
BaseArray<ScScript *> _scripts;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
- virtual void scDebuggerDesc(char *buf, int bufSize);
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
+ virtual void scDebuggerDesc(char *buf, int bufSize) override;
// IWmeObject
private:
char *_filename;
diff --git a/engines/wintermute/base/base_scriptable.cpp b/engines/wintermute/base/base_scriptable.cpp
index 7dbcd72200..fca1df4c90 100644
--- a/engines/wintermute/base/base_scriptable.cpp
+++ b/engines/wintermute/base/base_scriptable.cpp
@@ -52,7 +52,7 @@ BaseScriptable::BaseScriptable(BaseGame *inGame, bool noValue, bool persistable)
//////////////////////////////////////////////////////////////////////////
BaseScriptable::~BaseScriptable() {
- //if (_refCount>0) _gameRef->LOG(0, "Warning: Destroying object, _refCount=%d", _refCount);
+ //if (_refCount>0) BaseEngine::LOG(0, "Warning: Destroying object, _refCount=%d", _refCount);
delete _scValue;
delete _scProp;
_scValue = nullptr;
diff --git a/engines/wintermute/base/base_scriptable.h b/engines/wintermute/base/base_scriptable.h
index b0b4e77ed2..f23d7faa5b 100644
--- a/engines/wintermute/base/base_scriptable.h
+++ b/engines/wintermute/base/base_scriptable.h
@@ -63,7 +63,7 @@ public:
virtual void scSetBool(bool val);
virtual int scCompare(BaseScriptable *val);
virtual void scDebuggerDesc(char *buf, int bufSize);
- int _refCount;
+ int32 _refCount;
ScValue *_scValue;
ScValue *_scProp;
};
diff --git a/engines/wintermute/base/base_sprite.cpp b/engines/wintermute/base/base_sprite.cpp
index 4f55e47c05..3f809f7a46 100644
--- a/engines/wintermute/base/base_sprite.cpp
+++ b/engines/wintermute/base/base_sprite.cpp
@@ -32,6 +32,7 @@
#include "engines/wintermute/base/base_dynamic_buffer.h"
#include "engines/wintermute/base/gfx/base_surface.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_frame.h"
#include "engines/wintermute/base/sound/base_sound.h"
#include "engines/wintermute/base/base_sub_frame.h"
@@ -133,7 +134,7 @@ bool BaseSprite::isFinished() {
bool BaseSprite::loadFile(const Common::String &filename, int lifeTime, TSpriteCacheType cacheType) {
Common::SeekableReadStream *file = BaseFileManager::getEngineInstance()->openFile(filename);
if (!file) {
- _gameRef->LOG(0, "BaseSprite::LoadFile failed for file '%s'", filename.c_str());
+ BaseEngine::LOG(0, "BaseSprite::LoadFile failed for file '%s'", filename.c_str());
if (_gameRef->_debugDebugMode) {
return loadFile("invalid_debug.bmp", lifeTime, cacheType);
} else {
@@ -155,7 +156,7 @@ bool BaseSprite::loadFile(const Common::String &filename, int lifeTime, TSpriteC
BaseSubFrame *subframe = new BaseSubFrame(_gameRef);
subframe->setSurface(filename, true, 0, 0, 0, lifeTime, true);
if (subframe->_surface == nullptr) {
- _gameRef->LOG(0, "Error loading simple sprite '%s'", filename.c_str());
+ BaseEngine::LOG(0, "Error loading simple sprite '%s'", filename.c_str());
ret = STATUS_FAILED;
delete frame;
delete subframe;
@@ -170,7 +171,7 @@ bool BaseSprite::loadFile(const Common::String &filename, int lifeTime, TSpriteC
byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename);
if (buffer) {
if (DID_FAIL(ret = loadBuffer(buffer, true, lifeTime, cacheType))) {
- _gameRef->LOG(0, "Error parsing SPRITE file '%s'", filename.c_str());
+ BaseEngine::LOG(0, "Error parsing SPRITE file '%s'", filename.c_str());
} else {
ret = STATUS_OK;
}
@@ -231,7 +232,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa
if (complete) {
if (parser.getCommand((char **)&buffer, commands, (char **)&params) != TOKEN_SPRITE) {
- _gameRef->LOG(0, "'SPRITE' keyword expected.");
+ BaseEngine::LOG(0, "'SPRITE' keyword expected.");
return STATUS_FAILED;
}
buffer = params;
@@ -311,7 +312,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa
if (DID_FAIL(frame->loadBuffer(params, frameLifeTime, _streamedKeepLoaded))) {
delete frame;
- _gameRef->LOG(0, "Error parsing frame %d", frameCount);
+ BaseEngine::LOG(0, "Error parsing frame %d", frameCount);
return STATUS_FAILED;
}
@@ -330,7 +331,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa
}
if (cmd == PARSERR_TOKENNOTFOUND) {
- _gameRef->LOG(0, "Syntax error in SPRITE definition");
+ BaseEngine::LOG(0, "Syntax error in SPRITE definition");
return STATUS_FAILED;
}
_canBreak = !_continuous;
@@ -365,9 +366,9 @@ bool BaseSprite::getCurrentFrame(float zoomX, float zoomY) {
uint32 timer;
if (_owner && _owner->_freezable) {
- timer = _gameRef->_timer;
+ timer = _gameRef->getTimer()->getTime();
} else {
- timer = _gameRef->_liveTimer;
+ timer = _gameRef->getLiveTimer()->getTime();
}
int lastFrame = _currentFrame;
diff --git a/engines/wintermute/base/base_sprite.h b/engines/wintermute/base/base_sprite.h
index ac1a0e919b..24c1f47755 100644
--- a/engines/wintermute/base/base_sprite.h
+++ b/engines/wintermute/base/base_sprite.h
@@ -45,8 +45,8 @@ public:
DECLARE_PERSISTENT(BaseSprite, BaseScriptHolder)
bool getBoundingRect(Rect32 *rect, int x, int y, float scaleX = 100, float scaleY = 100);
- int _moveY;
- int _moveX;
+ int32 _moveY;
+ int32 _moveX;
bool display(int x, int y, BaseObject *registerOwner = nullptr, float zoomX = 100, float zoomY = 100, uint32 alpha = 0xFFFFFFFF, float rotate = 0.0f, TSpriteBlendMode blendMode = BLEND_NORMAL);
bool getCurrentFrame(float zoomX = 100, float zoomY = 100);
void reset();
@@ -64,19 +64,19 @@ public:
bool saveAsText(BaseDynamicBuffer *buffer, int indent);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
private:
BaseObject *_owner;
bool _canBreak;
bool _changed;
bool _editorAllFrames;
char *_editorBgFile;
- int _editorBgOffsetX;
- int _editorBgOffsetY;
- int _editorBgAlpha;
+ int32 _editorBgOffsetX;
+ int32 _editorBgOffsetY;
+ int32 _editorBgAlpha;
bool _editorMuted;
bool _finished;
bool _continuous;
diff --git a/engines/wintermute/base/base_string_table.cpp b/engines/wintermute/base/base_string_table.cpp
index 11ec7b094f..8207c32244 100644
--- a/engines/wintermute/base/base_string_table.cpp
+++ b/engines/wintermute/base/base_string_table.cpp
@@ -29,6 +29,7 @@
#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_string_table.h"
#include "common/str.h"
@@ -64,7 +65,7 @@ bool BaseStringTable::addString(const char *key, const char *val, bool reportDup
StringsIter it = _strings.find(finalKey);
if (it != _strings.end() && reportDuplicities) {
- _gameRef->LOG(0, " Warning: Duplicate definition of string '%s'.", finalKey.c_str());
+ BaseEngine::LOG(0, " Warning: Duplicate definition of string '%s'.", finalKey.c_str());
}
_strings[finalKey] = val;
@@ -185,7 +186,7 @@ const char *BaseStringTable::expandStatic(const char *string) const {
//////////////////////////////////////////////////////////////////////////
bool BaseStringTable::loadFile(const char *filename, bool clearOld) {
- _gameRef->LOG(0, "Loading string table...");
+ BaseEngine::LOG(0, "Loading string table...");
if (clearOld) {
_strings.clear();
@@ -194,7 +195,7 @@ bool BaseStringTable::loadFile(const char *filename, bool clearOld) {
uint32 size;
byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename, &size);
if (buffer == nullptr) {
- _gameRef->LOG(0, "BaseStringTable::LoadFile failed for file '%s'", filename);
+ BaseEngine::LOG(0, "BaseStringTable::LoadFile failed for file '%s'", filename);
return STATUS_FAILED;
}
@@ -205,7 +206,7 @@ bool BaseStringTable::loadFile(const char *filename, bool clearOld) {
if (_gameRef->_textEncoding != TEXT_UTF8) {
_gameRef->_textEncoding = TEXT_UTF8;
//_gameRef->_textEncoding = TEXT_ANSI;
- _gameRef->LOG(0, " UTF8 file detected, switching to UTF8 text encoding");
+ BaseEngine::LOG(0, " UTF8 file detected, switching to UTF8 text encoding");
}
} else {
_gameRef->_textEncoding = TEXT_ANSI;
@@ -247,7 +248,7 @@ bool BaseStringTable::loadFile(const char *filename, bool clearOld) {
delete[] buffer;
- _gameRef->LOG(0, " %d strings loaded", _strings.size());
+ BaseEngine::LOG(0, " %d strings loaded", _strings.size());
return STATUS_OK;
}
diff --git a/engines/wintermute/base/base_sub_frame.cpp b/engines/wintermute/base/base_sub_frame.cpp
index a06d7f50eb..d93cf667f1 100644
--- a/engines/wintermute/base/base_sub_frame.cpp
+++ b/engines/wintermute/base/base_sub_frame.cpp
@@ -33,6 +33,7 @@
#include "engines/wintermute/base/gfx/base_surface.h"
#include "engines/wintermute/base/base_surface_storage.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/scriptables/script_value.h"
@@ -180,7 +181,7 @@ bool BaseSubFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) {
}
}
if (cmd == PARSERR_TOKENNOTFOUND) {
- _gameRef->LOG(0, "Syntax error in SUBFRAME definition");
+ BaseEngine::LOG(0, "Syntax error in SUBFRAME definition");
return STATUS_FAILED;
}
@@ -200,7 +201,7 @@ bool BaseSubFrame::loadBuffer(byte *buffer, int lifeTime, bool keepLoaded) {
/*
if (_surface == nullptr)
{
- _gameRef->LOG(0, "Error parsing sub-frame. Image not set.");
+ BaseEngine::LOG(0, "Error parsing sub-frame. Image not set.");
return STATUS_FAILED;
}
*/
@@ -238,12 +239,12 @@ bool BaseSubFrame::draw(int x, int y, BaseObject *registerOwner, float zoomX, fl
if (registerOwner != nullptr && !_decoration) {
if (zoomX == 100 && zoomY == 100) {
- _gameRef->_renderer->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, x - _hotspotX + getRect().left, y - _hotspotY + getRect().top, getRect().right - getRect().left, getRect().bottom - getRect().top, zoomX, zoomY, precise));
+ BaseEngine::getRenderer()->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, x - _hotspotX + getRect().left, y - _hotspotY + getRect().top, getRect().right - getRect().left, getRect().bottom - getRect().top, zoomX, zoomY, precise));
} else {
- _gameRef->_renderer->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, (int)(x - (_hotspotX + getRect().left) * (zoomX / 100)), (int)(y - (_hotspotY + getRect().top) * (zoomY / 100)), (int)((getRect().right - getRect().left) * (zoomX / 100)), (int)((getRect().bottom - getRect().top) * (zoomY / 100)), zoomX, zoomY, precise));
+ BaseEngine::getRenderer()->addRectToList(new BaseActiveRect(_gameRef, registerOwner, this, (int)(x - (_hotspotX + getRect().left) * (zoomX / 100)), (int)(y - (_hotspotY + getRect().top) * (zoomY / 100)), (int)((getRect().right - getRect().left) * (zoomX / 100)), (int)((getRect().bottom - getRect().top) * (zoomY / 100)), zoomX, zoomY, precise));
}
}
- if (_gameRef->_suspendedRendering) {
+ if (_gameRef->getSuspendedRendering()) {
return STATUS_OK;
}
diff --git a/engines/wintermute/base/base_sub_frame.h b/engines/wintermute/base/base_sub_frame.h
index 2888761bb3..1ecf6c671d 100644
--- a/engines/wintermute/base/base_sub_frame.h
+++ b/engines/wintermute/base/base_sub_frame.h
@@ -72,7 +72,7 @@ public:
byte _cKRed;
byte _cKGreen;
byte _cKBlue;
- int _lifeTime;
+ int32 _lifeTime;
bool _keepLoaded;
bool _2DOnly;
diff --git a/engines/wintermute/base/base_surface_storage.cpp b/engines/wintermute/base/base_surface_storage.cpp
index 08d2d2f767..8dbd6a6d2a 100644
--- a/engines/wintermute/base/base_surface_storage.cpp
+++ b/engines/wintermute/base/base_surface_storage.cpp
@@ -30,6 +30,7 @@
#include "engines/wintermute/base/gfx/base_surface.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/platform_osystem.h"
#include "common/str.h"
@@ -54,7 +55,7 @@ BaseSurfaceStorage::~BaseSurfaceStorage() {
bool BaseSurfaceStorage::cleanup(bool warn) {
for (uint32 i = 0; i < _surfaces.size(); i++) {
if (warn) {
- _gameRef->LOG(0, "BaseSurfaceStorage warning: purging surface '%s', usage:%d", _surfaces[i]->getFileName(), _surfaces[i]->_referenceCount);
+ BaseEngine::LOG(0, "BaseSurfaceStorage warning: purging surface '%s', usage:%d", _surfaces[i]->getFileName(), _surfaces[i]->_referenceCount);
}
delete _surfaces[i];
}
@@ -66,15 +67,15 @@ bool BaseSurfaceStorage::cleanup(bool warn) {
//////////////////////////////////////////////////////////////////////////
bool BaseSurfaceStorage::initLoop() {
- if (_gameRef->_smartCache && _gameRef->_liveTimer - _lastCleanupTime >= _gameRef->_surfaceGCCycleTime) {
- _lastCleanupTime = _gameRef->_liveTimer;
+ if (_gameRef->_smartCache && _gameRef->getLiveTimer()->getTime() - _lastCleanupTime >= _gameRef->_surfaceGCCycleTime) {
+ _lastCleanupTime = _gameRef->getLiveTimer()->getTime();
sortSurfaces();
for (uint32 i = 0; i < _surfaces.size(); i++) {
if (_surfaces[i]->_lifeTime <= 0) {
break;
}
- if (_surfaces[i]->_lifeTime > 0 && _surfaces[i]->_valid && (int)(_gameRef->_liveTimer - _surfaces[i]->_lastUsedTime) >= _surfaces[i]->_lifeTime) {
+ if (_surfaces[i]->_lifeTime > 0 && _surfaces[i]->_valid && (int)(_gameRef->getLiveTimer()->getTime() - _surfaces[i]->_lastUsedTime) >= _surfaces[i]->_lifeTime) {
//_gameRef->QuickMessageForm("Invalidating: %s", _surfaces[i]->_filename);
_surfaces[i]->invalidate();
}
@@ -111,7 +112,7 @@ BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool
if (!BaseFileManager::getEngineInstance()->hasFile(filename)) {
if (filename.size()) {
- _gameRef->LOG(0, "Missing image: '%s'", filename.c_str());
+ BaseEngine::LOG(0, "Missing image: '%s'", filename.c_str());
}
if (_gameRef->_debugDebugMode) {
return addSurface("invalid_debug.bmp", defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
@@ -121,7 +122,7 @@ BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool
}
BaseSurface *surface;
- surface = _gameRef->_renderer->createSurface();
+ surface = BaseEngine::getRenderer()->createSurface();
if (!surface) {
return nullptr;
@@ -144,7 +145,7 @@ bool BaseSurfaceStorage::restoreAll() {
for (uint32 i = 0; i < _surfaces.size(); i++) {
ret = _surfaces[i]->restore();
if (ret != STATUS_OK) {
- _gameRef->LOG(0, "BaseSurfaceStorage::RestoreAll failed");
+ BaseEngine::LOG(0, "BaseSurfaceStorage::RestoreAll failed");
return ret;
}
}
diff --git a/engines/wintermute/base/base_transition_manager.cpp b/engines/wintermute/base/base_transition_manager.cpp
index 6ae51d8e83..1c869e6a2b 100644
--- a/engines/wintermute/base/base_transition_manager.cpp
+++ b/engines/wintermute/base/base_transition_manager.cpp
@@ -28,6 +28,7 @@
#include "engines/wintermute/base/base_transition_manager.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
namespace Wintermute {
@@ -103,7 +104,7 @@ bool BaseTransitionMgr::update() {
uint32 time = g_system->getMillis() - _lastTime;
int alpha = (int)(255 - (float)time / (float)FADE_DURATION * 255);
alpha = MIN(255, MAX(alpha, 0));
- _gameRef->_renderer->fade((uint16)alpha);
+ BaseEngine::getRenderer()->fade((uint16)alpha);
if (time > FADE_DURATION) {
_state = TRANS_MGR_READY;
@@ -115,7 +116,7 @@ bool BaseTransitionMgr::update() {
uint32 time = g_system->getMillis() - _lastTime;
int alpha = (int)((float)time / (float)FADE_DURATION * 255);
alpha = MIN(255, MAX(alpha, 0));
- _gameRef->_renderer->fade((uint16)alpha);
+ BaseEngine::getRenderer()->fade((uint16)alpha);
if (time > FADE_DURATION) {
_state = TRANS_MGR_READY;
diff --git a/engines/wintermute/base/base_viewport.cpp b/engines/wintermute/base/base_viewport.cpp
index 5a488b707f..4f62a4f6f9 100644
--- a/engines/wintermute/base/base_viewport.cpp
+++ b/engines/wintermute/base/base_viewport.cpp
@@ -26,9 +26,10 @@
* Copyright (c) 2011 Jan Nedoma
*/
-#include "engines/wintermute/base/base_game.h"
-#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/base/base_viewport.h"
+#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/base_persistence_manager.h"
+#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
namespace Wintermute {
@@ -68,8 +69,8 @@ bool BaseViewport::setRect(int left, int top, int right, int bottom, bool noChec
if (!noCheck) {
left = MAX(left, 0);
top = MAX(top, 0);
- right = MIN(right, _gameRef->_renderer->_width);
- bottom = MIN(bottom, _gameRef->_renderer->_height);
+ right = MIN(right, BaseEngine::instance().getRenderer()->getWidth());
+ bottom = MIN(bottom, BaseEngine::instance().getRenderer()->getHeight());
}
BasePlatform::setRect(&_rect, left, top, right, bottom);
diff --git a/engines/wintermute/base/base_viewport.h b/engines/wintermute/base/base_viewport.h
index c69682da62..75b9989080 100644
--- a/engines/wintermute/base/base_viewport.h
+++ b/engines/wintermute/base/base_viewport.h
@@ -31,6 +31,8 @@
#include "engines/wintermute/base/base.h"
+#include "engines/wintermute/math/rect32.h"
+#include "engines/wintermute/persistent.h"
namespace Wintermute {
class BaseObject;
@@ -41,8 +43,8 @@ public:
Rect32 *getRect();
bool setRect(int left, int top, int right, int bottom, bool noCheck = false);
DECLARE_PERSISTENT(BaseViewport, BaseClass)
- int _offsetY;
- int _offsetX;
+ int32 _offsetY;
+ int32 _offsetX;
BaseObject *_mainObject;
BaseViewport(BaseGame *inGame = nullptr);
virtual ~BaseViewport();
diff --git a/engines/wintermute/base/file/base_package.h b/engines/wintermute/base/file/base_package.h
index 2882eb03b7..bcf088aaea 100644
--- a/engines/wintermute/base/file/base_package.h
+++ b/engines/wintermute/base/file/base_package.h
@@ -41,7 +41,7 @@ public:
bool _boundToExe;
byte _priority;
Common::String _name;
- int _cd;
+ int32 _cd;
BasePackage();
};
diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h
index 5a24e0179a..bfef29a5ed 100644
--- a/engines/wintermute/base/gfx/base_renderer.h
+++ b/engines/wintermute/base/gfx/base_renderer.h
@@ -166,10 +166,11 @@ public:
bool pointInViewport(Point32 *P);
bool _active;
bool _ready;
- bool _windowed;
- int _bPP;
- int _height;
- int _width;
+
+ bool isReady() const { return _ready; }
+ bool isWindowed() const { return _windowed; }
+ int32 getBPP() const { return _bPP; }
+
uint32 _window;
uint32 _forceAlphaColor;
@@ -186,26 +187,35 @@ public:
void setSaveImage(const char *filename, int x, int y);
bool displayIndicator();
+
+ int32 getWidth() const { return _width; }
+ int32 getHeight() const { return _height; }
protected:
+ int32 _height;
+ int32 _width;
+
+ bool _windowed;
+ int32 _bPP;
+
Common::String _loadImageName;
Common::String _saveImageName;
- int _saveImageX;
- int _saveImageY;
- int _loadImageX;
- int _loadImageY;
+ int32 _saveImageX;
+ int32 _saveImageY;
+ int32 _loadImageX;
+ int32 _loadImageY;
BaseSurface *_saveLoadImage;
bool _hasDrawnSaveLoadImage;
- int _indicatorWidthDrawn;
+ int32 _indicatorWidthDrawn;
uint32 _indicatorColor;
- int _indicatorX;
- int _indicatorY;
- int _indicatorWidth;
- int _indicatorHeight;
+ int32 _indicatorX;
+ int32 _indicatorY;
+ int32 _indicatorWidth;
+ int32 _indicatorHeight;
bool _loadInProgress;
bool _indicatorDisplay;
- int _indicatorProgress;
-protected:
+ int32 _indicatorProgress;
+
uint32 _clipperWindow;
Rect32 _windowRect;
diff --git a/engines/wintermute/base/gfx/base_surface.cpp b/engines/wintermute/base/gfx/base_surface.cpp
index d882adf5ad..2002463ea4 100644
--- a/engines/wintermute/base/gfx/base_surface.cpp
+++ b/engines/wintermute/base/gfx/base_surface.cpp
@@ -129,7 +129,7 @@ bool BaseSurface::invalidate() {
//////////////////////////////////////////////////////////////////////////
bool BaseSurface::prepareToDraw() {
- _lastUsedTime = _gameRef->_liveTimer;
+ _lastUsedTime = _gameRef->getLiveTimer()->getTime();
if (!_valid) {
//_gameRef->LOG(0, "Reviving: %s", _filename);
diff --git a/engines/wintermute/base/gfx/base_surface.h b/engines/wintermute/base/gfx/base_surface.h
index 1ada900161..b83efa0bb8 100644
--- a/engines/wintermute/base/gfx/base_surface.h
+++ b/engines/wintermute/base/gfx/base_surface.h
@@ -41,7 +41,7 @@ public:
virtual bool prepareToDraw();
uint32 _lastUsedTime;
bool _valid;
- int _lifeTime;
+ int32 _lifeTime;
bool _pixelOpReady;
BaseSurface(BaseGame *inGame);
@@ -90,8 +90,8 @@ protected:
bool _keepLoaded;
Common::String _filename;
- int _height;
- int _width;
+ int32 _height;
+ int32 _width;
};
diff --git a/engines/wintermute/base/particles/part_emitter.cpp b/engines/wintermute/base/particles/part_emitter.cpp
index 1026969055..d09f2215dd 100644
--- a/engines/wintermute/base/particles/part_emitter.cpp
+++ b/engines/wintermute/base/particles/part_emitter.cpp
@@ -32,7 +32,8 @@
#include "engines/wintermute/math/matrix4.h"
#include "engines/wintermute/base/scriptables/script_value.h"
#include "engines/wintermute/base/scriptables/script_stack.h"
-#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/timer.h"
#include "engines/wintermute/base/base_region.h"
#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
@@ -131,7 +132,7 @@ bool PartEmitter::addSprite(const char *filename) {
// check if file exists
Common::SeekableReadStream *File = BaseFileManager::getEngineInstance()->openFile(filename);
if (!File) {
- _gameRef->LOG(0, "Sprite '%s' not found", filename);
+ BaseEngine::LOG(0, "Sprite '%s' not found", filename);
return STATUS_FAILED;
} else {
BaseFileManager::getEngineInstance()->closeFile(File);
@@ -252,7 +253,7 @@ bool PartEmitter::update() {
if (!_running) {
return STATUS_OK;
} else {
- return updateInternal(_gameRef->_timer, _gameRef->_timerDelta);
+ return updateInternal(BaseEngine::getTimer()->getTime(), BaseEngine::getTimer()->getTimeDelta());
}
}
@@ -321,7 +322,7 @@ bool PartEmitter::updateInternal(uint32 currentTime, uint32 timerDelta) {
//////////////////////////////////////////////////////////////////////////
bool PartEmitter::display(BaseRegion *region) {
if (_sprites.size() <= 1) {
- _gameRef->_renderer->startSpriteBatch();
+ BaseEngine::getRenderer()->startSpriteBatch();
}
for (uint32 i = 0; i < _particles.size(); i++) {
@@ -335,7 +336,7 @@ bool PartEmitter::display(BaseRegion *region) {
}
if (_sprites.size() <= 1) {
- _gameRef->_renderer->endSpriteBatch();
+ BaseEngine::getRenderer()->endSpriteBatch();
}
return STATUS_OK;
@@ -353,7 +354,7 @@ bool PartEmitter::start() {
if (_overheadTime > 0) {
uint32 delta = 500;
int steps = _overheadTime / delta;
- uint32 currentTime = _gameRef->_timer - _overheadTime;
+ uint32 currentTime = BaseEngine::getTimer()->getTime() - _overheadTime;
for (int i = 0; i < steps; i++) {
updateInternal(currentTime, delta);
diff --git a/engines/wintermute/base/particles/part_emitter.h b/engines/wintermute/base/particles/part_emitter.h
index 54a49df230..cbc0aa49b4 100644
--- a/engines/wintermute/base/particles/part_emitter.h
+++ b/engines/wintermute/base/particles/part_emitter.h
@@ -43,7 +43,7 @@ public:
PartEmitter(BaseGame *inGame, BaseScriptHolder *Owner);
virtual ~PartEmitter(void);
- int _fadeOutTime;
+ int32 _fadeOutTime;
bool start();
@@ -70,11 +70,11 @@ public:
private:
- int _width;
- int _height;
+ int32 _width;
+ int32 _height;
- int _angle1;
- int _angle2;
+ int32 _angle1;
+ int32 _angle2;
float _rotation1;
float _rotation2;
diff --git a/engines/wintermute/base/particles/part_particle.h b/engines/wintermute/base/particles/part_particle.h
index 4b8c2f131e..8cca6b4057 100644
--- a/engines/wintermute/base/particles/part_particle.h
+++ b/engines/wintermute/base/particles/part_particle.h
@@ -55,8 +55,8 @@ public:
float _rotation;
float _angVelocity;
- int _alpha1;
- int _alpha2;
+ int32 _alpha1;
+ int32 _alpha2;
Rect32 _border;
Vector2 _pos;
@@ -65,7 +65,7 @@ public:
float _scale;
BaseSprite *_sprite;
uint32 _creationTime;
- int _lifeTime;
+ int32 _lifeTime;
bool _isDead;
TParticleState _state;
@@ -80,9 +80,9 @@ public:
bool persist(BasePersistenceManager *PersistMgr);
private:
uint32 _fadeStart;
- int _fadeTime;
- int _currentAlpha;
- int _fadeStartAlpha;
+ int32 _fadeTime;
+ int32 _currentAlpha;
+ int32 _fadeStartAlpha;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/base_save_thumb_helper.cpp b/engines/wintermute/base/save_thumb_helper.cpp
index 76d703a697..db6f855cc6 100644
--- a/engines/wintermute/base/base_save_thumb_helper.cpp
+++ b/engines/wintermute/base/save_thumb_helper.cpp
@@ -26,7 +26,7 @@
* Copyright (c) 2011 Jan Nedoma
*/
-#include "engines/wintermute/base/base_save_thumb_helper.h"
+#include "engines/wintermute/base/save_thumb_helper.h"
#include "engines/wintermute/base/gfx/base_image.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/base_game.h"
@@ -35,22 +35,22 @@
namespace Wintermute {
//////////////////////////////////////////////////////////////////////////
-BaseSaveThumbHelper::BaseSaveThumbHelper(BaseGame *inGame) : BaseClass(inGame) {
+SaveThumbHelper::SaveThumbHelper(const BaseGame *inGame) {
_thumbnail = nullptr;
_scummVMThumb = nullptr;
}
//////////////////////////////////////////////////////////////////////////
-BaseSaveThumbHelper::~BaseSaveThumbHelper(void) {
+SaveThumbHelper::~SaveThumbHelper(void) {
delete _thumbnail;
_thumbnail = nullptr;
delete _scummVMThumb;
_scummVMThumb = nullptr;
}
-BaseImage *BaseSaveThumbHelper::storeThumb(bool doFlip, int width, int height) {
+BaseImage *SaveThumbHelper::storeThumb(bool doFlip, int width, int height) {
BaseImage *thumbnail = nullptr;
- if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) {
+ if (_gameRef->getSaveThumbWidth() > 0 && _gameRef->getSaveThumbHeight() > 0) {
if (doFlip) {
// when using opengl on windows it seems to be necessary to do this twice
// works normally for direct3d
@@ -67,7 +67,7 @@ BaseImage *BaseSaveThumbHelper::storeThumb(bool doFlip, int width, int height) {
}
// normal thumbnail
- if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) {
+ if (_gameRef->getSaveThumbWidth() > 0 && _gameRef->getSaveThumbHeight() > 0) {
thumbnail = new BaseImage();
thumbnail->copyFrom(screenshot, width, height);
}
@@ -80,13 +80,13 @@ BaseImage *BaseSaveThumbHelper::storeThumb(bool doFlip, int width, int height) {
}
//////////////////////////////////////////////////////////////////////////
-bool BaseSaveThumbHelper::storeThumbnail(bool doFlip) {
+bool SaveThumbHelper::storeThumbnail(bool doFlip) {
delete _thumbnail;
_thumbnail = nullptr;
- if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) {
+ if (_gameRef->getSaveThumbWidth() > 0 && _gameRef->getSaveThumbHeight() > 0) {
- _thumbnail = storeThumb(doFlip, _gameRef->_thumbnailWidth, _gameRef->_thumbnailHeight);
+ _thumbnail = storeThumb(doFlip, _gameRef->getSaveThumbWidth(), _gameRef->getSaveThumbHeight());
if (!_thumbnail) {
return STATUS_FAILED;
}
@@ -96,7 +96,7 @@ bool BaseSaveThumbHelper::storeThumbnail(bool doFlip) {
}
//////////////////////////////////////////////////////////////////////////
-bool BaseSaveThumbHelper::storeScummVMThumbNail(bool doFlip) {
+bool SaveThumbHelper::storeScummVMThumbNail(bool doFlip) {
delete _scummVMThumb;
_scummVMThumb = nullptr;
diff --git a/engines/wintermute/base/base_save_thumb_helper.h b/engines/wintermute/base/save_thumb_helper.h
index 8e8a7183c2..43cc7e39a7 100644
--- a/engines/wintermute/base/base_save_thumb_helper.h
+++ b/engines/wintermute/base/save_thumb_helper.h
@@ -28,17 +28,15 @@
#ifndef WINTERMUTE_BASE_SAVE_THUMB_HELPER_H
#define WINTERMUTE_BASE_SAVE_THUMB_HELPER_H
-
-#include "engines/wintermute/base/base.h"
-
namespace Wintermute {
class BaseImage;
+class BaseGame;
-class BaseSaveThumbHelper : public BaseClass {
+class SaveThumbHelper {
public:
- BaseSaveThumbHelper(BaseGame *inGame);
- virtual ~BaseSaveThumbHelper(void);
+ SaveThumbHelper(const BaseGame *inGame);
+ virtual ~SaveThumbHelper(void);
bool storeThumbnail(bool doFlip = false);
bool storeScummVMThumbNail(bool doFlip = false);
@@ -47,6 +45,7 @@ public:
private:
BaseImage *storeThumb(bool doFlip, int width, int height);
BaseImage *_richThumbnail;
+ BaseGame *_gameRef;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/saveload.cpp b/engines/wintermute/base/saveload.cpp
index 465684a7a3..1b7dfd42ed 100644
--- a/engines/wintermute/base/saveload.cpp
+++ b/engines/wintermute/base/saveload.cpp
@@ -75,7 +75,7 @@ bool SaveLoad::loadGame(const Common::String &filename, BaseGame *gameRef) {
gameRef->_renderer->endSaveLoad();
- //_gameRef->LOG(0, "Load end %d", BaseUtils::GetUsedMemMB());
+ //BaseEngine::LOG(0, "Load end %d", BaseUtils::GetUsedMemMB());
// AdGame:
if (DID_SUCCEED(ret)) {
SystemClassRegistry::getInstance()->enumInstances(SaveLoad::afterLoadRegion, "AdRegion", nullptr);
diff --git a/engines/wintermute/base/scriptables/script.cpp b/engines/wintermute/base/scriptables/script.cpp
index 23c452b73c..56ffbf75c5 100644
--- a/engines/wintermute/base/scriptables/script.cpp
+++ b/engines/wintermute/base/scriptables/script.cpp
@@ -1194,7 +1194,7 @@ bool ScScript::sleep(uint32 duration) {
_waitTime = g_system->getMillis() + duration;
_waitFrozen = true;
} else {
- _waitTime = _gameRef->_timer + duration;
+ _waitTime = _gameRef->getTimer()->getTime() + duration;
_waitFrozen = false;
}
return STATUS_OK;
diff --git a/engines/wintermute/base/scriptables/script.h b/engines/wintermute/base/scriptables/script.h
index 428eb9a17e..ee9f45e204 100644
--- a/engines/wintermute/base/scriptables/script.h
+++ b/engines/wintermute/base/scriptables/script.h
@@ -113,7 +113,7 @@ public:
char *dll_name;
TCallType call_type;
TExternalType returns;
- int nu_params;
+ int32 nu_params;
TExternalType *params;
} TExternalFunction;
@@ -124,7 +124,7 @@ public:
ScStack *_stack;
ScValue *_globals;
ScEngine *_engine;
- int _currentLine;
+ int32 _currentLine;
bool executeInstruction();
char *getString();
uint32 getDWORD();
diff --git a/engines/wintermute/base/scriptables/script_engine.cpp b/engines/wintermute/base/scriptables/script_engine.cpp
index d5c5797a39..d8f38f2f4d 100644
--- a/engines/wintermute/base/scriptables/script_engine.cpp
+++ b/engines/wintermute/base/scriptables/script_engine.cpp
@@ -285,7 +285,7 @@ bool ScEngine::tick() {
_scripts[i]->run();
}
} else {
- if (_scripts[i]->_waitTime <= _gameRef->_timer) {
+ if (_scripts[i]->_waitTime <= _gameRef->getTimer()->getTime()) {
_scripts[i]->run();
}
}
diff --git a/engines/wintermute/base/scriptables/script_ext_array.h b/engines/wintermute/base/scriptables/script_ext_array.h
index 284c547a27..68f808641e 100644
--- a/engines/wintermute/base/scriptables/script_ext_array.h
+++ b/engines/wintermute/base/scriptables/script_ext_array.h
@@ -46,7 +46,7 @@ public:
bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
const char *scToString();
private:
- int _length;
+ int32 _length;
ScValue *_values;
Common::String _strRep;
};
diff --git a/engines/wintermute/base/scriptables/script_ext_file.h b/engines/wintermute/base/scriptables/script_ext_file.h
index f7c72fcfb3..fa2384109f 100644
--- a/engines/wintermute/base/scriptables/script_ext_file.h
+++ b/engines/wintermute/base/scriptables/script_ext_file.h
@@ -49,7 +49,7 @@ public:
private:
Common::SeekableReadStream *_readFile;
Common::WriteStream *_writeFile;
- int _mode; // 0..none, 1..read, 2..write, 3..append
+ int32 _mode; // 0..none, 1..read, 2..write, 3..append
bool _textMode;
void close();
void cleanup();
diff --git a/engines/wintermute/base/scriptables/script_ext_mem_buffer.h b/engines/wintermute/base/scriptables/script_ext_mem_buffer.h
index 1527a323dc..6700a03f50 100644
--- a/engines/wintermute/base/scriptables/script_ext_mem_buffer.h
+++ b/engines/wintermute/base/scriptables/script_ext_mem_buffer.h
@@ -47,7 +47,7 @@ public:
virtual ~SXMemBuffer();
virtual void *scToMemBuffer();
private:
- int _size;
+ int32 _size;
bool resize(int newSize);
void *_buffer;
diff --git a/engines/wintermute/base/scriptables/script_ext_string.cpp b/engines/wintermute/base/scriptables/script_ext_string.cpp
index 71544a20aa..7cb3b9360b 100644
--- a/engines/wintermute/base/scriptables/script_ext_string.cpp
+++ b/engines/wintermute/base/scriptables/script_ext_string.cpp
@@ -270,7 +270,7 @@ bool SXString::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
ScValue *val = stack->pop();
char separators[MAX_PATH_LENGTH] = ",";
if (!val->isNULL()) {
- strcpy(separators, val->getString());
+ Common::strlcpy(separators, val->getString(), MAX_PATH_LENGTH);
}
SXArray *array = new SXArray(_gameRef);
diff --git a/engines/wintermute/base/scriptables/script_ext_string.h b/engines/wintermute/base/scriptables/script_ext_string.h
index 00bffab3a9..50b61deba4 100644
--- a/engines/wintermute/base/scriptables/script_ext_string.h
+++ b/engines/wintermute/base/scriptables/script_ext_string.h
@@ -50,7 +50,7 @@ public:
private:
char *_string;
- int _capacity;
+ int32 _capacity;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/scriptables/script_stack.h b/engines/wintermute/base/scriptables/script_stack.h
index 86d246cf34..82c3debefa 100644
--- a/engines/wintermute/base/scriptables/script_stack.h
+++ b/engines/wintermute/base/scriptables/script_stack.h
@@ -57,7 +57,7 @@ public:
ScStack(BaseGame *inGame);
virtual ~ScStack();
BaseArray<ScValue *> _values;
- int _sP;
+ int32 _sP;
};
diff --git a/engines/wintermute/base/scriptables/script_value.h b/engines/wintermute/base/scriptables/script_value.h
index bf7d9cd8a1..e8173474d6 100644
--- a/engines/wintermute/base/scriptables/script_value.h
+++ b/engines/wintermute/base/scriptables/script_value.h
@@ -87,7 +87,7 @@ public:
ScValue *_valRef;
private:
bool _valBool;
- int _valInt;
+ int32 _valInt;
double _valFloat;
char *_valString;
public:
diff --git a/engines/wintermute/base/sound/base_sound.h b/engines/wintermute/base/sound/base_sound.h
index 637061b7cc..3412e6c3a3 100644
--- a/engines/wintermute/base/sound/base_sound.h
+++ b/engines/wintermute/base/sound/base_sound.h
@@ -67,7 +67,7 @@ private:
Common::String _soundFilename;
bool _soundStreamed;
Audio::Mixer::SoundType _soundType;
- int _soundPrivateVolume;
+ int32 _soundPrivateVolume;
uint32 _soundLoopStart;
uint32 _soundPosition;
bool _soundPlaying;
diff --git a/engines/wintermute/base/sound/base_sound_buffer.h b/engines/wintermute/base/sound/base_sound_buffer.h
index 9c39f4c34b..e78d062cd4 100644
--- a/engines/wintermute/base/sound/base_sound_buffer.h
+++ b/engines/wintermute/base/sound/base_sound_buffer.h
@@ -86,13 +86,13 @@ public:
Audio::Mixer::SoundType _type;
bool _looping;
- int _privateVolume;
+ int32 _privateVolume;
private:
uint32 _startPos;
Common::String _filename;
bool _streamed;
Common::SeekableReadStream *_file;
- int _volume;
+ int32 _volume;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/base/sound/base_sound_manager.cpp b/engines/wintermute/base/sound/base_sound_manager.cpp
index c6eb871a85..f3e7bfb408 100644
--- a/engines/wintermute/base/sound/base_sound_manager.cpp
+++ b/engines/wintermute/base/sound/base_sound_manager.cpp
@@ -30,7 +30,6 @@
#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/utils/path_util.h"
#include "engines/wintermute/utils/string_util.h"
-#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/sound/base_sound_buffer.h"
@@ -123,7 +122,7 @@ BaseSoundBuffer *BaseSoundMgr::addSound(const Common::String &filename, Audio::M
bool res = sound->loadFromFile(useFilename);
if (DID_FAIL(res)) {
- _gameRef->LOG(res, "Error loading sound '%s'", useFilename.c_str());
+ BaseEngine::LOG(res, "Error loading sound '%s'", useFilename.c_str());
delete sound;
return nullptr;
}
@@ -280,7 +279,7 @@ bool BaseSoundMgr::resumeAll() {
//////////////////////////////////////////////////////////////////////////
float BaseSoundMgr::posToPan(int x, int y) {
- float relPos = (float)x / ((float)_gameRef->_renderer->_width);
+ float relPos = (float)x / ((float)BaseEngine::getRenderer()->getWidth());
float minPan = -0.7f;
float maxPan = 0.7f;
diff --git a/engines/wintermute/base/sound/base_sound_manager.h b/engines/wintermute/base/sound/base_sound_manager.h
index 1ee3c13fdb..602571765f 100644
--- a/engines/wintermute/base/sound/base_sound_manager.h
+++ b/engines/wintermute/base/sound/base_sound_manager.h
@@ -49,8 +49,7 @@ public:
byte getVolumePercent(Audio::Mixer::SoundType type);
bool setVolumePercent(Audio::Mixer::SoundType type, byte percent);
bool setVolume(Audio::Mixer::SoundType type, int volume);
- uint32 _volumeOriginal;
- int _volumeMaster;
+ int32 _volumeMaster;
bool removeSound(BaseSoundBuffer *sound);
BaseSoundBuffer *addSound(const Common::String &filename, Audio::Mixer::SoundType type = Audio::Mixer::kSFXSoundType, bool streamed = false);
bool addSound(BaseSoundBuffer *sound, Audio::Mixer::SoundType type = Audio::Mixer::kSFXSoundType);
@@ -61,7 +60,7 @@ public:
Common::Array<BaseSoundBuffer *> _sounds;
void saveSettings();
private:
- int _volumeMasterPercent; // Necessary to avoid round-offs.
+ int32 _volumeMasterPercent; // Necessary to avoid round-offs.
bool setMasterVolume(byte percent);
};
diff --git a/engines/wintermute/base/timer.cpp b/engines/wintermute/base/timer.cpp
new file mode 100644
index 0000000000..590dba4655
--- /dev/null
+++ b/engines/wintermute/base/timer.cpp
@@ -0,0 +1,74 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#include "engines/wintermute/base/timer.h"
+#include "engines/wintermute/base/base_persistence_manager.h"
+#include "engines/wintermute/persistent.h"
+
+namespace Wintermute {
+Timer::Timer() : _timer(0), _timerDelta(0), _timerLast(0) {
+
+}
+
+void Timer::setTime(uint32 time) {
+ _timer = time;
+}
+
+void Timer::setTimeDelta(uint32 timeDelta) {
+ _timerDelta = timeDelta;
+}
+
+void Timer::setTimeLast(uint32 timeLast) {
+ _timerLast = timeLast;
+}
+
+void Timer::updateTime(uint32 delta, uint32 max) {
+ _timerDelta = _timer - _timerLast;
+ _timerLast = _timer;
+ _timer += MIN((uint32)max, delta);
+}
+
+uint32 Timer::getTime() const {
+ return _timer;
+}
+
+uint32 Timer::getTimeDelta() const {
+ return _timerDelta;
+}
+
+uint32 Timer::getTimeLast() const {
+ return _timerLast;
+}
+
+void Timer::persist(BasePersistenceManager *persistMgr) {
+ persistMgr->transfer(TMEMBER(_timer));
+ persistMgr->transfer(TMEMBER(_timerDelta));
+ persistMgr->transfer(TMEMBER(_timerLast));
+}
+
+} // End of namespace Wintermute \ No newline at end of file
diff --git a/engines/wintermute/base/timer.h b/engines/wintermute/base/timer.h
new file mode 100644
index 0000000000..8353b08abc
--- /dev/null
+++ b/engines/wintermute/base/timer.h
@@ -0,0 +1,57 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#ifndef WINTERMUTE_TIMER_H
+#define WINTERMUTE_TIMER_H
+
+#include "common/scummsys.h"
+
+namespace Wintermute {
+
+class BasePersistenceManager;
+
+class Timer {
+ uint32 _timer;
+ uint32 _timerDelta;
+ uint32 _timerLast;
+public:
+ Timer();
+ void setTime(uint32 time);
+ void setTimeDelta(uint32 timeDelta);
+ void setTimeLast(uint32 timeLast);
+ void updateTime(uint32 delta, uint32 max);
+ uint32 getTime() const;
+ uint32 getTimeDelta() const;
+ uint32 getTimeLast() const;
+ void persist(BasePersistenceManager *persistMgr);
+};
+
+
+} // End of namespace Wintermute
+
+#endif \ No newline at end of file
diff --git a/engines/wintermute/debugger.cpp b/engines/wintermute/debugger.cpp
index 0dab75356b..92b8e6251f 100644
--- a/engines/wintermute/debugger.cpp
+++ b/engines/wintermute/debugger.cpp
@@ -40,9 +40,9 @@ Console::~Console(void) {
bool Console::Cmd_ShowFps(int argc, const char **argv) {
if (argc > 1) {
if (Common::String(argv[1]) == "true") {
- _engineRef->_game->_debugShowFPS = true;
+ _engineRef->_game->setShowFPS(true);
} else if (Common::String(argv[1]) == "false") {
- _engineRef->_game->_debugShowFPS = false;
+ _engineRef->_game->setShowFPS(false);;
}
}
return true;
diff --git a/engines/wintermute/graphics/transparent_surface.cpp b/engines/wintermute/graphics/transparent_surface.cpp
index 11aeb26821..dcdcbf247e 100644
--- a/engines/wintermute/graphics/transparent_surface.cpp
+++ b/engines/wintermute/graphics/transparent_surface.cpp
@@ -218,7 +218,7 @@ Common::Rect TransparentSurface::blit(Graphics::Surface &target, int posX, int p
height = height * 2 / 3;
#endif
- Graphics::Surface *img;
+ Graphics::Surface *img = nullptr;
Graphics::Surface *imgScaled = nullptr;
byte *savedPixels = nullptr;
if ((width != srcImage.w) || (height != srcImage.h)) {
@@ -371,14 +371,15 @@ Common::Rect TransparentSurface::blit(Graphics::Surface &target, int posX, int p
}
}
+ retSize.setWidth(img->w);
+ retSize.setHeight(img->h);
+
if (imgScaled) {
imgScaled->pixels = savedPixels;
imgScaled->free();
delete imgScaled;
}
- retSize.setWidth(img->w);
- retSize.setHeight(img->h);
return retSize;
}
diff --git a/engines/wintermute/module.mk b/engines/wintermute/module.mk
index 5c0406b353..32931bf05f 100644
--- a/engines/wintermute/module.mk
+++ b/engines/wintermute/module.mk
@@ -68,6 +68,7 @@ MODULE_OBJS := \
base/base_frame.o \
base/base_game.o \
base/base_game_music.o \
+ base/base_game_settings.o \
base/base_keyboard_state.o \
base/base_named_object.o \
base/base_object.o \
@@ -76,7 +77,6 @@ MODULE_OBJS := \
base/base_point.o \
base/base_quick_msg.o \
base/base_region.o \
- base/base_save_thumb_helper.o \
base/base_scriptable.o \
base/base_script_holder.o \
base/base_sprite.o \
@@ -86,6 +86,8 @@ MODULE_OBJS := \
base/base_transition_manager.o \
base/base_viewport.o \
base/saveload.o \
+ base/save_thumb_helper.o \
+ base/timer.o \
detection.o \
graphics/transparent_surface.o \
math/math_util.o \
diff --git a/engines/wintermute/system/sys_class_registry.cpp b/engines/wintermute/system/sys_class_registry.cpp
index 3e2b8665ee..8a6aae754f 100644
--- a/engines/wintermute/system/sys_class_registry.cpp
+++ b/engines/wintermute/system/sys_class_registry.cpp
@@ -234,7 +234,7 @@ bool SystemClassRegistry::loadTable(BaseGame *gameRef, BasePersistenceManager *p
uint32 numClasses = persistMgr->getDWORD();
for (uint32 i = 0; i < numClasses; i++) {
- gameRef->_renderer->setIndicatorVal((int)(50.0f / (float)((float)numClasses / (float)i)));
+ gameRef->_renderer->setIndicatorVal((int)(50.0f / (float)((float)numClasses / (float)(i + 1))));
Common::String className = persistMgr->getStringObj();
NameMap::iterator mapIt = _nameMap.find(className);
@@ -286,7 +286,7 @@ bool SystemClassRegistry::loadInstances(BaseGame *gameRef, BasePersistenceManage
for (int i = 0; i < numInstances; i++) {
if (i % 20 == 0) {
- gameRef->_renderer->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)numInstances / (float)i)));
+ gameRef->_renderer->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)numInstances / (float)(i + 1))));
}
checkHeader("<INSTANCE_HEAD>", persistMgr);
diff --git a/engines/wintermute/ui/ui_button.cpp b/engines/wintermute/ui/ui_button.cpp
index 6ee577f009..b638522f6e 100644
--- a/engines/wintermute/ui/ui_button.cpp
+++ b/engines/wintermute/ui/ui_button.cpp
@@ -382,7 +382,7 @@ bool UIButton::loadBuffer(byte *buffer, bool complete) {
case TOKEN_TEXT:
setText((char *)params);
- _gameRef->_stringTable->expand(&_text);
+ _gameRef->expandStringByStringTable(&_text);
break;
case TOKEN_TEXT_ALIGN:
diff --git a/engines/wintermute/ui/ui_button.h b/engines/wintermute/ui/ui_button.h
index fea264976f..5db9356ef9 100644
--- a/engines/wintermute/ui/ui_button.h
+++ b/engines/wintermute/ui/ui_button.h
@@ -66,13 +66,13 @@ public:
virtual ~UIButton();
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp
index 0a2e6f13bc..7fddf59898 100644
--- a/engines/wintermute/ui/ui_edit.cpp
+++ b/engines/wintermute/ui/ui_edit.cpp
@@ -231,7 +231,7 @@ bool UIEdit::loadBuffer(byte *buffer, bool complete) {
case TOKEN_TEXT:
setText((char *)params);
- _gameRef->_stringTable->expand(&_text);
+ _gameRef->expandStringByStringTable(&_text);
break;
case TOKEN_X:
diff --git a/engines/wintermute/ui/ui_edit.h b/engines/wintermute/ui/ui_edit.h
index 5bb31422b6..ac626f0f06 100644
--- a/engines/wintermute/ui/ui_edit.h
+++ b/engines/wintermute/ui/ui_edit.h
@@ -38,20 +38,20 @@ class BaseFont;
class UIEdit : public UIObject {
public:
DECLARE_PERSISTENT(UIEdit, UIObject)
- int _maxLength;
+ int32 _maxLength;
int insertChars(int pos, const byte *chars, int num);
int deleteChars(int start, int end);
bool _cursorVisible;
uint32 _lastBlinkTime;
virtual bool display(int offsetX, int offsetY);
virtual bool handleKeypress(Common::Event *event, bool printable = false);
- int _scrollOffset;
- int _frameWidth;
+ int32 _scrollOffset;
+ int32 _frameWidth;
uint32 _cursorBlinkRate;
void setCursorChar(const char *character);
char *_cursorChar;
- int _selEnd;
- int _selStart;
+ int32 _selEnd;
+ int32 _selStart;
BaseFont *_fontSelected;
UIEdit(BaseGame *inGame);
virtual ~UIEdit();
@@ -61,10 +61,10 @@ public:
virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ui/ui_entity.h b/engines/wintermute/ui/ui_entity.h
index b5f4450071..3bd3ec9888 100644
--- a/engines/wintermute/ui/ui_entity.h
+++ b/engines/wintermute/ui/ui_entity.h
@@ -40,16 +40,16 @@ public:
virtual ~UIEntity();
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
- virtual bool display() { return display(0, 0); }
- virtual bool display(int offsetX, int offsetY);
+ virtual bool display() override { return display(0, 0); }
+ virtual bool display(int offsetX, int offsetY) override;
AdEntity *_entity;
bool setEntity(const char *filename);
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
virtual const char *scToString();
};
diff --git a/engines/wintermute/ui/ui_object.h b/engines/wintermute/ui/ui_object.h
index c77acfef41..935c27613c 100644
--- a/engines/wintermute/ui/ui_object.h
+++ b/engines/wintermute/ui/ui_object.h
@@ -48,7 +48,7 @@ public:
bool _parentNotify;
DECLARE_PERSISTENT(UIObject, BaseObject)
UIObject *_parent;
- virtual bool display() { return display(0, 0); }
+ virtual bool display() override { return display(0, 0); }
virtual bool display(int offsetX) { return display(offsetX, 0); }
virtual bool display(int offsetX, int offsetY);
virtual void correctSize();
@@ -62,8 +62,8 @@ public:
bool _disable;
UIObject(BaseGame *inGame = nullptr);
virtual ~UIObject();
- int _width;
- int _height;
+ int32 _width;
+ int32 _height;
TUIObjectType _type;
BaseSprite *_image;
void setListener(BaseScriptHolder *object, BaseScriptHolder *listenerObject, uint32 listenerParam);
@@ -71,13 +71,13 @@ public:
uint32 _listenerParamDWORD;
BaseScriptHolder *_listenerObject;
UIObject *_focusedWidget;
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ui/ui_text.cpp b/engines/wintermute/ui/ui_text.cpp
index 3b5adf07b7..98d70b770e 100644
--- a/engines/wintermute/ui/ui_text.cpp
+++ b/engines/wintermute/ui/ui_text.cpp
@@ -230,7 +230,7 @@ bool UIText::loadBuffer(byte *buffer, bool complete) {
case TOKEN_TEXT:
setText((char *)params);
- _gameRef->_stringTable->expand(&_text);
+ _gameRef->expandStringByStringTable(&_text);
break;
case TOKEN_TEXT_ALIGN:
diff --git a/engines/wintermute/ui/ui_text.h b/engines/wintermute/ui/ui_text.h
index 11dcdb166d..be074755ba 100644
--- a/engines/wintermute/ui/ui_text.h
+++ b/engines/wintermute/ui/ui_text.h
@@ -46,13 +46,13 @@ public:
TVerticalAlign _verticalAlign;
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
- virtual const char *scToString();
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+ virtual const char *scToString() override;
};
} // end of namespace Wintermute
diff --git a/engines/wintermute/ui/ui_tiled_image.h b/engines/wintermute/ui/ui_tiled_image.h
index ded7a285dd..4868710264 100644
--- a/engines/wintermute/ui/ui_tiled_image.h
+++ b/engines/wintermute/ui/ui_tiled_image.h
@@ -41,7 +41,7 @@ public:
void correctSize(int *width, int *height);
bool loadFile(const char *filename);
bool loadBuffer(byte *buffer, bool complete = true);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
bool display(int x, int y, int width, int height);
UITiledImage(BaseGame *inGame = nullptr);
diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp
index 39bc1bdcfe..460ec1877b 100644
--- a/engines/wintermute/ui/ui_window.cpp
+++ b/engines/wintermute/ui/ui_window.cpp
@@ -127,8 +127,8 @@ bool UIWindow::display(int offsetX, int offsetY) {
}
if (_shieldWindow) {
_shieldWindow->_posX = _shieldWindow->_posY = 0;
- _shieldWindow->_width = _gameRef->_renderer->_width;
- _shieldWindow->_height = _gameRef->_renderer->_height;
+ _shieldWindow->_width = _gameRef->_renderer->getWidth();
+ _shieldWindow->_height = _gameRef->_renderer->getHeight();
_shieldWindow->display();
}
@@ -141,8 +141,8 @@ bool UIWindow::display(int offsetX, int offsetY) {
}
if (_shieldButton) {
_shieldButton->_posX = _shieldButton->_posY = 0;
- _shieldButton->_width = _gameRef->_renderer->_width;
- _shieldButton->_height = _gameRef->_renderer->_height;
+ _shieldButton->_width = _gameRef->_renderer->getWidth();
+ _shieldButton->_height = _gameRef->_renderer->getHeight();
_shieldButton->display();
}
@@ -431,7 +431,7 @@ bool UIWindow::loadBuffer(byte *buffer, bool complete) {
case TOKEN_TITLE:
setText((char *)params);
- _gameRef->_stringTable->expand(&_text);
+ _gameRef->expandStringByStringTable(&_text);
break;
case TOKEN_TITLE_ALIGN:
@@ -885,8 +885,8 @@ bool UIWindow::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "Center") == 0) {
stack->correctParams(0);
- _posX = (_gameRef->_renderer->_width - _width) / 2;
- _posY = (_gameRef->_renderer->_height - _height) / 2;
+ _posX = (_gameRef->_renderer->getWidth() - _width) / 2;
+ _posY = (_gameRef->_renderer->getHeight() - _height) / 2;
stack->pushNULL();
return STATUS_OK;
}
diff --git a/engines/wintermute/ui/ui_window.h b/engines/wintermute/ui/ui_window.h
index ae035c65c7..70799cea25 100644
--- a/engines/wintermute/ui/ui_window.h
+++ b/engines/wintermute/ui/ui_window.h
@@ -68,10 +68,10 @@ public:
bool enableWidget(const char *name, bool enable = true);
Rect32 _titleRect;
Rect32 _dragRect;
- virtual bool display(int offsetX = 0, int offsetY = 0);
+ virtual bool display(int offsetX = 0, int offsetY = 0) override;
UIWindow(BaseGame *inGame);
virtual ~UIWindow();
- virtual bool handleKeypress(Common::Event *event, bool printable = false);
+ virtual bool handleKeypress(Common::Event *event, bool printable = false) override;
BaseArray<UIObject *> _widgets;
TTextAlign _titleAlign;
bool loadFile(const char *filename);
@@ -80,12 +80,12 @@ public:
BaseFont *_fontInactive;
BaseSprite *_imageInactive;
virtual bool listen(BaseScriptHolder *param1, uint32 param2);
- virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent);
+ virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
// scripting interface
- virtual ScValue *scGetProperty(const Common::String &name);
- virtual bool scSetProperty(const char *name, ScValue *value);
- virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name);
+ virtual ScValue *scGetProperty(const Common::String &name) override;
+ virtual bool scSetProperty(const char *name, ScValue *value) override;
+ virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
virtual const char *scToString();
};
diff --git a/engines/wintermute/video/video_player.h b/engines/wintermute/video/video_player.h
index a49e910b0c..033ab50dfa 100644
--- a/engines/wintermute/video/video_player.h
+++ b/engines/wintermute/video/video_player.h
@@ -42,7 +42,7 @@ namespace Wintermute {
class VideoPlayer : public BaseClass {
public:
bool _showSubtitle;
- int _currentSubtitle;
+ int32 _currentSubtitle;
bool loadSubtitles(const char *filename, const char *subtitleFile);
bool _slowRendering;
bool isPlaying();
@@ -76,8 +76,8 @@ public:
PGETFRAME _videoPGF;*/
uint32 _videoEndTime;
- int _playPosX;
- int _playPosY;
+ int32 _playPosX;
+ int32 _playPosY;
float _playZoom;
/* LPBITMAPV4HEADER _targetFormat;
diff --git a/engines/wintermute/video/video_theora_player.cpp b/engines/wintermute/video/video_theora_player.cpp
index 1f6842c416..f03be9691e 100644
--- a/engines/wintermute/video/video_theora_player.cpp
+++ b/engines/wintermute/video/video_theora_player.cpp
@@ -224,8 +224,8 @@ bool VideoTheoraPlayer::play(TVideoPlayback type, int x, int y, bool freezeGame,
width = (float)_theoraDecoder->getWidth();
height = (float)_theoraDecoder->getHeight();
} else {
- width = (float)_gameRef->_renderer->_width;
- height = (float)_gameRef->_renderer->_height;
+ width = (float)_gameRef->_renderer->getWidth();
+ height = (float)_gameRef->_renderer->getHeight();
}
switch (type) {
@@ -236,18 +236,18 @@ bool VideoTheoraPlayer::play(TVideoPlayback type, int x, int y, bool freezeGame,
break;
case VID_PLAY_STRETCH: {
- float zoomX = (float)((float)_gameRef->_renderer->_width / width * 100);
- float zoomY = (float)((float)_gameRef->_renderer->_height / height * 100);
+ float zoomX = (float)((float)_gameRef->_renderer->getWidth() / width * 100);
+ float zoomY = (float)((float)_gameRef->_renderer->getHeight() / height * 100);
_playZoom = MIN(zoomX, zoomY);
- _posX = (int)((_gameRef->_renderer->_width - width * (_playZoom / 100)) / 2);
- _posY = (int)((_gameRef->_renderer->_height - height * (_playZoom / 100)) / 2);
+ _posX = (int)((_gameRef->_renderer->getWidth() - width * (_playZoom / 100)) / 2);
+ _posY = (int)((_gameRef->_renderer->getHeight() - height * (_playZoom / 100)) / 2);
}
break;
case VID_PLAY_CENTER:
_playZoom = 100.0f;
- _posX = (int)((_gameRef->_renderer->_width - width) / 2);
- _posY = (int)((_gameRef->_renderer->_height - height) / 2);
+ _posX = (int)((_gameRef->_renderer->getWidth() - width) / 2);
+ _posY = (int)((_gameRef->_renderer->getHeight() - height) / 2);
break;
}
_theoraDecoder->start();
@@ -274,7 +274,7 @@ bool VideoTheoraPlayer::stop() {
//////////////////////////////////////////////////////////////////////////
bool VideoTheoraPlayer::update() {
- _currentTime = _freezeGame ? _gameRef->_liveTimer : _gameRef->_timer;
+ _currentTime = _freezeGame ? _gameRef->getLiveTimer()->getTime() : _gameRef->getTimer()->getTime();
if (!isPlaying()) {
return STATUS_OK;
@@ -317,7 +317,7 @@ bool VideoTheoraPlayer::update() {
}
}
// Skip the busy-loop?
- if ((!_texture || !_videoFrameReady) && !_theoraDecoder->endOfVideo()) {
+ if ((!_texture || !_videoFrameReady) && _theoraDecoder && !_theoraDecoder->endOfVideo()) {
// end playback
if (!_looping) {
_state = THEORA_STATE_FINISHED;
@@ -335,7 +335,7 @@ bool VideoTheoraPlayer::update() {
}
//////////////////////////////////////////////////////////////////////////
-uint32 VideoTheoraPlayer::getMovieTime() {
+uint32 VideoTheoraPlayer::getMovieTime() const {
if (!_playbackStarted) {
return 0;
} else {
@@ -432,7 +432,7 @@ bool VideoTheoraPlayer::setAlphaImage(const Common::String &filename) {
}
//////////////////////////////////////////////////////////////////////////
-byte VideoTheoraPlayer::getAlphaAt(int x, int y) {
+byte VideoTheoraPlayer::getAlphaAt(int x, int y) const {
if (_alphaImage) {
return _alphaImage->getAlphaAt(x, y);
} else {
@@ -525,7 +525,7 @@ bool VideoTheoraPlayer::initializeSimple() {
}
//////////////////////////////////////////////////////////////////////////
-BaseSurface *VideoTheoraPlayer::getTexture() {
+BaseSurface *VideoTheoraPlayer::getTexture() const {
return _texture;
}
diff --git a/engines/wintermute/video/video_theora_player.h b/engines/wintermute/video/video_theora_player.h
index 7a6742271c..364509a080 100644
--- a/engines/wintermute/video/video_theora_player.h
+++ b/engines/wintermute/video/video_theora_player.h
@@ -72,64 +72,63 @@ public:
bool pause();
bool resume();
- bool isPlaying() {
+ bool isPlaying() const {
return _state == THEORA_STATE_PLAYING;
};
- bool isFinished() {
+ bool isFinished() const {
return _state == THEORA_STATE_FINISHED;
};
- bool isPaused() {
+ bool isPaused() const {
return _state == THEORA_STATE_PAUSED;
};
- uint32 getMovieTime();
-
- BaseSurface *getTexture();
-
- int _state;
- uint32 _startTime;
-
- int _savedState;
- uint32 _savedPos;
+ uint32 getMovieTime() const;
+ BaseSurface *getTexture() const;
// alpha related
BaseImage *_alphaImage;
Common::String _alphaFilename;
bool setAlphaImage(const Common::String &filename);
- __inline byte getAlphaAt(int x, int y);
+ __inline byte getAlphaAt(int x, int y) const;
void writeAlpha();
bool seekToTime(uint32 Time);
-
void cleanup();
bool resetStream();
// video properties
+ int32 _posX;
+ int32 _posY;
+
+ bool _dontDropFrames;
+private:
+ int32 _state;
+ uint32 _startTime;
+
+ int32 _savedState;
+ uint32 _savedPos;
+
+ // video properties
TVideoPlayback _playbackType;
- int _posX;
- int _posY;
+ bool _looping;
float _playZoom;
- int _volume;
+ int32 _volume;
- bool _looping;
- bool _dontDropFrames;
bool _freezeGame;
uint32 _currentTime;
-
-private:
// seeking support
bool _seekingKeyframe;
float _timeOffset;
bool _frameRendered;
- bool getIsFrameReady() {
+ bool getIsFrameReady() const {
return _videoFrameReady;
}
-private:
+
bool _audioFrameReady;
bool _videoFrameReady;
float _videobufTime;
diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp
index ad26c42510..89a6f1b3e0 100644
--- a/engines/wintermute/wintermute.cpp
+++ b/engines/wintermute/wintermute.cpp
@@ -51,6 +51,7 @@ WintermuteEngine::WintermuteEngine() : Engine(g_system) {
_game = new AdGame("");
_debugger = nullptr;
_trigDebug = false;
+ _gameDescription = nullptr;
}
WintermuteEngine::WintermuteEngine(OSystem *syst, const ADGameDescription *desc)
@@ -141,29 +142,7 @@ int WintermuteEngine::init() {
BaseEngine::instance().setGameRef(_game);
BasePlatform::initialize(this, _game, 0, nullptr);
- bool windowedMode = !ConfMan.getBool("fullscreen");
-
- if (ConfMan.hasKey("debug_mode")) {
- if (ConfMan.getBool("debug_mode")) {
- _game->DEBUG_DebugEnable("./wme.log");
- }
- }
-
- if (ConfMan.hasKey("show_fps")) {
- _game->_debugShowFPS = ConfMan.getBool("show_fps");
- } else {
- _game->_debugShowFPS = false;
- }
-
- if (ConfMan.hasKey("disable_smartcache")) {
- _game->_smartCache = ConfMan.getBool("disable_smartcache");
- } else {
- _game->_smartCache = true;
- }
-
- if (!_game->_smartCache) {
- _game->LOG(0, "Smart cache is DISABLED");
- }
+ _game->initConfManSettings();
// load general game settings
_game->initialize1();
@@ -182,10 +161,8 @@ int WintermuteEngine::init() {
_game->initialize2();
- bool ret;
+ bool ret = _game->initRenderer();
- // initialize the renderer
- ret = _game->_renderer->initRenderer(_game->_settingsResWidth, _game->_settingsResHeight, windowedMode);
if (DID_FAIL(ret)) {
_game->LOG(ret, "Error initializing renderer. Exiting.");
@@ -206,7 +183,7 @@ int WintermuteEngine::init() {
// load game
uint32 dataInitStart = g_system->getMillis();
- if (DID_FAIL(_game->loadFile(_game->_settingsGameFile ? _game->_settingsGameFile : "default.game"))) {
+ if (DID_FAIL(_game->loadGameSettingsFile())) {
_game->LOG(ret, "Error loading game file. Exiting.");
delete _game;
_game = nullptr;
@@ -238,6 +215,9 @@ int WintermuteEngine::messageLoop() {
const uint32 maxFPS = 60;
const uint32 frameTime = 2 * (uint32)((1.0 / maxFPS) * 1000);
while (!done) {
+ if (!_game) {
+ break;
+ }
_debugger->onFrame();
Common::Event event;
@@ -250,7 +230,7 @@ int WintermuteEngine::messageLoop() {
_trigDebug = false;
}
- if (_game && _game->_renderer->_active && _game->_renderer->_ready) {
+ if (_game && _game->_renderer->_active && _game->_renderer->isReady()) {
_game->displayContent();
_game->displayQuickMsg();
@@ -263,15 +243,15 @@ int WintermuteEngine::messageLoop() {
}
// ***** flip
- if (!_game->_suspendedRendering) {
+ if (!_game->getSuspendedRendering()) {
_game->_renderer->flip();
}
- if (_game->_loading) {
+ if (_game->getIsLoading()) {
_game->loadGame(_game->_scheduledLoadSlot);
}
prevTime = time;
}
- if (_game->_quitting) {
+ if (_game && _game->_quitting) {
break;
}
}