Accidentally implemented Demolisher.

Additional adjustments.
This commit is contained in:
Marisa the Magician 2019-09-18 03:41:49 +02:00
commit 6196e04160
28 changed files with 622 additions and 18 deletions

View file

@ -311,15 +311,17 @@ but that's a story for another time (and mod).
## Demolisher ## Demolisher
The signature handgun wielded by the Archangels, who lead the Bigman tribes The Demolisher is the crowning achievement of Bigman gunsmithing. Built with
living in the southern swamplands of Na Pali. Firing highly explosive, massive the finest metals available on Na Pali, and engineered with love for one and
bullets, this truly is a force to be reckoned with. only one thing: EXPLOSIONS.
Primary fire: Single explosive shot, high recoil. Primary fire: Single explosive shot, high recoil.
Secondary fire: Rapid fire. A puny little human like you stands no chance Secondary fire: Rapid fire. A puny little human like you stands no chance
against its recoil. against its recoil.
Magazine holds 4 shots.
## Autocannon ## Autocannon
A barely portable weapon. Usually these are mounted on ships, you know... A barely portable weapon. Usually these are mounted on ships, you know...

View file

@ -35,6 +35,7 @@ Doom Tournament (currently the devel branch is required).
- Dual Protomags - Dual Protomags
- Quadshot (slot 3) (replaces shotguns) - Quadshot (slot 3) (replaces shotguns)
- Peacemaker (slot 8) (rare spawn in backpacks) - Peacemaker (slot 8) (rare spawn in backpacks)
- Demolisher (slot 9) (replaces bfg9000)
- Backpack (replaces backpack, identical to Doom Tournament version) - Backpack (replaces backpack, identical to Doom Tournament version)
- Unreal 1 HUD - Unreal 1 HUD
- Translator (has to be spawned in, since it would only be useful for mappers) - Translator (has to be spawned in, since it would only be useful for mappers)
@ -72,7 +73,6 @@ Doom Tournament (currently the devel branch is required).
- Fireblaster (slot 5) (replaces rocket launcher) - Fireblaster (slot 5) (replaces rocket launcher)
- Flamethrower (slot 6) (replaces plasma rifle) - Flamethrower (slot 6) (replaces plasma rifle)
- Impaler (slot 7) (replaces plasma rifle) - Impaler (slot 7) (replaces plasma rifle)
- Demolisher (slot 9) (replaces bfg9000)
- Autocannon (slot 0) (replaces bfg9000) - Autocannon (slot 0) (replaces bfg9000)
## Planned ## Planned

View file

@ -87,5 +87,3 @@ server bool sting_bhold = false; // biorifle can be held fully loaded
server bool sting_razoraim = false; // razorjack alt follows aim instead of server bool sting_razoraim = false; // razorjack alt follows aim instead of
// being steered by player rotation // being steered by player rotation
server bool sting_biosplash = false; // biorifle alt splashes like in ut server bool sting_biosplash = false; // biorifle alt splashes like in ut
server bool sting_impalerauto = false; // impaler reloads automatically after
// primary fire

View file

@ -20,7 +20,6 @@ Model "UCasing"
ZOffset 1 ZOffset 1
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
DONTCULLBACKFACES
USEROTATIONCENTER USEROTATIONCENTER
Rotation-Center 0 0 1 Rotation-Center 0 0 1

View file

@ -25,7 +25,6 @@ Model "BCasing"
ZOffset 1 ZOffset 1
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
DONTCULLBACKFACES
USEROTATIONCENTER USEROTATIONCENTER
Rotation-Center 0 0 1 Rotation-Center 0 0 1
@ -42,7 +41,6 @@ Model "BCasing2"
ZOffset 1 ZOffset 1
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
DONTCULLBACKFACES
USEROTATIONCENTER USEROTATIONCENTER
Rotation-Center 0 0 1 Rotation-Center 0 0 1

View file

@ -27,6 +27,30 @@ Model "BigAmmo3"
FrameIndex BIGA A 0 0 FrameIndex BIGA A 0 0
} }
Model "FatRing"
{
Path "models"
Model 0 "FatRing_d.3d"
Skin 0 "JRingEx1.png"
PitchOffset 90
Scale 1.2 1.0 1.0
DONTCULLBACKFACES
USEACTORPITCH
USEACTORROLL
FrameIndex FATR A 0 0
FrameIndex FATR B 0 1
FrameIndex FATR C 0 2
FrameIndex FATR D 0 3
FrameIndex FATR E 0 4
FrameIndex FATR F 0 5
FrameIndex FATR G 0 6
FrameIndex FATR H 0 7
FrameIndex FATR I 0 8
FrameIndex FATR J 0 9
FrameIndex FATR K 0 10
}
Model "BigGun" Model "BigGun"
{ {
Path "models" Path "models"
@ -42,3 +66,194 @@ Model "BigGun"
ROTATING ROTATING
FrameIndex BIGP A 1 0 FrameIndex BIGP A 1 0
} }
Model "BigCasing"
{
Path "models"
Model 0 "BigGShellC_d.3d"
Skin 0 "Jclip1.png"
Scale 0.12 0.1 0.1
PitchOffset 90
Offset 3 0 2
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 2
FrameIndex PCAS A 0 0
}
Model "BigGun"
{
Path "models"
Model 2 "Flat_d.3d"
Skin 2 "BigMuz.png"
AngleOffset 90
PitchOffset 90
Scale 0.2 0.2 0.2
Offset 25 -60 -5
FrameIndex BGMF A 2 0
}
Model "BigGun"
{
Path "models"
Model 0 "BigGun_d.3d"
SurfaceSkin 0 0 "JBigGun1.png"
SurfaceSkin 0 1 "Automa1.png"
AngleOffset -85
Scale 0.2 -0.1 0.2
Offset 7 -10 -3
// Still
FrameIndex BIGI A 0 0
// Down
FrameIndex BIGD A 0 1
FrameIndex BIGD B 0 2
FrameIndex BIGD C 0 3
FrameIndex BIGD D 0 4
FrameIndex BIGD E 0 5
FrameIndex BIGD F 0 6
FrameIndex BIGD G 0 7
FrameIndex BIGD H 0 8
FrameIndex BIGD I 0 9
FrameIndex BIGD J 0 10
FrameIndex BIGD K 0 11
// Select
FrameIndex BIGS A 0 11
FrameIndex BIGS B 0 12
FrameIndex BIGS C 0 13
FrameIndex BIGS D 0 14
FrameIndex BIGS E 0 15
FrameIndex BIGS F 0 16
FrameIndex BIGS G 0 17
FrameIndex BIGS H 0 18
FrameIndex BIGS I 0 19
// Twiddle1
FrameIndex BIGW A 0 20
FrameIndex BIGW B 0 21
FrameIndex BIGW C 0 22
FrameIndex BIGW D 0 23
FrameIndex BIGW E 0 24
FrameIndex BIGW F 0 25
FrameIndex BIGW G 0 26
FrameIndex BIGW H 0 27
FrameIndex BIGW I 0 28
FrameIndex BIGW J 0 29
FrameIndex BIGW K 0 30
FrameIndex BIGW L 0 31
FrameIndex BIGW M 0 32
FrameIndex BIGW N 0 33
FrameIndex BIGW O 0 34
// Twiddle2
FrameIndex BIGT A 0 35
FrameIndex BIGT B 0 36
FrameIndex BIGT C 0 37
FrameIndex BIGT D 0 38
FrameIndex BIGT E 0 39
FrameIndex BIGT F 0 40
FrameIndex BIGT G 0 41
FrameIndex BIGT H 0 42
FrameIndex BIGT I 0 43
FrameIndex BIGT J 0 44
FrameIndex BIGT K 0 45
FrameIndex BIGT L 0 46
FrameIndex BIGT M 0 47
FrameIndex BIGT N 0 48
FrameIndex BIGT O 0 49
FrameIndex BIGT P 0 50
FrameIndex BIGT Q 0 51
FrameIndex BIGT R 0 52
FrameIndex BIGT S 0 53
FrameIndex BIGT T 0 54
FrameIndex BIGT U 0 55
FrameIndex BIGT V 0 56
FrameIndex BIGT W 0 57
FrameIndex BIGT X 0 58
FrameIndex BIGT Y 0 59
// PreFire
FrameIndex BIGF A 0 60
FrameIndex BIGF B 0 61
// Fire
FrameIndex BIGF C 0 62
FrameIndex BIGF D 0 63
FrameIndex BIGF E 0 64
FrameIndex BIGF F 0 65
FrameIndex BIGF G 0 66
FrameIndex BIGF H 0 67
FrameIndex BIGF I 0 68
FrameIndex BIGF J 0 69
FrameIndex BIGF K 0 70
FrameIndex BIGF L 0 71
// EndFire
FrameIndex BIGF M 0 72
FrameIndex BIGF N 0 73
FrameIndex BIGF O 0 74
FrameIndex BIGF P 0 75
// Reload
FrameIndex BIGR A 0 76
FrameIndex BIGR B 0 77
FrameIndex BIGR C 0 78
FrameIndex BIGR D 0 79
FrameIndex BIGR E 0 80
FrameIndex BIGR F 0 81
FrameIndex BIGR G 0 82
FrameIndex BIGR H 0 83
FrameIndex BIGR I 0 84
FrameIndex BIGR J 0 85
FrameIndex BIGR K 0 86
FrameIndex BIGR L 0 87
FrameIndex BIGR M 0 88 // punch
FrameIndex BIGR N 0 89
FrameIndex BIGR O 0 90
FrameIndex BIGR P 0 91
FrameIndex BIGR Q 0 92
FrameIndex BIGR R 0 93
FrameIndex BIGR S 0 94
FrameIndex BIGR T 0 95
FrameIndex BIGR U 0 96
FrameIndex BIGR V 0 97
FrameIndex BIGR W 0 98
FrameIndex BIGR X 0 99 // drop
FrameIndex BIGR Y 0 100
FrameIndex BIGR Z 0 101
FrameIndex BIGR [ 0 102
FrameIndex BIGR \ 0 103
FrameIndex BIGR ] 0 104
FrameIndex BIR2 A 0 105
FrameIndex BIR2 B 0 106
FrameIndex BIR2 C 0 107
FrameIndex BIR2 D 0 108
FrameIndex BIR2 E 0 109
FrameIndex BIR2 F 0 110
FrameIndex BIR2 G 0 111 // load
FrameIndex BIR2 H 0 112
FrameIndex BIR2 I 0 113
FrameIndex BIR2 J 0 114
FrameIndex BIR2 K 0 115
FrameIndex BIR2 L 0 116
FrameIndex BIR2 M 0 117
FrameIndex BIR2 N 0 118
FrameIndex BIR2 O 0 119
FrameIndex BIR2 P 0 120 // reselect
FrameIndex BIR2 Q 0 121
FrameIndex BIR2 R 0 122
FrameIndex BIR2 S 0 123
FrameIndex BIR2 T 0 124
FrameIndex BIR2 U 0 125
FrameIndex BIR2 V 0 126
FrameIndex BIR2 W 0 127
FrameIndex BIR2 X 0 128
FrameIndex BIR2 Y 0 129
FrameIndex BIR2 Z 0 130
FrameIndex BIR2 [ 0 131
FrameIndex BIR2 \ 0 132
FrameIndex BIR2 ] 0 133
FrameIndex BIR3 A 0 134
FrameIndex BIR3 B 0 135
FrameIndex BIR3 C 0 136
FrameIndex BIR3 D 0 137
FrameIndex BIR3 E 0 138
FrameIndex BIR3 F 0 139
}

View file

@ -32,7 +32,6 @@ Model "QCasing"
ZOffset 1 ZOffset 1
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
DONTCULLBACKFACES
USEROTATIONCENTER USEROTATIONCENTER
Rotation-Center 0 0 1 Rotation-Center 0 0 1

BIN
models/BigGMag_a.3d Normal file

Binary file not shown.

BIN
models/BigGMag_d.3d Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
models/FatRing_a.3d Normal file

Binary file not shown.

BIN
models/FatRing_d.3d Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Before After
Before After

BIN
models/JRingex1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -284,6 +284,14 @@ impaler/altfire impboltl
impaler/hit imphit impaler/hit imphit
impaler/beam ele04 impaler/beam ele04
big/select bigmsel
big/fire bigmfire
big/dry bigmdryf
big/punch bigmejct
big/reload bigmrelo
big/shell bigmshel
big/blast bigmhit
translator/event transa3 translator/event transa3
detector/start detact detector/start detact

BIN
sounds/BigMDryF.ogg Normal file

Binary file not shown.

BIN
sounds/BigMEjct.ogg Normal file

Binary file not shown.

BIN
sounds/BigMRelo.ogg Normal file

Binary file not shown.

Binary file not shown.

View file

@ -1,3 +1,4 @@
Sprite "BIGAA0",1,1{} Sprite "BIGAA0",1,1{}
Sprite "BIGPA0",1,1{} Sprite "BIGPA0",1,1{}
Sprite "BIGSA0",1,1{} Sprite "BIGSA0",1,1{}
Sprite "FATRA0",1,1{}

View file

@ -6,9 +6,9 @@ Class BigAmmo : Ammo
Inventory.Icon "I_BigM"; Inventory.Icon "I_BigM";
Inventory.PickupMessage ""; Inventory.PickupMessage "";
Inventory.Amount 10; Inventory.Amount 10;
Inventory.MaxAmount 30; Inventory.MaxAmount 12;
Ammo.BackpackAmount 0; Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 60; Ammo.BackpackMaxAmount 24;
Ammo.DropAmount 10; Ammo.DropAmount 10;
Inventory.RespawnTics 2100; Inventory.RespawnTics 2100;
+INVENTORY.IGNORESKILL; +INVENTORY.IGNORESKILL;
@ -90,8 +90,88 @@ Class BigAmmo3 : BigAmmo
} }
} }
Class FatRing : Actor
{
Default
{
RenderStyle "Add";
+NOGRAVITY;
+NOBLOCKMAP;
}
override void Tick()
{
Super.Tick();
if ( isFrozen() ) return;
A_FadeOut(1/21.,0);
}
States
{
Spawn:
FATR ABCDEFGHIJK 2 Bright;
Stop;
}
}
Class BigBlast : Actor Class BigBlast : Actor
{ {
Default
{
RenderStyle "Add";
DamageType 'BigShot';
Scale 2.;
+NOGRAVITY;
+NOBLOCKMAP;
+NODAMAGETHRUST;
+FORCERADIUSDMG;
+FORCEXYBILLBOARD;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
A_Explode(200,250);
A_QuakeEx(4,4,4,10,0,400,"",QF_RELATIVE|QF_SCALEDOWN,falloff:200,rollintensity:0.2);
A_PlaySound("big/blast",CHAN_VOICE,pitch:FRandom[BigGun](0.8,1.2));
UTMainHandler.DoBlast(self,250,80000);
let r = Spawn("FatRing",pos);
r.angle = angle;
r.pitch = pitch;
r.roll = FRandom[ExploS](0,360);
r.scale *= FRandom[ExploS](0.8,1.1);
Scale *= FRandom[ExploS](0.8,1.1);
Scale.x *= RandomPick[ExploS](-1,1);
Scale.y *= RandomPick[ExploS](-1,1);
int numpt = Random[ExploS](30,40);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,4);
let s = Spawn("UTSmoke",pos);
s.vel = pvel;
s.scale *= FRandom[ExploS](0.9,4.0);
s.SetShade(Color(1,1,1)*Random[ExploS](128,255));
}
numpt = Random[ExploS](20,25);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](2,6);
let s = Spawn("UTSpark",pos);
s.vel = pvel;
}
numpt = Random[ExploS](30,40);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](2,12);
let s = Spawn("UTChip",pos);
s.vel = pvel;
s.scale *= FRandom[ExploS](0.9,2.7);
}
Spawn("FlareXLight",pos);
}
States
{
Spawn:
BGXP ABCDEFGH 4 Bright;
Stop;
}
} }
Class HitListEntry Class HitListEntry
@ -103,20 +183,54 @@ Class HitListEntry
Class BigTracer : LineTracer Class BigTracer : LineTracer
{ {
Actor ignoreme;
Array<HitListEntry> hitlist; Array<HitListEntry> hitlist;
double penetration; // please don't laugh double penetration; // please don't laugh
override ETraceStatus TraceCallback()
{
if ( Results.HitType == TRACE_HitActor )
{
if ( Results.HitActor == ignoreme ) return TRACE_Skip;
if ( Results.HitActor.bSHOOTABLE )
{
let ent = new("HitListEntry");
ent.hitactor = Results.HitActor;
ent.hitlocation = Results.HitPos;
ent.x = Results.HitVector;
ent.hitdamage = min(Results.HitActor.health,int(penetration));
hitlist.Push(ent);
penetration -= ent.hitdamage*.3;
if ( penetration <= 0 ) return TRACE_Abort;
return TRACE_Skip;
}
return TRACE_Skip;
}
else if ( (Results.HitType == TRACE_HitWall) && (Results.Tier == TIER_Middle) )
{
if ( !Results.HitLine.sidedef[1] || (Results.HitLine.Flags&(Line.ML_BlockHitscan|Line.ML_BlockEverything)) )
return TRACE_Stop;
return TRACE_Skip;
}
return TRACE_Stop;
}
} }
Class BigCasing : UTCasing Class BigCasing : UTCasing
{ {
Default Default
{ {
BounceSound "big/bounce"; // much heavier sound BounceSound "big/shell"; // much heavier sound
} }
} }
Class BigGun : UnrealWeapon Class BigGun : UnrealWeapon
{ {
int ClipCount;
BigTracer t;
property ClipCount : ClipCount;
override bool TryPickup( in out Actor toucher ) override bool TryPickup( in out Actor toucher )
{ {
if ( !sting_dubious ) return false; // not allowed if ( !sting_dubious ) return false; // not allowed
@ -158,9 +272,128 @@ Class BigGun : UnrealWeapon
Destroy(); Destroy();
} }
} }
override int, int, bool, bool GetClipAmount()
{
return ClipCount, -1, (ClipCount<2), false;
}
override bool CheckAmmo( int fireMode, bool autoSwitch, bool requireAmmo, int ammocount )
{
if ( ClipCount > 0 ) return true;
return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount);
}
action void A_Eject()
{
Vector3 x, y, z;
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),4*x+y*12-z*4);
let c = Spawn("BigCasing",origin);
c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](-1,2);
}
action void A_BigFire( bool bAlt = false )
{
Weapon weap = Weapon(invoker);
if ( !weap ) return;
if ( invoker.clipcount <= 0 ) return;
invoker.clipcount--;
A_PlaySound("big/fire",CHAN_WEAPON);
A_AlertMonsters();
A_Overlay(-2,"MuzzleFlash");
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderstyle(-2,STYLE_Add);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(32,255,128,0),1);
A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollintensity:0.12);
for ( int i=0; i<6; i++ )
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.04,-0.2),FRandom[BigGun](-0.2,0.2)),FRandom[BigGun](6,9),FRandom[BigGun](-0.2,0.8),Random[BigGun](2,4),SWING_Spring,Random[BigGun](3,6),FRandom[BigGun](1.5,2.3));
Vector3 x, y, z, x2, y2, z2;
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
vel -= x*(player.onground?9.5:2.5);
vel.z += (player.onground?2.8:.25);
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+y*5-z*1);
[x2, y2, z2] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
double a = FRandom[BigGun](0,360), s = FRandom[BigGun](0,bAlt?0.2:0.05);
Vector3 dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
if ( !invoker.t ) invoker.t = new("BigTracer");
invoker.t.ignoreme = self;
invoker.t.hitlist.Clear();
invoker.t.penetration = 1000.;
invoker.t.Trace(origin,level.PointInSector(origin.xy),dir,10000.,0);
for ( int i=0; i<invoker.t.hitlist.Size(); i++ )
{
let l = invoker.t.hitlist[i];
l.hitactor.DamageMobj(invoker,self,l.hitdamage,'BigShot',DMG_THRUSTLESS);
UTMainHandler.DoKnockback(l.hitactor,l.x,90000.);
let b = Spawn("BigBlast",l.hitlocation-l.x*8.);
b.angle = atan2(l.x.y,l.x.x);
b.pitch = asin(-l.x.z);
}
if ( invoker.t.Results.HitType != TRACE_HitNone )
{
Vector3 hitnormal = -invoker.t.Results.HitVector;
if ( invoker.t.Results.HitType == TRACE_HitFloor )
{
if ( invoker.t.Results.FFloor ) hitnormal = -invoker.t.Results.FFloor.top.Normal;
else hitnormal = invoker.t.Results.HitSector.floorplane.Normal;
}
else if ( invoker.t.Results.HitType == TRACE_HitCeiling )
{
if ( invoker.t.Results.FFloor ) hitnormal = -invoker.t.Results.FFloor.bottom.Normal;
else hitnormal = invoker.t.Results.HitSector.ceilingplane.Normal;
}
else if ( invoker.t.Results.HitType == TRACE_HitWall )
{
hitnormal = (-invoker.t.Results.HitLine.delta.y,invoker.t.Results.HitLine.delta.x,0).unit();
if ( !invoker.t.Results.Side ) hitnormal *= -1;
}
let b = Spawn("BigBlast",invoker.t.Results.HitPos+hitnormal*8.);
b.angle = atan2(hitnormal.y,hitnormal.x);
b.pitch = asin(-hitnormal.z);
if ( invoker.t.Results.HitLine ) invoker.t.Results.HitLine.RemoteActivate(self,invoker.t.Results.Side,SPAC_Impact,invoker.t.Results.HitPos);
}
int numpt = 50;
for ( int i=0; i<numpt; i++ )
{
let s = Spawn("UTStaticViewSmoke",origin);
UTViewSmoke(s).ofs = (10,5,-1);
UTViewSmoke(s).vvel += (FRandom[BigGun](-0.05,0.5),FRandom[BigGun](-0.3,0.3),FRandom[BigGun](-0.3,0.3));
s.target = self;
s.scale *= 1.5;
s.alpha *= 0.6;
}
}
action void A_BigRefire( statelabel flash = null )
{
Weapon weap = Weapon(invoker);
if ( !weap || !player ) return;
if ( invoker.clipcount <= 0 )
{
A_ClearRefire();
return;
}
A_Refire(flash);
}
action bool A_BigCheckForReload( bool bDryFire = false )
{
let weap = Weapon(invoker);
if ( invoker.clipcount <= 0 )
{
if ( weap.Ammo1.Amount > 0 )
{
player.SetPSprite(PSP_WEAPON,invoker.FindState("Reload"));
return true;
}
else if ( bDryFire )
{
player.SetPSprite(PSP_WEAPON,invoker.FindState("DryFire"));
return true;
}
}
return false;
}
Default Default
{ {
Tag "$T_BIGGUN"; Tag "$T_BIGGUN";
Obituary "$O_BIGGUN";
Inventory.PickupMessage "$I_BIGGUN"; Inventory.PickupMessage "$I_BIGGUN";
Weapon.UpSound "big/select"; Weapon.UpSound "big/select";
Weapon.SlotNumber 9; Weapon.SlotNumber 9;
@ -170,11 +403,12 @@ Class BigGun : UnrealWeapon
Weapon.AmmoUse 1; Weapon.AmmoUse 1;
Weapon.AmmoType2 "BigAmmo"; Weapon.AmmoType2 "BigAmmo";
Weapon.AmmoUse2 1; Weapon.AmmoUse2 1;
Weapon.AmmoGive 10; Weapon.AmmoGive 4;
Inventory.RespawnTics 2100; Inventory.RespawnTics 2100;
+INVENTORY.IGNORESKILL; +INVENTORY.IGNORESKILL;
+WEAPON.NOAUTOFIRE; UTWeapon.DropAmmo 4;
UTWeapon.DropAmmo 5; BigGun.ClipCount 4;
+EXTREMEDEATH;
} }
States States
{ {
@ -183,5 +417,156 @@ Class BigGun : UnrealWeapon
Stop; Stop;
BIGP B -1; BIGP B -1;
Stop; Stop;
Select:
BIGS A 1 A_Raise(int.max);
Wait;
Ready:
BIGS A 0
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.3,-0.2),FRandom[BigGun](0.4,0.5)),3,0,6,SWING_Spring,2,1.8);
}
BIGS ABC 2 A_WeaponReady(WRF_NOFIRE);
BIGS D 0
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.2,0.3),FRandom[BigGun](-0.8,-1.2)),3,0,6,SWING_Spring,2,2.0);
}
BIGS DEFGHI 2 A_WeaponReady(WRF_NOFIRE);
Goto Idle;
Dummy:
TNT1 A 1
{
A_CheckReload();
if ( !A_BigCheckForReload() )
{
if ( (invoker.clipCount < invoker.default.clipcount) && (invoker.Ammo1.Amount > 0) )
A_WeaponReady(WRF_ALLOWRELOAD);
else A_WeaponReady();
}
} Wait;
Idle:
BIGI A 0 A_Overlay(-9999,"Dummy");
BIGI A 20 A_Jump(80,"Twiddle1","Twiddle1","Twiddle2");
Wait;
Twiddle1:
BIGW A 3
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.2,-0.3),FRandom[BigGun](0.2,0.3)),2,0,12,SWING_Spring,5,2);
}
BIGW BCDEFGHIJKLMNO 3;
Goto Idle;
Twiddle2:
BIGT A 2
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.2,-0.3),FRandom[BigGun](0.2,0.3)),3,0,6,SWING_Spring,5,2);
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.2,-0.3),FRandom[BigGun](-0.4,-0.6)),4,0,12,SWING_Spring,6,1.4);
}
BIGT BCDEFGHIJKLMNOP 2;
BIGT Q 2
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.3,-0.2),FRandom[BigGun](0.4,0.5)),3,0,6,SWING_Spring,2,1.5);
}
BIGT RSTUVWXY 2;
Goto Idle;
Fire:
BIGF A 0
{
if ( !A_BigCheckForReload(true) )
A_Overlay(-9999,"Null");
}
BIGF AB 2;
BIGF C 2 A_BigFire();
BIGF DEF 2;
BIGF G 2 A_Eject();
BIGF HIJKLMNOP 2;
Goto Idle;
AltFire:
BIGF A 0
{
if ( !A_BigCheckForReload(true) )
A_Overlay(-9999,"Null");
}
BIGF AB 3;
Goto AltHold;
AltHold:
BIGF C 1 A_BigFire();
BIGF DEF 1;
BIGF G 1 A_Eject();
BIGF HIJK 1;
BIGF L 0 A_BigRefire(1);
Goto AltRelease;
BIGF L 1;
Goto AltHold;
AltRelease:
BIGF LMNOP 3;
Goto Idle;
DryFire:
BIGF A 0 A_Overlay(-9999,"Null");
BIGF AB 2;
BIGF C 2
{
A_PlaySound("big/dry",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
if ( !Dampener.Active(self) ) A_AlertMonsters();
}
BIGF LMNOP 2;
Goto Idle;
Reload:
BIGR A 0
{
A_Overlay(-9999,"Null");
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.7,0.3),FRandom[BigGun](0.4,0.3)),3,0,10,SWING_Spring,70,0.8);
}
BIGR ABCDEFGHIJKL 2;
BIGR M 2
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.3,0.4),FRandom[BigGun](0.6,0.8)),6,0,3,SWING_Spring,2,3);
invoker.special1 = min(invoker.ammo1.amount,invoker.default.clipcount)-invoker.clipcount;
invoker.clipcount = -1;
A_QuakeEx(2,2,2,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollintensity:0.18);
A_PlaySound("big/punch",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
}
BIGR NOPQRSTUVWXYZ[\] 2;
BIR2 ABCDEF 2;
BIR2 G 2
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.2,0.3),FRandom[BigGun](0.3,0.5)),6,0,3,SWING_Spring,2,3);
invoker.clipcount = min(invoker.ammo1.amount,invoker.default.clipcount);
invoker.Ammo1.Amount -= invoker.special1;
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollintensity:0.12);
A_PlaySound("big/reload",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
}
BIR2 HIJKL 2;
BIR2 M 2
{
invoker.PlayUpSound(self);
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.3,-0.2),FRandom[BigGun](0.4,0.5)),3,0,6,SWING_Spring,2,1.5);
}
BIR2 NOP 2;
BIR2 Q 2
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.2,0.3),FRandom[BigGun](-0.8,-1.2)),3,0,6,SWING_Spring,2,1.5);
}
BIR2 RSTUVWXYZ[\] 2;
BIR3 ABCDEF 2;
Goto Idle;
Deselect:
BIGD A 1
{
A_Overlay(-9999,"Null");
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.2,0.3),FRandom[BigGun](-0.8,-1.2)),3,0,6,SWING_Spring,2,1.5);
}
BIGD BC 1;
BIGD D 1
{
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.3,-0.2),FRandom[BigGun](0.4,0.5)),3,0,6,SWING_Spring,2,1.5); }
BIGD EFGHIJK 1;
BIGD K 1 A_Lower(int.max);
Wait;
MuzzleFlash:
BGMF A 2 Bright
{
let l = Spawn("SniperLight",pos);
l.target = self;
}
Stop;
} }
} }

View file

@ -155,7 +155,6 @@ Class QuadShot : UnrealWeapon
[x2, y2, z2] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll); [x2, y2, z2] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
double a, s; double a, s;
Vector3 dir; Vector3 dir;
FLineTraceData d;
if ( bAlt ) if ( bAlt )
{ {
A_QuakeEx(1,1,1,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12); A_QuakeEx(1,1,1,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12);

View file

@ -201,7 +201,7 @@ Class UPlayer : UTPlayer
dsp.pendingupgrade = 4; dsp.pendingupgrade = 4;
else else
{ {
dsp.upgradelevel = 4; dsp.pendingupgrade = dsp.upgradelevel = 4;
dsp.MainUse = min(6,dsp.upgradelevel+1); dsp.MainUse = min(6,dsp.upgradelevel+1);
} }
} }