Added terrain effects for Doom.

Typo fixes and various adjustmentifications.
Fixed the Tier 4 ammo fabricator not working at all.
This commit is contained in:
Mari the Deer 2020-03-04 21:02:51 +01:00
commit 4cc278c747
84 changed files with 426 additions and 37 deletions

View file

@ -21,3 +21,4 @@ Most of the work here is original, but there are some notable exceptions:
- Tewi font by lucy (https://github.com/lucy/tewi-font). Modified to add gradients and drop shadow.
- MPlus font by M⁺ FONTS PROJECT (http://mplus-fonts.osdn.jp/mplus-bitmap-fonts). Modified to add gradients and drop shadow.
- Miniwi font by Josuah Demangeon (http://josuah.net). Modified to add gradients and drop shadow.
- Terrain splashes for Doom by MagicWazard.

View file

@ -0,0 +1,7 @@
Submitted: MagicWazard
Decorate: MagicWazard
GLDefs: MagicWazard
Sounds: Raven Software
Sprites: Raven Software
Sprite Edit: MagicWazard
Idea Base: Heretic/Hexen splashes

View file

@ -0,0 +1,38 @@
//mud--a brown variant of the "sludge" that better fits Doom's brown sludgy textures
ACTOR MudChunk
{
Radius 2
Height 4
+NOBLOCKMAP
+MISSILE
+DROPOFF
+NOTELEPORT
+LOWGRAVITY
+CANNOTPUSH
+DONTSPLASH
States
{
Spawn:
MUDS ABCD 8
Stop
Death:
MUDS D 6
Stop
}
}
ACTOR MudSplash
{
+NOBLOCKMAP
+NOCLIP
+NOGRAVITY
+DONTSPLASH
States
{
Spawn:
MUDS EFGH 6
Stop
}
}
//note that all other "chunk" actors utilized in "TERRAIN" are stock classes included with zDoom's .PK3 file

View file

@ -0,0 +1,49 @@
//brightmaps for the slime (nukage) splash actors
//without these, they're hard to see against the nukage flat if used in gzDoom with brightmap support
BrightMap Sprite SLIMA0
{
Map BMSLIMA0
DisableFullBright
}
BrightMap Sprite SLIMB0
{
Map BMSLIMB0
DisableFullBright
}
BrightMap Sprite SLIMC0
{
Map BMSLIMC0
DisableFullBright
}
BrightMap Sprite SLIMD0
{
Map BMSLIMD0
DisableFullBright
}
BrightMap Sprite SLIME0
{
Map BMSLIME0
DisableFullBright
}
BrightMap Sprite SLIMF0
{
Map BMSLIMF0
DisableFullBright
}
BrightMap Sprite SLIMG0
{
Map BMSLIMG0
DisableFullBright
}
BrightMap Sprite SLIMH0
{
Map BMSLIMH0
DisableFullBright
}

View file

@ -0,0 +1,14 @@
Type: Terrain splash effects for Doom flats
Connections: Raven splash FX (included), zDoom default splash "chunk" actors
Spawn Offsets: N/A
Documentation: Yes (in TERRAIN lump)
Spawn Ceiling: No
Variants: 7 - Water, Sludge, Lava, Blood, Slime (Nukage), Mud, Sizzle
Summon: N/A
Brightmaps: Yes
ACS: No
Provides splash effects for Doom flats. Includes water, sludge, and lava from
Heretic/Hexen, as well as blood, slime (nukage), and mud, and a "sizzle" effect
for hot non-liquid floors.

View file

@ -0,0 +1,11 @@
//splashes (duped from Heretic and Hexen, since they don't load in Doom natively by default)
world/drip gloop
world/watersplash gloop
world/lavasizzle acid5
world/sludgegloop muck5
//you can override the limit values so multiple splashes can play simultaneously
//note that this sounds bad if multiple splashes play all at once (such as when firing a shotgun into liquid), so override these values at your own discretion
/*$Limit world/drip 4
$Limit world/watersplash 4
$Limit world/lavasizzle 4
$Limit world/sludgegloop 4*/

View file

@ -0,0 +1,260 @@
//This is where all the different Doom-compatible terrains are defined
//note that Water, Sludge, and Lava are available already in zDoom, but these versions have some modifications from the existing ones
//the "base" and "chunk" actor classes used in each splash are the versions provided by zDoom, except for "Mud", which is a new definition
//footclip value for each terrain is commented out, so actors will "stand on" the fluid like in stock Doom
//if you want the fluids to behave like in Raven, so actors will "sink" in them, re-enable the footclip value
//also, I removed the smallclip value from each splash, since they tended to get culled by the floor when the matching terrain has no footclip value defined;
//if you put the footclip value back in, then set the smallclip value for each splash back to "12", so they look right
//sludge, slime, and lava deal no damage; I assume that you'll want to handle damage through sector properties like stock Doom
//you can easily modify this if you want, though; placeholder values are present for each terrain type, but commented out
//lastly, the default zDoom (and Hexen) versions of the splashes alert monsters; I removed this property from mine
//if you want splash noises to alert monsters, then remove "noalert" from each splash definition
//water splash
splash DoomWater
{
smallclass WaterSplashBase
smallclip 0
smallsound world/drip
baseclass WaterSplashBase
chunkclass WaterSplash
chunkxvelshift 8
chunkyvelshift 8
chunkzvelshift 8
chunkbasezvel 2
sound world/watersplash
noalert
}
terrain DoomWater
{
splash DoomWater
//footclip 10
liquid
}
//sludge splash
splash DoomSludge
{
smallclass SludgeSplash
smallclip 0
smallsound world/sludgegloop
baseclass SludgeSplash
chunkclass SludgeChunk
chunkxvelshift 8
chunkyvelshift 8
chunkzvelshift 8
chunkbasezvel 1
sound world/sludgegloop
noalert
}
terrain DoomSludge
{
splash DoomSludge
//footclip 10
liquid
//damageamount 5
//damagetype slime
//damagetimemask 34
//allowprotection
}
//lava
splash DoomLava
{
smallclass LavaSplash
smallclip 0
smallsound world/lavasizzle
baseclass LavaSplash
chunkclass LavaSmoke
chunkxvelshift -1
chunkyvelshift -1
chunkzvelshift 7
chunkbasezvel 1
sound world/lavasizzle
noalert
}
terrain DoomLava
{
splash DoomLava
//footclip 10
liquid
//damageamount 10
//damagetype lava
//damagetimemask 34
//allowprotection
}
//blood
splash DoomBlood
{
smallclass BloodSplashBase
smallclip 0
smallsound world/drip
baseclass BloodSplashBase
chunkclass BloodSplash
chunkxvelshift 8
chunkyvelshift 8
chunkzvelshift 8
chunkbasezvel 2
sound world/watersplash
noalert
}
terrain DoomBlood
{
splash DoomBlood
//footclip 10
liquid
}
//nukage slime
splash DoomSlime
{
smallclass SlimeSplash
smallclip 0
smallsound world/sludgegloop
baseclass SlimeSplash
chunkclass SlimeChunk
chunkxvelshift 8
chunkyvelshift 8
chunkzvelshift 8
chunkbasezvel 1
sound world/sludgegloop
noalert
}
terrain DoomSlime
{
splash DoomSlime
//footclip 10
liquid
//damageamount 5
//damagetype slime
//damagetimemask 34
//allowprotection
}
//brown muddy slime; based off sludge
splash DoomMud
{
smallclass MudSplash
smallclip 0
smallsound world/sludgegloop
baseclass MudSplash
chunkclass MudChunk
chunkxvelshift 8
chunkyvelshift 8
chunkzvelshift 8
chunkbasezvel 1
sound world/sludgegloop
noalert
}
terrain DoomMud
{
splash DoomMud
//footclip 10
liquid
}
//sizzle effect for "hot" floors, like the glowing rock textures
splash DoomSizzle
{
smallclass LavaSmoke
smallclip 0
smallsound world/lavasizzle
baseclass LavaSmoke
chunkclass none
chunkxvelshift -1
chunkyvelshift -1
chunkzvelshift 7
chunkbasezvel 1
sound world/lavasizzle
noalert
}
terrain DoomSizzle
{
splash DoomSizzle
//damageamount 5
//damagetype lava
//damagetimemask 34
//allowprotection
}
//terrains are assigned to flats here
//follow this template to add terrain support to your custom flats
//water
floor fwater1 Doomwater
floor fwater2 Doomwater
floor fwater3 Doomwater
floor fwater4 Doomwater
//sludge
//(note that Heretic's sludge doesn't really fit any stock Doom flats, but it's included in case you want it for custom flats
//lava
floor lava1 DoomLava
floor lava2 DoomLava
floor lava3 DoomLava
floor lava4 DoomLava
//blood
floor blood1 DoomBlood
floor blood2 DoomBlood
floor blood3 DoomBlood
//slime
floor nukage1 DoomSlime
floor nukage2 DoomSlime
floor nukage3 DoomSlime
//muddy sludge
floor slime01 DoomMud
floor slime02 DoomMud
floor slime03 DoomMud
floor slime04 DoomMud
floor slime05 DoomMud
floor slime06 DoomMud
floor slime07 DoomMud
floor slime08 DoomMud
//sizzling hot floors
floor rrock01 DoomSizzle
floor rrock02 DoomSizzle
floor rrock05 DoomSizzle
floor rrock06 DoomSizzle
floor rrock07 DoomSizzle
floor rrock08 DoomSizzle
floor slime09 DoomSizzle
floor slime10 DoomSizzle
floor slime11 DoomSizzle
floor slime12 DoomSizzle

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,008 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -249,7 +249,7 @@ SWWM_LORETXT_ARGENT =
"Classification: Pure source of energy\n"
"Location: Hell\n"
"\n"
"Summary: An almost limitless source of pure energy found by the UAC in Mars, and further tracked down to Hell itself. The corporation has worked hard to turn raw Argent Plasma it into a clean and efficient alternative to other sources of energy that are no longer viable.\n"
"Summary: An almost limitless source of pure energy found by the UAC in Mars, and further tracked down to Hell itself. The corporation has worked hard to turn raw Argent Plasma into a clean and efficient alternative to other sources of energy that are no longer viable.\n"
"\n"
"Addendum: The true nature of this energy is not very well known, but due to its natural origin on Hell some have wildly theorized that it may be the souls of the dead.\n"
"\n"
@ -955,7 +955,7 @@ SWWM_LORETXT_NEKURATEK =
"\n"
"Summary: Nekuratek was founded by Zanata Nekuraku I in 1744, as Nekuraku Rafana Sakosai (Nekuraku Arms Manufactory), it quickly became the main provider of weaponry for the Nukuri Empire. Following the death of Zanata I in 1870, the company's leadership was transferred to her granddaughter Zanata II, who decided to further expand into other fields, such as robotics and information technology, and gradually began to cut down on the fabrication of weaponry. Since the fall of the empire, the company is dedicated entirely to robotics and computing, with their old arms manufactory division being split off and led by Zanata II's son Zanaveth I. The last transfer of leadership was to Zanaveth II in 2128.\n"
"\n"
"Addendum: Nekuratek is most famous for the creation of the Nekern Architecture, a human-compatible hardware platform that powers all Nukuri systems, and the Nekronbot AI, a lifelike, highly expandable artificial intelligence framework that's been used for various things, from personal assistant bots to self-driving vehicles.\n"
"Addendum: Nekuratek is most famous for the creation of the Nekern Architecture, a human-compatible hardware platform that powers all Nukuri systems, and the Nekuronbot AI, a lifelike, highly expandable artificial intelligence framework that's been used for various things, from personal assistant bots to self-driving vehicles.\n"
"\n"
"Saya's Note: Good people to work with, especially Zana-sama. She's a lot more outgoing than her predecessor, that's for sure, and much cuter, too, heheh...";
SWWM_LORETAG_NOKRONKINY = "Nokron & Kinylum";
@ -1001,7 +1001,7 @@ SWWM_LORETXT_NUGGET =
"Designation: Health/Armor Nuggets\n"
"Manufacturer: Unknown\n"
"\n"
"Summary: Small chunks of inteterminate composition found in large amounts within a cave system below the ancient ruins in Sedna. It appears that when held tightly in one's grasp, they \"melt\" into the body and either heal one's wounds or strengthen the natural resistances of their bodies, thus being divided between \"Health\" and \"Armor\" Nuggets.\n"
"Summary: Small chunks of indeterminate composition found in large amounts within a cave system below the ancient ruins in Sedna. It appears that when held tightly in one's grasp, they \"melt\" into the body and either heal one's wounds or strengthen the natural resistances of their bodies, thus being divided between \"Health\" and \"Armor\" Nuggets.\n"
"\n"
"Addendum: Excessive usage of these materials does not appear to carry any risk.\n"
"\n"
@ -1308,7 +1308,7 @@ SWWM_LORETXT_UNISSIX =
"Nationality: Devanikan\n"
"Date Of Birth: 1992-02-29\n"
"\n"
"Summary: Misa is the lead weapon and armor designer of the entire Unissix family. Starting at a very early age, her fascination with weponry has always been quite noticeable. Despite a strong fighting spirit, she lacks the physical prowess required to be a warrior, so she's dedicated herself entirely to her craft. Misa is highly skilled in the interpretation of ancient designs, and is thus often tasked with recreating lost technology. This has included the various Artifacts of Nedoshiaan.\n"
"Summary: Misa is the lead weapon and armor designer of the entire Unissix family. Starting at a very early age, her fascination with weaponry has always been quite noticeable. Despite a strong fighting spirit, she lacks the physical prowess required to be a warrior, so she's dedicated herself entirely to her craft. Misa is highly skilled in the interpretation of ancient designs, and is thus often tasked with recreating lost technology. This has included the various Artifacts of Nedoshiaan.\n"
"\n"
"Addendum: Rose to fame on Earth during a visit from Zanaveth II, her wife, who leads Nekuratek, a massive tech giant in the Nukuri homeworld. Misa is a big fan of videogames, finding it rather exciting to finally be able to go on adventures of her own, without having to put much physical effort into it.\n"
"\n"

View file

@ -316,6 +316,7 @@ demolitionist/kick2 sounds/demolitionist/demokick2.ogg
demolitionist/kick3 sounds/demolitionist/demokick3.ogg
$random demolitionist/kick { demolitionist/kick1 demolitionist/kick2 demolitionist/kick3 }
demolitionist/revive sounds/demolitionist/demorevive.ogg
demolitionist/youdied sounds/demolitionist/demoded.ogg
$playersound demolitionist neutral *grunt DSEMPTY
$playeralias demolitionist neutral *pain100 demolitionist/lopain
@ -628,6 +629,7 @@ menu/demosel sounds/menu/menuset.ogg
menu/demoscroll sounds/menu/menuscroll.ogg
menu/democlose sounds/menu/menuclose.ogg
menu/fail sounds/menu/failuse.ogg
menu/noinvuse sounds/menu/failinv.ogg
menu/buyinv sounds/menu/buysnd.ogg

Binary file not shown.

View file

@ -918,6 +918,7 @@ Class FabricatorTier4 : AmmoFabricator
Inventory.MaxAmount 5;
AmmoFabricator.Budget int.max;
AmmoFabricator.PerType int.max;
AmmoFabricator.MaxUnitPrice int.max;
-INVENTORY.AUTOACTIVATE;
Stamina 1920000;
}

View file

@ -2381,11 +2381,11 @@ Class SWWMHandler : EventHandler
Shader.SetUniform1f(p,"Grain","Timer",(gametic+e.FracTic)/Thinker.TICRATE);
int lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80);
int lastdmgtic = (demo.Health>0)?demo.lastdamagetic:(gametic+Random[Flicker](30,20));
double noiz = min(lastdmg*.3*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.7);
double noiz = min(lastdmg*.09*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.5);
Shader.SetUniform1f(p,"Grain","ni",noiz);
noiz = min(lastdmg*.16*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.8);
noiz = min(lastdmg*.08*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.8);
Shader.SetUniform1f(p,"Glitch","str1",noiz);
noiz = min(lastdmg*.12*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),3.5);
noiz = min(lastdmg*.03*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),3.5);
Shader.SetUniform1f(p,"Glitch","str2",noiz);
}
else

View file

@ -822,35 +822,36 @@ Class SWWMStatusBar : BaseStatusBar
if ( demo.player.viewheight <= 6 )
{
Screen.Dim("Black",min(demo.deadtimer/80.,1.),0,0,Screen.GetWidth(),Screen.GetHeight());
if ( demo.revivefail > level.maptime )
{
Screen.Dim("Red",clamp((demo.revivefail-level.maptime)/60.,0.,.2),0,0,Screen.GetWidth(),Screen.GetHeight());
str = StringTable.Localize("$SWWM_REFAIL");
len = mTewiFont.mFont.StringWidth(str);
xx = (ss.x-len)/2.;
yy = ss.y-48;
if ( (gametic%16) < 8 )
Screen.DrawText(mTewiFont.mFont,Font.CR_RED,xx,yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
}
alph = clamp((demo.deadtimer-60)/60.,0.,1.);
str = String.Format(StringTable.Localize("$SWWM_URDED"),CPlayer.GetUserName());
len = mTewiFont.mFont.StringWidth(str);
xx = (ss.x-len)/2.;
yy = (ss.y-mTewiFont.mFont.GetHeight()*4)/2.;
Screen.DrawText(mTewiFont.mFont,Font.CR_RED,xx,yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
alph = clamp((demo.deadtimer-120)/60.,0.,1.);
alph = clamp((demo.deadtimer-140)/60.,0.,1.);
str = String.Format(StringTable.Localize("$SWWM_URDED2"),CPlayer.GetUserName());
len = mTewiFont.mFont.StringWidth(str);
xx = (ss.x-len)/2.;
yy = ss.y/2.;
Screen.DrawText(mTewiFont.mFont,Font.CR_RED,xx,yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
Screen.DrawText(mTewiFont.mFont,Font.CR_WHITE,xx,yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
if ( !swwm_revive )
return;
alph = clamp((demo.deadtimer-200)/60.,0.,1.);
alph = clamp((demo.deadtimer-160)/60.,0.,1.);
str = String.Format(StringTable.Localize("$SWWM_URDED3"),CPlayer.GetUserName());
len = mTewiFont.mFont.StringWidth(str);
xx = (ss.x-len)/2.;
yy = (ss.y+mTewiFont.mFont.GetHeight()*2)/2.;
Screen.DrawText(mTewiFont.mFont,Font.CR_RED,xx,yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
if ( demo.revivefail > level.maptime )
{
str = StringTable.Localize("$SWWM_REFAIL");
len = mTewiFont.mFont.StringWidth(str);
xx = (ss.x-len)/2.;
yy = ss.y-30;
if ( (gametic%12) < 6 )
Screen.DrawText(mTewiFont.mFont,Font.CR_RED,xx,yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
}
Screen.DrawText(mTewiFont.mFont,Font.CR_WHITE,xx,yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
}
}

View file

@ -106,7 +106,7 @@ Class SWWMSpareArmor : Inventory abstract
else shouldautouse = CVar.GetCVar('swwm_autousearmor',Owner.player).GetBool();
if ( pickup && !shouldautouse ) return false;
let cur = Owner.FindInventory(giveme);
if ( !cur || (cur.Amount <= 0) )
if ( !cur || (!pickup && (cur.Amount < cur.MaxAmount)) || (Amount+cur.Amount <= cur.MaxAmount) )
{
Owner.GiveInventory(giveme,GetDefaultByType(giveme).Amount);
if ( UseSound ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_DEFAULT,.6);

View file

@ -9,7 +9,8 @@ Class Demolitionist : PlayerPawn
bool sendtoground;
bool key_reentrant;
int lastdamage, lastdamagetic;
int lastdamage;
transient int lastdamagetic;
bool lastground;
int lastgroundtic;
double lastvelz, prevvelz;
@ -33,7 +34,8 @@ Class Demolitionist : PlayerPawn
};
int lastunder;
int deadtimer, revivefail;
int deadtimer;
transient int revivefail;
Default
{
@ -505,7 +507,7 @@ Class Demolitionist : PlayerPawn
if ( Health < 25 ) damage /= 4;
if ( source == self ) damage /= 2;
lastdamage = Super.DamageMobj(inflictor,source,damage,mod,flags,angle);
lastdamagetic = max(lastdamagetic,gametic+clamp(lastdamage,10,80));
lastdamagetic = max(lastdamagetic,gametic+clamp(lastdamage/2,10,40));
if ( (lastdamage > 0) && (PainChance == 0) && (level.maptime>lastmpain) )
{
lastmpain = level.maptime;
@ -600,11 +602,11 @@ Class Demolitionist : PlayerPawn
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
Vector3 accel = x*player.cmd.forwardmove+y*player.cmd.sidemove+z*player.cmd.upmove;
accel *= fs/128.;
vel = vel+accel/TICRATE;
if ( vel.length() > 50. )
vel = vel.unit()*50.;
vel *= .99;
accel *= fs/320.;
double spd = vel.length();
if ( spd > 40. ) vel = (vel+accel/TICRATE).unit()*spd;
else vel = vel+accel/TICRATE;
vel *= .97;
player.vel = (1,1)*vel.length();
player.jumptics = -2;
if ( !(player.cheats & CF_PREDICTING) && (player.cmd.forwardmove|player.cmd.sidemove) )
@ -823,6 +825,8 @@ Class Demolitionist : PlayerPawn
if ( player.viewheight <= 6 )
{
deadtimer++;
if ( deadtimer == 60 )
A_StartSound("demolitionist/youdied",CHAN_DEMOVOICE,CHANF_OVERLAP|CHANF_UI|CHANF_LOCAL);
if ( multiplayer || level.AllowRespawn || sv_singleplayerrespawn || G_SkillPropertyInt(SKILLP_PlayerRespawn) )
{
// standard behaviour, respawn normally
@ -833,14 +837,14 @@ Class Demolitionist : PlayerPawn
if ( special1 > 2 ) special1 = 0;
}
}
else if ( (player.cmd.buttons&BT_USE) && (deadtimer > 150) )
else if ( (player.cmd.buttons&BT_USE) && (deadtimer > 120) )
{
// reload save
player.cls = null;
player.playerstate = PST_ENTER;
if ( special1 > 2 ) special1 = 0;
}
else if ( (player.cmd.buttons&BT_ATTACK) && (deadtimer > 150) && swwm_revive )
else if ( (player.cmd.buttons&BT_ATTACK) && (deadtimer > 120) && swwm_revive )
{
// reboot (if possible)
if ( !FindInventory("ReviveCooldown") )
@ -865,11 +869,10 @@ Class Demolitionist : PlayerPawn
if ( swwm_revivecooldown > 0 )
GiveInventory("ReviveCooldown",1);
}
else
else if ( level.maptime > revivefail )
{
A_StartSound("*usefail",CHAN_ITEM,CHANF_UI|CHANF_LOCAL);
SWWMHandler.DoFlash(self,Color(64,255,0,0),30);
revivefail = level.maptime+20;
A_StartSound("menu/fail",CHAN_ITEM,CHANF_UI|CHANF_LOCAL);
revivefail = level.maptime+70;
}
}
}

View file

@ -1277,13 +1277,15 @@ Class TheBall : Actor
// slam jam
if ( bleeds )
{
A_StartSound("spreadgun/ballf",CHAN_VOICE,CHANF_OVERLAP,(vel.length()/75.)**.5);
A_StartSound("spreadgun/ballf",CHAN_VOICE,CHANF_OVERLAP,(vel.length()/40.)**.5);
victim.A_StartSound("spreadgun/ballf",CHAN_FOOTSTEP,CHANF_OVERLAP,(vel.length()/40.)**.5);
victim.TraceBleed(dmg,self);
SpawnBlood(pos,atan2(dir.y,dir.x),dmg);
}
else
{
A_StartSound("spreadgun/ball",CHAN_VOICE,CHANF_OVERLAP,(vel.length()/75.)**.5);
A_StartSound("spreadgun/ball",CHAN_VOICE,CHANF_OVERLAP,(vel.length()/40.)**.5);
victim.A_StartSound("spreadgun/ball",CHAN_FOOTSTEP,CHANF_OVERLAP,(vel.length()/40.)**.5);
if ( vel.length() > 15 )
{
let s = Spawn("BallImpact",pos);