[Scummvm-git-logs] scummvm master -> b79554f742f68b709b8a1a5fe16ab60ec0e87a4f
aquadran
aquadran at gmail.com
Sat Mar 13 18:20:29 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
b79554f742 ICB: Reworked some global constructors
Commit: b79554f742f68b709b8a1a5fe16ab60ec0e87a4f
https://github.com/scummvm/scummvm/commit/b79554f742f68b709b8a1a5fe16ab60ec0e87a4f
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2021-03-13T19:20:24+01:00
Commit Message:
ICB: Reworked some global constructors
Changed paths:
engines/icb/cluster_manager_pc.cpp
engines/icb/common/ptr_util.cpp
engines/icb/common/ptr_util.h
engines/icb/common/px_scriptengine.cpp
engines/icb/common/px_scriptengine.h
engines/icb/game_script.cpp
engines/icb/global_vars.cpp
engines/icb/mission.cpp
engines/icb/mission_functions.cpp
engines/icb/options_manager_pc.cpp
engines/icb/p4_pc.cpp
engines/icb/player.cpp
engines/icb/timer_func.cpp
diff --git a/engines/icb/cluster_manager_pc.cpp b/engines/icb/cluster_manager_pc.cpp
index 1c6708b918..c0bd5021d5 100644
--- a/engines/icb/cluster_manager_pc.cpp
+++ b/engines/icb/cluster_manager_pc.cpp
@@ -176,7 +176,7 @@ char *ClusterManager::GetCDRoot(void) {
int32 ClusterManager::WhichCD(MISSION_ID mission) {
// All demos exist on one CD only
- int32 demo = g_globalScriptVariables.GetVariable("demo");
+ int32 demo = g_globalScriptVariables->GetVariable("demo");
if (demo != 0)
return 1;
diff --git a/engines/icb/common/ptr_util.cpp b/engines/icb/common/ptr_util.cpp
index 03fccf215a..341d6b3a36 100644
--- a/engines/icb/common/ptr_util.cpp
+++ b/engines/icb/common/ptr_util.cpp
@@ -26,23 +26,18 @@
*/
#include "engines/icb/common/px_common.h"
+#include "engines/icb/common/ptr_util.h"
#include "common/array.h"
namespace ICB {
+Common::Array<PointerReference> *g_ptrArray;
+
namespace MemoryUtil {
const int32 PTR_ARRAY_MAX(1024);
-// map pointers to 32-bit references (bottom 32-bits of address)
-struct PointerReference {
- uint32 ref;
- uint8 *ptr;
-};
-
-Common::Array<PointerReference> ptrArray;
-
uint32 encodePtr(uint8 *ptr) {
PointerReference ptrRef;
@@ -51,7 +46,7 @@ uint32 encodePtr(uint8 *ptr) {
ptrRef.ptr = ptr;
// find free slot
- for (Common::Array<PointerReference>::iterator it = ptrArray.begin(); it < ptrArray.end(); it++) {
+ for (Common::Array<PointerReference>::iterator it = g_ptrArray->begin(); it < g_ptrArray->end(); it++) {
if (it->ref == 0) {
*it = ptrRef; // store
return ptrRef.ref;
@@ -59,9 +54,9 @@ uint32 encodePtr(uint8 *ptr) {
}
// append
- ptrArray.push_back(ptrRef);
+ g_ptrArray->push_back(ptrRef);
- if (ptrArray.size() >= (uint)PTR_ARRAY_MAX) {
+ if (g_ptrArray->size() >= (uint)PTR_ARRAY_MAX) {
error("MemoryUtil::encodePtr(): too many pointers (MAX = %u)\n", PTR_ARRAY_MAX);
}
@@ -73,7 +68,7 @@ uint8 *resolvePtr(uint32 ref) {
return NULL;
// do a linear search
- for (Common::Array<PointerReference>::iterator it = ptrArray.begin(); it < ptrArray.end(); it++) {
+ for (Common::Array<PointerReference>::iterator it = g_ptrArray->begin(); it < g_ptrArray->end(); it++) {
if (it->ref == ref) {
uint8 *ptr = it->ptr;
@@ -90,7 +85,7 @@ uint8 *resolvePtr(uint32 ref) {
return NULL;
}
-void clearAllPtrs(void) { ptrArray.clear(); }
+void clearAllPtrs(void) { g_ptrArray->clear(); }
}
} // End of namespace ICB
diff --git a/engines/icb/common/ptr_util.h b/engines/icb/common/ptr_util.h
index fec07eb000..c87810ce53 100644
--- a/engines/icb/common/ptr_util.h
+++ b/engines/icb/common/ptr_util.h
@@ -30,8 +30,18 @@
#include "engines/icb/common/px_common.h"
+#include "common/array.h"
+
namespace ICB {
+// map pointers to 32-bit references (bottom 32-bits of address)
+struct PointerReference {
+ uint32 ref;
+ uint8 *ptr;
+};
+
+extern Common::Array<PointerReference> *g_ptrArray;
+
namespace MemoryUtil {
uint32 encodePtr(uint8 *ptr);
diff --git a/engines/icb/common/px_scriptengine.cpp b/engines/icb/common/px_scriptengine.cpp
index f8c24be1e3..8dc4487153 100644
--- a/engines/icb/common/px_scriptengine.cpp
+++ b/engines/icb/common/px_scriptengine.cpp
@@ -36,7 +36,7 @@ namespace ICB {
const char *playerString = "player";
-CpxGlobalScriptVariables g_globalScriptVariables;
+CpxGlobalScriptVariables *g_globalScriptVariables;
// Information for the script program stack
#define STACK_SIZE 10 // The size of the stack
@@ -217,7 +217,7 @@ scriptInterpreterReturnCodes RunScript(const char *&scriptData, // A pointer to
case CP_PUSH_GLOBAL_VAR32: {
Fetch32(parameter1); // hash of global
- parameter2 = g_globalScriptVariables.GetVariable(parameter1); // value of global
+ parameter2 = g_globalScriptVariables->GetVariable(parameter1); // value of global
PushOnStack(parameter2); // push on stack
// printf("push global 0x%08x = %d",parameter1,parameter2);
} break;
@@ -225,7 +225,7 @@ scriptInterpreterReturnCodes RunScript(const char *&scriptData, // A pointer to
case CP_POP_GLOBAL_VAR32: {
Fetch32(parameter1); // hash of global
PopOffStack(parameter2); // value from stack
- g_globalScriptVariables.SetVariable(parameter1, parameter2); // set value
+ g_globalScriptVariables->SetVariable(parameter1, parameter2); // set value
// printf("pop global 0x%08x = %d",parameter1,parameter2);
} break;
diff --git a/engines/icb/common/px_scriptengine.h b/engines/icb/common/px_scriptengine.h
index ac1cb1bdfb..321ff7f90b 100644
--- a/engines/icb/common/px_scriptengine.h
+++ b/engines/icb/common/px_scriptengine.h
@@ -50,7 +50,7 @@ scriptInterpreterReturnCodes RunScript(const char *&scriptData, // A pointer to
void SetScriptDebugging(bool8 f); // Set script debugging flag
-extern CpxGlobalScriptVariables g_globalScriptVariables;
+extern CpxGlobalScriptVariables *g_globalScriptVariables;
#define CP_END_SCRIPT 0 // Terminate a script
#define CP_PUSH_INT32 1 // Push a number on to the stack
diff --git a/engines/icb/game_script.cpp b/engines/icb/game_script.cpp
index d08ff4b702..5979ad45f3 100644
--- a/engines/icb/game_script.cpp
+++ b/engines/icb/game_script.cpp
@@ -96,9 +96,9 @@ void _game_script::Run_to_bookmark(const char *name) {
char p1[ENGINE_STRING_LEN];
// reset program counter (but keep demo flag!)
- int32 demo = g_globalScriptVariables.GetVariable("demo");
+ int32 demo = g_globalScriptVariables->GetVariable("demo");
Restart_game_script();
- g_globalScriptVariables.SetVariable("demo", demo);
+ g_globalScriptVariables->SetVariable("demo", demo);
// now loop through gamescript...
while (1) {
@@ -231,7 +231,7 @@ void _game_script::Process_game_script() {
Fetch_next_param(p1);
Fetch_next_param(p2);
Fetch_next_line();
- g_globalScriptVariables.SetVariable(p1, (atoi(p2)));
+ g_globalScriptVariables->SetVariable(p1, (atoi(p2)));
break;
case 'R': // restart
diff --git a/engines/icb/global_vars.cpp b/engines/icb/global_vars.cpp
index 60d09a3da2..42017994f7 100644
--- a/engines/icb/global_vars.cpp
+++ b/engines/icb/global_vars.cpp
@@ -47,6 +47,8 @@
#include "engines/icb/gfx/rlp_api.h"
#include "engines/icb/common/px_capri_maths_pc.h"
#include "engines/icb/common/px_capri_maths.h"
+#include "engines/icb/common/ptr_util.h"
+#include "engines/icb/sound.h"
namespace ICB {
@@ -116,7 +118,7 @@ void Init_globals() {
i = atoi(value);
Tdebug("globals.txt", "found var [%s] set to [%s, %d]", input, value, i);
- g_globalScriptVariables.InitVariable(input, i);
+ g_globalScriptVariables->InitVariable(input, i);
nVars++;
} while (index < (len - 1));
@@ -127,12 +129,14 @@ void Init_globals() {
// Right all done
// So sort the globals so they can be searched quicker !
- g_globalScriptVariables.SortVariables();
+ g_globalScriptVariables->SortVariables();
Tdebug("globals.txt", "Found %d global variables", nVars);
}
void CreateGlobalObjects() {
+ g_ptrArray = new Common::Array<PointerReference>();
+ g_globalScriptVariables = new CpxGlobalScriptVariables;
g_theSequenceManager = new MovieManager;
g_while_u_wait_SequenceManager = new MovieManager;
g_personalSequenceManager = new MovieManager;
@@ -172,6 +176,8 @@ void CreateGlobalObjects() {
}
void DestroyGlobalObjects() {
+ delete g_ptrArray;
+ delete g_globalScriptVariables;
delete g_theSequenceManager;
delete g_while_u_wait_SequenceManager;
delete g_personalSequenceManager;
diff --git a/engines/icb/mission.cpp b/engines/icb/mission.cpp
index e119b43466..761993c7f9 100644
--- a/engines/icb/mission.cpp
+++ b/engines/icb/mission.cpp
@@ -385,7 +385,7 @@ uint32 _mission::Game_cycle() {
session->Process_conveyors(); // conveyor belts
// Update global timer by a tick
- g_globalScriptVariables.SetVariable("missionelapsedtime", g_globalScriptVariables.GetVariable("missionelapsedtime") + 1);
+ g_globalScriptVariables->SetVariable("missionelapsedtime", g_globalScriptVariables->GetVariable("missionelapsedtime") + 1);
// call the camera director which will pick a view depending upon the player objects position
session->Camera_director();
@@ -633,14 +633,14 @@ void _mission::Save_game_position(const char *filename, const char *slot_label,
stream->write((const char *)Fetch_tiny_session_name(), avalue);
// now write the globals out
- atinyvalue = (uint8)g_globalScriptVariables.GetNoItems();
+ atinyvalue = (uint8)g_globalScriptVariables->GetNoItems();
Tdebug("save_restore.txt", " %d globals", atinyvalue);
stream->writeByte(atinyvalue);
for (j = 0; j < atinyvalue; j++) {
- avalue = (int32)g_globalScriptVariables.GetVariable(g_globalScriptVariables[j].hash, 0, 0);
+ avalue = (int32)g_globalScriptVariables->GetVariable((*g_globalScriptVariables)[j].hash, 0, 0);
stream->writeSint32LE(avalue);
- Tdebug("save_restore.txt", " %d 0x%08x = %d", j, g_globalScriptVariables[j].hash, avalue);
+ Tdebug("save_restore.txt", " %d 0x%08x = %d", j, (*g_globalScriptVariables)[j].hash, avalue);
}
// get the icon information
@@ -961,14 +961,14 @@ __load_result Load_game(const char *filename) {
// number of globals
atinyvalue = stream->readByte();
Tdebug("save_restore.txt", " %d globals", atinyvalue);
- if (atinyvalue != (uint8)g_globalScriptVariables.GetNoItems()) {
+ if (atinyvalue != (uint8)g_globalScriptVariables->GetNoItems()) {
Tdebug("save_restore.txt", " globals mismatch");
return __GLOBAL_MISMATCH;
}
for (j = 0; j < atinyvalue; j++) {
avalue = stream->readSint32LE();
- g_globalScriptVariables.SetVariable(g_globalScriptVariables[j].hash, avalue);
+ g_globalScriptVariables->SetVariable((*g_globalScriptVariables)[j].hash, avalue);
Tdebug("save_restore.txt", " %d = %d", j, avalue);
}
diff --git a/engines/icb/mission_functions.cpp b/engines/icb/mission_functions.cpp
index 5b37d53566..f5da100d23 100644
--- a/engines/icb/mission_functions.cpp
+++ b/engines/icb/mission_functions.cpp
@@ -40,21 +40,21 @@
namespace ICB {
int32 LoadMission(int32 m, void * /*usr*/) {
- int32 demo = g_globalScriptVariables.GetVariable("demo");
+ int32 demo = g_globalScriptVariables->GetVariable("demo");
Init_globals(); // reload the global vars for the new mission
- g_globalScriptVariables.SetVariable("missionelapsedtime", 0);
+ g_globalScriptVariables->SetVariable("missionelapsedtime", 0);
// On mission 8 (m=7?) then set a global variable to say we are on mission 8 and not on mission 9
if (m == 7) {
- g_globalScriptVariables.SetVariable("mission9", 0);
+ g_globalScriptVariables->SetVariable("mission9", 0);
}
// On mission 9 (m=8?) then set a global variable to say we are on mission 9 and not on mission 8
if (m == 8) {
- g_globalScriptVariables.SetVariable("mission9", 1);
+ g_globalScriptVariables->SetVariable("mission9", 1);
}
// update the demo flag status
- g_globalScriptVariables.SetVariable("demo", demo);
+ g_globalScriptVariables->SetVariable("demo", demo);
// Purge the res_man's to prevent them getting confused
rs_anims->Res_purge_all();
@@ -110,7 +110,7 @@ int32 FindMissionNumber(const char *mission) {
if (scumm_stricmp(g_mission_names[m], mission) == 0) {
// Mission 8-9 special case check
if (m == 6) {
- if (g_globalScriptVariables.GetVariable("mission9") == 1)
+ if (g_globalScriptVariables->GetVariable("mission9") == 1)
m = 7;
}
diff --git a/engines/icb/options_manager_pc.cpp b/engines/icb/options_manager_pc.cpp
index 468d4a3cbb..69dda6d844 100644
--- a/engines/icb/options_manager_pc.cpp
+++ b/engines/icb/options_manager_pc.cpp
@@ -678,7 +678,7 @@ void OptionsManager::StartGameOverOptions() {
g_missionNumber = 7;
break;
case '8':
- if (g_globalScriptVariables.GetVariable("mission9") == 0)
+ if (g_globalScriptVariables->GetVariable("mission9") == 0)
g_missionNumber = 8;
else
g_missionNumber = 9;
@@ -953,7 +953,7 @@ void OptionsManager::StartMainOptions(void) {
MakeAllSurfii();
// Need to ensure that that global timer variable is set to zero
- g_globalScriptVariables.SetVariable("missionelapsedtime", 0);
+ g_globalScriptVariables->SetVariable("missionelapsedtime", 0);
// Initial selection
m_M_TOP_selected = _NEWGAME;
@@ -1027,7 +1027,7 @@ void OptionsManager::InitialiseInGameOptions(void) {
strncpy(m_defaultSlotName, GetTextFromReference(HashString("opt_mainlandbase")), MAX_LABEL_LENGTH - 1);
break;
case '8':
- if (g_globalScriptVariables.GetVariable("mission9") == 0)
+ if (g_globalScriptVariables->GetVariable("mission9") == 0)
strncpy(m_defaultSlotName, GetTextFromReference(HashString("opt_islandbase")), MAX_LABEL_LENGTH - 1);
else
strncpy(m_defaultSlotName, GetTextFromReference(HashString("opt_escape")), MAX_LABEL_LENGTH - 1);
@@ -1044,7 +1044,7 @@ void OptionsManager::InitialiseInGameOptions(void) {
m_defaultSlotName[MAX_LABEL_LENGTH - 1] = 0;
// Get number of game ticks at ~12fps
- int32 ticks = g_globalScriptVariables.GetVariable("missionelapsedtime");
+ int32 ticks = g_globalScriptVariables->GetVariable("missionelapsedtime");
// Convert to seconds played
m_timePlayed = (uint32)((float)ticks / 12.0f);
@@ -1868,7 +1868,7 @@ void OptionsManager::MoveSelected(bool8 _down_) {
int32 currentlySelected;
- int32 demo = g_globalScriptVariables.GetVariable("demo");
+ int32 demo = g_globalScriptVariables->GetVariable("demo");
ResetTitleScreenTimeout();
@@ -3230,20 +3230,20 @@ void OptionsManager::DoChoice() {
// Mission 8-9 special cases
if (g_missionNumber == 7) {
- g_globalScriptVariables.SetVariable("mission9", 0);
+ g_globalScriptVariables->SetVariable("mission9", 0);
}
if (g_missionNumber == 8) {
- g_globalScriptVariables.SetVariable("mission9", 1);
+ g_globalScriptVariables->SetVariable("mission9", 1);
}
// Need to preserve global timer variable
int32 tv;
- tv = g_globalScriptVariables.GetVariable("missionelapsedtime");
+ tv = g_globalScriptVariables->GetVariable("missionelapsedtime");
// Use this function and then quit
RestartMission();
- g_globalScriptVariables.SetVariable("missionelapsedtime", tv);
+ g_globalScriptVariables->SetVariable("missionelapsedtime", tv);
m_thatsEnoughTa = TRUE8;
break;
@@ -3917,7 +3917,7 @@ void OptionsManager::DrawPlaySelectScreen(uint32 surface_id) {
const char *msg = NULL;
// Some of this is disabled for demos
- int32 demo = g_globalScriptVariables.GetVariable("demo");
+ int32 demo = g_globalScriptVariables->GetVariable("demo");
uint8 *ad = surface_manager->Lock_surface(surface_id);
uint32 pitch = surface_manager->Get_pitch(surface_id);
diff --git a/engines/icb/p4_pc.cpp b/engines/icb/p4_pc.cpp
index e304d44d20..7aec12f00a 100644
--- a/engines/icb/p4_pc.cpp
+++ b/engines/icb/p4_pc.cpp
@@ -235,8 +235,8 @@ void InitEngine(const char *lpCmdLine) {
// init global variables
Zdebug("Init_globals");
Init_globals();
- g_globalScriptVariables.SetVariable("missionelapsedtime", 0);
- g_globalScriptVariables.SetVariable("demo", 0);
+ g_globalScriptVariables->SetVariable("missionelapsedtime", 0);
+ g_globalScriptVariables->SetVariable("demo", 0);
Zdebug("~Init_globals");
// ok, see if the special gameScript is present
diff --git a/engines/icb/player.cpp b/engines/icb/player.cpp
index 9b49b10dba..ee4dee9cae 100644
--- a/engines/icb/player.cpp
+++ b/engines/icb/player.cpp
@@ -3164,7 +3164,7 @@ void _game_session::Restart_player() {
}
uint32 _player::GetBulletsPerClip() {
- uint32 bull_per_clip = g_globalScriptVariables.GetVariable("bullets_per_clip");
+ uint32 bull_per_clip = g_globalScriptVariables->GetVariable("bullets_per_clip");
return bull_per_clip;
}
diff --git a/engines/icb/timer_func.cpp b/engines/icb/timer_func.cpp
index b63dd6f256..afaab3c9ff 100644
--- a/engines/icb/timer_func.cpp
+++ b/engines/icb/timer_func.cpp
@@ -189,7 +189,7 @@ void DrawTimer() {
int32 mins, secs, cycles, totalSecs, hs, danger;
- cycles = g_globalScriptVariables.GetVariable(timerVariable);
+ cycles = g_globalScriptVariables->GetVariable(timerVariable);
totalSecs = cycles / timerMultiplier;
@@ -230,7 +230,7 @@ mcodeFunctionReturnCodes fn_activate_timer(int32 &, int32 *params) {
timerVariable = HashString(timer_name);
// test variable exists...
- int32 test = g_globalScriptVariables.FindVariable(timerVariable);
+ int32 test = g_globalScriptVariables->FindVariable(timerVariable);
if (test == -1) {
Fatal_error("No global variable %s which fn_activate_timer() has been told to follow!", timer_name);
}
More information about the Scummvm-git-logs
mailing list