Oh man the amount of stuff I've done today:

- Implemented Biospark Carbine secondary + combo.
 - Added a "check out gun" anim when the Biospark Carbine is fully loaded and you press reload, just like the Hellblazer.
 - First person gestures.
 - Replaced "yeah I ban him" gesture with a wave, more useful.
 - Random stuff.
 - Made it so you can pick up unimplemented weapons (but can't use them).
 - Various tiny tweaks here and there.
This commit is contained in:
Mari the Deer 2020-04-25 02:31:55 +02:00
commit cab0940723
45 changed files with 1420 additions and 98 deletions

View file

@ -233,7 +233,7 @@ Class HellblazerMissile : Actor
while ( bt.Next() )
{
let t = bt.Thing;
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || t.IsFriend(target) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),bNOGRAVITY?50:90) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),bNOGRAVITY?50:90) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
deto++;
break;
}
@ -862,7 +862,7 @@ Class HellblazerClusterMini : HellblazerMissile
while ( bt.Next() )
{
let t = bt.Thing;
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || t.IsFriend(target) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),80) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),80) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
deto++;
break;
}

View file

@ -18,6 +18,22 @@ Class Wallbuster : SWWMWeapon
return false;
}
// leave these while it's still unimplemented
override bool ReportHUDAmmo()
{
return false;
}
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
{
return false;
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
if ( other.player == players[consoleplayer] )
Console.Printf("\cgWALLBUSTER NOT IMPLEMENTED\c-");
}
Default
{
Tag "$T_WALLBUSTER";
@ -32,5 +48,21 @@ Class Wallbuster : SWWMWeapon
Spawn:
XZW1 A -1;
Stop;
Select:
TNT1 A 1
{
Console.Printf("\cgWALLBUSTER NOT IMPLEMENTED\c-");
A_FullRaise();
}
Goto Ready;
Ready:
TNT1 A 1 A_WeaponReady();
Wait;
Fire:
TNT1 A 1;
Goto Ready;
Deselect:
TNT1 A -1 A_FullLower();
Stop;
}
}

View file

@ -897,7 +897,7 @@ Class SWWMSmoke : Actor
if ( isFrozen() ) return;
vel *= 0.96;
vel.z += 0.01;
if ( waterlevel > 0 )
if ( (waterlevel > 0) && !bAMBUSH )
{
let b = Spawn("SWWMBubble",pos);
b.scale *= abs(scale.x);
@ -969,7 +969,7 @@ Class SWWMViewSmoke : SWWMSmoke
ofs += vvel;
vvel *= 0.96;
vvel.z += 0.01;
if ( waterlevel > 0 ) Destroy();
if ( (waterlevel > 0) && !bAMBUSH ) Destroy();
}
}
@ -2457,13 +2457,13 @@ Class SWWMHandler : EventHandler
switch ( e.Args[0] )
{
case 1:
if ( mo.FindState("Approve") ) mo.SetStateLabel("Approve");
SWWMGesture.SetGesture(mo,1);
break;
case 2:
if ( mo.FindState("Victory") ) mo.SetStateLabel("Victory");
SWWMGesture.SetGesture(mo,2);
break;
default:
if ( mo.FindState("Taunt") ) mo.SetStateLabel("Taunt");
SWWMGesture.SetGesture(mo,0);
break;
}
}

View file

@ -588,7 +588,7 @@ Class Eviscerator : SWWMWeapon
A_ZoomFactor(1.);
A_SWWMFlash();
SWWMHandler.DoFlash(self,Color(64,255,224,96),3);
A_AlertMonsters();
A_AlertMonsters(4500);
A_Recoil(2.);
Vector3 x, y, z, x2, y2, z2, dir, origin;
double a, s;
@ -645,7 +645,7 @@ Class Eviscerator : SWWMWeapon
A_ZoomFactor(1.);
A_SWWMFlash();
SWWMHandler.DoFlash(self,Color(16,255,224,96),3);
A_AlertMonsters();
A_AlertMonsters(4000);
A_Recoil(2.2);
Vector3 x, y, z, x2, y2, z2, dir, origin;
double a, s;

View file

@ -7,6 +7,22 @@ Class Ynykron : SWWMWeapon
Property ClipCount : clipcount;
// leave these while it's still unimplemented
override bool ReportHUDAmmo()
{
return false;
}
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
{
return false;
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
if ( other.player == players[consoleplayer] )
Console.Printf("\cgYNYKRON ARTIFACT NOT IMPLEMENTED\c-");
}
Default
{
Tag "$T_YNYKRON";
@ -25,5 +41,21 @@ Class Ynykron : SWWMWeapon
Spawn:
XZW1 A -1;
Stop;
Select:
TNT1 A 1
{
Console.Printf("\cgYNYKRON ARTIFACT NOT IMPLEMENTED\c-");
A_FullRaise();
}
Goto Ready;
Ready:
TNT1 A 1 A_WeaponReady();
Wait;
Fire:
TNT1 A 1;
Goto Ready;
Deselect:
TNT1 A -1 A_FullLower();
Stop;
}
}

View file

@ -62,7 +62,7 @@ Class AirBullet : FastProjectile
}
void A_Splode()
{
A_AlertMonsters();
A_AlertMonsters(8000);
A_QuakeEx(6,6,6,20,0,250,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.);
A_StartSound("deepimpact/bullethit",CHAN_VOICE,CHANF_DEFAULT,1.,.3);
A_SprayDecal("ImpactMark");
@ -350,7 +350,7 @@ Class DeepImpact : SWWMWeapon
A_QuakeEx(6,6,6,10,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.7);
A_Recoil(4.);
A_StartSound("deepimpact/altfire",CHAN_WEAPON,CHANF_OVERLAP,attenuation:.5);
A_AlertMonsters();
A_AlertMonsters(8000);
invoker.clipcount = 0;
Vector3 x, y, z, x2, y2, z2;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);

View file

@ -298,10 +298,11 @@ Class SWWMStatusBar : BaseStatusBar
}
}
}
else trackers.Clear();
// update floating scores, adding the scorenums first, then the damnums
int total_sz = 0;
if ( scorenums.GetBool() ) total_sz += hnd.scorenums_cnt;
if ( healthnums.GetBool() ) total_sz += min(50,hnd.damnums_cnt);
if ( healthnums.GetBool() ) total_sz += min(100,hnd.damnums_cnt);
if ( scoreobjs.Size() != total_sz )
scoreobjs.Resize(total_sz);
int i = 0;

View file

@ -496,7 +496,7 @@ Class Demolitionist : PlayerPawn
s.special1 = int(-lastvelz);
ReactionTime = 17;
A_Stop();
A_AlertMonsters();
A_AlertMonsters(2500);
if ( player == players[consoleplayer] )
{
A_StartSound("demolitionist/hardland",CHAN_FOOTSTEP,CHANF_OVERLAP);
@ -973,7 +973,7 @@ Class Demolitionist : PlayerPawn
s.special1 = 30;
ReactionTime = 17;
A_Stop();
A_AlertMonsters();
A_AlertMonsters(2500);
if ( player == players[consoleplayer] )
{
A_StartSound("demolitionist/hardland",CHAN_FOOTSTEP,CHANF_OVERLAP);
@ -1203,7 +1203,7 @@ Class Demolitionist : PlayerPawn
if ( !player ) return;
// add lore if any
SWWMLoreLibrary.Add(player,item.GetClassName());
if ( (item is 'Weapon') && mystats && !mystats.GotWeapon(Weapon(item).GetClass()) && CheckLocalView() )
if ( (item is 'Weapon') && !(item is 'SWWMGesture') && mystats && !mystats.GotWeapon(Weapon(item).GetClass()) && CheckLocalView() )
SWWMHandler.AddOneliner("getweapon",2);
if ( (item is 'Key') && !key_reentrant )
{
@ -1390,7 +1390,7 @@ Class Demolitionist : PlayerPawn
DashEnd:
XZW4 TUVWX 2;
Goto Spawn+1;
Taunt:
Wave:
#### # 3;
XZW4 YZ 3;
XZW5 ABCDEFGHIJKLM 3;
@ -1778,3 +1778,105 @@ Class CastDemolitionist : Actor
Stop;
}
}
// First person gestures
Class SWWMGesture : SWWMWeapon
{
Weapon formerweapon;
int whichgesture;
bool deaded;
int gonect;
static void SetGesture( PlayerPawn mo, int which = 0 )
{
if ( (mo.player.ReadyWeapon is 'SWWMGesture') || (mo.player.PendingWeapon is 'SWWMGesture') ) return; // already gesturing
SWWMGesture w = SWWMGesture(mo.FindInventory("SWWMGesture"));
if ( !w )
{
w = SWWMGesture(Spawn("SWWMGesture"));
mo.AddInventory(w);
}
if ( mo.player.PendingWeapon != WP_NOCHANGE ) w.formerweapon = mo.player.PendingWeapon;
else w.formerweapon = mo.player.ReadyWeapon;
w.whichgesture = which;
mo.player.PendingWeapon = w;
}
action void A_CallPlayerGesture( statelabel st )
{
if ( invoker.Owner.FindState(st) && (invoker.Owner.Health > 0) )
invoker.Owner.SetStateLabel(st);
}
action void A_FinishGesture()
{
player.PendingWeapon = invoker.formerweapon;
player.SetPSprite(PSP_WEAPON,ResolveState("Deselect"));
}
override void OwnerDied()
{
Super.OwnerDied();
deaded = true;
}
Default
{
+WEAPON.CHEATNOTWEAPON;
+INVENTORY.UNDROPPABLE;
+INVENTORY.UNTOSSABLE;
+INVENTORY.UNCLEARABLE;
}
States
{
Select:
TNT1 A 1
{
A_FullRaise();
if ( invoker.deaded ) A_FinishGesture();
}
Goto Ready;
Ready:
TNT1 A 1
{
if ( invoker.whichgesture == 1 ) return ResolveState("Approve");
if ( invoker.whichgesture == 2 ) return ResolveState("Victory");
return ResolveState("Wave");
}
Wait;
Fire:
TNT1 A 1;
Goto Ready;
Wave:
TNT1 A 3 A_CallPlayerGesture("Wave");
XZW1 AB 3;
XZW1 C 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 DEFGHIJ 3;
XZW1 K 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 LMNO 3;
TNT1 A -1 A_FinishGesture();
Stop;
Approve:
TNT1 A 3 A_CallPlayerGesture("Approve");
XZW1 PQ 3;
XZW1 R 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 STUVWX 3;
XZW1 Y 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 Z 3;
XZW2 ABCDEF 3;
TNT1 A -1 A_FinishGesture();
Stop;
Victory:
TNT1 A 3 A_CallPlayerGesture("Victory");
XZW2 GH 3;
XZW2 I 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 JKLMNOPQ 3;
XZW2 R 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 STUVWXY 3;
TNT1 A -1 A_FinishGesture();
Stop;
Deselect:
TNT1 A -1 A_FullLower();
Stop;
}
}

View file

@ -564,7 +564,7 @@ Class SaltImpact : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
A_AlertMonsters();
A_AlertMonsters(6000);
SWWMHandler.DoBlast(self,120,15000);
A_Explode(25,120);
A_QuakeEx(3,3,3,10,0,250,"",QF_RELATIVE|QF_SCALEDOWN,falloff:150,rollintensity:0.2);
@ -1555,7 +1555,7 @@ Class GoldenImpact : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
A_AlertMonsters();
A_AlertMonsters(40000);
SWWMHandler.DoBlast(self,200,120000);
A_Explode(7777,200);
A_QuakeEx(9,9,9,40,0,5000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollintensity:1.5);
@ -1682,7 +1682,7 @@ Class GoldenSubImpact : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
A_AlertMonsters();
A_AlertMonsters(9000);
SWWMHandler.DoBlast(self,200,90000);
A_Explode(777,200);
A_QuakeEx(7,7,7,20,0,2000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:200,rollintensity:.8);
@ -1807,7 +1807,7 @@ Class GoldenSubSubImpact : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
A_AlertMonsters();
A_AlertMonsters(3000);
SWWMHandler.DoBlast(self,200,60000);
A_Explode(77,200);
A_QuakeEx(4,4,4,15,0,1000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:100,rollintensity:.4);

File diff suppressed because it is too large Load diff

View file

@ -215,6 +215,7 @@ Class CandyPop : Actor
double hfov = atan(Screen.GetAspectRatio()*tan(vfov));
let mo = players[consoleplayer].camera;
Vector3 pp;
if ( !mo.CheckSight(self) ) return;
if ( mo is 'PlayerPawn' ) pp = mo.Vec2OffsetZ(0,0,PlayerPawn(mo).player.viewz);
else pp = mo.Vec3Offset(0,0,mo.CameraHeight);
Vector3 sc = level.SphericalCoords(pp,pos,(mo.angle,mo.pitch));
@ -230,7 +231,7 @@ Class CandyPop : Actor
Spawn:
BLPF B 3 NoDelay
{
A_AlertMonsters();
A_AlertMonsters(2000);
SWWMHandler.DoBlast(self,120,60000);
A_Explode(100,120);
Scale *= FRandom[ExploS](0.6,1.8);
@ -297,7 +298,7 @@ Class TinyCandyPop : CandyPop
Spawn:
BLPF B 3 NoDelay
{
A_AlertMonsters();
A_AlertMonsters(700);
SWWMHandler.DoBlast(self,80,32000);
A_Explode(40,80);
Scale *= FRandom[ExploS](0.6,1.8);

View file

@ -8,6 +8,22 @@ Class SilverBullet : SWWMWeapon
Property ClipCount : clipcount;
// leave these while it's still unimplemented
override bool ReportHUDAmmo()
{
return false;
}
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
{
return false;
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
if ( other.player == players[consoleplayer] )
Console.Printf("\cgSILVER BULLET JET NOT IMPLEMENTED\c-");
}
Default
{
Tag "$T_SILVERBULLET";
@ -26,5 +42,21 @@ Class SilverBullet : SWWMWeapon
Spawn:
XZW1 A -1;
Stop;
Select:
TNT1 A 1
{
Console.Printf("\cgSILVER BULLET JET NOT IMPLEMENTED\c-");
A_FullRaise();
}
Goto Ready;
Ready:
TNT1 A 1 A_WeaponReady();
Wait;
Fire:
TNT1 A 1;
Goto Ready;
Deselect:
TNT1 A -1 A_FullLower();
Stop;
}
}