void ARX_SPEECH_Launch_No_Unicode_Seek(const std::string & text, Entity * io_source) { long mood = ANIM_TALK_NEUTRAL; long speechnum = ARX_SPEECH_AddSpeech(io_source, text, mood, ARX_SPEECH_FLAG_NOTEXT); if(speechnum >= 0) { aspeech[speechnum].scrpos = -1; aspeech[speechnum].es = NULL; aspeech[speechnum].ioscript = io_source; aspeech[speechnum].flags = 0; CinematicSpeech acs; acs.type = ARX_CINE_SPEECH_NONE; aspeech[speechnum].cine = acs; } }
static void strikeSpeak(Entity * io) { if(!StrikeAimtime()) { return; } const std::string * str; EntityHandle equiped = player.equiped[EQUIP_SLOT_WEAPON]; if(ValidIONum(equiped) && !entities[equiped]->strikespeech.empty()) { str = &entities[equiped]->strikespeech; } else if(!io->strikespeech.empty()) { str = &io->strikespeech; } else { return; } ARX_SPEECH_AddSpeech(io, *str, ANIM_TALK_NEUTRAL, ARX_SPEECH_FLAG_NOTEXT); }
void DispellFieldSpell::Launch() { m_duration = 10; long valid = 0, dispelled = 0; for(size_t n = 0; n < MAX_SPELLS; n++) { SpellBase * spell = spells[SpellHandle(n)]; if(!spell) { continue; } bool cancel = false; Vec3f pos; switch(spell->m_type) { case SPELL_CREATE_FIELD: { if(m_caster != PlayerEntityHandle || spell->m_caster == PlayerEntityHandle) { pos = static_cast<CreateFieldSpell *>(spell)->getPosition(); cancel = true; } break; } case SPELL_FIRE_FIELD: { pos = static_cast<FireFieldSpell *>(spell)->getPosition(); cancel = true; break; } case SPELL_ICE_FIELD: { pos = static_cast<IceFieldSpell *>(spell)->getPosition(); cancel = true; break; } default: break; } Entity * caster = entities[m_caster]; if(cancel && closerThan(pos, caster->pos, 400.f)) { valid++; if(spell->m_level <= m_level) { spells.endSpell(spell); dispelled++; } } } if(valid > dispelled) { // Some fileds could not be dispelled ARX_SPEECH_AddSpeech(entities.player(), "player_not_skilled_enough", ANIM_TALK_NEUTRAL, ARX_SPEECH_FLAG_NOTEXT); } if(dispelled > 0) { ARX_SOUND_PlaySFX(SND_SPELL_DISPELL_FIELD); } else { ARX_SOUND_PlaySFX(SND_MAGIC_FIZZLE, &m_caster_pos); } }