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:
Robert Fritzen 2014-05-29 10:06:32 -05:00
parent 6864dee4f5
commit f950c4d026
23 changed files with 3858 additions and 514 deletions

View file

@ -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);

View file

@ -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";

View file

@ -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(){

View file

@ -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

View file

@ -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";

View file

@ -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;

View file

@ -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);
}
}

View file

@ -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";

View file

@ -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(){

View file

@ -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";

View file

@ -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 $= "")
if(%pos $= "") {
%pos = "0 0 300"; %pos = "0 0 300";
} if(%rotation $= "")
if(%rotation $= "") {
%rotation = "1 0 0 0"; %rotation = "1 0 0 0";
} if(%skill !$= "ace"){
if(%skill !$= "ace") { if(%skill $= "" || %skill < 1)
if(%skill $= "" || %skill < 1) { %skill = 10;
else if(%skill > 10)
%skill = 10; %skill = 10;
} }
else if(%skill > 10) { %Drone = new FlyingVehicle()
%skill = 10; {
}
}
%Drone = new FlyingVehicle() {
dataBlock = StormSeigeDrone; dataBlock = StormSeigeDrone;
position = %pos; position = %pos;
rotation = %rotation; rotation = %rotation;
@ -89,65 +78,90 @@ function UltraBossAbilities(%drone) {
} }
%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; dataBlock = LordRogStiloutte;
initialDirection = "0 0 10"; initialDirection = "0 0 10";
initialPosition = %SPos1; initialPosition = %SPos1;
sourceObject = %drone; sourceObject = %drone;
sourceSlot = 6; sourceSlot = 6;
}; };
%p2 = new SeekerProjectile() { %p2 = new SeekerProjectile()
{
dataBlock = LordRogStiloutte; dataBlock = LordRogStiloutte;
initialDirection = "0 0 10"; initialDirection = "0 0 10";
initialPosition = %SPos1; initialPosition = %SPos2;
sourceObject = %drone; sourceObject = %drone;
sourceSlot = 6; sourceSlot = 6;
}; };
MissionCleanup.add(%p1); MissionCleanup.add(%p1);
MissionCleanup.add(%p2); MissionCleanup.add(%p2);
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p1); schedule(1000,0,"MissileDrop",%p1, %target.player);
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p2); schedule(1000,0,"MissileDrop",%p2, %target.player);
MessageAll('MessageAll', "\c4Stormrider: Fire!"); MessageAll('MessageAll', "\c4Stormrider: Fire!");
} }
else { else {
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": No targets for me!"); 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 = getField(%dirs, %i); initialDirection = "5 0 0";
initialPosition = %SPos; initialPosition = %SPos;
sourceObject = %drone; sourceObject = %drone;
sourceSlot = 6; sourceSlot = 6;
}; };
MissionCleanup.add(%newMissile); %p2 = new SeekerProjectile()
schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %newMissile); {
} dataBlock = ShoulderMissile;
initialDirection = "-5 0 0";
initialPosition = %SPos;
sourceObject = %drone;
sourceSlot = 6;
};
%p3 = new SeekerProjectile()
{
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)@"!"); MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Have fun with these "@getTaggedString(%target.name)@"!");
} }
else { else {
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Bah, no targets, no fun."); MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Bah, no targets, no fun.");
} }
//3: IR Beam: A single enemy target gets locked on with a heat beam making missiles 100% accurate for a time period
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)@"!");
@ -155,159 +169,146 @@ function UltraBossAbilities(%drone) {
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);
} }
// Quick Shots
schedule(8000,0,"FireSniperShots",%drone, %target.player);
schedule(8100,0,"FireSniperShots",%drone, %target.player);
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)@"!"); MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Time to Use My CG, "@getTaggedString(%target.name)@"!");
} }
else { else {
MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": We'll see who can withstand the CG... Oh wait, there's nobody there."); MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, you fewls cant withstand this.");
} }
//8: Photon Seekers: Launch a wave of Photon Seekers to strike a single target
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);
}

View file

@ -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) {

View file

@ -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");

View file

@ -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++;
} }
// //

View file

@ -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");

View file

@ -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;

View file

@ -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@"");

View file

@ -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);

View file

@ -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);
} }

View file

@ -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,13 +157,14 @@ 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) {
@ -278,43 +293,56 @@ 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.mineModeTime = getSimTime(); %this.EditPMode++;
%this.EditPMode++; %this.EditSMode = 0; //Reset Secondary Mode TO Prevent Errors
%this.EditSMode = 0; //Reset Secondary Mode TO Prevent Errors if (%this.EditPMode > 4) {
if (%this.EditPMode > 4) { %this.EditPMode = 0;
%this.EditPMode = 0; }
} DispEditorToolInfo(%this);
DispEditorToolInfo(%this); return;
return; }
} else { //Secondary
else { //Secondary if (!(getSimTime() > (%this.grenadeModeTime + 100)))
if (!(getSimTime() > (%this.grenadeModeTime + 100))) { return;
return; %this.grenadeModeTime = getSimTime();
} %this.EditSMode++;
%this.grenadeModeTime = getSimTime(); //Check Primaries
%this.EditSMode++; if(%this.EditPMode == 0 && %this.EditSMode > 20) {
//Check Primaries %this.EditSMode = 0;
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 == 1 && %this.EditSMode > 20) { }
%this.EditSMode = 0; else if(%this.EditPMode == 2 && %this.EditSMode > 4) {
} %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 == 3 && %this.EditSMode > 3) { }
%this.EditSMode = 0; else if(%this.EditPMode == 4 && %this.EditSMode > 1) {
} %this.EditSMode = 0;
else if(%this.EditPMode == 4 && %this.EditSMode > 1) { }
%this.EditSMode = 0; DispEditorToolInfo(%this);
} return;
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);
} }
} }
@ -323,8 +351,8 @@ 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.");
@ -351,8 +379,8 @@ function EToolDeleting(%tobj,%plyr,%Mode) {
} }
// //
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.");
@ -387,8 +415,8 @@ 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.");

View file

@ -205,7 +205,9 @@ function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %posi
%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)) &&
(%hitObj.getDataBlock().getClassName() $= "PlayerData")) {
if(%hitObj.getDataBlock().getClassName() $= "PlayerData") { if(%hitObj.getDataBlock().getClassName() $= "PlayerData") {
// Now we see if we hit from behind... // Now we see if we hit from behind...
%forwardVec = %hitobj.getForwardVector(); %forwardVec = %hitobj.getForwardVector();
@ -215,13 +217,12 @@ function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %posi
%dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0"; %dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0";
%dif = VectorNormalize(%dif); %dif = VectorNormalize(%dif);
%dot = VectorDot(%dif, %objDir2D); %dot = VectorDot(%dif, %objDir2D);
// 120 Deg angle test... // 120 Deg angle test...
// 1.05 == 60 degrees in radians // 1.05 == 60 degrees in radians
if (%dot >= mCos(1.05)) { if (%dot >= mCos(1.05)) {
// Rear hit // Rear hit
if(%source.isAlive()) {
%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) { if(%source.team == %hitObj.team && !$TeamDamage) {
ServerPlay3d(BOVHitSound, %targetObject.getPosition()); ServerPlay3d(BOVHitSound, %targetObject.getPosition());
return; //stops shredding return; //stops shredding
@ -233,10 +234,11 @@ function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %posi
return; 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

View file

@ -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;

View file

@ -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