Initial Console integration

This commit is contained in:
Phillip Stephens 2018-01-15 08:00:20 -08:00
parent 7c699172cc
commit 030e80d843
14 changed files with 107 additions and 33 deletions

View File

@ -3,10 +3,16 @@
#include "../DNACommon.hpp" #include "../DNACommon.hpp"
namespace hecl
{
class CVarManager;
}
namespace DataSpec namespace DataSpec
{ {
struct ITweak : BigYAML struct ITweak : BigYAML
{ {
virtual void initCVars(hecl::CVarManager*) {}
}; };
} }

View File

@ -1,11 +1,11 @@
#ifndef __DNACOMMON_ITWEAKGUICOLORS_HPP__ #ifndef __DNACOMMON_ITWEAKGUICOLORS_HPP__
#define __DNACOMMON_ITWEAKGUICOLORS_HPP__ #define __DNACOMMON_ITWEAKGUICOLORS_HPP__
#include "../DNACommon.hpp" #include "ITweak.hpp"
namespace DataSpec namespace DataSpec
{ {
struct ITweakGuiColors : BigYAML struct ITweakGuiColors : ITweak
{ {
struct VisorEnergyInitColors struct VisorEnergyInitColors
{ {

View File

@ -60,7 +60,8 @@ set(DNAMP1_SOURCES
DeafBabe.cpp DeafBabe.cpp
Tweaks/CTweakPlayer.cpp Tweaks/CTweakPlayer.cpp
Tweaks/CTweakTargeting.cpp Tweaks/CTweakTargeting.cpp
Tweaks/CTweakBall.cpp) Tweaks/CTweakBall.cpp
Tweaks/CTweakGame.cpp)
dataspec_add_list(DNAMP1 DNAMP1_SOURCES) dataspec_add_list(DNAMP1 DNAMP1_SOURCES)
list(APPEND DNAMP1_SOURCES ${liblist}) list(APPEND DNAMP1_SOURCES ${liblist})

View File

@ -0,0 +1,11 @@
#include "CTweakGame.hpp"
#include "hecl/CVarManager.hpp"
namespace DataSpec::DNAMP1
{
void CTweakGame::initCVars(hecl::CVarManager* mgr)
{
mgr->findOrMakeCVar("tweaks.game.hardmodeDamageMult", "", x60_hardmodeDamageMult, hecl::CVar::EFlags::Game | hecl::CVar::Archive | hecl::CVar::Cheat);
mgr->findOrMakeCVar("tweaks.game.hardmodeWeaponMult", "", x64_hardmodeWeaponMult, hecl::CVar::EFlags::Game | hecl::CVar::Archive | hecl::CVar::Cheat);
}
}

View File

@ -55,6 +55,8 @@ struct CTweakGame final : ITweakGame
this->read(in); this->read(in);
x2b_splashScreensDisabled = false; x2b_splashScreensDisabled = false;
} }
void initCVars(hecl::CVarManager* mgr);
}; };
} }

View File

@ -29,7 +29,7 @@ namespace urde
void ViewManager::InitMP1(MP1::CMain& main) void ViewManager::InitMP1(MP1::CMain& main)
{ {
main.Init(m_fileStoreManager, m_mainWindow.get(), m_voiceEngine.get(), *m_amuseAllocWrapper); main.Init(m_fileStoreManager, &m_cvarManager, m_mainWindow.get(), m_voiceEngine.get(), *m_amuseAllocWrapper);
if (!m_noShaderWarmup) if (!m_noShaderWarmup)
main.WarmupShaders(); main.WarmupShaders();

View File

@ -13,8 +13,6 @@ enum class EArchMsgTarget
{ {
IOWinManager = 0, IOWinManager = 0,
Game = 1, Game = 1,
/* URDE targets, we start at 255 */
ArchitectureSupport = 255,
}; };
enum class EArchMsgType enum class EArchMsgType
@ -30,8 +28,6 @@ enum class EArchMsgType
QuitGameplay = 8, QuitGameplay = 8,
FrameBegin = 10, FrameBegin = 10,
FrameEnd = 11, FrameEnd = 11,
/* URDE messages, we start at 255 */
ApplicationExit = 255,
}; };
struct IArchMsgParm struct IArchMsgParm
@ -176,9 +172,9 @@ public:
std::make_shared<CArchMsgParmInt32>(a)); std::make_shared<CArchMsgParmInt32>(a));
} }
/* URDE Messages */ /* URDE Messages */
static CArchitectureMessage CreateApplicationExit(EArchMsgTarget target) static CArchitectureMessage CreateRemoveAllIOWins(EArchMsgTarget target)
{ {
return CArchitectureMessage(target, EArchMsgType::ApplicationExit, return CArchitectureMessage(target, EArchMsgType::RemoveAllIOWins,
std::make_shared<CArchMsgParmNull>()); std::make_shared<CArchMsgParmNull>());
} }
}; };

View File

@ -7,6 +7,11 @@
#include <amuse/amuse.hpp> #include <amuse/amuse.hpp>
#include "RetroTypes.hpp" #include "RetroTypes.hpp"
namespace hecl
{
class CVarManager;
}
namespace urde namespace urde
{ {
class CStopWatch; class CStopWatch;
@ -34,6 +39,7 @@ class IMain
public: public:
virtual ~IMain() = default; virtual ~IMain() = default;
virtual void Init(const hecl::Runtime::FileStoreManager& storeMgr, virtual void Init(const hecl::Runtime::FileStoreManager& storeMgr,
hecl::CVarManager* cvarMgr,
boo::IWindow* window, boo::IWindow* window,
boo::IAudioVoiceEngine* voiceEngine, boo::IAudioVoiceEngine* voiceEngine,
amuse::IBackendVoiceAllocator& backend)=0; amuse::IBackendVoiceAllocator& backend)=0;

View File

@ -36,7 +36,7 @@ static const SObjectTag& IDFromFactory(CResFactory& factory, const char* name)
return *tag; return *tag;
} }
void CTweaks::RegisterTweaks() void CTweaks::RegisterTweaks(hecl::CVarManager* cvarMgr)
{ {
std::experimental::optional<CMemoryInStream> strm; std::experimental::optional<CMemoryInStream> strm;
const SObjectTag* tag; const SObjectTag* tag;
@ -45,11 +45,13 @@ void CTweaks::RegisterTweaks()
tag = g_ResFactory->GetResourceIdByName("Particle"); tag = g_ResFactory->GetResourceIdByName("Particle");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakParticle = new DataSpec::DNAMP1::CTweakParticle(*strm); g_tweakParticle = new DataSpec::DNAMP1::CTweakParticle(*strm);
g_tweakParticle->initCVars(cvarMgr);
/* Player */ /* Player */
tag = g_ResFactory->GetResourceIdByName("Player"); tag = g_ResFactory->GetResourceIdByName("Player");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakPlayer = new DataSpec::DNAMP1::CTweakPlayer(*strm); g_tweakPlayer = new DataSpec::DNAMP1::CTweakPlayer(*strm);
g_tweakPlayer->initCVars(cvarMgr);
/* CameraBob */ /* CameraBob */
tag = g_ResFactory->GetResourceIdByName("CameraBob"); tag = g_ResFactory->GetResourceIdByName("CameraBob");
@ -60,37 +62,44 @@ void CTweaks::RegisterTweaks()
tag = g_ResFactory->GetResourceIdByName("Ball"); tag = g_ResFactory->GetResourceIdByName("Ball");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakBall = new DataSpec::DNAMP1::CTweakBall(*strm); g_tweakBall = new DataSpec::DNAMP1::CTweakBall(*strm);
g_tweakBall->initCVars(cvarMgr);
/* PlayerGun */ /* PlayerGun */
tag = g_ResFactory->GetResourceIdByName("PlayerGun"); tag = g_ResFactory->GetResourceIdByName("PlayerGun");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakPlayerGun = new DataSpec::DNAMP1::CTweakPlayerGun(*strm); g_tweakPlayerGun = new DataSpec::DNAMP1::CTweakPlayerGun(*strm);
g_tweakPlayerGun->initCVars(cvarMgr);
/* Targeting */ /* Targeting */
tag = g_ResFactory->GetResourceIdByName("Targeting"); tag = g_ResFactory->GetResourceIdByName("Targeting");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakTargeting = new DataSpec::DNAMP1::CTweakTargeting(*strm); g_tweakTargeting = new DataSpec::DNAMP1::CTweakTargeting(*strm);
g_tweakTargeting->initCVars(cvarMgr);
/* Game */ /* Game */
tag = g_ResFactory->GetResourceIdByName("Game"); tag = g_ResFactory->GetResourceIdByName("Game");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakGame = new DataSpec::DNAMP1::CTweakGame(*strm); g_tweakGame = new DataSpec::DNAMP1::CTweakGame(*strm);
g_tweakGame->initCVars(cvarMgr);
/* GuiColors */ /* GuiColors */
tag = g_ResFactory->GetResourceIdByName("GuiColors"); tag = g_ResFactory->GetResourceIdByName("GuiColors");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakGuiColors = new DataSpec::DNAMP1::CTweakGuiColors(*strm); g_tweakGuiColors = new DataSpec::DNAMP1::CTweakGuiColors(*strm);
g_tweakGuiColors->initCVars(cvarMgr);
/* AutoMapper */ /* AutoMapper */
tag = g_ResFactory->GetResourceIdByName("AutoMapper"); tag = g_ResFactory->GetResourceIdByName("AutoMapper");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakAutoMapper = new DataSpec::DNAMP1::CTweakAutoMapper(*strm); g_tweakAutoMapper = new DataSpec::DNAMP1::CTweakAutoMapper(*strm);
CMappableObject::ReadAutoMapperTweaks(*g_tweakAutoMapper); CMappableObject::ReadAutoMapperTweaks(*g_tweakAutoMapper);
g_tweakPlayerGun->initCVars(cvarMgr);
/* Gui */ /* Gui */
tag = g_ResFactory->GetResourceIdByName("Gui"); tag = g_ResFactory->GetResourceIdByName("Gui");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakGui = new DataSpec::DNAMP1::CTweakGui(*strm); g_tweakGui = new DataSpec::DNAMP1::CTweakGui(*strm);
g_tweakPlayerGun->initCVars(cvarMgr);
/* PlayerControls */ /* PlayerControls */
tag = g_ResFactory->GetResourceIdByName("PlayerControls"); tag = g_ResFactory->GetResourceIdByName("PlayerControls");
@ -108,9 +117,11 @@ void CTweaks::RegisterTweaks()
tag = g_ResFactory->GetResourceIdByName("SlideShow"); tag = g_ResFactory->GetResourceIdByName("SlideShow");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakSlideShow = new DataSpec::DNAMP1::CTweakSlideShow(*strm); g_tweakSlideShow = new DataSpec::DNAMP1::CTweakSlideShow(*strm);
g_tweakSlideShow->initCVars(cvarMgr);
} }
void CTweaks::RegisterResourceTweaks() void CTweaks::RegisterResourceTweaks(hecl::CVarManager* cvarMgr)
{ {
std::experimental::optional<CMemoryInStream> strm; std::experimental::optional<CMemoryInStream> strm;
@ -118,11 +129,13 @@ void CTweaks::RegisterResourceTweaks()
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakGunRes = new DataSpec::DNAMP1::CTweakGunRes(*strm); g_tweakGunRes = new DataSpec::DNAMP1::CTweakGunRes(*strm);
g_tweakGunRes->ResolveResources(*g_ResFactory); g_tweakGunRes->ResolveResources(*g_ResFactory);
g_tweakGunRes->initCVars(cvarMgr);
tag = g_ResFactory->GetResourceIdByName("PlayerRes"); tag = g_ResFactory->GetResourceIdByName("PlayerRes");
strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true); strm.emplace(g_ResFactory->LoadResourceSync(*tag).release(), g_ResFactory->ResourceSize(*tag), true);
g_tweakPlayerRes = new DataSpec::DNAMP1::CTweakPlayerRes(*strm); g_tweakPlayerRes = new DataSpec::DNAMP1::CTweakPlayerRes(*strm);
g_tweakPlayerRes->ResolveResources(*g_ResFactory); g_tweakPlayerRes->ResolveResources(*g_ResFactory);
g_tweakPlayerRes->initCVars(cvarMgr);
} }
} }

View File

@ -2,6 +2,10 @@
#define __URDE_CTWEAKS_HPP__ #define __URDE_CTWEAKS_HPP__
#include "RetroTypes.hpp" #include "RetroTypes.hpp"
namespace hecl
{
class CVarManager;
}
namespace urde namespace urde
{ {
@ -12,8 +16,8 @@ namespace MP1
class CTweaks class CTweaks
{ {
public: public:
void RegisterTweaks(); void RegisterTweaks(hecl::CVarManager* cvarMgr);
void RegisterResourceTweaks(); void RegisterResourceTweaks(hecl::CVarManager* cvarMgr);
}; };
} }

View File

@ -239,11 +239,31 @@ CGameArchitectureSupport::~CGameArchitectureSupport()
CStreamAudioManager::Shutdown(); CStreamAudioManager::Shutdown();
} }
void CGameArchitectureSupport::charKeyDown(unsigned long charCode, boo::EModifierKey mods, bool isRepeat)
{
x30_inputGenerator.charKeyDown(charCode, mods, isRepeat);
m_parent.m_console->handleCharCode(charCode, mods, isRepeat);
}
void CGameArchitectureSupport::specialKeyDown(boo::ESpecialKey key, boo::EModifierKey mods, bool isRepeat)
{
x30_inputGenerator.specialKeyDown(key, mods, isRepeat);
m_parent.m_console->handleSpecialKeyDown(key, mods, isRepeat);
}
void CGameArchitectureSupport::specialKeyUp(boo::ESpecialKey key, boo::EModifierKey mods)
{
x30_inputGenerator.specialKeyUp(key, mods);
m_parent.m_console->handleSpecialKeyUp(key, mods);
}
CMain::CMain(IFactory* resFactory, CSimplePool* resStore, CMain::CMain(IFactory* resFactory, CSimplePool* resStore,
boo::IGraphicsDataFactory* gfxFactory, boo::IGraphicsDataFactory* gfxFactory,
boo::IGraphicsCommandQueue* cmdQ, boo::IGraphicsCommandQueue* cmdQ,
const boo::ObjToken<boo::ITextureR>& spareTex) const boo::ObjToken<boo::ITextureR>& spareTex)
: m_booSetter(gfxFactory, cmdQ, spareTex), : m_booSetter(gfxFactory, cmdQ, spareTex),
x128_globalObjects(resFactory, resStore) x128_globalObjects(resFactory, resStore)
{ {
xe4_gameplayResult = EGameplayResult::Playing; xe4_gameplayResult = EGameplayResult::Playing;
@ -418,15 +438,19 @@ void CMain::StreamNewGameState(CBitStreamReader& r, u32 idx)
} }
void CMain::Init(const hecl::Runtime::FileStoreManager& storeMgr, void CMain::Init(const hecl::Runtime::FileStoreManager& storeMgr,
hecl::CVarManager* cvarMgr,
boo::IWindow* window, boo::IWindow* window,
boo::IAudioVoiceEngine* voiceEngine, boo::IAudioVoiceEngine* voiceEngine,
amuse::IBackendVoiceAllocator& backend) amuse::IBackendVoiceAllocator& backend)
{ {
m_mainWindow = window; m_mainWindow = window;
m_cvarMgr = cvarMgr;
m_console = std::make_unique<hecl::Console>(m_cvarMgr);
m_console->registerCommand("quit"sv, "Quits the game immediately"sv, ""sv, std::bind(&CMain::quit, this, std::placeholders::_1, std::placeholders::_2));
InitializeSubsystems(storeMgr); InitializeSubsystems(storeMgr);
x128_globalObjects.PostInitialize(); x128_globalObjects.PostInitialize();
x70_tweaks.RegisterTweaks(); x70_tweaks.RegisterTweaks(m_cvarMgr);
x70_tweaks.RegisterResourceTweaks(); x70_tweaks.RegisterResourceTweaks(m_cvarMgr);
AddWorldPaks(); AddWorldPaks();
FillInAssetIDs(); FillInAssetIDs();
x164_archSupport.reset(new CGameArchitectureSupport(*this, voiceEngine, backend)); x164_archSupport.reset(new CGameArchitectureSupport(*this, voiceEngine, backend));
@ -480,11 +504,16 @@ bool CMain::Proc()
if (m_warmupTags.size()) if (m_warmupTags.size())
return false; return false;
m_console->proc();
if (!m_console->isOpen())
{
CGBASupport::GlobalPoll(); CGBASupport::GlobalPoll();
x164_archSupport->UpdateTicks(); x164_archSupport->UpdateTicks();
x164_archSupport->Update(); x164_archSupport->Update();
CSfxManager::Update(1.f / 60.f); CSfxManager::Update(1.f / 60.f);
CStreamAudioManager::Update(1.f / 60.f); CStreamAudioManager::Update(1.f / 60.f);
}
if (x164_archSupport->GetIOWinManager().IsEmpty() || CheckReset()) if (x164_archSupport->GetIOWinManager().IsEmpty() || CheckReset())
{ {
CStreamAudioManager::StopAll(); CStreamAudioManager::StopAll();
@ -536,6 +565,7 @@ void CMain::Draw()
CGraphics::g_BooMainCommandQueue->clearTarget(true, true); CGraphics::g_BooMainCommandQueue->clearTarget(true, true);
x164_archSupport->Draw(); x164_archSupport->Draw();
m_console->draw(CGraphics::g_BooMainCommandQueue);
} }
void CMain::ShutdownSubsystems() void CMain::ShutdownSubsystems()

View File

@ -37,6 +37,7 @@
#include "DataSpec/DNAMP1/Tweaks/CTweakPlayer.hpp" #include "DataSpec/DNAMP1/Tweaks/CTweakPlayer.hpp"
#include "DataSpec/DNAMP1/Tweaks/CTweakGame.hpp" #include "DataSpec/DNAMP1/Tweaks/CTweakGame.hpp"
#include "World/CScriptMazeNode.hpp" #include "World/CScriptMazeNode.hpp"
#include "hecl/Console.hpp"
namespace urde namespace urde
{ {
@ -122,6 +123,7 @@ class CGameArchitectureSupport : public boo::IWindowCallback
class CGameArchitectureSupport class CGameArchitectureSupport
#endif #endif
{ {
friend class CMain;
CMain& m_parent; CMain& m_parent;
CArchitectureQueue x4_archQueue; CArchitectureQueue x4_archQueue;
CAudioSys x0_audioSys; CAudioSys x0_audioSys;
@ -142,7 +144,7 @@ class CGameArchitectureSupport
boo::SWindowRect m_windowRect; boo::SWindowRect m_windowRect;
bool m_rectIsDirty; bool m_rectIsDirty;
void destroyed() { x4_archQueue.Push(MakeMsg::CreateApplicationExit(EArchMsgTarget::ArchitectureSupport)); } void destroyed() { x4_archQueue.Push(MakeMsg::CreateRemoveAllIOWins(EArchMsgTarget::IOWinManager)); }
void resized(const boo::SWindowRect &rect) void resized(const boo::SWindowRect &rect)
{ {
@ -164,14 +166,11 @@ public:
{ x30_inputGenerator.mouseMove(coord); } { x30_inputGenerator.mouseMove(coord); }
void scroll(const boo::SWindowCoord &coord, const boo::SScrollDelta &scroll) void scroll(const boo::SWindowCoord &coord, const boo::SScrollDelta &scroll)
{ x30_inputGenerator.scroll(coord, scroll); } { x30_inputGenerator.scroll(coord, scroll); }
void charKeyDown(unsigned long charCode, boo::EModifierKey mods, bool isRepeat) void charKeyDown(unsigned long charCode, boo::EModifierKey mods, bool isRepeat);
{ x30_inputGenerator.charKeyDown(charCode, mods, isRepeat); } void charKeyUp(unsigned long charCode, boo::EModifierKey mods) { x30_inputGenerator.charKeyUp(charCode, mods); }
void charKeyUp(unsigned long charCode, boo::EModifierKey mods) void specialKeyDown(boo::ESpecialKey key, boo::EModifierKey mods, bool isRepeat);
{ x30_inputGenerator.charKeyUp(charCode, mods); }
void specialKeyDown(boo::ESpecialKey key, boo::EModifierKey mods, bool isRepeat) void specialKeyUp(boo::ESpecialKey key, boo::EModifierKey mods);
{ x30_inputGenerator.specialKeyDown(key, mods, isRepeat); }
void specialKeyUp(boo::ESpecialKey key, boo::EModifierKey mods)
{ x30_inputGenerator.specialKeyUp(key, mods); }
void modKeyDown(boo::EModifierKey mod, bool isRepeat) void modKeyDown(boo::EModifierKey mod, bool isRepeat)
{ x30_inputGenerator.modKeyDown(mod, isRepeat);} { x30_inputGenerator.modKeyDown(mod, isRepeat);}
void modKeyUp(boo::EModifierKey mod) void modKeyUp(boo::EModifierKey mod)
@ -255,6 +254,8 @@ private:
boo::IWindow* m_mainWindow = nullptr; boo::IWindow* m_mainWindow = nullptr;
hecl::CVarManager* m_cvarMgr = nullptr;
std::unique_ptr<hecl::Console> m_console;
// Warmup state // Warmup state
std::vector<SObjectTag> m_warmupTags; std::vector<SObjectTag> m_warmupTags;
std::vector<SObjectTag>::iterator m_warmupIt; std::vector<SObjectTag>::iterator m_warmupIt;
@ -277,6 +278,7 @@ public:
//int RsMain(int argc, const boo::SystemChar* argv[]); //int RsMain(int argc, const boo::SystemChar* argv[]);
void Init(const hecl::Runtime::FileStoreManager& storeMgr, void Init(const hecl::Runtime::FileStoreManager& storeMgr,
hecl::CVarManager* cvarManager,
boo::IWindow* window, boo::IWindow* window,
boo::IAudioVoiceEngine* voiceEngine, boo::IAudioVoiceEngine* voiceEngine,
amuse::IBackendVoiceAllocator& backend); amuse::IBackendVoiceAllocator& backend);
@ -312,6 +314,9 @@ public:
CGameArchitectureSupport* GetArchSupport() const { return x164_archSupport.get(); } CGameArchitectureSupport* GetArchSupport() const { return x164_archSupport.get(); }
size_t GetExpectedIdSize() const { return sizeof(u32); } size_t GetExpectedIdSize() const { return sizeof(u32); }
void quit(hecl::Console*, const std::vector<std::string>&)
{
}
}; };
} }

2
hecl

@ -1 +1 @@
Subproject commit 38e5245735472af75dec1c8d4df7b6062c16b718 Subproject commit b9f410a2f87eb837ffc5937ed6a7cc637d91ac79

@ -1 +1 @@
Subproject commit c2d4a17ccaca7fb17405cb5a78537b7050d8df04 Subproject commit b9a0bec10b812738cbfdaa14ebef2e570b8c800d