Example #1
0
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;
        }
Example #12
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();
}
Example #13
0
// 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);
 }
Example #15
0
//-----------------------------------------------------------------------------
// Конструктор, инициализация всех переменных
//-----------------------------------------------------------------------------
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();
}
Example #17
0
//-----------------------------------------------------------------------------
// Конструктор, инициализация всех переменных
//-----------------------------------------------------------------------------
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];
		}
	}

}
Example #18
0
//-----------------------------------------------------------------------------
// Конструктор, инициализация всех переменных
//-----------------------------------------------------------------------------
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);
 }