Hellblazer pickups have translucent glass and show ammo state.

Added cvar for controlling blob shadow render distance.
Folder reorganizing for post-release updates.
Updated patron list.
This commit is contained in:
Mari the Deer 2020-12-14 12:18:05 +01:00
commit ad2a96b676
34 changed files with 339 additions and 8 deletions

View file

@ -19,4 +19,5 @@ Demolitionist
include "CandyGun";
//include "RayKhom";
include "Ynykron";
//include "GrandLance";
}

View file

@ -89,6 +89,7 @@ server bool swwm_uncapalert = false; // all noise alerts have infinite range
user int swwm_damagetarget = 1; // conditional healthbar hiding (1 - hide until damage is first taken, 2 - hide if at full health)
server int swwm_strictuntouchable = 0; // untouchable bonus ends... (1 - even if your armor absorbed all the damage, 2 - if you get hit by anything PERIOD)
server int swwm_silencemap = 0; // silences the map when all kills/items/secrets are achieved (2 - play calm music)
user int swwm_shadowdist = 2000; // max distance beyond which blob shadows are no longer rendered, helps performance
server noarchive bool swwm_iseriouslywanttoplaythiswithbd = false; // self-explanatory

View file

@ -173,6 +173,7 @@ SWWM_SILENCEMAP = "Cleared Map Music";
SWWM_SILENCE_KEEP = "Don't Change";
SWWM_SILENCE_SILENT = "Silence";
SWWM_SILENCE_CALM = "Calm Track";
SWWM_SHADOWDIST = "Shadow Distance";
TOOLTIP_SWWM_VOICETYPE = "Sets the voice pack for the player.";
TOOLTIP_SWWM_MUTEVOICE = "Control what gets muted, if you'd rather have a more silent protagonist.";
TOOLTIP_SWWM_FLASHSTRENGTH = "Screen flashes usually happen when firing some weapons, you can lower this if these effects are harmful for you.";
@ -252,6 +253,7 @@ TOOLTIP_SWWM_COLLECTANIMKEY = "Play special first person animations when picking
TOOLTIP_SWWM_DAMAGETARGET = "Select when targetter healthbars should be shown.";
TOOLTIP_SWWM_STRICTUNTOUCHABLE = "By default, the \"Untouchable\" bonus is active until you take direct damage. If you feel this isn't strict enough, you can also make it end if armor absorbs the damage, or, for extra strictness, on ANY hit, even while invulnerable.";
TOOLTIP_SWWM_SILENCEMAP = "Chooses whether you want music to stop when you 100% a map. A third option is available which switches to a soothing calm track from a game you may recognize if you know me well.";
TOOLTIP_SWWM_SHADOWDISTANCE = "Maximum distance at which to show blob shadows. May help performance.";
// knowledge base
SWWM_COMINGSOON = "(coming soon)";
SWWM_MISSTAB = "Mission";

View file

@ -171,6 +171,7 @@ SWWM_SILENCEMAP = "Música de Mapa Despejado";
SWWM_SILENCE_KEEP = "No Cambiar";
SWWM_SILENCE_SILENT = "Silencio";
SWWM_SILENCE_CALM = "Tema Tranquilo";
SWWM_SHADOWDIST = "Distancia de Sombras";
TOOLTIP_SWWM_VOICETYPE = "Selecciona el pack de voz para el jugador.";
TOOLTIP_SWWM_MUTEVOICE = "Controla lo que se mutea, si prefieres tener un protagonista más silencioso.";
TOOLTIP_SWWM_FLASHSTRENGTH = "Los destellos en pantalla suelen ocurrir al disparar algunas armas, puedes reducirlo si este tipo de efectos te causan malestar.";
@ -250,6 +251,7 @@ TOOLTIP_SWWM_COLLECTANIMKEY = "Muestra animaciones especiales en primera persona
TOOLTIP_SWWM_DAMAGETARGET = "Selecciona cuando deben mostrarse las barras de vida.";
TOOLTIP_SWWM_STRICTUNTOUCHABLE = "Por defecto, el bonus \"Intocable\" permanece activo hasta que recibas daño directo. Si sientes que esto no es suficientemente estricto, también puedes hacer que termine si la armadura absorbe el daño, o, para mayor severidad, con CUALQUIER golpe, incluso siendo invulnerable.";
TOOLTIP_SWWM_SILENCEMAP = "Elige si quieres que la música se detenga cuando completas un mapa al 100%. Hay una tercera opción disponible que cambiará a un relajante tema tranquilo de un juego que podrás reconocer si me conoces bien.";
TOOLTIP_SWWM_SHADOWDISTANCE = "Distancia máxima a la que mostrar sombras. Puede ayudar al rendimiento.";
// knowledge base
SWWM_COMINGSOON = "(próximamente)";
SWWM_MISSTAB = "Misión";

View file

@ -1,2 +1,2 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r678 \cu(Sun 13 Dec 13:57:15 CET 2020)";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r679 \cu(Mon 14 Dec 12:18:05 CET 2020)";

View file

@ -95,6 +95,7 @@ OptionMenu "SWWMOptionMenu"
StaticText " "
StaticText "$SWWM_ETITLE", "Blue"
Option "$SWWM_SHADOWS", "swwm_shadows", "SWWMShadows"
ScaleSlider "$SWWM_SHADOWDIST", "swwm_shadowdist", -1, 4000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
Option "$SWWM_BLOOD", "swwm_blood", "YesNo"
ScaleSlider "$SWWM_MAXBLOOD", "swwm_maxblood", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
ScaleSlider "$SWWM_MAXGIBS", "swwm_maxgibs", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"

View file

@ -108,12 +108,107 @@ Model "Hellblazer"
Path "models"
Model 0 "HellblazerPickup_d.3d"
Skin 0 "Hellblazer.png"
SurfaceSkin 0 0 "Hellblazer.png"
Scale 0.11 0.11 0.11
AngleOffset 180
ZOffset 20
ROTATING
// Missiles
SurfaceSkin 0 2 "HellblazerAmmo.png"
SurfaceSkin 0 3 "HellblazerAmmo.png"
SurfaceSkin 0 4 "HellblazerAmmo.png"
SurfaceSkin 0 5 "HellblazerAmmo.png"
FrameIndex XZW1 A 0 0
// Crackshots
SurfaceSkin 0 2 "HellblazerAmmo_Cluster.png"
SurfaceSkin 0 3 ""
SurfaceSkin 0 4 "HellblazerAmmo_Cluster.png"
SurfaceSkin 0 5 ""
FrameIndex XZW1 B 0 0
// Ravagers
SurfaceSkin 0 2 "HellblazerAmmo_Fire.png"
SurfaceSkin 0 3 ""
SurfaceSkin 0 4 "HellblazerAmmo_Fire.png"
SurfaceSkin 0 5 ""
FrameIndex XZW1 C 0 0
// Warheads
SurfaceSkin 0 2 "HellblazerAmmo_Nuke.png"
SurfaceSkin 0 3 ""
SurfaceSkin 0 4 ""
SurfaceSkin 0 5 "HellblazerAmmo_Nuke.png"
FrameIndex XZW1 D 0 0
}
// individual missiles for pickup model
Model "HellblazerXSub"
{
Path "models"
Model 0 "HellblazerPickup_d.3d"
Scale 0.11 0.11 0.11
AngleOffset 180
ZOffset 20
ROTATING
// Missiles
SurfaceSkin 0 6 "HellblazerMissile.png"
FrameIndex XZW1 A 0 0
SurfaceSkin 0 6 ""
SurfaceSkin 0 7 "HellblazerMissile.png"
FrameIndex XZW1 B 0 0
SurfaceSkin 0 7 ""
SurfaceSkin 0 8 "HellblazerMissile.png"
FrameIndex XZW1 C 0 0
SurfaceSkin 0 8 ""
SurfaceSkin 0 9 "HellblazerMissile.png"
FrameIndex XZW1 D 0 0
SurfaceSkin 0 9 ""
SurfaceSkin 0 10 "HellblazerMissile.png"
FrameIndex XZW1 E 0 0
SurfaceSkin 0 10 ""
SurfaceSkin 0 11 "HellblazerMissile.png"
FrameIndex XZW1 F 0 0
SurfaceSkin 0 11 ""
// Crackshots
SurfaceSkin 0 6 "HellblazerMissile_Cluster.png"
FrameIndex XZW2 A 0 0
SurfaceSkin 0 6 ""
SurfaceSkin 0 8 "HellblazerMissile_Cluster.png"
FrameIndex XZW2 B 0 0
SurfaceSkin 0 8 ""
SurfaceSkin 0 10 "HellblazerMissile_Cluster.png"
FrameIndex XZW2 C 0 0
SurfaceSkin 0 10 ""
// Ravagers
SurfaceSkin 0 6 "HellblazerMissile_Fire.png"
FrameIndex XZW3 A 0 0
SurfaceSkin 0 6 ""
SurfaceSkin 0 8 "HellblazerMissile_Fire.png"
FrameIndex XZW3 B 0 0
SurfaceSkin 0 8 ""
SurfaceSkin 0 10 "HellblazerMissile_Fire.png"
FrameIndex XZW3 C 0 0
SurfaceSkin 0 10 ""
// Warheads
SurfaceSkin 0 6 "HellblazerMissile_Nuke.png"
FrameIndex XZW4 A 0 0
SurfaceSkin 0 6 ""
SurfaceSkin 0 9 "HellblazerMissile_Nuke.png"
FrameIndex XZW4 B 0 0
}
Model "HellblazerX"
{
Path "models"
Model 0 "HellblazerPickup_d.3d"
SurfaceSkin 0 1 "Hellblazer.png"
Scale 0.11 0.11 0.11
AngleOffset 180
ZOffset 20
ROTATING
DONTCULLBACKFACES
FrameIndex XZW1 A 0 0
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -14,7 +14,7 @@ GameInfo
"$QUITMSG12", "$QUITMSG13", "$QUITMSG14", "$QUITMSG15",
"$QUITMSG16", "$QUITMSG17", "$QUITMSG18", "$QUITMSG19"
ChatSound = "misc/chat"
DefaultConversationMenuClass = "SWWMConversationMenu"
//DefaultConversationMenuClass = "SWWMConversationMenu"
NoMergePickupMsg = true
CursorPic = "graphics/swwmcurs.png"
DimColor = "Black"

View file

@ -27,11 +27,9 @@ version "4.5"
#include "zscript/swwm_hud.zsc"
#include "zscript/swwm_hudextra.zsc"
#include "zscript/swwm_kbase.zsc"
#include "zscript/swwm_crimesdlg.zsc"
#include "zscript/swwm_menus.zsc"
#include "zscript/swwm_title.zsc"
#include "zscript/swwm_inter.zsc"
#include "zscript/swwm_strife.zsc"
#include "zscript/swwm_blod.zsc"
#include "zscript/swwm_help.zsc"
#include "zscript/swwm_credits.zsc"
@ -53,3 +51,24 @@ version "4.5"
#include "zscript/swwm_deathlydeathcannon.zsc"
#include "zscript/swwm_funstuff.zsc"
#include "zscript/swwm_keys.zsc"
// DLC1 - Weapon Set
//#include "zscript/dlc1/swwm_dlcammo.zsc"
//#include "zscript/dlc1/swwm_hammertime.zsc"
//#include "zscript/dlc1/swwm_rebolber.zsc"
//#include "zscript/dlc1/swwm_supermarioworld.zsc"
//#include "zscript/dlc1/swwm_heavymahsheengun.zsc"
//#include "zscript/dlc1/swwm_notashotgun.zsc"
//#include "zscript/dlc1/swwm_blackfire.zsc"
//#include "zscript/dlc1/swwm_veryveryfrightening.zsc"
//#include "zscript/dlc1/swwm_thiccbolts.zsc"
// DLC2 - Game Set
//#include "zscript/dlc2/swwm_tetris.zsc"
//#include "zscript/dlc2/swwm_pong.zsc"
//#include "zscript/dlc2/swwm_snake.zsc"
//#include "zscript/dlc2/swwm_demoland.zsc"
//#include "zscript/dlc2/swwm_demoshmup.zsc"
//#include "zscript/dlc2/swwm_demoquest.zsc"
// DLC3 - Strife Support
//#include "zscript/dlc3/swwm_crimesdlg.zsc"
//#include "zscript/dlc3/swwm_strife.zsc"
//#include "zscript/dlc3/swwm_hugeassrailgun.zsc"

View file

@ -0,0 +1 @@
// Demo Land Adventure game code

View file

@ -0,0 +1 @@
// Demolition Quest game code

View file

@ -0,0 +1 @@
// Interplanetary Demolitionist game code

View file

@ -0,0 +1 @@
// Pong game code

View file

@ -0,0 +1 @@
// Snake game code

View file

@ -0,0 +1 @@
// Tetris game code

View file

@ -0,0 +1,85 @@
// Kmonn Shuna Grand Lance (planned for unreleased SWWM Iridium)
// Slot 0, spawns shared with Ynykron Artifact
Class GrandSpear : MagAmmo
{
Default
{
Tag "$T_GRANDSPEAR";
Inventory.PickupMessage "$T_GRANDSPEAR";
Inventory.Icon "graphics/HUD/Icons/A_GrandSpear.png";
MagAmmo.ParentAmmo "GrandAmmo";
MagAmmo.ClipSize 5;
Inventory.MaxAmount 10;
Inventory.InterHubAmount 10;
+FLOATBOB;
FloatBobStrength 0.25;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class GrandAmmo : Ammo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Default
{
Tag "$T_GRANDAMMO";
Inventory.PickupMessage "$T_GRANDAMMO";
Stamina 1200000;
Inventory.Icon "graphics/HUD/Icons/A_RayAmmo.png";
Inventory.Amount 1;
Inventory.MaxAmount 2;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 6;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class GrandLance : SWWMWeapon
{
int clipcount;
Property ClipCount : clipcount;
Default
{
Tag "$T_GRANDLANCE";
Inventory.PickupMessage "$I_GRANDLANCE";
Obituary "$O_GRANDLANCE";
Inventory.Icon "graphics/HUD/Icons/W_GrandLance.png";
Weapon.SlotNumber 0;
Weapon.SlotPriority 2.;
Weapon.SelectionOrder 8000;
Weapon.AmmoType1 "GrandAmmo";
Weapon.AmmoGive1 1;
SWWMWeapon.DropAmmoType "GrandAmmo";
GrandLance.ClipCount 5;
Stamina 4200000;
+SWWMWEAPON.NOFIRSTGIVE;
+WEAPON.BFG;
+WEAPON.EXPLOSIVE;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}

View file

@ -1220,6 +1220,77 @@ Class HellblazerWarheadArm : Actor
}
}
Class HellblazerX : GhostArtifactX {}
Class HellblazerXSub : GhostArtifactX
{
Hellblazer weap;
int ridx;
Default
{
RenderStyle "Normal";
}
void UpdateMe()
{
static const Class<Ammo> types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"};
int curtype = 0;
for ( int i=0; i<4; i++ )
{
if ( weap.loadammo != types[i] ) continue;
curtype = i;
break;
}
static const int sofs[] = {1,7,10,13}; // offsets from SpawnState for each ammo type state label
int idx;
switch ( curtype )
{
case 0:
idx = ridx-weap.magpos;
if ( idx > 5 ) idx -= 6;
else if ( idx < 0 ) idx += 6;
if ( weap.magstate[ridx] ) SetState(SpawnState);
else SetState(SpawnState+sofs[0]+idx);
break;
case 1:
idx = ridx-weap.magpos;
if ( idx > 2 ) idx -= 3;
else if ( idx < 0 ) idx += 3;
if ( (ridx > 2) || weap.magstate[ridx] ) SetState(SpawnState);
else SetState(SpawnState+sofs[1]+idx);
break;
case 2:
idx = ridx-weap.magpos;
if ( idx > 2 ) idx -= 3;
else if ( idx < 0 ) idx += 3;
if ( (ridx > 2) || weap.magstate[ridx] ) SetState(SpawnState);
else SetState(SpawnState+sofs[2]+idx);
break;
case 3:
idx = ridx-weap.magpos;
if ( idx > 1 ) idx -= 2;
else if ( idx < 0 ) idx += 2;
if ( (ridx > 1) || weap.magstate[ridx] ) SetState(SpawnState);
else SetState(SpawnState+sofs[3]+idx);
break;
}
}
States
{
Spawn:
TNT1 A -1;
Missiles:
XZW1 ABCDEF -1;
Crackshots:
XZW2 ABC -1;
Ravagers:
XZW3 ABC -1;
Nukes:
XZW4 AB -1;
Stop;
}
}
Class Hellblazer : SWWMWeapon
{
int clipcount;
@ -1227,6 +1298,7 @@ Class Hellblazer : SWWMWeapon
int magpos; // current rotation
Class<Ammo> loadammo, nextammo;
int spinskipped;
HellblazerXSub pickuprockets[6];
Property ClipCount : clipcount;
@ -1542,6 +1614,41 @@ Class Hellblazer : SWWMWeapon
}
}
action void A_UpdatePickup()
{
static const Class<Ammo> types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"};
for ( int i=0; i<6; i++ )
{
if ( !invoker.pickuprockets[i] )
{
invoker.pickuprockets[i] = HellblazerXSub(Spawn("HellblazerXSub",pos));
invoker.pickuprockets[i].angle = angle;
invoker.pickuprockets[i].target = invoker;
invoker.pickuprockets[i].weap = invoker;
invoker.pickuprockets[i].FloatBobPhase = FloatBobPhase;
invoker.pickuprockets[i].ridx = i;
}
invoker.pickuprockets[i].UpdateMe();
}
int curtype = 0;
for ( int i=0; i<4; i++ )
{
if ( invoker.loadammo != types[i] ) continue;
curtype = i;
break;
}
SetState(SpawnState+curtype+1);
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
tracer = Spawn("HellblazerX",pos);
tracer.angle = angle;
tracer.target = self;
tracer.FloatBobPhase = FloatBobPhase;
}
Default
{
Tag "$T_HELLBLAZER";
@ -1564,7 +1671,8 @@ Class Hellblazer : SWWMWeapon
States
{
Spawn:
XZW1 A -1;
XZW1 A -1 NoDelay A_UpdatePickup();
XZW1 ABCD -1;
Stop;
Select:
XZW2 I 0

View file

@ -1430,11 +1430,14 @@ Class SWWMBulletTrail : LineTracer
Class SWWMShadow : Actor
{
Sector oldfloor;
transient CVar sdist;
static void Track( Actor other )
{
// prevent infinite recursion
if ( other is 'SWWMShadow' ) return;
// no shadows for overlay actors
if ( other is 'GhostArtifactX' ) return;
let s = SWWMShadow(Spawn("SWWMShadow",other.pos));
s.target = other;
s.Update(true);
@ -1448,6 +1451,10 @@ Class SWWMShadow : Actor
{
alpha = 1.-min(1.,.006*abs(target.pos.z-pos.z));
alpha *= target.alpha;
if ( !sdist ) sdist = CVar.GetCVar('swwm_shadowdist',players[consoleplayer]);
int sd = sdist.GetInt();
// breaks with chasecam, but it's fine
if ( sd > 0 ) alpha *= clamp(4.*((sd-Distance3D(players[consoleplayer].Camera))/sd),0.,1.);
double relz = target.pos.z-pos.z;
if ( target.bFLOATBOB ) relz += BobSin(target.FloatBobPhase)*target.FloatBobStrength;
double bscale = (target.radius/16.)*(1.-min(1.,.003*relz));
@ -1481,6 +1488,7 @@ Class SWWMShadow : Actor
{
RenderStyle "Shaded";
StencilColor "000000";
DistanceCheck 'swwm_shadowdist';
Radius .1;
Height 0.;
+NOBLOCKMAP;

View file

@ -187,6 +187,7 @@ Class SWWMCreditsMenu : GenericMenu
cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Pietro Gagliardi"));
cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Xada Xephron"));
cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Alexa Jones-Gonzales"));
cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"John"));
cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"NekoMithos"));
cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Holly_Rook"));
cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Namsan"));

View file

@ -319,13 +319,15 @@ Class GhostArtifactX : Actor
}
override void Tick()
{
Super.Tick();
if ( !target )
{
Destroy();
return;
}
Warp(target,flags:WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION);
vel = target.vel;
prev = target.prev;
SetOrigin(target.pos+vel,true);
A_SetAngle(target.angle,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
bInvisible = target.bInvisible||!target.InStateSequence(target.CurState,target.FindState("Spawn"));
}