1 /* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *
21 */
22
23 #include "scumm/he/intern_he.h"
24 #include "scumm/he/logic_he.h"
25 #include "scumm/he/moonbase/moonbase.h"
26 #include "scumm/he/moonbase/ai_main.h"
27 #ifdef USE_SDL_NET
28 #include "scumm/he/moonbase/net_main.h"
29 #include "scumm/he/moonbase/net_defines.h"
30 #endif
31
32 namespace Scumm {
33
34 /**
35 * Logic code for:
36 * Moonbase Commander
37 */
38 class LogicHEmoonbase : public LogicHE {
39 public:
LogicHEmoonbase(ScummEngine_v100he * vm)40 LogicHEmoonbase(ScummEngine_v100he *vm) : LogicHE(vm) { _vm1 = vm; }
41
42 int versionID();
43
44 int32 dispatch(int op, int numArgs, int32 *args);
45
46 private:
47 void op_create_multi_state_wiz(int op, int numArgs, int32 *args);
48 void op_load_multi_channel_wiz(int op, int numArgs, int32 *args);
49 void op_wiz_from_multi_channel_wiz(int op, int numArgs, int32 *args);
50 void op_dos_command(int op, int numArgs, int32 *args);
51 void op_set_fow_sentinel(int32 *args);
52 void op_set_fow_information(int op, int numArgs, int32 *args);
53 int op_set_fow_image(int op, int numArgs, int32 *args);
54
55 void op_ai_test_kludge(int op, int numArgs, int32 *args);
56 int op_ai_master_control_program(int op, int numArgs, int32 *args);
57 void op_ai_reset(int op, int numArgs, int32 *args);
58 void op_ai_set_type(int op, int numArgs, int32 *args);
59 void op_ai_clean_up(int op, int numArgs, int32 *args);
60
61 #ifdef USE_SDL_NET
62 void op_net_remote_start_script(int op, int numArgs, int32 *args);
63 void op_net_remote_send_array(int op, int numArgs, int32 *args);
64 int op_net_remote_start_function(int op, int numArgs, int32 *args);
65 int op_net_do_init_all(int op, int numArgs, int32 *args);
66 int op_net_do_init_provider(int op, int numArgs, int32 *args);
67 int op_net_do_init_session(int op, int numArgs, int32 *args);
68 int op_net_do_init_user(int op, int numArgs, int32 *args);
69 int op_net_query_providers(int op, int numArgs, int32 *args);
70 int op_net_get_provider_name(int op, int numArgs, int32 *args);
71 int op_net_set_provider(int op, int numArgs, int32 *args);
72 int op_net_close_provider(int op, int numArgs, int32 *args);
73 int op_net_start_query_sessions(int op, int numArgs, int32 *args);
74 int op_net_update_query_sessions(int op, int numArgs, int32 *args);
75 int op_net_stop_query_sessions(int op, int numArgs, int32 *args);
76 int op_net_query_sessions(int op, int numArgs, int32 *args);
77 int op_net_get_session_name(int op, int numArgs, int32 *args);
78 int op_net_get_session_player_count(int op, int numArgs, int32 *args);
79 int op_net_destroy_player(int op, int numArgs, int32 *args);
80 int op_net_get_player_long_name(int op, int numArgs, int32 *args);
81 int op_net_get_player_short_name(int op, int numArgs, int32 *args);
82 int op_net_create_session(int op, int numArgs, int32 *args);
83 int op_net_join_session(int op, int numArgs, int32 *args);
84 int op_net_end_session(int op, int numArgs, int32 *args);
85 int op_net_disable_session_player_join(int op, int numArgs, int32 *args);
86 int op_net_enable_session_player_join(int op, int numArgs, int32 *args);
87 int op_net_set_ai_player_count(int op, int numArgs, int32 *args);
88 int op_net_add_user(int op, int numArgs, int32 *args);
89 int op_net_remove_user(int op, int numArgs, int32 *args);
90 int op_net_who_sent_this(int op, int numArgs, int32 *args);
91 int op_net_who_am_i(int op, int numArgs, int32 *args);
92 int op_net_set_provider_by_name(int op, int numArgs, int32 *args);
93 void op_net_set_fake_latency(int op, int numArgs, int32 *args);
94 int op_net_get_host_name(int op, int numArgs, int32 *args);
95 int op_net_get_ip_from_name(int op, int numArgs, int32 *args);
96 int op_net_host_tcpip_game(int op, int numArgs, int32 *args);
97 int op_net_join_tcpip_game(int op, int numArgs, int32 *args);
98 #endif
99
100 private:
101 ScummEngine_v100he *_vm1;
102 };
103
versionID()104 int LogicHEmoonbase::versionID() {
105 if (_vm->_game.features & GF_DEMO)
106 return -100;
107 else if (strcmp(_vm->_game.variant, "1.1") == 0)
108 return 110;
109 else
110 return 100;
111 }
112
113 #define OP_CREATE_MULTI_STATE_WIZ 100
114 #define OP_LOAD_MULTI_CHANNEL_WIZ 101
115 #define OP_WIZ_FROM_MULTI_CHANNEL_WIZ 102
116 #define OP_DOS_COMMAND 103
117 #define OP_SET_FOW_SENTINEL 104
118 #define OP_SET_FOW_INFORMATION 105
119 #define OP_SET_FOW_IMAGE 106
120
121 #define OP_AI_TEST_KLUDGE 10000
122 #define OP_AI_MASTER_CONTROL_PROGRAM 10001
123 #define OP_AI_RESET 10002
124 #define OP_AI_SET_TYPE 10003
125 #define OP_AI_CLEAN_UP 10004
126
127 #define OP_NET_REMOTE_START_SCRIPT 1492
128 #define OP_NET_DO_INIT_ALL 1493
129 #define OP_NET_DO_INIT_PROVIDER 1494
130 #define OP_NET_DO_INIT_SESSION 1495
131 #define OP_NET_DO_INIT_USER 1496
132 #define OP_NET_QUERY_PROVIDERS 1497
133 #define OP_NET_GET_PROVIDER_NAME 1498
134 #define OP_NET_SET_PROVIDER 1499
135 #define OP_NET_CLOSE_PROVIDER 1500
136 #define OP_NET_QUERY_SESSIONS 1501
137 #define OP_NET_GET_SESSION_NAME 1502
138 #define OP_NET_CREATE_SESSION 1503
139 #define OP_NET_JOIN_SESSION 1504
140 #define OP_NET_END_SESSION 1505
141 #define OP_NET_ADD_USER 1506
142 #define OP_NET_REMOVE_USER 1507
143 #define OP_NET_WHO_SENT_THIS 1508
144 #define OP_NET_REMOTE_SEND_ARRAY 1509
145 #define OP_NET_WHO_AM_I 1510
146 #define OP_NET_REMOTE_START_FUNCTION 1511
147 #define OP_NET_GET_PLAYER_LONG_NAME 1512
148 #define OP_NET_GET_PLAYER_SHORT_NAME 1513
149 #define OP_NET_SET_PROVIDER_BY_NAME 1516
150 #define OP_NET_HOST_TCPIP_GAME 1517
151 #define OP_NET_JOIN_TCPIP_GAME 1518
152 #define OP_NET_SET_FAKE_LAG 1555
153 #define OP_NET_SET_FAKE_LATENCY 1555 /* SET_FAKE_LAG is a valid alias for backwards compatibility */
154 #define OP_NET_GET_HOST_NAME 1556
155 #define OP_NET_GET_IP_FROM_NAME 1557
156 #define OP_NET_GET_SESSION_PLAYER_COUNT 1558
157 #define OP_NET_DISABLE_SESSION_PLAYER_JOIN 1559
158 #define OP_NET_START_QUERY_SESSIONS 1560
159 #define OP_NET_UPDATE_QUERY_SESSIONS 1561
160 #define OP_NET_STOP_QUERY_SESSIONS 1562
161 #define OP_NET_DESTROY_PLAYER 1563
162 #define OP_NET_ENABLE_SESSION_PLAYER_JOIN 1564
163 #define OP_NET_SET_AI_PLAYER_COUNT 1565
164
165
dispatch(int op,int numArgs,int32 * args)166 int32 LogicHEmoonbase::dispatch(int op, int numArgs, int32 *args) {
167 switch (op) {
168 case OP_CREATE_MULTI_STATE_WIZ:
169 op_create_multi_state_wiz(op, numArgs, args);
170 break;
171 case OP_LOAD_MULTI_CHANNEL_WIZ:
172 op_load_multi_channel_wiz(op, numArgs, args);
173 break;
174 case OP_WIZ_FROM_MULTI_CHANNEL_WIZ:
175 op_wiz_from_multi_channel_wiz(op, numArgs, args);
176 break;
177 case OP_DOS_COMMAND:
178 op_dos_command(op, numArgs, args);
179 break;
180 case OP_SET_FOW_SENTINEL:
181 op_set_fow_sentinel(args);
182 break;
183 case OP_SET_FOW_INFORMATION:
184 op_set_fow_information(op, numArgs, args);
185 break;
186 case OP_SET_FOW_IMAGE:
187 return op_set_fow_image(op, numArgs, args);
188
189 case OP_AI_TEST_KLUDGE:
190 op_ai_test_kludge(op, numArgs, args);
191 break;
192 case OP_AI_MASTER_CONTROL_PROGRAM:
193 return op_ai_master_control_program(op, numArgs, args);
194 case OP_AI_RESET:
195 op_ai_reset(op, numArgs, args);
196 break;
197 case OP_AI_SET_TYPE:
198 op_ai_set_type(op, numArgs, args);
199 break;
200 case OP_AI_CLEAN_UP:
201 op_ai_clean_up(op, numArgs, args);
202 break;
203
204 #ifdef USE_SDL_NET
205 case OP_NET_REMOTE_START_SCRIPT:
206 op_net_remote_start_script(op, numArgs, args);
207 break;
208 case OP_NET_REMOTE_SEND_ARRAY:
209 op_net_remote_send_array(op, numArgs, args);
210 break;
211 case OP_NET_REMOTE_START_FUNCTION:
212 return op_net_remote_start_function(op, numArgs, args);
213 case OP_NET_DO_INIT_ALL:
214 return op_net_do_init_all(op, numArgs, args);
215 case OP_NET_DO_INIT_PROVIDER:
216 return op_net_do_init_provider(op, numArgs, args);
217 case OP_NET_DO_INIT_SESSION:
218 return op_net_do_init_session(op, numArgs, args);
219 case OP_NET_DO_INIT_USER:
220 return op_net_do_init_user(op, numArgs, args);
221 case OP_NET_QUERY_PROVIDERS:
222 return op_net_query_providers(op, numArgs, args);
223 case OP_NET_GET_PROVIDER_NAME:
224 return op_net_get_provider_name(op, numArgs, args);
225 case OP_NET_SET_PROVIDER:
226 return op_net_set_provider(op, numArgs, args);
227 case OP_NET_CLOSE_PROVIDER:
228 return op_net_close_provider(op, numArgs, args);
229 case OP_NET_START_QUERY_SESSIONS:
230 return op_net_start_query_sessions(op, numArgs, args);
231 case OP_NET_UPDATE_QUERY_SESSIONS:
232 return op_net_update_query_sessions(op, numArgs, args);
233 case OP_NET_STOP_QUERY_SESSIONS:
234 return op_net_stop_query_sessions(op, numArgs, args);
235 case OP_NET_QUERY_SESSIONS:
236 return op_net_query_sessions(op, numArgs, args);
237 case OP_NET_GET_SESSION_NAME:
238 return op_net_get_session_name(op, numArgs, args);
239 case OP_NET_GET_SESSION_PLAYER_COUNT:
240 return op_net_get_session_player_count(op, numArgs, args);
241 case OP_NET_DESTROY_PLAYER:
242 return op_net_destroy_player(op, numArgs, args);
243 #if 1 // 12/2/99 BPT
244 case OP_NET_GET_PLAYER_LONG_NAME:
245 return op_net_get_player_long_name(op, numArgs, args);
246 case OP_NET_GET_PLAYER_SHORT_NAME:
247 return op_net_get_player_short_name(op, numArgs, args);
248 #endif
249 case OP_NET_CREATE_SESSION:
250 return op_net_create_session(op, numArgs, args);
251 case OP_NET_JOIN_SESSION:
252 return op_net_join_session(op, numArgs, args);
253 case OP_NET_END_SESSION:
254 return op_net_end_session(op, numArgs, args);
255 case OP_NET_DISABLE_SESSION_PLAYER_JOIN:
256 return op_net_disable_session_player_join(op, numArgs, args);
257 case OP_NET_ENABLE_SESSION_PLAYER_JOIN:
258 return op_net_enable_session_player_join(op, numArgs, args);
259 case OP_NET_SET_AI_PLAYER_COUNT:
260 return op_net_set_ai_player_count(op, numArgs, args);
261 case OP_NET_ADD_USER:
262 return op_net_add_user(op, numArgs, args);
263 case OP_NET_REMOVE_USER:
264 return op_net_remove_user(op, numArgs, args);
265 case OP_NET_WHO_SENT_THIS:
266 return op_net_who_sent_this(op, numArgs, args);
267 case OP_NET_WHO_AM_I:
268 return op_net_who_am_i(op, numArgs, args);
269 case OP_NET_SET_PROVIDER_BY_NAME:
270 return op_net_set_provider_by_name(op, numArgs, args);
271 case OP_NET_SET_FAKE_LATENCY: // SET_FAKE_LAG is a valid alias for backwards compatibility
272 op_net_set_fake_latency(op, numArgs, args);
273 break;
274 case OP_NET_GET_HOST_NAME:
275 return op_net_get_host_name(op, numArgs, args);
276 case OP_NET_GET_IP_FROM_NAME:
277 return op_net_get_ip_from_name(op, numArgs, args);
278 case OP_NET_HOST_TCPIP_GAME:
279 return op_net_host_tcpip_game(op, numArgs, args);
280 case OP_NET_JOIN_TCPIP_GAME:
281 return op_net_join_tcpip_game(op, numArgs, args);
282 #endif
283
284 default:
285 LogicHE::dispatch(op, numArgs, args);
286 }
287
288 return 0;
289 }
290
op_create_multi_state_wiz(int op,int numArgs,int32 * args)291 void LogicHEmoonbase::op_create_multi_state_wiz(int op, int numArgs, int32 *args) {
292 warning("STUB: op_create_multi_state_wiz()");
293 LogicHE::dispatch(op, numArgs, args);
294 }
295
op_load_multi_channel_wiz(int op,int numArgs,int32 * args)296 void LogicHEmoonbase::op_load_multi_channel_wiz(int op, int numArgs, int32 *args) {
297 warning("STUB: op_load_multi_channel_wiz()");
298 LogicHE::dispatch(op, numArgs, args);
299 }
300
op_wiz_from_multi_channel_wiz(int op,int numArgs,int32 * args)301 void LogicHEmoonbase::op_wiz_from_multi_channel_wiz(int op, int numArgs, int32 *args) {
302 warning("STUB: op_wiz_from_multi_channel_wiz()");
303 LogicHE::dispatch(op, numArgs, args);
304 }
305
op_dos_command(int op,int numArgs,int32 * args)306 void LogicHEmoonbase::op_dos_command(int op, int numArgs, int32 *args) {
307 warning("STUB: op_dos_command()");
308 LogicHE::dispatch(op, numArgs, args);
309 }
310
op_set_fow_sentinel(int32 * args)311 void LogicHEmoonbase::op_set_fow_sentinel(int32 *args) {
312 debug(2, "op_set_fow_sentinel(%d, %d, %d)", args[0], args[1], args[2]);
313
314 _vm1->_moonbase->_fowSentinelImage = args[0];
315 _vm1->_moonbase->_fowSentinelState = args[1];
316 _vm1->_moonbase->_fowSentinelConditionBits = args[2];
317 }
318
op_set_fow_information(int op,int numArgs,int32 * args)319 void LogicHEmoonbase::op_set_fow_information(int op, int numArgs, int32 *args) {
320 Common::String str;
321
322 str = Common::String::format("op_set_fow_information(%d", args[0]);
323 for (int i = 1; i < numArgs; i++) {
324 str += Common::String::format(", %d", args[i]);
325 }
326 str += ")";
327
328 debug(2, "%s", str.c_str());
329
330 _vm1->_moonbase->setFOWInfo(
331 args[0], // array
332 args[1], // array down dimension
333 args[2], // array across dimension
334 args[3], // logical view X coordinate
335 args[4], // logical view Y coordinate
336 args[5], // screen draw clip rect x1
337 args[6], // screen draw clip rect y1
338 args[7], // screen draw clip rect x2
339 args[8], // screen draw clip rect y2
340 args[9], // techinque
341 args[10] // frame
342 );
343 }
344
op_set_fow_image(int op,int numArgs,int32 * args)345 int LogicHEmoonbase::op_set_fow_image(int op, int numArgs, int32 *args) {
346 debug(2, "op_set_fow_image(%d)", args[0]);
347 return _vm1->_moonbase->setFOWImage(args[0]) ? 1 : 0;
348 }
349
op_ai_test_kludge(int op,int numArgs,int32 * args)350 void LogicHEmoonbase::op_ai_test_kludge(int op, int numArgs, int32 *args) {
351 warning("STUB: op_ai_test_kludge()");
352 LogicHE::dispatch(op, numArgs, args);
353 }
354
op_ai_master_control_program(int op,int numArgs,int32 * args)355 int LogicHEmoonbase::op_ai_master_control_program(int op, int numArgs, int32 *args) {
356 warning("op_ai_master_control_program()");
357 return _vm1->_moonbase->_ai->masterControlProgram(numArgs, args);
358 }
359
op_ai_reset(int op,int numArgs,int32 * args)360 void LogicHEmoonbase::op_ai_reset(int op, int numArgs, int32 *args) {
361 warning("op_ai_reset())");
362 _vm1->_moonbase->_ai->resetAI();
363 }
364
op_ai_set_type(int op,int numArgs,int32 * args)365 void LogicHEmoonbase::op_ai_set_type(int op, int numArgs, int32 *args) {
366 warning("op_ai_set_type()");
367 _vm1->_moonbase->_ai->setAIType(numArgs, args);
368 }
369
op_ai_clean_up(int op,int numArgs,int32 * args)370 void LogicHEmoonbase::op_ai_clean_up(int op, int numArgs, int32 *args) {
371 warning("op_ai_clean_up()");
372 _vm1->_moonbase->_ai->cleanUpAI();
373 }
374
375 #ifdef USE_SDL_NET
op_net_remote_start_script(int op,int numArgs,int32 * args)376 void LogicHEmoonbase::op_net_remote_start_script(int op, int numArgs, int32 *args) {
377 _vm1->_moonbase->_net->remoteStartScript(args[0], args[1], args[2], numArgs - 3, &args[3]);
378 }
379
op_net_remote_send_array(int op,int numArgs,int32 * args)380 void LogicHEmoonbase::op_net_remote_send_array(int op, int numArgs, int32 *args) {
381 _vm1->_moonbase->_net->remoteSendArray(args[0], args[1], args[2], args[3]);
382 }
383
op_net_remote_start_function(int op,int numArgs,int32 * args)384 int LogicHEmoonbase::op_net_remote_start_function(int op, int numArgs, int32 *args) {
385 return _vm1->_moonbase->_net->remoteStartScriptFunction(args[0], args[1], args[2], args[3], numArgs - 4, &args[4]);
386 }
387
op_net_do_init_all(int op,int numArgs,int32 * args)388 int LogicHEmoonbase::op_net_do_init_all(int op, int numArgs, int32 *args) {
389 return _vm1->_moonbase->_net->initAll();
390 }
391
op_net_do_init_provider(int op,int numArgs,int32 * args)392 int LogicHEmoonbase::op_net_do_init_provider(int op, int numArgs, int32 *args) {
393 return _vm1->_moonbase->_net->initProvider();
394 }
395
op_net_do_init_session(int op,int numArgs,int32 * args)396 int LogicHEmoonbase::op_net_do_init_session(int op, int numArgs, int32 *args) {
397 return _vm1->_moonbase->_net->initSession();
398 }
399
op_net_do_init_user(int op,int numArgs,int32 * args)400 int LogicHEmoonbase::op_net_do_init_user(int op, int numArgs, int32 *args) {
401 return _vm1->_moonbase->_net->initUser();
402 }
403
op_net_query_providers(int op,int numArgs,int32 * args)404 int LogicHEmoonbase::op_net_query_providers(int op, int numArgs, int32 *args) {
405 return _vm1->_moonbase->_net->queryProviders();
406 }
407
op_net_get_provider_name(int op,int numArgs,int32 * args)408 int LogicHEmoonbase::op_net_get_provider_name(int op, int numArgs, int32 *args) {
409 char name[MAX_PROVIDER_NAME];
410 _vm1->_moonbase->_net->getProviderName(args[0] - 1, name, sizeof(name));
411 return _vm1->setupStringArrayFromString(name);
412 }
413
op_net_set_provider(int op,int numArgs,int32 * args)414 int LogicHEmoonbase::op_net_set_provider(int op, int numArgs, int32 *args) {
415 return _vm1->_moonbase->_net->setProvider(args[0] - 1);
416 }
417
op_net_close_provider(int op,int numArgs,int32 * args)418 int LogicHEmoonbase::op_net_close_provider(int op, int numArgs, int32 *args) {
419 return _vm1->_moonbase->_net->closeProvider();
420 }
421
op_net_start_query_sessions(int op,int numArgs,int32 * args)422 int LogicHEmoonbase::op_net_start_query_sessions(int op, int numArgs, int32 *args) {
423 return _vm1->_moonbase->_net->startQuerySessions();
424 }
425
op_net_update_query_sessions(int op,int numArgs,int32 * args)426 int LogicHEmoonbase::op_net_update_query_sessions(int op, int numArgs, int32 *args) {
427 return _vm1->_moonbase->_net->updateQuerySessions();
428 }
429
op_net_stop_query_sessions(int op,int numArgs,int32 * args)430 int LogicHEmoonbase::op_net_stop_query_sessions(int op, int numArgs, int32 *args) {
431 _vm1->_moonbase->_net->stopQuerySessions();
432 return 1;
433 }
434
op_net_query_sessions(int op,int numArgs,int32 * args)435 int LogicHEmoonbase::op_net_query_sessions(int op, int numArgs, int32 *args) {
436 return _vm1->_moonbase->_net->querySessions();
437 }
438
op_net_get_session_name(int op,int numArgs,int32 * args)439 int LogicHEmoonbase::op_net_get_session_name(int op, int numArgs, int32 *args) {
440 char name[MAX_PROVIDER_NAME];
441 _vm1->_moonbase->_net->getSessionName(args[0] - 1, name, sizeof(name));
442 return _vm1->setupStringArrayFromString(name);
443 }
444
op_net_get_session_player_count(int op,int numArgs,int32 * args)445 int LogicHEmoonbase::op_net_get_session_player_count(int op, int numArgs, int32 *args) {
446 return _vm1->_moonbase->_net->getSessionPlayerCount(args[0] - 1);
447 }
448
op_net_destroy_player(int op,int numArgs,int32 * args)449 int LogicHEmoonbase::op_net_destroy_player(int op, int numArgs, int32 *args) {
450 return _vm1->_moonbase->_net->destroyPlayer(args[0]);
451 }
452
op_net_get_player_long_name(int op,int numArgs,int32 * args)453 int LogicHEmoonbase::op_net_get_player_long_name(int op, int numArgs, int32 *args) {
454 return _vm1->setupStringArrayFromString("long name"); // TODO: gdefMultiPlay.playername1
455 }
456
op_net_get_player_short_name(int op,int numArgs,int32 * args)457 int LogicHEmoonbase::op_net_get_player_short_name(int op, int numArgs, int32 *args) {
458 return _vm1->setupStringArrayFromString("short"); // TODO: gdefMultiPlay.playername2
459 }
460
op_net_create_session(int op,int numArgs,int32 * args)461 int LogicHEmoonbase::op_net_create_session(int op, int numArgs, int32 *args) {
462 char name[MAX_SESSION_NAME];
463 _vm1->getStringFromArray(args[0], name, sizeof(name));
464 return _vm1->_moonbase->_net->createSession(name);
465 }
466
op_net_join_session(int op,int numArgs,int32 * args)467 int LogicHEmoonbase::op_net_join_session(int op, int numArgs, int32 *args) {
468 return _vm1->_moonbase->_net->joinSession(args[0] - 1);
469 }
470
op_net_end_session(int op,int numArgs,int32 * args)471 int LogicHEmoonbase::op_net_end_session(int op, int numArgs, int32 *args) {
472 return _vm1->_moonbase->_net->endSession();
473 }
474
op_net_disable_session_player_join(int op,int numArgs,int32 * args)475 int LogicHEmoonbase::op_net_disable_session_player_join(int op, int numArgs, int32 *args) {
476 _vm1->_moonbase->_net->disableSessionJoining();
477 return 1;
478 }
479
op_net_enable_session_player_join(int op,int numArgs,int32 * args)480 int LogicHEmoonbase::op_net_enable_session_player_join(int op, int numArgs, int32 *args) {
481 _vm1->_moonbase->_net->enableSessionJoining();
482 return 1;
483 }
484
op_net_set_ai_player_count(int op,int numArgs,int32 * args)485 int LogicHEmoonbase::op_net_set_ai_player_count(int op, int numArgs, int32 *args) {
486 _vm1->_moonbase->_net->setBotsCount(args[0]);
487 return 1;
488 }
489
op_net_add_user(int op,int numArgs,int32 * args)490 int LogicHEmoonbase::op_net_add_user(int op, int numArgs, int32 *args) {
491 char userName[MAX_PLAYER_NAME];
492 _vm1->getStringFromArray(args[0], userName, sizeof(userName));
493 return _vm1->_moonbase->_net->addUser(userName, userName);
494 }
495
op_net_remove_user(int op,int numArgs,int32 * args)496 int LogicHEmoonbase::op_net_remove_user(int op, int numArgs, int32 *args) {
497 return _vm1->_moonbase->_net->removeUser();
498 }
499
op_net_who_sent_this(int op,int numArgs,int32 * args)500 int LogicHEmoonbase::op_net_who_sent_this(int op, int numArgs, int32 *args) {
501 return _vm1->_moonbase->_net->whoSentThis();
502 }
503
op_net_who_am_i(int op,int numArgs,int32 * args)504 int LogicHEmoonbase::op_net_who_am_i(int op, int numArgs, int32 *args) {
505 return _vm1->_moonbase->_net->whoAmI();
506 }
507
op_net_set_provider_by_name(int op,int numArgs,int32 * args)508 int LogicHEmoonbase::op_net_set_provider_by_name(int op, int numArgs, int32 *args) {
509 // Parameter 1 is the provider name and
510 // Parameter 2 is the (optional) tcp/ip address
511 return _vm1->_moonbase->_net->setProviderByName(args[0], args[1]);
512 }
513
op_net_set_fake_latency(int op,int numArgs,int32 * args)514 void LogicHEmoonbase::op_net_set_fake_latency(int op, int numArgs, int32 *args) {
515 _vm1->_moonbase->_net->setFakeLatency(args[0]);
516 }
517
op_net_get_host_name(int op,int numArgs,int32 * args)518 int LogicHEmoonbase::op_net_get_host_name(int op, int numArgs, int32 *args) {
519 char name[MAX_HOSTNAME_SIZE];
520
521 if (_vm1->_moonbase->_net->getHostName(name, MAX_HOSTNAME_SIZE)) {
522 return _vm1->setupStringArrayFromString(name);
523 }
524
525 return 0;
526 }
527
op_net_get_ip_from_name(int op,int numArgs,int32 * args)528 int LogicHEmoonbase::op_net_get_ip_from_name(int op, int numArgs, int32 *args) {
529 char name[MAX_HOSTNAME_SIZE];
530 _vm1->getStringFromArray(args[0], name, sizeof(name));
531
532 char ip[MAX_IP_SIZE];
533
534 if (_vm1->_moonbase->_net->getIPfromName(ip, MAX_IP_SIZE, name)) {
535 return _vm1->setupStringArrayFromString(ip);
536 }
537
538 return 0;
539 }
540
op_net_host_tcpip_game(int op,int numArgs,int32 * args)541 int LogicHEmoonbase::op_net_host_tcpip_game(int op, int numArgs, int32 *args) {
542 char sessionName[MAX_SESSION_NAME];
543 char userName[MAX_PLAYER_NAME];
544
545 _vm1->getStringFromArray(args[0], sessionName, sizeof(sessionName));
546 _vm1->getStringFromArray(args[1], userName, sizeof(userName));
547
548 return _vm1->_moonbase->_net->hostGame(sessionName, userName);
549 }
550
op_net_join_tcpip_game(int op,int numArgs,int32 * args)551 int LogicHEmoonbase::op_net_join_tcpip_game(int op, int numArgs, int32 *args) {
552 char ip[MAX_IP_SIZE];
553 char userName[MAX_PLAYER_NAME];
554
555 _vm1->getStringFromArray(args[0], ip, sizeof(ip));
556 _vm1->getStringFromArray(args[1], userName, sizeof(userName));
557
558 return _vm1->_moonbase->_net->joinGame(ip, userName);
559 }
560 #endif
561
makeLogicHEmoonbase(ScummEngine_v100he * vm)562 LogicHE *makeLogicHEmoonbase(ScummEngine_v100he *vm) {
563 return new LogicHEmoonbase(vm);
564 }
565
566 } // End of namespace Scumm
567