[Scummvm-git-logs] scummvm master -> 8d08d05f7fe06e4d72a875b089fadfe6a4064e8f
sev-
noreply at scummvm.org
Sun May 14 21:04:47 UTC 2023
This automated email contains information about 10 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c98dd71ad6 AGS: Engine: when resetting objcache, invalidate spriteID, but not texture
bb3e0ed9fe AGS: Engine: in DynamicSprite.Create() adjust invalid sizes to min valid
84dbaf7226 AGS: Engine: fixed Game.StopAudio() fails to remove queue for "all types"
1bf6a2025f AGS: Engine: improvements to the "timeout" check
7c96b06aa6 AGS: Common: fixed memory leak in String::ReverseUTF8()
b2b5626f09 AGS: Engine: fixed one instance of utf8 char read in split_lines()
808e365805 AGS: Engine: fixed reset_objcache_for_sprite() resetting wrong char texture
b17f679a5f AGS: Engine: ClearSharedDDB() should reset ID of the remaining texture data
6055a5fe5a AGS: Engine: fixed script's timeout check was working incorrectly again
8d08d05f7f AGS: Updated build version (3.6.0.48)
Commit: c98dd71ad6310c29ce3caf9f945d095d93cb0aee
https://github.com/scummvm/scummvm/commit/c98dd71ad6310c29ce3caf9f945d095d93cb0aee
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: when resetting objcache, invalidate spriteID, but not texture
Firstly, this is not necessarily optimal, as the next graphic
assigned to these objects may be of same size, in which case
the texture surface may be reused.
But there's another thing: there've been a bogus behavior in
the AGS, where a dynamic sprite, deleted right before the
room's exit transition, was still displayed for room objects (and
everything else really).
This is because although the sprite was disposed, the image
remained on a texture connected to these objects, at least
until the next object update. But object updates don't run
during room transitions, hence the effect.
>From upstream 38d0dd3d7f0d6a4624d1f908f2e8d3c1abfee52a
Changed paths:
engines/ags/engine/ac/draw.cpp
diff --git a/engines/ags/engine/ac/draw.cpp b/engines/ags/engine/ac/draw.cpp
index 60b1ac7ca23..df7413e9f54 100644
--- a/engines/ags/engine/ac/draw.cpp
+++ b/engines/ags/engine/ac/draw.cpp
@@ -602,14 +602,17 @@ void mark_object_changed(int objid) {
void reset_objcache_for_sprite(int sprnum, bool deleted) {
// Check if this sprite is assigned to any game object, and mark these for update;
- // if the sprite was deleted, also dispose shared textures
+ // if the sprite was deleted, also mark texture objects as invalid.
+ // IMPORTANT!!: do NOT dispose textures themselves here.
+ // * if the next valid image is of the same size, then the texture will be reused;
+ // * BACKWARD COMPAT: keep last images during room transition out!
// room objects cache
if (_G(croom) != nullptr) {
for (size_t i = 0; i < (size_t)_G(croom)->numobj; ++i) {
if (_G(objcache)[i].sppic == sprnum)
_G(objcache)[i].sppic = -1;
if (deleted && ((int)(_GP(actsps)[i].SpriteID) == sprnum))
- _GP(actsps)[i] = ObjTexture();
+ _GP(actsps)[i].SpriteID = UINT32_MAX; // invalid sprite ref
}
}
// character cache
@@ -617,7 +620,7 @@ void reset_objcache_for_sprite(int sprnum, bool deleted) {
if (_GP(charcache)[i].sppic == sprnum)
_GP(charcache)[i].sppic = -1;
if (deleted && ((int)(_GP(actsps)[ACTSP_OBJSOFF + i].SpriteID) == sprnum))
- _GP(actsps)[i] = ObjTexture();
+ _GP(actsps)[i].SpriteID = UINT32_MAX; // invalid sprite ref
}
}
Commit: bb3e0ed9fed96caa66433cb42445f0ba3ecf18e7
https://github.com/scummvm/scummvm/commit/bb3e0ed9fed96caa66433cb42445f0ba3ecf18e7
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: in DynamicSprite.Create() adjust invalid sizes to min valid
Historically, this function could *happen* to create bitmaps of
0x0 or even -1x-1 sizes and return a valid DynamicSprite
object. Try to ensure the image library is passed valid
parameters in such case, and keep going, for backwards compatibility.
>From upstream 82194b261b4649281742c45498a4c34f452fd350
Changed paths:
engines/ags/engine/ac/dynamic_sprite.cpp
diff --git a/engines/ags/engine/ac/dynamic_sprite.cpp b/engines/ags/engine/ac/dynamic_sprite.cpp
index 6955fbe3b65..57ee411f58b 100644
--- a/engines/ags/engine/ac/dynamic_sprite.cpp
+++ b/engines/ags/engine/ac/dynamic_sprite.cpp
@@ -370,6 +370,12 @@ ScriptDynamicSprite *DynamicSprite_CreateFromDrawingSurface(ScriptDrawingSurface
}
ScriptDynamicSprite *DynamicSprite_Create(int width, int height, int alphaChannel) {
+ if (width <= 0 || height <= 0) {
+ debug_script_warn("WARNING: DynamicSprite.Create: invalid size %d x %d, will adjust", width, height);
+ width = MAX(1, width);
+ height = MAX(1, height);
+ }
+
data_to_game_coords(&width, &height);
int gotSlot = _GP(spriteset).GetFreeIndex();
Commit: 84dbaf72266e8fb009b44a44c73d20cbbc5b9898
https://github.com/scummvm/scummvm/commit/84dbaf72266e8fb009b44a44c73d20cbbc5b9898
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: fixed Game.StopAudio() fails to remove queue for "all types"
>From upstream 8d1751508b7f7d9925931144de1e3cb8ed1d2f51
Changed paths:
engines/ags/engine/media/audio/audio.cpp
diff --git a/engines/ags/engine/media/audio/audio.cpp b/engines/ags/engine/media/audio/audio.cpp
index 212b8aa4a32..c54c6715fef 100644
--- a/engines/ags/engine/media/audio/audio.cpp
+++ b/engines/ags/engine/media/audio/audio.cpp
@@ -392,7 +392,7 @@ void remove_clips_of_type_from_queue(int audioType) {
int aa;
for (aa = 0; aa < _GP(play).new_music_queue_size; aa++) {
ScriptAudioClip *clip = &_GP(game).audioClips[_GP(play).new_music_queue[aa].audioClipIndex];
- if (clip->type == audioType) {
+ if ((audioType == SCR_NO_VALUE) || (clip->type == audioType)) {
_GP(play).new_music_queue_size--;
for (int bb = aa; bb < _GP(play).new_music_queue_size; bb++)
_GP(play).new_music_queue[bb] = _GP(play).new_music_queue[bb + 1];
Commit: 1bf6a2025fdd3732f22c9f71c46de1c81d9ad420
https://github.com/scummvm/scummvm/commit/1bf6a2025fdd3732f22c9f71c46de1c81d9ad420
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: improvements to the "timeout" check
* Fixed _lastAliveTs was not reset right after calling sys_evt_process_pending();
this caused events polling called continuously after timeout happened once.
* Set timeout to 60 fps (16.777 ms) instead of random 10ms.
* Do the timeout test only each 1000th loop iteration.
* Few other tiny adjustments in code.
Partially from upstream 60aaef003021fec2f75d4dc6db1b24f0b5d2be65
Changed paths:
engines/ags/engine/game/game_init.cpp
engines/ags/engine/script/cc_instance.cpp
engines/ags/engine/script/cc_instance.h
engines/ags/engine/script/script_runtime.cpp
diff --git a/engines/ags/engine/game/game_init.cpp b/engines/ags/engine/game/game_init.cpp
index 09fa9c04ef5..49c6092c728 100644
--- a/engines/ags/engine/game/game_init.cpp
+++ b/engines/ags/engine/game/game_init.cpp
@@ -417,7 +417,7 @@ HGameInitError InitGameState(const LoadedGameEntities &ents, GameDataVersion dat
// NOTE: we must do this before plugin start, because some plugins may
// require access to script API at initialization time.
//
- ccSetScriptAliveTimer(10u, 1000u, 150000u);
+ ccSetScriptAliveTimer(1000 / 60u, 1000u, 150000u);
ccSetStringClassImpl(&_GP(myScriptStringImpl));
setup_script_exports(base_api, compat_api);
diff --git a/engines/ags/engine/script/cc_instance.cpp b/engines/ags/engine/script/cc_instance.cpp
index b0dc7f96db7..928ef588e61 100644
--- a/engines/ags/engine/script/cc_instance.cpp
+++ b/engines/ags/engine/script/cc_instance.cpp
@@ -453,7 +453,6 @@ int ccInstance::Run(int32_t curpc) {
const auto timeout = std::chrono::milliseconds(_G(timeoutCheckMs));
const auto timeout_abort = std::chrono::milliseconds(_G(timeoutAbortMs));
_lastAliveTs = AGS_Clock::now();
- bool timeout_warn = false;
while ((flags & INSTF_ABORTED) == 0) {
if (_G(abort_engine))
@@ -787,34 +786,19 @@ int ccInstance::Run(int32_t curpc) {
// Make sure it's not stuck in a While loop
if (arg1.IValue < 0) {
- auto now = AGS_Clock::now();
- auto test_dur = std::chrono::duration_cast<std::chrono::milliseconds>(now - _lastAliveTs);
if (flags & INSTF_RUNNING) {
// was notified still running, don't do anything
flags &= ~INSTF_RUNNING;
- _lastAliveTs = now;
- timeout_warn = false;
loopIterations = 0;
} else if ((loopIterationCheckDisabled == 0) && (_G(maxWhileLoops) > 0) && (++loopIterations > _G(maxWhileLoops))) {
cc_error("!Script appears to be hung (a while loop ran %d times). The problem may be in a calling function; check the call stack.", (int)loopIterations);
return -1;
- } else if (test_dur > timeout) {
+ } else if ((loopIterations % 1000) == 0 && (std::chrono::duration_cast<std::chrono::milliseconds>(AGS_Clock::now() - _lastAliveTs) > timeout)) {
// minimal timeout occurred
- if ((timeout_abort.count() > 0) && (test_dur.count() > timeout_abort.count())) {
- // critical timeout occurred
- /* CHECKME: disabled, because not working well
- if (loopIterationCheckDisabled == 0) {
- cc_error("!Script appears to be hung (no game update for %lld ms). The problem may be in a calling function; check the call stack.", test_dur.count());
- return -1;
- }
- */
- if (!timeout_warn) {
- debug_script_warn("WARNING: script execution hung? (%lld ms)", test_dur.count());
- timeout_warn = true;
- }
- }
+ // NOTE: removed timeout_abort check for now: was working *logically* wrong;
// at least let user to manipulate the game window
sys_evt_process_pending();
+ _lastAliveTs = AGS_Clock::now();
}
}
break;
@@ -1362,6 +1346,11 @@ bool ccInstance::IsBeingRun() const {
return pc != 0;
}
+void ccInstance::NotifyAlive() {
+ flags |= INSTF_RUNNING;
+ _lastAliveTs = AGS_Clock::now();
+}
+
bool ccInstance::_Create(PScript scri, ccInstance *joined) {
_G(currentline) = -1;
if ((scri == nullptr) && (joined != nullptr))
diff --git a/engines/ags/engine/script/cc_instance.h b/engines/ags/engine/script/cc_instance.h
index 02f34570530..a8c3f5ab889 100644
--- a/engines/ags/engine/script/cc_instance.h
+++ b/engines/ags/engine/script/cc_instance.h
@@ -169,6 +169,8 @@ public:
void DumpInstruction(const ScriptOperation &op) const;
// Tells whether this instance is in the process of executing the byte-code
bool IsBeingRun() const;
+ // Notifies that the game was being updated (script not hanging)
+ void NotifyAlive();
// For each import, find the instance that corresponds to it and save it
// in resolved_imports[]. Return whether the function is successful
diff --git a/engines/ags/engine/script/script_runtime.cpp b/engines/ags/engine/script/script_runtime.cpp
index e5e63f3fe83..a2e64b3eacf 100644
--- a/engines/ags/engine/script/script_runtime.cpp
+++ b/engines/ags/engine/script/script_runtime.cpp
@@ -103,7 +103,7 @@ void ccSetScriptAliveTimer(unsigned sys_poll_timeout, unsigned abort_timeout, un
void ccNotifyScriptStillAlive() {
ccInstance *cur_inst = ccInstance::GetCurrentInstance();
if (cur_inst)
- cur_inst->flags |= INSTF_RUNNING;
+ cur_inst->NotifyAlive();
}
void ccSetDebugHook(new_line_hook_type jibble) {
Commit: 7c96b06aa64a20e2bd2aa66db6d7c9c6ee14178e
https://github.com/scummvm/scummvm/commit/7c96b06aa64a20e2bd2aa66db6d7c9c6ee14178e
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Common: fixed memory leak in String::ReverseUTF8()
>From upstream 57e866411b77af9e3a942bccf4a8c59bfa3d12cd
Changed paths:
engines/ags/shared/util/string.cpp
diff --git a/engines/ags/shared/util/string.cpp b/engines/ags/shared/util/string.cpp
index 481b98a2abe..09d9b30cfe7 100644
--- a/engines/ags/shared/util/string.cpp
+++ b/engines/ags/shared/util/string.cpp
@@ -715,7 +715,8 @@ void String::Reverse() {
void String::ReverseUTF8() {
if (_len <= 1)
return; // nothing to reverse if 1 char or less
- // TODO: may this be optimized to not alloc new buffer? or dont care
+ // TODO: may this be optimized to not alloc new buffer?
+ // otherwise, allocate a proper String data buf and replace existing
char *newstr = new char[_len + 1];
for (char *fw = _cstr, *fw2 = _cstr + 1,
*bw = _cstr + _len - 1, *bw2 = _cstr + _len;
@@ -734,6 +735,7 @@ void String::ReverseUTF8() {
}
newstr[_len] = 0;
SetString(newstr);
+ delete[] newstr;
}
void String::SetAt(size_t index, char c) {
Commit: b2b5626f09d8375e4d6f879627a23956c269c840
https://github.com/scummvm/scummvm/commit/b2b5626f09d8375e4d6f879627a23956c269c840
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: fixed one instance of utf8 char read in split_lines()
>From upstream dd50a9976f77d504952171209c1597483318e1c2
Changed paths:
engines/ags/shared/font/fonts.cpp
diff --git a/engines/ags/shared/font/fonts.cpp b/engines/ags/shared/font/fonts.cpp
index 1d3928591c1..1330d507512 100644
--- a/engines/ags/shared/font/fonts.cpp
+++ b/engines/ags/shared/font/fonts.cpp
@@ -393,7 +393,7 @@ size_t split_lines(const char *todis, SplitLines &lines, int wii, int fonnt, siz
break;
}
// add this line; do the temporary terminator trick again
- const int next_chwas = *split_at;
+ const int next_chwas = ugetc(split_at);
*split_at = 0;
lines.Add(theline);
usetc(split_at, next_chwas);
Commit: 808e3658052bb296724dddea05769df918365a7f
https://github.com/scummvm/scummvm/commit/808e3658052bb296724dddea05769df918365a7f
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: fixed reset_objcache_for_sprite() resetting wrong char texture
This mistake was introduced early on in 7ed5186 and not fixed still in the later fix 38d0dd3
>From upstream 1f27837ef14585d8050a4b49b46faa002f87a881
Changed paths:
engines/ags/engine/ac/draw.cpp
engines/ags/globals.h
diff --git a/engines/ags/engine/ac/draw.cpp b/engines/ags/engine/ac/draw.cpp
index df7413e9f54..7bc938aac11 100644
--- a/engines/ags/engine/ac/draw.cpp
+++ b/engines/ags/engine/ac/draw.cpp
@@ -620,7 +620,7 @@ void reset_objcache_for_sprite(int sprnum, bool deleted) {
if (_GP(charcache)[i].sppic == sprnum)
_GP(charcache)[i].sppic = -1;
if (deleted && ((int)(_GP(actsps)[ACTSP_OBJSOFF + i].SpriteID) == sprnum))
- _GP(actsps)[i].SpriteID = UINT32_MAX; // invalid sprite ref
+ _GP(actsps)[ACTSP_OBJSOFF + i].SpriteID = UINT32_MAX; // invalid sprite ref
}
}
diff --git a/engines/ags/globals.h b/engines/ags/globals.h
index 096dd37ab6f..9d9f72ac86c 100644
--- a/engines/ags/globals.h
+++ b/engines/ags/globals.h
@@ -583,7 +583,7 @@ public:
// actsps is used for temporary storage of the bitamp and texture
// of the latest version of the sprite (room objects and characters);
- // objects sprites begin with index 0, characters are after MAX_ROOM_OBJECTS
+ // objects sprites begin with index 0, characters are after ACTSP_OBJSOFF
std::vector<ObjTexture> *_actsps;
// Walk-behind textures (3D renderers only)
std::vector<ObjTexture> *_walkbehindobj;
Commit: b17f679a5f5cb1743571cc7a5f4183a2072c6c08
https://github.com/scummvm/scummvm/commit/b17f679a5f5cb1743571cc7a5f4183a2072c6c08
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: ClearSharedDDB() should reset ID of the remaining texture data
This complements the original idea, but also as a side-effect fixes a mistake introduced by another hotfix 38d0dd3.
Because the ID remained intact in the texture, the engine would not know to stop using it and replace after a dynamic sprite was deleted.
>From upstream 87cc8e099169b82c2393282921e4d8295af4d0a9
Changed paths:
engines/ags/engine/gfx/gfx_driver_base.cpp
engines/ags/engine/gfx/gfx_driver_base.h
diff --git a/engines/ags/engine/gfx/gfx_driver_base.cpp b/engines/ags/engine/gfx/gfx_driver_base.cpp
index 99b55f9c19c..88d213b5542 100644
--- a/engines/ags/engine/gfx/gfx_driver_base.cpp
+++ b/engines/ags/engine/gfx/gfx_driver_base.cpp
@@ -231,15 +231,22 @@ void VideoMemoryGraphicsDriver::UpdateSharedDDB(uint32_t sprite_id, Bitmap *bitm
if (txdata)
UpdateTextureData(txdata.get(), bitmap, opaque, hasAlpha);
}
- }
+}
- void VideoMemoryGraphicsDriver::ClearSharedDDB(uint32_t sprite_id) {
+void VideoMemoryGraphicsDriver::ClearSharedDDB(uint32_t sprite_id) {
+ // Reset sprite ID for any remaining shared txdata,
+ // then remove the reference from the cache;
+ // NOTE: we do not delete txdata itself, as it may be temporarily in use
const auto found = _txRefs.find(sprite_id);
- if (found != _txRefs.end())
+ if (found != _txRefs.end()) {
+ auto txdata = found->_value.Data.lock();
+ if (txdata)
+ txdata->ID = UINT32_MAX;
_txRefs.erase(found);
- }
+ }
+}
- void VideoMemoryGraphicsDriver::DestroyDDB(IDriverDependantBitmap* ddb) {
+void VideoMemoryGraphicsDriver::DestroyDDB(IDriverDependantBitmap* ddb) {
uint32_t sprite_id = ddb->GetRefID();
DestroyDDBImpl(ddb);
// Remove shared object from ref list if no more active refs left
diff --git a/engines/ags/engine/gfx/gfx_driver_base.h b/engines/ags/engine/gfx/gfx_driver_base.h
index 595b74220e9..c11f7c66091 100644
--- a/engines/ags/engine/gfx/gfx_driver_base.h
+++ b/engines/ags/engine/gfx/gfx_driver_base.h
@@ -252,9 +252,9 @@ public:
// Get shared texture from cache, or create from bitmap and assign ID
IDriverDependantBitmap *GetSharedDDB(uint32_t sprite_id, Bitmap *bitmap, bool hasAlpha, bool opaque) override;
// Removes the shared texture reference, will force the texture to recreate next time
- void ClearSharedDDB(uint32_t sprite_id) override;
- // Updates shared texture data, but only if it is present in the cache
- void UpdateSharedDDB(uint32_t sprite_id, Bitmap *bitmap, bool hasAlpha, bool opaque) override;
+ void ClearSharedDDB(uint32_t sprite_id) override;
+ // Updates shared texture data, but only if it is present in the cache
+ void UpdateSharedDDB(uint32_t sprite_id, Bitmap *bitmap, bool hasAlpha, bool opaque) override;
void DestroyDDB(IDriverDependantBitmap* ddb) override;
// Sets stage screen parameters for the current batch.
@@ -349,6 +349,8 @@ private:
// - this lets to share same texture data among multiple sprites on screen.
// TextureCacheItem stores weak references to the existing texture tiles,
// identified by an arbitrary uint32 number.
+ // TODO: a curious topic to consider: reuse released TextureData for
+ // textures of the same size (research potential performance impact).
struct TextureCacheItem {
GraphicResolution Res;
std::weak_ptr<TextureData> Data;
Commit: 6055a5fe5ace545a4bf5d53de5fb375c917b667a
https://github.com/scummvm/scummvm/commit/6055a5fe5ace545a4bf5d53de5fb375c917b667a
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Engine: fixed script's timeout check was working incorrectly again
>From upstream c694126d77503b9d5528bd95427a8ef6ee48aa6c
Changed paths:
engines/ags/engine/script/cc_instance.cpp
diff --git a/engines/ags/engine/script/cc_instance.cpp b/engines/ags/engine/script/cc_instance.cpp
index 928ef588e61..e7b58aed574 100644
--- a/engines/ags/engine/script/cc_instance.cpp
+++ b/engines/ags/engine/script/cc_instance.cpp
@@ -786,11 +786,12 @@ int ccInstance::Run(int32_t curpc) {
// Make sure it's not stuck in a While loop
if (arg1.IValue < 0) {
+ ++loopIterations;
if (flags & INSTF_RUNNING) {
// was notified still running, don't do anything
flags &= ~INSTF_RUNNING;
loopIterations = 0;
- } else if ((loopIterationCheckDisabled == 0) && (_G(maxWhileLoops) > 0) && (++loopIterations > _G(maxWhileLoops))) {
+ } else if ((loopIterationCheckDisabled == 0) && (_G(maxWhileLoops) > 0) && (loopIterations > _G(maxWhileLoops))) {
cc_error("!Script appears to be hung (a while loop ran %d times). The problem may be in a calling function; check the call stack.", (int)loopIterations);
return -1;
} else if ((loopIterations % 1000) == 0 && (std::chrono::duration_cast<std::chrono::milliseconds>(AGS_Clock::now() - _lastAliveTs) > timeout)) {
Commit: 8d08d05f7fe06e4d72a875b089fadfe6a4064e8f
https://github.com/scummvm/scummvm/commit/8d08d05f7fe06e4d72a875b089fadfe6a4064e8f
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-05-14T23:04:38+02:00
Commit Message:
AGS: Updated build version (3.6.0.48)
Partially from upstream ad45540abe6c776574e02e6e57fba7758410ec40
Changed paths:
engines/ags/shared/core/def_version.h
diff --git a/engines/ags/shared/core/def_version.h b/engines/ags/shared/core/def_version.h
index c64bbfac3e3..09d8f22de57 100644
--- a/engines/ags/shared/core/def_version.h
+++ b/engines/ags/shared/core/def_version.h
@@ -22,9 +22,9 @@
#ifndef AGS_SHARED_CORE_DEFVERSION_H
#define AGS_SHARED_CORE_DEFVERSION_H
-#define ACI_VERSION_STR "3.6.0.47"
+#define ACI_VERSION_STR "3.6.0.48"
#if defined (RC_INVOKED) // for MSVC resource compiler
-#define ACI_VERSION_MSRC_DEF 3.6.0.47
+#define ACI_VERSION_MSRC_DEF 3.6.0.48
#endif
#define SPECIAL_VERSION ""
More information about the Scummvm-git-logs
mailing list