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