diff options
author | Andrew Kurushin | 2010-10-24 20:22:21 +0000 |
---|---|---|
committer | Andrew Kurushin | 2010-10-24 20:22:21 +0000 |
commit | e3ea3b5b7e6f1fbb20d9f958476e5a2263af7052 (patch) | |
tree | 739eeaf2385f14edfaccb264eec8552afb5b9c5a | |
parent | 25e1af837a94f6b1a9dcdcdb69abb21167a7f6ce (diff) | |
download | scummvm-rg350-e3ea3b5b7e6f1fbb20d9f958476e5a2263af7052.tar.gz scummvm-rg350-e3ea3b5b7e6f1fbb20d9f958476e5a2263af7052.tar.bz2 scummvm-rg350-e3ea3b5b7e6f1fbb20d9f958476e5a2263af7052.zip |
SAGA: replace Scene::_resourceList, Interface::_inventory malloc arrays with Common::Array
svn-id: r53773
-rw-r--r-- | engines/saga/actor.cpp | 13 | ||||
-rw-r--r-- | engines/saga/events.cpp | 1 | ||||
-rw-r--r-- | engines/saga/interface.cpp | 9 | ||||
-rw-r--r-- | engines/saga/interface.h | 3 | ||||
-rw-r--r-- | engines/saga/introproc_ihnm.cpp | 3 | ||||
-rw-r--r-- | engines/saga/introproc_ite.cpp | 23 | ||||
-rw-r--r-- | engines/saga/scene.cpp | 93 | ||||
-rw-r--r-- | engines/saga/scene.h | 23 | ||||
-rw-r--r-- | engines/saga/sndres.cpp | 14 | ||||
-rw-r--r-- | engines/saga/sound.cpp | 3 | ||||
-rw-r--r-- | engines/saga/sound.h | 1 |
11 files changed, 76 insertions, 110 deletions
diff --git a/engines/saga/actor.cpp b/engines/saga/actor.cpp index 9a4643ebcf..c4c05c7ae0 100644 --- a/engines/saga/actor.cpp +++ b/engines/saga/actor.cpp @@ -1146,12 +1146,13 @@ void Actor::drawSpeech() { ActorData *actor; int width, height; int stringLength = strlen(_activeSpeech.strings[0]); - char *outputString = (char*)calloc(stringLength + 1, 1); + Common::Array<char> outputString; + outputString.resize(stringLength + 1); if (_activeSpeech.speechFlags & kSpeakSlow) - strncpy(outputString, _activeSpeech.strings[0], _activeSpeech.slowModeCharIndex + 1); + strncpy(&outputString.front(), _activeSpeech.strings[0], _activeSpeech.slowModeCharIndex + 1); else - strncpy(outputString, _activeSpeech.strings[0], stringLength); + strncpy(&outputString.front(), _activeSpeech.strings[0], stringLength); if (_activeSpeech.actorsCount > 1) { height = _vm->_font->getHeight(kKnownFontScript); @@ -1168,15 +1169,13 @@ void Actor::drawSpeech() { else if (_vm->getGameId() == GID_IHNM) textPoint.y = 10; // CLIP(actor->_screenPosition.y - 160, 10, _vm->_scene->getHeight(true) - 10 - height); - _vm->_font->textDraw(kKnownFontScript, outputString, textPoint, + _vm->_font->textDraw(kKnownFontScript, &outputString.front(), textPoint, _activeSpeech.speechColor[i], _activeSpeech.outlineColor[i], _activeSpeech.getFontFlags(i)); } } else { - _vm->_font->textDrawRect(kKnownFontScript, outputString, _activeSpeech.drawRect, _activeSpeech.speechColor[0], + _vm->_font->textDrawRect(kKnownFontScript, &outputString.front(), _activeSpeech.drawRect, _activeSpeech.speechColor[0], _activeSpeech.outlineColor[0], _activeSpeech.getFontFlags(0)); } - - free(outputString); } void Actor::actorSpeech(uint16 actorId, const char **strings, int stringsCount, int sampleResourceId, int speechFlags) { diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp index 50784fbabd..b64defc26f 100644 --- a/engines/saga/events.cpp +++ b/engines/saga/events.cpp @@ -49,7 +49,6 @@ Events::Events(SagaEngine *vm) : _vm(vm) { Events::~Events() { debug(8, "Shutting down event subsystem..."); - freeList(); } // Function to process event list once per frame. diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp index 21e4f1227e..5153c1890e 100644 --- a/engines/saga/interface.cpp +++ b/engines/saga/interface.cpp @@ -317,16 +317,12 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) { _inventoryStart = 0; _inventoryEnd = 0; _inventoryBox = 0; - _inventorySize = ITE_INVENTORY_SIZE; _saveReminderState = 0; _optionSaveFileTop = 0; _optionSaveFileTitleNumber = 0; - _inventory = (uint16 *)calloc(_inventorySize, sizeof(uint16)); - if (_inventory == NULL) { - error("Interface::Interface(): not enough memory"); - } + _inventory.resize(ITE_INVENTORY_SIZE); _textInput = false; _statusTextInput = false; @@ -339,7 +335,6 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) { } Interface::~Interface() { - free(_inventory); } void Interface::saveReminderCallback(void *refCon) { @@ -2040,7 +2035,7 @@ void Interface::updateInventory(int pos) { } void Interface::addToInventory(int objectId) { - if (_inventoryCount >= _inventorySize) { + if (uint(_inventoryCount) >= _inventory.size()) { return; } diff --git a/engines/saga/interface.h b/engines/saga/interface.h index 942c0f9849..b9a96653a7 100644 --- a/engines/saga/interface.h +++ b/engines/saga/interface.h @@ -427,8 +427,7 @@ private: Point _lastMousePoint; - uint16 *_inventory; - int _inventorySize; + Common::Array<uint16> _inventory; int _inventoryStart; int _inventoryEnd; int _inventoryPos; diff --git a/engines/saga/introproc_ihnm.cpp b/engines/saga/introproc_ihnm.cpp index d38b71e7a5..ac75bcf19d 100644 --- a/engines/saga/introproc_ihnm.cpp +++ b/engines/saga/introproc_ihnm.cpp @@ -88,14 +88,13 @@ int Scene::IHNMStartProc() { // Queue first scene firstScene.loadFlag = kLoadBySceneNumber; firstScene.sceneDescriptor = -1; - firstScene.sceneDescription = NULL; firstScene.sceneSkipTarget = false; firstScene.sceneProc = NULL; firstScene.transitionType = kTransitionFade; firstScene.actorsEntrance = 0; firstScene.chapter = -1; - _vm->_scene->queueScene(&firstScene); + _vm->_scene->queueScene(firstScene); return SUCCESS; } diff --git a/engines/saga/introproc_ite.cpp b/engines/saga/introproc_ite.cpp index dc2e2fca79..ae7dedefa5 100644 --- a/engines/saga/introproc_ite.cpp +++ b/engines/saga/introproc_ite.cpp @@ -61,15 +61,15 @@ using Common::IT_ITA; #define MUSIC_2 10 LoadSceneParams ITE_IntroList[] = { - {RID_ITE_INTRO_ANIM_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_CAVE_SCENE_1, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave1Proc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_CAVE_SCENE_2, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave2Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_CAVE_SCENE_3, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave3Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_CAVE_SCENE_4, kLoadByResourceId, NULL, Scene::SC_ITEIntroCave4Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_VALLEY_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroValleyProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_TREEHOUSE_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroTreeHouseProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_FAIREPATH_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFairePathProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, - {RID_ITE_FAIRETENT_SCENE, kLoadByResourceId, NULL, Scene::SC_ITEIntroFaireTentProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE} + {RID_ITE_INTRO_ANIM_SCENE, kLoadByResourceId, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_CAVE_SCENE_1, kLoadByResourceId, Scene::SC_ITEIntroCave1Proc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_CAVE_SCENE_2, kLoadByResourceId, Scene::SC_ITEIntroCave2Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_CAVE_SCENE_3, kLoadByResourceId, Scene::SC_ITEIntroCave3Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_CAVE_SCENE_4, kLoadByResourceId, Scene::SC_ITEIntroCave4Proc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_VALLEY_SCENE, kLoadByResourceId, Scene::SC_ITEIntroValleyProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_TREEHOUSE_SCENE, kLoadByResourceId, Scene::SC_ITEIntroTreeHouseProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_FAIREPATH_SCENE, kLoadByResourceId, Scene::SC_ITEIntroFairePathProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_FAIRETENT_SCENE, kLoadByResourceId, Scene::SC_ITEIntroFaireTentProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE} }; int Scene::ITEStartProc() { @@ -84,20 +84,19 @@ int Scene::ITEStartProc() { for (i = 0; i < scenesCount; i++) { tempScene = ITE_IntroList[i]; tempScene.sceneDescriptor = _vm->_resource->convertResourceId(tempScene.sceneDescriptor); - _vm->_scene->queueScene(&tempScene); + _vm->_scene->queueScene(tempScene); } firstScene.loadFlag = kLoadBySceneNumber; firstScene.sceneDescriptor = _vm->getStartSceneNumber(); - firstScene.sceneDescription = NULL; firstScene.sceneSkipTarget = true; firstScene.sceneProc = NULL; firstScene.transitionType = kTransitionFade; firstScene.actorsEntrance = 0; firstScene.chapter = -1; - _vm->_scene->queueScene(&firstScene); + _vm->_scene->queueScene(firstScene); return SUCCESS; } diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp index 03b4899105..2c419962dd 100644 --- a/engines/saga/scene.cpp +++ b/engines/saga/scene.cpp @@ -213,10 +213,7 @@ Scene::Scene(SagaEngine *vm) : _vm(vm) { _chapterNumber = 0; _sceneResourceId = 0; _inGame = false; - _loadDescription = false; - memset(&_sceneDescription, 0, sizeof(_sceneDescription)); - _resourceListCount = 0; - _resourceList = NULL; + _sceneDescription.reset(); _sceneProc = NULL; _objectMap = new ObjectMap(_vm); _actionMap = new ObjectMap(_vm); @@ -588,7 +585,6 @@ void Scene::initDoorsState() { } void Scene::loadScene(LoadSceneParams &loadSceneParams) { - size_t i; Event event; EventColumns *eventColumns; static PalEntry current_pal[PAL_ENTRIES]; @@ -650,8 +646,6 @@ void Scene::loadScene(LoadSceneParams &loadSceneParams) { error("Scene::loadScene(): Error, a scene is already loaded"); } - _loadDescription = true; - #ifdef ENABLE_IHNM if (_vm->getGameId() == GID_IHNM) { if (loadSceneParams.loadFlag == kLoadBySceneNumber) // When will we get rid of it? @@ -669,16 +663,6 @@ void Scene::loadScene(LoadSceneParams &loadSceneParams) { _sceneNumber = loadSceneParams.sceneDescriptor; _sceneResourceId = getSceneResourceId(_sceneNumber); break; - case kLoadByDescription: - _sceneNumber = -1; - _sceneResourceId = -1; - assert(loadSceneParams.sceneDescription != NULL); - assert(loadSceneParams.sceneDescription->resourceList != NULL); - _loadDescription = false; - _sceneDescription = *loadSceneParams.sceneDescription; - _resourceList = loadSceneParams.sceneDescription->resourceList; - _resourceListCount = loadSceneParams.sceneDescription->resourceListCount; - break; } debug(3, "Loading scene number %d:", _sceneNumber); @@ -693,27 +677,22 @@ void Scene::loadScene(LoadSceneParams &loadSceneParams) { } // Load scene descriptor and resource list resources - if (_loadDescription) { - debug(3, "Loading scene resource %i", _sceneResourceId); + debug(3, "Loading scene resource %i", _sceneResourceId); - loadSceneDescriptor(_sceneResourceId); + loadSceneDescriptor(_sceneResourceId); - loadSceneResourceList(_sceneDescription.resourceListResourceId); - } else { - debug(3, "Loading memory scene resource"); - } + loadSceneResourceList(_sceneDescription.resourceListResourceId); // Load resources from scene resource list - for (i = 0; i < _resourceListCount; i++) { - if (!_resourceList[i].invalid) { - _vm->_resource->loadResource(_sceneContext, _resourceList[i].resourceId, - _resourceList[i].buffer, _resourceList[i].size); + for (SceneResourceDataArray::iterator resource = _resourceList.begin(); resource != _resourceList.end(); ++resource) { + if (!resource->invalid) { + _vm->_resource->loadResource(_sceneContext, resource->resourceId, resource->buffer, resource->size); - if (_resourceList[i].size >= 6) { - if (!memcmp(_resourceList[i].buffer, "DUMMY!", 6)) { - _resourceList[i].invalid = true; - warning("DUMMY resource %i", _resourceList[i].resourceId); + if (resource->size >= 6) { + if (!memcmp(resource->buffer, "DUMMY!", 6)) { + resource->invalid = true; + warning("DUMMY resource %i", resource->resourceId); } } } @@ -911,7 +890,7 @@ void Scene::loadSceneDescriptor(uint32 resourceId) { byte *sceneDescriptorData; size_t sceneDescriptorDataLength; - memset(&_sceneDescription, 0, sizeof(_sceneDescription)); + _sceneDescription.reset(); if (resourceId == 0) { return; @@ -938,10 +917,8 @@ void Scene::loadSceneDescriptor(uint32 resourceId) { void Scene::loadSceneResourceList(uint32 resourceId) { byte *resourceListData; size_t resourceListDataLength; - size_t i; - _resourceListCount = 0; - _resourceList = NULL; + _resourceList.clear(); if (resourceId == 0) { return; @@ -954,19 +931,18 @@ void Scene::loadSceneResourceList(uint32 resourceId) { MemoryReadStreamEndian readS(resourceListData, resourceListDataLength, _sceneContext->isBigEndian()); // Allocate memory for scene resource list - _resourceListCount = resourceListDataLength / SAGA_RESLIST_ENTRY_LEN; - debug(3, "Scene resource list contains %i entries", (int)_resourceListCount); - _resourceList = (SceneResourceData *)calloc(_resourceListCount, sizeof(*_resourceList)); + _resourceList.resize(resourceListDataLength / SAGA_RESLIST_ENTRY_LEN); + debug(3, "Scene resource list contains %i entries", (int)_resourceList.size()); // Load scene resource list from raw scene // resource table debug(3, "Loading scene resource list"); - for (i = 0; i < _resourceListCount; i++) { - _resourceList[i].resourceId = readS.readUint16(); - _resourceList[i].resourceType = readS.readUint16(); + for (SceneResourceDataArray::iterator resource = _resourceList.begin(); resource != _resourceList.end(); ++resource) { + resource->resourceId = readS.readUint16(); + resource->resourceType = readS.readUint16(); // demo version may contain invalid resourceId - _resourceList[i].invalid = !_sceneContext->validResourceId(_resourceList[i].resourceId); + resource->invalid = !_sceneContext->validResourceId(resource->resourceId); } } @@ -977,7 +953,6 @@ void Scene::processSceneResources() { byte *resourceData; size_t resourceDataLength; const byte *palPointer; - size_t i; SAGAResourceTypes *types = 0; int typesCount = 0; SAGAResourceTypes resType; @@ -985,22 +960,22 @@ void Scene::processSceneResources() { getResourceTypes(types, typesCount); // Process the scene resource list - for (i = 0; i < _resourceListCount; i++) { - if (_resourceList[i].invalid) { + for (SceneResourceDataArray::iterator resource = _resourceList.begin(); resource != _resourceList.end(); ++resource) { + if (resource->invalid) { continue; } - resourceData = _resourceList[i].buffer; - resourceDataLength = _resourceList[i].size; + resourceData = resource->buffer; + resourceDataLength = resource->size; - if (_resourceList[i].resourceType >= typesCount) { - error("Scene::processSceneResources() wrong resource type %i", _resourceList[i].resourceType); + if (resource->resourceType >= typesCount) { + error("Scene::processSceneResources() wrong resource type %i", resource->resourceType); } - resType = types[_resourceList[i].resourceType]; + resType = types[resource->resourceType]; switch (resType) { case SAGA_UNKNOWN: - warning("UNKNOWN resourceType %i", _resourceList[i].resourceType); + warning("UNKNOWN resourceType %i", resource->resourceType); break; case SAGA_ACTOR: //for (a = actorsInScene; a; a = a->nextInScene) @@ -1027,7 +1002,7 @@ void Scene::processSceneResources() { _bg.buffer, &_bg.w, &_bg.h)) { - error("Scene::processSceneResources() Error loading background resource %i", _resourceList[i].resourceId); + error("Scene::processSceneResources() Error loading background resource %i", resource->resourceId); } palPointer = _vm->getImagePal(_bg.res_buf, _bg.res_len); @@ -1100,7 +1075,7 @@ void Scene::processSceneResources() { break; case SAGA_ANIM: { - uint16 animId = _resourceList[i].resourceType - 14; + uint16 animId = resource->resourceType - 14; debug(3, "Loading animation resource animId=%i", animId); @@ -1126,7 +1101,7 @@ void Scene::processSceneResources() { break; case SAGA_FACES: if (_vm->getGameId() == GID_ITE) - _vm->_interface->loadScenePortraits(_resourceList[i].resourceId); + _vm->_interface->loadScenePortraits(resource->resourceId); break; case SAGA_PALETTE: { @@ -1145,7 +1120,7 @@ void Scene::processSceneResources() { } break; default: - error("Scene::ProcessSceneResources() Encountered unknown resource type %i", _resourceList[i].resourceType); + error("Scene::ProcessSceneResources() Encountered unknown resource type %i", resource->resourceType); break; } } @@ -1222,13 +1197,11 @@ void Scene::endScene() { } // Free scene resource list - for (i = 0; i < _resourceListCount; i++) { + for (i = 0; i < _resourceList.size(); i++) { //!!!!!!!!!!!!!!!!!!! free(_resourceList[i].buffer); } - if (_loadDescription) { - free(_resourceList); - } + _resourceList.clear(); // Free animation info list _vm->_anim->reset(); diff --git a/engines/saga/scene.h b/engines/saga/scene.h index 8b9b4493f0..8e55a15118 100644 --- a/engines/saga/scene.h +++ b/engines/saga/scene.h @@ -113,8 +113,13 @@ struct SceneResourceData { byte *buffer; size_t size; bool invalid; + + SceneResourceData() : resourceId(0), resourceType(0), buffer(NULL), size(0), invalid(false) { + } }; +typedef Common::Array<SceneResourceData> SceneResourceDataArray; + #define SAGA_SCENE_DESC_LEN 16 struct SceneDescription { @@ -126,8 +131,10 @@ struct SceneDescription { uint16 sceneScriptEntrypointNumber; uint16 startScriptEntrypointNumber; int16 musicResourceId; - SceneResourceData *resourceList; - size_t resourceListCount; + + void reset() { + flags = resourceListResourceId = endSlope = beginSlope = scriptModuleNumber = sceneScriptEntrypointNumber = startScriptEntrypointNumber = musicResourceId = 0; + } }; struct SceneEntry { @@ -161,14 +168,12 @@ enum SceneTransitionType { enum SceneLoadFlags { kLoadByResourceId, - kLoadBySceneNumber, - kLoadByDescription + kLoadBySceneNumber }; struct LoadSceneParams { int32 sceneDescriptor; SceneLoadFlags loadFlag; - SceneDescription* sceneDescription; SceneProc *sceneProc; bool sceneSkipTarget; SceneTransitionType transitionType; @@ -230,8 +235,8 @@ class Scene { void skipScene(); void endScene(); void restoreScene(); - void queueScene(LoadSceneParams *sceneQueue) { - _sceneQueue.push_back(*sceneQueue); + void queueScene(const LoadSceneParams &sceneQueue) { + _sceneQueue.push_back(sceneQueue); } void draw(); @@ -379,10 +384,8 @@ class Scene { int _currentMusicRepeat; bool _chapterPointsChanged; bool _inGame; - bool _loadDescription; SceneDescription _sceneDescription; - size_t _resourceListCount; - SceneResourceData *_resourceList; + SceneResourceDataArray _resourceList; SceneProc *_sceneProc; SceneImage _bg; SceneImage _bgMask; diff --git a/engines/saga/sndres.cpp b/engines/saga/sndres.cpp index bd33bc070f..48072452df 100644 --- a/engines/saga/sndres.cpp +++ b/engines/saga/sndres.cpp @@ -321,7 +321,7 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff #endif } else if (resourceType == kSoundVOC) { data = Audio::loadVOCFromStream(readS, size, rate); - result = (data != 0); + result = (data != NULL); if (onlyHeader) free(data); buffer.flags |= Audio::FLAG_UNSIGNED; @@ -333,11 +333,13 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff buffer.frequency = rate; buffer.size = size; - if (!onlyHeader && resourceType != kSoundVOC) { - buffer.buffer = (byte *)malloc(size); - readS.read(buffer.buffer, size); - } else if (!onlyHeader && resourceType == kSoundVOC) { - buffer.buffer = data; + if (!onlyHeader) { + if (resourceType == kSoundVOC) { + buffer.buffer = data; + } else { + buffer.buffer = (byte *)malloc(size); + readS.read(buffer.buffer, size); + } } } break; diff --git a/engines/saga/sound.cpp b/engines/saga/sound.cpp index db979e8104..b3fcf4def3 100644 --- a/engines/saga/sound.cpp +++ b/engines/saga/sound.cpp @@ -36,7 +36,7 @@ namespace Saga { Sound::Sound(SagaEngine *vm, Audio::Mixer *mixer) : - _vm(vm), _mixer(mixer), _voxStream(0) { + _vm(vm), _mixer(mixer) { for (int i = 0; i < SOUND_HANDLES; i++) _handles[i].type = kFreeHandle; @@ -45,7 +45,6 @@ Sound::Sound(SagaEngine *vm, Audio::Mixer *mixer) : } Sound::~Sound() { - delete _voxStream; } SndHandle *Sound::getHandle() { diff --git a/engines/saga/sound.h b/engines/saga/sound.h index 7ee2765a0f..b5f82369f4 100644 --- a/engines/saga/sound.h +++ b/engines/saga/sound.h @@ -95,7 +95,6 @@ public: SagaEngine *_vm; Audio::Mixer *_mixer; - MemoryReadStream *_voxStream; SndHandle _handles[SOUND_HANDLES]; }; |