ArrowClientSkillEffect::ArrowClientSkillEffect(FLOAT3 _position, unsigned int _targetId, unsigned int _masterId) { m_active = true; m_targetId = _targetId; m_graphicalEffect = g_graphicsEngine->createModel("Arrow", _position); m_graphicalEffect->setAlpha(0.999f); Entity* master = ClientEntityHandler::getEntity(_masterId); if(master != NULL) { master->m_model->getAnimation()->PlayLoop("RangeAttack"); } D3DXVECTOR3 newPos = D3DXVECTOR3(_position.x, _position.y, _position.z); this->m_particleSystem = g_graphicsEngine->createParticleEngine(D3DXVECTOR4(newPos, 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1.0f, 1.0f)); // Play sound int sound; switch(random(0, 2)) { case 0: sound = createSoundHandle("attacks/rangeAttack_0", false, true, _position); break; case 1: sound = createSoundHandle("attacks/rangeAttack_1", false, true, _position); break; case 2: sound = createSoundHandle("attacks/rangeAttack_2", false, true, _position); break; } playSound(sound); deactivateSound(sound); }
ChainStrikeClientSkillEffect::ChainStrikeClientSkillEffect(unsigned int _lastTarget, unsigned int _target, FLOAT3 _position) { m_superPos = _position; m_lifetime = 0.0f; this->m_lastTarget = _lastTarget; this->m_target = _target; this->m_percentToTarget = 0; pe[0] = g_graphicsEngine->createParticleEngine("test", D3DXVECTOR4(0, 0, 0, 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1, 1)); pe[1] = g_graphicsEngine->createParticleEngine("test2", D3DXVECTOR4(0, 0, 0, 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1, 1)); pe[2] = g_graphicsEngine->createParticleEngine("test3", D3DXVECTOR4(0, 0, 0, 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1, 1)); int sound = createSoundHandle("skills/chain_strike.wav", false, true, _position, 0.5f); playSound(sound); deactivateSound(sound); Entity *e = ClientEntityHandler::getEntity(_lastTarget); if(e != NULL && e->m_type == ServerEntity::HeroType) { e->m_model->getAnimation()->Play("ChainLight"); } m_orig = D3DXVECTOR3(0, 0, 0); m_eOrig = NULL; m_eOrig = ClientEntityHandler::getEntity(m_lastTarget); if(m_eOrig) m_orig = D3DXVECTOR3(m_eOrig->m_model->getPosition().x, m_eOrig->m_model->getPosition().y, m_eOrig->m_model->getPosition().z); }
TargetAcquiredClientSkillEffect::TargetAcquiredClientSkillEffect(unsigned int _masterId, FLOAT3 position) { this->m_lifetime = 5.0f; Entity* e = ClientEntityHandler::getEntity(_masterId); if(e) { int sound = createSoundHandle("skills/target_acquired_permission_to_fire.wav", false, true, e->m_startPos); playSound(sound); deactivateSound(sound); } m_firePos = position; m_firePos.y = 10; m_fireTwoPos = position; m_fireTwoPos.y = 10; m_icePos = position; m_icePos.y = 8; m_lightningPos = position; m_lightningPos.y = 10; m_bfireOne = false; m_bfireTwo = false; m_biceOne = false; m_blightningOne = false; m_fire = NULL; m_fireTwo = NULL; m_ice = NULL; m_lightning = NULL; }
AmbientSoundsManager::AmbientSoundsManager() { m_thunderSounds[0] = createSoundHandle("ambient/thunder0.wav", false, false); m_thunderSounds[1] = createSoundHandle("ambient/thunder1.wav", false, false); m_thunderSounds[2] = createSoundHandle("ambient/thunder2.wav", false, false); m_thunderSounds[3] = createSoundHandle("ambient/thunder3.wav", false, false); m_thunderSounds[4] = createSoundHandle("ambient/thunder4.wav", false, false); m_thunderSoundsTimer = THUNDER_SOUNDS_DELAY; m_screamSounds[0] = createSoundHandle("ambient/CPUScream0.wav", false, false); m_screamSounds[1] = createSoundHandle("ambient/CPUScream1.wav", false, false); m_screamSounds[2] = createSoundHandle("ambient/scream0.wav", false, false); m_screamSounds[3] = createSoundHandle("ambient/scream1.wav", false, false); m_screamSounds[4] = createSoundHandle("ambient/scream2.wav", false, false); m_screamSoundsTimer = SCREAM_SOUNDS_DELAY; }
CloudOfDarknessClientSkillEffect::CloudOfDarknessClientSkillEffect(unsigned int _masterId, FLOAT3 _position) { m_position = _position; //m_graphicalEffects[0] = g_graphicsEngine->createModel("CloudOfDarkness", FLOAT3(_position.x, 0.1f, _position.z), "color2"); //m_graphicalEffects[1] = g_graphicsEngine->createModel("CloudOfDarkness", FLOAT3(_position.x, 0.2f, _position.z), "color1"); //m_graphicalEffects[2] = g_graphicsEngine->createModel("CloudOfDarkness", FLOAT3(_position.x, 0.3f, _position.z), "color"); //m_graphicalEffects[0]->setScale(0.5f, 0.5f, 0.5f); //m_graphicalEffects[2]->setScale(0.5f, 0.5f, 0.5f); //m_graphicalEffects[1]->setScale(0.5f, 0.5f, 0.5f); //m_graphicalEffects[0]->setAlpha(0.999f); //m_graphicalEffects[1]->setAlpha(0.999f); //m_graphicalEffects[2]->setAlpha(0.999f); //m_graphicalEffects[0]->neutralize(); //m_graphicalEffects[1]->neutralize(); //m_graphicalEffects[2]->neutralize(); m_lifetime = 0.0f; m_cloud = g_graphicsEngine->createParticleEngine("CloudOfDarkness", D3DXVECTOR4(_position.toD3DXVector(), 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1, 1)); int sound = createSoundHandle("skills/codWindStartEnd.wav", false, true, _position); playSound(sound); deactivateSound(sound); m_masterId = _masterId; Entity *e = ClientEntityHandler::getEntity(_masterId); if(e != NULL) { e->m_model->getAnimation()->Play("Spell"); m_weapon = e->m_model->getRightHand(); e->m_model->SetRightHand(NULL); } }
ClientHandler::ClientHandler(HWND _hWnd) { // Init globals for the people g_graphicsEngine = new GraphicsHandler(_hWnd, g_configFile); g_mouse = new Mouse(500, 500, _hWnd); g_keyboard = new Keyboard(); this->m_serverThread = NULL; this->m_client = new Client(); m_menuMusic = createSoundHandle("music/menu.wav", true, false); }
WallClientSkillEffect::WallClientSkillEffect(unsigned int _masterId, FLOAT3 _position) { Entity *master = ClientEntityHandler::getEntity(_masterId); if(master != NULL) { master->m_model->getAnimation()->Play("Spell"); } // Play sound int sound = createSoundHandle("skills/wallStartGroundShake.wav", false, true, _position); playSound(sound); deactivateSound(sound); }
TeleportClientSkillEffect::TeleportClientSkillEffect(unsigned int _casterId, const FLOAT3& _position) { int sound = createSoundHandle("skills/teleport.wav", false, true, _position); playSound(sound); deactivateSound(sound); m_lifeTime = 0; this->m_casterId = _casterId; this->m_position = _position; m_origTele = NULL; m_targetTele = NULL; Entity* e = ClientEntityHandler::getEntity(_casterId); if(e != NULL) m_origTele = g_graphicsEngine->createParticleEngine("Teleport", D3DXVECTOR4(e->m_model->getPosition().toD3DXVector(), 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1, 1)); m_targetTele = g_graphicsEngine->createParticleEngine("Teleport", D3DXVECTOR4(m_position.toD3DXVector(), 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1, 1)); }
SimonsEvilClientSkillEffect::SimonsEvilClientSkillEffect(unsigned int _masterId) { m_masterId = _masterId; Entity* master = ClientEntityHandler::getEntity(_masterId); if(master) { m_timer = 0.0f; D3DXVECTOR3 newPos = D3DXVECTOR3(master->m_startPos.x, master->m_startPos.y, master->m_startPos.z); this->m_particleSystem = g_graphicsEngine->createParticleEngine("HealingAura", D3DXVECTOR4(newPos, 1), D3DXQUATERNION(0, 0, 0, 1), D3DXVECTOR2(1.0f, 1.0f)); // Play sound int sound = createSoundHandle("skills/healing_aura.wav", false, true, master->m_startPos); playSound(sound); deactivateSound(sound); } else { m_timer = SimonsEvilEffect::LIFETIME; m_particleSystem = NULL; } }
MeleeAOEClientSkillEffect::MeleeAOEClientSkillEffect(unsigned int _masterId, unsigned int _targetId, PLAYER_INFO _playerInfo) { this->m_lifetime = 1.0f; Entity* master = ClientEntityHandler::getEntity(_masterId); if(master != NULL) { master->m_model->getAnimation()->PlayLoop("2Hattack"); Entity* target = ClientEntityHandler::getEntity(_targetId); if(target) { if(master->m_type == ServerEntity::HeroType) { // Play impact sound int impactSound; switch(random(0, 2)) { case 0: impactSound = createSoundHandle("attacks/twoHandedAttack_0.wav", false, true, target->m_startPos); break; case 1: impactSound = createSoundHandle("attacks/twoHandedAttack_1.wav", false, true, target->m_startPos); break; case 2: impactSound = createSoundHandle("attacks/twoHandedAttack_2.wav", false, true, target->m_startPos); break; } playSound(impactSound); deactivateSound(impactSound); } // Play damage sound. int sound; switch(target->m_type) { case ServerEntity::HeroType: switch(_playerInfo.heroType) { case Hero::RED_KNIGHT: switch(random(0, 2)) { case 0: sound = createSoundHandle("red_knight/RedKnight_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("red_knight/RedKnight_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("red_knight/RedKnight_Damage_2.wav", false, true, target->m_startPos); break; } break; case Hero::ENGINEER: switch(random(0, 2)) { case 0: sound = createSoundHandle("engineer/Engineer_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("engineer/Engineer_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("engineer/Engineer_Damage_2.wav", false, true, target->m_startPos); break; } break; case Hero::THE_MENTALIST: switch(random(0, 2)) { case 0: sound = createSoundHandle("mentalist/Mentalist_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("mentalist/Mentalist_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("mentalist/Mentalist_Damage_2.wav", false, true, target->m_startPos); break; } break; case Hero::OFFICER: switch(random(0, 2)) { case 0: sound = createSoundHandle("officer/Officer_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("officer/Officer_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("officer/Officer_Damage_2.wav", false, true, target->m_startPos); break; } break; case Hero::DOCTOR: switch(random(0, 2)) { case 0: sound = createSoundHandle("doctor/Doctor_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("doctor/Doctor_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("doctor/Doctor_Damage_2.wav", false, true, target->m_startPos); break; } break; } break; case ServerEntity::EnemyType: switch(target->m_subtype) { case Enemy::IMP: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Monster_Imp_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Monster_Imp_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Monster_Imp_Damage_2.wav", false, true, target->m_startPos); break; } break; case Enemy::SHADE: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Monster_Shade_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Monster_Shade_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Monster_Shade_Damage_2.wav", false, true, target->m_startPos); break; } break; case Enemy::FROST_DEMON: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Monster_Frost_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Monster_Frost_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Monster_Frost_Damage_2.wav", false, true, target->m_startPos); break; } break; case Enemy::SPITTING_DEMON: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Monster_Spitting_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Monster_Spitting_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Monster_Spitting_Damage_2.wav", false, true, target->m_startPos); break; } break; case Enemy::HELLFIRE_STEED: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Beast_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Beast_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Beast_Damage_2.wav", false, true, target->m_startPos); break; } break; case Enemy::SOUL_EATER_STEED: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Beast_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Beast_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Beast_Damage_2.wav", false, true, target->m_startPos); break; } break; case Enemy::THUNDERSTEED: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Beast_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Beast_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Beast_Damage_2.wav", false, true, target->m_startPos); break; } break; case Enemy::BRUTE_STEED: switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Beast_Damage_0.wav", false, true, target->m_startPos); break; case 1: sound = createSoundHandle("enemy/Beast_Damage_1.wav", false, true, target->m_startPos); break; case 2: sound = createSoundHandle("enemy/Beast_Damage_2.wav", false, true, target->m_startPos); break; } break; } break; } SpeechManager::speak(_targetId, sound); deactivateSound(sound); } } }
void ArrowClientSkillEffect::update(float _dt) { Entity* target = ClientEntityHandler::getEntity(m_targetId); if(target && target->m_health > 0) { D3DXVECTOR3 newPos = D3DXVECTOR3(m_graphicalEffect->getPosition().x, m_graphicalEffect->getPosition().y, m_graphicalEffect->getPosition().z); this->m_particleSystem->setPosition(newPos); FLOAT3 dist = target->m_model->getPosition()-m_graphicalEffect->getPosition(); FLOAT3 movement = dist/dist.length()*RangedAttack::VELOCITY*_dt; if(dist.length() > movement.length()) { m_graphicalEffect->move(movement); m_graphicalEffect->setRotation(FLOAT3(atan2(-movement.x, -movement.z), 0.0f, 0.0f)); } else { m_active = false; if(target->m_type == UnitEntity::EnemyType) { int sound; switch(random(0, 2)) { case 0: sound = createSoundHandle("enemy/Monster_Imp_Damage_0.wav", false, false); break; case 1: sound = createSoundHandle("enemy/Monster_Imp_Damage_1.wav", false, false); break; case 2: sound = createSoundHandle("enemy/Monster_Imp_Damage_2.wav", false, false); break; } SpeechManager::speak(m_targetId, sound); // The unit must be killed on the client before on the server for this sound solution to actually work. deactivateSound(sound); } else if(target->m_type == UnitEntity::HeroType) { int sound; switch(target->m_subtype) { case Hero::RED_KNIGHT: switch(random(0, 2)) { case 0: sound = createSoundHandle("red_knight/RedKnight_Damage_0.wav", false, false); break; case 1: sound = createSoundHandle("red_knight/RedKnight_Damage_1.wav", false, false); break; case 2: sound = createSoundHandle("red_knight/RedKnight_Damage_2.wav", false, false); break; } break; case Hero::ENGINEER: switch(random(0, 2)) { case 0: sound = createSoundHandle("engineer/Engineer_Damage_0.wav", false, false); break; case 1: sound = createSoundHandle("engineer/Engineer_Damage_1.wav", false, false); break; case 2: sound = createSoundHandle("engineer/Engineer_Damage_2.wav", false, false); break; } break; case Hero::THE_MENTALIST: switch(random(0, 2)) { case 0: sound = createSoundHandle("mentalist/Mentalist_Damage_0.wav", false, false); break; case 1: sound = createSoundHandle("mentalist/Mentalist_Damage_1.wav", false, false); break; case 2: sound = createSoundHandle("mentalist/Mentalist_Damage_2.wav", false, false); break; } break; case Hero::OFFICER: switch(random(0, 2)) { case 0: sound = createSoundHandle("officer/Officer_Damage_0.wav", false, false); break; case 1: sound = createSoundHandle("officer/Officer_Damage_1.wav", false, false); break; case 2: sound = createSoundHandle("officer/Officer_Damage_2.wav", false, false); break; } break; case Hero::DOCTOR: switch(random(0, 2)) { case 0: sound = createSoundHandle("doctor/Doctor_Damage_0.wav", false, false); break; case 1: sound = createSoundHandle("doctor/Doctor_Damage_1.wav", false, false); break; case 2: sound = createSoundHandle("doctor/Doctor_Damage_2.wav", false, false); break; } break; } SpeechManager::speak(m_targetId, sound); // The unit must be killed on the client before on the server for this sound solution to actually work. deactivateSound(sound); } } } else { m_active = false; } }
void ClientHandler::update(float _dt) { this->m_state->update(_dt); if(this->m_state->isDone()) { State* tempState = this->m_state; switch(this->m_state->nextState()) { case State::INTRO: this->m_state = new IntroState(); break; case State::MAIN_MENU: if(tempState->getType() == State::END || tempState->getType() == State::LORE) { m_menuMusic = createSoundHandle("music/menu.wav", true, false); loopSound(m_menuMusic); } else if(tempState->getType() == State::LOBBY) { ClientEntityHandler::removeAllEntities(); this->m_client->disconnect(); delete this->m_serverThread; this->m_serverThread = NULL; } this->m_state = new MainMenuState(); break; case State::CREATE_GAME: this->m_state = new CreateGameState(); break; case State::JOIN_GAME: this->m_state = new JoinGameState(this->m_client); break; case State::LOBBY: if(tempState->getType() == State::CREATE_GAME) { CreateGameState *tempCreateState = (CreateGameState*)tempState; this->m_serverThread = new ServerThread(tempCreateState->getPort(), tempCreateState->getMapName()); this->m_serverThread->Launch(); this->m_client->connect(tempCreateState->getIP(), tempCreateState->getPort()); //sends le player name, code 1337, hardcoded sf::Packet playerName; playerName << (int)NetworkMessage::setPlayerName << tempCreateState->getPlayerName(); this->m_client->sendPacket(playerName); } else { JoinGameState *tempJoinState = (JoinGameState*)tempState; //sends le player name, code 1337, hardcoreporn sf::Packet playerName; playerName << (int)NetworkMessage::setPlayerName << tempJoinState->getPlayerName(); this->m_client->sendPacket(playerName); } this->m_state = new LobbyState(this->m_client); break; case State::LORE: stopSound(m_menuMusic); deactivateSound(m_menuMusic); this->m_state = new LoreState(); break; case State::GAME: if(tempState->getType() == State::LOADING) { LoadingState *tempLoadingState = (LoadingState*)tempState; this->m_state = new GameState(this->m_client, tempLoadingState->getMapName()); } else { this->m_state = new GameState(this->m_client, "levelone"); } break; case State::SETTINGS: this->m_state = new SettingsState(); break; case State::CREDITS: this->m_state = new CreditState(); break; case State::END: ClientEntityHandler::removeAllEntities(); this->m_client->disconnect(); delete this->m_serverThread; this->m_serverThread = NULL; this->m_state = new EndState(((GameState*)tempState)->getEndGameMessage(),((GameState*)tempState)->getMissionEndMessage()); break; case State::LOADING: stopSound(m_menuMusic); deactivateSound(m_menuMusic); { LobbyState *tempLobbyState = (LobbyState*)tempState; string temp = tempLobbyState->getMapName(); delete tempState; tempState = NULL; this->m_state = new LoadingState(m_client, temp); } break; case State::EXIT: this->m_state = NULL; PostQuitMessage(WM_QUIT); break; } delete tempState; } D3DXVECTOR3 camPos = g_graphicsEngine->getCamera()->getPos(); updateSoundEngine(FLOAT3(camPos.x, camPos.y, camPos.z)); g_mouse->update(); // Must be last! WHY?! - Because otherwise the mouse buttons will NEVER be "pressed" g_keyboard->update(); }
DeathClientSkillEffect::DeathClientSkillEffect(unsigned int _masterId, FLOAT3 _position) { this->m_masterId = _masterId; this->m_lifetime = LIFETIME; this->m_sink = false; this->m_model = NULL; this->m_lanternLight = NULL; Entity *e = ClientEntityHandler::getEntity(this->m_masterId); //g_graphicsEngine->createPointLight(_position, FLOAT3(1.0f, 1.0f, 1.0f), FLOAT3(1.0f, 1.0f, 1.0f), FLOAT3(1.0f, 1.0f, 1.0f), 5.0f, true, false, FLOAT3(0.0f, 1.0f, 0.0f)); if(e != NULL) { this->m_model = g_graphicsEngine->createModel(e->m_model, false); this->m_model->setPosition(_position); this->m_model->setScale(e->m_model->getScale()); this->m_model->getAnimation()->Play("death", true); this->m_model->setGlowIndex("glowIntensity1"); this->m_model->SetHat(e->m_model->getHat()); this->m_model->SetLeftHand(e->m_model->getLeftHand()); this->m_model->SetRightHand(e->m_model->getRightHand()); m_model->setColor(D3DXVECTOR4(0, 1, 1, 0.4f)); if(e->m_type == ServerEntity::EnemyType) { this->m_sink = true; m_model->setColor(D3DXVECTOR4(1, 0, 0, 0.4f)); } if(e->m_lanternLight != NULL) { this->m_lanternLight = g_graphicsEngine->createPointLight(this->m_model->getLeftHandPosition(), e->m_lanternLight->getAmbientColor(), e->m_lanternLight->getDiffuseColor(), e->m_lanternLight->getSpecularColor(), e->m_lanternLight->getRadius(), true, false, FLOAT3(0.0f, 1.0f, 0.0f)); this->m_originalDiffuse = this->m_lanternLight->getDiffuseColor(); this->m_originalSpecular = this->m_lanternLight->getSpecularColor(); } // Play death sound. int sound; switch(e->m_type) { case ServerEntity::HeroType: switch(e->m_subtype) { case Hero::RED_KNIGHT: switch(random(0, 2)) { case 0: sound = createSoundHandle("red_knight/RedKnight_Death_0.wav", false, true, e->m_startPos); break; case 1: sound = createSoundHandle("red_knight/RedKnight_Death_1.wav", false, true, e->m_startPos); break; case 2: sound = createSoundHandle("red_knight/RedKnight_Death_2.wav", false, true, e->m_startPos); break; } break; case Hero::ENGINEER: switch(random(0, 2)) { case 0: sound = createSoundHandle("engineer/Engineer_Death_0.wav", false, true, e->m_startPos); break; case 1: sound = createSoundHandle("engineer/Engineer_Death_1.wav", false, true, e->m_startPos); break; case 2: sound = createSoundHandle("engineer/Engineer_Death_2.wav", false, true, e->m_startPos); break; } break; case Hero::THE_MENTALIST: switch(random(0, 2)) { case 0: sound = createSoundHandle("mentalist/Mentalist_Death_0.wav", false, true, e->m_startPos); break; case 1: sound = createSoundHandle("mentalist/Mentalist_Death_1.wav", false, true, e->m_startPos); break; case 2: sound = createSoundHandle("mentalist/Mentalist_Death_2.wav", false, true, e->m_startPos); break; } break; case Hero::OFFICER: switch(random(0, 2)) { case 0: sound = createSoundHandle("officer/Officer_Death_0.wav", false, true, e->m_startPos); break; case 1: sound = createSoundHandle("officer/Officer_Death_1.wav", false, true, e->m_startPos); break; case 2: sound = createSoundHandle("officer/Officer_Death_2.wav", false, true, e->m_startPos); break; } break; case Hero::DOCTOR: switch(random(0, 2)) { case 0: sound = createSoundHandle("doctor/Doctor_Death_0.wav", false, true, e->m_startPos); break; case 1: sound = createSoundHandle("doctor/Doctor_Death_1.wav", false, true, e->m_startPos); break; case 2: sound = createSoundHandle("doctor/Doctor_Death_2.wav", false, true, e->m_startPos); break; } break; } break; case ServerEntity::EnemyType: switch(e->m_subtype) { case Enemy::IMP: sound = createSoundHandle("enemy/Monster_Imp_Death_0.wav", false, true, e->m_startPos); break; case Enemy::SHADE: sound = createSoundHandle("enemy/Monster_Shade_Death_0.wav", false, true, e->m_startPos); break; case Enemy::FROST_DEMON: sound = createSoundHandle("enemy/Monster_Frost_Death_0.wav", false, true, e->m_startPos); break; case Enemy::SPITTING_DEMON: sound = createSoundHandle("enemy/Monster_Spitting_Death_0.wav", false, true, e->m_startPos); break; case Enemy::HELLFIRE_STEED: sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos); break; case Enemy::SOUL_EATER_STEED: sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos); break; case Enemy::THUNDERSTEED: sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos); break; case Enemy::BRUTE_STEED: sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos); break; case Enemy::BOSS: sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos); break; } break; } SpeechManager::speakUltimate(_masterId, sound); deactivateSound(sound); } }