Ripper implemented.
This commit is contained in:
parent
bef29efba3
commit
1332f7a243
9 changed files with 483 additions and 5 deletions
10
decaldef.txt
10
decaldef.txt
|
|
@ -170,3 +170,13 @@ decalgroup Pock
|
||||||
Pock2 1
|
Pock2 1
|
||||||
Pock3 1
|
Pock3 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
decal RazorBlast
|
||||||
|
{
|
||||||
|
pic ripblast
|
||||||
|
shade "00 00 00"
|
||||||
|
randomflipx
|
||||||
|
randomflipy
|
||||||
|
x-scale 0.45
|
||||||
|
y-scale 0.45
|
||||||
|
}
|
||||||
|
|
@ -362,10 +362,6 @@ Brightmap Texture "models/RazSkin.png"
|
||||||
{
|
{
|
||||||
Map "brightmaps/RazSkin.png"
|
Map "brightmaps/RazSkin.png"
|
||||||
}
|
}
|
||||||
Brightmap Texture "models/RazTrail.png"
|
|
||||||
{
|
|
||||||
Map "brightmaps/fullbright.png"
|
|
||||||
}
|
|
||||||
Brightmap Texture "models/JImpactHammer4.png"
|
Brightmap Texture "models/JImpactHammer4.png"
|
||||||
{
|
{
|
||||||
Map "brightmaps/JImpactHammer4.png"
|
Map "brightmaps/JImpactHammer4.png"
|
||||||
|
|
|
||||||
135
modeldef.ripper
135
modeldef.ripper
|
|
@ -33,3 +33,138 @@ Model "Ripper2"
|
||||||
|
|
||||||
FrameIndex RZRP B 1 0
|
FrameIndex RZRP B 1 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Model "Razor2"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "RazorBlade_d.3d"
|
||||||
|
SurfaceSkin 0 0 "RazSkin.png"
|
||||||
|
Offset -9.5 0 0
|
||||||
|
Scale 0.216 0.18 0.18
|
||||||
|
PitchOffset 90
|
||||||
|
AngleOffset 180
|
||||||
|
USEACTORPITCH
|
||||||
|
USEACTORROLL
|
||||||
|
|
||||||
|
FrameIndex RAZB A 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "Razor2Trail"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "RazorBlade_d.3d"
|
||||||
|
SurfaceSkin 0 1 "RazTrail.png"
|
||||||
|
Offset -19 0 0
|
||||||
|
Scale 0.432 0.18 0.18
|
||||||
|
PitchOffset 90
|
||||||
|
AngleOffset 180
|
||||||
|
USEACTORPITCH
|
||||||
|
USEACTORROLL
|
||||||
|
DONTCULLBACKFACES
|
||||||
|
|
||||||
|
FrameIndex RAZB A 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "Razor2Alt"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "RazorBlade_d.3d"
|
||||||
|
SurfaceSkin 0 0 "RazSkin.png"
|
||||||
|
Offset -9.5 0 0
|
||||||
|
Scale 0.216 0.18 0.18
|
||||||
|
PitchOffset 90
|
||||||
|
AngleOffset 180
|
||||||
|
USEACTORPITCH
|
||||||
|
USEACTORROLL
|
||||||
|
|
||||||
|
FrameIndex RAZB A 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "Ripper2"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "Razor2_d.3d"
|
||||||
|
SurfaceSkin 0 0 "RazSkin.png"
|
||||||
|
SurfaceSkin 0 1 "JRazor2.png"
|
||||||
|
SurfaceSkin 0 2 "JRazor4.png"
|
||||||
|
SurfaceSkin 0 3 "JRazor5.png"
|
||||||
|
SurfaceSkin 0 4 "JRazor3.png"
|
||||||
|
Scale 0.16 0.08 0.16
|
||||||
|
Offset 7.4 -10.8 -8.9
|
||||||
|
PitchOffset 90
|
||||||
|
|
||||||
|
// Select
|
||||||
|
FrameIndex RZRS A 0 0
|
||||||
|
FrameIndex RZRS B 0 1
|
||||||
|
FrameIndex RZRS C 0 2
|
||||||
|
FrameIndex RZRS D 0 3
|
||||||
|
FrameIndex RZRS E 0 4
|
||||||
|
FrameIndex RZRS F 0 5
|
||||||
|
FrameIndex RZRS G 0 6
|
||||||
|
FrameIndex RZRS H 0 7
|
||||||
|
FrameIndex RZRS I 0 8
|
||||||
|
FrameIndex RZRS J 0 9
|
||||||
|
FrameIndex RZRS K 0 10
|
||||||
|
FrameIndex RZRS L 0 11
|
||||||
|
FrameIndex RZRS M 0 12
|
||||||
|
FrameIndex RZRS N 0 13
|
||||||
|
FrameIndex RZRS O 0 14
|
||||||
|
FrameIndex RZRS P 0 15
|
||||||
|
FrameIndex RZRS Q 0 16
|
||||||
|
FrameIndex RZRS R 0 17
|
||||||
|
FrameIndex RZRS S 0 18
|
||||||
|
FrameIndex RZRS T 0 19
|
||||||
|
FrameIndex RZRS U 0 20
|
||||||
|
FrameIndex RZRS V 0 21
|
||||||
|
FrameIndex RZRS W 0 22
|
||||||
|
FrameIndex RZRS X 0 23
|
||||||
|
FrameIndex RZRS Y 0 24
|
||||||
|
FrameIndex RZRS Z 0 25
|
||||||
|
FrameIndex RZS2 A 0 26
|
||||||
|
FrameIndex RZS2 B 0 27
|
||||||
|
FrameIndex RZS2 C 0 28
|
||||||
|
FrameIndex RZS2 D 0 29
|
||||||
|
// Fire
|
||||||
|
FrameIndex RZRF A 0 32
|
||||||
|
FrameIndex RZRF B 0 33
|
||||||
|
FrameIndex RZRF C 0 34
|
||||||
|
FrameIndex RZRF D 0 35
|
||||||
|
FrameIndex RZRF E 0 36
|
||||||
|
FrameIndex RZRF F 0 37
|
||||||
|
FrameIndex RZRF G 0 38
|
||||||
|
FrameIndex RZRF H 0 39
|
||||||
|
FrameIndex RZRF I 0 40
|
||||||
|
FrameIndex RZRF J 0 41
|
||||||
|
FrameIndex RZRF K 0 42
|
||||||
|
FrameIndex RZRF L 0 43
|
||||||
|
FrameIndex RZRF M 0 44
|
||||||
|
FrameIndex RZRF N 0 45
|
||||||
|
FrameIndex RZRF O 0 46
|
||||||
|
// Idle
|
||||||
|
FrameIndex RZRI A 0 47
|
||||||
|
FrameIndex RZRI B 0 48
|
||||||
|
FrameIndex RZRI C 0 49
|
||||||
|
FrameIndex RZRI D 0 50
|
||||||
|
FrameIndex RZRI E 0 51
|
||||||
|
FrameIndex RZRI F 0 52
|
||||||
|
FrameIndex RZRI G 0 53
|
||||||
|
FrameIndex RZRI H 0 54
|
||||||
|
FrameIndex RZRI I 0 55
|
||||||
|
FrameIndex RZRI J 0 56
|
||||||
|
FrameIndex RZRI K 0 57
|
||||||
|
FrameIndex RZRI L 0 58
|
||||||
|
FrameIndex RZRI M 0 59
|
||||||
|
FrameIndex RZRI N 0 60
|
||||||
|
FrameIndex RZRI O 0 61
|
||||||
|
FrameIndex RZRI P 0 62
|
||||||
|
FrameIndex RZRI Q 0 63
|
||||||
|
FrameIndex RZRI R 0 64
|
||||||
|
FrameIndex RZRI S 0 65
|
||||||
|
// Down
|
||||||
|
FrameIndex RZRD A 0 67
|
||||||
|
FrameIndex RZRD B 0 68
|
||||||
|
FrameIndex RZRD C 0 69
|
||||||
|
FrameIndex RZRD D 0 70
|
||||||
|
FrameIndex RZRD E 0 71
|
||||||
|
FrameIndex RZRD F 0 72
|
||||||
|
}
|
||||||
|
|
@ -42,6 +42,7 @@ In progress:
|
||||||
- Minigun (slot 7)
|
- Minigun (slot 7)
|
||||||
- Rocket Launcher (slot 9)
|
- Rocket Launcher (slot 9)
|
||||||
- Sniper Rifle (slot 0)
|
- Sniper Rifle (slot 0)
|
||||||
|
- Jump Boots (radsuit, has "iron boots" powerup effect to compensate, will full replace Shielding Suit when implemented)
|
||||||
|
|
||||||
Things to do eventually:
|
Things to do eventually:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -176,6 +176,14 @@ pulse/fly pulsefly
|
||||||
pulse/select pulsepck
|
pulse/select pulsepck
|
||||||
pulse/reload pulserel
|
pulse/reload pulserel
|
||||||
|
|
||||||
|
ripper/select beam
|
||||||
|
ripper/fire stblade
|
||||||
|
ripper/altfire razoralt
|
||||||
|
ripper/hum razorhum
|
||||||
|
ripper/hit bladehit
|
||||||
|
ripper/flesh bladethk
|
||||||
|
ripper/althit expl03
|
||||||
|
|
||||||
flak/select pdown
|
flak/select pdown
|
||||||
flak/load hidraul2
|
flak/load hidraul2
|
||||||
flak/reload load1
|
flak/reload load1
|
||||||
|
|
|
||||||
Binary file not shown.
BIN
sounds/StBlade.wav
Normal file
BIN
sounds/StBlade.wav
Normal file
Binary file not shown.
|
|
@ -1,3 +1,74 @@
|
||||||
Sprite "BHOPA0",1,1{}
|
Sprite "BHOPA0",1,1{}
|
||||||
Sprite "RZRPA0",1,1{}
|
Sprite "RZRPA0",1,1{}
|
||||||
Sprite "RZRPB0",1,1{}
|
Sprite "RZRPB0",1,1{}
|
||||||
|
Sprite "RZRSA0",1,1{}
|
||||||
|
Sprite "RZRSB0",1,1{}
|
||||||
|
Sprite "RZRSC0",1,1{}
|
||||||
|
Sprite "RZRSD0",1,1{}
|
||||||
|
Sprite "RZRSE0",1,1{}
|
||||||
|
Sprite "RZRSF0",1,1{}
|
||||||
|
Sprite "RZRSG0",1,1{}
|
||||||
|
Sprite "RZRSH0",1,1{}
|
||||||
|
Sprite "RZRSI0",1,1{}
|
||||||
|
Sprite "RZRSJ0",1,1{}
|
||||||
|
Sprite "RZRSK0",1,1{}
|
||||||
|
Sprite "RZRSL0",1,1{}
|
||||||
|
Sprite "RZRSM0",1,1{}
|
||||||
|
Sprite "RZRSN0",1,1{}
|
||||||
|
Sprite "RZRSO0",1,1{}
|
||||||
|
Sprite "RZRSP0",1,1{}
|
||||||
|
Sprite "RZRSQ0",1,1{}
|
||||||
|
Sprite "RZRSR0",1,1{}
|
||||||
|
Sprite "RZRSS0",1,1{}
|
||||||
|
Sprite "RZRST0",1,1{}
|
||||||
|
Sprite "RZRSU0",1,1{}
|
||||||
|
Sprite "RZRSV0",1,1{}
|
||||||
|
Sprite "RZRSW0",1,1{}
|
||||||
|
Sprite "RZRSX0",1,1{}
|
||||||
|
Sprite "RZRSY0",1,1{}
|
||||||
|
Sprite "RZRSZ0",1,1{}
|
||||||
|
Sprite "RZS2A0",1,1{}
|
||||||
|
Sprite "RZS2B0",1,1{}
|
||||||
|
Sprite "RZS2C0",1,1{}
|
||||||
|
Sprite "RZS2D0",1,1{}
|
||||||
|
Sprite "RZRFA0",1,1{}
|
||||||
|
Sprite "RZRFB0",1,1{}
|
||||||
|
Sprite "RZRFC0",1,1{}
|
||||||
|
Sprite "RZRFD0",1,1{}
|
||||||
|
Sprite "RZRFE0",1,1{}
|
||||||
|
Sprite "RZRFF0",1,1{}
|
||||||
|
Sprite "RZRFG0",1,1{}
|
||||||
|
Sprite "RZRFH0",1,1{}
|
||||||
|
Sprite "RZRFI0",1,1{}
|
||||||
|
Sprite "RZRFJ0",1,1{}
|
||||||
|
Sprite "RZRFK0",1,1{}
|
||||||
|
Sprite "RZRFL0",1,1{}
|
||||||
|
Sprite "RZRFM0",1,1{}
|
||||||
|
Sprite "RZRFN0",1,1{}
|
||||||
|
Sprite "RZRFO0",1,1{}
|
||||||
|
Sprite "RZRIA0",1,1{}
|
||||||
|
Sprite "RZRIB0",1,1{}
|
||||||
|
Sprite "RZRIC0",1,1{}
|
||||||
|
Sprite "RZRID0",1,1{}
|
||||||
|
Sprite "RZRIE0",1,1{}
|
||||||
|
Sprite "RZRIF0",1,1{}
|
||||||
|
Sprite "RZRIG0",1,1{}
|
||||||
|
Sprite "RZRIH0",1,1{}
|
||||||
|
Sprite "RZRII0",1,1{}
|
||||||
|
Sprite "RZRIJ0",1,1{}
|
||||||
|
Sprite "RZRIK0",1,1{}
|
||||||
|
Sprite "RZRIL0",1,1{}
|
||||||
|
Sprite "RZRIM0",1,1{}
|
||||||
|
Sprite "RZRIN0",1,1{}
|
||||||
|
Sprite "RZRIO0",1,1{}
|
||||||
|
Sprite "RZRIP0",1,1{}
|
||||||
|
Sprite "RZRIQ0",1,1{}
|
||||||
|
Sprite "RZRIR0",1,1{}
|
||||||
|
Sprite "RZRIS0",1,1{}
|
||||||
|
Sprite "RZRDA0",1,1{}
|
||||||
|
Sprite "RZRDB0",1,1{}
|
||||||
|
Sprite "RZRDC0",1,1{}
|
||||||
|
Sprite "RZRDD0",1,1{}
|
||||||
|
Sprite "RZRDE0",1,1{}
|
||||||
|
Sprite "RZRDF0",1,1{}
|
||||||
|
Sprite "RAZBA0",1,1{}
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,220 @@ Class RipperAmmo : Ammo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Class Razor2Trail : Actor
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
RenderStyle "Add";
|
||||||
|
+NOGRAVITY;
|
||||||
|
+NOCLIP;
|
||||||
|
+DONTSPLASH;
|
||||||
|
+NOTELEPORT;
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
if ( !target || target.InStateSequence(target.CurState,target.ResolveState("Death")) )
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SetOrigin(target.pos,true);
|
||||||
|
A_SetAngle(target.angle,SPF_INTERPOLATE);
|
||||||
|
A_SetPitch(target.pitch,SPF_INTERPOLATE);
|
||||||
|
A_SetRoll(target.roll,SPF_INTERPOLATE);
|
||||||
|
alpha = target.vel.length()/target.speed;
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
RAZB A -1 Bright;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class Razor2 : Actor
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Radius 2;
|
||||||
|
Height 0;
|
||||||
|
Speed 50;
|
||||||
|
DamageFunction Random[Ripper](20,30);
|
||||||
|
DamageType "Ripper";
|
||||||
|
Obituary "%k ripped a chunk of meat out of %o with the Ripper.";
|
||||||
|
BounceType "Doom";
|
||||||
|
BounceCount 7;
|
||||||
|
BounceFactor 1.0;
|
||||||
|
WallBounceFactor 1.0;
|
||||||
|
PROJECTILE;
|
||||||
|
+USEBOUNCESTATE;
|
||||||
|
}
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
let t = Spawn("Razor2Trail",pos);
|
||||||
|
t.target = self;
|
||||||
|
A_PlaySound("ripper/hum",CHAN_VOICE,1.0,true,3.0);
|
||||||
|
Vector3 dir = vel.unit();
|
||||||
|
A_SetAngle(atan2(dir.y,dir.x));
|
||||||
|
A_SetPitch(asin(-dir.z));
|
||||||
|
}
|
||||||
|
override int DoSpecialDamage( Actor target, int damage, Name damagetype )
|
||||||
|
{
|
||||||
|
if ( pos.z > target.pos.z+target.height*0.8 ) damage *= 3;
|
||||||
|
if ( !target.bNOBLOOD )
|
||||||
|
{
|
||||||
|
target.SpawnBlood(pos,AngleTo(target),damage);
|
||||||
|
A_PlaySound("ripper/flesh");
|
||||||
|
A_AlertMonsters();
|
||||||
|
}
|
||||||
|
return damage;
|
||||||
|
}
|
||||||
|
action void A_RazorHit()
|
||||||
|
{
|
||||||
|
A_PlaySound("ripper/hit");
|
||||||
|
A_AlertMonsters();
|
||||||
|
A_SprayDecal("WallCrack",-20);
|
||||||
|
int numpt = Random[Ripper](5,10);
|
||||||
|
Vector3 x = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (-x+(FRandom[Ripper](-.8,.8),FRandom[Ripper](-.8,.8),FRandom[Ripper](-.8,.8))).unit()*FRandom[Ripper](0.1,1.2);
|
||||||
|
let s = Spawn("UTSmoke",pos);
|
||||||
|
s.vel = pvel;
|
||||||
|
s.SetShade(Color(1,1,1)*Random[Ripper](128,192));
|
||||||
|
}
|
||||||
|
numpt = Random[Ripper](4,12);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[Ripper](-1,1),FRandom[Ripper](-1,1),FRandom[Ripper](-1,1)).unit()*FRandom[Ripper](2,8);
|
||||||
|
let s = Spawn("UTSpark",pos);
|
||||||
|
s.vel = pvel;
|
||||||
|
}
|
||||||
|
numpt = Random[Ripper](4,8);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[Ripper](-1,1),FRandom[Ripper](-1,1),FRandom[Ripper](-1,1)).unit()*FRandom[Ripper](2,8);
|
||||||
|
let s = Spawn("UTChip",pos);
|
||||||
|
s.vel = pvel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
RAZB A -1;
|
||||||
|
Stop;
|
||||||
|
Bounce:
|
||||||
|
RAZB A 0
|
||||||
|
{
|
||||||
|
Vector3 dir = vel.unit();
|
||||||
|
A_SetAngle(atan2(dir.y,dir.x));
|
||||||
|
A_SetPitch(asin(-dir.z));
|
||||||
|
A_RazorHit();
|
||||||
|
}
|
||||||
|
Goto Spawn;
|
||||||
|
Death:
|
||||||
|
TNT1 A 0
|
||||||
|
{
|
||||||
|
angle += 180;
|
||||||
|
pitch *= -1;
|
||||||
|
A_RazorHit();
|
||||||
|
}
|
||||||
|
XDeath:
|
||||||
|
TNT1 A 1 A_StopSound(CHAN_VOICE);
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class Razor2AltLight : DynamicLight
|
||||||
|
{
|
||||||
|
double lifetime;
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
DynamicLight.Type "Point";
|
||||||
|
Args 255,240,224,90;
|
||||||
|
}
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
lifetime = 1.0;
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
|
args[LIGHT_RED] = 255*lifetime;
|
||||||
|
args[LIGHT_GREEN] = 240*lifetime;
|
||||||
|
args[LIGHT_BLUE] = 224*lifetime;
|
||||||
|
lifetime -= 0.05;
|
||||||
|
if ( lifetime <= 0 ) Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class Razor2Alt : Razor2
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
DamageFunction Random[Ripper](25,34);
|
||||||
|
DamageType "RipperAltDealth";
|
||||||
|
BounceType "None";
|
||||||
|
}
|
||||||
|
action void A_RazorExplode()
|
||||||
|
{
|
||||||
|
A_SetRenderStyle(1.0,STYLE_Add);
|
||||||
|
bFORCEXYBILLBOARD = true;
|
||||||
|
Scale *= 0.5;
|
||||||
|
A_StopSound(CHAN_VOICE);
|
||||||
|
A_PlaySound("ripper/althit");
|
||||||
|
Spawn("Razor2AltLight",pos);
|
||||||
|
A_AlertMonsters();
|
||||||
|
A_SprayDecal("RazorBlast",20);
|
||||||
|
A_Explode(Random[Ripper](20,34),180);
|
||||||
|
int numpt = Random[Ripper](10,20);
|
||||||
|
Vector3 x = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (-x+(FRandom[Ripper](-.8,.8),FRandom[Ripper](-.8,.8),FRandom[Ripper](-.8,.8))).unit()*FRandom[Ripper](0.1,1.2);
|
||||||
|
let s = Spawn("UTSmoke",pos);
|
||||||
|
s.vel = pvel;
|
||||||
|
s.SetShade(Color(1,1,1)*Random[Ripper](128,192));
|
||||||
|
}
|
||||||
|
numpt = Random[Ripper](8,16);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[Ripper](-1,1),FRandom[Ripper](-1,1),FRandom[Ripper](-1,1)).unit()*FRandom[Ripper](2,8);
|
||||||
|
let s = Spawn("UTSpark",pos);
|
||||||
|
s.vel = pvel;
|
||||||
|
}
|
||||||
|
numpt = Random[Ripper](8,12);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[Ripper](-1,1),FRandom[Ripper](-1,1),FRandom[Ripper](-1,1)).unit()*FRandom[Ripper](2,8);
|
||||||
|
let s = Spawn("UTChip",pos);
|
||||||
|
s.vel = pvel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override int DoSpecialDamage( Actor target, int damage, Name damagetype )
|
||||||
|
{
|
||||||
|
return damage;
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Death:
|
||||||
|
XDeath:
|
||||||
|
TNT1 A 0 A_RazorExplode();
|
||||||
|
REXP ABCDEFG 2 Bright;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Class Ripper2 : UTWeapon
|
Class Ripper2 : UTWeapon
|
||||||
{
|
{
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Tag "Ripper";
|
Tag "Ripper";
|
||||||
Inventory.PickupMessage "You got the Ripper.";
|
Inventory.PickupMessage "You got the Ripper.";
|
||||||
Weapon.UpSound "";
|
Weapon.UpSound "ripper/select";
|
||||||
Weapon.SlotNumber 6;
|
Weapon.SlotNumber 6;
|
||||||
Weapon.SelectionOrder 4;
|
Weapon.SelectionOrder 4;
|
||||||
Weapon.AmmoType "RipperAmmo";
|
Weapon.AmmoType "RipperAmmo";
|
||||||
|
|
@ -33,6 +240,30 @@ Class Ripper2 : UTWeapon
|
||||||
Weapon.AmmoUse2 1;
|
Weapon.AmmoUse2 1;
|
||||||
Weapon.AmmoGive 15;
|
Weapon.AmmoGive 15;
|
||||||
}
|
}
|
||||||
|
action void A_RazorFire( bool alt = false )
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap ) return;
|
||||||
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
|
if ( alt ) A_PlaySound("ripper/altfire",CHAN_WEAPON);
|
||||||
|
else A_PlaySound("ripper/fire",CHAN_WEAPON);
|
||||||
|
invoker.FireEffect();
|
||||||
|
UTMainHandler.DoFlash(self,Color(8,0,255,255),1);
|
||||||
|
A_AlertMonsters();
|
||||||
|
if ( alt ) A_QuakeEx(3,3,3,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
|
else A_QuakeEx(2,2,2,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08);
|
||||||
|
Vector3 x, y, z;
|
||||||
|
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||||
|
Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+8.0*y-7.0*z;
|
||||||
|
Actor p;
|
||||||
|
if ( alt ) p = Spawn("Razor2Alt",origin);
|
||||||
|
else p = Spawn("Razor2",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;
|
||||||
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
@ -40,5 +271,31 @@ Class Ripper2 : UTWeapon
|
||||||
Stop;
|
Stop;
|
||||||
RZRP B -1;
|
RZRP B -1;
|
||||||
Stop;
|
Stop;
|
||||||
|
Select:
|
||||||
|
RZRS A 1 A_Raise(int.max);
|
||||||
|
Wait;
|
||||||
|
Ready:
|
||||||
|
RZRS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
||||||
|
RZS2 ABCD 1;
|
||||||
|
Idle:
|
||||||
|
RZRI ABCDEFGHIJKLMNOPQRS 2
|
||||||
|
{
|
||||||
|
A_CheckReload();
|
||||||
|
A_WeaponReady();
|
||||||
|
}
|
||||||
|
Loop;
|
||||||
|
Fire:
|
||||||
|
RZRF A 0 A_RazorFire();
|
||||||
|
RZRF ABCDEFGHIJKLMNO 1;
|
||||||
|
Goto Idle;
|
||||||
|
AltFire:
|
||||||
|
RZRF A 0 A_RazorFire(true);
|
||||||
|
RZRF ABCDEFG 3;
|
||||||
|
RZRF HIJKLMNO 1;
|
||||||
|
Goto Idle;
|
||||||
|
Deselect:
|
||||||
|
RZRD ABCDEF 2;
|
||||||
|
RZRD F 1 A_Lower(int.max);
|
||||||
|
Wait;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue