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