- moved all of RR's weapon code to the subfolder.

This commit is contained in:
Christoph Oelckers 2022-12-31 11:46:10 +01:00
parent d1b44d1900
commit 294cf05792
6 changed files with 276 additions and 268 deletions

View file

@ -184,12 +184,14 @@ version "4.10"
#include "zscript/games/duke/actors/redneckcstuff/rrcactus.zs"
#include "zscript/games/duke/actors/redneckcstuff/rrteleport.zs"
#include "zscript/games/duke/actors/redneckweapons/crossbow.zs"
#include "zscript/games/duke/actors/redneckweapons/boatcannon.zs"
#include "zscript/games/duke/actors/redneckenemies/vixen.zs"
#include "zscript/games/duke/actors/redneckweapons/boatcannon.zs"
#include "zscript/games/duke/actors/redneckweapons/crossbow.zs"
#include "zscript/games/duke/actors/redneckweapons/ripsaw.zs"
#include "zscript/games/duke/actors/redneckweapons/shitball.zs"
#include "zscript/games/duke/actors/redneckweapons/vixenatk.zs"
#include "zscript/games/duke/world/dukebreak.zs"
#include "zscript/games/duke/world/redneckbreak.zs"

View file

@ -171,164 +171,3 @@ class DukeFireball : DukeProjectile // WorldTour only
}
}
//---------------------------------------------------------------------------
//
// this class is called shitball - but it's not just about throwing shit in the game,
// the entire logic with 4 different looks depending on the shooter is also shit...
//
//---------------------------------------------------------------------------
class RedneckShitBall : DukeSpit
{
default
{
spriteset "SHITBALL", "SHITBALL2", "SHITBALL3", "SHITBALL4",
"FROGBALL1", "FROGBALL2", "FROGBALL3", "FROGBALL4", "FROGBALL5", "FROGBALL6",
"SHITBURN", "SHITBURN2", "SHITBURN3", "SHITBURN4",
"RABBITBALL";
+NOFLOORPAL;
}
private void rabbitguts()
{
self.spawnguts('RedneckRabbitJibA', 2);
self.spawnguts('RedneckRabbitJibB', 2);
self.spawnguts('RedneckRabbitJibC', 2);
}
override bool weaponhitplayer(DukeActor targ)
{
if (ownerActor && ownerActor.bSPAWNRABBITGUTS)
rabbitguts();
return Super.weaponhitplayer(targ);
}
override bool weaponhitwall(walltype wal)
{
self.SetPosition(oldpos);
if (ownerActor && ownerActor.bSPAWNRABBITGUTS)
rabbitguts();
return super.weaponhitwall(wal);
}
override bool weaponhitsector()
{
self.setPosition(oldpos);
if (ownerActor && ownerActor.bSPAWNRABBITGUTS)
rabbitguts();
return super.weaponhitsector();
}
override bool animate(tspritetype tspr)
{
int sprite = ((PlayClock >> 4) & 3);
if (self.ownerActor)
{
let OwnerAc = self.ownerActor;
if (OwnerAc.bTRANSFERPALTOJIBS)
{
if (OwnerAc.pal == 8)
{
sprite = 4 + ((PlayClock >> 4) % 6);
}
else if (OwnerAc.pal == 19)
{
sprite = 10 + ((PlayClock >> 4) & 3);
tspr.shade = -127;
}
}
else if (OwnerAc.bSPAWNRABBITGUTS)
{
tspr.clipdist |= TSPR_ROTATE8FRAMES;
sprite = 14;
}
}
return true;
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const
{
if (actor.bSPAWNRABBITGUTS)
{
shootprojectile1(actor, p, pos, ang, 37.5, -20);
}
else
{
shootprojectile1(actor, p, pos, ang, 25, -10);
}
return true;
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
class RedneckSawBlade : DukeProjectile
{
default
{
spriteset "SAWBLADE", "SAWBLADE2", "SAWBLADE3", "SAWBLADE4", "SAWBLADE5", "SAWBLADE6", "SAWBLADE7", "SAWBLADE8",
"CHEERBLADE", "CHEERBLADE2", "CHEERBLADE3", "CHEERBLADE4";
}
override bool weaponhitwall(walltype wal)
{
if (Raze.tileflags(wal.walltexture) & Duke.TFLAG_NOCIRCLEREFLECT)
{
self.Destroy();
return true;
}
if (self.extra <= 0)
{
self.pos += self.angle.ToVector() * 8;
let Owner = self.ownerActor;
if (!Owner || !(Owner.bALTPROJECTILESPRITE)) // depends on the shooter. Urgh...
{
let j = self.spawn("RedneckCircleStuck");
if (j)
{
j.scale = (0.125, 0.125);
j.cstat = CSTAT_SPRITE_ALIGNMENT_WALL;
j.angle += 90;
j.clipdist = self.scale.X * self.spriteWidth() * 0.125;
}
}
self.Destroy();
return true;
}
if (!dlevel.isMirror(wal))
{
self.extra -= 20;
self.yint--;
}
let k = wal.delta().Angle();
self.angle = k * 2 - self.angle;
return true;
}
override bool animate(tspritetype tspr)
{
int frame;
if (!OwnerActor || !(OwnerActor.bALTPROJECTILESPRITE)) frame = ((PlayClock >> 4) & 7);
else frame = 8 + ((PlayClock >> 4) & 3);
tspr.SetSpritePic(self, frame);
return true;
}
}
class RedneckCircleStuck : DukeActor
{
default
{
pic "CIRCLESTUCK";
}
}

View file

@ -31,106 +31,3 @@ class RedneckVixen : DukeActor
}
class RedneckUWhip : DukeProjectile
{
default
{
pic "UWHIP";
+FULLBRIGHT;
+INFLAME;
}
void shootwhip(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const
{
let sect = actor.sector;
double zvel;
double vel = 300 / 16;
if (actor.extra >= 0) actor.shade = -96;
if (p != null)
{
let aimed = actor.aim(self);
if (aimed)
{
double dal = ((aimed.scale.X * aimed.spriteHeight()) * 0.5);
double dist = (p.actor.pos.XY - aimed.pos.XY).Length();
zvel = ((aimed.pos.Z - pos.Z - dal) * vel) / dist;
ang = (aimed.pos.XY - pos.XY).Angle();
}
else
[vel, zvel] = Raze.setFreeAimVelocity(vel, zvel, p.getPitchWithView(), 49.);
}
else
{
let j = actor.findplayer();
if (actor.projectilespread < 0)
ang += frandom(self.projectilespread, 0);
else
ang += frandom(-self.projectilespread / 2, self.projectilespread / 2);
double dist = (j.actor.pos.XY - actor.pos.XY).Length();
zvel = ((j.actor.opos.Z + j.actor.oviewzoffset - pos.Z + 3) * vel) / dist;
}
double oldzvel = zvel;
double scale = p? 0.109375 : 0.125;
let spawned = dlevel.SpawnActor(sect, pos, self.GetClass(), -127, (scale,scale), ang, vel, zvel, actor, STAT_PROJECTILE);
if (!spawned) return;
spawned.extra += random(0, 7);
spawned.cstat = CSTAT_SPRITE_YCENTER;
spawned.clipdist = 1;
ang = actor.Angle + frandom(-22.5 / 4, 22.5 / 4);
zvel = oldzvel + frandom(-2, 2);
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang)
{
pos.Z += 4;
shootwhip(actor, p, pos, ang);
return true;
}
}
class RedneckOWhip : RedneckUWhip
{
default
{
pic "OWHIP";
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang)
{
pos.Z -= 15;
shootwhip(actor, p, pos, ang);
return true;
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
class RedneckVixenShot : DukeActor
{
default
{
pic "VIXENSHOT";
+INFLAME;
+FULLBRIGHT;
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const
{
pos.Z -= 4;
shootprojectile1(actor, p, pos, ang, 52.5, 0, 0.125);
return true;
}
}

View file

@ -0,0 +1,72 @@
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
class RedneckSawBlade : DukeProjectile
{
default
{
spriteset "SAWBLADE", "SAWBLADE2", "SAWBLADE3", "SAWBLADE4", "SAWBLADE5", "SAWBLADE6", "SAWBLADE7", "SAWBLADE8",
"CHEERBLADE", "CHEERBLADE2", "CHEERBLADE3", "CHEERBLADE4";
Strength THROWSAW_WEAPON_STRENGTH;
}
override bool weaponhitwall(walltype wal)
{
if (Raze.tileflags(wal.walltexture) & Duke.TFLAG_NOCIRCLEREFLECT)
{
self.Destroy();
return true;
}
if (self.extra <= 0)
{
self.pos += self.angle.ToVector() * 8;
let Owner = self.ownerActor;
if (!Owner || !(Owner.bALTPROJECTILESPRITE)) // depends on the shooter. Urgh...
{
let j = self.spawn("RedneckCircleStuck");
if (j)
{
j.scale = (0.125, 0.125);
j.cstat = CSTAT_SPRITE_ALIGNMENT_WALL;
j.angle += 90;
j.clipdist = self.scale.X * self.spriteWidth() * 0.125;
}
}
self.Destroy();
return true;
}
if (!dlevel.isMirror(wal))
{
self.extra -= 20;
self.yint--;
}
let k = wal.delta().Angle();
self.angle = k * 2 - self.angle;
return true;
}
override bool animate(tspritetype tspr)
{
int frame;
if (!OwnerActor || !(OwnerActor.bALTPROJECTILESPRITE)) frame = ((PlayClock >> 4) & 7);
else frame = 8 + ((PlayClock >> 4) & 3);
tspr.SetSpritePic(self, frame);
return true;
}
}
class RedneckCircleStuck : DukeActor
{
default
{
pic "CIRCLESTUCK";
Strength 0;
}
}

View file

@ -0,0 +1,93 @@
//---------------------------------------------------------------------------
//
// this class is called shitball - but it's not just about throwing shit in the game,
// the entire logic with 4 different looks depending on the shooter is also shit...
//
//---------------------------------------------------------------------------
class RedneckShitBall : DukeSpit
{
default
{
spriteset "SHITBALL", "SHITBALL2", "SHITBALL3", "SHITBALL4",
"FROGBALL1", "FROGBALL2", "FROGBALL3", "FROGBALL4", "FROGBALL5", "FROGBALL6",
"SHITBURN", "SHITBURN2", "SHITBURN3", "SHITBURN4",
"RABBITBALL";
+NOFLOORPAL;
Strength SHITBALL_WEAPON_STRENGTH;
}
private void rabbitguts()
{
self.spawnguts('RedneckRabbitJibA', 2);
self.spawnguts('RedneckRabbitJibB', 2);
self.spawnguts('RedneckRabbitJibC', 2);
}
override bool weaponhitplayer(DukeActor targ)
{
if (ownerActor && ownerActor.bSPAWNRABBITGUTS)
rabbitguts();
return Super.weaponhitplayer(targ);
}
override bool weaponhitwall(walltype wal)
{
self.SetPosition(oldpos);
if (ownerActor && ownerActor.bSPAWNRABBITGUTS)
rabbitguts();
return super.weaponhitwall(wal);
}
override bool weaponhitsector()
{
self.setPosition(oldpos);
if (ownerActor && ownerActor.bSPAWNRABBITGUTS)
rabbitguts();
return super.weaponhitsector();
}
override bool animate(tspritetype tspr)
{
int sprite = ((PlayClock >> 4) & 3);
if (self.ownerActor)
{
let OwnerAc = self.ownerActor;
if (OwnerAc.bTRANSFERPALTOJIBS)
{
if (OwnerAc.pal == 8)
{
sprite = 4 + ((PlayClock >> 4) % 6);
}
else if (OwnerAc.pal == 19)
{
sprite = 10 + ((PlayClock >> 4) & 3);
tspr.shade = -127;
}
}
else if (OwnerAc.bSPAWNRABBITGUTS)
{
tspr.clipdist |= TSPR_ROTATE8FRAMES;
sprite = 14;
}
}
return true;
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const
{
if (actor.bSPAWNRABBITGUTS)
{
shootprojectile1(actor, p, pos, ang, 37.5, -20);
}
else
{
shootprojectile1(actor, p, pos, ang, 25, -10);
}
return true;
}
}

View file

@ -0,0 +1,105 @@
class RedneckUWhip : DukeProjectile
{
default
{
pic "UWHIP";
+FULLBRIGHT;
+INFLAME;
Strength ALIENGISMO_WEAPON_STRENGTH;
}
void shootwhip(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const
{
let sect = actor.sector;
double zvel;
double vel = 300 / 16;
if (actor.extra >= 0) actor.shade = -96;
if (p != null)
{
let aimed = actor.aim(self);
if (aimed)
{
double dal = ((aimed.scale.X * aimed.spriteHeight()) * 0.5);
double dist = (p.actor.pos.XY - aimed.pos.XY).Length();
zvel = ((aimed.pos.Z - pos.Z - dal) * vel) / dist;
ang = (aimed.pos.XY - pos.XY).Angle();
}
else
[vel, zvel] = Raze.setFreeAimVelocity(vel, zvel, p.getPitchWithView(), 49.);
}
else
{
let j = actor.findplayer();
if (actor.projectilespread < 0)
ang += frandom(self.projectilespread, 0);
else
ang += frandom(-self.projectilespread / 2, self.projectilespread / 2);
double dist = (j.actor.pos.XY - actor.pos.XY).Length();
zvel = ((j.actor.opos.Z + j.actor.oviewzoffset - pos.Z + 3) * vel) / dist;
}
double oldzvel = zvel;
double scale = p? 0.109375 : 0.125;
let spawned = dlevel.SpawnActor(sect, pos, self.GetClass(), -127, (scale,scale), ang, vel, zvel, actor, STAT_PROJECTILE);
if (!spawned) return;
spawned.extra += random(0, 7);
spawned.cstat = CSTAT_SPRITE_YCENTER;
spawned.clipdist = 1;
ang = actor.Angle + frandom(-22.5 / 4, 22.5 / 4);
zvel = oldzvel + frandom(-2, 2);
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang)
{
pos.Z += 4;
shootwhip(actor, p, pos, ang);
return true;
}
}
class RedneckOWhip : RedneckUWhip
{
default
{
pic "OWHIP";
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang)
{
pos.Z -= 15;
shootwhip(actor, p, pos, ang);
return true;
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
class RedneckVixenShot : DukeActor
{
default
{
pic "VIXENSHOT";
+INFLAME;
+FULLBRIGHT;
Strength PLASMATHROWER_WEAPON_STRENGTH;
}
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const
{
pos.Z -= 4;
shootprojectile1(actor, p, pos, ang, 52.5, 0, 0.125);
return true;
}
}