mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-19 19:44:47 +00:00
Merge In Main Server
The current version has many crashes for clients trying to connect to the server. Reverting back to 3.8 main server.
This commit is contained in:
parent
6864dee4f5
commit
f950c4d026
|
|
@ -109,6 +109,50 @@ function DroneFindNearestPilot(%radius, %drone) {
|
||||||
return %closestClient;
|
return %closestClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
datablock SeekerProjectileData(BossMissiles)
|
||||||
|
{
|
||||||
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.1;
|
||||||
|
damageRadius = 6.0;
|
||||||
|
radiusDamageType = $DamageType::MissileTurret;
|
||||||
|
kickBackStrength = 500;
|
||||||
|
|
||||||
|
flareDistance = 200;
|
||||||
|
flareAngle = 30;
|
||||||
|
minSeekHeat = 0.0;
|
||||||
|
|
||||||
|
explosion = "MissileExplosion";
|
||||||
|
velInheritFactor = 1.0;
|
||||||
|
|
||||||
|
splash = MissileSplash;
|
||||||
|
baseEmitter = MortarSmokeEmitter;
|
||||||
|
delayEmitter = MissileFireEmitter;
|
||||||
|
puffEmitter = MissilePuffEmitter;
|
||||||
|
|
||||||
|
lifetimeMS = 15000; // z0dd - ZOD, 4/14/02. Was 6000
|
||||||
|
muzzleVelocity = 12.0;
|
||||||
|
maxVelocity = 225.0; // z0dd - ZOD, 4/14/02. Was 80.0
|
||||||
|
turningSpeed = 50.0;
|
||||||
|
acceleration = 100.0;
|
||||||
|
|
||||||
|
proximityRadius = 4;
|
||||||
|
|
||||||
|
terrainAvoidanceSpeed = 100;
|
||||||
|
terrainScanAhead = 50;
|
||||||
|
terrainHeightFail = 50;
|
||||||
|
terrainAvoidanceRadius = 150;
|
||||||
|
|
||||||
|
useFlechette = true;
|
||||||
|
flechetteDelayMs = 225;
|
||||||
|
casingDeb = FlechetteDebris;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function WindshearAttacks(%drone) {
|
function WindshearAttacks(%drone) {
|
||||||
if(!isObject(%drone)) {
|
if(!isObject(%drone)) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -216,7 +260,6 @@ function WindshearAttack_FUNC(%att, %args) {
|
||||||
FlareSet.add(%p2);
|
FlareSet.add(%p2);
|
||||||
MissionCleanup.add(%p1);
|
MissionCleanup.add(%p1);
|
||||||
MissionCleanup.add(%p2);
|
MissionCleanup.add(%p2);
|
||||||
|
|
||||||
case "HeatLoop":
|
case "HeatLoop":
|
||||||
%t = getWord(%args, 0);
|
%t = getWord(%args, 0);
|
||||||
%v = getWord(%args, 1);
|
%v = getWord(%args, 1);
|
||||||
|
|
@ -230,7 +273,6 @@ function WindshearAttack_FUNC(%att, %args) {
|
||||||
%v++;
|
%v++;
|
||||||
%t.setHeat(100);
|
%t.setHeat(100);
|
||||||
schedule(100, 0, "WindshearAttack_FUNC", "HeatLoop", %t SPC %v);
|
schedule(100, 0, "WindshearAttack_FUNC", "HeatLoop", %t SPC %v);
|
||||||
|
|
||||||
case "MissileDrop":
|
case "MissileDrop":
|
||||||
%t = getWord(%args, 0);
|
%t = getWord(%args, 0);
|
||||||
%m = getWord(%args, 1);
|
%m = getWord(%args, 1);
|
||||||
|
|
@ -239,7 +281,6 @@ function WindshearAttack_FUNC(%att, %args) {
|
||||||
%m.setObjectTarget(%t);
|
%m.setObjectTarget(%t);
|
||||||
//HeatLoop(%t,0);
|
//HeatLoop(%t,0);
|
||||||
WindshearAttack_FUNC("HeatLoop", %t SPC 0);
|
WindshearAttack_FUNC("HeatLoop", %t SPC 0);
|
||||||
|
|
||||||
case "SidewinderLaunch":
|
case "SidewinderLaunch":
|
||||||
%d = getWord(%args, 0);
|
%d = getWord(%args, 0);
|
||||||
%t = getWord(%args, 1);
|
%t = getWord(%args, 1);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,162 @@
|
||||||
|
datablock SeekerProjectileData(VegenorFireMissile) : YvexZombieMakerMissile {
|
||||||
|
indirectDamage = 0.5;
|
||||||
|
damageRadius = 5.0;
|
||||||
|
radiusDamageType = $DamageType::Fire;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock GrenadeProjectileData(VegenorFireMeteor) : JTLMeteorStormFireball {
|
||||||
|
projectileShapeName = "plasmabolt.dts";
|
||||||
|
scale = "40.0 40.0 40.0";
|
||||||
|
emitterDelay = -1;
|
||||||
|
directDamage = 0;
|
||||||
|
directDamageType = $DamageType::Fire;
|
||||||
|
hasDamageRadius = true; // true;
|
||||||
|
indirectDamage = 0.5; // 0.5;
|
||||||
|
damageRadius = 150.0;
|
||||||
|
radiusDamageType = $DamageType::Fire;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock PlayerData(VegenorZombieArmor) : HeavyMaleBiodermArmor {
|
||||||
|
maxDamage = 600.0;
|
||||||
|
minImpactSpeed = 50;
|
||||||
|
speedDamageScale = 0.015;
|
||||||
|
|
||||||
|
damageScale[$DamageType::M1700] = 2.0;
|
||||||
|
damageScale[$DamageType::Fire] = 0.1;
|
||||||
|
damageScale[$DamageType::Burn] = 0.1;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
max[SmokeGrenade] = 0;
|
||||||
|
max[BeaconSmokeGrenade] = 0;
|
||||||
|
max[Blaster] = 0;
|
||||||
|
max[Plasma] = 0;
|
||||||
|
max[PlasmaAmmo] = 0;
|
||||||
|
max[Disc] = 0;
|
||||||
|
max[DiscAmmo] = 0;
|
||||||
|
max[SniperRifle] = 0;
|
||||||
|
max[GrenadeLauncher] = 0;
|
||||||
|
max[GrenadeLauncherAmmo] = 0;
|
||||||
|
max[Mortar] = 0;
|
||||||
|
max[MortarAmmo] = 0;
|
||||||
|
max[MissileLauncher] = 0;
|
||||||
|
max[MissileLauncherAmmo] = 0;
|
||||||
|
max[Chaingun] = 0;
|
||||||
|
max[ChaingunAmmo] = 0;
|
||||||
|
max[RepairGun] = 0;
|
||||||
|
max[CloakingPack] = 0;
|
||||||
|
max[SensorJammerPack] = 0;
|
||||||
|
max[EnergyPack] = 0;
|
||||||
|
max[RepairPack] = 0;
|
||||||
|
max[ShieldPack] = 0;
|
||||||
|
max[AmmoPack] = 0;
|
||||||
|
max[SatchelCharge] = 0;
|
||||||
|
max[MortarBarrelPack] = 0;
|
||||||
|
max[MissileBarrelPack] = 0;
|
||||||
|
max[AABarrelPack] = 0;
|
||||||
|
max[PlasmaBarrelPack] = 0;
|
||||||
|
max[ELFBarrelPack] = 0;
|
||||||
|
max[artillerybarrelpack] = 0;
|
||||||
|
max[InventoryDeployable] = 0;
|
||||||
|
max[MotionSensorDeployable] = 0;
|
||||||
|
max[PulseSensorDeployable] = 0;
|
||||||
|
max[TurretOutdoorDeployable] = 0;
|
||||||
|
max[TurretIndoorDeployable] = 0;
|
||||||
|
max[FlashGrenade] = 0;
|
||||||
|
max[ConcussionGrenade] = 0;
|
||||||
|
max[FlareGrenade] = 0;
|
||||||
|
max[TargetingLaser] = 0;
|
||||||
|
max[ELFGun] = 0;
|
||||||
|
max[ShockLance] = 0;
|
||||||
|
max[CameraGrenade] = 0;
|
||||||
|
max[Beacon] = 0;
|
||||||
|
max[flamerAmmoPack] = 0;
|
||||||
|
max[ParachutePack] = 0;
|
||||||
|
max[MedPack] = 0;
|
||||||
|
//Guns
|
||||||
|
max[ConstructionTool] = 0;
|
||||||
|
max[MergeTool] = 0;
|
||||||
|
max[NerfGun] = 0;
|
||||||
|
max[NerfBallLauncher] = 0;
|
||||||
|
max[NerfBallLauncherAmmo] = 0;
|
||||||
|
max[SuperChaingun] = 0;
|
||||||
|
max[SuperChaingunAmmo] = 0;
|
||||||
|
max[RPChaingun] = 0;
|
||||||
|
max[RPChaingunAmmo] = 0;
|
||||||
|
max[MGClip] = 0;
|
||||||
|
max[LSMG] = 0;
|
||||||
|
max[LSMGAmmo] = 0;
|
||||||
|
max[LSMGClip] = 0;
|
||||||
|
max[snipergun] = 0;
|
||||||
|
max[snipergunAmmo] = 0;
|
||||||
|
max[Bazooka] = 0;
|
||||||
|
max[BazookaAmmo] = 0;
|
||||||
|
max[nukeme] = 0;
|
||||||
|
max[nukemeAmmo] = 0;
|
||||||
|
max[MG42] = 0;
|
||||||
|
max[MG42Ammo] = 0;
|
||||||
|
max[SPistol] = 0;
|
||||||
|
max[Pistol] = 0;
|
||||||
|
max[PistolAmmo] = 0;
|
||||||
|
max[Pistolclip] = 0;
|
||||||
|
max[flamer] = 0;
|
||||||
|
max[flamerAmmo] = 0;
|
||||||
|
max[AALauncher] = 0;
|
||||||
|
max[AALauncherAmmo] = 0;
|
||||||
|
max[melee] = 0;
|
||||||
|
max[SOmelee] = 0;
|
||||||
|
max[KriegRifle] = 0;
|
||||||
|
max[KriegAmmo] = 0;
|
||||||
|
max[Rifleclip] = 0;
|
||||||
|
max[Shotgun] = 0;
|
||||||
|
max[ShotgunAmmo] = 0;
|
||||||
|
max[ShotgunClip] = 0;
|
||||||
|
max[RShotgun] = 0;
|
||||||
|
max[RShotgunAmmo] = 0;
|
||||||
|
max[RShotgunClip] = 0;
|
||||||
|
max[LMissileLauncher] = 0;
|
||||||
|
max[LMissileLauncherAmmo] = 0;
|
||||||
|
max[HRPChaingun] = 0;
|
||||||
|
max[RPGAmmo] = 0;
|
||||||
|
max[RPGItem] = 0;
|
||||||
|
//Building parts
|
||||||
|
max[spineDeployable] = 0;
|
||||||
|
max[mspineDeployable] = 0;
|
||||||
|
max[wWallDeployable] = 0;
|
||||||
|
max[floorDeployable] = 0;
|
||||||
|
max[WallDeployable] = 0;
|
||||||
|
max[DoorDeployable] = 0;
|
||||||
|
//Turrets
|
||||||
|
max[TurretLaserDeployable] = 0;
|
||||||
|
max[TurretMissileRackDeployable]= 0;
|
||||||
|
max[DiscTurretDeployable] = 0;
|
||||||
|
//Largepacks
|
||||||
|
max[EnergizerDeployable] = 0;
|
||||||
|
max[TreeDeployable] = 0;
|
||||||
|
max[CrateDeployable] = 0;
|
||||||
|
max[DecorationDeployable] = 0;
|
||||||
|
max[LogoProjectorDeployable] = 0;
|
||||||
|
max[LightDeployable] = 0;
|
||||||
|
max[TripwireDeployable] = 0;
|
||||||
|
max[TelePadPack] = 0;
|
||||||
|
max[TurretBasePack] = 0;
|
||||||
|
max[LargeInventoryDeployable] = 0;
|
||||||
|
max[GeneratorDeployable] = 0;
|
||||||
|
max[SolarPanelDeployable] = 0;
|
||||||
|
max[SwitchDeployable] = 0;
|
||||||
|
max[MediumSensorDeployable] = 0;
|
||||||
|
max[LargeSensorDeployable] = 0;
|
||||||
|
max[SpySatelliteDeployable] = 0;
|
||||||
|
//Misc
|
||||||
|
max[JumpadDeployable] = 0;
|
||||||
|
max[EscapePodDeployable] = 0;
|
||||||
|
max[ForceFieldDeployable] = 0;
|
||||||
|
max[GravityFieldDeployable] = 0;
|
||||||
|
max[VehiclePadPack] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
function SpawnVegenor(%position) {
|
function SpawnVegenor(%position) {
|
||||||
%Zombie = new player(){
|
%Zombie = new player(){
|
||||||
Datablock = "VegenorZombieArmor";
|
Datablock = "VegenorZombieArmor";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,411 @@
|
||||||
//Ghost of Fire
|
//DBs
|
||||||
//Phantom139
|
datablock ParticleData(GhostflameParticle)
|
||||||
//Ported From TWM1
|
{
|
||||||
|
dragCoeffiecient = 0.0;
|
||||||
|
gravityCoefficient = -0.1;
|
||||||
|
inheritedVelFactor = 0.1;
|
||||||
|
|
||||||
|
lifetimeMS = 500;
|
||||||
|
lifetimeVarianceMS = 50;
|
||||||
|
|
||||||
|
textureName = "particleTest";
|
||||||
|
|
||||||
|
spinRandomMin = -10.0;
|
||||||
|
spinRandomMax = 10.0;
|
||||||
|
|
||||||
|
colors[0] = "0 1 0 0.4";
|
||||||
|
colors[1] = "0 1 0 0.3";
|
||||||
|
colors[2] = "0 1 0 0.0";
|
||||||
|
sizes[0] = 2.0;
|
||||||
|
sizes[1] = 1.0;
|
||||||
|
sizes[2] = 0.8;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.6;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(GhostflameEmitter)
|
||||||
|
{
|
||||||
|
ejectionPeriodMS = 3;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
|
||||||
|
ejectionOffset = 0.2;
|
||||||
|
ejectionVelocity = 10.0;
|
||||||
|
velocityVariance = 0.0;
|
||||||
|
|
||||||
|
thetaMin = 0.0;
|
||||||
|
thetaMax = 10.0;
|
||||||
|
|
||||||
|
particles = "GhostflameParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock LinearFlareProjectileData(GhostFlameboltMain)
|
||||||
|
{
|
||||||
|
projectileShapeName = "turret_muzzlepoint.dts";
|
||||||
|
scale = "1.0 1.0 1.0";
|
||||||
|
faceViewer = true;
|
||||||
|
directDamage = 0.05;
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.1;
|
||||||
|
damageRadius = 4.0;
|
||||||
|
kickBackStrength = 0.0;
|
||||||
|
radiusDamageType = $DamageType::Plasma;
|
||||||
|
|
||||||
|
explosion = "ThrowerExplosion";
|
||||||
|
splash = PlasmaSplash;
|
||||||
|
|
||||||
|
baseEmitter = GhostflameEmitter;
|
||||||
|
|
||||||
|
dryVelocity = 50.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55
|
||||||
|
wetVelocity = -1;
|
||||||
|
velInheritFactor = 0.3;
|
||||||
|
fizzleTimeMS = 250;
|
||||||
|
lifetimeMS = 30000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = -1;
|
||||||
|
|
||||||
|
//activateDelayMS = 100;
|
||||||
|
activateDelayMS = -1;
|
||||||
|
|
||||||
|
size[0] = 0.2;
|
||||||
|
size[1] = 0.5;
|
||||||
|
size[2] = 0.1;
|
||||||
|
|
||||||
|
|
||||||
|
numFlares = 35;
|
||||||
|
flareColor = "1 0.18 0.03";
|
||||||
|
flareModTexture = "flaremod";
|
||||||
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
|
sound = PlasmaProjectileSound;
|
||||||
|
fireSound = FlamethrowerFireSound;
|
||||||
|
wetFireSound = PlasmaFireWetSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 10.0;
|
||||||
|
lightColor = "0.94 0.03 0.12";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleData(NapalmExplosionParticle)
|
||||||
|
{
|
||||||
|
dragCoefficient = 2;
|
||||||
|
gravityCoefficient = 0.2;
|
||||||
|
inheritedVelFactor = 0.2;
|
||||||
|
constantAcceleration = 0.0;
|
||||||
|
lifetimeMS = 450;
|
||||||
|
lifetimeVarianceMS = 150;
|
||||||
|
textureName = "particleTest";
|
||||||
|
colors[0] = "1 0 0";
|
||||||
|
colors[1] = "1 0 0";
|
||||||
|
sizes[0] = 0.5;
|
||||||
|
sizes[1] = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(NapalmExplosionEmitter)
|
||||||
|
{
|
||||||
|
ejectionPeriodMS = 7;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 5;
|
||||||
|
velocityVariance = 1.0;
|
||||||
|
ejectionOffset = 0.0;
|
||||||
|
thetaMin = 0;
|
||||||
|
thetaMax = 60;
|
||||||
|
phiReferenceVel = 0;
|
||||||
|
phiVariance = 360;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "NapalmExplosionParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ExplosionData(NapalmExplosion)
|
||||||
|
{
|
||||||
|
explosionShape = "effect_plasma_explosion.dts";
|
||||||
|
soundProfile = plasmaExpSound;
|
||||||
|
particleEmitter = NapalmExplosionEmitter;
|
||||||
|
particleDensity = 150;
|
||||||
|
particleRadius = 1.25;
|
||||||
|
faceViewer = true;
|
||||||
|
|
||||||
|
sizes[0] = "3.0 3.0 3.0";
|
||||||
|
sizes[1] = "3.0 3.0 3.0";
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 1.5;
|
||||||
|
};
|
||||||
|
|
||||||
|
//--------------------------------------
|
||||||
|
//Napalm projectile
|
||||||
|
//--------------------------------------
|
||||||
|
datablock LinearProjectileData(NapalmShot)
|
||||||
|
{
|
||||||
|
projectileShapeName = "mortar_projectile.dts";
|
||||||
|
emitterDelay = -1;
|
||||||
|
directDamage = 0.0;
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.5;
|
||||||
|
damageRadius = 20.0;
|
||||||
|
radiusDamageType = $DamageType::Plasma;
|
||||||
|
kickBackStrength = 3000;
|
||||||
|
|
||||||
|
explosion = "NapalmExplosion";
|
||||||
|
// underwaterExplosion = "UnderwaterNapalmExplosion";
|
||||||
|
velInheritFactor = 0.5;
|
||||||
|
// splash = NapalmSplash;
|
||||||
|
depthTolerance = 10.0; // depth at which it uses underwater explosion
|
||||||
|
|
||||||
|
baseEmitter = MissileFireEmitter;
|
||||||
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
|
||||||
|
grenadeElasticity = 0.15;
|
||||||
|
grenadeFriction = 0.4;
|
||||||
|
armingDelayMS = 2000;
|
||||||
|
muzzleVelocity = 63.7;
|
||||||
|
drag = 0.1;
|
||||||
|
|
||||||
|
sound = MortarProjectileSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 4;
|
||||||
|
lightColor = "1.00 0.9 1.00";
|
||||||
|
|
||||||
|
hasLightUnderwaterColor = true;
|
||||||
|
underWaterLightColor = "0.05 0.075 0.2";
|
||||||
|
|
||||||
|
dryVelocity = 90;
|
||||||
|
wetVelocity = 50;
|
||||||
|
velInheritFactor = 0.5;
|
||||||
|
fizzleTimeMS = 5000;
|
||||||
|
lifetimeMS = 2700;
|
||||||
|
explodeOnDeath = true;
|
||||||
|
reflectOnWaterImpactAngle = 15.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 5000;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile
|
||||||
|
{
|
||||||
|
emap = true;
|
||||||
|
|
||||||
|
className = Armor;
|
||||||
|
shapeFile = "medium_male.dts";
|
||||||
|
cameraMaxDist = 3;
|
||||||
|
computeCRC = true;
|
||||||
|
|
||||||
|
debrisShapeName = "debris_player.dts";
|
||||||
|
debris = HumanRedPlayerDebris;
|
||||||
|
|
||||||
|
canObserve = true;
|
||||||
|
cmdCategory = "Clients";
|
||||||
|
cmdIcon = CMDPlayerIcon;
|
||||||
|
cmdMiniIconName = "commander/MiniIcons/com_player_grey";
|
||||||
|
|
||||||
|
hudImageNameFriendly[0] = "gui/hud_playertriangle";
|
||||||
|
hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy";
|
||||||
|
hudRenderModulated[0] = true;
|
||||||
|
|
||||||
|
hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey";
|
||||||
|
hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey";
|
||||||
|
hudRenderModulated[1] = true;
|
||||||
|
hudRenderAlways[1] = true;
|
||||||
|
hudRenderCenter[1] = true;
|
||||||
|
hudRenderDistance[1] = true;
|
||||||
|
|
||||||
|
hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey";
|
||||||
|
hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey";
|
||||||
|
hudRenderModulated[2] = true;
|
||||||
|
hudRenderAlways[2] = true;
|
||||||
|
hudRenderCenter[2] = true;
|
||||||
|
hudRenderDistance[2] = true;
|
||||||
|
|
||||||
|
aiAvoidThis = true;
|
||||||
|
|
||||||
|
minLookAngle = -1.5;
|
||||||
|
maxLookAngle = 1.5;
|
||||||
|
maxFreelookAngle = 3.0;
|
||||||
|
|
||||||
|
mass = 70;
|
||||||
|
drag = 0.3;
|
||||||
|
maxdrag = 0.5;
|
||||||
|
density = 10;
|
||||||
|
maxDamage = 500.0;
|
||||||
|
maxEnergy = 400;
|
||||||
|
repairRate = 0.0053;
|
||||||
|
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
|
||||||
|
|
||||||
|
rechargeRate = 0.456;
|
||||||
|
jetForce = 21.22 * 230;
|
||||||
|
underwaterJetForce = 25.22 * 130 * 1.5;
|
||||||
|
underwaterVertJetFactor = 1.5;
|
||||||
|
jetEnergyDrain = 4.0;
|
||||||
|
underwaterJetEnergyDrain = 1.0;
|
||||||
|
minJetEnergy = 10;
|
||||||
|
maxJetHorizontalPercentage = 0.8;
|
||||||
|
|
||||||
|
runForce = 60 * 150;
|
||||||
|
runEnergyDrain = 0;
|
||||||
|
minRunEnergy = 0;
|
||||||
|
maxForwardSpeed = 18;
|
||||||
|
maxBackwardSpeed = 18;
|
||||||
|
maxSideSpeed = 18;
|
||||||
|
|
||||||
|
maxUnderwaterForwardSpeed = 10.5;
|
||||||
|
maxUnderwaterBackwardSpeed = 9.5;
|
||||||
|
maxUnderwaterSideSpeed = 9.5;
|
||||||
|
|
||||||
|
recoverDelay = 4;
|
||||||
|
recoverRunForceScale = 0.7;
|
||||||
|
|
||||||
|
// heat inc'ers and dec'ers
|
||||||
|
heatDecayPerSec = 1.0 / 5.0; // takes 4 seconds to clear heat sig.
|
||||||
|
heatIncreasePerSec = 1.0 / 2.0; // takes 3.0 seconds of constant jet to get full heat sig.
|
||||||
|
|
||||||
|
jumpForce = 8.3 * 130;
|
||||||
|
jumpEnergyDrain = 0;
|
||||||
|
minJumpEnergy = 0;
|
||||||
|
jumpSurfaceAngle = 75;
|
||||||
|
jumpDelay = 0;
|
||||||
|
|
||||||
|
// Controls over slope of runnable/jumpable surfaces
|
||||||
|
runSurfaceAngle = 85;
|
||||||
|
jumpSurfaceAngle = 85;
|
||||||
|
|
||||||
|
minJumpSpeed = 25;
|
||||||
|
maxJumpSpeed = 35;
|
||||||
|
|
||||||
|
horizMaxSpeed = 70;
|
||||||
|
horizResistSpeed = 28;
|
||||||
|
horizResistFactor = 0.32;
|
||||||
|
maxJetForwardSpeed = 18;
|
||||||
|
|
||||||
|
upMaxSpeed = 80;
|
||||||
|
upResistSpeed = 30;
|
||||||
|
upResistFactor = 0.23;
|
||||||
|
|
||||||
|
minImpactSpeed = 45;
|
||||||
|
speedDamageScale = 0.006;
|
||||||
|
|
||||||
|
jetSound = ArmorJetSound;
|
||||||
|
wetJetSound = ArmorWetJetSound;
|
||||||
|
|
||||||
|
jetEmitter = FlammerArmorJetEmitter; //Pyro jets
|
||||||
|
jetEffect = HumanMediumArmorJetEffect;
|
||||||
|
|
||||||
|
boundingBox = "1.45 1.45 2.4";
|
||||||
|
pickupRadius = 0.75;
|
||||||
|
|
||||||
|
// damage location details
|
||||||
|
boxNormalHeadPercentage = 0.83;
|
||||||
|
boxNormalTorsoPercentage = 0.49;
|
||||||
|
boxHeadLeftPercentage = 0;
|
||||||
|
boxHeadRightPercentage = 1;
|
||||||
|
boxHeadBackPercentage = 0;
|
||||||
|
boxHeadFrontPercentage = 1;
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = MediumMaleFootprint;
|
||||||
|
decalOffset = 0.35;
|
||||||
|
|
||||||
|
footPuffEmitter = LightPuffEmitter;
|
||||||
|
footPuffNumParts = 15;
|
||||||
|
footPuffRadius = 0.25;
|
||||||
|
|
||||||
|
dustEmitter = LiftoffDustEmitter;
|
||||||
|
|
||||||
|
splash = PlayerSplash;
|
||||||
|
splashVelocity = 4.0;
|
||||||
|
splashAngle = 67.0;
|
||||||
|
splashFreqMod = 300.0;
|
||||||
|
splashVelEpsilon = 0.60;
|
||||||
|
bubbleEmitTime = 0.4;
|
||||||
|
splashEmitter[0] = PlayerFoamDropletsEmitter;
|
||||||
|
splashEmitter[1] = PlayerFoamEmitter;
|
||||||
|
splashEmitter[2] = PlayerBubbleEmitter;
|
||||||
|
mediumSplashSoundVelocity = 10.0;
|
||||||
|
hardSplashSoundVelocity = 20.0;
|
||||||
|
exitSplashSoundVelocity = 5.0;
|
||||||
|
|
||||||
|
footstepSplashHeight = 0.35;
|
||||||
|
//Footstep Sounds
|
||||||
|
LFootSoftSound = LFootMediumSoftSound;
|
||||||
|
RFootSoftSound = RFootMediumSoftSound;
|
||||||
|
LFootHardSound = LFootMediumHardSound;
|
||||||
|
RFootHardSound = RFootMediumHardSound;
|
||||||
|
LFootMetalSound = LFootMediumMetalSound;
|
||||||
|
RFootMetalSound = RFootMediumMetalSound;
|
||||||
|
LFootSnowSound = LFootMediumSnowSound;
|
||||||
|
RFootSnowSound = RFootMediumSnowSound;
|
||||||
|
LFootShallowSound = LFootMediumShallowSplashSound;
|
||||||
|
RFootShallowSound = RFootMediumShallowSplashSound;
|
||||||
|
LFootWadingSound = LFootMediumWadingSound;
|
||||||
|
RFootWadingSound = RFootMediumWadingSound;
|
||||||
|
LFootUnderwaterSound = LFootMediumUnderwaterSound;
|
||||||
|
RFootUnderwaterSound = RFootMediumUnderwaterSound;
|
||||||
|
LFootBubblesSound = LFootMediumBubblesSound;
|
||||||
|
RFootBubblesSound = RFootMediumBubblesSound;
|
||||||
|
movingBubblesSound = ArmorMoveBubblesSound;
|
||||||
|
waterBreathSound = WaterBreathMaleSound;
|
||||||
|
|
||||||
|
impactSoftSound = ImpactMediumSoftSound;
|
||||||
|
impactHardSound = ImpactMediumHardSound;
|
||||||
|
impactMetalSound = ImpactMediumMetalSound;
|
||||||
|
impactSnowSound = ImpactMediumSnowSound;
|
||||||
|
|
||||||
|
skiSoftSound = SkiAllSoftSound;
|
||||||
|
skiHardSound = SkiAllHardSound;
|
||||||
|
skiMetalSound = SkiAllMetalSound;
|
||||||
|
skiSnowSound = SkiAllSnowSound;
|
||||||
|
|
||||||
|
impactWaterEasy = ImpactMediumWaterEasySound;
|
||||||
|
impactWaterMedium = ImpactMediumWaterMediumSound;
|
||||||
|
impactWaterHard = ImpactMediumWaterHardSound;
|
||||||
|
|
||||||
|
groundImpactMinSpeed = 10.0;
|
||||||
|
groundImpactShakeFreq = "4.0 4.0 4.0";
|
||||||
|
groundImpactShakeAmp = "1.0 1.0 1.0";
|
||||||
|
groundImpactShakeDuration = 0.8;
|
||||||
|
groundImpactShakeFalloff = 10.0;
|
||||||
|
|
||||||
|
exitingWater = ExitingWaterMediumSound;
|
||||||
|
|
||||||
|
maxWeapons = 2; // Max number of different weapons the player can have
|
||||||
|
maxGrenades = 1; // Max number of different grenades the player can have
|
||||||
|
maxMines = 1; // Max number of different mines the player can have
|
||||||
|
|
||||||
|
damageScale[$DamageType::plasma] = 0.05;
|
||||||
|
damageScale[$DamageType::Burn] = 0.05;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
// Inventory restrictions
|
||||||
|
max[RepairKit] = 4;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[ZapMine] = 0;
|
||||||
|
max[CrispMine] = 5;
|
||||||
|
max[flamerAmmoPack] = 1;
|
||||||
|
max[Deagle] = 1;
|
||||||
|
max[SPistol] = 1;
|
||||||
|
max[Pistol] = 1;
|
||||||
|
max[PistolAmmo] = 10;
|
||||||
|
max[Pistolclip] = 8;
|
||||||
|
max[PulsePhaser] = 1;
|
||||||
|
max[flamer] = 1;
|
||||||
|
max[flamerAmmo] = 0;
|
||||||
|
max[Napalm] = 1;
|
||||||
|
max[NapalmAmmo] = 20;
|
||||||
|
max[melee] = 1;
|
||||||
|
max[BOV] = 1;
|
||||||
|
max[SOmelee] = 1;
|
||||||
|
max[IncindinaryGrenade] = 7;
|
||||||
|
max[Beacon] = 3;
|
||||||
|
// -END
|
||||||
|
|
||||||
|
observeParameters = "0.5 4.5 4.5";
|
||||||
|
|
||||||
|
shieldEffectScale = "0.7 0.7 1.0";
|
||||||
|
};
|
||||||
|
//
|
||||||
|
|
||||||
function StartGhostFire(%pos) {
|
function StartGhostFire(%pos) {
|
||||||
%Ghost = new player(){
|
%Ghost = new player(){
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,145 @@
|
||||||
//DBS
|
//DBS
|
||||||
|
datablock PlayerData(LightningGhostArmor) : MediumMaleHumanArmor /// ooooo scary
|
||||||
|
{
|
||||||
|
boundingBox = "1.63 1.63 2.6";
|
||||||
|
maxDamage = 550.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "medium_male.dts";
|
||||||
|
|
||||||
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = HeavyBiodermFootprint;
|
||||||
|
decalOffset = 0.4;
|
||||||
|
|
||||||
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
max[SmokeGrenade] = 0;
|
||||||
|
max[BeaconSmokeGrenade] = 0;
|
||||||
|
max[Blaster] = 0;
|
||||||
|
max[Plasma] = 0;
|
||||||
|
max[PlasmaAmmo] = 0;
|
||||||
|
max[Disc] = 0;
|
||||||
|
max[DiscAmmo] = 0;
|
||||||
|
max[SniperRifle] = 0;
|
||||||
|
max[GrenadeLauncher] = 0;
|
||||||
|
max[GrenadeLauncherAmmo] = 0;
|
||||||
|
max[Mortar] = 0;
|
||||||
|
max[MortarAmmo] = 0;
|
||||||
|
max[MissileLauncher] = 0;
|
||||||
|
max[MissileLauncherAmmo] = 0;
|
||||||
|
max[Chaingun] = 0;
|
||||||
|
max[ChaingunAmmo] = 0;
|
||||||
|
max[RepairGun] = 0;
|
||||||
|
max[CloakingPack] = 0;
|
||||||
|
max[SensorJammerPack] = 0;
|
||||||
|
max[EnergyPack] = 0;
|
||||||
|
max[RepairPack] = 0;
|
||||||
|
max[ShieldPack] = 0;
|
||||||
|
max[AmmoPack] = 0;
|
||||||
|
max[SatchelCharge] = 0;
|
||||||
|
max[MortarBarrelPack] = 0;
|
||||||
|
max[MissileBarrelPack] = 0;
|
||||||
|
max[AABarrelPack] = 0;
|
||||||
|
max[PlasmaBarrelPack] = 0;
|
||||||
|
max[ELFBarrelPack] = 0;
|
||||||
|
max[artillerybarrelpack] = 0;
|
||||||
|
max[MedPack] = 0;
|
||||||
|
max[InventoryDeployable] = 0;
|
||||||
|
max[MotionSensorDeployable] = 0;
|
||||||
|
max[PulseSensorDeployable] = 0;
|
||||||
|
max[TurretOutdoorDeployable] = 0;
|
||||||
|
max[TurretIndoorDeployable] = 0;
|
||||||
|
max[FlashGrenade] = 0;
|
||||||
|
max[ConcussionGrenade] = 0;
|
||||||
|
max[FlareGrenade] = 0;
|
||||||
|
max[TargetingLaser] = 0;
|
||||||
|
max[ELFGun] = 0;
|
||||||
|
max[ShockLance] = 0;
|
||||||
|
max[CameraGrenade] = 0;
|
||||||
|
max[Beacon] = 0;
|
||||||
|
max[flamerAmmoPack] = 0;
|
||||||
|
max[ParachutePack] = 0;
|
||||||
|
max[ConstructionTool] = 0;
|
||||||
|
max[MergeTool] = 0;
|
||||||
|
max[NerfGun] = 0;
|
||||||
|
max[NerfBallLauncher] = 0;
|
||||||
|
max[NerfBallLauncherAmmo] = 0;
|
||||||
|
max[SuperChaingun] = 0;
|
||||||
|
max[SuperChaingunAmmo] = 0;
|
||||||
|
max[RPChaingun] = 0;
|
||||||
|
max[RPChaingunAmmo] = 0;
|
||||||
|
max[MGClip] = 0;
|
||||||
|
max[LSMG] = 0;
|
||||||
|
max[LSMGAmmo] = 0;
|
||||||
|
max[LSMGClip] = 0;
|
||||||
|
max[snipergun] = 0;
|
||||||
|
max[snipergunAmmo] = 0;
|
||||||
|
max[Bazooka] = 0;
|
||||||
|
max[BazookaAmmo] = 0;
|
||||||
|
max[BunkerBuster] = 0;
|
||||||
|
max[MG42] = 0;
|
||||||
|
max[MG42Ammo] = 0;
|
||||||
|
max[SPistol] = 0;
|
||||||
|
max[Pistol] = 0;
|
||||||
|
max[PistolAmmo] = 0;
|
||||||
|
max[Pistolclip] = 0;
|
||||||
|
max[flamer] = 0;
|
||||||
|
max[flamerAmmo] = 0;
|
||||||
|
max[AALauncher] = 0;
|
||||||
|
max[AALauncherAmmo] = 0;
|
||||||
|
max[melee] = 0;
|
||||||
|
max[SOmelee] = 0;
|
||||||
|
max[KriegRifle] = 0;
|
||||||
|
max[KriegAmmo] = 0;
|
||||||
|
max[Rifleclip] = 0;
|
||||||
|
max[Shotgun] = 0;
|
||||||
|
max[ShotgunAmmo] = 0;
|
||||||
|
max[ShotgunClip] = 0;
|
||||||
|
max[RShotgun] = 0;
|
||||||
|
max[RShotgunAmmo] = 0;
|
||||||
|
max[RShotgunClip] = 0;
|
||||||
|
max[LMissileLauncher] = 0;
|
||||||
|
max[LMissileLauncherAmmo] = 0;
|
||||||
|
max[HRPChaingun] = 0;
|
||||||
|
max[RPGAmmo] = 0;
|
||||||
|
max[RPGItem] = 0;
|
||||||
|
max[spineDeployable] = 0;
|
||||||
|
max[mspineDeployable] = 0;
|
||||||
|
max[wWallDeployable] = 0;
|
||||||
|
max[floorDeployable] = 0;
|
||||||
|
max[WallDeployable] = 0;
|
||||||
|
max[DoorDeployable] = 0;
|
||||||
|
max[TurretLaserDeployable] = 0;
|
||||||
|
max[TurretMissileRackDeployable]= 0;
|
||||||
|
max[DiscTurretDeployable] = 0;
|
||||||
|
max[EnergizerDeployable] = 0;
|
||||||
|
max[TreeDeployable] = 0;
|
||||||
|
max[CrateDeployable] = 0;
|
||||||
|
max[DecorationDeployable] = 0;
|
||||||
|
max[LogoProjectorDeployable] = 0;
|
||||||
|
max[LightDeployable] = 0;
|
||||||
|
max[TripwireDeployable] = 0;
|
||||||
|
max[TelePadPack] = 0;
|
||||||
|
max[TurretBasePack] = 0;
|
||||||
|
max[LargeInventoryDeployable] = 0;
|
||||||
|
max[GeneratorDeployable] = 0;
|
||||||
|
max[SolarPanelDeployable] = 0;
|
||||||
|
max[SwitchDeployable] = 0;
|
||||||
|
max[MediumSensorDeployable] = 0;
|
||||||
|
max[LargeSensorDeployable] = 0;
|
||||||
|
max[SpySatelliteDeployable] = 0;
|
||||||
|
max[JumpadDeployable] = 0;
|
||||||
|
max[EscapePodDeployable] = 0;
|
||||||
|
max[ForceFieldDeployable] = 0;
|
||||||
|
max[GravityFieldDeployable] = 0;
|
||||||
|
max[VehiclePadPack] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
//CREATION
|
//CREATION
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,245 @@
|
||||||
|
datablock ParticleData(PBCParticle) {
|
||||||
|
dragCoefficient = 0.5;
|
||||||
|
WindCoefficient = 0;
|
||||||
|
gravityCoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 1;
|
||||||
|
constantAcceleration = 0;
|
||||||
|
lifetimeMS = 3000;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
textureName = "special/lightning1frame2";
|
||||||
|
useInvAlpha = 0;
|
||||||
|
|
||||||
|
spinRandomMin = -800;
|
||||||
|
spinRandomMax = 800;
|
||||||
|
|
||||||
|
spinspeed = 50;
|
||||||
|
colors[0] = "0.1 1.0 0.1 1.0";
|
||||||
|
colors[1] = "0.6 0.9 0.6 1.0";
|
||||||
|
colors[2] = "0.8 0.8 1.0 1.0";
|
||||||
|
colors[3] = "0.8 0.8 1.0 0.0";
|
||||||
|
sizes[0] = 0.5;
|
||||||
|
sizes[1] = 1;
|
||||||
|
sizes[2] = 1.5;
|
||||||
|
sizes[3] = 1.5;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.1;
|
||||||
|
times[2] = 0.3;
|
||||||
|
times[3] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(PBCExpEmitter) {
|
||||||
|
ejectionPeriodMS = 2;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
|
||||||
|
ejectionVelocity = 2.5;
|
||||||
|
velocityVariance = 2.5;
|
||||||
|
|
||||||
|
thetaMin = 0.0;
|
||||||
|
thetaMax = 180.0;
|
||||||
|
|
||||||
|
lifetimeMS = 200;
|
||||||
|
|
||||||
|
particles = "PBCParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock SeekerProjectileData(LordRogStiloutte) {
|
||||||
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.5;
|
||||||
|
damageRadius = 5.0;
|
||||||
|
radiusDamageType = $DamageType::Zombie;
|
||||||
|
kickBackStrength = 2000;
|
||||||
|
|
||||||
|
explosion = "MissileExplosion";
|
||||||
|
splash = MissileSplash;
|
||||||
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
|
// is cranked up to full so the missile doesn't start
|
||||||
|
// out behind the player when the player is moving
|
||||||
|
// very quickly - bramage
|
||||||
|
|
||||||
|
baseEmitter = MortarSmokeEmitter;
|
||||||
|
delayEmitter = MissileFireEmitter;
|
||||||
|
puffEmitter = MissilePuffEmitter;
|
||||||
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
|
exhaustTimeMs = 300;
|
||||||
|
exhaustNodeName = "muzzlePoint1";
|
||||||
|
|
||||||
|
lifetimeMS = 20000; // z0dd - ZOD, 4/14/02. Was 6000
|
||||||
|
muzzleVelocity = 10.0;
|
||||||
|
maxVelocity = 80.0; // z0dd - ZOD, 4/14/02. Was 80.0
|
||||||
|
turningSpeed = 23.0;
|
||||||
|
acceleration = 15.0;
|
||||||
|
|
||||||
|
proximityRadius = 2.5;
|
||||||
|
|
||||||
|
terrainAvoidanceSpeed = 10;
|
||||||
|
terrainScanAhead = 7;
|
||||||
|
terrainHeightFail = 1;
|
||||||
|
terrainAvoidanceRadius = 3;
|
||||||
|
|
||||||
|
flareDistance = 40;
|
||||||
|
flareAngle = 20;
|
||||||
|
minSeekHeat = 0.0;
|
||||||
|
|
||||||
|
sound = MissileProjectileSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 5.0;
|
||||||
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
|
useFlechette = true;
|
||||||
|
flechetteDelayMs = 250;
|
||||||
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock PlayerData(LordRogZombieArmor) : LightMaleHumanArmor {
|
||||||
|
boundingBox = "1.63 1.63 2.6";
|
||||||
|
maxDamage = 650.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "bioderm_heavy.dts";
|
||||||
|
|
||||||
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = HeavyBiodermFootprint;
|
||||||
|
decalOffset = 0.4;
|
||||||
|
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
max[SmokeGrenade] = 0;
|
||||||
|
max[BeaconSmokeGrenade] = 0;
|
||||||
|
max[Blaster] = 0;
|
||||||
|
max[Plasma] = 0;
|
||||||
|
max[PlasmaAmmo] = 0;
|
||||||
|
max[Disc] = 0;
|
||||||
|
max[DiscAmmo] = 0;
|
||||||
|
max[SniperRifle] = 0;
|
||||||
|
max[GrenadeLauncher] = 0;
|
||||||
|
max[GrenadeLauncherAmmo] = 0;
|
||||||
|
max[Mortar] = 0;
|
||||||
|
max[MortarAmmo] = 0;
|
||||||
|
max[MissileLauncher] = 0;
|
||||||
|
max[MissileLauncherAmmo] = 0;
|
||||||
|
max[Chaingun] = 0;
|
||||||
|
max[ChaingunAmmo] = 0;
|
||||||
|
max[RepairGun] = 0;
|
||||||
|
max[CloakingPack] = 0;
|
||||||
|
max[SensorJammerPack] = 0;
|
||||||
|
max[EnergyPack] = 0;
|
||||||
|
max[RepairPack] = 0;
|
||||||
|
max[ShieldPack] = 0;
|
||||||
|
max[AmmoPack] = 0;
|
||||||
|
max[SatchelCharge] = 0;
|
||||||
|
max[MortarBarrelPack] = 0;
|
||||||
|
max[MissileBarrelPack] = 0;
|
||||||
|
max[AABarrelPack] = 0;
|
||||||
|
max[PlasmaBarrelPack] = 0;
|
||||||
|
max[ELFBarrelPack] = 0;
|
||||||
|
max[artillerybarrelpack] = 0;
|
||||||
|
max[MedPack] = 0;
|
||||||
|
max[InventoryDeployable] = 0;
|
||||||
|
max[MotionSensorDeployable] = 0;
|
||||||
|
max[PulseSensorDeployable] = 0;
|
||||||
|
max[TurretOutdoorDeployable] = 0;
|
||||||
|
max[TurretIndoorDeployable] = 0;
|
||||||
|
max[FlashGrenade] = 0;
|
||||||
|
max[ConcussionGrenade] = 0;
|
||||||
|
max[FlareGrenade] = 0;
|
||||||
|
max[TargetingLaser] = 0;
|
||||||
|
max[ELFGun] = 0;
|
||||||
|
max[ShockLance] = 0;
|
||||||
|
max[CameraGrenade] = 0;
|
||||||
|
max[Beacon] = 0;
|
||||||
|
max[flamerAmmoPack] = 0;
|
||||||
|
max[ParachutePack] = 0;
|
||||||
|
max[ConstructionTool] = 0;
|
||||||
|
max[MergeTool] = 0;
|
||||||
|
max[NerfGun] = 0;
|
||||||
|
max[NerfBallLauncher] = 0;
|
||||||
|
max[NerfBallLauncherAmmo] = 0;
|
||||||
|
max[SuperChaingun] = 0;
|
||||||
|
max[SuperChaingunAmmo] = 0;
|
||||||
|
max[RPChaingun] = 0;
|
||||||
|
max[RPChaingunAmmo] = 0;
|
||||||
|
max[MGClip] = 0;
|
||||||
|
max[LSMG] = 0;
|
||||||
|
max[LSMGAmmo] = 0;
|
||||||
|
max[LSMGClip] = 0;
|
||||||
|
max[snipergun] = 0;
|
||||||
|
max[snipergunAmmo] = 0;
|
||||||
|
max[Bazooka] = 0;
|
||||||
|
max[BazookaAmmo] = 0;
|
||||||
|
max[BunkerBuster] = 0;
|
||||||
|
max[MG42] = 0;
|
||||||
|
max[MG42Ammo] = 0;
|
||||||
|
max[SPistol] = 0;
|
||||||
|
max[Pistol] = 0;
|
||||||
|
max[PistolAmmo] = 0;
|
||||||
|
max[Pistolclip] = 0;
|
||||||
|
max[flamer] = 0;
|
||||||
|
max[flamerAmmo] = 0;
|
||||||
|
max[AALauncher] = 0;
|
||||||
|
max[AALauncherAmmo] = 0;
|
||||||
|
max[melee] = 0;
|
||||||
|
max[SOmelee] = 0;
|
||||||
|
max[KriegRifle] = 0;
|
||||||
|
max[KriegAmmo] = 0;
|
||||||
|
max[Rifleclip] = 0;
|
||||||
|
max[Shotgun] = 0;
|
||||||
|
max[ShotgunAmmo] = 0;
|
||||||
|
max[ShotgunClip] = 0;
|
||||||
|
max[RShotgun] = 0;
|
||||||
|
max[RShotgunAmmo] = 0;
|
||||||
|
max[RShotgunClip] = 0;
|
||||||
|
max[LMissileLauncher] = 0;
|
||||||
|
max[LMissileLauncherAmmo] = 0;
|
||||||
|
max[HRPChaingun] = 0;
|
||||||
|
max[RPGAmmo] = 0;
|
||||||
|
max[RPGItem] = 0;
|
||||||
|
max[spineDeployable] = 0;
|
||||||
|
max[mspineDeployable] = 0;
|
||||||
|
max[wWallDeployable] = 0;
|
||||||
|
max[floorDeployable] = 0;
|
||||||
|
max[WallDeployable] = 0;
|
||||||
|
max[DoorDeployable] = 0;
|
||||||
|
max[TurretLaserDeployable] = 0;
|
||||||
|
max[TurretMissileRackDeployable]= 0;
|
||||||
|
max[DiscTurretDeployable] = 0;
|
||||||
|
max[EnergizerDeployable] = 0;
|
||||||
|
max[TreeDeployable] = 0;
|
||||||
|
max[CrateDeployable] = 0;
|
||||||
|
max[DecorationDeployable] = 0;
|
||||||
|
max[LogoProjectorDeployable] = 0;
|
||||||
|
max[LightDeployable] = 0;
|
||||||
|
max[TripwireDeployable] = 0;
|
||||||
|
max[TelePadPack] = 0;
|
||||||
|
max[TurretBasePack] = 0;
|
||||||
|
max[LargeInventoryDeployable] = 0;
|
||||||
|
max[GeneratorDeployable] = 0;
|
||||||
|
max[SolarPanelDeployable] = 0;
|
||||||
|
max[SwitchDeployable] = 0;
|
||||||
|
max[MediumSensorDeployable] = 0;
|
||||||
|
max[LargeSensorDeployable] = 0;
|
||||||
|
max[SpySatelliteDeployable] = 0;
|
||||||
|
max[JumpadDeployable] = 0;
|
||||||
|
max[EscapePodDeployable] = 0;
|
||||||
|
max[ForceFieldDeployable] = 0;
|
||||||
|
max[GravityFieldDeployable] = 0;
|
||||||
|
max[VehiclePadPack] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
function SpawnLordRog(%position) {
|
function SpawnLordRog(%position) {
|
||||||
%Zombie = new player(){
|
%Zombie = new player(){
|
||||||
Datablock = "LordRogZombieArmor";
|
Datablock = "LordRogZombieArmor";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,254 @@
|
||||||
//LORD \/ARDISON & Dark Archmage Vardison
|
//LORD \/ARDISON & Dark Archmage Vardison
|
||||||
//THIS BOSS WILL MURDER OCCULTBADBOY
|
//THIS BOSS WILL MURDER OCCULTBADBOY
|
||||||
//Yeah, he really will
|
//Yeah, he really will
|
||||||
|
datablock LinearFlareProjectileData(SuperlaserProjectile) {
|
||||||
|
scale = "15.0 15.0 15.0";
|
||||||
|
faceViewer = false;
|
||||||
|
directDamage = 1.0;
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.9;
|
||||||
|
damageRadius = 30.0;
|
||||||
|
kickBackStrength = 1000.0;
|
||||||
|
radiusDamageType = $DamageType::Explosion;
|
||||||
|
|
||||||
|
explosion[0] = "HyperDevCannonExplosion2";
|
||||||
|
explosion[1] = "SatchelMainExplosion";
|
||||||
|
splash = PlasmaSplash;
|
||||||
|
baseEmitter = HyperDevCannonBaseEmitter;
|
||||||
|
|
||||||
|
|
||||||
|
dryVelocity = 200.0;
|
||||||
|
wetVelocity = 200;
|
||||||
|
velInheritFactor = 0.5;
|
||||||
|
fizzleTimeMS = 10000;
|
||||||
|
lifetimeMS = 10000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = -1;
|
||||||
|
|
||||||
|
//activateDelayMS = 100;
|
||||||
|
activateDelayMS = -1;
|
||||||
|
|
||||||
|
size[0] = 9;
|
||||||
|
size[1] = 10;
|
||||||
|
size[2] = 11;
|
||||||
|
|
||||||
|
|
||||||
|
numFlares = 400;
|
||||||
|
flareColor = "0.0 1.0 0";
|
||||||
|
flareModTexture = "flaremod";
|
||||||
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
|
sound = MissileProjectileSound;
|
||||||
|
fireSound = PlasmaFireSound;
|
||||||
|
wetFireSound = PlasmaFireWetSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 3.0;
|
||||||
|
lightColor = "0 0.75 0.25";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
datablock ParticleData(ShadowBaseParticle) {
|
||||||
|
dragCoeffiecient = 0.0;
|
||||||
|
gravityCoefficient = -0.2;
|
||||||
|
inheritedVelFactor = 0.0;
|
||||||
|
|
||||||
|
lifetimeMS = 800;
|
||||||
|
lifetimeVarianceMS = 500;
|
||||||
|
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -160.0;
|
||||||
|
spinRandomMax = 160.0;
|
||||||
|
|
||||||
|
animateTexture = true;
|
||||||
|
framesPerSec = 15;
|
||||||
|
|
||||||
|
textureName = "special/cloudflash";
|
||||||
|
|
||||||
|
colors[0] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[1] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[2] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
|
||||||
|
sizes[0] = 2.5;
|
||||||
|
sizes[1] = 2.7;
|
||||||
|
sizes[2] = 3.0;
|
||||||
|
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.7;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(ShadowBaseEmitter) {
|
||||||
|
ejectionPeriodMS = 10;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
|
||||||
|
ejectionVelocity = 1.5;
|
||||||
|
velocityVariance = 0.3;
|
||||||
|
|
||||||
|
thetaMin = 0.0;
|
||||||
|
thetaMax = 30.0;
|
||||||
|
|
||||||
|
particles = "ShadowBaseParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleData(SmallShadowBaseParticle) {
|
||||||
|
dragCoeffiecient = 0.0;
|
||||||
|
gravityCoefficient = -0.2;
|
||||||
|
inheritedVelFactor = 0.0;
|
||||||
|
|
||||||
|
lifetimeMS = 9999999999999;
|
||||||
|
lifetimeVarianceMS = 9999999999999;
|
||||||
|
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -160.0;
|
||||||
|
spinRandomMax = 160.0;
|
||||||
|
|
||||||
|
animateTexture = true;
|
||||||
|
framesPerSec = 15;
|
||||||
|
|
||||||
|
textureName = "special/cloudflash";
|
||||||
|
|
||||||
|
colors[0] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[1] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[2] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
|
||||||
|
sizes[0] = 0.5;
|
||||||
|
sizes[1] = 0.7;
|
||||||
|
sizes[2] = 1.0;
|
||||||
|
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.7;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(SmallShadowBaseEmitter) {
|
||||||
|
ejectionPeriodMS = 10;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
|
||||||
|
ejectionVelocity = 1.5;
|
||||||
|
velocityVariance = 0.3;
|
||||||
|
|
||||||
|
thetaMin = 0.0;
|
||||||
|
thetaMax = 30.0;
|
||||||
|
|
||||||
|
particles = "SmallShadowBaseParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleData(JetShadowParticle) {
|
||||||
|
dragCoeffiecient = 0.0;
|
||||||
|
gravityCoefficient = 0;
|
||||||
|
inheritedVelFactor = 0.0;
|
||||||
|
|
||||||
|
lifetimeMS = 2500;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
|
||||||
|
textureName = "particleTest";
|
||||||
|
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -160.0;
|
||||||
|
spinRandomMax = 160.0;
|
||||||
|
|
||||||
|
animateTexture = true;
|
||||||
|
framesPerSec = 15;
|
||||||
|
|
||||||
|
animTexName[0] = "special/Explosion/exp_0016";
|
||||||
|
animTexName[1] = "special/Explosion/exp_0018";
|
||||||
|
animTexName[2] = "special/Explosion/exp_0020";
|
||||||
|
animTexName[3] = "special/Explosion/exp_0022";
|
||||||
|
animTexName[4] = "special/Explosion/exp_0024";
|
||||||
|
animTexName[5] = "special/Explosion/exp_0026";
|
||||||
|
animTexName[6] = "special/Explosion/exp_0028";
|
||||||
|
animTexName[7] = "special/Explosion/exp_0030";
|
||||||
|
animTexName[8] = "special/Explosion/exp_0032";
|
||||||
|
|
||||||
|
colors[0] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[1] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[2] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
sizes[0] = 2.5;
|
||||||
|
sizes[1] = 1.25;
|
||||||
|
sizes[2] = 0.625;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.7;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(JetShadowEmitter) {
|
||||||
|
ejectionPeriodMS = 2;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
|
||||||
|
ejectionVelocity = 0;
|
||||||
|
velocityVariance = 0;
|
||||||
|
ejectionOffset = 5;
|
||||||
|
thetaMin = 22.5;
|
||||||
|
thetaMax = 45;
|
||||||
|
phiReferenceVel = 0;
|
||||||
|
phiVariance = 360;
|
||||||
|
spinRandomMin = "200";
|
||||||
|
spinRandomMax = "-200";
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "JetShadowParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleData(LaserBallGlobeSmoke) {
|
||||||
|
dragCoefficient = 50;/////////-----------------------
|
||||||
|
gravityCoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 1.0;
|
||||||
|
constantAcceleration = 0.0;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -360.0;
|
||||||
|
spinRandomMax = 360.0;
|
||||||
|
textureName = "particleTest";
|
||||||
|
colors[0] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[1] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[2] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
colors[3] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
sizes[0] = 1.0;
|
||||||
|
sizes[1] = 1.0;
|
||||||
|
sizes[2] = 1.0;
|
||||||
|
sizes[3] = 1.0;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.33;
|
||||||
|
times[2] = 0.66;
|
||||||
|
times[3] = 1.0;
|
||||||
|
mass = 0.7;
|
||||||
|
elasticity = 0.2;
|
||||||
|
friction = 1;
|
||||||
|
computeCRC = true;
|
||||||
|
haslight = true;
|
||||||
|
lightType = "PulsingLight";
|
||||||
|
lightColor = "0.2 0.0 0.5 1.0";
|
||||||
|
lightTime = "200";
|
||||||
|
lightRadius = "2.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(MiniShadowBallEmitter) {
|
||||||
|
ejectionPeriodMS = 0.3;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 0.0;
|
||||||
|
velocityVariance = 0.0;
|
||||||
|
ejectionOffset = 2;
|
||||||
|
thetaMin = 0;
|
||||||
|
thetaMax = 180;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "LaserBallGlobeSmoke";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock LinearFlareProjectileData(ShadowBomb) : FlamethrowerBolt {
|
||||||
|
baseEmitter = ShadowBaseEmitter;
|
||||||
|
fizzleTimeMS = 14000;
|
||||||
|
lifetimeMS = 10000; // z0dd - ZOD, 4/25/02. Was 6000
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock SeekerProjectileData(VardisonLaserBallMissile) : YvexNightmareMissile {
|
||||||
|
baseEmitter = ShadowBaseEmitter;
|
||||||
|
};
|
||||||
|
|
||||||
function VardisonLaserBallMissile::OnExplode(%data, %proj, %pos, %mod) {
|
function VardisonLaserBallMissile::OnExplode(%data, %proj, %pos, %mod) {
|
||||||
//LaserBall
|
//LaserBall
|
||||||
%ball = CreateEmitter(%pos, "MiniShadowBallEmitter", "0 0 0 0");
|
%ball = CreateEmitter(%pos, "MiniShadowBallEmitter", "0 0 0 0");
|
||||||
|
|
@ -30,6 +278,262 @@ function LaserBallStrike(%position, %count) {
|
||||||
schedule(100, 0, "LaserBallStrike", %position, %count);
|
schedule(100, 0, "LaserBallStrike", %position, %count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datablock LinearFlareProjectileData(VardisonSubShadowBomb) : DMPlasma {
|
||||||
|
explosion = MortarExplosion;
|
||||||
|
dryVelocity = 500.0; // z0dd - ZOD, 4/25/02. Was 50. Velocity of projectile out of water
|
||||||
|
wetVelocity = -1;
|
||||||
|
velInheritFactor = 1.0;
|
||||||
|
fizzleTimeMS = 14000;
|
||||||
|
lifetimeMS = 10000; // z0dd - ZOD, 4/25/02. Was 6000
|
||||||
|
};
|
||||||
|
|
||||||
|
//ARMOR DBs
|
||||||
|
datablock PlayerData(VardisonStage1Armor) : LightMaleHumanArmor {
|
||||||
|
runForce = 60.20 * 90;
|
||||||
|
runEnergyDrain = 0.0;
|
||||||
|
minRunEnergy = 10;
|
||||||
|
maxForwardSpeed = 9;
|
||||||
|
maxBackwardSpeed = 7;
|
||||||
|
maxSideSpeed = 7;
|
||||||
|
|
||||||
|
jumpForce = 14.0 * 90;
|
||||||
|
|
||||||
|
maxDamage = 300.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "light_male.dts";
|
||||||
|
jetEmitter = BiodermArmorJetEmitter;
|
||||||
|
jetEffect = BiodermArmorJetEffect;
|
||||||
|
|
||||||
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = LightBiodermFootprint;
|
||||||
|
decalOffset = 0.3;
|
||||||
|
|
||||||
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
damageScale[$DamageType::M1700] = 3.0;
|
||||||
|
damageScale[$DamageType::Missile] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Nuclear] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::EMP] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock PlayerData(DarkArchmageVardisonArmor) : VardisonStage1Armor {
|
||||||
|
maxDamage = 1000.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "light_male.dts";
|
||||||
|
jetEmitter = BiodermArmorJetEmitter;
|
||||||
|
jetEffect = BiodermArmorJetEffect;
|
||||||
|
|
||||||
|
damageScale[$DamageType::M1700] = 3.0;
|
||||||
|
damageScale[$DamageType::Missile] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Nuclear] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::EMP] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock FlyingVehicleData(VardisonStage2Flyer) : ShrikeDamageProfile {
|
||||||
|
spawnOffset = "0 0 2";
|
||||||
|
canControl = false;
|
||||||
|
catagory = "Vehicles";
|
||||||
|
shapeFile = "vehicle_air_bomber.dts";
|
||||||
|
multipassenger = false;
|
||||||
|
computeCRC = true;
|
||||||
|
|
||||||
|
debrisShapeName = "vehicle_air_bomber.dts";
|
||||||
|
debris = MeShapeDebris;
|
||||||
|
renderWhenDestroyed = false;
|
||||||
|
|
||||||
|
drag = 0.15;
|
||||||
|
density = 1.0;
|
||||||
|
|
||||||
|
mountPose[0] = sitting;
|
||||||
|
numMountPoints = 1;
|
||||||
|
isProtectedMountPoint[0] = false;
|
||||||
|
cameraMaxDist = 15;
|
||||||
|
cameraOffset = 2.5;
|
||||||
|
cameraLag = 0.9;
|
||||||
|
explosion = MeVehicleExplosion;
|
||||||
|
explosionDamage = 1.0;
|
||||||
|
explosionRadius = 10.0;
|
||||||
|
|
||||||
|
maxDamage = 50.0;
|
||||||
|
destroyedLevel = 50.0;
|
||||||
|
|
||||||
|
HDAddMassLevel = 49.9;
|
||||||
|
HDMassImage = LflyerHDMassImage;
|
||||||
|
|
||||||
|
isShielded = false;
|
||||||
|
energyPerDamagePoint = 0;
|
||||||
|
maxEnergy = 5000; // Afterburner and any energy weapon pool
|
||||||
|
rechargeRate = 4;
|
||||||
|
|
||||||
|
minDrag = 22; // Linear Drag (eventually slows you down when not thrusting...constant drag)
|
||||||
|
rotationalDrag = 900; // Anguler Drag (dampens the drift after you stop moving the mouse...also tumble drag)
|
||||||
|
|
||||||
|
maxAutoSpeed = 50; // Autostabilizer kicks in when less than this speed. (meters/second)
|
||||||
|
autoAngularForce = 400; // Angular stabilizer force (this force levels you out when autostabilizer kicks in)
|
||||||
|
autoLinearForce = 1; // Linear stabilzer force (this slows you down when autostabilizer kicks in)
|
||||||
|
autoInputDamping = 0.8; // Dampen control input so you don't` whack out at very slow speeds
|
||||||
|
|
||||||
|
|
||||||
|
// Maneuvering
|
||||||
|
maxSteeringAngle = 4.5; // Max radiens you can rotate the wheel. Smaller number is more maneuverable.
|
||||||
|
horizontalSurfaceForce = 6; // Horizontal center "wing" (provides "bite" into the wind for climbing/diving and turning)
|
||||||
|
verticalSurfaceForce = 4; // Vertical center "wing" (controls side slip. lower numbers make MORE slide.)
|
||||||
|
maneuveringForce = 5250; // Horizontal jets (W,S,D,A key thrust)
|
||||||
|
steeringForce = 675; // Steering jets (force applied when you move the mouse)
|
||||||
|
steeringRollForce = 3000; // Steering jets (how much you heel over when you turn)
|
||||||
|
rollForce = 1; // Auto-roll (self-correction to right you after you roll/invert)
|
||||||
|
hoverHeight = 2.5; // Height off the ground at rest
|
||||||
|
createHoverHeight = 1; // Height off the ground when created
|
||||||
|
maxForwardSpeed = 165; // speed in which forward thrust force is no longer applied (meters/second)
|
||||||
|
|
||||||
|
// Turbo Jet
|
||||||
|
jetForce = 2500; // Afterburner thrust (this is in addition to normal thrust)
|
||||||
|
minJetEnergy = 40; // Afterburner can't be used if below this threshhold.
|
||||||
|
jetEnergyDrain = 10; // Energy use of the afterburners (low number is less drain...can be fractional) // Auto stabilize speed
|
||||||
|
vertThrustMultiple = 1.25;
|
||||||
|
|
||||||
|
// Rigid body
|
||||||
|
mass = 150; // Mass of the vehicle
|
||||||
|
bodyFriction = 0; // Don't mess with this.
|
||||||
|
bodyRestitution = 0.5; // When you hit the ground, how much you rebound. (between 0 and 1)
|
||||||
|
minRollSpeed = 0; // Don't mess with this.
|
||||||
|
softImpactSpeed = 14; // Sound hooks. This is the soft hit.
|
||||||
|
hardImpactSpeed = 25; // Sound hooks. This is the hard hit.
|
||||||
|
|
||||||
|
// Ground Impact Damage (uses DamageType::Ground)
|
||||||
|
minImpactSpeed = 20; // If hit ground at speed above this then it's an impact. Meters/second
|
||||||
|
speedDamageScale = 0.06;
|
||||||
|
|
||||||
|
// Object Impact Damage (uses DamageType::Impact)
|
||||||
|
collDamageThresholdVel = 23.0;
|
||||||
|
collDamageMultiplier = 0.02;
|
||||||
|
|
||||||
|
//
|
||||||
|
minTrailSpeed = 70; // The speed your contrail shows up at.
|
||||||
|
trailEmitter = JetShadowEmitter;
|
||||||
|
forwardJetEmitter = JetShadowEmitter;
|
||||||
|
downJetEmitter = JetShadowEmitter;
|
||||||
|
|
||||||
|
//
|
||||||
|
jetSound = ScoutFlyerThrustSound;
|
||||||
|
engineSound = ScoutFlyerEngineSound;
|
||||||
|
softImpactSound = SoftImpactSound;
|
||||||
|
hardImpactSound = HardImpactSound;
|
||||||
|
//wheelImpactSound = WheelImpactSound;
|
||||||
|
|
||||||
|
//
|
||||||
|
softSplashSoundVelocity = 10.0;
|
||||||
|
mediumSplashSoundVelocity = 15.0;
|
||||||
|
hardSplashSoundVelocity = 20.0;
|
||||||
|
exitSplashSoundVelocity = 10.0;
|
||||||
|
|
||||||
|
exitingWater = VehicleExitWaterMediumSound;
|
||||||
|
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||||
|
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||||
|
impactWaterHard = VehicleImpactWaterMediumSound;
|
||||||
|
waterWakeSound = VehicleWakeMediumSplashSound;
|
||||||
|
|
||||||
|
dustEmitter = VehicleLiftoffDustEmitter;
|
||||||
|
triggerDustHeight = 4.0;
|
||||||
|
dustHeight = 1.0;
|
||||||
|
|
||||||
|
damageEmitter[0] = MeLightDamageSmoke;
|
||||||
|
damageEmitter[1] = MeHeavyDamageSmoke;
|
||||||
|
damageEmitter[2] = MeDamageBubbles;
|
||||||
|
damageEmitterOffset[0] = "0.0 -3.0 0.0 ";
|
||||||
|
damageLevelTolerance[0] = 0.4;
|
||||||
|
damageLevelTolerance[1] = 0.75;
|
||||||
|
numDmgEmitterAreas = 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
max[chaingunAmmo] = 2000;
|
||||||
|
max[MissileLauncherAmmo] = 200;
|
||||||
|
max[MortarAmmo] = 200;
|
||||||
|
|
||||||
|
damageScale[$DamageType::Nuclear] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::EMP] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
ShieldDamageScale[$DamageType::Bullet] = 0.01; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
minMountDist = 7;
|
||||||
|
|
||||||
|
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||||
|
splashEmitter[1] = VehicleFoamEmitter;
|
||||||
|
|
||||||
|
shieldImpact = VehicleShieldImpact;
|
||||||
|
|
||||||
|
cmdCategory = "Tactical";
|
||||||
|
cmdIcon = CMDFlyingScoutIcon;
|
||||||
|
cmdMiniIconName = "commander/MiniIcons/com_scout_grey";
|
||||||
|
targetNameTag = 'Lord Vardison';
|
||||||
|
targetTypeTag = '';
|
||||||
|
sensorData = SSTurretBaseSensorObj;
|
||||||
|
sensorRadius = SSTurretBaseSensorObj.detectRadius;
|
||||||
|
sensorColor = "9 9 255";
|
||||||
|
|
||||||
|
checkRadius = 5.5;
|
||||||
|
observeParameters = "1 10 10";
|
||||||
|
|
||||||
|
runningLight[0] = ShrikeLight1;
|
||||||
|
// runningLight[1] = ShrikeLight2;
|
||||||
|
|
||||||
|
shieldEffectScale = "0.937 1.125 0.60";
|
||||||
|
|
||||||
|
numWeapons = 3;
|
||||||
|
|
||||||
|
replaceTime = 90;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock PlayerData(VardisonStage3Armor) : LightMaleHumanArmor {
|
||||||
|
runForce = 60.20 * 90;
|
||||||
|
runEnergyDrain = 0.0;
|
||||||
|
minRunEnergy = 10;
|
||||||
|
maxForwardSpeed = 9;
|
||||||
|
maxBackwardSpeed = 7;
|
||||||
|
maxSideSpeed = 7;
|
||||||
|
|
||||||
|
jumpForce = 14.0 * 90;
|
||||||
|
|
||||||
|
maxDamage = 500.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "TR2Heavy_Male.dts";
|
||||||
|
jetEmitter = BiodermArmorJetEmitter;
|
||||||
|
jetEffect = BiodermArmorJetEffect;
|
||||||
|
|
||||||
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = LightBiodermFootprint;
|
||||||
|
decalOffset = 0.3;
|
||||||
|
|
||||||
|
boundingBox = "5 5 10";
|
||||||
|
|
||||||
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
damageScale[$DamageType::M1700] = 3.0;
|
||||||
|
damageScale[$DamageType::PlasmaCannon] = 0.001;
|
||||||
|
damageScale[$DamageType::Missile] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Nuclear] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::EMP] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
function StartDAVardison(%pos) {
|
function StartDAVardison(%pos) {
|
||||||
%Vardison = new player() {
|
%Vardison = new player() {
|
||||||
Datablock = "DarkArchmageVardisonArmor";
|
Datablock = "DarkArchmageVardisonArmor";
|
||||||
|
|
@ -334,6 +838,137 @@ function DoVardisonSuperCloseKill(%source, %target, %count) {
|
||||||
schedule(100, 0, "DoVardisonSuperCloseKill", %source, %target, %count);
|
schedule(100, 0, "DoVardisonSuperCloseKill", %source, %target, %count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ShadowBomb::onExplode(%data, %proj, %pos, %mod) {
|
||||||
|
%vec = %proj.spdvec;
|
||||||
|
%vec = getword(%vec, 0)@" "@getword(%vec, 1)@" 0";
|
||||||
|
%vec = vectorNormalize(%vec);
|
||||||
|
%vec = vectorscale(%vec, 30);
|
||||||
|
%result = containerRayCast(vectoradd(%pos,"0 0 10"), vectoradd(%pos,%vec), $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::TerrainObjectType, %proj);
|
||||||
|
for(%i = 0; %i < 3; %i++) {
|
||||||
|
if(%result)
|
||||||
|
schedule((5 * %i), 0, "Napalm2FindNewDir", %pos, %vec, %proj.sourceobject, 0, 0);
|
||||||
|
else {
|
||||||
|
%rndvec = (getRandom(1, 15) - 7.5)@" "@(getRandom(1, 15) - 7.5)@" "@((getRandom() * 5) + 5);
|
||||||
|
%newvec = vectoradd(%vec,%rndvec);
|
||||||
|
%newvec = vectoradd(%pos,%newvec);
|
||||||
|
%p = new LinearFlareProjectile() {
|
||||||
|
dataBlock = VardisonSubShadowBomb;
|
||||||
|
initialDirection = "0 0 -1";
|
||||||
|
initialPosition = %newvec;
|
||||||
|
sourceObject = %proj.sourceobject;
|
||||||
|
SourceSlot = 5;
|
||||||
|
};
|
||||||
|
%p.sourceobject = %proj.sourceobject;
|
||||||
|
%p.vector = %vec;
|
||||||
|
%p.count = 1;
|
||||||
|
if(%proj.maxExplode $= "") {
|
||||||
|
%p.maxExplode = 15;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%p.maxExplode = %proj.maxExplode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (%data.hasDamageRadius)
|
||||||
|
RadiusExplosion(%proj, %pos, %data.damageRadius, %data.indirectDamage, %data.kickBackStrength, %proj.sourceObject, %data.radiusDamageType);
|
||||||
|
}
|
||||||
|
|
||||||
|
function VardisonSubShadowBomb::onExplode(%data, %proj, %pos, %mod) {
|
||||||
|
if(%proj.count < %proj.maxExplode) { //holy... christ
|
||||||
|
%vec = vectorscale(vectornormalize(%proj.vector), 24);
|
||||||
|
%result = containerRayCast(vectoradd(%pos,"0 0 10"), vectoradd(%pos,%vec), $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::TerrainObjectType, %proj);
|
||||||
|
if(%result)
|
||||||
|
schedule(5, 0, "Napalm2FindNewDir", %pos, %vec, %proj.sourceobject, %proj.count, 0);
|
||||||
|
else {
|
||||||
|
%rndvec = (getRandom(1, 10) - 5)@" "@(getRandom(1, 10) - 5)@" "@((getRandom() * 5) + 5);
|
||||||
|
%newvec = vectoradd(%vec,%rndvec);
|
||||||
|
%newvec = vectoradd(%pos,%newvec);
|
||||||
|
%p = new LinearFlareProjectile() {
|
||||||
|
dataBlock = VardisonSubShadowBomb;
|
||||||
|
initialDirection = "0 0 -1";
|
||||||
|
initialPosition = %newvec;
|
||||||
|
sourceObject = %proj.sourceobject;
|
||||||
|
sourceSlot = 5;
|
||||||
|
};
|
||||||
|
%p.sourceobject = %proj.sourceobject;
|
||||||
|
%p.vector = %vec;
|
||||||
|
%p.count = %proj.count + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (%data.hasDamageRadius)
|
||||||
|
RadiusExplosion(%proj, %pos, %data.damageRadius, %data.indirectDamage, %data.kickBackStrength, %proj.sourceObject, %data.radiusDamageType);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Napalm2FindNewDir(%pos, %vec, %source, %count, %count2) {
|
||||||
|
if(%count2 == 2) {
|
||||||
|
%rndvec = getRandom(1, 10)@" "@getRandom(1, 10)@" "@((getRandom() * 5) + 4);
|
||||||
|
%newvec = vectoradd(%pos,%rndvec);
|
||||||
|
%p = new LinearFlareProjectile() {
|
||||||
|
dataBlock = VardisonSubShadowBomb;
|
||||||
|
initialDirection = "0 0 -1";
|
||||||
|
initialPosition = %newvec;
|
||||||
|
sourceObject = %source;
|
||||||
|
sourceSlot = 5;
|
||||||
|
};
|
||||||
|
%p.sourceobject = %source;
|
||||||
|
%p.vector = %vec;
|
||||||
|
%p.count = %count+1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(%count2 == 1) {
|
||||||
|
%vec = vectorscale(%vec,-1);
|
||||||
|
%result = containerRayCast(vectoradd(%pos,"0 0 10"), vectoradd(%pos,%vec), $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::TerrainObjectType, 0);
|
||||||
|
if(!(%result)){
|
||||||
|
%rndvec = getRandom(1, 10)@" "@getRandom(1, 10)@" "@((getRandom() * 5) + 4);
|
||||||
|
%newvec = vectoradd(%vec,%rndvec);
|
||||||
|
%newvec = vectoradd(%pos,%newvec);
|
||||||
|
%p = new LinearFlareProjectile() {
|
||||||
|
dataBlock = VardisonSubShadowBomb;
|
||||||
|
initialDirection = "0 0 -1";
|
||||||
|
initialPosition = %newvec;
|
||||||
|
sourceObject = %source;
|
||||||
|
sourceSlot = 5;
|
||||||
|
};
|
||||||
|
%p.sourceobject = %source;
|
||||||
|
%p.vector = %vec;
|
||||||
|
%p.count = %count+1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%chance = getrandom(1,4);
|
||||||
|
if(%chance <= 2){
|
||||||
|
%nv2 = (getword(%vec, 0) * -1);
|
||||||
|
%nv1 = getword(%vec, 1);
|
||||||
|
%vec = %nv1@" "@%nv2@" 0";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%nv2 = getword(%vec, 0);
|
||||||
|
%nv1 = (getword(%vec, 1) * -1);
|
||||||
|
%vec = %nv1@" "@%nv2@" 0";
|
||||||
|
}
|
||||||
|
%result = containerRayCast(vectoradd(%pos,"0 0 10"), vectoradd(%pos,%vec), $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::TerrainObjectType, 0);
|
||||||
|
if(!(%result)){
|
||||||
|
%rndvec = getRandom(1, 10)@" "@getRandom(1, 10)@" "@((getRandom() * 5) + 4);
|
||||||
|
%newvec = vectoradd(%vec,%rndvec);
|
||||||
|
%newvec = vectoradd(%pos,%newvec);
|
||||||
|
%p = new LinearFlareProjectile() {
|
||||||
|
dataBlock = VardisonSubShadowBomb;
|
||||||
|
initialDirection = "0 0 -1";
|
||||||
|
initialPosition = %newvec;
|
||||||
|
sourceObject = %source;
|
||||||
|
sourceSlot = 5;
|
||||||
|
};
|
||||||
|
%p.sourceobject = %source;
|
||||||
|
%p.vector = %vec;
|
||||||
|
%p.count = %count+1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%count2++;
|
||||||
|
schedule(2, 0, "Napalm2FindNewDir", %pos, %vec, %source, %count, %count2);
|
||||||
|
}
|
||||||
|
|
||||||
function GOVDoFlameCano(%g, %target) {
|
function GOVDoFlameCano(%g, %target) {
|
||||||
if(!isObject(%g) || %g.getState() $= "dead") {
|
if(!isObject(%g) || %g.getState() $= "dead") {
|
||||||
return;
|
return;
|
||||||
|
|
@ -695,7 +1330,7 @@ function VardisonAttack(%boss, %att, %arg) {
|
||||||
sourceObject = %boss;
|
sourceObject = %boss;
|
||||||
sourceSlot = 4;
|
sourceSlot = 4;
|
||||||
};
|
};
|
||||||
//%p.maxExplode = %detCt;
|
%p.maxExplode = %detCt;
|
||||||
MissionCleanup.add(%p);
|
MissionCleanup.add(%p);
|
||||||
|
|
||||||
case "ShadowBombLaunchAbove":
|
case "ShadowBombLaunchAbove":
|
||||||
|
|
@ -838,7 +1473,18 @@ function InvokeStillwallLoop(%boss) {
|
||||||
%boss.InvokeLoop = schedule(100, 0, "InvokeStillwallLoop", %boss);
|
%boss.InvokeLoop = schedule(100, 0, "InvokeStillwallLoop", %boss);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
datablock SeekerProjectileData(VardisonMiniDemonSpawner) : VardisonNightmareMissile {
|
||||||
|
baseEmitter = ShadowBaseEmitter;
|
||||||
|
};
|
||||||
|
|
||||||
function VardisonMiniDemonSpawner::OnExplode(%data, %proj, %pos, %mod) {
|
function VardisonMiniDemonSpawner::OnExplode(%data, %proj, %pos, %mod) {
|
||||||
//LaserBall
|
//LaserBall
|
||||||
%ball = CreateEmitter(%pos, "MiniShadowBallEmitter", "0 0 0 0");
|
%ball = CreateEmitter(%pos, "MiniShadowBallEmitter", "0 0 0 0");
|
||||||
|
|
@ -848,6 +1494,77 @@ function VardisonMiniDemonSpawner::OnExplode(%data, %proj, %pos, %mod) {
|
||||||
CreateDemonAT(vectorAdd(%pos, "0 0 3"));
|
CreateDemonAT(vectorAdd(%pos, "0 0 3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datablock PlayerData(MiniDemonArmor) : LightMaleHumanArmor {
|
||||||
|
runForce = 60.20 * 90;
|
||||||
|
runEnergyDrain = 0.0;
|
||||||
|
minRunEnergy = 10;
|
||||||
|
maxForwardSpeed = 9;
|
||||||
|
maxBackwardSpeed = 7;
|
||||||
|
maxSideSpeed = 7;
|
||||||
|
|
||||||
|
jumpForce = 14.0 * 90;
|
||||||
|
|
||||||
|
maxDamage = 2.8;
|
||||||
|
minImpactSpeed = 1000;
|
||||||
|
shapeFile = "bioderm_medium.dts";
|
||||||
|
jetEmitter = BiodermArmorJetEmitter;
|
||||||
|
jetEffect = BiodermArmorJetEffect;
|
||||||
|
|
||||||
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = LightBiodermFootprint;
|
||||||
|
decalOffset = 0.3;
|
||||||
|
|
||||||
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
damageScale[$DamageType::M1700] = 3.0;
|
||||||
|
damageScale[$DamageType::PlasmaCannon] = 0.001;
|
||||||
|
damageScale[$DamageType::Missile] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::Nuclear] = 0.0000000000000001;
|
||||||
|
damageScale[$DamageType::EMP] = 0.0000000000000001;
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock GrenadeProjectileData(MiniDemonBlaster) {
|
||||||
|
projectileShapeName = "plasmabolt.dts";
|
||||||
|
emitterDelay = -1;
|
||||||
|
directDamage = 0.0;
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.45;
|
||||||
|
damageRadius = 5.0; // z0dd - ZOD, 8/13/02. Was 20.0
|
||||||
|
radiusDamageType = $DamageType::Demon;
|
||||||
|
kickBackStrength = 1500;
|
||||||
|
|
||||||
|
explosion = "MortarExplosion";
|
||||||
|
underwaterExplosion = "MortarExplosion";
|
||||||
|
velInheritFactor = 0;
|
||||||
|
splash = PlasmaSplash;
|
||||||
|
depthTolerance = 100.0;
|
||||||
|
|
||||||
|
baseEmitter = DemonFBSmokeEmitter;
|
||||||
|
bubbleEmitter = DemonFBSmokeEmitter;
|
||||||
|
|
||||||
|
grenadeElasticity = 0;
|
||||||
|
grenadeFriction = 0.4;
|
||||||
|
armingDelayMS = -1; // z0dd - ZOD, 4/14/02. Was 2000
|
||||||
|
|
||||||
|
gravityMod = 0.4; // z0dd - ZOD, 5/18/02. Make mortar projectile heavier, less floaty
|
||||||
|
muzzleVelocity = 125.0; // z0dd - ZOD, 8/13/02. More velocity to compensate for higher gravity. Was 63.7
|
||||||
|
drag = 0;
|
||||||
|
sound = PlasmaProjectileSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 10;
|
||||||
|
lightColor = "1 0.75 0.25";
|
||||||
|
|
||||||
|
hasLightUnderwaterColor = true;
|
||||||
|
underWaterLightColor = "1 0.75 0.25";
|
||||||
|
};
|
||||||
|
|
||||||
function CreateDemon(%pos) {
|
function CreateDemon(%pos) {
|
||||||
%p = new SeekerProjectile() {
|
%p = new SeekerProjectile() {
|
||||||
dataBlock = VardisonMiniDemonSpawner;
|
dataBlock = VardisonMiniDemonSpawner;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,198 @@
|
||||||
//BLOCK FUNCTIONS
|
//DATABLOCKS
|
||||||
|
datablock ParticleData(InflictionNightmareGlobeSmoke) {
|
||||||
|
dragCoefficient = 50;/////////-----------------------
|
||||||
|
gravityCoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 1.0;
|
||||||
|
constantAcceleration = 0.0;
|
||||||
|
lifetimeMS = 5050;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -360.0;
|
||||||
|
spinRandomMax = 360.0;
|
||||||
|
textureName = "particleTest";
|
||||||
|
colors[0] = "0.5 0.1 0.9 1.0";
|
||||||
|
colors[1] = "0.5 0.1 0.9 1.0";
|
||||||
|
colors[2] = "0.5 0.1 0.9 1.0";
|
||||||
|
colors[3] = "0.5 0.1 0.9";
|
||||||
|
sizes[0] = 1.0;
|
||||||
|
sizes[1] = 1.0;
|
||||||
|
sizes[2] = 1.0;
|
||||||
|
sizes[3] = 1.0;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.33;
|
||||||
|
times[2] = 0.66;
|
||||||
|
times[3] = 1.0;
|
||||||
|
mass = 0.7;
|
||||||
|
elasticity = 0.2;
|
||||||
|
friction = 1;
|
||||||
|
computeCRC = true;
|
||||||
|
haslight = true;
|
||||||
|
lightType = "PulsingLight";
|
||||||
|
lightColor = "0.2 0.0 0.5 1.0";
|
||||||
|
lightTime = "200";
|
||||||
|
lightRadius = "2.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(InfNightmareGlobeEmitter) {
|
||||||
|
ejectionPeriodMS = 0.1;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 0.0;
|
||||||
|
velocityVariance = 0.0;
|
||||||
|
ejectionOffset = 5;
|
||||||
|
thetaMin = 0;
|
||||||
|
thetaMax = 180;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "InflictionNightmareGlobeSmoke";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
datablock ParticleData(NightmareGlobeSmoke) {
|
||||||
|
dragCoefficient = 50;/////////-----------------------
|
||||||
|
gravityCoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 1.0;
|
||||||
|
constantAcceleration = 0.0;
|
||||||
|
lifetimeMS = 5050;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -360.0;
|
||||||
|
spinRandomMax = 360.0;
|
||||||
|
textureName = "particleTest";
|
||||||
|
colors[0] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[1] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[2] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
colors[3] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
sizes[0] = 1.0;
|
||||||
|
sizes[1] = 1.0;
|
||||||
|
sizes[2] = 1.0;
|
||||||
|
sizes[3] = 1.0;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.33;
|
||||||
|
times[2] = 0.66;
|
||||||
|
times[3] = 1.0;
|
||||||
|
mass = 0.7;
|
||||||
|
elasticity = 0.2;
|
||||||
|
friction = 1;
|
||||||
|
computeCRC = true;
|
||||||
|
haslight = true;
|
||||||
|
lightType = "PulsingLight";
|
||||||
|
lightColor = "0.2 0.0 0.5 1.0";
|
||||||
|
lightTime = "200";
|
||||||
|
lightRadius = "2.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(NightmareGlobeEmitter) {
|
||||||
|
ejectionPeriodMS = 0.1;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 0.0;
|
||||||
|
velocityVariance = 0.0;
|
||||||
|
ejectionOffset = 5;
|
||||||
|
thetaMin = 0;
|
||||||
|
thetaMax = 180;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "NightmareGlobeSmoke";
|
||||||
|
};
|
||||||
|
|
||||||
|
//Yvex STUFF.. MORE
|
||||||
|
datablock ParticleData(GreenEmitParticle) {
|
||||||
|
dragCoeffiecient = 1;
|
||||||
|
gravityCoefficient = -0.3; // rises slowly
|
||||||
|
inheritedVelFactor = 0;
|
||||||
|
|
||||||
|
lifetimeMS = 300;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
useInvAlpha = false;
|
||||||
|
spinRandomMin = 0.0;
|
||||||
|
spinRandomMax = 0.0;
|
||||||
|
|
||||||
|
animateTexture = false;
|
||||||
|
|
||||||
|
textureName = "flareBase"; // "special/Smoke/bigSmoke"
|
||||||
|
|
||||||
|
colors[0] = "0 1 0";
|
||||||
|
colors[1] = "0 1 0";
|
||||||
|
colors[2] = "0 1 0";
|
||||||
|
|
||||||
|
sizes[0] = 0.8;
|
||||||
|
sizes[1] = 0.8;
|
||||||
|
sizes[2] = 0.8;
|
||||||
|
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 1.0;
|
||||||
|
times[2] = 5.0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(PulseGreenEmitter) {
|
||||||
|
ejectionPeriodMS = 2;
|
||||||
|
periodVarianceMS = 1;
|
||||||
|
|
||||||
|
ejectionVelocity = 10;
|
||||||
|
velocityVariance = 0;
|
||||||
|
|
||||||
|
thetaMin = 89.0;
|
||||||
|
thetaMax = 90.0;
|
||||||
|
|
||||||
|
orientParticles = false;
|
||||||
|
|
||||||
|
particles = "GreenEmitParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock SeekerProjectileData(YvexNightmareMissile){
|
||||||
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.8;
|
||||||
|
damageRadius = 8.0;
|
||||||
|
radiusDamageType = $DamageType::Missile;
|
||||||
|
kickBackStrength = 2000;
|
||||||
|
|
||||||
|
explosion = "MissileExplosion";
|
||||||
|
splash = MissileSplash;
|
||||||
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
|
// is cranked up to full so the missile doesn't start
|
||||||
|
// out behind the player when the player is moving
|
||||||
|
// very quickly - bramage
|
||||||
|
|
||||||
|
delayEmitter = MissileFireEmitter;
|
||||||
|
puffEmitter = MissilePuffEmitter;
|
||||||
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
|
exhaustTimeMs = 300;
|
||||||
|
exhaustNodeName = "muzzlePoint1";
|
||||||
|
|
||||||
|
lifetimeMS = 30000;
|
||||||
|
muzzleVelocity = 10.0;
|
||||||
|
maxVelocity = 150.0;
|
||||||
|
turningSpeed = 110.0;
|
||||||
|
acceleration = 350.0;
|
||||||
|
|
||||||
|
proximityRadius = 3;
|
||||||
|
|
||||||
|
terrainAvoidanceSpeed = 180;
|
||||||
|
terrainScanAhead = 25;
|
||||||
|
terrainHeightFail = 12;
|
||||||
|
terrainAvoidanceRadius = 100;
|
||||||
|
|
||||||
|
flareDistance = 200;
|
||||||
|
flareAngle = 30;
|
||||||
|
|
||||||
|
sound = MissileProjectileSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 5.0;
|
||||||
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
|
useFlechette = true;
|
||||||
|
flechetteDelayMs = 550;
|
||||||
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
|
||||||
|
baseEmitter = NMMissileBaseEmitter;
|
||||||
|
};
|
||||||
|
|
||||||
function YvexNightmareMissile::OnExplode(%data, %proj, %pos, %mod) {
|
function YvexNightmareMissile::OnExplode(%data, %proj, %pos, %mod) {
|
||||||
%source = %proj.SourceObject;
|
%source = %proj.SourceObject;
|
||||||
InitContainerRadiusSearch(%proj.getPosition(), 6, $TypeMasks::PlayerObjectType);
|
InitContainerRadiusSearch(%proj.getPosition(), 6, $TypeMasks::PlayerObjectType);
|
||||||
|
|
@ -9,46 +203,344 @@ function YvexNightmareMissile::OnExplode(%data, %proj, %pos, %mod) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function KillerPulse::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) {
|
datablock LinearFlareProjectileData(KillerPulse) {
|
||||||
if (%targetObject.getClassName() $= "Player" && %targetObject.isBoss) {
|
scale = "1.0 1.0 1.0";
|
||||||
messageall('msgkillcurse', "\c5"@getTaggedString(%targetObject.client.name)@" Took a fatal Hit from "@$TWM2::ZombieName[7]@"'s Dark Energy");
|
faceViewer = false;
|
||||||
%targetObject.throwWeapon();
|
directDamage = 0.00001;
|
||||||
%targetObject.clearinventory();
|
hasDamageRadius = false;
|
||||||
YvexAttack_FUNC("KillLoop", %targetObject);
|
indirectDamage = 0.6;
|
||||||
}
|
damageRadius = 10.0;
|
||||||
}
|
kickBackStrength = 100.0;
|
||||||
|
directDamageType = $DamageType::Admin;
|
||||||
|
indirectDamageType = $DamageType::Admin;
|
||||||
|
|
||||||
function YvexZombieMakerMissile::OnExplode(%data, %proj, %pos, %mod) {
|
explosion = "BlasterExplosion";
|
||||||
%c = CreateEmitter(%pos, NightmareGlobeEmitter, "0 0 1");
|
splash = PlasmaSplash;
|
||||||
%rand = getRandom(1, 6);
|
|
||||||
%c.schedule(%rand * 750, "delete");
|
|
||||||
for(%i = 0; %i < %rand; %i++) {
|
|
||||||
%time = %i * 750;
|
|
||||||
%type = getRandomZombieType("1 2 3 4 5 9 12 13");
|
|
||||||
schedule(%time, 0, "StartAZombie", vectoradd(%pos, "0 0 1"), %type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function YvexSniperShot::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) {
|
dryVelocity = 200.0;
|
||||||
if(!isplayer(%targetObject)) {
|
wetVelocity = 10;
|
||||||
return;
|
velInheritFactor = 0.5;
|
||||||
}
|
fizzleTimeMS = 30000;
|
||||||
%targ = %targetObject.client;
|
lifetimeMS = 30000;
|
||||||
%Zombie = %projectile.sourceObject;
|
explodeOnDeath = false;
|
||||||
%targ.nightmareticks = 0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
Yvexnightmareloop(%zombie,%targ);
|
explodeOnWaterImpact = true;
|
||||||
%randMessage = getrandom(3)+1;
|
deflectionOnWaterImpact = 0.0;
|
||||||
switch(%randMessage) {
|
fizzleUnderwaterMS = -1;
|
||||||
case 1:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Let the revenge begin, "@getTaggedString(%targ.name)@".");
|
baseEmitter = PulseGreenEmitter;
|
||||||
case 2:
|
delayEmitter = PulseGreenEmitter;
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Taste my vengance... "@getTaggedString(%targ.name)@".");
|
bubbleEmitter = PulseGreenEmitter;
|
||||||
case 3:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Sleep Forever... "@getTaggedString(%targ.name)@".");
|
//activateDelayMS = 100;
|
||||||
default:
|
activateDelayMS = -1;
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": This Nightmare will lock you forever "@getTaggedString(%targ.name)@"!");
|
|
||||||
}
|
size[0] = 0.2;
|
||||||
}
|
size[1] = 0.2;
|
||||||
|
size[2] = 0.2;
|
||||||
|
|
||||||
|
|
||||||
|
numFlares = 15;
|
||||||
|
flareColor = "0 1 0";
|
||||||
|
flareModTexture = "flaremod";
|
||||||
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
|
sound = MissileProjectileSound;
|
||||||
|
fireSound = PlasmaFireSound;
|
||||||
|
wetFireSound = PlasmaFireWetSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 3.0;
|
||||||
|
lightColor = "0 1 0";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleData(PurpleNightmareEmitParticle) {
|
||||||
|
dragCoeffiecient = 1;
|
||||||
|
gravityCoefficient = -0.3; // rises slowly
|
||||||
|
inheritedVelFactor = 0;
|
||||||
|
|
||||||
|
lifetimeMS = 300;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
useInvAlpha = false;
|
||||||
|
spinRandomMin = 0.0;
|
||||||
|
spinRandomMax = 0.0;
|
||||||
|
|
||||||
|
animateTexture = false;
|
||||||
|
|
||||||
|
textureName = "flareBase"; // "special/Smoke/bigSmoke"
|
||||||
|
|
||||||
|
colors[0] = "0.5 0.1 0.9 1.0";
|
||||||
|
colors[1] = "0.5 0.1 0.9 1.0";
|
||||||
|
colors[2] = "0.5 0.1 0.9";
|
||||||
|
|
||||||
|
sizes[0] = 0.4;
|
||||||
|
sizes[1] = 0.4;
|
||||||
|
sizes[2] = 0.4;
|
||||||
|
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 1.0;
|
||||||
|
times[2] = 5.0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(YvexSniperEmitter) {
|
||||||
|
ejectionPeriodMS = 2;
|
||||||
|
periodVarianceMS = 1;
|
||||||
|
|
||||||
|
ejectionVelocity = 10;
|
||||||
|
velocityVariance = 0;
|
||||||
|
|
||||||
|
thetaMin = 89.0;
|
||||||
|
thetaMax = 90.0;
|
||||||
|
|
||||||
|
orientParticles = false;
|
||||||
|
|
||||||
|
particles = "PurpleNightmareEmitParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock LinearFlareProjectileData(YvexSniperShot) {
|
||||||
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
|
scale = "3.0 5.0 3.0";
|
||||||
|
faceViewer = true;
|
||||||
|
directDamage = 0.01;
|
||||||
|
kickBackStrength = 4000.0;
|
||||||
|
DirectDamageType = $DamageType::Zombie;
|
||||||
|
|
||||||
|
explosion = "BlasterExplosion";
|
||||||
|
|
||||||
|
dryVelocity = 150.0;
|
||||||
|
wetVelocity = -1;
|
||||||
|
velInheritFactor = 0.3;
|
||||||
|
fizzleTimeMS = 10000;
|
||||||
|
lifetimeMS = 10000;
|
||||||
|
explodeOnDeath = true;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = -1;
|
||||||
|
|
||||||
|
activateDelayMS = 100;
|
||||||
|
activateDelayMS = -1;
|
||||||
|
|
||||||
|
baseEmitter = YvexSniperEmitter;
|
||||||
|
|
||||||
|
size[0] = 0.0;
|
||||||
|
size[1] = 0.0;
|
||||||
|
size[2] = 0.0;
|
||||||
|
|
||||||
|
|
||||||
|
numFlares = 0;
|
||||||
|
flareColor = "0.0 0.0 0.0";
|
||||||
|
flareModTexture = "flaremod";
|
||||||
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
|
sound = PlasmaProjectileSound;
|
||||||
|
fireSound = PlasmaFireSound;
|
||||||
|
wetFireSound = PlasmaFireWetSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 3.0;
|
||||||
|
lightColor = "1 0.75 0.25";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock SeekerProjectileData(YvexZombieMakerMissile) {
|
||||||
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.5;
|
||||||
|
damageRadius = 5.0;
|
||||||
|
radiusDamageType = $DamageType::Zombie;
|
||||||
|
kickBackStrength = 2000;
|
||||||
|
|
||||||
|
explosion = "MissileExplosion";
|
||||||
|
splash = MissileSplash;
|
||||||
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
|
// is cranked up to full so the missile doesn't start
|
||||||
|
// out behind the player when the player is moving
|
||||||
|
// very quickly - bramage
|
||||||
|
|
||||||
|
baseEmitter = MortarSmokeEmitter;
|
||||||
|
delayEmitter = MissileFireEmitter;
|
||||||
|
puffEmitter = MissilePuffEmitter;
|
||||||
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
|
exhaustTimeMs = 300;
|
||||||
|
exhaustNodeName = "muzzlePoint1";
|
||||||
|
|
||||||
|
lifetimeMS = 30000; // z0dd - ZOD, 4/14/02. Was 6000
|
||||||
|
muzzleVelocity = 30.0;
|
||||||
|
maxVelocity = 35.0; // z0dd - ZOD, 4/14/02. Was 80.0
|
||||||
|
turningSpeed = 23.0;
|
||||||
|
acceleration = 15.0;
|
||||||
|
|
||||||
|
proximityRadius = 2.5;
|
||||||
|
|
||||||
|
terrainAvoidanceSpeed = 10;
|
||||||
|
terrainScanAhead = 7;
|
||||||
|
terrainHeightFail = 1;
|
||||||
|
terrainAvoidanceRadius = 3;
|
||||||
|
|
||||||
|
flareDistance = 40;
|
||||||
|
flareAngle = 20;
|
||||||
|
minSeekHeat = 0.0;
|
||||||
|
|
||||||
|
sound = MissileProjectileSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 5.0;
|
||||||
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
|
useFlechette = true;
|
||||||
|
flechetteDelayMs = 250;
|
||||||
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock PlayerData(YvexZombieArmor) : LightMaleHumanArmor {
|
||||||
|
boundingBox = "1.63 1.63 2.6";
|
||||||
|
maxDamage = 500.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "medium_male.dts";
|
||||||
|
|
||||||
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = HeavyBiodermFootprint;
|
||||||
|
decalOffset = 0.4;
|
||||||
|
|
||||||
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
damageScale[$DamageType::W1700] = 3.0;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
max[SmokeGrenade] = 0;
|
||||||
|
max[BeaconSmokeGrenade] = 0;
|
||||||
|
max[Blaster] = 0;
|
||||||
|
max[Plasma] = 0;
|
||||||
|
max[PlasmaAmmo] = 0;
|
||||||
|
max[Disc] = 0;
|
||||||
|
max[DiscAmmo] = 0;
|
||||||
|
max[SniperRifle] = 0;
|
||||||
|
max[GrenadeLauncher] = 0;
|
||||||
|
max[GrenadeLauncherAmmo] = 0;
|
||||||
|
max[Mortar] = 0;
|
||||||
|
max[MortarAmmo] = 0;
|
||||||
|
max[MissileLauncher] = 0;
|
||||||
|
max[MissileLauncherAmmo] = 0;
|
||||||
|
max[Chaingun] = 0;
|
||||||
|
max[ChaingunAmmo] = 0;
|
||||||
|
max[RepairGun] = 0;
|
||||||
|
max[CloakingPack] = 0;
|
||||||
|
max[SensorJammerPack] = 0;
|
||||||
|
max[EnergyPack] = 0;
|
||||||
|
max[RepairPack] = 0;
|
||||||
|
max[ShieldPack] = 0;
|
||||||
|
max[AmmoPack] = 0;
|
||||||
|
max[SatchelCharge] = 0;
|
||||||
|
max[MortarBarrelPack] = 0;
|
||||||
|
max[MissileBarrelPack] = 0;
|
||||||
|
max[AABarrelPack] = 0;
|
||||||
|
max[PlasmaBarrelPack] = 0;
|
||||||
|
max[ELFBarrelPack] = 0;
|
||||||
|
max[artillerybarrelpack] = 0;
|
||||||
|
max[MedPack] = 0;
|
||||||
|
max[InventoryDeployable] = 0;
|
||||||
|
max[MotionSensorDeployable] = 0;
|
||||||
|
max[PulseSensorDeployable] = 0;
|
||||||
|
max[TurretOutdoorDeployable] = 0;
|
||||||
|
max[TurretIndoorDeployable] = 0;
|
||||||
|
max[FlashGrenade] = 0;
|
||||||
|
max[ConcussionGrenade] = 0;
|
||||||
|
max[FlareGrenade] = 0;
|
||||||
|
max[TargetingLaser] = 0;
|
||||||
|
max[ELFGun] = 0;
|
||||||
|
max[ShockLance] = 0;
|
||||||
|
max[CameraGrenade] = 0;
|
||||||
|
max[Beacon] = 0;
|
||||||
|
max[flamerAmmoPack] = 0;
|
||||||
|
max[ParachutePack] = 0;
|
||||||
|
max[ConstructionTool] = 0;
|
||||||
|
max[MergeTool] = 0;
|
||||||
|
max[NerfGun] = 0;
|
||||||
|
max[NerfBallLauncher] = 0;
|
||||||
|
max[NerfBallLauncherAmmo] = 0;
|
||||||
|
max[SuperChaingun] = 0;
|
||||||
|
max[SuperChaingunAmmo] = 0;
|
||||||
|
max[RPChaingun] = 0;
|
||||||
|
max[RPChaingunAmmo] = 0;
|
||||||
|
max[MGClip] = 0;
|
||||||
|
max[LSMG] = 0;
|
||||||
|
max[LSMGAmmo] = 0;
|
||||||
|
max[LSMGClip] = 0;
|
||||||
|
max[snipergun] = 0;
|
||||||
|
max[snipergunAmmo] = 0;
|
||||||
|
max[Bazooka] = 0;
|
||||||
|
max[BazookaAmmo] = 0;
|
||||||
|
max[BunkerBuster] = 0;
|
||||||
|
max[MG42] = 0;
|
||||||
|
max[MG42Ammo] = 0;
|
||||||
|
max[SPistol] = 0;
|
||||||
|
max[Pistol] = 0;
|
||||||
|
max[PistolAmmo] = 0;
|
||||||
|
max[Pistolclip] = 0;
|
||||||
|
max[flamer] = 0;
|
||||||
|
max[flamerAmmo] = 0;
|
||||||
|
max[AALauncher] = 0;
|
||||||
|
max[AALauncherAmmo] = 0;
|
||||||
|
max[melee] = 0;
|
||||||
|
max[SOmelee] = 0;
|
||||||
|
max[KriegRifle] = 0;
|
||||||
|
max[KriegAmmo] = 0;
|
||||||
|
max[Rifleclip] = 0;
|
||||||
|
max[Shotgun] = 0;
|
||||||
|
max[ShotgunAmmo] = 0;
|
||||||
|
max[ShotgunClip] = 0;
|
||||||
|
max[RShotgun] = 0;
|
||||||
|
max[RShotgunAmmo] = 0;
|
||||||
|
max[RShotgunClip] = 0;
|
||||||
|
max[LMissileLauncher] = 0;
|
||||||
|
max[LMissileLauncherAmmo] = 0;
|
||||||
|
max[HRPChaingun] = 0;
|
||||||
|
max[RPGAmmo] = 0;
|
||||||
|
max[RPGItem] = 0;
|
||||||
|
max[spineDeployable] = 0;
|
||||||
|
max[mspineDeployable] = 0;
|
||||||
|
max[wWallDeployable] = 0;
|
||||||
|
max[floorDeployable] = 0;
|
||||||
|
max[WallDeployable] = 0;
|
||||||
|
max[DoorDeployable] = 0;
|
||||||
|
max[TurretLaserDeployable] = 0;
|
||||||
|
max[TurretMissileRackDeployable]= 0;
|
||||||
|
max[DiscTurretDeployable] = 0;
|
||||||
|
max[EnergizerDeployable] = 0;
|
||||||
|
max[TreeDeployable] = 0;
|
||||||
|
max[CrateDeployable] = 0;
|
||||||
|
max[DecorationDeployable] = 0;
|
||||||
|
max[LogoProjectorDeployable] = 0;
|
||||||
|
max[LightDeployable] = 0;
|
||||||
|
max[TripwireDeployable] = 0;
|
||||||
|
max[TelePadPack] = 0;
|
||||||
|
max[TurretBasePack] = 0;
|
||||||
|
max[LargeInventoryDeployable] = 0;
|
||||||
|
max[GeneratorDeployable] = 0;
|
||||||
|
max[SolarPanelDeployable] = 0;
|
||||||
|
max[SwitchDeployable] = 0;
|
||||||
|
max[MediumSensorDeployable] = 0;
|
||||||
|
max[LargeSensorDeployable] = 0;
|
||||||
|
max[SpySatelliteDeployable] = 0;
|
||||||
|
max[JumpadDeployable] = 0;
|
||||||
|
max[EscapePodDeployable] = 0;
|
||||||
|
max[ForceFieldDeployable] = 0;
|
||||||
|
max[GravityFieldDeployable] = 0;
|
||||||
|
max[VehiclePadPack] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
//CREATION
|
//CREATION
|
||||||
function SpawnYvex(%position) {
|
function SpawnYvex(%position) {
|
||||||
|
|
@ -310,6 +802,27 @@ function YvexAttack_FUNC(%att, %args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function YvexSniperShot::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) {
|
||||||
|
if(!isplayer(%targetObject)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
%targ = %targetObject.client;
|
||||||
|
%Zombie = %projectile.sourceObject;
|
||||||
|
%targ.nightmareticks = 0;
|
||||||
|
Yvexnightmareloop(%zombie,%targ);
|
||||||
|
%randMessage = getrandom(3)+1;
|
||||||
|
switch(%randMessage) {
|
||||||
|
case 1:
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Let the revenge begin, "@getTaggedString(%targ.name)@".");
|
||||||
|
case 2:
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Taste my vengance... "@getTaggedString(%targ.name)@".");
|
||||||
|
case 3:
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Sleep Forever... "@getTaggedString(%targ.name)@".");
|
||||||
|
default:
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": This Nightmare will lock you forever "@getTaggedString(%targ.name)@"!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function Yvexnightmareloop(%zombie,%viewer) {
|
function Yvexnightmareloop(%zombie,%viewer) {
|
||||||
%enum = getRandom(1,5);
|
%enum = getRandom(1,5);
|
||||||
switch(%enum) {
|
switch(%enum) {
|
||||||
|
|
@ -370,3 +883,23 @@ function Yvexnightmareloop(%zombie,%viewer) {
|
||||||
schedule(55, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/derm2/avo.deathcry_02.wav");
|
schedule(55, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/derm2/avo.deathcry_02.wav");
|
||||||
schedule(60, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/derm3/avo.deathcry_02.wav");
|
schedule(60, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/derm3/avo.deathcry_02.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function KillerPulse::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) {
|
||||||
|
if (%targetObject.getClassName() $= "Player" && %targetObject.isBoss) {
|
||||||
|
messageall('msgkillcurse', "\c5"@getTaggedString(%targetObject.client.name)@" Took a fatal Hit from "@$TWM2::ZombieName[7]@"'s Dark Energy");
|
||||||
|
%targetObject.throwWeapon();
|
||||||
|
%targetObject.clearinventory();
|
||||||
|
YvexAttack_FUNC("KillLoop", %targetObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function YvexZombieMakerMissile::OnExplode(%data, %proj, %pos, %mod) {
|
||||||
|
%c = CreateEmitter(%pos, NightmareGlobeEmitter, "0 0 1");
|
||||||
|
%rand = getRandom(1, 6);
|
||||||
|
%c.schedule(%rand * 750, "delete");
|
||||||
|
for(%i = 0; %i < %rand; %i++) {
|
||||||
|
%time = %i * 750;
|
||||||
|
%type = getRandomZombieType("1 2 3 4 5 9 12 13");
|
||||||
|
schedule(%time, 0, "StartAZombie", vectoradd(%pos, "0 0 1"), %type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,35 @@
|
||||||
|
datablock HoverVehicleData(TreborTank) : CentaurVehicle {
|
||||||
|
spawnOffset = "0 0 4";
|
||||||
|
canControl = true;
|
||||||
|
floatingGravMag = 4.5;
|
||||||
|
|
||||||
|
catagory = "Vehicles";
|
||||||
|
shapeFile = "vehicle_grav_tank.dts";
|
||||||
|
multipassenger = false;
|
||||||
|
computeCRC = true;
|
||||||
|
renderWhenDestroyed = false;
|
||||||
|
|
||||||
|
mountPose[0] = sitting;
|
||||||
|
numMountPoints = 0; // <-- Ignore this
|
||||||
|
isProtectedMountPoint[0] = true;
|
||||||
|
|
||||||
|
maxDamage = 100.15;
|
||||||
|
destroyedLevel = 100.15;
|
||||||
|
|
||||||
|
isShielded = true;
|
||||||
|
rechargeRate = 1.0;
|
||||||
|
energyPerDamagePoint = 135;
|
||||||
|
maxEnergy = 400;
|
||||||
|
minJetEnergy = 15;
|
||||||
|
jetEnergyDrain = 2.0;
|
||||||
|
|
||||||
|
targetNameTag = 'Centaur';
|
||||||
|
targetTypeTag = 'MK III';
|
||||||
|
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
ShieldDamageScale[$DamageType::Bullet] = 0.01; //I deny you shrike n0bs
|
||||||
|
};
|
||||||
|
|
||||||
function StartTrebor(%pos){
|
function StartTrebor(%pos){
|
||||||
%team = 6;
|
%team = 6;
|
||||||
%rotation = "1 0 0 0";
|
%rotation = "1 0 0 0";
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,23 @@
|
||||||
//Major Insignia
|
//DATABLOCKS
|
||||||
//Gravity Zombie Boss
|
datablock StaticShapeData(NoCollideBio) : StaticShapeDamageProfile {
|
||||||
|
className = "player";
|
||||||
|
shapeFile = "bioderm_light.dts"; // dmiscf.dts, alternate
|
||||||
|
mass = 1;
|
||||||
|
elasticity = 0.1;
|
||||||
|
friction = 0.9;
|
||||||
|
collideable = 0;
|
||||||
|
isInvincible = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock StaticShapeData(NoCollideHum) : StaticShapeDamageProfile {
|
||||||
|
className = "player";
|
||||||
|
shapeFile = "light_male.dts"; // dmiscf.dts, alternate
|
||||||
|
mass = 1;
|
||||||
|
elasticity = 0.1;
|
||||||
|
friction = 0.9;
|
||||||
|
collideable = 0;
|
||||||
|
isInvincible = true;
|
||||||
|
};
|
||||||
|
|
||||||
//Stops console spammage
|
//Stops console spammage
|
||||||
function NoCollideBio::shouldApplyImpulse(%targetObject) {
|
function NoCollideBio::shouldApplyImpulse(%targetObject) {
|
||||||
|
|
@ -9,6 +27,145 @@ function NoCollideHum::shouldApplyImpulse(%targetObject) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datablock PlayerData(InsigniaZombieArmor) : LightMaleBiodermArmor {
|
||||||
|
maxDamage = 700.0;
|
||||||
|
minImpactSpeed = 50;
|
||||||
|
speedDamageScale = 0.015;
|
||||||
|
|
||||||
|
damageScale[$DamageType::M1700] = 2.0;
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
max[SmokeGrenade] = 0;
|
||||||
|
max[BeaconSmokeGrenade] = 0;
|
||||||
|
max[Blaster] = 0;
|
||||||
|
max[Plasma] = 0;
|
||||||
|
max[PlasmaAmmo] = 0;
|
||||||
|
max[Disc] = 0;
|
||||||
|
max[DiscAmmo] = 0;
|
||||||
|
max[SniperRifle] = 0;
|
||||||
|
max[GrenadeLauncher] = 0;
|
||||||
|
max[GrenadeLauncherAmmo] = 0;
|
||||||
|
max[Mortar] = 0;
|
||||||
|
max[MortarAmmo] = 0;
|
||||||
|
max[MissileLauncher] = 0;
|
||||||
|
max[MissileLauncherAmmo] = 0;
|
||||||
|
max[Chaingun] = 0;
|
||||||
|
max[ChaingunAmmo] = 0;
|
||||||
|
max[RepairGun] = 0;
|
||||||
|
max[CloakingPack] = 0;
|
||||||
|
max[SensorJammerPack] = 0;
|
||||||
|
max[EnergyPack] = 0;
|
||||||
|
max[RepairPack] = 0;
|
||||||
|
max[ShieldPack] = 0;
|
||||||
|
max[AmmoPack] = 0;
|
||||||
|
max[SatchelCharge] = 0;
|
||||||
|
max[MortarBarrelPack] = 0;
|
||||||
|
max[MissileBarrelPack] = 0;
|
||||||
|
max[AABarrelPack] = 0;
|
||||||
|
max[PlasmaBarrelPack] = 0;
|
||||||
|
max[ELFBarrelPack] = 0;
|
||||||
|
max[artillerybarrelpack] = 0;
|
||||||
|
max[InventoryDeployable] = 0;
|
||||||
|
max[MotionSensorDeployable] = 0;
|
||||||
|
max[PulseSensorDeployable] = 0;
|
||||||
|
max[TurretOutdoorDeployable] = 0;
|
||||||
|
max[TurretIndoorDeployable] = 0;
|
||||||
|
max[FlashGrenade] = 0;
|
||||||
|
max[ConcussionGrenade] = 0;
|
||||||
|
max[FlareGrenade] = 0;
|
||||||
|
max[TargetingLaser] = 0;
|
||||||
|
max[ELFGun] = 0;
|
||||||
|
max[ShockLance] = 0;
|
||||||
|
max[CameraGrenade] = 0;
|
||||||
|
max[Beacon] = 0;
|
||||||
|
max[flamerAmmoPack] = 0;
|
||||||
|
max[ParachutePack] = 0;
|
||||||
|
max[MedPack] = 0;
|
||||||
|
//Guns
|
||||||
|
max[ConstructionTool] = 0;
|
||||||
|
max[MergeTool] = 0;
|
||||||
|
max[NerfGun] = 0;
|
||||||
|
max[NerfBallLauncher] = 0;
|
||||||
|
max[NerfBallLauncherAmmo] = 0;
|
||||||
|
max[SuperChaingun] = 0;
|
||||||
|
max[SuperChaingunAmmo] = 0;
|
||||||
|
max[RPChaingun] = 0;
|
||||||
|
max[RPChaingunAmmo] = 0;
|
||||||
|
max[MGClip] = 0;
|
||||||
|
max[LSMG] = 0;
|
||||||
|
max[LSMGAmmo] = 0;
|
||||||
|
max[LSMGClip] = 0;
|
||||||
|
max[snipergun] = 0;
|
||||||
|
max[snipergunAmmo] = 0;
|
||||||
|
max[Bazooka] = 0;
|
||||||
|
max[BazookaAmmo] = 0;
|
||||||
|
max[nukeme] = 0;
|
||||||
|
max[nukemeAmmo] = 0;
|
||||||
|
max[MG42] = 0;
|
||||||
|
max[MG42Ammo] = 0;
|
||||||
|
max[SPistol] = 0;
|
||||||
|
max[Pistol] = 0;
|
||||||
|
max[PistolAmmo] = 0;
|
||||||
|
max[Pistolclip] = 0;
|
||||||
|
max[flamer] = 0;
|
||||||
|
max[flamerAmmo] = 0;
|
||||||
|
max[AALauncher] = 0;
|
||||||
|
max[AALauncherAmmo] = 0;
|
||||||
|
max[melee] = 0;
|
||||||
|
max[SOmelee] = 0;
|
||||||
|
max[KriegRifle] = 0;
|
||||||
|
max[KriegAmmo] = 0;
|
||||||
|
max[Rifleclip] = 0;
|
||||||
|
max[Shotgun] = 0;
|
||||||
|
max[ShotgunAmmo] = 0;
|
||||||
|
max[ShotgunClip] = 0;
|
||||||
|
max[RShotgun] = 0;
|
||||||
|
max[RShotgunAmmo] = 0;
|
||||||
|
max[RShotgunClip] = 0;
|
||||||
|
max[LMissileLauncher] = 0;
|
||||||
|
max[LMissileLauncherAmmo] = 0;
|
||||||
|
max[HRPChaingun] = 0;
|
||||||
|
max[RPGAmmo] = 0;
|
||||||
|
max[RPGItem] = 0;
|
||||||
|
//Building parts
|
||||||
|
max[spineDeployable] = 0;
|
||||||
|
max[mspineDeployable] = 0;
|
||||||
|
max[wWallDeployable] = 0;
|
||||||
|
max[floorDeployable] = 0;
|
||||||
|
max[WallDeployable] = 0;
|
||||||
|
max[DoorDeployable] = 0;
|
||||||
|
//Turrets
|
||||||
|
max[TurretLaserDeployable] = 0;
|
||||||
|
max[TurretMissileRackDeployable]= 0;
|
||||||
|
max[DiscTurretDeployable] = 0;
|
||||||
|
//Largepacks
|
||||||
|
max[EnergizerDeployable] = 0;
|
||||||
|
max[TreeDeployable] = 0;
|
||||||
|
max[CrateDeployable] = 0;
|
||||||
|
max[DecorationDeployable] = 0;
|
||||||
|
max[LogoProjectorDeployable] = 0;
|
||||||
|
max[LightDeployable] = 0;
|
||||||
|
max[TripwireDeployable] = 0;
|
||||||
|
max[TelePadPack] = 0;
|
||||||
|
max[TurretBasePack] = 0;
|
||||||
|
max[LargeInventoryDeployable] = 0;
|
||||||
|
max[GeneratorDeployable] = 0;
|
||||||
|
max[SolarPanelDeployable] = 0;
|
||||||
|
max[SwitchDeployable] = 0;
|
||||||
|
max[MediumSensorDeployable] = 0;
|
||||||
|
max[LargeSensorDeployable] = 0;
|
||||||
|
max[SpySatelliteDeployable] = 0;
|
||||||
|
//Misc
|
||||||
|
max[JumpadDeployable] = 0;
|
||||||
|
max[EscapePodDeployable] = 0;
|
||||||
|
max[ForceFieldDeployable] = 0;
|
||||||
|
max[GravityFieldDeployable] = 0;
|
||||||
|
max[VehiclePadPack] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
//CREATION
|
//CREATION
|
||||||
function SpawnInsignia(%position) {
|
function SpawnInsignia(%position) {
|
||||||
%Zombie = new player(){
|
%Zombie = new player(){
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,103 @@
|
||||||
//SHADE LORD
|
//SHADE LORD
|
||||||
|
datablock ParticleData(ShadeSwordParticle) {
|
||||||
|
dragCoeffiecient = 0.0;
|
||||||
|
gravityCoefficient = -0.2;
|
||||||
|
inheritedVelFactor = 0.0;
|
||||||
|
|
||||||
|
lifetimeMS = 800;
|
||||||
|
lifetimeVarianceMS = 500;
|
||||||
|
|
||||||
|
useInvAlpha = false;
|
||||||
|
spinRandomMin = -160.0;
|
||||||
|
spinRandomMax = 160.0;
|
||||||
|
|
||||||
|
animateTexture = true;
|
||||||
|
framesPerSec = 15;
|
||||||
|
|
||||||
|
textureName = "special/cloudflash";
|
||||||
|
|
||||||
|
colors[0] = "46 46 46 1.0";
|
||||||
|
colors[1] = "46 46 46 1.0";
|
||||||
|
colors[2] = "46 46 46 1.0";
|
||||||
|
|
||||||
|
sizes[0] = 2.5;
|
||||||
|
sizes[1] = 2.7;
|
||||||
|
sizes[2] = 3.0;
|
||||||
|
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.7;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(ShadeSwordEmitter) {
|
||||||
|
ejectionPeriodMS = 10;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
|
||||||
|
ejectionVelocity = 1.5;
|
||||||
|
velocityVariance = 0.3;
|
||||||
|
|
||||||
|
thetaMin = 0.0;
|
||||||
|
thetaMax = 30.0;
|
||||||
|
|
||||||
|
particles = "ShadeSwordParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock SeekerProjectileData(ShadeLordSword){
|
||||||
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 0.8;
|
||||||
|
damageRadius = 8.0;
|
||||||
|
radiusDamageType = $DamageType::Missile;
|
||||||
|
kickBackStrength = 2000;
|
||||||
|
|
||||||
|
explosion = "MissileExplosion";
|
||||||
|
splash = MissileSplash;
|
||||||
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
|
// is cranked up to full so the missile doesn't start
|
||||||
|
// out behind the player when the player is moving
|
||||||
|
// very quickly - bramage
|
||||||
|
|
||||||
|
delayEmitter = MissileFireEmitter;
|
||||||
|
puffEmitter = MissilePuffEmitter;
|
||||||
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
|
exhaustTimeMs = 300;
|
||||||
|
exhaustNodeName = "muzzlePoint1";
|
||||||
|
|
||||||
|
lifetimeMS = 30000;
|
||||||
|
muzzleVelocity = 10.0;
|
||||||
|
maxVelocity = 250.0;
|
||||||
|
turningSpeed = 110.0;
|
||||||
|
acceleration = 450.0;
|
||||||
|
|
||||||
|
proximityRadius = 3;
|
||||||
|
|
||||||
|
terrainAvoidanceSpeed = 180;
|
||||||
|
terrainScanAhead = 25;
|
||||||
|
terrainHeightFail = 12;
|
||||||
|
terrainAvoidanceRadius = 100;
|
||||||
|
|
||||||
|
flareDistance = 200;
|
||||||
|
flareAngle = 30;
|
||||||
|
|
||||||
|
sound = MissileProjectileSound;
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 5.0;
|
||||||
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
|
useFlechette = true;
|
||||||
|
flechetteDelayMs = 550;
|
||||||
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
|
||||||
|
baseEmitter = ShadeSwordEmitter;
|
||||||
|
};
|
||||||
|
|
||||||
function ShadeLordSword::OnExplode(%data, %proj, %pos, %mod) {
|
function ShadeLordSword::OnExplode(%data, %proj, %pos, %mod) {
|
||||||
%source = %proj.SourceObject;
|
%source = %proj.SourceObject;
|
||||||
InitContainerRadiusSearch(%pos, 6, $TypeMasks::PlayerObjectType);
|
InitContainerRadiusSearch(%pos, 6, $TypeMasks::PlayerObjectType);
|
||||||
|
|
@ -35,7 +134,274 @@ function doReturnMissile(%ini, %src) {
|
||||||
%p.sourceObject = %src;
|
%p.sourceObject = %src;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datablock ParticleData(ShadeStormParticle) {
|
||||||
|
dragCoefficient = 1.0;
|
||||||
|
gravityCoefficient = 0.00;
|
||||||
|
windcoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 0.0;
|
||||||
|
constantAcceleration = 10.0;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
lifetimeVarianceMS = 100;
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -90.0;
|
||||||
|
spinRandomMax = 90.0;
|
||||||
|
textureName = "special/cloudFlash";
|
||||||
|
|
||||||
|
colors[0] = "46 46 46 0.5";
|
||||||
|
colors[1] = "46 46 46 0.5";
|
||||||
|
colors[2] = "46 46 46 0.0";
|
||||||
|
sizes[0] = 500;
|
||||||
|
sizes[1] = 500;
|
||||||
|
sizes[2] = 500;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.5;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(ShadeStormEmitter) {
|
||||||
|
ejectionPeriodMS = 1;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 400.0;
|
||||||
|
velocityVariance = 150.0;
|
||||||
|
ejectionOffset = 0.0;
|
||||||
|
thetaMin = 85;
|
||||||
|
thetaMax = 85;
|
||||||
|
phiReferenceVel = 0;
|
||||||
|
phiVariance = 360;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "ShadeStormParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleData(dayCloakSmokeParticles) {
|
||||||
|
dragCoefficient = 50;/////////-----------------------
|
||||||
|
gravityCoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 1.0;
|
||||||
|
constantAcceleration = 1.0;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -360.0;
|
||||||
|
spinRandomMax = 360.0;
|
||||||
|
textureName = "particleTest";
|
||||||
|
colors[0] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[1] = "0.1 0.1 0.1 1.0";// ////////////////////
|
||||||
|
colors[2] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
colors[3] = "0.1 0.1 0.1 1.0";// \\\\\\\\\\\\\\\\\\\\
|
||||||
|
sizes[0] = 350.0;
|
||||||
|
sizes[1] = 350.0;
|
||||||
|
sizes[2] = 350.0;
|
||||||
|
sizes[3] = 350.0;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.33;
|
||||||
|
times[2] = 0.66;
|
||||||
|
times[3] = 1.0;
|
||||||
|
mass = 0.4;
|
||||||
|
elasticity = 0.2;
|
||||||
|
friction = 1;
|
||||||
|
computeCRC = true;
|
||||||
|
haslight = true;
|
||||||
|
lightType = "PulsingLight";
|
||||||
|
lightColor = "0.2 0.0 0.5 1.0";
|
||||||
|
lightTime = "200";
|
||||||
|
lightRadius = "2.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(dayCloakEmitter) {
|
||||||
|
ejectionPeriodMS = 50;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 10.0;
|
||||||
|
velocityVariance = 0.0;
|
||||||
|
ejectionOffset = 2;
|
||||||
|
thetaMin = 0;
|
||||||
|
thetaMax = 180;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "dayCloakSmokeParticles";
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
datablock ParticleData(ShadeLordScreamParticle) {
|
||||||
|
dragCoefficient = 1.0;
|
||||||
|
gravityCoefficient = 0.00;
|
||||||
|
windcoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 0.0;
|
||||||
|
constantAcceleration = 10.0;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
lifetimeVarianceMS = 100;
|
||||||
|
useInvAlpha = true;
|
||||||
|
spinRandomMin = -90.0;
|
||||||
|
spinRandomMax = 90.0;
|
||||||
|
textureName = "special/cloudFlash";
|
||||||
|
|
||||||
|
colors[0] = "156 0 0 0.5";
|
||||||
|
colors[1] = "156 0 0 0.5";
|
||||||
|
colors[2] = "156 0 0 0.0";
|
||||||
|
sizes[0] = 500;
|
||||||
|
sizes[1] = 500;
|
||||||
|
sizes[2] = 2;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.5;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(ShadeLordScreamEmitter) {
|
||||||
|
ejectionPeriodMS = 1;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 400.0;
|
||||||
|
velocityVariance = 150.0;
|
||||||
|
ejectionOffset = 0.0;
|
||||||
|
thetaMin = 85;
|
||||||
|
thetaMax = 85;
|
||||||
|
phiReferenceVel = 0;
|
||||||
|
phiVariance = 360;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "ShadeLordScreamParticle";
|
||||||
|
};
|
||||||
|
//
|
||||||
|
|
||||||
|
datablock PlayerData(ShadeLordArmor) : LightMaleHumanArmor {
|
||||||
|
boundingBox = "1.63 1.63 2.6";
|
||||||
|
maxDamage = 900.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "bioderm_heavy.dts";
|
||||||
|
|
||||||
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
|
//Foot Prints
|
||||||
|
decalData = HeavyBiodermFootprint;
|
||||||
|
decalOffset = 0.4;
|
||||||
|
|
||||||
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
damageScale[$DamageType::Fire] = 3.0;
|
||||||
|
damageScale[$DamageType::Plasma] = 3.0;
|
||||||
|
damageScale[$DamageType::Burn] = 2.0;
|
||||||
|
|
||||||
|
max[RepairKit] = 0;
|
||||||
|
max[Mine] = 0;
|
||||||
|
max[Grenade] = 0;
|
||||||
|
max[SmokeGrenade] = 0;
|
||||||
|
max[BeaconSmokeGrenade] = 0;
|
||||||
|
max[Blaster] = 0;
|
||||||
|
max[Plasma] = 0;
|
||||||
|
max[PlasmaAmmo] = 0;
|
||||||
|
max[Disc] = 0;
|
||||||
|
max[DiscAmmo] = 0;
|
||||||
|
max[SniperRifle] = 0;
|
||||||
|
max[GrenadeLauncher] = 0;
|
||||||
|
max[GrenadeLauncherAmmo] = 0;
|
||||||
|
max[Mortar] = 0;
|
||||||
|
max[MortarAmmo] = 0;
|
||||||
|
max[MissileLauncher] = 0;
|
||||||
|
max[MissileLauncherAmmo] = 0;
|
||||||
|
max[Chaingun] = 0;
|
||||||
|
max[ChaingunAmmo] = 0;
|
||||||
|
max[RepairGun] = 0;
|
||||||
|
max[CloakingPack] = 0;
|
||||||
|
max[SensorJammerPack] = 0;
|
||||||
|
max[EnergyPack] = 0;
|
||||||
|
max[RepairPack] = 0;
|
||||||
|
max[ShieldPack] = 0;
|
||||||
|
max[AmmoPack] = 0;
|
||||||
|
max[SatchelCharge] = 0;
|
||||||
|
max[MortarBarrelPack] = 0;
|
||||||
|
max[MissileBarrelPack] = 0;
|
||||||
|
max[AABarrelPack] = 0;
|
||||||
|
max[PlasmaBarrelPack] = 0;
|
||||||
|
max[ELFBarrelPack] = 0;
|
||||||
|
max[artillerybarrelpack] = 0;
|
||||||
|
max[MedPack] = 0;
|
||||||
|
max[InventoryDeployable] = 0;
|
||||||
|
max[MotionSensorDeployable] = 0;
|
||||||
|
max[PulseSensorDeployable] = 0;
|
||||||
|
max[TurretOutdoorDeployable] = 0;
|
||||||
|
max[TurretIndoorDeployable] = 0;
|
||||||
|
max[FlashGrenade] = 0;
|
||||||
|
max[ConcussionGrenade] = 0;
|
||||||
|
max[FlareGrenade] = 0;
|
||||||
|
max[TargetingLaser] = 0;
|
||||||
|
max[ELFGun] = 0;
|
||||||
|
max[ShockLance] = 0;
|
||||||
|
max[CameraGrenade] = 0;
|
||||||
|
max[Beacon] = 0;
|
||||||
|
max[flamerAmmoPack] = 0;
|
||||||
|
max[ParachutePack] = 0;
|
||||||
|
max[ConstructionTool] = 0;
|
||||||
|
max[MergeTool] = 0;
|
||||||
|
max[NerfGun] = 0;
|
||||||
|
max[NerfBallLauncher] = 0;
|
||||||
|
max[NerfBallLauncherAmmo] = 0;
|
||||||
|
max[SuperChaingun] = 0;
|
||||||
|
max[SuperChaingunAmmo] = 0;
|
||||||
|
max[RPChaingun] = 0;
|
||||||
|
max[RPChaingunAmmo] = 0;
|
||||||
|
max[MGClip] = 0;
|
||||||
|
max[LSMG] = 0;
|
||||||
|
max[LSMGAmmo] = 0;
|
||||||
|
max[LSMGClip] = 0;
|
||||||
|
max[snipergun] = 0;
|
||||||
|
max[snipergunAmmo] = 0;
|
||||||
|
max[Bazooka] = 0;
|
||||||
|
max[BazookaAmmo] = 0;
|
||||||
|
max[BunkerBuster] = 0;
|
||||||
|
max[MG42] = 0;
|
||||||
|
max[MG42Ammo] = 0;
|
||||||
|
max[SPistol] = 0;
|
||||||
|
max[Pistol] = 0;
|
||||||
|
max[PistolAmmo] = 0;
|
||||||
|
max[Pistolclip] = 0;
|
||||||
|
max[flamer] = 0;
|
||||||
|
max[flamerAmmo] = 0;
|
||||||
|
max[AALauncher] = 0;
|
||||||
|
max[AALauncherAmmo] = 0;
|
||||||
|
max[melee] = 0;
|
||||||
|
max[SOmelee] = 0;
|
||||||
|
max[KriegRifle] = 0;
|
||||||
|
max[KriegAmmo] = 0;
|
||||||
|
max[Rifleclip] = 0;
|
||||||
|
max[Shotgun] = 0;
|
||||||
|
max[ShotgunAmmo] = 0;
|
||||||
|
max[ShotgunClip] = 0;
|
||||||
|
max[RShotgun] = 0;
|
||||||
|
max[RShotgunAmmo] = 0;
|
||||||
|
max[RShotgunClip] = 0;
|
||||||
|
max[LMissileLauncher] = 0;
|
||||||
|
max[LMissileLauncherAmmo] = 0;
|
||||||
|
max[HRPChaingun] = 0;
|
||||||
|
max[RPGAmmo] = 0;
|
||||||
|
max[RPGItem] = 0;
|
||||||
|
max[spineDeployable] = 0;
|
||||||
|
max[mspineDeployable] = 0;
|
||||||
|
max[wWallDeployable] = 0;
|
||||||
|
max[floorDeployable] = 0;
|
||||||
|
max[WallDeployable] = 0;
|
||||||
|
max[DoorDeployable] = 0;
|
||||||
|
max[TurretLaserDeployable] = 0;
|
||||||
|
max[TurretMissileRackDeployable]= 0;
|
||||||
|
max[DiscTurretDeployable] = 0;
|
||||||
|
max[EnergizerDeployable] = 0;
|
||||||
|
max[TreeDeployable] = 0;
|
||||||
|
max[CrateDeployable] = 0;
|
||||||
|
max[DecorationDeployable] = 0;
|
||||||
|
max[LogoProjectorDeployable] = 0;
|
||||||
|
max[LightDeployable] = 0;
|
||||||
|
max[TripwireDeployable] = 0;
|
||||||
|
max[TelePadPack] = 0;
|
||||||
|
max[TurretBasePack] = 0;
|
||||||
|
max[LargeInventoryDeployable] = 0;
|
||||||
|
max[GeneratorDeployable] = 0;
|
||||||
|
max[SolarPanelDeployable] = 0;
|
||||||
|
max[SwitchDeployable] = 0;
|
||||||
|
max[MediumSensorDeployable] = 0;
|
||||||
|
max[LargeSensorDeployable] = 0;
|
||||||
|
max[SpySatelliteDeployable] = 0;
|
||||||
|
max[JumpadDeployable] = 0;
|
||||||
|
max[EscapePodDeployable] = 0;
|
||||||
|
max[ForceFieldDeployable] = 0;
|
||||||
|
max[GravityFieldDeployable] = 0;
|
||||||
|
max[VehiclePadPack] = 0;
|
||||||
|
};
|
||||||
|
|
||||||
function SpawnShadeLord(%position) {
|
function SpawnShadeLord(%position) {
|
||||||
%Boss = new player(){
|
%Boss = new player(){
|
||||||
Datablock = "ShadeLordArmor";
|
Datablock = "ShadeLordArmor";
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,31 @@
|
||||||
//Stormrider.cs
|
|
||||||
//Ported From TWM1
|
|
||||||
//Code Updated By Phantom139
|
|
||||||
// * 2-18-14: Did some housecleaning, harvested some unneeded functions here.
|
|
||||||
|
|
||||||
function UltrDroneBattle(%pos, %radius, %number, %teamlow, %teamhigh, %maxskill, %slth){
|
function UltrDroneBattle(%pos, %radius, %number, %teamlow, %teamhigh, %maxskill, %slth){
|
||||||
for(%i = 0; %i < %number; %i++){
|
for(%i = 0; %i < %number; %i++){
|
||||||
%startpos = vectorAdd(%pos,(getRandom(0, %radius) - (%radius / 2))@" "@(getRandom(0, %radius) - (%radius / 2))@" 0");
|
%startpos = vectorAdd(%pos,(getRandom(0, %radius) - (%radius / 2))@" "@(getRandom(0, %radius) - (%radius / 2))@" 0");
|
||||||
%rotation = "0 0 1 "@getRandom(1,360);
|
%rotation = "0 0 1 "@getRandom(1,360);
|
||||||
if(%teamlow != %teamhigh) {
|
if(%teamlow != %teamhigh)
|
||||||
%team = getRandom(%teamlow, %teamhigh);
|
%team = getRandom(%teamlow,%teamhigh);
|
||||||
}
|
else
|
||||||
else {
|
%team = %teamlow;
|
||||||
%team = %teamlow;
|
StartUltrDrone(%startpos,%rotation,%team,getRandom(1,%maxskill), %slth);
|
||||||
}
|
|
||||||
StartUltrDrone(%startpos,%rotation,%team,getRandom(1,%maxskill), %slth);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//This sets up the drone and the functions needed to start the drone.
|
//This sets up the drone and the functions needed to start the drone.
|
||||||
function StartUltrDrone(%pos, %rotation, %team, %skill, %slth) {
|
function StartUltrDrone(%pos, %rotation, %team, %skill, %slth){
|
||||||
if(%team $= "") {
|
if(%team $= "")
|
||||||
%team = 0;
|
%team = 0;
|
||||||
|
if(%pos $= "")
|
||||||
|
%pos = "0 0 300";
|
||||||
|
if(%rotation $= "")
|
||||||
|
%rotation = "1 0 0 0";
|
||||||
|
if(%skill !$= "ace"){
|
||||||
|
if(%skill $= "" || %skill < 1)
|
||||||
|
%skill = 10;
|
||||||
|
else if(%skill > 10)
|
||||||
|
%skill = 10;
|
||||||
}
|
}
|
||||||
if(%pos $= "") {
|
%Drone = new FlyingVehicle()
|
||||||
%pos = "0 0 300";
|
{
|
||||||
}
|
|
||||||
if(%rotation $= "") {
|
|
||||||
%rotation = "1 0 0 0";
|
|
||||||
}
|
|
||||||
if(%skill !$= "ace") {
|
|
||||||
if(%skill $= "" || %skill < 1) {
|
|
||||||
%skill = 10;
|
|
||||||
}
|
|
||||||
else if(%skill > 10) {
|
|
||||||
%skill = 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
%Drone = new FlyingVehicle() {
|
|
||||||
dataBlock = StormSeigeDrone;
|
dataBlock = StormSeigeDrone;
|
||||||
position = %pos;
|
position = %pos;
|
||||||
rotation = %rotation;
|
rotation = %rotation;
|
||||||
|
|
@ -50,12 +39,12 @@ function StartUltrDrone(%pos, %rotation, %team, %skill, %slth) {
|
||||||
%drone.dodgeGround = 0;
|
%drone.dodgeGround = 0;
|
||||||
|
|
||||||
if(%slth) {
|
if(%slth) {
|
||||||
%Drone.setCloaked(true);
|
%Drone.setCloaked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(%skill $= "ace"){
|
if(%skill $= "ace"){
|
||||||
%skill = 10;
|
%skill = 10;
|
||||||
%drone.isace = 1;
|
%drone.isace = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
%drone.skill = 0.2 + (%skill / 12.5);
|
%drone.skill = 0.2 + (%skill / 12.5);
|
||||||
|
|
@ -85,229 +74,241 @@ function StartStormrider(%position) {
|
||||||
|
|
||||||
function UltraBossAbilities(%drone) {
|
function UltraBossAbilities(%drone) {
|
||||||
if(!isObject(%drone)) {
|
if(!isObject(%drone)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%drone.setCloaked(false); //disable cloak?
|
%drone.setCloaked(false); //disable cloak?
|
||||||
%rand = getRandom(1,13);
|
%rand = getRandom(1,13);
|
||||||
|
// %target = DroneFindNearestPilot(500,%drone); //this line for targeted abilities
|
||||||
switch(%rand) {
|
switch(%rand) {
|
||||||
|
|
||||||
//1: Double Missile Strike: Targets Single Player with Two Missiles
|
|
||||||
case 1:
|
case 1:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
%SPos1 = vectorAdd(%drone.getPosition(),"3 0 0");
|
%SPos1 = vectorAdd(%drone.getPosition(),"3 0 0");
|
||||||
%SPos2 = vectorAdd(%drone.getPosition(),"-3 0 0");
|
%SPos2 = vectorAdd(%drone.getPosition(),"-3 0 0");
|
||||||
%p1 = new SeekerProjectile() {
|
%p1 = new SeekerProjectile()
|
||||||
dataBlock = LordRogStiloutte;
|
{
|
||||||
initialDirection = "0 0 10";
|
dataBlock = LordRogStiloutte;
|
||||||
initialPosition = %SPos1;
|
initialDirection = "0 0 10";
|
||||||
sourceObject = %drone;
|
initialPosition = %SPos1;
|
||||||
sourceSlot = 6;
|
sourceObject = %drone;
|
||||||
};
|
sourceSlot = 6;
|
||||||
%p2 = new SeekerProjectile() {
|
};
|
||||||
dataBlock = LordRogStiloutte;
|
%p2 = new SeekerProjectile()
|
||||||
initialDirection = "0 0 10";
|
{
|
||||||
initialPosition = %SPos1;
|
dataBlock = LordRogStiloutte;
|
||||||
sourceObject = %drone;
|
initialDirection = "0 0 10";
|
||||||
sourceSlot = 6;
|
initialPosition = %SPos2;
|
||||||
};
|
sourceObject = %drone;
|
||||||
MissionCleanup.add(%p1);
|
sourceSlot = 6;
|
||||||
MissionCleanup.add(%p2);
|
};
|
||||||
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p1);
|
MissionCleanup.add(%p1);
|
||||||
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p2);
|
MissionCleanup.add(%p2);
|
||||||
MessageAll('MessageAll', "\c4Stormrider: Fire!");
|
schedule(1000,0,"MissileDrop",%p1, %target.player);
|
||||||
}
|
schedule(1000,0,"MissileDrop",%p2, %target.player);
|
||||||
else {
|
MessageAll('MessageAll', "\c4Stormrider: Fire!");
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": No targets for me!");
|
}
|
||||||
}
|
else {
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, no targets for me!");
|
||||||
//2: Quad Strike: Fire Four Missiles out in a + pattern which then aquire a single target.
|
}
|
||||||
case 2:
|
case 2:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
%SPos = vectorAdd(%drone.getPosition(),"0 0 3");
|
%SPos = vectorAdd(%drone.getPosition(),"0 0 3");
|
||||||
%dirs = "5 0 0\t-5 0 0\t0 5 0\t0 -5 0";
|
%p1 = new SeekerProjectile()
|
||||||
for(%i = 0; %i < getFieldCount(%dirs); %i++) {
|
{
|
||||||
%newMissile = new SeekerProjectile() {
|
dataBlock = ShoulderMissile;
|
||||||
dataBlock = ShoulderMissile;
|
initialDirection = "5 0 0";
|
||||||
initialDirection = getField(%dirs, %i);
|
initialPosition = %SPos;
|
||||||
initialPosition = %SPos;
|
sourceObject = %drone;
|
||||||
sourceObject = %drone;
|
sourceSlot = 6;
|
||||||
sourceSlot = 6;
|
};
|
||||||
};
|
%p2 = new SeekerProjectile()
|
||||||
MissionCleanup.add(%newMissile);
|
{
|
||||||
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %newMissile);
|
dataBlock = ShoulderMissile;
|
||||||
}
|
initialDirection = "-5 0 0";
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Have fun with these "@getTaggedString(%target.name)@"!");
|
initialPosition = %SPos;
|
||||||
}
|
sourceObject = %drone;
|
||||||
else {
|
sourceSlot = 6;
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Bah, no targets, no fun.");
|
};
|
||||||
}
|
%p3 = new SeekerProjectile()
|
||||||
|
{
|
||||||
//3: IR Beam: A single enemy target gets locked on with a heat beam making missiles 100% accurate for a time period
|
dataBlock = ShoulderMissile;
|
||||||
|
initialDirection = "0 5 0";
|
||||||
|
initialPosition = %SPos;
|
||||||
|
sourceObject = %drone;
|
||||||
|
sourceSlot = 6;
|
||||||
|
};
|
||||||
|
%p4 = new SeekerProjectile()
|
||||||
|
{
|
||||||
|
dataBlock = ShoulderMissile;
|
||||||
|
initialDirection = "0 -5 0";
|
||||||
|
initialPosition = %SPos;
|
||||||
|
sourceObject = %drone;
|
||||||
|
sourceSlot = 6;
|
||||||
|
};
|
||||||
|
MissionCleanup.add(%p1);
|
||||||
|
MissionCleanup.add(%p2);
|
||||||
|
MissionCleanup.add(%p3);
|
||||||
|
MissionCleanup.add(%p4);
|
||||||
|
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p1);
|
||||||
|
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p2);
|
||||||
|
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p3);
|
||||||
|
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p4);
|
||||||
|
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Have fun with these "@getTaggedString(%target.name)@"!");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Bah, no targets, no fun.");
|
||||||
|
}
|
||||||
case 3:
|
case 3:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
HeatLoop(%target.player, 0);
|
HeatLoop(%target.player, 0);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Lets see what happens when missiles are completely precice on you, "@getTaggedString(%target.name)@"!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Lets see what happens when missiles are completely precice on you, "@getTaggedString(%target.name)@"!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I guess it's time to start scanning.");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I guess it's time to start scanning.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//4: Auxilary Pod Swarm: Unleash a swarm of hybrid strike missiles on a single enemy target
|
|
||||||
case 4:
|
case 4:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
FireanotherSidewinder(%drone, %target.player, 3);
|
FireanotherSidewinder(%drone, %target.player, 3);
|
||||||
schedule(700, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(700,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(1400, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(1400,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(2100, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(2100,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(2800, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(2800,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(3500, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(3500,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(4200, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(4200,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(4900, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(4900,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
//Rapid Shot Missiles
|
//Rapid Shot Missiles
|
||||||
schedule(5000, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(5000,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(5200, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(5200,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(5400, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(5400,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(5600, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(5600,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(5800, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(5800,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(6000, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(6000,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(6200, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(6200,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(6400, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(6400,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(6500, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(6500,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Taste my fury "@getTaggedString(%target.name)@"!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Taste my fury "@getTaggedString(%target.name)@"!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Aww, My missiles were ready.");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Aww, My missiles were ready.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//5: Focused Missile Fire: Similar to APS, but more accurate with less shots near the end
|
|
||||||
case 5:
|
case 5:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
FireanotherSidewinder(%drone, %target.player, 3);
|
FireanotherSidewinder(%drone, %target.player, 3);
|
||||||
schedule(700, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(700,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(1400, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(1400,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(2100, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(2100,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(2800, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(2800,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(3500, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(3500,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(4200, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(4200,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(4900, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(4900,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(5600, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(5600,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(6300, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(6300,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
schedule(7000, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
schedule(7000,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 3);
|
||||||
// Quick Shots
|
// Quick Shots
|
||||||
schedule(8000, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(8000,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(8100, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(8100,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(8200, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(8200,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
schedule(8300, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
schedule(8300,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I have missiles with your name on them "@getTaggedString(%target.name)@"!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I have missiles with your name on them "@getTaggedString(%target.name)@"!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Aww, My missile strike was ready.");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Aww, My missile strike was ready.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//6: Clear Skies: Launch a wave on anti-missile flares blocking all missiles from striking Stormrider for a short time.
|
|
||||||
case 6:
|
case 6:
|
||||||
schedule(700, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(700,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(1400, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(1400,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(2100, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(2100,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(2800, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(2800,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(3500, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(3500,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(4200, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(4200,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(4900, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(4900,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(5600, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(5600,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(6300, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(6300,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(7000, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(7000,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
// Quick Shots
|
// Quick Shots
|
||||||
schedule(8000, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(8000,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(8100, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(8100,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(8200, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(8200,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
schedule(8300, 0, "WindshearAttack_FUNC", "Flare", %drone);
|
schedule(8300,0,"WindshearAttack_FUNC", "Flare", %drone);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Hahaha, Your Missiles are worthless Now!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Hahaha, Your Missiles are worthless Now!");
|
||||||
|
|
||||||
//7: Anti-Ground Chaingun: Fire a rapid strike anti-matter chaingun which does heavy damage to hit targets
|
|
||||||
case 7:
|
case 7:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
FireSniperShots(%drone, %target.player, 3);
|
FireSniperShots(%drone, %target.player, 3);
|
||||||
for(%i = 0; %i < 700; %i++) {
|
for(%i = 0; %i < 700; %i++) {
|
||||||
%time = %i * 10;
|
%time = %i * 10;
|
||||||
schedule(%time, 0,"FireSniperShots",%drone, %target.player);
|
schedule(%time, 0,"FireSniperShots",%drone, %target.player);
|
||||||
}
|
}
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Time to Use My CG, "@getTaggedString(%target.name)@"!");
|
// Quick Shots
|
||||||
}
|
schedule(8000,0,"FireSniperShots",%drone, %target.player);
|
||||||
else {
|
schedule(8100,0,"FireSniperShots",%drone, %target.player);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": We'll see who can withstand the CG... Oh wait, there's nobody there.");
|
schedule(8200,0,"FireSniperShots",%drone, %target.player);
|
||||||
}
|
schedule(8300,0,"FireSniperShots",%drone, %target.player);
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Time to Use My CG, "@getTaggedString(%target.name)@"!");
|
||||||
//8: Photon Seekers: Launch a wave of Photon Seekers to strike a single target
|
}
|
||||||
|
else {
|
||||||
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, you fewls cant withstand this.");
|
||||||
|
}
|
||||||
case 8:
|
case 8:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
FireSeekerPhotons(%drone, %target.player);
|
FireSeekerPhotons(%drone,%target.player);
|
||||||
schedule(1500, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(1500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(3000, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(3000,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(4500, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(4500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(6000, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(6000,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Here, "@getTaggedString(%target.name)@", Catch!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Here, "@getTaggedString(%target.name)@", Catch!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Close up the Seekers. No Targets To hit.");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Close up the Seekers. No Targets To hit.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//9: Advanced Photon Wave: Launch an additional Photon Missile compared to #8
|
|
||||||
case 9:
|
case 9:
|
||||||
%target = DroneFindNearestPilot(2000,%drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
FireSeekerPhotons(%drone,%target.player);
|
FireSeekerPhotons(%drone,%target.player);
|
||||||
schedule(700, 0, "FireSeekerPhotons",%drone,%target.player);
|
schedule(700,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(1400, 0, "FireSeekerPhotons",%drone,%target.player);
|
schedule(1400,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(2100, 0, "FireSeekerPhotons",%drone,%target.player);
|
schedule(2100,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(2800, 0, "FireSeekerPhotons",%drone,%target.player);
|
schedule(2800,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(3500, 0, "FireSeekerPhotons",%drone,%target.player);
|
schedule(3500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Try these out for size, "@getTaggedString(%target.name)@"!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Try these out for size, "@getTaggedString(%target.name)@"!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, No enemies in the area.");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, No enemies in the area.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//10: Photon Storm: Launch Photon Missiles to the point of overheating the internal system.
|
|
||||||
case 10:
|
case 10:
|
||||||
%target = DroneFindNearestPilot(2000, %drone);
|
%target = DroneFindNearestPilot(2000,%drone);
|
||||||
if(%target.player) {
|
if(%target.player) {
|
||||||
FireSeekerPhotons(%drone, %target.player);
|
FireSeekerPhotons(%drone,%target.player);
|
||||||
schedule(500, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(1000, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(1000,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(1500, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(1500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(2000, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(2000,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(2500, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(2500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(3000, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(3000,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(3500, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(3500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(4000, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(4000,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(4500, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(4500,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
schedule(5000, 0, "FireSeekerPhotons", %drone, %target.player);
|
schedule(5000,0,"FireSeekerPhotons",%drone,%target.player);
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I have some fun plasma missiles for you, "@getTaggedString(%target.name)@"!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I have some fun plasma missiles for you, "@getTaggedString(%target.name)@"!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Meh, No targets for my plasma seekers.");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Meh, No targets for my plasma seekers.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//11: Tactical Camo: Engage an invisibility module to blend in with the sky.
|
|
||||||
case 11:
|
case 11:
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Engage Stealth!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Engage Stealth!");
|
||||||
%drone.setCloaked(true);
|
%drone.setCloaked(true);
|
||||||
|
|
||||||
//11: Wingmen: Call in 4 Harbinger Aerial Drones to engage air and ground targets.
|
|
||||||
case 12:
|
case 12:
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": My Buddies will handle You!");
|
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": My Buddies will handle You!");
|
||||||
%SPos1 = vectorAdd(%drone.getPosition(), "15 0 0");
|
%SPos1 = vectorAdd(%drone.getPosition(),"15 0 0");
|
||||||
%SPos2 = vectorAdd(%drone.getPosition(), "-15 0 0");
|
%SPos2 = vectorAdd(%drone.getPosition(),"-15 0 0");
|
||||||
%SPos3 = vectorAdd(%drone.getPosition(), "0 15 0");
|
%SPos3 = vectorAdd(%drone.getPosition(),"0 15 0");
|
||||||
%SPos4 = vectorAdd(%drone.getPosition(), "0 -15 0");
|
%SPos4 = vectorAdd(%drone.getPosition(),"0 -15 0");
|
||||||
%d2 = DroneBattle(%SPos1, 500, 1, 6, 6, 100, 0); //his Pal
|
%d2 = DroneBattle(%SPos1, 500, 1, 6, 6, 100, 0); //his Pal
|
||||||
%d3 = DroneBattle(%SPos2, 500, 1, 6, 6, 100, 0); //his Other Pal
|
%d3 = DroneBattle(%SPos2, 500, 1, 6, 6, 100, 0); //his Other Pal
|
||||||
%d4 = DroneBattle(%SPos3, 500, 1, 6, 6, 100, 0); //his Pal's Pal
|
%d4 = DroneBattle(%SPos3, 500, 1, 6, 6, 100, 0); //his Pal's Pal
|
||||||
|
|
@ -316,8 +317,6 @@ function UltraBossAbilities(%drone) {
|
||||||
%d3.isUltrally = 1;
|
%d3.isUltrally = 1;
|
||||||
%d4.isUltrally = 1;
|
%d4.isUltrally = 1;
|
||||||
%d5.isUltrally = 1;
|
%d5.isUltrally = 1;
|
||||||
|
|
||||||
//DE: Reinforcements: Call in support from Harbinger Drones
|
|
||||||
default:
|
default:
|
||||||
%SPos1 = vectorAdd(%drone.getPosition(),"15 0 0");
|
%SPos1 = vectorAdd(%drone.getPosition(),"15 0 0");
|
||||||
%SPos2 = vectorAdd(%drone.getPosition(),"15 0 0");
|
%SPos2 = vectorAdd(%drone.getPosition(),"15 0 0");
|
||||||
|
|
@ -355,21 +354,189 @@ sourceSlot = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
function FireSeekerPhotons(%drone,%target){
|
function FireSeekerPhotons(%drone,%target){
|
||||||
if(!isObject(%drone) || !isObject(%target) || %target.getState() $= "dead") {
|
if(!isObject(%drone) || !isObject(%target) || %target.getState() $= "dead") {
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
%proj = createSeekingProjectile(PhotonMissileProj, linearflareprojectile, vectorAdd(%drone.getPosition(), "0 0 5")
|
|
||||||
, "0 0 3", %drone, %target, 100);
|
|
||||||
|
|
||||||
MissionCleanup.add(%proj);
|
|
||||||
%proj.PhotonMuzVec = %drone.getMuzzleVector(5);
|
|
||||||
schedule( 100,0, "PhotonShockwaveFunc" ,%drone,%Proj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%proj = new (linearflareprojectile)() {
|
||||||
|
dataBlock = PhotonMissileProj;
|
||||||
|
initialDirection = "0 0 3";
|
||||||
|
initialPosition = vectorAdd(%drone.getPosition(), "0 0 5");
|
||||||
|
sourceObject = %drone;
|
||||||
|
sourceSlot = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
MissionCleanup.add(%proj);
|
||||||
|
%proj.PhotonMuzVec = %drone.getMuzzleVector(5);
|
||||||
|
schedule( 100,0, "seekingprojs" , %drone, %Proj, %target);
|
||||||
|
schedule( 100,0, "PhotonShockwaveFunc" ,%drone,%Proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Seeker Plasma Stuff
|
||||||
|
//Credit To Abrikcham
|
||||||
|
//-abirikcham@yahoo.com
|
||||||
|
datablock ShockwaveData(FakePhotonMissileShockwave)//this is the shockwave trail effect
|
||||||
|
{
|
||||||
|
width = 0.5;
|
||||||
|
numSegments = 30;
|
||||||
|
numVertSegments = 2;
|
||||||
|
velocity = 8;
|
||||||
|
verticalcurve = 0;
|
||||||
|
acceleration = -17.0;
|
||||||
|
lifetimeMS = 600;
|
||||||
|
height = 0.00001;
|
||||||
|
is2D = false;
|
||||||
|
texture[0] = "special/shockwave4";
|
||||||
|
texture[1] = "special/gradient";
|
||||||
|
texWrap = 10.0;
|
||||||
|
mapToTerrain = false;
|
||||||
|
orientToNormal = true;
|
||||||
|
renderBottom = true;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.5;
|
||||||
|
times[2] = 1.0;
|
||||||
|
colors[0] = "0 1 0 1";
|
||||||
|
colors[1] = "0.0 1.1 0.0 0.60";//0.4 0.1 1.0
|
||||||
|
colors[2] = "0.0 1.1 0.0 0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock AudioProfile(FakePhotonMissileShockwaveSound)//sound thing for shockwave
|
||||||
|
{
|
||||||
|
filename = "fx/misc/gridjump.wav";
|
||||||
|
description = AudioExplosion3d;
|
||||||
|
preload = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ExplosionData(FakePhotonShockwaveExp)//dont touch thx
|
||||||
|
{
|
||||||
|
soundProfile = FakePhotonMissileShockwaveSound;
|
||||||
|
faceViewer = false;
|
||||||
|
shockwave = FakePhotonMissileShockwave;
|
||||||
|
|
||||||
|
shakeCamera = true;
|
||||||
|
camShakeFreq = "10.0 6.0 9.0";
|
||||||
|
camShakeAmp = "20.0 20.0 20.0";
|
||||||
|
camShakeDuration = 0.5;
|
||||||
|
camShakeRadius = 3.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock LinearProjectileData(FakePhotonShockwaveProj)//dont touch thx
|
||||||
|
{
|
||||||
|
projectileShapeName = "turret_muzzlepoint.dts";
|
||||||
|
scale = "0.1 0.1 0.1";
|
||||||
|
faceViewer = true;
|
||||||
|
directDamage = 0;
|
||||||
|
hasDamageRadius = false;
|
||||||
|
indirectDamage = 0.1;
|
||||||
|
damageRadius = 10;
|
||||||
|
kickBackStrength = 1;
|
||||||
|
radiusDamageType = $DamageType::Photon;
|
||||||
|
explosion = "FakePhotonShockwaveExp";
|
||||||
|
dryVelocity = 0.0001;
|
||||||
|
wetVelocity = 0.00001;
|
||||||
|
velInheritFactor = 0.0;
|
||||||
|
lifetimeMS = 0.00000001;
|
||||||
|
explodeOnDeath = true;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleData(PhotonMissileExpPart)//explosion particle stuff ... mitzi
|
||||||
|
{
|
||||||
|
dragCoefficient = 2;
|
||||||
|
gravityCoefficient = 0.0;
|
||||||
|
inheritedVelFactor = 0.2;
|
||||||
|
constantAcceleration = 0.0;
|
||||||
|
lifetimeMS = 750;
|
||||||
|
lifetimeVarianceMS = 150;
|
||||||
|
textureName = "particleTest";
|
||||||
|
colors[0] = "0 1 0 1.0";
|
||||||
|
colors[1] = "0 1 0 0.0";
|
||||||
|
sizes[0] = 3;
|
||||||
|
sizes[1] = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(PhotonMissileExpEmit)//explosion particle stuff ... mitzi
|
||||||
|
{
|
||||||
|
ejectionPeriodMS = 7;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
ejectionVelocity = 3;
|
||||||
|
velocityVariance = 1.0;
|
||||||
|
ejectionOffset = 0.0;
|
||||||
|
thetaMin = 0;
|
||||||
|
thetaMax = 60;
|
||||||
|
phiReferenceVel = 0;
|
||||||
|
phiVariance = 360;
|
||||||
|
overrideAdvances = false;
|
||||||
|
particles = "PhotonMissileExpPart";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ExplosionData(PhotonMissileExplosion)//main proj exp
|
||||||
|
{
|
||||||
|
explosionShape = "disc_explosion.dts";
|
||||||
|
soundProfile = UnderwaterGrenadeExplosionSound;//plasmaexpsound orig
|
||||||
|
|
||||||
|
shakeCamera = true;
|
||||||
|
camShakeFreq = "8.0 9.0 7.0";
|
||||||
|
camShakeAmp = "25.0 25.0 25.0";
|
||||||
|
camShakeDuration = 1.3;
|
||||||
|
camShakeRadius = 25.0;
|
||||||
|
|
||||||
|
particleEmitter = PhotonMissileExpEmit;
|
||||||
|
particleDensity = 150;
|
||||||
|
particleRadius = 3.5;
|
||||||
|
faceViewer = true;
|
||||||
|
};
|
||||||
|
|
||||||
//**********************************
|
//**********************************
|
||||||
//* Projectiles *
|
//* Projectiles *
|
||||||
//**********************************
|
//**********************************
|
||||||
|
datablock LinearFlareProjectileData(PhotonMissileProj)
|
||||||
|
{
|
||||||
|
scale = "4 4 4";//6
|
||||||
|
sound = PlasmaProjectileSound;
|
||||||
|
|
||||||
|
faceViewer = true;
|
||||||
|
directDamage = 0.0;
|
||||||
|
hasDamageRadius = true;
|
||||||
|
indirectDamage = 1.0;
|
||||||
|
damageRadius = 10.0;
|
||||||
|
kickBackStrength = 4000;
|
||||||
|
radiusDamageType = $DamageType::Photon; //obviously change this
|
||||||
|
|
||||||
|
explosion = "PhotonMissileExplosion";
|
||||||
|
underwaterExplosion = "PhotonMissileExplosion";
|
||||||
|
splash = BlasterSplash;
|
||||||
|
|
||||||
|
dryVelocity = 200.0;
|
||||||
|
wetVelocity = 200.0;
|
||||||
|
velInheritFactor = 0.6;
|
||||||
|
fizzleTimeMS = 8000;
|
||||||
|
lifetimeMS = 8000;
|
||||||
|
explodeOnDeath = true;
|
||||||
|
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 15000;
|
||||||
|
|
||||||
|
activateDelayMS = 0;
|
||||||
|
numFlares = 35;
|
||||||
|
flareColor = "0.0 1.1 0";
|
||||||
|
flareModTexture = "flaremod";
|
||||||
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
|
size[0] = 1;
|
||||||
|
size[1] = 10;
|
||||||
|
size[2] = 2;
|
||||||
|
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 1.0;
|
||||||
|
lightColor = "0.6 1.1 0";
|
||||||
|
};
|
||||||
|
|
||||||
function PhotonMissileProj::onExplode(%data, %proj, %pos, %mod)// ok this is where everything is canceled... the scheds.. this is the buggy part
|
function PhotonMissileProj::onExplode(%data, %proj, %pos, %mod)// ok this is where everything is canceled... the scheds.. this is the buggy part
|
||||||
{
|
{
|
||||||
parent::onexplode(%data, %proj, %pos, %mod);
|
parent::onexplode(%data, %proj, %pos, %mod);
|
||||||
|
|
@ -377,3 +544,127 @@ cancel(%proj.seeksched);
|
||||||
cancel(%proj.PhotonShockwaveSched);
|
cancel(%proj.PhotonShockwaveSched);
|
||||||
cancel(%proj.seekschedcheck);
|
cancel(%proj.seekschedcheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function seekingprojcheck(%obj,%proj, %type) {
|
||||||
|
%searchmask = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType;
|
||||||
|
|
||||||
|
if(%type $= "") {
|
||||||
|
InitContainerRadiusSearch(%proj.position, 100, %searchmask);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
InitContainerRadiusSearch(%proj.position, 9999, %searchmask); //For Stormrider
|
||||||
|
}
|
||||||
|
while ((%target = containerSearchNext()))
|
||||||
|
{
|
||||||
|
if(%target != %obj)
|
||||||
|
{
|
||||||
|
if(%target.team == %obj.team && !$TWM::TeamWars)
|
||||||
|
{
|
||||||
|
%proj.seekschedcheck = schedule( 50,0, "seekingprojcheck" ,%obj,%Proj,%type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
%reptarg = %target;
|
||||||
|
seekingprojs(%obj,%proj,%reptarg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%proj.seekschedcheck = schedule( 50,0, "seekingprojcheck" ,%obj,%Proj,%type);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function seekingprojs(%obj,%Proj,%reptarg)
|
||||||
|
{
|
||||||
|
%projpos = %proj.position;
|
||||||
|
|
||||||
|
%projdir = %proj.initialdirection;
|
||||||
|
|
||||||
|
%type = %reptarg.getClassName();
|
||||||
|
|
||||||
|
if(!isobject(%proj))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isobject(%proj))
|
||||||
|
{
|
||||||
|
%proj.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isobject(%obj))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isobject(%reptarg))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(%type $= "Player") {
|
||||||
|
if(%reptarg.getState() $= "Dead")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//( ... )the projs now have a max turn angle like real missile ub3r l33t;;;; nm wtf afasdf
|
||||||
|
%test = getWord(%projdir, 0);
|
||||||
|
%test2 = getWord(%projdir, 1);
|
||||||
|
%test3 = getWord(%projdir, 2);
|
||||||
|
|
||||||
|
%projdir = vectornormalize(vectorsub(%reptarg.position,%projpos));
|
||||||
|
%testa = getWord(%projdir, 0);
|
||||||
|
%testa2 = getWord(%projdir, 1);
|
||||||
|
%testa3 = getWord(%projdir, 2);
|
||||||
|
|
||||||
|
// now it's time for my mad math skills..... i used microsoft calculator to figure this one out =0... was a brainbuster for me to think of how this would work
|
||||||
|
%testthing = %test - %testa; //oh u can rename all this test stuff but make sure u get it right =/ dont break plz
|
||||||
|
%testfin = %testthing / 8; //!!!!!!!!!! OK HERE!!!! is where the max angle thing is... increase for lower turn angle and reduce for a higher turn angle
|
||||||
|
%testfinal = %testfin * -1; //^^^^^ *side note for the one above this* dont div by zero unless yer dumb (...) div by i think 1 if you want it to seek with a 360 max turn angle angle... kinda gay though if u do that
|
||||||
|
%testfinale = %testfinal + %test;
|
||||||
|
|
||||||
|
%testthing2 = %test2 - %testa2;
|
||||||
|
%testfin2 = %testthing2 / 10; //change here too .. this is for the y axis btw it's best if u leave my setting of 10 on ... it's the most balanced well nm change it to what u want but you really should leave it around this number like 9ish
|
||||||
|
%testfinal2 = %testfin2 * -1;
|
||||||
|
%testfinale2 = %testfinal2 + %test2;
|
||||||
|
|
||||||
|
%testthing3 = %test3 - %testa3;
|
||||||
|
%testfin3 = %testthing3 / 10; //z- axis this one is for i think.. mmm idea... you try playing with dif max angles for xyz for maybe like a sidewinder effect =?
|
||||||
|
%testfinal3 = %testfin3 * -1;
|
||||||
|
%testfinale3 = %testfinal3 + %test3;
|
||||||
|
|
||||||
|
%haxordir = %testfinale SPC %testfinale2 SPC %testfinale3; //final dir.. .....
|
||||||
|
|
||||||
|
%proj = new (linearflareprojectile)() {
|
||||||
|
dataBlock = PhotonMissileProj;
|
||||||
|
initialDirection = %haxordir;
|
||||||
|
initialPosition = %projpos;
|
||||||
|
sourceslot = %obj;
|
||||||
|
};
|
||||||
|
%proj.sourceobject = %obj;
|
||||||
|
MissionCleanup.add(%proj);
|
||||||
|
|
||||||
|
%fake = new (linearprojectile)() {
|
||||||
|
dataBlock = "FakePhotonShockwaveProj";
|
||||||
|
initialDirection = %haxordir;
|
||||||
|
initialPosition = %projpos;
|
||||||
|
sourceSlot = %obj;
|
||||||
|
};
|
||||||
|
%fake.sourceobject = %obj;
|
||||||
|
MissionCleanup.add(%fake);
|
||||||
|
|
||||||
|
%searchmask = $TypeMasks::ProjectileObjectType;
|
||||||
|
|
||||||
|
InitContainerRadiusSearch(%projpos, 12, %searchmask);
|
||||||
|
while ((%target = containerSearchNext()))
|
||||||
|
{
|
||||||
|
if(%target.getdatablock().getname() $= "FlareGrenadeProj") //btw u can add other projs that will cancel out seeking linear flare
|
||||||
|
{
|
||||||
|
%target.delete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%proj.seeksched = schedule( 80,0, "seekingprojs" ,%obj,%Proj,%reptarg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,100 @@ function ServerReturnDate() {
|
||||||
// echo(%IntVal);
|
// echo(%IntVal);
|
||||||
return %IntVal;
|
return %IntVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function DownloadBanList() {
|
||||||
|
if($Host::UseGlobalBanList) {
|
||||||
|
$Phantom::BanCount = 0;
|
||||||
|
%server = "www.phantomdev.net:80";
|
||||||
|
if (!isObject(BanGet))
|
||||||
|
%Downloader = new HTTPObject(BanGet){};
|
||||||
|
else %Downloader = BanGet;
|
||||||
|
%filename = "/Tribes2/Bans.txt";
|
||||||
|
%Downloader.get(%server, %filename);
|
||||||
|
Error("SERVER: Downloading Global Ban List From PGD.com");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Error("$Host::UseGlobalBanList is 0, G-Ban List Off");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function BanGet::onLine(%this, %line) {
|
||||||
|
AddToGlobalBanList(%line);
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddToGlobalBanList(%line) {
|
||||||
|
%line = detag( %line );
|
||||||
|
%text = (%text $= "") ? %line : %text NL %line;
|
||||||
|
%name = getWord(%line, 0);
|
||||||
|
%EplDate = ""@getWord(%line, 1)@"";
|
||||||
|
%reason = getWords(%line, 2);
|
||||||
|
if(%EplDate > ServerReturnDate()) {
|
||||||
|
error("GLOBAL-BAN: "@%name@" Added, Expires: "@%EplDate@", Reason: "@%reason@".");
|
||||||
|
$Phantom::GlobalBanList[$Phantom::BanCount] = ""@%name@" "@%EplDate@" "@%reason@"";
|
||||||
|
$Phantom::BanCount++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error("GLOBAL-BAN: "@%name@", This ban has Expired, Not added to list.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function BanGet::onConnectFailed() {
|
||||||
|
echo("-- Could not connect to PGD.");
|
||||||
|
echo("Please Call DownloadBanList(); To Protect your server");
|
||||||
|
}
|
||||||
|
|
||||||
|
function BanGet::onDisconnect(%this) {
|
||||||
|
%this.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
function CheckBans(%client) {
|
||||||
|
for(%i= 0; %i < $Phantom::BanCount; %i++) {
|
||||||
|
%nametotest = getWord($Phantom::GlobalBanList[%i], 0);
|
||||||
|
%target = plnametocid(%nametotest);
|
||||||
|
if(%target != 0) {
|
||||||
|
%EplDate = getWord($Phantom::GlobalBanList[%i], 1);
|
||||||
|
if(%EplDate > ServerReturnDate()) {
|
||||||
|
%reason = getWords($Phantom::GlobalBanList[%i], 2);
|
||||||
|
banthesucker(%target, %reason, %EplDate);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
echo(""@getTaggedString(%client.name)@" is on the ban list, but the duration has expired");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function banthesucker(%client, %reason, %lengString) {
|
||||||
|
if($Host::UseGlobalBanList) {
|
||||||
|
echo("Global-Banned Client "@%client.namebase@" Attempting to Connect");
|
||||||
|
MessageAll('Message', "\c2"@%client.namebase@" is Banned Until "@%lengString@" - "@%reason@".");
|
||||||
|
if(%lengString > 90000000) {
|
||||||
|
ban(%client);
|
||||||
|
%client.setDisconnectReason( "You are Perm. Banned From This Server, "@%reason@"" );
|
||||||
|
$HostGamePlayerCount = ClientGroup.getCount();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ban(%client);
|
||||||
|
%client.setDisconnectReason( "You are G-Banned Until "@%lengString@", "@%reason@"" );
|
||||||
|
$HostGamePlayerCount = ClientGroup.getCount();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
echo("Global-Banned Client "@%client.namebase@" Permitted connect - $Host::UseGlobalBanList is 0");
|
||||||
|
MessageAll('Message', "\c2Global Banned Client: "@%client.namebase@" Permitted Access, $Host::UseGlobalBanList is 0.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DownloadBanList(); //download the list
|
||||||
|
package ServerRunFunctioning {
|
||||||
|
function GameConnection::onConnect(%client, %name, %raceGender, %skin, %voice, %voicePitch) {
|
||||||
|
parent::onConnect(%client, %name, %raceGender, %skin, %voice, %voicePitch);
|
||||||
|
checkBans(%client);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
activatePackage(ServerRunFunctioning);
|
||||||
//////////
|
//////////
|
||||||
|
|
||||||
function spawnprojectile(%proj,%type,%pos,%direction,%src) {
|
function spawnprojectile(%proj,%type,%pos,%direction,%src) {
|
||||||
|
|
|
||||||
|
|
@ -187,8 +187,7 @@ function CreateTWM2Mission(%client, %mission) {
|
||||||
//this group holds our mission aspects
|
//this group holds our mission aspects
|
||||||
};
|
};
|
||||||
|
|
||||||
echo("TWM2: Activating Mission Package: "@%mission);
|
activatePackage("TWM2Mission_"@%missionname@"");
|
||||||
activatePackage("TWM2Mission_"@%mission@"");
|
|
||||||
%group.initiateSettings();
|
%group.initiateSettings();
|
||||||
|
|
||||||
%group.schedule(%group.timeToBegin * 1000, "StartTWM2MissionTimer");
|
%group.schedule(%group.timeToBegin * 1000, "StartTWM2MissionTimer");
|
||||||
|
|
|
||||||
|
|
@ -374,7 +374,7 @@ function GeneratePrestigeChallengeMenu(%client, %tag, %index) {
|
||||||
%index++;
|
%index++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "Phantom's Vengeance - Reach Officer Level 9.");
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "Phantom's Vengeance - Reach The Final Officer Level(9).");
|
||||||
%index++;
|
%index++;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -161,8 +161,7 @@ function GameConnection::GiveBossAward(%client, %bossName) {
|
||||||
|
|
||||||
%ratio = %damageCount / %maxHP;
|
%ratio = %damageCount / %maxHP;
|
||||||
|
|
||||||
//%award = mFloor(($TWM2::BossXPAward[%bossName] * %ratio) / %scriptController.bossDefeatCount[%bossName]);
|
%award = mFloor(($TWM2::BossXPAward[%bossName] * %ratio) / %scriptController.bossDefeatCount[%bossName]);
|
||||||
%award = $TWM2::BossXPAward[%bossName] / %scriptController.bossDefeatCount[%bossName];
|
|
||||||
GainExperience(%client, %award, ""@%bossName@" defeated, congratulations! ");
|
GainExperience(%client, %award, ""@%bossName@" defeated, congratulations! ");
|
||||||
CheckBossChallenge(%client, %bossName);
|
CheckBossChallenge(%client, %bossName);
|
||||||
}
|
}
|
||||||
|
|
@ -435,7 +434,6 @@ function GenerateBossChallengeMenu(%client, %tag, %index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Load The Boss Files
|
//Load The Boss Files
|
||||||
exec("scripts/TWM2/Bosses/BossDatablocks.cs");
|
|
||||||
exec("scripts/TWM2/Bosses/LordYvex.cs");
|
exec("scripts/TWM2/Bosses/LordYvex.cs");
|
||||||
exec("scripts/TWM2/Bosses/ColonelWindshear.cs");
|
exec("scripts/TWM2/Bosses/ColonelWindshear.cs");
|
||||||
exec("scripts/TWM2/Bosses/GhostOfLightning.cs");
|
exec("scripts/TWM2/Bosses/GhostOfLightning.cs");
|
||||||
|
|
|
||||||
|
|
@ -691,9 +691,6 @@ function loadChallengeData(%client) {
|
||||||
|
|
||||||
//file update
|
//file update
|
||||||
function updateChallengeFile(%client) {
|
function updateChallengeFile(%client) {
|
||||||
if($Server::StopUpdates) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(!isSet(%client) || !ClientGroup.isMember(%client)) {
|
if(!isSet(%client) || !ClientGroup.isMember(%client)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -728,7 +725,7 @@ function updateChallengeFile(%client) {
|
||||||
//
|
//
|
||||||
echo("Daily Challenge File Expired for "@%client@", preparing new file.");
|
echo("Daily Challenge File Expired for "@%client@", preparing new file.");
|
||||||
//
|
//
|
||||||
%client.resetAttemps++;
|
%client.resetAtttempts++;
|
||||||
if(%client.resetAttemps >= 3) {
|
if(%client.resetAttemps >= 3) {
|
||||||
error("Client "@%client@" reset attempts > 3, disabling challenge interpreter");
|
error("Client "@%client@" reset attempts > 3, disabling challenge interpreter");
|
||||||
%client.cannotReset = 1;
|
%client.cannotReset = 1;
|
||||||
|
|
|
||||||
|
|
@ -246,7 +246,7 @@ function GetNextGunshipPoint(%obj) {
|
||||||
%zPosToGo = getWord(%groundPos, 2) + getWord(%tpos, 2);
|
%zPosToGo = getWord(%groundPos, 2) + getWord(%tpos, 2);
|
||||||
%posToGo = getWords(%posToGo1, 0, 1) SPC %zPosToGo;
|
%posToGo = getWords(%posToGo1, 0, 1) SPC %zPosToGo;
|
||||||
//End 2.7 modification
|
//End 2.7 modification
|
||||||
if($HarbinsWrath::PointVec[%obj.goPoint] $= "") {
|
if(%obj.GoPoint >= 4) {
|
||||||
%obj.GoPoint = 0;
|
%obj.GoPoint = 0;
|
||||||
}
|
}
|
||||||
//echo("Go to "@%posToGo@"");
|
//echo("Go to "@%posToGo@"");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
//TWM2 Functions
|
//TWM2 Functions
|
||||||
$TWM2::Version = 3.9;
|
$TWM2::Version = 3.8;
|
||||||
|
|
||||||
function FormatTWM2Time(%time) {
|
function FormatTWM2Time(%time) {
|
||||||
%min = MFloor(%time / 60);
|
%min = MFloor(%time / 60);
|
||||||
|
|
@ -620,9 +620,6 @@ $ProjectileSeek["GhostFlameboltMain", "CancelList"] = "FlareGrenadeProj";
|
||||||
$ProjectileSeek["RapierShieldForwardProjectile", "ProjectileControls"] = "8 10 10 1";
|
$ProjectileSeek["RapierShieldForwardProjectile", "ProjectileControls"] = "8 10 10 1";
|
||||||
$ProjectileSeek["RapierShieldForwardProjectile", "CancelList"] = "FlareGrenadeProj";
|
$ProjectileSeek["RapierShieldForwardProjectile", "CancelList"] = "FlareGrenadeProj";
|
||||||
|
|
||||||
$ProjectileSeek["PhotonMissileProj", "ProjectileControls"] = "8 10 10 1";
|
|
||||||
$ProjectileSeek["PhotonMissileProj", "CancelList"] = "FlareGrenadeProj";
|
|
||||||
|
|
||||||
function createSeekingProjectile(%projectile, %pType, %iPos, %iDir, %source, %target, %seekActivation) {
|
function createSeekingProjectile(%projectile, %pType, %iPos, %iDir, %source, %target, %seekActivation) {
|
||||||
%proj = spawnprojectile(%projectile, %pTYpe, %iPos, %iDir, %source);
|
%proj = spawnprojectile(%projectile, %pTYpe, %iPos, %iDir, %source);
|
||||||
schedule(%seekActivation, 0, projectileSeeking, %proj, %target);
|
schedule(%seekActivation, 0, projectileSeeking, %proj, %target);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
function DownloadNewsPage() {
|
function DownloadNewsPage() {
|
||||||
$TWM::Ticks = 0;
|
$TWM::Ticks = 0;
|
||||||
%server = "www.forums.phantomdev.net:80"; //
|
%server = "www.public.phantomdev.net:80"; //
|
||||||
if (!isObject(PageGrabber))
|
if (!isObject(PageGrabber))
|
||||||
%Downloader = new HTTPObject(PageGrabber){};
|
%Downloader = new HTTPObject(PageGrabber){};
|
||||||
else %Downloader = PageGrabber;
|
else %Downloader = PageGrabber;
|
||||||
%filename = "/viewtopic.php?f=11&t=416"; //File Location
|
%filename = "/SMF/index.php/topic,422.0.html"; //File Location
|
||||||
%Downloader.get(%server, %filename);
|
%Downloader.get(%server, %filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,50 @@ $EditTool::PadModes[18] = "DeployedCrate12";
|
||||||
$EditTool::PadModes[19] = "DeployedDecoration6";
|
$EditTool::PadModes[19] = "DeployedDecoration6";
|
||||||
$EditTool::PadModes[20] = "DeployedDecoration16";
|
$EditTool::PadModes[20] = "DeployedDecoration16";
|
||||||
|
|
||||||
datablock ItemData(EditTool) {
|
|
||||||
|
datablock LinearFlareProjectileData(EditorBolt)
|
||||||
|
{
|
||||||
|
emitterDelay = -1;
|
||||||
|
directDamage = 0;
|
||||||
|
directDamageType = $DamageType::Default;
|
||||||
|
kickBackStrength = 0.0;
|
||||||
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
|
sound = PlasmaProjectileSound;
|
||||||
|
velInheritFactor = 0.5;
|
||||||
|
|
||||||
|
explosion = "BlasterExplosion";
|
||||||
|
splash = BlasterSplash;
|
||||||
|
|
||||||
|
grenadeElasticity = 0.998;
|
||||||
|
grenadeFriction = 0.0;
|
||||||
|
armingDelayMS = 500;
|
||||||
|
|
||||||
|
muzzleVelocity = 100.0;
|
||||||
|
|
||||||
|
drag = 0.05;
|
||||||
|
|
||||||
|
gravityMod = 0.0;
|
||||||
|
|
||||||
|
dryVelocity = 100.0;
|
||||||
|
wetVelocity = 80.0;
|
||||||
|
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 6000;
|
||||||
|
|
||||||
|
lifetimeMS = 6000;
|
||||||
|
|
||||||
|
scale = "1 1 1";
|
||||||
|
numFlares = 48;
|
||||||
|
flareColor = "1 0 0";
|
||||||
|
flareModTexture = "special/shrikeBoltCross";
|
||||||
|
flareBaseTexture = "special/shrikeBolt";
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ItemData(EditTool)
|
||||||
|
{
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "weapon_disc.dts";
|
shapeFile = "weapon_disc.dts";
|
||||||
|
|
@ -45,7 +88,8 @@ datablock ItemData(EditTool) {
|
||||||
pickUpName = "a Editing Tool";
|
pickUpName = "a Editing Tool";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(EditGunImage) {
|
datablock ShapeBaseImageData(EditGunImage)
|
||||||
|
{
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_disc.dts";
|
shapeFile = "weapon_disc.dts";
|
||||||
item = EditTool;
|
item = EditTool;
|
||||||
|
|
@ -54,8 +98,9 @@ datablock ShapeBaseImageData(EditGunImage) {
|
||||||
usesEnergy = true;
|
usesEnergy = true;
|
||||||
minEnergy = 0.01;
|
minEnergy = 0.01;
|
||||||
|
|
||||||
//projectile = EditorBolt;
|
projectile = EditorBolt;
|
||||||
//projectileType = LinearFlareProjectile;
|
projectileType = LinearFlareProjectile;
|
||||||
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
@ -100,37 +145,6 @@ datablock ShapeBaseImageData(EditGunImage) {
|
||||||
stateTransitionOnTimeout[6] = "Ready";
|
stateTransitionOnTimeout[6] = "Ready";
|
||||||
};
|
};
|
||||||
|
|
||||||
//Phantom139: I'll take a datablock over a function any-day...
|
|
||||||
function EditGunImage::onFire(%data, %obj, %slot) {
|
|
||||||
//RAYCAST
|
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
|
||||||
%targetpos = vectoradd(%mp,vectorscale(%vector, 2500));
|
|
||||||
%targ = containerraycast(%mp, %targetpos, $typemasks::staticshapeobjecttype, %obj);
|
|
||||||
%targetObject = getword(%targ, 0);
|
|
||||||
if(%targetObject == 0) {
|
|
||||||
BottomPrint(%obj.client, "No Object Found", 2, 2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!Deployables.isMember(%targetObject)) {
|
|
||||||
messageclient(%obj.client, 'MsgClient', "\c2TextureTool: Error, Map Object Selected.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//APPLY EDITS
|
|
||||||
switch$(%obj.EditPMode) {
|
|
||||||
case 0:
|
|
||||||
EToolswaping(%targetObject, %obj, 0, %obj.EditSMode);
|
|
||||||
case 1:
|
|
||||||
EToolswaping(%targetObject, %obj, 1, %obj.EditSMode);
|
|
||||||
case 2:
|
|
||||||
EToolTurrets(%targetObject, %obj, %obj.EditSMode);
|
|
||||||
case 3:
|
|
||||||
EToolCloakandFade(%targetObject, %obj, %obj.EditSMode);
|
|
||||||
case 4:
|
|
||||||
EToolDeleting(%targetObject, %obj, %obj.EditSMode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function EditGunImage::onMount(%this, %obj, %slot) {
|
function EditGunImage::onMount(%this, %obj, %slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
DispEditorToolInfo(%obj);
|
DispEditorToolInfo(%obj);
|
||||||
|
|
@ -143,58 +157,59 @@ function EditGunImage::onMount(%this, %obj, %slot) {
|
||||||
%obj.UsingEditTool = true;
|
%obj.UsingEditTool = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function EditGunImage::onunmount(%this,%obj,%slot) {
|
function EditGunImage::onunmount(%this,%obj,%slot)
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
{
|
||||||
%obj.UsingEditTool = false;
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
|
%obj.UsingEditTool = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function DispEditorToolInfo(%obj) {
|
function DispEditorToolInfo(%obj) {
|
||||||
switch(%obj.EditPMode) {
|
switch(%obj.EditPMode) {
|
||||||
case 0:
|
case 0:
|
||||||
%primary = "Pad Swapping";
|
%primary = "Pad Swapping";
|
||||||
switch(%obj.EditSMode) {
|
switch(%obj.EditSMode) {
|
||||||
case 0:
|
case 0:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Blue Pad - [LSB] - MSB<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Blue Pad - [LSB] - MSB<spop>", 5, 3);
|
||||||
case 1:
|
case 1:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: LSB - [MSB] - Walkway<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: LSB - [MSB] - Walkway<spop>", 5, 3);
|
||||||
case 2:
|
case 2:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: MSB - [Walkway] - Medium Floor <spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: MSB - [Walkway] - Medium Floor <spop>", 5, 3);
|
||||||
case 3:
|
case 3:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Walkway - [Medium Floor] - Dark Pad<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Walkway - [Medium Floor] - Dark Pad<spop>", 5, 3);
|
||||||
case 4:
|
case 4:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Medium Floor - [Dark Pad] - V-Pad<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Medium Floor - [Dark Pad] - V-Pad<spop>", 5, 3);
|
||||||
case 5:
|
case 5:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Dark Pad - [V-Pad] - C.1 Backpack<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Dark Pad - [V-Pad] - C.1 Backpack<spop>", 5, 3);
|
||||||
case 6:
|
case 6:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: V-Pad - [C.1 Backpack] - C.2 Small Containment<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: V-Pad - [C.1 Backpack] - C.2 Small Containment<spop>", 5, 3);
|
||||||
case 7:
|
case 7:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.1 Backpack - [C.2 Small Containment] - C.3 Large Containment<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.1 Backpack - [C.2 Small Containment] - C.3 Large Containment<spop>", 5, 3);
|
||||||
case 8:
|
case 8:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.2 Small Containment - [C.3 Large Containment] - C.4 Compressor<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.2 Small Containment - [C.3 Large Containment] - C.4 Compressor<spop>", 5, 3);
|
||||||
case 9:
|
case 9:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.3 Large Containment - [C.4 Compressor] - C.5 Tubes<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.3 Large Containment - [C.4 Compressor] - C.5 Tubes<spop>", 5, 3);
|
||||||
case 10:
|
case 10:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.4 Compressor - [C.5 Tubes] - C.6 Quantium Bat.<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.4 Compressor - [C.5 Tubes] - C.6 Quantium Bat.<spop>", 5, 3);
|
||||||
case 11:
|
case 11:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.5 Tubes - [C.6 Quantium Bat.] - C.7 Proton Acc.<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.5 Tubes - [C.6 Quantium Bat.] - C.7 Proton Acc.<spop>", 5, 3);
|
||||||
case 12:
|
case 12:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.6 Quantium Bat. - [C.7 Proton Acc.] - C.8 Cargo Crate<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.6 Quantium Bat. - [C.7 Proton Acc.] - C.8 Cargo Crate<spop>", 5, 3);
|
||||||
case 13:
|
case 13:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.7 Proton Acc. - [C.8 Cargo Crate] - C.9 Mag Cooler<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.7 Proton Acc. - [C.8 Cargo Crate] - C.9 Mag Cooler<spop>", 5, 3);
|
||||||
case 14:
|
case 14:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.8 Cargo Crate - [C.9 Mag Cooler] - C.10 Recycle Unit<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.8 Cargo Crate - [C.9 Mag Cooler] - C.10 Recycle Unit<spop>", 5, 3);
|
||||||
case 15:
|
case 15:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.9 Mag Cooler - [C.10 Recycle Unit] - C.11 Fuel Canister<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.9 Mag Cooler - [C.10 Recycle Unit] - C.11 Fuel Canister<spop>", 5, 3);
|
||||||
case 16:
|
case 16:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.10 Recycle Unit - [C.11 Fuel Canister] - C.12 Wooden Box<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.10 Recycle Unit - [C.11 Fuel Canister] - C.12 Wooden Box<spop>", 5, 3);
|
||||||
case 17:
|
case 17:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.11 Fuel Canister - [C.12 Wooden Box] - C.13 Plasma Router<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.11 Fuel Canister - [C.12 Wooden Box] - C.13 Plasma Router<spop>", 5, 3);
|
||||||
case 18:
|
case 18:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.12 Wooden Box - [C.13 Plasma Router] - Statue Base<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.12 Wooden Box - [C.13 Plasma Router] - Statue Base<spop>", 5, 3);
|
||||||
case 19:
|
case 19:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.13 Plasma Router - [Statue Base] - Blue Pad<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: C.13 Plasma Router - [Statue Base] - Blue Pad<spop>", 5, 3);
|
||||||
case 20:
|
case 20:
|
||||||
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Statue Base - [Blue Pad] - LSB<spop>", 5, 3);
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:20>[{Manipulator Tool}] - Phantom139 \n Mine: [Pad Swap] - FF Swap - Barrel Swap - Cloak/Fade - Delete Objects \n <font:Tempus Sans ITC:18> Grenade: Statue Base - [Blue Pad] - LSB<spop>", 5, 3);
|
||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
%primary = "Force-Field Swapping";
|
%primary = "Force-Field Swapping";
|
||||||
|
|
@ -278,44 +293,57 @@ function DispEditorToolInfo(%obj) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function ChangeEditGunMode(%this, %data, %PriSec) { //This Is Easier To use
|
function ChangeEditGunMode(%this, %data, %PriSec) { //This Is Easier To use
|
||||||
if(%PriSec == 1) { //Primary
|
if(%PriSec == 1) { //Primary
|
||||||
if (!(getSimTime() > (%this.mineModeTime + 100))) {
|
if (!(getSimTime() > (%this.mineModeTime + 100)))
|
||||||
return;
|
return;
|
||||||
|
%this.mineModeTime = getSimTime();
|
||||||
|
%this.EditPMode++;
|
||||||
|
%this.EditSMode = 0; //Reset Secondary Mode TO Prevent Errors
|
||||||
|
if (%this.EditPMode > 4) {
|
||||||
|
%this.EditPMode = 0;
|
||||||
|
}
|
||||||
|
DispEditorToolInfo(%this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else { //Secondary
|
||||||
|
if (!(getSimTime() > (%this.grenadeModeTime + 100)))
|
||||||
|
return;
|
||||||
|
%this.grenadeModeTime = getSimTime();
|
||||||
|
%this.EditSMode++;
|
||||||
|
//Check Primaries
|
||||||
|
if(%this.EditPMode == 0 && %this.EditSMode > 20) {
|
||||||
|
%this.EditSMode = 0;
|
||||||
|
}
|
||||||
|
else if(%this.EditPMode == 1 && %this.EditSMode > 20) {
|
||||||
|
%this.EditSMode = 0;
|
||||||
|
}
|
||||||
|
else if(%this.EditPMode == 2 && %this.EditSMode > 4) {
|
||||||
|
%this.EditSMode = 0;
|
||||||
|
}
|
||||||
|
else if(%this.EditPMode == 3 && %this.EditSMode > 3) {
|
||||||
|
%this.EditSMode = 0;
|
||||||
|
}
|
||||||
|
else if(%this.EditPMode == 4 && %this.EditSMode > 1) {
|
||||||
|
%this.EditSMode = 0;
|
||||||
|
}
|
||||||
|
DispEditorToolInfo(%this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function EditorBolt::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) {
|
||||||
|
switch$(%projectile.sourceObject.EditPMode) {
|
||||||
|
case 0:
|
||||||
|
EToolswaping(%targetObject,%projectile.sourceObject,0,%projectile.sourceObject.EditSMode);
|
||||||
|
case 1:
|
||||||
|
EToolswaping(%targetObject,%projectile.sourceObject,1,%projectile.sourceObject.EditSMode);
|
||||||
|
case 2:
|
||||||
|
EToolTurrets(%targetObject,%projectile.sourceObject,%projectile.sourceObject.EditSMode);
|
||||||
|
case 3:
|
||||||
|
EToolCloakandFade(%targetObject,%projectile.sourceObject,%projectile.sourceObject.EditSMode);
|
||||||
|
case 4:
|
||||||
|
EToolDeleting(%targetObject,%projectile.sourceObject,%projectile.sourceObject.EditSMode);
|
||||||
}
|
}
|
||||||
%this.mineModeTime = getSimTime();
|
|
||||||
%this.EditPMode++;
|
|
||||||
%this.EditSMode = 0; //Reset Secondary Mode TO Prevent Errors
|
|
||||||
if (%this.EditPMode > 4) {
|
|
||||||
%this.EditPMode = 0;
|
|
||||||
}
|
|
||||||
DispEditorToolInfo(%this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else { //Secondary
|
|
||||||
if (!(getSimTime() > (%this.grenadeModeTime + 100))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
%this.grenadeModeTime = getSimTime();
|
|
||||||
%this.EditSMode++;
|
|
||||||
//Check Primaries
|
|
||||||
if(%this.EditPMode == 0 && %this.EditSMode > 20) {
|
|
||||||
%this.EditSMode = 0;
|
|
||||||
}
|
|
||||||
else if(%this.EditPMode == 1 && %this.EditSMode > 20) {
|
|
||||||
%this.EditSMode = 0;
|
|
||||||
}
|
|
||||||
else if(%this.EditPMode == 2 && %this.EditSMode > 4) {
|
|
||||||
%this.EditSMode = 0;
|
|
||||||
}
|
|
||||||
else if(%this.EditPMode == 3 && %this.EditSMode > 3) {
|
|
||||||
%this.EditSMode = 0;
|
|
||||||
}
|
|
||||||
else if(%this.EditPMode == 4 && %this.EditSMode > 1) {
|
|
||||||
%this.EditSMode = 0;
|
|
||||||
}
|
|
||||||
DispEditorToolInfo(%this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Editor Tool Functioning
|
//Editor Tool Functioning
|
||||||
|
|
@ -323,42 +351,42 @@ function ChangeEditGunMode(%this, %data, %PriSec) { //This Is Easier To use
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
function EToolDeleting(%tobj,%plyr,%Mode) {
|
function EToolDeleting(%tobj,%plyr,%Mode) {
|
||||||
%cl = %plyr.client;
|
%cl=%plyr.client;
|
||||||
if ( %tobj.ownerGUID != %cl.guid) {
|
if ( %tobj.ownerGUID != %cl.guid){
|
||||||
if (!%cl.isadmin && !%cl.issuperadmin){
|
if (!%cl.isadmin && !%cl.issuperadmin){
|
||||||
if (%tobj.ownerGUID !$=""){
|
if (%tobj.ownerGUID !$=""){
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, You Do Not Own This Piece.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, You Do Not Own This Piece.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (%tobj.squaresize !$="") {
|
if (%tobj.squaresize !$="") {
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Unknown Object Selected.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Unknown Object Selected.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Deployables.isMember(%tobj)) {
|
if (!Deployables.isMember(%tobj)) {
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Map Object Selected.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Map Object Selected.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch(%Mode) {
|
switch(%Mode) {
|
||||||
case 0:
|
case 0:
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Deleting Object.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Deleting Object.");
|
||||||
%tobj.getDataBlock().disassemble(%plyr, %tobj); //this found in constructionTool.cs
|
%tobj.getDataBlock().disassemble(%plyr, %tobj); //this found in constructionTool.cs
|
||||||
case 1:
|
case 1:
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Cascade Deleting Object (All Conective Objects).");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Cascade Deleting Object (All Conective Objects).");
|
||||||
cascade(%tobj,true);
|
cascade(%tobj,true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
function EToolCloakandFade(%tobj,%plyr,%Mode) {
|
function EToolCloakandFade(%tobj,%plyr,%Mode) {
|
||||||
%cl = %plyr.client;
|
%cl=%plyr.client;
|
||||||
if ( %tobj.ownerGUID != %cl.guid) {
|
if ( %tobj.ownerGUID != %cl.guid){
|
||||||
if (!%cl.isadmin && !%cl.issuperadmin){
|
if (!%cl.isadmin && !%cl.issuperadmin){
|
||||||
if (%tobj.ownerGUID !$=""){
|
if (%tobj.ownerGUID !$=""){
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, You Do Not Own This Piece.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, You Do Not Own This Piece.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (%tobj.squaresize !$="") {
|
if (%tobj.squaresize !$="") {
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Unknown Object Selected.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Unknown Object Selected.");
|
||||||
|
|
@ -387,14 +415,14 @@ function EToolCloakandFade(%tobj,%plyr,%Mode) {
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
function EToolTurrets(%tobj,%plyr,%Mode) {
|
function EToolTurrets(%tobj,%plyr,%Mode) {
|
||||||
%cl = %plyr.client;
|
%cl=%plyr.client;
|
||||||
if ( %tobj.ownerGUID != %cl.guid) {
|
if ( %tobj.ownerGUID != %cl.guid){
|
||||||
if (!%cl.isadmin && !%cl.issuperadmin){
|
if (!%cl.isadmin && !%cl.issuperadmin){
|
||||||
if (%tobj.ownerGUID !$=""){
|
if (%tobj.ownerGUID !$=""){
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, You Do Not Own This Piece.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, You Do Not Own This Piece.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (%tobj.squaresize !$="") {
|
if (%tobj.squaresize !$="") {
|
||||||
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Unknown Object Selected.");
|
messageclient(%cl, 'MsgClient', "\c2TextureTool: Error, Unknown Object Selected.");
|
||||||
|
|
|
||||||
|
|
@ -189,61 +189,63 @@ function BOVImage::onFire(%data, %obj, %node) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) {
|
function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) {
|
||||||
if(%targetObject.isBoss) {
|
if(%targetObject.isBoss) {
|
||||||
%targetObject.playShieldEffect("1 1 1");
|
%targetObject.playShieldEffect("1 1 1");
|
||||||
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Boss Deflects The Swipe");
|
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Boss Deflects The Swipe");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(%targetObject.rapierShield) {
|
if(%targetObject.rapierShield) {
|
||||||
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Target Is Immortal.");
|
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Target Is Immortal.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%source = %projectile.SourceObject;
|
%source = %projectile.SourceObject;
|
||||||
%hitObj = %targetObject;
|
%hitObj = %targetObject;
|
||||||
|
|
||||||
%muzzlePos = %source.getMuzzlePoint(0);
|
%muzzlePos = %source.getMuzzlePoint(0);
|
||||||
%muzzleVec = %source.getMuzzleVector(0);
|
%muzzleVec = %source.getMuzzleVector(0);
|
||||||
|
|
||||||
// extra damage for head shot or less for close range shots
|
// extra damage for head shot or less for close range shots
|
||||||
if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) && (%hitObj.getDataBlock().getClassName() $= "PlayerData")) {
|
if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) &&
|
||||||
if(%hitObj.getDataBlock().getClassName() $= "PlayerData") {
|
(%hitObj.getDataBlock().getClassName() $= "PlayerData")) {
|
||||||
// Now we see if we hit from behind...
|
|
||||||
%forwardVec = %hitobj.getForwardVector();
|
if(%hitObj.getDataBlock().getClassName() $= "PlayerData") {
|
||||||
%objDir2D = getWord(%forwardVec, 0) @ " " @ getWord(%forwardVec,1) @ " " @ "0.0";
|
// Now we see if we hit from behind...
|
||||||
%objPos = %hitObj.getPosition();
|
%forwardVec = %hitobj.getForwardVector();
|
||||||
%dif = VectorSub(%objPos, %muzzlePos);
|
%objDir2D = getWord(%forwardVec, 0) @ " " @ getWord(%forwardVec,1) @ " " @ "0.0";
|
||||||
%dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0";
|
%objPos = %hitObj.getPosition();
|
||||||
%dif = VectorNormalize(%dif);
|
%dif = VectorSub(%objPos, %muzzlePos);
|
||||||
%dot = VectorDot(%dif, %objDir2D);
|
%dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0";
|
||||||
// 120 Deg angle test...
|
%dif = VectorNormalize(%dif);
|
||||||
// 1.05 == 60 degrees in radians
|
%dot = VectorDot(%dif, %objDir2D);
|
||||||
if (%dot >= mCos(1.05)) {
|
|
||||||
// Rear hit
|
// 120 Deg angle test...
|
||||||
if(%source.isAlive()) {
|
// 1.05 == 60 degrees in radians
|
||||||
|
if (%dot >= mCos(1.05)) {
|
||||||
|
// Rear hit
|
||||||
%source.applyRepair("0.45"); //we get a bonus repair for rear
|
%source.applyRepair("0.45"); //we get a bonus repair for rear
|
||||||
|
if(%source.team == %hitObj.team && !$TeamDamage) {
|
||||||
|
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
||||||
|
return; //stops shredding
|
||||||
|
}
|
||||||
|
%source.cannotuseBOV = 1;
|
||||||
|
if(!%hitObj.IsinvincibleC) {
|
||||||
|
DoBOVRearKill(%source, %hitObj, 0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if(%source.team == %hitObj.team && !$TeamDamage) {
|
|
||||||
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
|
||||||
return; //stops shredding
|
|
||||||
}
|
|
||||||
%source.cannotuseBOV = 1;
|
|
||||||
if(!%hitObj.IsinvincibleC) {
|
|
||||||
DoBOVRearKill(%source, %hitObj, 0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
||||||
//The Blade Only Works On Players
|
//The Blade Only Works On Players
|
||||||
%targetObject.damage(%projectile.sourceObject, %position, %data.directDamage, %data.directDamageType);
|
%targetObject.damage(%projectile.sourceObject, %position, %data.directDamage, %data.directDamageType);
|
||||||
if(%source.isAlive()) {
|
if(isObject(%source) || %source.getState() !$= "dead") {
|
||||||
%source.applyRepair("0.15"); //15%
|
%source.applyRepair("0.15"); //15%
|
||||||
}
|
}
|
||||||
if(%targetObject.client !$= "") { //a Player.. goodie
|
if(%targetObject.client !$= "") { //a Player.. goodie
|
||||||
if(%targetObject.getState() $= "dead") {
|
if(%targetObject.getState() $= "dead") {
|
||||||
MessageAll('MessageAll', "\c0"@%targetObject.client.namebase@" was stabbed by "@%source.client.namebase@"'s Sword.");
|
MessageAll('MessageAll', "\c0"@%targetObject.client.namebase@" was stabbed by "@%source.client.namebase@"'s Sword.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,110 @@ datablock AudioProfile(ShockLanceMissSound)
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Particle data
|
// Particle data
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
datablock ParticleData(ShockParticle)
|
||||||
|
{
|
||||||
|
dragCoeffiecient = 0.0;
|
||||||
|
gravityCoefficient = -0.0;
|
||||||
|
inheritedVelFactor = 0.0;
|
||||||
|
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
lifetimeVarianceMS = 0;
|
||||||
|
|
||||||
|
textureName = "particleTest";
|
||||||
|
|
||||||
|
useInvAlpha = false;
|
||||||
|
spinRandomMin = -100.0;
|
||||||
|
spinRandomMax = 100.0;
|
||||||
|
|
||||||
|
numParts = 50;
|
||||||
|
|
||||||
|
animateTexture = true;
|
||||||
|
framesPerSec = 26;
|
||||||
|
|
||||||
|
animTexName[00] = "special/Explosion/exp_0002";
|
||||||
|
animTexName[01] = "special/Explosion/exp_0004";
|
||||||
|
animTexName[02] = "special/Explosion/exp_0006";
|
||||||
|
animTexName[03] = "special/Explosion/exp_0008";
|
||||||
|
animTexName[04] = "special/Explosion/exp_0010";
|
||||||
|
animTexName[05] = "special/Explosion/exp_0012";
|
||||||
|
animTexName[06] = "special/Explosion/exp_0014";
|
||||||
|
animTexName[07] = "special/Explosion/exp_0016";
|
||||||
|
animTexName[08] = "special/Explosion/exp_0018";
|
||||||
|
animTexName[09] = "special/Explosion/exp_0020";
|
||||||
|
animTexName[10] = "special/Explosion/exp_0022";
|
||||||
|
animTexName[11] = "special/Explosion/exp_0024";
|
||||||
|
animTexName[12] = "special/Explosion/exp_0026";
|
||||||
|
animTexName[13] = "special/Explosion/exp_0028";
|
||||||
|
animTexName[14] = "special/Explosion/exp_0030";
|
||||||
|
animTexName[15] = "special/Explosion/exp_0032";
|
||||||
|
animTexName[16] = "special/Explosion/exp_0034";
|
||||||
|
animTexName[17] = "special/Explosion/exp_0036";
|
||||||
|
animTexName[18] = "special/Explosion/exp_0038";
|
||||||
|
animTexName[19] = "special/Explosion/exp_0040";
|
||||||
|
animTexName[20] = "special/Explosion/exp_0042";
|
||||||
|
animTexName[21] = "special/Explosion/exp_0044";
|
||||||
|
animTexName[22] = "special/Explosion/exp_0046";
|
||||||
|
animTexName[23] = "special/Explosion/exp_0048";
|
||||||
|
animTexName[24] = "special/Explosion/exp_0050";
|
||||||
|
animTexName[25] = "special/Explosion/exp_0052";
|
||||||
|
|
||||||
|
|
||||||
|
colors[0] = "0.5 0.5 1.0 1.0";
|
||||||
|
colors[1] = "0.5 0.5 1.0 0.5";
|
||||||
|
colors[2] = "0.25 0.25 1.0 0.0";
|
||||||
|
sizes[0] = 0.5;
|
||||||
|
sizes[1] = 0.5;
|
||||||
|
sizes[2] = 0.5;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.5;
|
||||||
|
times[2] = 1.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ParticleEmitterData(ShockParticleEmitter)
|
||||||
|
{
|
||||||
|
ejectionPeriodMS = 1;
|
||||||
|
periodVarianceMS = 0;
|
||||||
|
|
||||||
|
ejectionVelocity = 0.25;
|
||||||
|
velocityVariance = 0.0;
|
||||||
|
|
||||||
|
thetaMin = 0.0;
|
||||||
|
thetaMax = 30.0;
|
||||||
|
|
||||||
|
particles = "ShockParticle";
|
||||||
|
};
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
// Shockwave
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
datablock ShockwaveData( ShocklanceHit )
|
||||||
|
{
|
||||||
|
width = 0.5;
|
||||||
|
numSegments = 20;
|
||||||
|
numVertSegments = 1;
|
||||||
|
velocity = 0.25;
|
||||||
|
acceleration = 1.0;
|
||||||
|
lifetimeMS = 600;
|
||||||
|
height = 0.1;
|
||||||
|
verticalCurve = 0.5;
|
||||||
|
|
||||||
|
mapToTerrain = false;
|
||||||
|
renderBottom = false;
|
||||||
|
orientToNormal = true;
|
||||||
|
|
||||||
|
texture[0] = "special/shocklanceHit";
|
||||||
|
texture[1] = "special/gradient";
|
||||||
|
texWrap = 3.0;
|
||||||
|
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.5;
|
||||||
|
times[2] = 1.0;
|
||||||
|
|
||||||
|
colors[0] = "1.0 1.0 1.0 1.0";
|
||||||
|
colors[1] = "1.0 1.0 1.0 0.5";
|
||||||
|
colors[2] = "1.0 1.0 1.0 0.0";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
// Projectile
|
// Projectile
|
||||||
|
|
@ -86,6 +190,43 @@ datablock ShockLanceProjectileData(BasicShocker)
|
||||||
emitter[0] = ShockParticleEmitter;
|
emitter[0] = ShockParticleEmitter;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
datablock ShockLanceProjectileData(GoLShocker) {
|
||||||
|
directDamage = 0.45;
|
||||||
|
radiusDamageType = $DamageType::ShockLance;
|
||||||
|
kickBackStrength = 2500;
|
||||||
|
velInheritFactor = 0;
|
||||||
|
sound = "";
|
||||||
|
|
||||||
|
zapDuration = 1.0;
|
||||||
|
impulse = 1800;
|
||||||
|
boltLength = 50.0;
|
||||||
|
extension = 50.0; // script variable indicating distance you can shock people from
|
||||||
|
lightningFreq = 25.0;
|
||||||
|
lightningDensity = 3.0;
|
||||||
|
lightningAmp = 0.25;
|
||||||
|
lightningWidth = 0.05;
|
||||||
|
|
||||||
|
shockwave = ShocklanceHit;
|
||||||
|
|
||||||
|
boltSpeed[0] = 2.0;
|
||||||
|
boltSpeed[1] = -0.5;
|
||||||
|
|
||||||
|
texWrap[0] = 1.5;
|
||||||
|
texWrap[1] = 1.5;
|
||||||
|
|
||||||
|
startWidth[0] = 0.3;
|
||||||
|
endWidth[0] = 0.6;
|
||||||
|
startWidth[1] = 0.3;
|
||||||
|
endWidth[1] = 0.6;
|
||||||
|
|
||||||
|
texture[0] = "special/shockLightning01";
|
||||||
|
texture[1] = "special/shockLightning02";
|
||||||
|
texture[2] = "special/shockLightning03";
|
||||||
|
texture[3] = "special/ELFBeam";
|
||||||
|
|
||||||
|
emitter[0] = ShockParticleEmitter;
|
||||||
|
};
|
||||||
|
|
||||||
datablock ShockLanceProjectileData(S3Shocker) {
|
datablock ShockLanceProjectileData(S3Shocker) {
|
||||||
directDamage = 0.50;
|
directDamage = 0.50;
|
||||||
radiusDamageType = $DamageType::ShockLance;
|
radiusDamageType = $DamageType::ShockLance;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,11 @@ $TWM2::DisabledMissionTypes = ""; //Horde\tHorde4
|
||||||
|
|
||||||
$ScoreHudInventory::Active = 0; //0 returns the inv. hud to the normal one
|
$ScoreHudInventory::Active = 0; //0 returns the inv. hud to the normal one
|
||||||
|
|
||||||
|
//PGD Connect has been removed from www.phantomdev.net. I will restore it if mod
|
||||||
|
// support returns to it's original status, for the time being, this GVar will
|
||||||
|
// disable the PGD Connect stuff, allowing the mod to function without it.
|
||||||
|
$TWM2::PGDConnectDisabled = 1;
|
||||||
|
|
||||||
//CHAT BOT
|
//CHAT BOT
|
||||||
//Now you can control 'Cynthia', or whatever you wish on naming it
|
//Now you can control 'Cynthia', or whatever you wish on naming it
|
||||||
$ChatBot::Name = "Cynthia"; //The Name of the Bot
|
$ChatBot::Name = "Cynthia"; //The Name of the Bot
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue