aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/he/moonbase/net_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm/he/moonbase/net_main.cpp')
-rw-r--r--engines/scumm/he/moonbase/net_main.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index fe2fae1081..61ee2a967e 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