Initial commit
This commit is contained in:
197
engines/scumm/he/logic/baseball2001.cpp
Normal file
197
engines/scumm/he/logic/baseball2001.cpp
Normal file
@@ -0,0 +1,197 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "scumm/he/intern_he.h"
|
||||
#ifdef USE_ENET
|
||||
#include "scumm/he/net/net_main.h"
|
||||
#ifdef USE_BASIC_NET
|
||||
#include "scumm/he/net/net_lobby.h"
|
||||
#endif
|
||||
#include "scumm/he/net/net_defines.h"
|
||||
#endif
|
||||
|
||||
#include "scumm/he/logic_he.h"
|
||||
|
||||
// DirectPlay opcodes:
|
||||
#define OP_NET_REMOTE_START_SCRIPT 1492
|
||||
#define OP_NET_QUERY_PROVIDERS 1497
|
||||
#define OP_NET_CLOSE_PROVIDER 1500
|
||||
#define OP_NET_QUERY_SESSIONS 1501
|
||||
#define OP_NET_GET_SESSION_NAME 1502
|
||||
#define OP_NET_JOIN_SESSION 1504
|
||||
#define OP_NET_END_SESSION 1505
|
||||
#define OP_NET_ADD_USER 1506
|
||||
#define OP_NET_WHO_SENT_THIS 1508
|
||||
#define OP_NET_REMOTE_SEND_ARRAY 1509
|
||||
#define OP_NET_INIT 1513
|
||||
#define OP_NET_WHO_AM_I 1510
|
||||
#define OP_NET_INIT_LAN_GAME 1515
|
||||
#define OP_NET_SET_PROVIDER_BY_NAME 1516
|
||||
|
||||
// MAIA (Updater) opcodes.
|
||||
#define OP_NET_CHECK_INTERNET_STATUS 3001
|
||||
#define OP_NET_SHUT_DOWN_MAIA 3004
|
||||
|
||||
|
||||
namespace Scumm {
|
||||
|
||||
/**
|
||||
* Logic code for:
|
||||
* Backyard Baseball 2001
|
||||
*/
|
||||
class LogicHEbaseball2001 : public LogicHE {
|
||||
public:
|
||||
LogicHEbaseball2001(ScummEngine_v90he *vm) : LogicHE(vm) {}
|
||||
|
||||
int versionID() override;
|
||||
int startOfFrame() override;
|
||||
int32 dispatch(int op, int numArgs, int32 *args) override;
|
||||
|
||||
protected:
|
||||
#ifdef USE_ENET
|
||||
void netRemoteStartScript(int numArgs, int32 *args);
|
||||
void netRemoteSendArray(int32 *args);
|
||||
#endif
|
||||
};
|
||||
|
||||
int LogicHEbaseball2001::versionID() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LogicHEbaseball2001::startOfFrame() {
|
||||
#ifdef USE_ENET
|
||||
#ifdef USE_BASIC_NET
|
||||
_vm->_lobby->doNetworkOnceAFrame();
|
||||
#endif
|
||||
_vm->_net->doNetworkOnceAFrame(15);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32 LogicHEbaseball2001::dispatch(int op, int numArgs, int32 *args) {
|
||||
#if defined(USE_ENET) && defined(USE_BASIC_NET)
|
||||
if (op > 2120 && op < 3003 && op != OP_NET_CHECK_INTERNET_STATUS)
|
||||
return _vm->_lobby->dispatch(op, numArgs, args);
|
||||
#endif
|
||||
|
||||
int res = 0;
|
||||
|
||||
switch (op) {
|
||||
case OP_NET_INIT:
|
||||
// Initialize network system, this gets called at boot up and
|
||||
// sets VAR_NETWORK_AVAILABLE (100). We just return a 1 if
|
||||
// ENet is compiled.
|
||||
#ifdef USE_ENET
|
||||
res = 1;
|
||||
#endif
|
||||
break;
|
||||
|
||||
#ifdef USE_ENET
|
||||
case OP_NET_REMOTE_START_SCRIPT:
|
||||
netRemoteStartScript(numArgs, args);
|
||||
break;
|
||||
|
||||
case OP_NET_CLOSE_PROVIDER:
|
||||
_vm->_net->closeProvider();
|
||||
break;
|
||||
|
||||
case OP_NET_QUERY_SESSIONS:
|
||||
#ifdef USE_BASIC_NET
|
||||
if (_vm->_lobby->_sessionId) {
|
||||
_vm->_net->querySessions();
|
||||
// Only proceed if we've found the session
|
||||
// we're looking for.
|
||||
res = _vm->_net->ifSessionExist(_vm->_lobby->_sessionId);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case OP_NET_JOIN_SESSION:
|
||||
#ifdef USE_BASIC_NET
|
||||
if (_vm->_lobby->_sessionId) {
|
||||
res = _vm->_net->joinSessionById(_vm->_lobby->_sessionId);
|
||||
if (res) {
|
||||
_vm->_net->stopQuerySessions();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case OP_NET_END_SESSION:
|
||||
res = _vm->_net->endSession();
|
||||
break;
|
||||
|
||||
case OP_NET_ADD_USER:
|
||||
char userName[MAX_PLAYER_NAME];
|
||||
_vm->getStringFromArray(args[0], userName, sizeof(userName));
|
||||
res = _vm->_net->addUser(userName, userName);
|
||||
break;
|
||||
|
||||
case OP_NET_WHO_SENT_THIS:
|
||||
res = _vm->_net->whoSentThis();
|
||||
break;
|
||||
|
||||
case OP_NET_REMOTE_SEND_ARRAY:
|
||||
netRemoteSendArray(args);
|
||||
break;
|
||||
|
||||
case OP_NET_WHO_AM_I:
|
||||
res = _vm->_net->whoAmI();
|
||||
break;
|
||||
#endif // USE_ENET
|
||||
|
||||
case OP_NET_CHECK_INTERNET_STATUS:
|
||||
#if defined(USE_ENET) && defined(USE_BASIC_NET)
|
||||
// We can only use the lobby system if both
|
||||
// libcurl (for lobby communication) and
|
||||
// ENet (for gameplay communication) is enabled.
|
||||
|
||||
// TODO: Actually check if we're connected to the
|
||||
// Internet.
|
||||
res = 1;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case OP_NET_SHUT_DOWN_MAIA:
|
||||
break;
|
||||
|
||||
default:
|
||||
LogicHE::dispatch(op, numArgs, args);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#ifdef USE_ENET
|
||||
void LogicHEbaseball2001::netRemoteStartScript(int numArgs, int32 *args) {
|
||||
_vm->_net->remoteStartScript(args[0], args[1], args[2], numArgs - 3, &args[3]);
|
||||
}
|
||||
|
||||
void LogicHEbaseball2001::netRemoteSendArray(int32 *args) {
|
||||
_vm->_net->remoteSendArray(args[0], args[1], args[2], args[3]);
|
||||
}
|
||||
#endif // USE_ENET
|
||||
|
||||
LogicHE *makeLogicHEbaseball2001(ScummEngine_v90he *vm) {
|
||||
return new LogicHEbaseball2001(vm);
|
||||
}
|
||||
|
||||
} // End of namespace Scumm
|
||||
Reference in New Issue
Block a user