Oh boy, it begins.
Assigned all pickup models. Implemented all ammo types. Finished Flak Cannon. Additional cleanup. Slot reassignments and other adjustments to match known Unreal prototype info.
This commit is contained in:
parent
4bf3704b7b
commit
912cad96c5
71 changed files with 1949 additions and 73 deletions
|
|
@ -290,20 +290,25 @@ Class ViewASMDSpark : ShockSpark
|
|||
|
||||
Class ASMDHitbox : ShockHitbox
|
||||
{
|
||||
Default
|
||||
override void Tick()
|
||||
{
|
||||
Health 1;
|
||||
+SHOOTABLE;
|
||||
+NOBLOOD;
|
||||
}
|
||||
override void Die( Actor source, Actor inflictor, int dmgflags, Name MeansOfDeath )
|
||||
{
|
||||
if ( target && target.InStateSequence(target.CurState,target.FindState("Spawn")) )
|
||||
Super.Tick();
|
||||
if ( !target ) return;
|
||||
let t = ThinkerIterator.Create("ASMDHitbox");
|
||||
Actor a;
|
||||
while ( a = Actor(t.Next()) )
|
||||
{
|
||||
target.bAMBUSH = true;
|
||||
target.ExplodeMissile();
|
||||
if ( (a == self) || !(a is 'ASMDHitbox') || a.bAMBUSH || (Distance3D(a) > radius*2) ) continue;
|
||||
a.bAMBUSH = true;
|
||||
if ( a.target && a.target.InStateSequence(a.target.CurState,a.target.FindState("Spawn")) )
|
||||
a.target.ExplodeMissile();
|
||||
if ( !bAMBUSH )
|
||||
{
|
||||
bAMBUSH = true;
|
||||
if ( target && target.InStateSequence(target.CurState,target.FindState("Spawn")) )
|
||||
target.ExplodeMissile();
|
||||
}
|
||||
}
|
||||
Super.Die(source,inflictor,dmgflags,MeansOfDeath);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -534,6 +539,8 @@ Class ASMDBeam : Actor
|
|||
UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),10,-2,3,SWING_Spring,3,6);
|
||||
}
|
||||
let b = t.Results.HitActor.target;
|
||||
b.bAMBUSH = true;
|
||||
b.ExplodeMissile();
|
||||
b.pitch = 90;
|
||||
b.angle = 0;
|
||||
b.roll = 0;
|
||||
|
|
|
|||
|
|
@ -38,6 +38,11 @@ Class Automag : UnrealWeapon
|
|||
}
|
||||
return Super.HandlePickup(item);
|
||||
}
|
||||
override String PickupMessage()
|
||||
{
|
||||
if ( Owner ) return Super.PickupMessage();
|
||||
return StringTable.Localize("$I_AUTOMAG2");
|
||||
}
|
||||
override Inventory CreateTossable( int amt )
|
||||
{
|
||||
Inventory inv = Super.CreateTossable(amt);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,29 @@
|
|||
Class Betamag : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_BETAMAG";
|
||||
Inventory.Icon "I_ClipAm";
|
||||
Inventory.PickupMessage "$I_BETAMAG";
|
||||
Inventory.MaxAmount 1;
|
||||
Inventory.InterHubAmount 2;
|
||||
Weapon.UpSound "betamag/select";
|
||||
Weapon.SlotNumber 2;
|
||||
Weapon.SelectionOrder 1;
|
||||
Weapon.AmmoType "UMiniAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "UMiniAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 20;
|
||||
Weapon.Kickback 320;
|
||||
UTWeapon.DropAmmo 10;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
AUTP A -1;
|
||||
Stop;
|
||||
AUTP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,79 @@
|
|||
Class BigAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_BIGAMMO";
|
||||
Inventory.Icon "I_BigM";
|
||||
Inventory.PickupMessage "";
|
||||
Inventory.Amount 10;
|
||||
Inventory.MaxAmount 30;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 60;
|
||||
Ammo.DropAmount 10;
|
||||
Inventory.RespawnTics 2100;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
override String PickupMessage()
|
||||
{
|
||||
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
||||
return String.Format("%s%d%s",StringTable.Localize("$I_BIGAMMOL"),Amount,StringTable.Localize("$I_BIGAMMOR"));
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BIGA A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class BigAmmo2 : BigAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_BIGAMMO2";
|
||||
Inventory.Amount 3;
|
||||
Ammo.DropAmount 3;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
}
|
||||
|
||||
Class BigAmmo3 : BigAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_BIGAMMO3";
|
||||
Inventory.PickupMessage "$I_BIGAMMO3";
|
||||
Inventory.Amount 1;
|
||||
Ammo.DropAmount 1;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
}
|
||||
|
||||
Class BigGun : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_BIGGUN";
|
||||
Inventory.PickupMessage "$I_BIGGUN";
|
||||
Weapon.UpSound "big/select";
|
||||
Weapon.SlotNumber 0;
|
||||
Weapon.SelectionOrder 0;
|
||||
Weapon.AmmoType "BigAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "BigAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 10;
|
||||
Inventory.RespawnTics 2100;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
+WEAPON.NOAUTOFIRE;
|
||||
UTWeapon.DropAmmo 5;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BIGP A -1;
|
||||
Stop;
|
||||
BIGP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,22 @@
|
|||
Class Bonesaw : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_BONESAW";
|
||||
Inventory.PickupMessage "$I_BONESAW";
|
||||
Weapon.UpSound "bonesaw/select";
|
||||
Weapon.SlotNumber 1;
|
||||
Weapon.SelectionOrder 9;
|
||||
+WEAPON.MELEEWEAPON;
|
||||
+FORCEPAIN;
|
||||
+NOEXTREMEDEATH;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
CSWP A -1;
|
||||
Stop;
|
||||
CSWP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,19 +18,16 @@ Class WeaponPowerUp : Inventory
|
|||
damo.Amount = min(damo.MaxAmount,damo.Amount+10);
|
||||
}
|
||||
let dpis = DispersionPistol(toucher.FindInventory("DispersionPistol"));
|
||||
if ( dpis && (dpis.upgradelevel < 4) )
|
||||
if ( dpis && (dpis.pendingupgrade < 4) )
|
||||
{
|
||||
dpis.pendingupgrade++;
|
||||
if ( toucher.player && (toucher.player.ReadyWeapon == dpis) && (toucher.player.PendingWeapon == WP_NOCHANGE) )
|
||||
{
|
||||
dpis.upgradelevel++;
|
||||
let psp = toucher.player.FindPSprite(PSP_Weapon);
|
||||
psp.SetState(dpis.FindState("Upgrade"));
|
||||
}
|
||||
else
|
||||
{
|
||||
dpis.pendingupgrade = true;
|
||||
ScriptUtil.SetWeapon(toucher,"DispersionPistol");
|
||||
if ( toucher.player.WeaponState&WF_WEAPONREADY )
|
||||
psp.SetState(dpis.FindState("Upgrade"));
|
||||
}
|
||||
else ScriptUtil.SetWeapon(toucher,"DispersionPistol");
|
||||
}
|
||||
GoAwayAndDie();
|
||||
return true;
|
||||
|
|
@ -478,8 +475,7 @@ Class DispLight5 : EnforcerLight
|
|||
|
||||
Class DispersionPistol : UnrealWeapon
|
||||
{
|
||||
int upgradelevel;
|
||||
bool pendingupgrade;
|
||||
int upgradelevel, pendingupgrade;
|
||||
double chargesize, count;
|
||||
bool bCharging;
|
||||
int MainUse, ChargeUse;
|
||||
|
|
@ -725,12 +721,8 @@ Class DispersionPistol : UnrealWeapon
|
|||
Idle:
|
||||
#### # 0
|
||||
{
|
||||
if ( invoker.pendingupgrade )
|
||||
{
|
||||
invoker.pendingupgrade = false;
|
||||
invoker.upgradelevel++;
|
||||
if ( invoker.pendingupgrade > invoker.upgradelevel )
|
||||
return ResolveState("Upgrade");
|
||||
}
|
||||
A_Overlay(-9999,"Dummy");
|
||||
if ( invoker.upgradelevel == 0 ) return ResolveState("Idle1");
|
||||
else if ( invoker.upgradelevel == 1 ) return ResolveState("Idle2");
|
||||
|
|
@ -845,10 +837,11 @@ Class DispersionPistol : UnrealWeapon
|
|||
DPI5 A 6;
|
||||
Goto Idle;
|
||||
Upgrade:
|
||||
#### # 0
|
||||
#### # 1
|
||||
{
|
||||
A_Overlay(-9999,"Null");
|
||||
invoker.MainUse = min(6,invoker.upgradelevel+1);
|
||||
invoker.upgradelevel++;
|
||||
if ( invoker.upgradelevel == 0 ) return ResolveState("Idle");
|
||||
else if ( invoker.upgradelevel == 1 ) return ResolveState("Upgrade1");
|
||||
else if ( invoker.upgradelevel == 2 ) return ResolveState("Upgrade2");
|
||||
|
|
|
|||
|
|
@ -1,3 +1,25 @@
|
|||
Class FlameGun : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_FLAMEGUN";
|
||||
Inventory.PickupMessage "$I_FLAMEGUN";
|
||||
Weapon.UpSound "flamegun/select";
|
||||
Weapon.SlotNumber 5;
|
||||
Weapon.SelectionOrder 2;
|
||||
Weapon.AmmoType "FlameAmmo";
|
||||
Weapon.AmmoUse 10;
|
||||
Weapon.AmmoType2 "FlameAmmo";
|
||||
Weapon.AmmoUse2 20;
|
||||
Weapon.AmmoGive 100;
|
||||
UTWeapon.DropAmmo 25;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FGNP A -1;
|
||||
Stop;
|
||||
FGNP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,40 @@
|
|||
Class SMiniAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Icon "I_SMini";
|
||||
Inventory.Amount 4;
|
||||
Inventory.MaxAmount 16;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 32;
|
||||
}
|
||||
}
|
||||
|
||||
Class SMiniGun : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SMINI";
|
||||
Inventory.PickupMessage "$I_SMINI";
|
||||
Weapon.UpSound "smini/select";
|
||||
Weapon.SlotNumber 0;
|
||||
Weapon.SelectionOrder 1;
|
||||
Weapon.AmmoType "SMiniAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "SMiniAmmo";
|
||||
Weapon.AmmoUse2 4;
|
||||
Weapon.AmmoGive 8;
|
||||
Inventory.RespawnTics 2100;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
+WEAPON.NOAUTOFIRE;
|
||||
UTWeapon.DropAmmo 4;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SMIP A -1;
|
||||
Stop;
|
||||
SMIP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,73 @@
|
|||
Class ImpalerAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_IMPAMMO";
|
||||
Inventory.Icon "I_Impale";
|
||||
Inventory.PickupMessage "$T_IMPAMMO";
|
||||
Inventory.Amount 3;
|
||||
Inventory.MaxAmount 15;
|
||||
Ammo.BackpackAmount 3;
|
||||
Ammo.BackpackMaxAmount 30;
|
||||
Ammo.DropAmount 3;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
IAMO A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
Class ImpalerAmmo2 : ImpalerAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_IMPAMMO2";
|
||||
Inventory.PickupMessage "$T_IMPAMMO2";
|
||||
Inventory.Amount 1;
|
||||
Ammo.DropAmount 1;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
}
|
||||
|
||||
Class ImpalerCharge : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 100;
|
||||
Inventory.MaxAmount 100;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 100;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
}
|
||||
|
||||
Class Impaler : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_IMPALER";
|
||||
Inventory.PickupMessage "$I_IMPALER";
|
||||
Weapon.UpSound "impaler/select";
|
||||
Weapon.SlotNumber 7;
|
||||
Weapon.SelectionOrder 0;
|
||||
Weapon.AmmoType "ImpalerAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "ImpalerCharge";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive1 60;
|
||||
Weapon.AmmoGive2 0;
|
||||
UTWeapon.DropAmmo 30;
|
||||
+WEAPON.AMMO_OPTIONAL;
|
||||
+WEAPON.ALT_AMMO_OPTIONAL;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
IMPP A -1;
|
||||
Stop;
|
||||
IMPP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -708,14 +708,31 @@ Class BetaFlare : UnrealInventory
|
|||
if ( !sting_flares ) return false; // not allowed
|
||||
return Super.TryPickup(toucher);
|
||||
}
|
||||
Default
|
||||
{
|
||||
Inventory.MaxAmount 1;
|
||||
UnrealInventory.Charge 100;
|
||||
+INVENTORY.UNDROPPABLE;
|
||||
+INVENTORY.UNTOSSABLE;
|
||||
}
|
||||
}
|
||||
|
||||
Class LightFlare : BetaFlare
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_LFLARES";
|
||||
Inventory.Icon "I_FlarBL";
|
||||
}
|
||||
}
|
||||
|
||||
Class DarkFlare : BetaFlare
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_DFLARES";
|
||||
Inventory.Icon "I_FlarBD";
|
||||
}
|
||||
}
|
||||
|
||||
Class Dampener : UnrealInventory
|
||||
|
|
@ -907,16 +924,101 @@ Class ForcefieldEffect : Actor
|
|||
|
||||
Class UFlashlight : UnrealInventory
|
||||
{
|
||||
Actor lt[3];
|
||||
|
||||
Default
|
||||
{
|
||||
Tag "$T_FLASHLIGHT";
|
||||
Inventory.Icon "I_Flashl";
|
||||
Inventory.MaxAmount 3;
|
||||
Inventory.PickupMessage "$I_FLASHLIGHT";
|
||||
UnrealInventory.Charge 2800;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SLIT A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class USearchlight : UnrealInventory
|
||||
Class USearchlight : UFlashlight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SEARCHLIGHT";
|
||||
Inventory.Icon "I_BigFl";
|
||||
Inventory.MaxAmount 1;
|
||||
Inventory.PickupMessage "$I_SEARCHLIGHT";
|
||||
Inventory.RespawnTics 1050;
|
||||
UnrealInventory.Charge 70000;
|
||||
}
|
||||
}
|
||||
|
||||
Class SentryItem : UnrealInventory
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SENTRY";
|
||||
Inventory.Icon "I_Sentry";
|
||||
Inventory.MaxAmount 1;
|
||||
Inventory.PickupMessage "$I_SENTRY";
|
||||
Inventory.RespawnTics 1050;
|
||||
UnrealInventory.Charge 300;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SENT A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
// The "head" of the sentry, attaches to the body
|
||||
Class MinigunSentry : Actor
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SENT A 15;
|
||||
SENT A 0 A_PlaySound("sentry/raise");
|
||||
SENR ABCDEFGHIJKLMNO 3;
|
||||
Goto Idle;
|
||||
Idle:
|
||||
SENI A 1;
|
||||
Wait;
|
||||
Fire:
|
||||
SENW ABCDEFGHIJKLMNOPQR 1;
|
||||
Goto FireLoop;
|
||||
FireLoop:
|
||||
SENF ABCDEFGHIJKLMNOPQR 1;
|
||||
Loop;
|
||||
FireEnd:
|
||||
SENU ABCDEFGHIJKLMNOPQR 1;
|
||||
Goto Idle;
|
||||
}
|
||||
}
|
||||
|
||||
// The body of the sentry
|
||||
Class MinigunSentryBase : Actor
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SENT A 15;
|
||||
SENR ABCDEFGHIJKLMNO 3;
|
||||
Goto Idle;
|
||||
Idle:
|
||||
SENI A 1;
|
||||
Wait;
|
||||
Fire:
|
||||
SENW ABCDEFGHIJKLMNOPQR 1;
|
||||
Goto FireLoop;
|
||||
FireLoop:
|
||||
SENF ABCDEFGHIJKLMNOPQR 1;
|
||||
Loop;
|
||||
FireEnd:
|
||||
SENU ABCDEFGHIJKLMNOPQR 1;
|
||||
Goto Idle;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,50 @@
|
|||
Class FlameAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_FLAMEAMMO";
|
||||
Inventory.Icon "I_Napalm";
|
||||
Inventory.PickupMessage "$I_FLAMEAMMO";
|
||||
Inventory.Amount 75;
|
||||
Inventory.MaxAmount 450;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 900;
|
||||
Ammo.DropAmount 30;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FLMA A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class UFlamethrower : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_FLAMETHROWER";
|
||||
Inventory.PickupMessage "$I_FLAMETHROWER";
|
||||
Weapon.UpSound "flamet/select";
|
||||
Weapon.SlotNumber 6;
|
||||
Weapon.SelectionOrder 4;
|
||||
Weapon.AmmoType "FlameAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "FlameAmmo";
|
||||
Weapon.AmmoUse2 30;
|
||||
Weapon.AmmoGive 100;
|
||||
UTWeapon.DropAmmo 50;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FLMP A 1 A_JumpIf(sting_flamet,2);
|
||||
Wait;
|
||||
FLMP B 1 A_JumpIf(sting_flamet,2);
|
||||
Wait;
|
||||
OFLP A 1 A_JumpIf(!sting_flamet,"Spawn");
|
||||
Wait;
|
||||
OFLP B 1 A_JumpIf(!sting_flamet,"Spawn+1");
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,35 @@
|
|||
Class PeaceAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Icon "I_Peace";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 8;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 16;
|
||||
}
|
||||
}
|
||||
|
||||
Class Peacemaker : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_PEACE";
|
||||
Inventory.PickupMessage "$I_PEACE";
|
||||
Weapon.UpSound "peace/select";
|
||||
Weapon.SlotNumber 8;
|
||||
Weapon.SelectionOrder 1;
|
||||
Weapon.AmmoType "PeaceAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoGive 1;
|
||||
UTWeapon.DropAmmo 1;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PEAP A -1;
|
||||
Stop;
|
||||
PEAP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,63 @@
|
|||
Class UShells : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SHELLS";
|
||||
Inventory.Icon "I_ShotSh";
|
||||
Inventory.PickupMessage "";
|
||||
Inventory.Amount 12;
|
||||
Inventory.MaxAmount 60;
|
||||
Ammo.BackpackAmount 12;
|
||||
Ammo.BackpackMaxAmount 120;
|
||||
Ammo.DropAmount 6;
|
||||
}
|
||||
override String PickupMessage()
|
||||
{
|
||||
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
||||
return String.Format("%s%d%s",StringTable.Localize("$I_SHELLSL"),Amount,StringTable.Localize("$I_SHELLSR"));
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
QAMO A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class UShells2 : UShells
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SHELLS2";
|
||||
Inventory.Amount 4;
|
||||
Ammo.DropAmount 4;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadShot : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_QUADSHOT";
|
||||
Inventory.PickupMessage "$I_QUADSHOT";
|
||||
Weapon.UpSound "quadshot/select";
|
||||
Weapon.SlotNumber 3;
|
||||
Weapon.SelectionOrder 2;
|
||||
Weapon.AmmoType "UShells";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "UShells";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 20;
|
||||
Weapon.Kickback 320;
|
||||
UTWeapon.DropAmmo 10;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
QUAP A -1;
|
||||
Stop;
|
||||
QUAP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,51 @@
|
|||
Class RazorAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_RIPPERAMMO";
|
||||
Inventory.Icon "I_RazorA";
|
||||
Inventory.PickupMessage "$I_RIPPERAMMO";
|
||||
Inventory.Amount 25;
|
||||
Inventory.MaxAmount 75;
|
||||
Ammo.BackpackAmount 20;
|
||||
Ammo.BackpackMaxAmount 150;
|
||||
Ammo.DropAmount 15;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BHOP A 8 A_CheckProximity(1,"PlayerPawn",80,1,CPXF_ANCESTOR|CPXF_CHECKSIGHT);
|
||||
Wait;
|
||||
BHOP AA 16;
|
||||
BHOP B 8 A_CheckProximity(1,"PlayerPawn",80,0,CPXF_ANCESTOR|CPXF_CHECKSIGHT|CPXF_EXACT);
|
||||
Goto Spawn+3;
|
||||
BHOP BB 16;
|
||||
Goto Spawn;
|
||||
}
|
||||
}
|
||||
|
||||
Class Razorjack : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_RAZORJACK";
|
||||
Inventory.PickupMessage "$I_RAZORJACK";
|
||||
Weapon.UpSound "razorjack/select";
|
||||
Weapon.SlotNumber 7;
|
||||
Weapon.SelectionOrder 7;
|
||||
Weapon.AmmoType "RazorAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "RazorAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 15;
|
||||
UTWeapon.DropAmmo 10;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RZRP A -1;
|
||||
Stop;
|
||||
RZRP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,69 @@
|
|||
Class URifleAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_RIFLEAMMO";
|
||||
Inventory.PickupMessage "";
|
||||
Inventory.Amount 8;
|
||||
Inventory.MaxAmount 50;
|
||||
Ammo.BackpackAmount 12;
|
||||
Ammo.BackpackMaxAmount 100;
|
||||
Ammo.DropAmount 8;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
override String PickupMessage()
|
||||
{
|
||||
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
||||
return String.Format("%s%d%s",StringTable.Localize("$I_RIFLEAMMOL"),Amount,StringTable.Localize("$I_RIFLEAMMOR"));
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SBOX A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class URifleAmmo2 : URifleAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_RIFLEAMMO2";
|
||||
Inventory.PickupMessage "$I_RIFLEAMMO2";
|
||||
Inventory.Amount 1;
|
||||
Ammo.DropAmount 1;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SRND A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class URifle : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_RIFLE";
|
||||
Inventory.PickupMessage "$I_RIFLE";
|
||||
Weapon.UpSound "rifle/select";
|
||||
Weapon.SlotNumber 9;
|
||||
Weapon.SelectionOrder 9;
|
||||
Weapon.AmmoType "URifleAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "URifleAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 8;
|
||||
UTWeapon.DropAmmo 4;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SRFP A -1;
|
||||
Stop;
|
||||
SRFP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,50 @@
|
|||
Class StunnerAmmo : Ammo
|
||||
{
|
||||
double rechargephase, rechargespeed;
|
||||
|
||||
Default
|
||||
{
|
||||
Inventory.Icon "I_Stun";
|
||||
Inventory.Amount 10;
|
||||
Inventory.MaxAmount 50;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 50;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( !Owner ) return;
|
||||
if ( Amount < 10 ) rechargespeed = 1.1;
|
||||
else rechargespeed = 0.11*Amount;
|
||||
rechargephase += 1./rechargespeed;
|
||||
if ( rechargephase < 7 ) return;
|
||||
rechargephase = 0;
|
||||
Amount = min(Amount+1,MaxAmount);
|
||||
}
|
||||
}
|
||||
|
||||
Class Stunner : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_STUNNER";
|
||||
Inventory.PickupMessage "$I_STUNNER";
|
||||
Weapon.UpSound "stun/select";
|
||||
Weapon.SlotNumber 4;
|
||||
Weapon.SelectionOrder 9;
|
||||
Weapon.AmmoType "StunnerAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "StunnerAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 50;
|
||||
UTWeapon.DropAmmo 50;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
STNP A -1;
|
||||
Stop;
|
||||
STNP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,67 @@
|
|||
Class UBioAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SLUDGE";
|
||||
Inventory.Icon "I_Sludge";
|
||||
Inventory.PickupMessage "";
|
||||
Inventory.Amount 25;
|
||||
Inventory.MaxAmount 100;
|
||||
Ammo.BackpackAmount 50;
|
||||
Ammo.BackpackMaxAmount 200;
|
||||
Ammo.DropAmount 10;
|
||||
}
|
||||
override String PickupMessage()
|
||||
{
|
||||
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
||||
return String.Format("%s%d%s",StringTable.Localize("$I_SLUDGEL"),Amount,StringTable.Localize("$I_SLUDGER"));
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BIOA ABCDEFGHIJKLMNOPQRSTUVWYZ 1;
|
||||
BIA2 ABCD 1;
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class UBioAmmo2 : UBioAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SLUDGE2";
|
||||
Inventory.Amount 10;
|
||||
Ammo.DropAmount 5;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BIOA ABCDEFGHIJKL 2;
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
|
||||
Class UBioRifle : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_BIORIFLE";
|
||||
Inventory.PickupMessage "$I_BIORIFLE";
|
||||
Weapon.UpSound "ges/select";
|
||||
Weapon.SlotNumber 8;
|
||||
Weapon.SelectionOrder 8;
|
||||
Weapon.AmmoType "UBioAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "UBioAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 25;
|
||||
UTWeapon.DropAmmo 5;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
BIOP A -1;
|
||||
Stop;
|
||||
BIOP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,78 @@
|
|||
Class URocketAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_ROCKETCAN";
|
||||
Inventory.Icon "I_Rocket";
|
||||
Inventory.PickupMessage "";
|
||||
Inventory.Amount 12;
|
||||
Inventory.MaxAmount 48;
|
||||
Ammo.BackpackAmount 9;
|
||||
Ammo.BackpackMaxAmount 96;
|
||||
Ammo.DropAmount 6;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
override String PickupMessage()
|
||||
{
|
||||
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
||||
return String.Format("%s%d%s",StringTable.Localize("$I_ROCKETCANL"),Amount,StringTable.Localize("$I_ROCKETCANR"));
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RPAK A 8 A_CheckProximity(1,"PlayerPawn",80,1,CPXF_ANCESTOR|CPXF_CHECKSIGHT);
|
||||
Wait;
|
||||
RPAK AABCDEFGHIJ 8;
|
||||
RPAK J 8 A_CheckProximity(1,"PlayerPawn",80,0,CPXF_ANCESTOR|CPXF_CHECKSIGHT|CPXF_EXACT);
|
||||
Goto Spawn+12;
|
||||
RPAK JJIHGFEDCBA 8;
|
||||
Goto Spawn;
|
||||
}
|
||||
}
|
||||
Class URocketAmmo2 : URocketAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_ROCKETCAN2";
|
||||
Inventory.Amount 2;
|
||||
Ammo.DropAmount 2;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RCKT A 8 A_CheckProximity(1,"PlayerPawn",80,1,CPXF_ANCESTOR|CPXF_CHECKSIGHT);
|
||||
Wait;
|
||||
RCKT AA 8;
|
||||
RCKT B 8 A_CheckProximity(1,"PlayerPawn",80,0,CPXF_ANCESTOR|CPXF_CHECKSIGHT|CPXF_EXACT);
|
||||
Goto Spawn+3;
|
||||
RCKT BB 8;
|
||||
Goto Spawn;
|
||||
}
|
||||
}
|
||||
|
||||
Class Eightball : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_EIGHTBALL";
|
||||
Inventory.PickupMessage "$I_EIGHTBALL";
|
||||
Weapon.UpSound "eightball/select";
|
||||
Weapon.SlotNumber 5;
|
||||
Weapon.SelectionOrder 5;
|
||||
Weapon.AmmoType "URocketAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "URocketAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 6;
|
||||
UTWeapon.DropAmmo 3;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
EBLP A -1;
|
||||
Stop;
|
||||
EBLP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,139 @@ Class UFlakAmmo : UFlakBox
|
|||
}
|
||||
}
|
||||
|
||||
// subclass to save time, much of the behavior is the same anyway
|
||||
Class UFlakChunk : FlakChunk
|
||||
{
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Actor.PostBeginPlay();
|
||||
// no trail, spin much slower
|
||||
lifetime = 0;
|
||||
rollvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1);
|
||||
pitchvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1);
|
||||
yawvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1);
|
||||
scale *= Frandom[Flak](0.8,1.2);
|
||||
SetState(ResolveState("Spawn")+Random[Flak](0,3));
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
oldvel = vel;
|
||||
Actor.Tick();
|
||||
if ( isFrozen() ) return;
|
||||
// no slowing down in water, only set to falling
|
||||
if ( waterlevel > 0 )
|
||||
{
|
||||
bNOGRAVITY = false;
|
||||
bAMBUSH = true;
|
||||
}
|
||||
lifetime += lifespeed;
|
||||
// no frame changes, smoke based on speed + age
|
||||
if ( (waterlevel <= 0) && !bAMBUSH && !(GetAge()%2) )
|
||||
{
|
||||
let s = Spawn("UTSmoke",pos);
|
||||
s.vel = (FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1));
|
||||
s.alpha = (scale.x*clamp((120-GetAge())/120.+(vel.length()/20.),0.5,2.0))/0.5;
|
||||
s.SetShade("AAAAAA");
|
||||
}
|
||||
else if ( waterlevel > 0 )
|
||||
{
|
||||
let s = Spawn("UTBubble",pos);
|
||||
s.vel = (FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1));
|
||||
s.scale *= scale.x*0.5;
|
||||
}
|
||||
if ( InStateSequence(CurState,FindState("Death")) ) return;
|
||||
roll += rollvel;
|
||||
pitch += pitchvel;
|
||||
angle += pitchvel;
|
||||
}
|
||||
Default
|
||||
{
|
||||
DamageFunction 17; // exactly 1 point higher than UT
|
||||
Scale 0.5;
|
||||
}
|
||||
States
|
||||
{
|
||||
Bounce:
|
||||
#### # 0
|
||||
{
|
||||
A_HandleBounce();
|
||||
// override spin velocity changes from parent class
|
||||
rollvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1);
|
||||
pitchvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1);
|
||||
yawvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1);
|
||||
}
|
||||
Goto Idle;
|
||||
}
|
||||
}
|
||||
|
||||
// Also subclassed to save time, only the explosion needs to change
|
||||
Class UFlakSlug : FlakSlug
|
||||
{
|
||||
action void A_UFlakExplode()
|
||||
{
|
||||
bForceXYBillboard = true;
|
||||
A_SetRenderStyle(1.0,STYLE_Add);
|
||||
A_SprayDecal("RocketBlast",50);
|
||||
A_NoGravity();
|
||||
A_SetScale(1.2);
|
||||
UTMainHandler.DoBlast(self,120,75000);
|
||||
A_Explode(70,120);
|
||||
A_QuakeEx(4,4,4,8,0,170,"",QF_RELATIVE|QF_SCALEDOWN,falloff:120,rollIntensity:0.2);
|
||||
A_PlaySound("flak/explode",CHAN_VOICE);
|
||||
A_AlertMonsters();
|
||||
if ( !Tracer ) Spawn("SlugSmoke",pos);
|
||||
Spawn("SlugLight",pos);
|
||||
Vector3 x, y, z;
|
||||
double a, s;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Actor p;
|
||||
Vector3 spawnofs;
|
||||
if ( BlockingMobj ) spawnofs = level.Vec3Diff(pos,BlockingMobj.Vec3Offset(0,0,BlockingMobj.height/2)).unit()*8;
|
||||
else if ( BlockingFloor ) spawnofs = BlockingFloor.floorplane.Normal*8;
|
||||
else if ( BlockingCeiling ) spawnofs = BlockingCeiling.ceilingplane.Normal*8;
|
||||
else if ( BlockingLine )
|
||||
{
|
||||
spawnofs = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit()*8;
|
||||
if ( !BlockingLine.sidedef[1] || (CurSector == BlockingLine.frontsector) )
|
||||
spawnofs *= -1;
|
||||
}
|
||||
for ( int i=0; i<5; i++ )
|
||||
{
|
||||
p = Spawn("UFlakChunk",Vec3Offset(spawnofs.x,spawnofs.y,spawnofs.z));
|
||||
p.bHITOWNER = true;
|
||||
a = FRandom[Flak](0,360);
|
||||
s = FRandom[Flak](0,0.1);
|
||||
Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
|
||||
p.angle = atan2(dir.y,dir.x);
|
||||
p.pitch = -asin(dir.z);
|
||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*(p.speed+FRandom[Flak](-3,3));
|
||||
p.target = target;
|
||||
}
|
||||
int numpt = Random[Flak](8,12);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
Vector3 pvel = (FRandom[Flak](-1,1),FRandom[Flak](-1,1),FRandom[Flak](-1,1)).unit()*FRandom[Flak](2,8);
|
||||
let s = Spawn("UTSpark",pos);
|
||||
s.vel = pvel;
|
||||
}
|
||||
numpt = Random[Flak](15,30);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
Vector3 pvel = (FRandom[Flak](-1,1),FRandom[Flak](-1,1),FRandom[Flak](-1,1)).unit()*FRandom[Flak](6,16);
|
||||
let s = Spawn("UTChip",pos);
|
||||
s.vel = pvel;
|
||||
s.scale *= FRandom[Flak](0.9,1.8);
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Death:
|
||||
FEXP A 0 A_UFlakExplode();
|
||||
FEXP ABCDEFGHIJ 2 BRIGHT;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class UFlakCannon : UnrealWeapon
|
||||
{
|
||||
action void A_Loading( bool first = false )
|
||||
|
|
@ -65,6 +198,49 @@ Class UFlakCannon : UnrealWeapon
|
|||
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.3,-0.8),FRandom[Flak](-0.5,0.5)),4,-1.5,2,SWING_Spring,2,2);
|
||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||
Vector3 x, y, z;
|
||||
double a, s;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+5.0*y-4.0*z;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
|
||||
Vector3 offsets[8]; // vanilla adds these to each chunk
|
||||
offsets[0] = (0,0,0);
|
||||
offsets[1] = -z;
|
||||
offsets[2] = 2*y+z;
|
||||
offsets[3] = -y;
|
||||
offsets[4] = 2*y-z;
|
||||
offsets[5] = (0,0,0);
|
||||
offsets[6] = y-z;
|
||||
offsets[7] = 2*y+z;
|
||||
Actor p;
|
||||
for ( int i=0; i<8; i++ )
|
||||
{
|
||||
p = Spawn("UFlakChunk",level.Vec3Offset(origin,offsets[i]));
|
||||
a = FRandom[Flak](0,360);
|
||||
s = FRandom[Flak](0,0.1);
|
||||
Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
|
||||
p.angle = atan2(dir.y,dir.x);
|
||||
p.pitch = -asin(dir.z);
|
||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*(p.speed+FRandom[Flak](-3,3));
|
||||
p.target = self;
|
||||
}
|
||||
int numpt = Random[Flak](20,30);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("UTViewSpark",origin);
|
||||
UTViewSpark(s).ofs = (10,5,-4);
|
||||
UTViewSpark(s).vvel = (FRandom[Flak](3,12),FRandom[Flak](-4,4),FRandom[Flak](-4,4));
|
||||
s.target = self;
|
||||
}
|
||||
for ( int i=0; i<10; i++ )
|
||||
{
|
||||
let s = Spawn("UTViewSmoke",origin);
|
||||
UTViewSmoke(s).ofs = (10,5,-4);
|
||||
UTViewSmoke(s).vvel = (FRandom[Flak](0,1.2),FRandom[Flak](-.4,.4),FRandom[Flak](-.4,.4));
|
||||
s.target = self;
|
||||
s.scale *= 1.6;
|
||||
s.alpha *= 0.5;
|
||||
}
|
||||
}
|
||||
action void A_FireSlug()
|
||||
{
|
||||
|
|
@ -81,6 +257,32 @@ Class UFlakCannon : UnrealWeapon
|
|||
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.4,-0.8),FRandom[Flak](0.4,0.8)),4,-1,3,SWING_Spring,3,5);
|
||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||
A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
double a, s;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+5.0*y-4.0*z;
|
||||
Actor p = Spawn("UFlakSlug",origin);
|
||||
p.angle = angle;
|
||||
p.pitch = BulletSlope();
|
||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||
p.target = self;
|
||||
int numpt = Random[Flak](10,15);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("UTViewSpark",origin);
|
||||
UTViewSpark(s).ofs = (10,5,-4);
|
||||
UTViewSpark(s).vvel = (FRandom[Flak](3,12),FRandom[Flak](-4,4),FRandom[Flak](-4,4));
|
||||
s.target = self;
|
||||
}
|
||||
for ( int i=0; i<8; i++ )
|
||||
{
|
||||
let s = Spawn("UTViewSmoke",origin);
|
||||
UTViewSmoke(s).ofs = (10,5,-4);
|
||||
UTViewSmoke(s).vvel = (FRandom[Flak](0,1.2),FRandom[Flak](-.8,.8),FRandom[Flak](-.8,.8));
|
||||
s.target = self;
|
||||
s.scale *= 1.6;
|
||||
s.alpha *= 0.5;
|
||||
}
|
||||
}
|
||||
Default
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ Class UMiniAmmo : Ammo
|
|||
Default
|
||||
{
|
||||
Tag "$T_MINIAMMO";
|
||||
Inventory.Icon "I_ShellA";
|
||||
Inventory.PickupMessage "";
|
||||
Inventory.Amount 50;
|
||||
Inventory.MaxAmount 200;
|
||||
|
|
@ -15,8 +16,36 @@ Class UMiniAmmo : Ammo
|
|||
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
||||
return String.Format("%s%d%s",StringTable.Localize("$I_MINIAMMOL"),Amount,StringTable.Localize("$I_MINIAMMOR"));
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MAMO A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class UMinigun : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_MINIGUN";
|
||||
Inventory.PickupMessage "$I_MINIGUN";
|
||||
Weapon.UpSound "minigun/select";
|
||||
Weapon.SlotNumber 0;
|
||||
Weapon.SelectionOrder 10;
|
||||
Weapon.AmmoType "UMiniAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "UMiniAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 50;
|
||||
UTWeapon.DropAmmo 25;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MGNP A -1;
|
||||
Stop;
|
||||
MGNP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ Class UPlayer : UTPlayer
|
|||
{
|
||||
if ( !(AllActorClasses[i].GetParentClass() is "UnrealArmor") ) continue;
|
||||
let item = Inventory(Spawn(AllActorClasses[i]));
|
||||
item.ClearCounters(); // don't increase item counts
|
||||
if ( !item.CallTryPickup(self) ) item.Destroy();
|
||||
}
|
||||
if ( !giveall ) return;
|
||||
|
|
@ -735,21 +736,13 @@ Class UnrealMainHandler : EventHandler
|
|||
if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') )
|
||||
{
|
||||
if ( !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp';
|
||||
else switch ( Random[Replacements](0,3) )
|
||||
else if ( Random[Replacements](0,2) )
|
||||
{
|
||||
case 0:
|
||||
e.Replacement = 'Bonesaw';
|
||||
break;
|
||||
case 1:
|
||||
e.Replacement = 'Stunner';
|
||||
break;
|
||||
case 2:
|
||||
e.Replacement = 'Betamag';
|
||||
break;
|
||||
case 3:
|
||||
e.Replacement = 'Automag';
|
||||
break;
|
||||
if ( Random[Replacements](0,1) ) e.Replacement = 'Bonesaw';
|
||||
else e.Replacement = 'Stunner';
|
||||
}
|
||||
else if ( !Random[Replacements](0,2) ) e.Replacement = 'Betamag';
|
||||
else e.Replacement = 'Automag';
|
||||
}
|
||||
else if ( (e.Replacee == 'Fist') || (e.Replacee == 'Staff') ) e.Replacement = 'DispersionPistol';
|
||||
else if ( (e.Replacee == 'Pistol') || (e.Replacee == 'GoldWand') )
|
||||
|
|
@ -794,7 +787,7 @@ Class UnrealMainHandler : EventHandler
|
|||
}
|
||||
else if ( (e.Replacee == 'PlasmaRifle') || (e.Replacee == 'SkullRod') )
|
||||
{
|
||||
if ( !Random[Replacements](0,3) ) e.Replacement = 'Impaler';
|
||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'Impaler';
|
||||
else if ( Random[Replacements](0,1) ) e.Replacement = 'URifle';
|
||||
else e.Replacement = 'UBioRifle';
|
||||
}
|
||||
|
|
@ -868,7 +861,11 @@ Class UnrealMainHandler : EventHandler
|
|||
}
|
||||
else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') )
|
||||
{
|
||||
if ( !Random[Replacements](0,4) ) e.Replacement = 'BigAmmo2';
|
||||
if ( !Random[Replacements](0,4) )
|
||||
{
|
||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo2';
|
||||
else e.Replacement = 'BigAmmo3';
|
||||
}
|
||||
else if ( !Random[Replacements](0,3) )
|
||||
{
|
||||
if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
|
||||
|
|
@ -887,7 +884,11 @@ Class UnrealMainHandler : EventHandler
|
|||
}
|
||||
else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') )
|
||||
{
|
||||
if ( !Random[Replacements](0,4) ) e.Replacement = 'BigAmmo';
|
||||
if ( !Random[Replacements](0,4) )
|
||||
{
|
||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo';
|
||||
else e.Replacement = 'BigAmmo2';
|
||||
}
|
||||
else if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
|
||||
else if ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo';
|
||||
else e.Replacement = 'URifleAmmo';
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ Class UnrealHUD : BaseStatusBar
|
|||
Screen.DrawTexture(IconBase,false,CurX,CurY,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true);
|
||||
Screen.DrawTexture(i.Icon,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_TopOffset,0,DTA_LeftOffset,0);
|
||||
}
|
||||
if ( (i is 'UnrealInventory') && (UnrealInventory(i).DefaultCharge > 0) )
|
||||
if ( (i is 'UnrealInventory') && (UnrealInventory(i).DefaultCharge > 0) && (UnrealInventory(i).bActive || (UnrealInventory(i).Charge < UnrealInventory(i).DefaultCharge)) )
|
||||
Screen.DrawTexture(HudLine,false,CurX+2,CurY+29,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true,DTA_WindowRightF,Min(28.*(UnrealInventory(i).Charge/double(UnrealInventory(i).DefaultCharge)),28.));
|
||||
else if ( (i is 'UTArmor') && !HudMode )
|
||||
Screen.DrawTexture(HudLine,false,CurX+2,CurY+29,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true,DTA_WindowRightF,Min(28.*(i.Amount/double(i.MaxAmount)),28.));
|
||||
|
|
|
|||
|
|
@ -270,8 +270,41 @@ Class UJumpBoots : UnrealInventory
|
|||
|
||||
Class MotionDetector : UnrealInventory
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_DETECTOR";
|
||||
+COUNTITEM;
|
||||
+INVENTORY.BIGPOWERUP;
|
||||
+INVENTORY.ALWAYSPICKUP;
|
||||
Inventory.MaxAmount 1;
|
||||
Inventory.Icon "I_Detect";
|
||||
Inventory.PickupMessage "$I_DETECTOR";
|
||||
Inventory.RespawnTics 1050;
|
||||
UnrealInventory.Charge 3500;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MDET A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class SCUBAGear : UnrealInventory
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_SCUBA";
|
||||
Inventory.MaxAmount 1;
|
||||
Inventory.Icon "I_Scuba";
|
||||
Inventory.PickupMessage "$I_SCUBA";
|
||||
Inventory.RespawnTics 700;
|
||||
UnrealInventory.Charge 4200;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SCUB A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,14 @@
|
|||
Class UTranslocatorAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Icon "I_Tele";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 2;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 2;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
}
|
||||
|
||||
Class UTranslocator : UnrealWeapon
|
||||
|
|
@ -9,4 +18,27 @@ Class UTranslocator : UnrealWeapon
|
|||
if ( !sting_telegun ) return false; // not allowed
|
||||
return Super.TryPickup(toucher);
|
||||
}
|
||||
Default
|
||||
{
|
||||
Tag "$T_TELEGUN";
|
||||
Inventory.PickupMessage "$I_TELEGUN";
|
||||
Weapon.SlotNumber 9;
|
||||
Weapon.SelectionOrder 10;
|
||||
Weapon.AmmoType1 "UTranslocatorAmmo";
|
||||
Weapon.AmmoUse1 1;
|
||||
Weapon.AmmoType2 "UTranslocatorAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 2;
|
||||
UTWeapon.DropAmmo 2;
|
||||
+WEAPON.NO_AUTO_SWITCH;
|
||||
+WEAPON.CHEATNOTWEAPON;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TLCP A -1;
|
||||
Stop;
|
||||
TLCP B -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue