diff --git a/decaldef.txt b/decaldef.txt index a8fc503..b515bd4 100644 --- a/decaldef.txt +++ b/decaldef.txt @@ -170,3 +170,13 @@ decalgroup Pock Pock2 1 Pock3 1 } + +decal RazorBlast +{ + pic ripblast + shade "00 00 00" + randomflipx + randomflipy + x-scale 0.45 + y-scale 0.45 +} \ No newline at end of file diff --git a/gldefs.txt b/gldefs.txt index 62efcd3..ef36e1b 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -362,10 +362,6 @@ Brightmap Texture "models/RazSkin.png" { Map "brightmaps/RazSkin.png" } -Brightmap Texture "models/RazTrail.png" -{ - Map "brightmaps/fullbright.png" -} Brightmap Texture "models/JImpactHammer4.png" { Map "brightmaps/JImpactHammer4.png" diff --git a/modeldef.ripper b/modeldef.ripper index 0caf17b..40a17cf 100644 --- a/modeldef.ripper +++ b/modeldef.ripper @@ -33,3 +33,138 @@ Model "Ripper2" 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 +} \ No newline at end of file diff --git a/readme.txt b/readme.txt index c1cafb5..51a699d 100644 --- a/readme.txt +++ b/readme.txt @@ -42,6 +42,7 @@ In progress: - Minigun (slot 7) - Rocket Launcher (slot 9) - 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: diff --git a/sndinfo.txt b/sndinfo.txt index 936e932..aea1402 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -176,6 +176,14 @@ pulse/fly pulsefly pulse/select pulsepck 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/load hidraul2 flak/reload load1 diff --git a/sounds/RazorHum.wav b/sounds/RazorHum.wav index e32a712..cd1579b 100644 Binary files a/sounds/RazorHum.wav and b/sounds/RazorHum.wav differ diff --git a/sounds/StBlade.wav b/sounds/StBlade.wav new file mode 100644 index 0000000..bb7c719 Binary files /dev/null and b/sounds/StBlade.wav differ diff --git a/textures.ripper b/textures.ripper index 3c54f9c..01dd5ec 100644 --- a/textures.ripper +++ b/textures.ripper @@ -1,3 +1,74 @@ Sprite "BHOPA0",1,1{} Sprite "RZRPA0",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{} diff --git a/zscript/ripper.zsc b/zscript/ripper.zsc index ccd9e65..2d41fa1 100644 --- a/zscript/ripper.zsc +++ b/zscript/ripper.zsc @@ -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