void InstanceScript::LoadObjectData(ObjectData const* creatureData, ObjectData const* gameObjectData) { if (creatureData) LoadObjectData(creatureData, _creatureInfo); if (gameObjectData) LoadObjectData(gameObjectData, _gameObjectInfo); TC_LOG_DEBUG("scripts", "InstanceScript::LoadObjectData: " SZFMTD " objects loaded.", _creatureInfo.size() + _gameObjectInfo.size()); }
instance_azjol_nerub_InstanceScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadObjectData(creatureData, nullptr); }
instance_sethekk_halls_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadObjectData(nullptr, gameObjectData); }
instance_black_temple_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadObjectData(creatureData, nullptr); LoadBossBoundaries(boundaries); }
instance_steam_vault_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadObjectData(nullptr, gameObjectData); DistillerState = 0; }
instance_azjol_nerub_InstanceScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadObjectData(creatureData, gameobjectData); }
instance_magtheridons_lair_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadBossBoundaries(boundaries); LoadObjectData(creatureData, gameObjectData); }
instance_blackwing_lair_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadObjectData(creatureData, nullptr); // Razorgore EggCount = 0; EggEvent = 0; }
instance_naxxramas_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadMinionData(minionData); LoadObjectData(nullptr, objectData); minHorsemenDiedTime = 0; maxHorsemenDiedTime = 0; AbominationCount = 0; CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT; playerDied = 0; }
instance_naxxramas_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadObjectData(nullptr, objectData); hadSapphironBirth = false; CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT; playerDied = 0; nextFroggerWave = 0; events.ScheduleEvent(EVENT_SUMMON_FROGGER_WAVE, Seconds(1)); }
instance_naxxramas_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadObjectData(nullptr, objectData); AbominationCount = 0; hadAnubRekhanGreet = false; hadFaerlinaGreet = false; hadThaddiusGreet = false; hadSapphironBirth = false; CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT; playerDied = 0; }
// load all data specified in control file ------------------------------------ // void LoadData( char *cfn, int dispinfo ) { ASSERT( cfn != NULL ); ctrl_file_name = cfn; display_info = FALSE; //dispinfo; //NOTE: // we currently disable loader message output // at all times, since most data is now loaded // via console scripts and these messages would // just be irritating. ParseCtrlFile( PARSE_EVERYTHING ); ReadPalettes(); ReadTextures(); ReadSamples(); LoadObjectData(); ReadBitmapsAndCharsets(); }
// reload graphics detail-dependent data files -------------------------------- // void ReloadDetailData( char *cfn ) { ASSERT( cfn != NULL ); ASSERT( NumObjClasses == NumLoadedObjects ); for ( int oid = NumLoadedObjects - 1; oid >= 0; oid-- ) { ASSERT( ObjClasses[ oid ] ); FREEMEM( ObjClasses[ oid ] ); ObjClasses[ oid ] = NULL; } ctrl_file_name = cfn; display_info = FALSE; ParseCtrlFile( PARSE_OBJECTS ); LoadObjectData(); // re-exec startup script ExecStartupScript( FALSE ); }
instance_blackrock_caverns_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadObjectData(creatureData, nullptr); }
//----------------------------------------------------------------------------- // Конструктор, инициализация всех переменных //----------------------------------------------------------------------------- void CPirateShip::Create(int PirateShipNum) { ObjectStatus = 1; // чужой ObjectType = 4; ObjectCreationType = PirateShipNum; PromptDrawDist2 = 100.0f; if (PirateShipNum > 5) PromptDrawDist2 = 20000.0f; // большие корабли пиратов ResistanceHull = 1.0f; ResistanceSystems = 1.0f; MaxSpeed = 20.0f; MaxAcceler = 20.0f; MaxSpeedRotate = 40.0f; //EngineSoundNum = 0; EngineLeftQuantity = 0; EngineRightQuantity = 0; Strength = StrengthStart = PresetPirateShipData[PirateShipNum-1].Strength/GameNPCArmorPenalty; WeaponQuantity = PresetPirateShipData[PirateShipNum-1].WeaponQuantity; BossWeaponQuantity = PresetPirateShipData[PirateShipNum-1].BossWeaponQuantity; EngineQuantity = PresetPirateShipData[PirateShipNum-1].EngineQuantity; LoadObjectData(PresetPirateShipData[PirateShipNum-1].Name, this, 0, 2.0f, PresetPirateShipData[PirateShipNum-1].NeedTangentAndBinormal && Setup.UseGLSL); // всегда только эти текстуры for (int i=0; i<DrawObjectQuantity; i++) { Texture[i] = vw_FindTextureByName(PresetPirateShipData[PirateShipNum-1].TextureName); if (PresetPirateShipData[PirateShipNum-1].NeedTangentAndBinormal && Setup.UseGLSL) NormalMap[i] = vw_FindTextureByName(PresetPirateShipData[PirateShipNum-1].NormalMapName); } // начальные установки для оружия if (WeaponQuantity > 0) { WeaponSetFire = new bool[WeaponQuantity]; WeaponLocation = new VECTOR3D[WeaponQuantity]; WeaponType = new int[WeaponQuantity]; Weapon = new CWeapon*[WeaponQuantity]; for (int i=0; i<WeaponQuantity; i++) { WeaponSetFire[i] = false; WeaponType[i] = 1; Weapon[i] = 0; } } if (BossWeaponQuantity > 0) { BossWeaponSetFire = new bool[BossWeaponQuantity]; BossWeaponLocation = new VECTOR3D[BossWeaponQuantity]; BossWeaponType = new int[BossWeaponQuantity]; BossWeapon = new CWeapon*[BossWeaponQuantity]; for (int i=0; i<BossWeaponQuantity; i++) { BossWeaponSetFire[i] = false; BossWeaponType[i] = 1; BossWeapon[i] = 0; } } // начальные установки для двигателей EngineLocation = new VECTOR3D[EngineQuantity]; Engine = new eParticleSystem*[EngineQuantity]; for (int i=0; i<EngineQuantity; i++) Engine[i] = 0; // перебираем и ставим нужные данные switch (PirateShipNum) { case 1: MaxSpeed = 30.0f; MaxAcceler = 30.0f; // оружие WeaponLocation[0] = VECTOR3D(1.8f, -1.2f, 6.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(204); WeaponLocation[1] = VECTOR3D(-1.8f, -1.2f, 6.0f); Weapon[1] = new CWeapon; Weapon[1]->Create(204); Weapon[1]->SoundNum = 0; WeaponFireType = 1; // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(0.9f, 1.6f, -5.4f); SetPirateShipEngine(Engine[0], 1); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-0.9f, 1.6f, -5.4f); SetPirateShipEngine(Engine[1], 1); break; case 2: MaxSpeed = 50.0f; MaxAcceler = 50.0f; // оружие WeaponLocation[0] = VECTOR3D(0.0f, -2.0f, 2.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(205); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(1.1f, 0.5f, -5.7f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-1.1f, 0.5f, -5.7f); SetPirateShipEngine(Engine[1], 2); break; case 3: MaxSpeed = 30.0f; MaxAcceler = 30.0f; // оружие WeaponLocation[0] = VECTOR3D(3.0f, -0.2f, -0.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(204); WeaponLocation[1] = VECTOR3D(-3.0f, -0.2f, -0.5f); Weapon[1] = new CWeapon; Weapon[1]->Create(204); WeaponLocation[2] = VECTOR3D(2.0f, -0.2f, 0.0f); Weapon[2] = new CWeapon; Weapon[2]->Create(206); WeaponLocation[3] = VECTOR3D(-2.0f, -0.2f, 0.0f); Weapon[3] = new CWeapon; Weapon[3]->Create(206); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(1.0f, 1.8f, -1.2f); SetPirateShipEngine(Engine[0], 1); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-1.0f, 1.8f, -1.2f); SetPirateShipEngine(Engine[1], 1); break; case 4: MaxSpeed = 30.0f; MaxAcceler = 30.0f; // оружие WeaponLocation[0] = VECTOR3D(4.3f, -0.4f, -0.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(211); WeaponLocation[1] = VECTOR3D(-4.3f, -0.4f, -0.5f); Weapon[1] = new CWeapon; Weapon[1]->Create(211); WeaponLocation[2] = VECTOR3D(3.0f, -0.4f, 0.5f); Weapon[2] = new CWeapon; Weapon[2]->Create(205); WeaponLocation[3] = VECTOR3D(-3.0f, -0.4f, 0.5f); Weapon[3] = new CWeapon; Weapon[3]->Create(205); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(1.3f, 1.9f, -1.7f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-1.3f, 1.9f, -1.7f); SetPirateShipEngine(Engine[1], 2); break; case 5: MaxSpeed = 30.0f; MaxAcceler = 30.0f; // оружие WeaponLocation[0] = VECTOR3D(1.0f, 4.2f, -5.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(211); WeaponLocation[1] = VECTOR3D(-1.0f, 4.2f, -5.5f); Weapon[1] = new CWeapon; Weapon[1]->Create(211); WeaponLocation[2] = VECTOR3D(0.5f, -1.8f, 5.0f); Weapon[2] = new CWeapon; Weapon[2]->Create(211); WeaponLocation[3] = VECTOR3D(-0.5f, -1.8f, 5.0f); Weapon[3] = new CWeapon; Weapon[3]->Create(211); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(5.8f, 6.5f-4.6f, 0.0f); SetPirateShipEngine(Engine[0], 3); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-5.8f, 6.5f-4.6f, 0.0f); SetPirateShipEngine(Engine[1], 3); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(5.8f, 7.3f-4.6f, 0.0f); SetPirateShipEngine(Engine[2], 4); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-5.8f, 7.3f-4.6f, 0.0f); SetPirateShipEngine(Engine[3], 4); Engine[4] = new eParticleSystem; EngineLocation[4] = VECTOR3D(5.8f, 6.1f-4.6f, -2.3f); SetPirateShipEngine(Engine[4], 1); Engine[4]->Direction = VECTOR3D(0.0f, -0.2f, -0.8f); Engine[5] = new eParticleSystem; EngineLocation[5] = VECTOR3D(-5.8f, 6.1f-4.6f, -2.3f); SetPirateShipEngine(Engine[5], 1); Engine[5]->Direction = VECTOR3D(0.0f, -0.2f, -0.8f); break; case 6: // оружие WeaponLocation[0] = VECTOR3D(0.0f, 2.2f, -0.2f); Weapon[0] = new CWeapon; Weapon[0]->Create(202); BossWeaponLocation[0] = VECTOR3D(5.4f, 1.0f, 2.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(209); BossWeaponLocation[1] = VECTOR3D(-5.4f, 1.0f, 2.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(209); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(1.7f, 6.6f-3.83f, -14.2f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-1.7f, 6.6f-3.83f, -14.2f); SetPirateShipEngine(Engine[1], 2); break; case 7: // оружие WeaponLocation[0] = VECTOR3D(0.0f, 2.4f, -0.2f); Weapon[0] = new CWeapon; Weapon[0]->Create(202); BossWeaponLocation[0] = VECTOR3D(9.5f, 1.3f, 2.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(210); BossWeaponLocation[1] = VECTOR3D(-9.5f, 1.3f, 2.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(210); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(2.2f, 7.6f-5.25f, -14.8f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-2.2f, 7.6f-5.25f, -14.8f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(17.2f, 6.8f-5.25f, -9.0f); SetPirateShipEngine(Engine[2], 5); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-17.2f, 6.8f-5.25f, -9.0f); SetPirateShipEngine(Engine[3], 5); break; case 8: // оружие WeaponLocation[0] = VECTOR3D(0.0f, 2.4f, -0.2f); Weapon[0] = new CWeapon; Weapon[0]->Create(202); BossWeaponLocation[0] = VECTOR3D(9.1f, 1.3f, 2.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(206); BossWeaponLocation[1] = VECTOR3D(9.4f, 1.0f, 2.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(206); BossWeaponLocation[2] = VECTOR3D(9.1f, 0.7f, 2.0f); BossWeapon[2] = new CWeapon; BossWeapon[2]->Create(206); BossWeaponLocation[3] = VECTOR3D(-9.1f, 1.3f, 2.0f); BossWeapon[3] = new CWeapon; BossWeapon[3]->Create(206); BossWeaponLocation[4] = VECTOR3D(-9.4f, 1.0f, 2.0f); BossWeapon[4] = new CWeapon; BossWeapon[4]->Create(206); BossWeaponLocation[5] = VECTOR3D(-9.1f, 0.7f, 2.0f); BossWeapon[5] = new CWeapon; BossWeapon[5]->Create(206); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 6.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(4.5f, 6.3f-3.62f, -12.5f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-4.5f, 6.3f-3.62f, -12.5f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(9.2f, 4.4f-3.62f, -5.6f); SetPirateShipEngine(Engine[2], 5); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-9.2f, 4.4f-3.62f, -5.6f); SetPirateShipEngine(Engine[3], 5); break; case 9: // оружие WeaponLocation[0] = VECTOR3D(0.0f, 4.2f, 7.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(201); WeaponLocation[1] = VECTOR3D(0.0f, 4.2f, 3.5f); Weapon[1] = new CWeapon; Weapon[1]->Create(201); Weapon[1]->SetRotation(VECTOR3D(0,180,0)); WeaponLocation[2] = VECTOR3D(0.0f, 3.4f, -5.0f); Weapon[2] = new CWeapon; Weapon[2]->Create(202); BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 9.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(205); BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 9.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(205); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(1.4f, 8.7f-4.9f, -20.4f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-1.4f, 8.7f-4.9f, -20.4f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(4.7f, 7.0f-4.9f, 0.0f); SetPirateShipEngine(Engine[2], 2); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-4.7f, 7.0f-4.9f, 0.0f); SetPirateShipEngine(Engine[3], 2); Engine[4] = new eParticleSystem; EngineLocation[4] = VECTOR3D(7.5f, 6.8f-4.9f, 0.0f); SetPirateShipEngine(Engine[4], 2); Engine[5] = new eParticleSystem; EngineLocation[5] = VECTOR3D(-7.5f, 6.8f-4.9f, 0.0f); SetPirateShipEngine(Engine[5], 2); break; case 10: // оружие WeaponLocation[0] = VECTOR3D(0.0f, 4.4f, 6.8f); Weapon[0] = new CWeapon; Weapon[0]->Create(201); WeaponLocation[1] = VECTOR3D(0.0f, 4.4f, 2.6f); Weapon[1] = new CWeapon; Weapon[1]->Create(201); Weapon[1]->SetRotation(VECTOR3D(0,180,0)); WeaponLocation[2] = VECTOR3D(0.0f, 2.6f, -7.0f); Weapon[2] = new CWeapon; Weapon[2]->Create(202); WeaponLocation[3] = VECTOR3D(0.0f, 2.6f, -16.0f); Weapon[3] = new CWeapon; Weapon[3]->Create(201); Weapon[3]->SetRotation(VECTOR3D(0,180,0)); BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 8.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(205); BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 8.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(205); BossWeaponLocation[2] = VECTOR3D(16.5f, 2.7f, 7.5f); BossWeapon[2] = new CWeapon; BossWeapon[2]->Create(205); BossWeaponLocation[3] = VECTOR3D(-16.5f, 2.7f, 7.5f); BossWeapon[3] = new CWeapon; BossWeapon[3]->Create(205); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(3.8f, 5.4f-4.29f, -19.5f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-3.8f, 5.4f-4.29f, -19.5f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(5.8f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[2], 2); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-5.8f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[3], 2); Engine[4] = new eParticleSystem; EngineLocation[4] = VECTOR3D(8.0f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[4], 2); Engine[5] = new eParticleSystem; EngineLocation[5] = VECTOR3D(-8.0f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[5], 2); Engine[6] = new eParticleSystem; EngineLocation[6] = VECTOR3D(20.0f, 5.0f-4.29f, -3.6f); SetPirateShipEngine(Engine[6], 2); Engine[7] = new eParticleSystem; EngineLocation[7] = VECTOR3D(-20.0f, 5.0f-4.29f, -3.6f); SetPirateShipEngine(Engine[7], 2); break; case 11: // оружие BossWeaponLocation[0] = VECTOR3D(5.4f, 1.0f, 2.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(209); BossWeaponLocation[1] = VECTOR3D(-5.4f, 1.0f, 2.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(209); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(1.7f, 6.6f-3.83f, -14.2f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-1.7f, 6.6f-3.83f, -14.2f); SetPirateShipEngine(Engine[1], 2); break; case 12: // оружие BossWeaponLocation[0] = VECTOR3D(9.5f, 1.3f, 2.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(210); BossWeaponLocation[1] = VECTOR3D(-9.5f, 1.3f, 2.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(210); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(2.2f, 7.6f-5.25f, -14.8f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-2.2f, 7.6f-5.25f, -14.8f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(17.2f, 6.8f-5.25f, -9.0f); SetPirateShipEngine(Engine[2], 5); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-17.2f, 6.8f-5.25f, -9.0f); SetPirateShipEngine(Engine[3], 5); break; case 13: // оружие BossWeaponLocation[0] = VECTOR3D(9.1f, 1.3f, 2.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(206); BossWeaponLocation[1] = VECTOR3D(9.4f, 1.0f, 2.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(206); BossWeaponLocation[2] = VECTOR3D(9.1f, 0.7f, 2.0f); BossWeapon[2] = new CWeapon; BossWeapon[2]->Create(206); BossWeaponLocation[3] = VECTOR3D(-9.1f, 1.3f, 2.0f); BossWeapon[3] = new CWeapon; BossWeapon[3]->Create(206); BossWeaponLocation[4] = VECTOR3D(-9.4f, 1.0f, 2.0f); BossWeapon[4] = new CWeapon; BossWeapon[4]->Create(206); BossWeaponLocation[5] = VECTOR3D(-9.1f, 0.7f, 2.0f); BossWeapon[5] = new CWeapon; BossWeapon[5]->Create(206); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 6.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(4.5f, 6.3f-3.62f, -12.5f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-4.5f, 6.3f-3.62f, -12.5f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(9.2f, 4.4f-3.62f, -5.6f); SetPirateShipEngine(Engine[2], 5); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-9.2f, 4.4f-3.62f, -5.6f); SetPirateShipEngine(Engine[3], 5); break; case 14: // оружие BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 9.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(205); BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 9.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(205); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(1.4f, 8.7f-4.9f, -20.4f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-1.4f, 8.7f-4.9f, -20.4f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(4.7f, 7.0f-4.9f, 0.0f); SetPirateShipEngine(Engine[2], 2); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-4.7f, 7.0f-4.9f, 0.0f); SetPirateShipEngine(Engine[3], 2); Engine[4] = new eParticleSystem; EngineLocation[4] = VECTOR3D(7.5f, 6.8f-4.9f, 0.0f); SetPirateShipEngine(Engine[4], 2); Engine[5] = new eParticleSystem; EngineLocation[5] = VECTOR3D(-7.5f, 6.8f-4.9f, 0.0f); SetPirateShipEngine(Engine[5], 2); break; case 15: // оружие BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 8.0f); BossWeapon[0] = new CWeapon; BossWeapon[0]->Create(205); BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 8.0f); BossWeapon[1] = new CWeapon; BossWeapon[1]->Create(205); BossWeaponLocation[2] = VECTOR3D(16.5f, 2.7f, 7.5f); BossWeapon[2] = new CWeapon; BossWeapon[2]->Create(205); BossWeaponLocation[3] = VECTOR3D(-16.5f, 2.7f, 7.5f); BossWeapon[3] = new CWeapon; BossWeapon[3]->Create(205); // фларе WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f); WeaponFlare = new CWeapon; WeaponFlare->Create(203); // двигатели Engine[0] = new eParticleSystem; EngineLocation[0] = VECTOR3D(3.8f, 5.4f-4.29f, -19.5f); SetPirateShipEngine(Engine[0], 2); Engine[1] = new eParticleSystem; EngineLocation[1] = VECTOR3D(-3.8f, 5.4f-4.29f, -19.5f); SetPirateShipEngine(Engine[1], 2); Engine[2] = new eParticleSystem; EngineLocation[2] = VECTOR3D(5.8f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[2], 2); Engine[3] = new eParticleSystem; EngineLocation[3] = VECTOR3D(-5.8f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[3], 2); Engine[4] = new eParticleSystem; EngineLocation[4] = VECTOR3D(8.0f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[4], 2); Engine[5] = new eParticleSystem; EngineLocation[5] = VECTOR3D(-8.0f, 6.0f-4.29f, -0.9f); SetPirateShipEngine(Engine[5], 2); Engine[6] = new eParticleSystem; EngineLocation[6] = VECTOR3D(20.0f, 5.0f-4.29f, -3.6f); SetPirateShipEngine(Engine[6], 2); Engine[7] = new eParticleSystem; EngineLocation[7] = VECTOR3D(-20.0f, 5.0f-4.29f, -3.6f); SetPirateShipEngine(Engine[7], 2); break; default: fprintf(stderr, "Wrong PirateShipNum!"); return; } for (int i=0; i< EngineQuantity; i++) { Engine[i]->SetStartLocation(EngineLocation[i]); // находим кол-во внутренних источников света if (Engine[i]->Light != 0) InternalLights++; } // находим все данные по геометрии ::CObject3D::InitByDrawObjectList(); }
//----------------------------------------------------------------------------- // Конструктор, инициализация всех переменных //----------------------------------------------------------------------------- void CBigAsteroid::Create(int AsteroidNum) { ObjectStatus = 1; // чужой ObjectType = 15; // задали первичный, нужно случайным образом найти if (AsteroidNum == 1 || AsteroidNum == 2) { int Rand = 1 + vw_iRandNum(4); if (Rand < 1) Rand = 1; if (Rand > 5) Rand = 5; AsteroidNum = AsteroidNum*10 + Rand; } ObjectCreationType = AsteroidNum; // перебираем и ставим нужные данные switch (AsteroidNum) { case 11: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-01.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case9next; case 12: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-02.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case9next; case 13: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-03.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case9next; case 14: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-04.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case9next; case 15: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-05.VW3D", this, 0, -1.0f, Setup.UseGLSL); case9next: //Speed = 25.0f; RotationSpeed.x = 10.0f + 10.0f*vw_Randf0; RotationSpeed.y = 2.0f + 20.0f*vw_Randf0; Texture[0] = vw_FindTextureByName("DATA/MODELS/PLANET/d_class3.tga"); TextureIllum[0] = 0; NormalMap[0] = vw_FindTextureByName("DATA/MODELS/NORMALMAP/d_class3_nm.tga"); break; // те же астероиды, но они летят сверху... case 21: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-01.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case10next; case 22: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-02.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case10next; case 23: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-03.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case10next; case 24: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-04.VW3D", this, 0, -1.0f, Setup.UseGLSL); goto case10next; case 25: LoadObjectData("DATA/MODELS/SPACE/bigasteroid-05.VW3D", this, 0, -1.0f, Setup.UseGLSL); case10next: //Speed = 25.0f; RotationSpeed.x = 10.0f + 10.0f*vw_Randf0; RotationSpeed.y = 2.0f + 20.0f*vw_Randf0; Texture[0] = vw_FindTextureByName("DATA/MODELS/PLANET/d_class3.tga"); TextureIllum[0] = 0; NormalMap[0] = vw_FindTextureByName("DATA/MODELS/NORMALMAP/d_class3_nm.tga"); break; } // находим все данные по геометрии ::CObject3D::InitByDrawObjectList(); }
//----------------------------------------------------------------------------- // Конструктор, инициализация всех переменных //----------------------------------------------------------------------------- void CWheeled::Create(int WheeledNum) { ObjectType = 5; ObjectCreationType = WheeledNum; MaxSpeed = 20.0f; MaxAcceler = 5.0f; MaxSpeedRotate = 20.0f; LoadObjectData(PresetWheeledData[WheeledNum-1].Name, this, 0, 2.0f); for (int i=0; i<DrawObjectQuantity; i++) { Texture[i] = vw_FindTextureByName(PresetWheeledData[WheeledNum-1].TextureName); } ResistanceHull = 1.0f; ResistanceSystems = 1.0f; SpeedToRotate = PresetWheeledData[WheeledNum-1].SpeedToRotate; Strength = StrengthStart = PresetWheeledData[WheeledNum-1].Strength/GameNPCArmorPenalty; WeaponQuantity = PresetWheeledData[WheeledNum-1].WeaponQuantity; // начальные установки для оружия WeaponSetFire = new bool[WeaponQuantity]; WeaponLocation = new VECTOR3D[WeaponQuantity]; Weapon = new CWeapon*[WeaponQuantity]; WeaponBound = new VECTOR3D[WeaponQuantity]; for (int i=0; i<WeaponQuantity; i++) { WeaponSetFire[i] = false; Weapon[i] = 0; } // установка доп. текстуры и других настроек для каждой модели switch (WheeledNum) { case 1: WeaponLocation[0] = VECTOR3D(0.3f, 4.5f, -1.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(206); WeaponLocation[1] = VECTOR3D(-0.3f, 4.5f, -1.5f); Weapon[1] = new CWeapon; Weapon[1]->Create(206); WeaponLocation[2] = VECTOR3D(0.9f, 4.5f, -1.5f); Weapon[2] = new CWeapon; Weapon[2]->Create(206); WeaponLocation[3] = VECTOR3D(-0.9f, 4.5f, -1.5f); Weapon[3] = new CWeapon; Weapon[3]->Create(206); WeaponFireType = 3; WheelQuantity = 4; WheelObjectsNum = new int[4]; WheelObjectsNum[0] = 0; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelRotateQuantity = 2; WheelRotateObjectsNum = new int[2]; WheelRotateObjectsNum[0] = 3; WheelRotateObjectsNum[1] = 4; MaxWheelRotateAngle = 30.0f; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 5; TargetVertObjectMaxAngle = 30.0f; break; case 2: WeaponLocation[0] = VECTOR3D(1.3f, 3.5f, -1.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(206); WeaponLocation[1] = VECTOR3D(-1.3f, 3.5f, -1.5f); Weapon[1] = new CWeapon; Weapon[1]->Create(206); WeaponFireType = 3; DoNotCalculateRotation = true; WheelQuantity = 4; WheelObjectsNum = new int[4]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelRotateQuantity = 2; WheelRotateObjectsNum = new int[2]; WheelRotateObjectsNum[0] = 1; WheelRotateObjectsNum[1] = 4; MaxWheelRotateAngle = 20.0f; break; case 3: WeaponLocation[0] = VECTOR3D(0.8f, 4.2f, -1.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(204); WeaponLocation[1] = VECTOR3D(-0.8f, 4.2f, -1.0f); Weapon[1] = new CWeapon; Weapon[1]->Create(204); WeaponFireType = 2; WheelQuantity = 4; WheelObjectsNum = new int[4]; WheelObjectsNum[0] = 0; WheelObjectsNum[1] = 1; WheelObjectsNum[2] = 2; WheelObjectsNum[3] = 5; WheelRotateQuantity = 2; WheelRotateObjectsNum = new int[2]; WheelRotateObjectsNum[0] = 0; WheelRotateObjectsNum[1] = 1; MaxWheelRotateAngle = 20.0f; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 3; TargetHorizObject[1] = 6; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 6; TargetVertObjectMaxAngle = 60.0f; break; case 4: WeaponLocation[0] = VECTOR3D(0.0f, 4.5f, -4.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(207); WheelQuantity = 4; WheelObjectsNum = new int[4]; WheelObjectsNum[0] = 0; WheelObjectsNum[1] = 1; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelRotateQuantity = 2; WheelRotateObjectsNum = new int[2]; WheelRotateObjectsNum[0] = 0; WheelRotateObjectsNum[1] = 3; MaxWheelRotateAngle = 20.0f; break; case 5: WeaponLocation[0] = VECTOR3D(0.0f, 4.5f, -4.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(208); WheelQuantity = 4; WheelObjectsNum = new int[4]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelRotateQuantity = 2; WheelRotateObjectsNum = new int[2]; WheelRotateObjectsNum[0] = 1; WheelRotateObjectsNum[1] = 2; MaxWheelRotateAngle = 30.0f; break; case 6: WeaponLocation[0] = VECTOR3D(0.0f, 6.0f, -3.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(204); WheelQuantity = 4; WheelObjectsNum = new int[4]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelRotateQuantity = 2; WheelRotateObjectsNum = new int[2]; WheelRotateObjectsNum[0] = 1; WheelRotateObjectsNum[1] = 4; MaxWheelRotateAngle = 30.0f; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 5; TargetHorizObject[1] = 6; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 6; TargetVertObjectMaxAngle = 40.0f; break; case 7: WeaponLocation[0] = VECTOR3D(0.1f, 5.0f, -1.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(204); WeaponLocation[1] = VECTOR3D(-0.1f, 5.0f, -1.0f); Weapon[1] = new CWeapon; Weapon[1]->Create(204); WeaponFireType = 2; WheelQuantity = 4; WheelObjectsNum = new int[4]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelRotateQuantity = 2; WheelRotateObjectsNum = new int[2]; WheelRotateObjectsNum[0] = 1; WheelRotateObjectsNum[1] = 4; MaxWheelRotateAngle = 20.0f; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 5; TargetHorizObject[1] = 6; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 6; TargetVertObjectMaxAngle = 40.0f; break; case 8: WeaponLocation[0] = VECTOR3D(1.5f, 5.2f, 7.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(210); WeaponLocation[1] = VECTOR3D(-1.5f, 5.2f, 7.0f); Weapon[1] = new CWeapon; Weapon[1]->Create(210); WeaponFireType = 3; WheelQuantity = 8; WheelObjectsNum = new int[8]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 3; WheelObjectsNum[2] = 4; WheelObjectsNum[3] = 5; WheelObjectsNum[4] = 6; WheelObjectsNum[5] = 7; WheelObjectsNum[6] = 8; WheelObjectsNum[7] = 9; WheelRotateQuantity = 4; WheelRotateObjectsNum = new int[4]; WheelRotateObjectsNum[0] = 1; WheelRotateObjectsNum[1] = 3; WheelRotateObjectsNum[2] = 6; WheelRotateObjectsNum[3] = 7; MaxWheelRotateAngle = 20.0f; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 2; TargetVertObjectMaxAngle = 90.0f; break; } // находим все данные по геометрии ::CObject3D::InitByDrawObjectList(); // установка остальных параметров девиации DeviationOn = false; DeviationObjQuantity = WheelQuantity; Deviation = new VECTOR3D[DeviationObjQuantity]; NeedDeviation = new float[DeviationObjQuantity]; CurentDeviation = new float[DeviationObjQuantity]; CurentDeviationSum = new float[DeviationObjQuantity]; DeviationObjNum = new int[DeviationObjQuantity]; for (int i=0; i<DeviationObjQuantity; i++) { Deviation[i] = VECTOR3D(0.0f, 1.0f, 0.0f); NeedDeviation[i] = vw_Randf0*0.1f; CurentDeviation[i] = CurentDeviationSum[i] = 0.0f; DeviationObjNum[i] = WheelObjectsNum[i]; } // делаем сдвиг поворота колес, чтобы смотрелось естественнее for (int i=0; i<WheelQuantity; i++) DrawObjectList[WheelObjectsNum[i]].Rotation.x = vw_fRandNum(360.0f); // вычисляем данные для нахождения точки стрельбы if (TargetHorizObject != 0) { BaseBound = DrawObjectList[TargetHorizObject[0]].Location; } if (TargetVertObject != 0) { if (TargetHorizObject != 0) { MiddleBound = DrawObjectList[TargetVertObject[0]].Location - DrawObjectList[TargetHorizObject[0]].Location; } else { MiddleBound = DrawObjectList[TargetVertObject[0]].Location; } } if (WeaponBound != 0) for (int i=0; i<WeaponQuantity; i++) { if (TargetVertObject != 0) { WeaponBound[i] = WeaponLocation[i] - DrawObjectList[TargetVertObject[0]].Location; } else if (TargetHorizObject != 0) { WeaponBound[i] = WeaponLocation[i] - DrawObjectList[TargetHorizObject[0]].Location; } else { WeaponBound[i] = WeaponLocation[i]; } } }
//----------------------------------------------------------------------------- // Конструктор, инициализация всех переменных //----------------------------------------------------------------------------- void CTracked::Create(int TrackedNum) { ObjectType = 5; MaxSpeed = 20.0f; MaxAcceler = 5.0f; MaxSpeedRotate = 20.0f; ObjectCreationType = TrackedNum; // ставим без оптимизации, иначе не увидим гусениц NeedCullFaces = false; LoadObjectData(PresetTrackedData[TrackedNum-1].Name, this, 0, 2.0f); for (int i=0; i<DrawObjectQuantity; i++) { Texture[i] = vw_FindTextureByName(PresetTrackedData[TrackedNum-1].TextureName); } ResistanceHull = 1.0f; ResistanceSystems = 1.0f; SpeedToRotate = PresetTrackedData[TrackedNum-1].SpeedToRotate; Strength = StrengthStart = PresetTrackedData[TrackedNum-1].Strength/GameNPCArmorPenalty; WeaponQuantity = PresetTrackedData[TrackedNum-1].WeaponQuantity; // начальные установки для оружия WeaponSetFire = new bool[WeaponQuantity]; WeaponLocation = new VECTOR3D[WeaponQuantity]; Weapon = new CWeapon*[WeaponQuantity]; WeaponBound = new VECTOR3D[WeaponQuantity]; for (int i=0; i<WeaponQuantity; i++) { WeaponSetFire[i] = false; Weapon[i] = 0; } // установка доп. текстуры и других настроек для каждой модели switch (TrackedNum) { case 1: WeaponLocation[0] = VECTOR3D(0.0f, 5.5f, 9.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(211); WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 2; WheelObjectsNum[1] = 3; WheelObjectsNum[2] = 4; WheelObjectsNum[3] = 6; WheelObjectsNum[4] = 7; WheelObjectsNum[5] = 8; WheelObjectsNum[6] = 9; WheelObjectsNum[7] = 10; WheelObjectsNum[8] = 11; WheelObjectsNum[9] = 12; WheelObjectsNum[10] = 13; WheelObjectsNum[11] = 14; WheelObjectsNum[12] = 15; WheelObjectsNum[13] = 16; WheelObjectsNum[14] = 17; WheelObjectsNum[15] = 18; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 1; TargetHorizObject[1] = 5; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 5; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 19; Texture[19] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 2: WeaponLocation[0] = VECTOR3D(0.1f, 6.1f, -0.4f); Weapon[0] = new CWeapon; Weapon[0]->Create(204); WeaponLocation[1] = VECTOR3D(-0.1f, 6.1f, -0.4f); Weapon[1] = new CWeapon; Weapon[1]->Create(204); WeaponFireType = 2; WheelQuantity = 10; WheelObjectsNum = new int[10]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 8; WheelObjectsNum[8] = 9; WheelObjectsNum[9] = 10; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 11; TargetHorizObject[1] = 12; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 12; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 13; Texture[13] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 3: WeaponLocation[0] = VECTOR3D(0.0f, 5.2f, 3.7f); Weapon[0] = new CWeapon; Weapon[0]->Create(213); WheelQuantity = 14; WheelObjectsNum = new int[14]; WheelObjectsNum[0] = 0; WheelObjectsNum[1] = 1; WheelObjectsNum[2] = 2; WheelObjectsNum[3] = 3; WheelObjectsNum[4] = 4; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 10; WheelObjectsNum[8] = 11; WheelObjectsNum[9] = 12; WheelObjectsNum[10] = 13; WheelObjectsNum[11] = 14; WheelObjectsNum[12] = 15; WheelObjectsNum[13] = 16; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 8; TargetHorizObject[1] = 9; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 9; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 17; Texture[17] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 4: WeaponLocation[0] = VECTOR3D(0.0f, 5.3f, 6.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(208); WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 2; WheelObjectsNum[1] = 3; WheelObjectsNum[2] = 4; WheelObjectsNum[3] = 5; WheelObjectsNum[4] = 6; WheelObjectsNum[5] = 7; WheelObjectsNum[6] = 8; WheelObjectsNum[7] = 9; WheelObjectsNum[8] = 10; WheelObjectsNum[9] = 11; WheelObjectsNum[10] = 12; WheelObjectsNum[11] = 13; WheelObjectsNum[12] = 14; WheelObjectsNum[13] = 15; WheelObjectsNum[14] = 16; WheelObjectsNum[15] = 17; TargetHorizObjectQuantity = 3; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 18; TargetHorizObject[1] = 19; TargetHorizObject[2] = 20; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 19; //TargetVertObject[1] = 20; TargetVertObjectMaxAngle = 50.0f; DrawObjectList[20].Location.z -= 1.0f; TrackObjectNum = 21; Texture[21] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 5: WeaponLocation[0] = VECTOR3D(0.0f, 5.8f, 4.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(208); WheelQuantity = 14; WheelObjectsNum = new int[14]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 10; WheelObjectsNum[8] = 11; WheelObjectsNum[9] = 12; WheelObjectsNum[10] = 13; WheelObjectsNum[11] = 14; WheelObjectsNum[12] = 15; WheelObjectsNum[13] = 16; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 9; TargetHorizObject[1] = 8; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 8; TargetVertObjectMaxAngle = 30.0f; TrackObjectNum = 17; Texture[17] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 6: WeaponLocation[0] = VECTOR3D(0.0f, 4.9f, 4.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(211); WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 2; WheelObjectsNum[1] = 3; WheelObjectsNum[2] = 4; WheelObjectsNum[3] = 5; WheelObjectsNum[4] = 6; WheelObjectsNum[5] = 7; WheelObjectsNum[6] = 8; WheelObjectsNum[7] = 9; WheelObjectsNum[8] = 10; WheelObjectsNum[9] = 11; WheelObjectsNum[10] = 12; WheelObjectsNum[11] = 13; WheelObjectsNum[12] = 14; WheelObjectsNum[13] = 15; WheelObjectsNum[14] = 16; WheelObjectsNum[15] = 17; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 1; TargetHorizObject[1] = 18; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 18; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 19; Texture[19] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 7: WeaponLocation[0] = VECTOR3D(0.0f, 7.6f, 5.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(212); WheelQuantity = 22; WheelObjectsNum = new int[22]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 8; WheelObjectsNum[8] = 9; WheelObjectsNum[9] = 10; WheelObjectsNum[10] = 11; WheelObjectsNum[11] = 12; WheelObjectsNum[12] = 13; WheelObjectsNum[13] = 14; WheelObjectsNum[14] = 15; WheelObjectsNum[15] = 16; WheelObjectsNum[16] = 19; WheelObjectsNum[17] = 20; WheelObjectsNum[18] = 21; WheelObjectsNum[19] = 22; WheelObjectsNum[20] = 23; WheelObjectsNum[21] = 24; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 18; TargetHorizObject[1] = 17; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 17; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 25; Texture[25] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 8: WeaponLocation[0] = VECTOR3D(0.0f, 7.0f, 8.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(208); WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 2; WheelObjectsNum[1] = 3; WheelObjectsNum[2] = 4; WheelObjectsNum[3] = 5; WheelObjectsNum[4] = 6; WheelObjectsNum[5] = 7; WheelObjectsNum[6] = 8; WheelObjectsNum[7] = 9; WheelObjectsNum[8] = 10; WheelObjectsNum[9] = 11; WheelObjectsNum[10] = 12; WheelObjectsNum[11] = 13; WheelObjectsNum[12] = 14; WheelObjectsNum[13] = 15; WheelObjectsNum[14] = 16; WheelObjectsNum[15] = 17; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 18; TargetHorizObject[1] = 19; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 19; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 20; Texture[20] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 9: WeaponLocation[0] = VECTOR3D(0.0f, 6.7f, 6.8f); Weapon[0] = new CWeapon; Weapon[0]->Create(211); Weapon[0]->NextFireTime = Weapon[0]->NextFireTime / 2.0f; WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 8; WheelObjectsNum[8] = 9; WheelObjectsNum[9] = 10; WheelObjectsNum[10] = 11; WheelObjectsNum[11] = 12; WheelObjectsNum[12] = 13; WheelObjectsNum[13] = 14; WheelObjectsNum[14] = 15; WheelObjectsNum[15] = 16; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 18; TargetHorizObject[1] = 0; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 0; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 19; Texture[19] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 10: WeaponLocation[0] = VECTOR3D(0.0f, 6.1f, 0.5f); Weapon[0] = new CWeapon; Weapon[0]->Create(204); Weapon[0]->NextFireTime = Weapon[0]->NextFireTime / 2.0f; WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 8; WheelObjectsNum[8] = 9; WheelObjectsNum[9] = 10; WheelObjectsNum[10] = 11; WheelObjectsNum[11] = 12; WheelObjectsNum[12] = 13; WheelObjectsNum[13] = 14; WheelObjectsNum[14] = 15; WheelObjectsNum[15] = 16; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 18; TargetHorizObject[1] = 0; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 0; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 19; Texture[19] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 11: WeaponLocation[0] = VECTOR3D(2.2f, 5.4f, 7.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(209); WeaponLocation[1] = VECTOR3D(-2.2f, 5.4f, 7.0f); Weapon[1] = new CWeapon; Weapon[1]->Create(209); WeaponFireType = 3; WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 8; WheelObjectsNum[8] = 9; WheelObjectsNum[9] = 10; WheelObjectsNum[10] = 11; WheelObjectsNum[11] = 12; WheelObjectsNum[12] = 13; WheelObjectsNum[13] = 14; WheelObjectsNum[14] = 15; WheelObjectsNum[15] = 16; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 0; TargetVertObjectMaxAngle = 55.0f; TrackObjectNum = 18; Texture[18] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 12: WeaponLocation[0] = VECTOR3D(0.55f, 5.0f, 2.0f); Weapon[0] = new CWeapon; Weapon[0]->Create(206); Weapon[0]->NextFireTime = Weapon[0]->NextFireTime / 2.0f; WeaponLocation[1] = VECTOR3D(-0.55f, 5.0f, 2.0f); Weapon[1] = new CWeapon; Weapon[1]->Create(206); Weapon[1]->NextFireTime = Weapon[1]->NextFireTime / 2.0f; WeaponLocation[2] = VECTOR3D(1.65f, 5.0f, 2.0f); Weapon[2] = new CWeapon; Weapon[2]->Create(206); Weapon[2]->NextFireTime = Weapon[2]->NextFireTime / 2.0f; WeaponLocation[3] = VECTOR3D(-1.65f, 5.0f, 2.0f); Weapon[3] = new CWeapon; Weapon[3]->Create(206); Weapon[3]->NextFireTime = Weapon[3]->NextFireTime / 2.0f; WeaponFireType = 3; WheelQuantity = 16; WheelObjectsNum = new int[16]; WheelObjectsNum[0] = 1; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 8; WheelObjectsNum[8] = 9; WheelObjectsNum[9] = 10; WheelObjectsNum[10] = 11; WheelObjectsNum[11] = 12; WheelObjectsNum[12] = 13; WheelObjectsNum[13] = 14; WheelObjectsNum[14] = 15; WheelObjectsNum[15] = 16; TargetVertObjectQuantity = 2; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 18; TargetVertObject[1] = 0; TargetVertObjectMaxAngle = 40.0f; TrackObjectNum = 19; Texture[19] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 13: WeaponLocation[0] = VECTOR3D(1.4f, 5.0f, 0.4f); Weapon[0] = new CWeapon; Weapon[0]->Create(206); Weapon[0]->NextFireTime = Weapon[0]->NextFireTime / 2.0f; WeaponLocation[1] = VECTOR3D(-1.4f, 5.0f, 0.4f); Weapon[1] = new CWeapon; Weapon[1]->Create(206); Weapon[1]->NextFireTime = Weapon[1]->NextFireTime / 2.0f; WeaponFireType = 3; WheelQuantity = 14; WheelObjectsNum = new int[14]; WheelObjectsNum[0] = 2; WheelObjectsNum[1] = 3; WheelObjectsNum[2] = 4; WheelObjectsNum[3] = 5; WheelObjectsNum[4] = 6; WheelObjectsNum[5] = 7; WheelObjectsNum[6] = 8; WheelObjectsNum[7] = 9; WheelObjectsNum[8] = 10; WheelObjectsNum[9] = 11; WheelObjectsNum[10] = 12; WheelObjectsNum[11] = 13; WheelObjectsNum[12] = 14; WheelObjectsNum[13] = 15; TargetHorizObjectQuantity = 2; TargetHorizObject = new int[TargetHorizObjectQuantity]; TargetHorizObject[0] = 0; TargetHorizObject[1] = 16; TargetVertObjectQuantity = 1; TargetVertObject = new int[TargetVertObjectQuantity]; TargetVertObject[0] = 16; TargetVertObjectMaxAngle = 50.0f; TrackObjectNum = 17; Texture[17] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); break; case 14: WeaponLocation[0] = VECTOR3D(0.0f, 0.0f, 0.0f); WheelQuantity = 8; WheelObjectsNum = new int[8]; WheelObjectsNum[0] = 0; WheelObjectsNum[1] = 2; WheelObjectsNum[2] = 3; WheelObjectsNum[3] = 4; WheelObjectsNum[4] = 5; WheelObjectsNum[5] = 6; WheelObjectsNum[6] = 7; WheelObjectsNum[7] = 8; TrackObjectNum = 10; Texture[10] = vw_FindTextureByName("DATA/MODELS/track.VW2D"); TrackRotationDirection = -1; break; } // находим все данные по геометрии ::CObject3D::InitByDrawObjectList(); // установка остальных параметров девиации DeviationOn = false; DeviationObjQuantity = WheelQuantity; Deviation = new VECTOR3D[DeviationObjQuantity]; NeedDeviation = new float[DeviationObjQuantity]; CurentDeviation = new float[DeviationObjQuantity]; CurentDeviationSum = new float[DeviationObjQuantity]; DeviationObjNum = new int[DeviationObjQuantity]; for (int i=0; i<DeviationObjQuantity; i++) { Deviation[i] = VECTOR3D(0.0f, 1.0f, 0.0f); NeedDeviation[i] = vw_Randf0*0.1f; CurentDeviation[i] = CurentDeviationSum[i] = 0.0f; DeviationObjNum[i] = WheelObjectsNum[i]; } // делаем сдвиг поворота колес, чтобы смотрелось естественнее for (int i=0; i<WheelQuantity; i++) DrawObjectList[WheelObjectsNum[i]].Rotation.x = vw_fRandNum(360.0f); // вычисляем данные для нахождения точки стрельбы if (TargetHorizObject != 0) { BaseBound = DrawObjectList[TargetHorizObject[0]].Location; } if (TargetVertObject != 0) { if (TargetHorizObject != 0) { MiddleBound = DrawObjectList[TargetVertObject[0]].Location - DrawObjectList[TargetHorizObject[0]].Location; } else { MiddleBound = DrawObjectList[TargetVertObject[0]].Location; } } if (WeaponBound != 0) for (int i=0; i<WeaponQuantity; i++) { if (TargetVertObject != 0) { WeaponBound[i] = WeaponLocation[i] - DrawObjectList[TargetVertObject[0]].Location; } else if (TargetHorizObject != 0) { WeaponBound[i] = WeaponLocation[i] - DrawObjectList[TargetHorizObject[0]].Location; } else { WeaponBound[i] = WeaponLocation[i]; } } }
instance_stonecore_InstanceScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); LoadObjectData(creatureData, nullptr); }