[Scummvm-git-logs] scummvm master -> 614858eb4b8e60d35e9b89d2be1e420a159c39cd
sev-
sev at scummvm.org
Tue Oct 22 21:14:13 CEST 2019
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
58ae990e3b SCUMM: Made getResourceSize() public
4f54a3361a SCUMM HE: Initial (hard)code for Moonbase networking
4ba4884c37 SCUMM HE: More work on the Moonbase networking. Getting in-game
f0037adb55 SCUMM: Made displayMessage() public
378ab7c642 SCUMM HE: More code for Moonbase Commander networking
41f81bf02e SCUMM HE: Hid several noisy debug messages
614858eb4b SCUMM HE: Work on receiving part of Moonbase Commander networking
Commit: 58ae990e3b07a9889a9dfeebdb24836887a194fb
https://github.com/scummvm/scummvm/commit/58ae990e3b07a9889a9dfeebdb24836887a194fb
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-22T21:13:54+02:00
Commit Message:
SCUMM: Made getResourceSize() public
Changed paths:
engines/scumm/scumm.h
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index ad3a3c1..11c054d 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -757,9 +757,9 @@ protected:
// void nukeResource(ResType type, ResId idx);
int getResourceRoomNr(ResType type, ResId idx);
virtual uint32 getResourceRoomOffset(ResType type, ResId idx);
- int getResourceSize(ResType type, ResId idx);
public:
+ int getResourceSize(ResType type, ResId idx);
byte *getResourceAddress(ResType type, ResId idx);
virtual byte *getStringAddress(ResId idx);
byte *getStringAddressVar(int i);
Commit: 4f54a3361a7ed69f7928a13b883c2aaa21d2d791
https://github.com/scummvm/scummvm/commit/4f54a3361a7ed69f7928a13b883c2aaa21d2d791
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-22T21:13:54+02:00
Commit Message:
SCUMM HE: Initial (hard)code for Moonbase networking
Changed paths:
engines/scumm/he/moonbase/net_main.cpp
engines/scumm/he/moonbase/net_main.h
diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index cdc2eef..0c200cf 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -23,6 +23,7 @@
#include "scumm/he/intern_he.h"
#include "scumm/he/moonbase/moonbase.h"
#include "scumm/he/moonbase/net_main.h"
+#include "scumm/he/moonbase/net_defines.h"
namespace Scumm {
@@ -42,7 +43,9 @@ int Net::joinGame(char *IP, char *userName) {
int Net::addUser(char *shortName, char *longName) {
warning("STUB: Net::addUser(\"%s\", \"%s\")", shortName, longName); // PN_AddUser
- return 0;
+
+ // FAKE successful add. FIXME
+ return 1;
}
int Net::removeUser() {
@@ -67,7 +70,9 @@ int Net::createSession(char *name) {
int Net::joinSession(int sessionIndex) {
warning("STUB: Net::joinSession(%d)", sessionIndex); // PN_JoinSession
- return 0;
+
+ // FAKE successful join. FIXME
+ return 1;
}
int Net::endSession() {
@@ -88,8 +93,20 @@ void Net::setBotsCount(int botsCount) {
}
int32 Net::setProviderByName(int32 parameter1, int32 parameter2) {
- warning("STUB: Net::setProviderByName(%d, %d)", parameter1, parameter2); // PN_SetProviderByName
- return 0;
+ char name[MAX_PROVIDER_NAME];
+ char ipaddress[MAX_IP_SIZE];
+
+ ipaddress[0] = '\0';
+
+ _vm->getStringFromArray(parameter1, name, sizeof(name));
+ if (parameter2)
+ _vm->getStringFromArray(parameter2, ipaddress, sizeof(ipaddress));
+
+ debug(1, "Net::setProviderByName(\"%s\", \"%s\")", name, ipaddress); // PN_SetProviderByName
+
+ // Emulate that we found a TCP/IP provider
+
+ return 1;
}
void Net::setFakeLatency(int time) {
@@ -106,12 +123,14 @@ bool Net::destroyPlayer(int32 playerDPID) {
int32 Net::startQuerySessions() {
warning("STUB: Net::startQuerySessions()"); // StartQuerySessions
- return 0;
+
+ // FAKE 1 session. FIXME
+ return 1;
}
int32 Net::updateQuerySessions() {
warning("STUB: Net::updateQuerySessions()"); // UpdateQuerySessions
- return 0;
+ return startQuerySessions();
}
void Net::stopQuerySessions() {
@@ -124,8 +143,10 @@ int Net::querySessions() {
}
int Net::queryProviders() {
- warning("STUB: Net::queryProviders()"); // PN_QueryProviders
- return 0;
+ debug(1, "Net::queryProviders()"); // PN_QueryProviders
+
+ // Emulate that we have 1 provider, TCP/IP
+ return 1;
}
int Net::setProvider(int providerIndex) {
@@ -162,8 +183,25 @@ void Net::remoteStartScript(int typeOfSend, int sendTypeParam, int priority, int
warning("STUB: Net::remoteStartScript(%d, %d, %d, %d, ...)", typeOfSend, sendTypeParam, priority, argsCount); // PN_RemoteStartScriptCommand
}
+byte packbuffer[MAX_PACKET_SIZE + 8];
+
+void Net::remoteSendData(int type, byte *data, int len) {
+ WRITE_UINT32(packbuffer, type);
+ WRITE_UINT32(packbuffer + 4, len);
+ memcpy(packbuffer + 8, data, len);
+
+ debug("Package to send, %d bytes", len + 8);
+
+ Common::hexdump(packbuffer, len + 8);
+}
+
void Net::remoteSendArray(int typeOfSend, int sendTypeParam, int priority, int arrayIndex) {
- warning("STUB: Net::remoteSendArray(%d, %d, %d, %d)", typeOfSend, sendTypeParam, priority, arrayIndex); // PN_RemoteSendArrayCommand
+ byte *arr = _vm->getResourceAddress(rtString, arrayIndex & ~0x33539000);
+ int len = _vm->getResourceSize(rtString, arrayIndex & ~0x33539000);
+
+ warning("STUB: Net::remoteSendArray(%d, %d, %d, %d)", typeOfSend, sendTypeParam, priority, arrayIndex & ~0x33539000); // PN_RemoteSendArrayCommand
+
+ remoteSendData(PACKETTYPE_REMOTESENDSCUMMARRAY, arr, len);
}
int Net::remoteStartScriptFunction(int typeOfSend, int sendTypeParam, int priority, int defaultReturnValue, int argsCount, int32 *args) {
@@ -182,6 +220,9 @@ bool Net::getIPfromName(char *ip, int ipLength, char *nameBuffer) {
}
void Net::getSessionName(int sessionNumber, char *buffer, int length) {
+ // FIXME
+ strcpy(buffer, "test");
+
warning("STUB: Net::getSessionName(%d, \"%s\", %d)", sessionNumber, buffer, length); // PN_GetSessionName
}
@@ -189,7 +230,9 @@ int Net::getSessionPlayerCount(int sessionNumber) {
warning("STUB: Net::getSessionPlayerCount(%d)", sessionNumber); // case GET_SESSION_PLAYER_COUNT_KLUDGE:
//assert(sessionNumber >= 0 && sessionNumber < NUMELEMENTS(gdefMultiPlay.gamedescptr));
//return gdefMultiPlay.gamedescptr[sessionNumber].currentplayers;
- return 0;
+
+ // FAKE 2 players. FIXME
+ return 2;
}
void Net::getProviderName(int providerIndex, char *buffer, int length) {
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index dd8cce5..ad1da06 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -27,8 +27,6 @@ namespace Scumm {
class ScummEngine_v100he;
-//this is a dummy based on ai_main.h Scumm::AI
-
class Net {
public:
Net(ScummEngine_v100he *vm);
@@ -60,6 +58,7 @@ public:
bool initSession();
bool initUser();
void remoteStartScript(int typeOfSend, int sendTypeParam, int priority, int argsCount, int32 *args);
+ void remoteSendData(int type, byte *data, int len);
void remoteSendArray(int typeOfSend, int sendTypeParam, int priority, int arrayIndex);
int remoteStartScriptFunction(int typeOfSend, int sendTypeParam, int priority, int defaultReturnValue, int argsCount, int32 *args);
Commit: 4ba4884c37fc2f5644c7ecb0b353f61e88a0330f
https://github.com/scummvm/scummvm/commit/4ba4884c37fc2f5644c7ecb0b353f61e88a0330f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-22T21:13:54+02:00
Commit Message:
SCUMM HE: More work on the Moonbase networking. Getting in-game
Changed paths:
engines/scumm/he/moonbase/net_main.cpp
engines/scumm/he/moonbase/net_main.h
diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index 0c200cf..80e2f6f 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -29,11 +29,21 @@ namespace Scumm {
Net::Net(ScummEngine_v100he *vm) : _latencyTime(1), _fakeLatency(false), _vm(vm) {
//some defaults for fields
+
+ _packbuffer = (byte *)malloc(MAX_PACKET_SIZE + 12);
+ _tmpbuffer = (byte *)malloc(MAX_PACKET_SIZE);
+}
+
+Net::~Net() {
+ free(_tmpbuffer);
+ free(_packbuffer);
}
int Net::hostGame(char *sessionName, char *userName) {
warning("STUB: op_net_host_tcpip_game(\"%s\", \"%s\")", sessionName, userName); // PN_HostTCPIPGame
- return 0;
+
+ // FAKE successful game creation. FIXME
+ return 1;
}
int Net::joinGame(char *IP, char *userName) {
@@ -180,19 +190,26 @@ bool Net::initUser() {
}
void Net::remoteStartScript(int typeOfSend, int sendTypeParam, int priority, int argsCount, int32 *args) {
+ byte *ptr = _tmpbuffer;
+ for (int i = 0; i < argsCount; i++, ptr += 4)
+ WRITE_UINT32(ptr, args[i]);
+
warning("STUB: Net::remoteStartScript(%d, %d, %d, %d, ...)", typeOfSend, sendTypeParam, priority, argsCount); // PN_RemoteStartScriptCommand
+
+ remoteSendData(typeOfSend, sendTypeParam, PACKETTYPE_REMOTESTARTSCRIPTRETURN, _tmpbuffer, argsCount * 4, 0);
}
-byte packbuffer[MAX_PACKET_SIZE + 8];
+int Net::remoteSendData(int typeOfSend, int sendTypeParam, int type, byte *data, int len, int defaultRes) {
+ WRITE_UINT32(_packbuffer, type);
+ WRITE_UINT32(_packbuffer + 4, len);
+ WRITE_UINT32(_packbuffer + 8, g_system->getMillis());
+ memcpy(_packbuffer + 12, data, len);
-void Net::remoteSendData(int type, byte *data, int len) {
- WRITE_UINT32(packbuffer, type);
- WRITE_UINT32(packbuffer + 4, len);
- memcpy(packbuffer + 8, data, len);
+ debug("Package to send, to: %d (%d), %d bytes", typeOfSend, sendTypeParam, len + 12);
- debug("Package to send, %d bytes", len + 8);
+ Common::hexdump(_packbuffer, len + 12);
- Common::hexdump(packbuffer, len + 8);
+ return defaultRes;
}
void Net::remoteSendArray(int typeOfSend, int sendTypeParam, int priority, int arrayIndex) {
@@ -201,12 +218,17 @@ void Net::remoteSendArray(int typeOfSend, int sendTypeParam, int priority, int a
warning("STUB: Net::remoteSendArray(%d, %d, %d, %d)", typeOfSend, sendTypeParam, priority, arrayIndex & ~0x33539000); // PN_RemoteSendArrayCommand
- remoteSendData(PACKETTYPE_REMOTESENDSCUMMARRAY, arr, len);
+ remoteSendData(typeOfSend, sendTypeParam, PACKETTYPE_REMOTESENDSCUMMARRAY, arr, len, 0);
}
int Net::remoteStartScriptFunction(int typeOfSend, int sendTypeParam, int priority, int defaultReturnValue, int argsCount, int32 *args) {
+ byte *ptr = _tmpbuffer;
+ for (int i = 0; i < argsCount; i++, ptr += 4)
+ WRITE_UINT32(ptr, args[i]);
+
warning("STUB: Net::remoteStartScriptFunction(%d, %d, %d, %d, %d, ...)", typeOfSend, sendTypeParam, priority, defaultReturnValue, argsCount); // PN_RemoteStartScriptFunction
- return 0;
+
+ return remoteSendData(typeOfSend, sendTypeParam, PACKETTYPE_REMOTESTARTSCRIPTRETURN, _tmpbuffer, argsCount * 4, defaultReturnValue);
}
bool Net::getHostName(char *hostname, int length) {
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index ad1da06..7fbae34 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -30,6 +30,7 @@ class ScummEngine_v100he;
class Net {
public:
Net(ScummEngine_v100he *vm);
+ ~Net();
int hostGame(char *sessionName, char *userName);
int joinGame(char *IP, char *userName);
@@ -58,7 +59,7 @@ public:
bool initSession();
bool initUser();
void remoteStartScript(int typeOfSend, int sendTypeParam, int priority, int argsCount, int32 *args);
- void remoteSendData(int type, byte *data, int len);
+ int remoteSendData(int typeOfSend, int sendTypeParam, int type, byte *data, int len, int defaultRes);
void remoteSendArray(int typeOfSend, int sendTypeParam, int priority, int arrayIndex);
int remoteStartScriptFunction(int typeOfSend, int sendTypeParam, int priority, int defaultReturnValue, int argsCount, int32 *args);
@@ -81,6 +82,10 @@ public:
bool _fakeLatency;
ScummEngine_v100he *_vm;
+
+ byte *_packbuffer;
+ byte *_tmpbuffer;
+
};
} // End of namespace Scumm
Commit: f0037adb55f84392511534185c03375895abb319
https://github.com/scummvm/scummvm/commit/f0037adb55f84392511534185c03375895abb319
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-22T21:13:54+02:00
Commit Message:
SCUMM: Made displayMessage() public
Changed paths:
engines/scumm/scumm.h
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 11c054d..873e8fb 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -501,8 +501,10 @@ protected:
void messageDialog(const char *message);
void versionDialog();
+public:
char displayMessage(const char *altButton, const char *message, ...) GCC_PRINTF(3, 4);
+protected:
byte _fastMode;
byte _numActors;
Commit: 378ab7c642002d16002a030f45699fe2d00e391a
https://github.com/scummvm/scummvm/commit/378ab7c642002d16002a030f45699fe2d00e391a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-22T21:13:54+02:00
Commit Message:
SCUMM HE: More code for Moonbase Commander networking
Changed paths:
engines/scumm/he/moonbase/net_main.cpp
engines/scumm/he/moonbase/net_main.h
diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index 80e2f6f..fe2fae1 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -32,6 +32,8 @@ Net::Net(ScummEngine_v100he *vm) : _latencyTime(1), _fakeLatency(false), _vm(vm)
_packbuffer = (byte *)malloc(MAX_PACKET_SIZE + 12);
_tmpbuffer = (byte *)malloc(MAX_PACKET_SIZE);
+
+ _myUserId = -1;
}
Net::~Net() {
@@ -40,10 +42,21 @@ Net::~Net() {
}
int Net::hostGame(char *sessionName, char *userName) {
- warning("STUB: op_net_host_tcpip_game(\"%s\", \"%s\")", sessionName, userName); // PN_HostTCPIPGame
+ if (createSession(sessionName)) {
+ if (addUser(userName, userName)) {
+ return 1;
+ } else {
+ _vm->displayMessage(0, "Error Adding User \"%s\" to Session \"%s\"", userName, sessionName);
+ endSession();
+ closeProvider();
+ }
+ } else {
+ _vm->displayMessage(0, "Error creating session \"%s\"", userName );
+
+ closeProvider();
+ }
- // FAKE successful game creation. FIXME
- return 1;
+ return 0;
}
int Net::joinGame(char *IP, char *userName) {
@@ -54,6 +67,8 @@ int Net::joinGame(char *IP, char *userName) {
int Net::addUser(char *shortName, char *longName) {
warning("STUB: Net::addUser(\"%s\", \"%s\")", shortName, longName); // PN_AddUser
+ _myUserId = _vm->_rnd.getRandomNumber(1000000);
+
// FAKE successful add. FIXME
return 1;
}
@@ -70,12 +85,14 @@ int Net::whoSentThis() {
int Net::whoAmI() {
warning("STUB: Net::whoAmI()"); // PN_WhoAmI
- return 0;
+ return _myUserId;
}
int Net::createSession(char *name) {
warning("STUB: Net::createSession(\"%s\")", name); // PN_CreateSession
- return 0;
+
+ // FAKE session creation. FIXME
+ return 1;
}
int Net::joinSession(int sessionIndex) {
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index 7fbae34..00ec6ca 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -86,6 +86,7 @@ public:
byte *_packbuffer;
byte *_tmpbuffer;
+ int _myUserId;
};
} // End of namespace Scumm
Commit: 41f81bf02e313aa92e91f528a3dad2d06cb43d31
https://github.com/scummvm/scummvm/commit/41f81bf02e313aa92e91f528a3dad2d06cb43d31
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-22T21:13:54+02:00
Commit Message:
SCUMM HE: Hid several noisy debug messages
Changed paths:
engines/scumm/he/moonbase/ai_main.cpp
engines/scumm/he/moonbase/moonbase.cpp
diff --git a/engines/scumm/he/moonbase/ai_main.cpp b/engines/scumm/he/moonbase/ai_main.cpp
index d6ab54c..cc19cf5 100644
--- a/engines/scumm/he/moonbase/ai_main.cpp
+++ b/engines/scumm/he/moonbase/ai_main.cpp
@@ -2713,7 +2713,7 @@ int AI::getUnitsWithinRadius(int x, int y, int radius) {
assert(y >= 0);
assert(radius >= 0);
- debug(0, "getUnitsWithinRadius(%d, %d, %d)", x, y, radius);
+ debug(3, "getUnitsWithinRadius(%d, %d, %d)", x, y, radius);
int retVal = _vm->_moonbase->callScummFunction(_mcpParams[F_GET_UNITS_WITHIN_RADIUS], 3, x, y, radius);
return retVal;
@@ -2759,7 +2759,7 @@ int AI::energyPoolSize(int pool) {
case 63:
return 60;
-
+
default:
return 0;
}
diff --git a/engines/scumm/he/moonbase/moonbase.cpp b/engines/scumm/he/moonbase/moonbase.cpp
index 1e8c8fa..2f99e32 100644
--- a/engines/scumm/he/moonbase/moonbase.cpp
+++ b/engines/scumm/he/moonbase/moonbase.cpp
@@ -65,7 +65,7 @@ int Moonbase::callScummFunction(int scriptNumber, int paramCount,...) {
memset(args, 0, sizeof(args));
Common::String str;
- str = Common::String::format("callScummFunction(%d, [", scriptNumber);
+ str = Common::String::format("Moonbase::callScummFunction(%d, [", scriptNumber);
for (int i = 0; i < paramCount; i++) {
args[i] = va_arg(va_params, int);
@@ -74,7 +74,7 @@ int Moonbase::callScummFunction(int scriptNumber, int paramCount,...) {
}
str += "])";
- debug(0, "%s", str.c_str());
+ debug(3, "%s", str.c_str());
va_end(va_params);
Commit: 614858eb4b8e60d35e9b89d2be1e420a159c39cd
https://github.com/scummvm/scummvm/commit/614858eb4b8e60d35e9b89d2be1e420a159c39cd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-22T21:13:54+02:00
Commit Message:
SCUMM HE: Work on receiving part of Moonbase Commander networking
Changed paths:
engines/scumm/he/intern_he.h
engines/scumm/he/logic/moonbase_logic.cpp
engines/scumm/he/moonbase/moonbase.cpp
engines/scumm/he/moonbase/net_main.cpp
engines/scumm/he/moonbase/net_main.h
engines/scumm/module.mk
engines/scumm/vars.cpp
diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h
index 25dd31f..bd0ab76 100644
--- a/engines/scumm/he/intern_he.h
+++ b/engines/scumm/he/intern_he.h
@@ -592,6 +592,8 @@ protected:
class ScummEngine_v100he : public ScummEngine_v99he {
friend class AI;
+friend class Moonbase;
+friend class Net;
protected:
ResType _heResType;
@@ -663,6 +665,10 @@ protected:
byte VAR_U32_USER_VAR_D;
byte VAR_U32_USER_VAR_E;
byte VAR_U32_USER_VAR_F;
+
+ byte VAR_REMOTE_START_SCRIPT;
+ byte VAR_NETWORK_AVAILABLE;
+ byte VAR_NETWORK_RECEIVE_ARRAY_SCRIPT;
};
class ScummEngine_vCUPhe : public Engine {
diff --git a/engines/scumm/he/logic/moonbase_logic.cpp b/engines/scumm/he/logic/moonbase_logic.cpp
index 8e4b5c9c..d16f8f9 100644
--- a/engines/scumm/he/logic/moonbase_logic.cpp
+++ b/engines/scumm/he/logic/moonbase_logic.cpp
@@ -41,6 +41,8 @@ public:
int versionID();
+ int startOfFrame();
+
int32 dispatch(int op, int numArgs, int32 *args);
private:
@@ -162,6 +164,11 @@ int LogicHEmoonbase::versionID() {
#define OP_NET_ENABLE_SESSION_PLAYER_JOIN 1564
#define OP_NET_SET_AI_PLAYER_COUNT 1565
+int LogicHEmoonbase::startOfFrame() {
+ _vm1->_moonbase->_net->doNetworkOnceAFrame(15); // Value should be passed in...
+
+ return 0;
+}
int32 LogicHEmoonbase::dispatch(int op, int numArgs, int32 *args) {
switch (op) {
diff --git a/engines/scumm/he/moonbase/moonbase.cpp b/engines/scumm/he/moonbase/moonbase.cpp
index 2f99e32..1c03fc7 100644
--- a/engines/scumm/he/moonbase/moonbase.cpp
+++ b/engines/scumm/he/moonbase/moonbase.cpp
@@ -23,7 +23,7 @@
#include "scumm/he/intern_he.h"
#include "scumm/he/moonbase/moonbase.h"
#include "scumm/he/moonbase/ai_main.h"
-#ifdef USE_SDL_NET
+#ifdef USE_CURL
#include "scumm/he/moonbase/net_main.h"
#endif
@@ -33,14 +33,17 @@ Moonbase::Moonbase(ScummEngine_v100he *vm) : _vm(vm) {
initFOW();
_ai = new AI(_vm);
-#ifdef USE_SDL_NET
+#ifdef USE_CURL
_net = new Net(_vm);
+ _vm->VAR(_vm->VAR_NETWORK_AVAILABLE) = 1;
+#else
+ _vm->VAR(_vm->VAR_NETWORK_AVAILABLE) = 0;
#endif
}
Moonbase::~Moonbase() {
delete _ai;
-#ifdef USE_SDL_NET
+#ifdef USE_CURL
delete _net;
#endif
}
diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index fe2fae1..61ee2a9 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -278,4 +278,99 @@ void Net::getProviderName(int providerIndex, char *buffer, int length) {
warning("STUB: Net::getProviderName(%d, \"%s\", %d)", providerIndex, buffer, length); // PN_GetProviderName
}
+int Net::getMessageCount() {
+ return 0; // FIXME
+}
+
+void Net::remoteReceiveData() {
+ // FIXME. Get data into _packbuffer
+ uint type = READ_UINT32(_packbuffer);
+ uint len = READ_UINT32(_packbuffer + 4);
+ uint timestamp = READ_UINT32(_packbuffer + 8);
+ byte *p;
+ uint32 *params;
+
+ switch (type) {
+ case PACKETTYPE_REMOTESTARTSCRIPT:
+ {
+ p = _packbuffer + 12;
+ params = (uint32 *)_tmpbuffer;
+
+ for (int i = 0; i < 24; i++) {
+ *params = READ_UINT32(p);
+ params++;
+ p += 4;
+ }
+
+ _vm->runScript(_vm->VAR(_vm->VAR_REMOTE_START_SCRIPT), 1, 0, (int *)_tmpbuffer);
+ }
+ break;
+
+ case PACKETTYPE_REMOTESTARTSCRIPTRETURN:
+ {
+ p = _packbuffer + 12;
+ params = (uint32 *)_tmpbuffer;
+
+ for (int i = 0; i < 24; i++) {
+ *params = READ_UINT32(p);
+ params++;
+ p += 4;
+ }
+
+ _vm->runScript(_vm->VAR(_vm->VAR_REMOTE_START_SCRIPT), 1, 0, (int *)_tmpbuffer);
+ int res = _vm->pop();
+
+ WRITE_UINT32(_tmpbuffer, res);
+
+ // FIXME
+ remoteSendData(PN_SENDTYPE_INDIVIDUAL, 0 /* gdefMultiPlay.from */, PACKETTYPE_REMOTESTARTSCRIPTRESULT, _tmpbuffer, 4, 0);
+ }
+ break;
+
+ case PACKETTYPE_REMOTESTARTSCRIPTRESULT:
+ //
+ // Ignore it.
+ //
+
+ break;
+
+ case PACKETTYPE_REMOTESENDSCUMMARRAY:
+ {
+ int newArray;
+
+ // Assume that the packet data contains a "SCUMM PACKAGE"
+ // and unpack it into an scumm array :-)
+
+ newArray = _vm->findFreeArrayId();
+ unpackageArray(newArray, _packbuffer + 12, len);
+ memset(_tmpbuffer, 0, 25 * 4);
+ WRITE_UINT32(_tmpbuffer, newArray);
+
+ // Quick start the script (1st param is the new array)
+ _vm->runScript(_vm->VAR(_vm->VAR_NETWORK_RECEIVE_ARRAY_SCRIPT), 1, 0, (int *)_tmpbuffer);
+ }
+ break;
+
+ default:
+ warning("Moonbase: Received unknown network command %d", type);
+ }
+}
+
+void Net::unpackageArray(int arrayId, byte *data, int len) {
+ warning("STUB: unpackageArray");
+}
+
+
+void Net::doNetworkOnceAFrame(int msecs) {
+ int tickCount = g_system->getMillis() + msecs;
+
+ while (getMessageCount()) {
+ remoteReceiveData();
+
+ if (tickCount >= g_system->getMillis()) {
+ break;
+ }
+ }
+}
+
} // End of namespace Scumm
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index 00ec6ca..1d6af49 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -62,8 +62,12 @@ public:
int remoteSendData(int typeOfSend, int sendTypeParam, int type, byte *data, int len, int defaultRes);
void remoteSendArray(int typeOfSend, int sendTypeParam, int priority, int arrayIndex);
int remoteStartScriptFunction(int typeOfSend, int sendTypeParam, int priority, int defaultReturnValue, int argsCount, int32 *args);
+ void doNetworkOnceAFrame(int msecs);
+ void unpackageArray(int arrayId, byte *data, int len);
private:
+ int getMessageCount();
+ void remoteReceiveData();
public:
//getters
diff --git a/engines/scumm/module.mk b/engines/scumm/module.mk
index 799176f..c9319e8 100644
--- a/engines/scumm/module.mk
+++ b/engines/scumm/module.mk
@@ -154,7 +154,7 @@ MODULE_OBJS += \
he/moonbase/moonbase.o \
he/moonbase/moonbase_fow.o
-ifdef USE_SDL_NET
+ifdef USE_LIBCURL
MODULE_OBJS += \
he/moonbase/net_main.o
endif
diff --git a/engines/scumm/vars.cpp b/engines/scumm/vars.cpp
index e5ba4a6..4f00e71 100644
--- a/engines/scumm/vars.cpp
+++ b/engines/scumm/vars.cpp
@@ -346,6 +346,9 @@ void ScummEngine_v100he::setupScummVars() {
ScummEngine_v90he::setupScummVars();
if (_game.id == GID_MOONBASE) {
+ VAR_REMOTE_START_SCRIPT = 98;
+ VAR_NETWORK_AVAILABLE = 100;
+ VAR_NETWORK_RECEIVE_ARRAY_SCRIPT = 101;
VAR_U32_USER_VAR_A = 108;
VAR_U32_USER_VAR_B = 109;
VAR_U32_USER_VAR_C = 110;
More information about the Scummvm-git-logs
mailing list