aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/he/logic/moonbase_logic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm/he/logic/moonbase_logic.cpp')
-rw-r--r--engines/scumm/he/logic/moonbase_logic.cpp99
1 files changed, 79 insertions, 20 deletions
diff --git a/engines/scumm/he/logic/moonbase_logic.cpp b/engines/scumm/he/logic/moonbase_logic.cpp
index 22b0b186e6..d5100cef71 100644
--- a/engines/scumm/he/logic/moonbase_logic.cpp
+++ b/engines/scumm/he/logic/moonbase_logic.cpp
@@ -22,6 +22,8 @@
#include "scumm/he/intern_he.h"
#include "scumm/he/logic_he.h"
+#include "scumm/he/moonbase/moonbase.h"
+#include "scumm/he/moonbase/ai_main.h"
namespace Scumm {
@@ -44,10 +46,10 @@ private:
void op_dos_command(int op, int numArgs, int32 *args);
void op_set_fow_sentinel(int32 *args);
void op_set_fow_information(int op, int numArgs, int32 *args);
- void op_set_fow_image(int op, int numArgs, int32 *args);
+ int op_set_fow_image(int op, int numArgs, int32 *args);
void op_ai_test_kludge(int op, int numArgs, int32 *args);
- void op_ai_master_control_program(int op, int numArgs, int32 *args);
+ int op_ai_master_control_program(int op, int numArgs, int32 *args);
void op_ai_reset(int op, int numArgs, int32 *args);
void op_ai_set_type(int op, int numArgs, int32 *args);
void op_ai_clean_up(int op, int numArgs, int32 *args);
@@ -76,6 +78,44 @@ int LogicHEmoonbase::versionID() {
#define OP_AI_SET_TYPE 10003
#define OP_AI_CLEAN_UP 10004
+#define OP_NET_REMOTE_START_SCRIPT 1492
+#define OP_NET_DO_INIT_ALL 1493
+#define OP_NET_DO_INIT_PROVIDER 1494
+#define OP_NET_DO_INIT_SESSION 1495
+#define OP_NET_DO_INIT_USER 1496
+#define OP_NET_QUERY_PROVIDERS 1497
+#define OP_NET_GET_PROVIDER_NAME 1498
+#define OP_NET_SET_PROVIDER 1499
+#define OP_NET_CLOSE_PROVIDER 1500
+#define OP_NET_QUERY_SESSIONS 1501
+#define OP_NET_GET_SESSION_NAME 1502
+#define OP_NET_CREATE_SESSION 1503
+#define OP_NET_JOIN_SESSION 1504
+#define OP_NET_END_SESSION 1505
+#define OP_NET_ADD_USER 1506
+#define OP_NET_REMOVE_USER 1507
+#define OP_NET_WHO_SENT_THIS 1508
+#define OP_NET_REMOTE_SEND_ARRAY 1509
+#define OP_NET_WHO_AM_I 1510
+#define OP_NET_REMOTE_START_FUNCTION 1511
+#define OP_NET_GET_PLAYER_LONG_NAME 1512
+#define OP_NET_GET_PLAYER_SHORT_NAME 1513
+#define OP_NET_SET_PROVIDER_BY_NAME 1516
+#define OP_NET_HOST_TCPIP_GAME 1517
+#define OP_NET_JOIN_TCPIP_GAME 1518
+#define OP_NET_SET_FAKE_LAG 1555
+#define OP_NET_GET_HOST_NAME 1556
+#define OP_NET_GET_IP_FROM_NAME 1557
+#define OP_NET_GET_SESSION_PLAYER_COUNT 1558
+#define OP_NET_DISABLE_SESSION_PLAYER_JOIN 1559
+#define OP_NET_START_QUERY_SESSIONS 1560
+#define OP_NET_UPDATE_QUERY_SESSIONS 1561
+#define OP_NET_STOP_QUERY_SESSIONS 1562
+#define OP_NET_DESTROY_PLAYER 1563
+#define OP_NET_ENABLE_SESSION_PLAYER_JOIN 1564
+#define OP_NET_SET_AI_PLAYER_COUNT 1565
+
+
int32 LogicHEmoonbase::dispatch(int op, int numArgs, int32 *args) {
switch (op) {
case OP_CREATE_MULTI_STATE_WIZ:
@@ -97,15 +137,13 @@ int32 LogicHEmoonbase::dispatch(int op, int numArgs, int32 *args) {
op_set_fow_information(op, numArgs, args);
break;
case OP_SET_FOW_IMAGE:
- op_set_fow_image(op, numArgs, args);
- break;
+ return op_set_fow_image(op, numArgs, args);
case OP_AI_TEST_KLUDGE:
op_ai_test_kludge(op, numArgs, args);
break;
case OP_AI_MASTER_CONTROL_PROGRAM:
- op_ai_master_control_program(op, numArgs, args);
- break;
+ return op_ai_master_control_program(op, numArgs, args);
case OP_AI_RESET:
op_ai_reset(op, numArgs, args);
break;
@@ -152,13 +190,34 @@ void LogicHEmoonbase::op_set_fow_sentinel(int32 *args) {
}
void LogicHEmoonbase::op_set_fow_information(int op, int numArgs, int32 *args) {
- warning("STUB: op_set_fow_information()");
- LogicHE::dispatch(op, numArgs, args);
+ Common::String str;
+
+ str = Common::String::format("op_set_fow_information(%d", args[0]);
+ for (int i = 1; i < numArgs; i++) {
+ str += Common::String::format(", %d", args[i]);
+ }
+ str += ")";
+
+ debug(2, "%s", str.c_str());
+
+ _vm->_moonbase->setFOWInfo(
+ args[0], // array
+ args[1], // array down dimension
+ args[2], // array across dimension
+ args[3], // logical view X coordinate
+ args[4], // logical view Y coordinate
+ args[5], // screen draw clip rect x1
+ args[6], // screen draw clip rect y1
+ args[7], // screen draw clip rect x2
+ args[8], // screen draw clip rect y2
+ args[9], // techinque
+ args[10] // frame
+ );
}
-void LogicHEmoonbase::op_set_fow_image(int op, int numArgs, int32 *args) {
- warning("STUB: op_set_fow_image()");
- LogicHE::dispatch(op, numArgs, args);
+int LogicHEmoonbase::op_set_fow_image(int op, int numArgs, int32 *args) {
+ debug(2, "op_set_fow_image(%d)", args[0]);
+ return _vm->_moonbase->setFOWImage(args[0]) ? 1 : 0;
}
void LogicHEmoonbase::op_ai_test_kludge(int op, int numArgs, int32 *args) {
@@ -166,24 +225,24 @@ void LogicHEmoonbase::op_ai_test_kludge(int op, int numArgs, int32 *args) {
LogicHE::dispatch(op, numArgs, args);
}
-void LogicHEmoonbase::op_ai_master_control_program(int op, int numArgs, int32 *args) {
- warning("STUB: op_ai_master_control_program()");
- LogicHE::dispatch(op, numArgs, args);
+int LogicHEmoonbase::op_ai_master_control_program(int op, int numArgs, int32 *args) {
+ warning("op_ai_master_control_program()");
+ return masterControlProgram(numArgs, args);
}
void LogicHEmoonbase::op_ai_reset(int op, int numArgs, int32 *args) {
- warning("STUB: op_ai_reset)");
- LogicHE::dispatch(op, numArgs, args);
+ warning("op_ai_reset())");
+ resetAI(_vm);
}
void LogicHEmoonbase::op_ai_set_type(int op, int numArgs, int32 *args) {
- warning("STUB: op_ai_set_type()");
- LogicHE::dispatch(op, numArgs, args);
+ warning("op_ai_set_type()");
+ setAIType(numArgs, args);
}
void LogicHEmoonbase::op_ai_clean_up(int op, int numArgs, int32 *args) {
- warning("STUB: op_ai_clean_up()");
- LogicHE::dispatch(op, numArgs, args);
+ warning("op_ai_clean_up()");
+ cleanUpAI();
}
LogicHE *makeLogicHEmoonbase(ScummEngine_v90he *vm) {