/** ** Initialize missile type. */ void MissileType::Init(void) { // // Resolve impact missiles and sounds. // if (!this->FiredSound.Name.empty()) { this->FiredSound.Sound = SoundForName(this->FiredSound.Name); } if (!this->ImpactSound.Name.empty()) { this->ImpactSound.Sound = SoundForName(this->ImpactSound.Name); } this->ImpactMissile = MissileTypeByIdent(this->ImpactName); this->SmokeMissile = MissileTypeByIdent(this->SmokeName); }
bool SoundConfig::MapSound() { if (!this->Name.empty()) { this->Sound = SoundForName(this->Name); } return this->Sound != NULL; }
/** ** Glue between c and scheme. Ask the sound system to associate a ** sound id to a sound name. ** ** @param l Lua state. */ static int CclSoundForName(lua_State *l) { CSound *id; const char *sound_name; LuaUserData *data; sound_name = LuaToString(l, -1); id = SoundForName(sound_name); data = (LuaUserData *)lua_newuserdata(l, sizeof(LuaUserData)); data->Type = LuaSoundType; data->Data = id; return 1; }
/** ** Lookup the sound id's for the game sounds. */ void InitSoundClient(void) { if (!SoundEnabled()) { // No sound enabled return; } // let's map game sounds, look if already setup in ccl. if (!GameSounds.PlacementError.Sound) { GameSounds.PlacementError.Sound = SoundForName(GameSounds.PlacementError.Name); } if (!GameSounds.PlacementSuccess.Sound) { GameSounds.PlacementSuccess.Sound = SoundForName(GameSounds.PlacementSuccess.Name); } if (!GameSounds.Click.Sound) { GameSounds.Click.Sound = SoundForName(GameSounds.Click.Name); } if (!GameSounds.Docking.Sound) { GameSounds.Docking.Sound = SoundForName(GameSounds.Docking.Name); } if (!GameSounds.BuildingConstruction.Sound) { GameSounds.BuildingConstruction.Sound = SoundForName(GameSounds.BuildingConstruction.Name); } if (!GameSounds.Rescue.Sound && !GameSounds.Rescue.Name.empty()) { GameSounds.Rescue.Sound = SoundForName(GameSounds.Rescue.Name); } if (!GameSounds.ChatMessage.Sound && !GameSounds.ChatMessage.Name.empty()) { GameSounds.ChatMessage.Sound = SoundForName(GameSounds.ChatMessage.Name); } int MapWidth = (UI.MapArea.EndX - UI.MapArea.X + TileSizeX) / TileSizeX; int MapHeight = (UI.MapArea.EndY - UI.MapArea.Y + TileSizeY) / TileSizeY; DistanceSilent = 3 * std::max(MapWidth, MapHeight); ViewPointOffset = std::max(MapWidth / 2, MapHeight / 2); }
/** ** Parse Spell. ** ** @param l Lua state. */ static int CclDefineSpell(lua_State *l) { std::string identname; SpellType *spell; const char *value; int args; int i; args = lua_gettop(l); identname = LuaToString(l, 1); spell = SpellTypeByIdent(identname); if (spell != NULL) { DebugPrint("Redefining spell-type `%s'\n" _C_ identname.c_str()); } else { spell = new SpellType(SpellTypeTable.size(), identname); for (std::vector<CUnitType *>::size_type i = 0; i < UnitTypes.size(); ++i) { // adjust array for caster already defined if (UnitTypes[i]->CanCastSpell) { char *newc = new char[(SpellTypeTable.size() + 1) * sizeof(char)]; memcpy(newc, UnitTypes[i]->CanCastSpell, SpellTypeTable.size() * sizeof(char)); delete[] UnitTypes[i]->CanCastSpell; UnitTypes[i]->CanCastSpell = newc; UnitTypes[i]->CanCastSpell[SpellTypeTable.size()] = 0; } if (UnitTypes[i]->AutoCastActive) { char *newc = new char[(SpellTypeTable.size() + 1) * sizeof(char)]; memcpy(newc, UnitTypes[i]->AutoCastActive, SpellTypeTable.size() * sizeof(char)); delete[] UnitTypes[i]->AutoCastActive; UnitTypes[i]->AutoCastActive = newc; UnitTypes[i]->AutoCastActive[SpellTypeTable.size()] = 0; } } SpellTypeTable.push_back(spell); } for (i = 1; i < args; ++i) { value = LuaToString(l, i + 1); ++i; if (!strcmp(value, "showname")) { spell->Name = LuaToString(l, i + 1); } else if (!strcmp(value, "manacost")) { spell->ManaCost = LuaToNumber(l, i + 1); } else if (!strcmp(value, "range")) { if (!lua_isstring(l, i + 1) && !lua_isnumber(l, i + 1)) { LuaError(l, "incorrect argument"); } if (lua_isstring(l, i + 1) && !strcmp(lua_tostring(l, i + 1), "infinite")) { spell->Range = INFINITE_RANGE; } else if (lua_isnumber(l, i + 1)) { spell->Range = static_cast<int>(lua_tonumber(l, i + 1)); } else { LuaError(l, "Invalid range"); } } else if (!strcmp(value, "repeat-cast")) { spell->RepeatCast = 1; --i; } else if (!strcmp(value, "target")) { value = LuaToString(l, i + 1); if (!strcmp(value, "self")) { spell->Target = TargetSelf; } else if (!strcmp(value, "unit")) { spell->Target = TargetUnit; } else if (!strcmp(value, "position")) { spell->Target = TargetPosition; } else { LuaError(l, "Unsupported spell target type tag: %s" _C_ value); } } else if (!strcmp(value, "action")) { int subargs; int k; if (!lua_istable(l, i + 1)) { LuaError(l, "incorrect argument"); } subargs = lua_objlen(l, i + 1); for (k = 0; k < subargs; ++k) { lua_rawgeti(l, i + 1, k + 1); spell->Action.push_back(CclSpellAction(l)); lua_pop(l, 1); } } else if (!strcmp(value, "condition")) { if (!spell->Condition) { spell->Condition = new ConditionInfo; } lua_pushvalue(l, i + 1); CclSpellCondition(l, spell->Condition); lua_pop(l, 1); } else if (!strcmp(value, "autocast")) { if (!spell->AutoCast) { spell->AutoCast = new AutoCastInfo(); } lua_pushvalue(l, i + 1); CclSpellAutocast(l, spell->AutoCast); lua_pop(l, 1); } else if (!strcmp(value, "ai-cast")) { if (!spell->AICast) { spell->AICast = new AutoCastInfo(); } lua_pushvalue(l, i + 1); CclSpellAutocast(l, spell->AICast); lua_pop(l, 1); } else if (!strcmp(value, "sound-when-cast")) { // Free the old name, get the new one spell->SoundWhenCast.Name = LuaToString(l, i + 1); spell->SoundWhenCast.Sound = SoundForName(spell->SoundWhenCast.Name); // Check for sound. if (!spell->SoundWhenCast.Sound) { spell->SoundWhenCast.Name.clear(); } } else if (!strcmp(value, "depend-upgrade")) { value = LuaToString(l, i + 1); spell->DependencyId = UpgradeIdByIdent(value); if (spell->DependencyId == -1) { lua_pushfstring(l, "Bad upgrade name: %s", value); } } else { LuaError(l, "Unsupported tag: %s" _C_ value); } } return 0; }