Add mugshot to HUD.
|
|
@ -122,6 +122,7 @@ server bool swwm_extendedpickup = false; // items will have an additional "virtu
|
||||||
nosave bool swwm_voicelog = false; // adds player voicelines to the message log
|
nosave bool swwm_voicelog = false; // adds player voicelines to the message log
|
||||||
nosave bool swwm_skipskill = false; // skips skill confirmations
|
nosave bool swwm_skipskill = false; // skips skill confirmations
|
||||||
nosave bool swwm_hudtrimammo = false; // only show ammo for owned weapons
|
nosave bool swwm_hudtrimammo = false; // only show ammo for owned weapons
|
||||||
|
nosave bool swwm_hudmugshot = true; // show an animated mugshot in the hud
|
||||||
|
|
||||||
// minimap settings
|
// minimap settings
|
||||||
nosave bool swwm_mm_enable = true; // show a minimap below the score counter
|
nosave bool swwm_mm_enable = true; // show a minimap below the score counter
|
||||||
|
|
|
||||||
36
gldefs.misc
|
|
@ -1,10 +1,3 @@
|
||||||
HardwareShader Texture "graphics/HUD/HealthBarS.png"
|
|
||||||
{
|
|
||||||
Shader "shaders/glsl/Fuzz.fp"
|
|
||||||
Define "GRAY_COLORS"
|
|
||||||
Define "BASE_RES" = "vec2(100.,12.)"
|
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
|
||||||
}
|
|
||||||
HardwareShader Texture "graphics/HUD/EnemyBarS.png"
|
HardwareShader Texture "graphics/HUD/EnemyBarS.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/Fuzz.fp"
|
Shader "shaders/glsl/Fuzz.fp"
|
||||||
|
|
@ -12,46 +5,37 @@ HardwareShader Texture "graphics/HUD/EnemyBarS.png"
|
||||||
Define "BASE_RES" = "vec2(50.,3.)"
|
Define "BASE_RES" = "vec2(50.,3.)"
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
Texture "noisetex" "textures/graynoise.png"
|
||||||
}
|
}
|
||||||
HardwareShader Texture "graphics/HUD/FuelBarS.png"
|
HardwareShader Texture "graphics/HUD/HealthBarS.png"
|
||||||
{
|
|
||||||
Shader "shaders/glsl/Fuzz.fp"
|
|
||||||
Define "GRAY_COLORS"
|
|
||||||
Define "BASE_RES" = "vec2(120.,3.)"
|
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
|
||||||
}
|
|
||||||
HardwareShader Texture "graphics/AltHUD/HealthBarS.png"
|
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/Fuzz.fp"
|
Shader "shaders/glsl/Fuzz.fp"
|
||||||
Define "GRAY_COLORS"
|
Define "GRAY_COLORS"
|
||||||
Define "BASE_RES" = "vec2(100.,5.)"
|
Define "BASE_RES" = "vec2(100.,5.)"
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
Texture "noisetex" "textures/graynoise.png"
|
||||||
}
|
}
|
||||||
HardwareShader Texture "graphics/AltHUD/FuelBarS.png"
|
HardwareShader Texture "graphics/HUD/FuelBarS.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/Fuzz.fp"
|
Shader "shaders/glsl/Fuzz.fp"
|
||||||
Define "GRAY_COLORS"
|
Define "GRAY_COLORS"
|
||||||
Define "BASE_RES" = "vec2(120.,2.)"
|
Define "BASE_RES" = "vec2(120.,2.)"
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
Texture "noisetex" "textures/graynoise.png"
|
||||||
}
|
}
|
||||||
HardwareShader Texture "graphics/HUD/HealthBarD.png"
|
|
||||||
{
|
|
||||||
Shader "shaders/glsl/HealthBarD.fp"
|
|
||||||
Define "TEX_SIZE" = "vec2(120.,32.)"
|
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
|
||||||
}
|
|
||||||
HardwareShader Texture "graphics/HUD/EnemyBarD.png"
|
HardwareShader Texture "graphics/HUD/EnemyBarD.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/HealthBarD.fp"
|
Shader "shaders/glsl/HealthBarD.fp"
|
||||||
Define "TEX_SIZE" = "vec2(70.,23.)"
|
Define "TEX_SIZE" = "vec2(70.,23.)"
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
Texture "noisetex" "textures/graynoise.png"
|
||||||
}
|
}
|
||||||
|
HardwareShader Texture "graphics/HUD/HealthBarD.png"
|
||||||
HardwareShader Texture "graphics/AltHUD/HealthBarD.png"
|
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/HealthBarD.fp"
|
Shader "shaders/glsl/HealthBarD.fp"
|
||||||
Define "TEX_SIZE" = "vec2(120.,25.)"
|
Define "TEX_SIZE" = "vec2(120.,25.)"
|
||||||
Texture "noisetex" "textures/graynoise.png"
|
Texture "noisetex" "textures/graynoise.png"
|
||||||
}
|
}
|
||||||
|
HardwareShader Texture "graphics/HUD/DemoFace_Barrier.png"
|
||||||
|
{
|
||||||
|
Shader "shaders/glsl/BarrierFace.fp"
|
||||||
|
Texture "bartex" "models/barrierbar.png"
|
||||||
|
}
|
||||||
HardwareShader Texture "graphics/tempbg.png"
|
HardwareShader Texture "graphics/tempbg.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/Fuzz.fp"
|
Shader "shaders/glsl/Fuzz.fp"
|
||||||
|
|
@ -156,10 +140,6 @@ HardwareShader Texture "graphics/M_DEMOCHAN_THUMBUP.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/Bilinear.fp"
|
Shader "shaders/glsl/Bilinear.fp"
|
||||||
}
|
}
|
||||||
HardwareShader Texture "graphics/UnSXLogo.png"
|
|
||||||
{
|
|
||||||
Shader "shaders/glsl/Bilinear.fp"
|
|
||||||
}
|
|
||||||
HardwareShader Sprite "MBRNB0"
|
HardwareShader Sprite "MBRNB0"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/Whew.fp"
|
Shader "shaders/glsl/Whew.fp"
|
||||||
|
|
|
||||||
BIN
graphics/HUD/DemoFace_Angerage.png
Normal file
|
After Width: | Height: | Size: 185 B |
BIN
graphics/HUD/DemoFace_Angery.png
Normal file
|
After Width: | Height: | Size: 185 B |
BIN
graphics/HUD/DemoFace_Barrier.png
Normal file
|
After Width: | Height: | Size: 151 B |
BIN
graphics/HUD/DemoFace_Blink.png
Normal file
|
After Width: | Height: | Size: 107 B |
BIN
graphics/HUD/DemoFace_Booty.png
Normal file
|
After Width: | Height: | Size: 126 B |
BIN
graphics/HUD/DemoFace_Dead.png
Normal file
|
After Width: | Height: | Size: 114 B |
BIN
graphics/HUD/DemoFace_Default.png
Normal file
|
After Width: | Height: | Size: 114 B |
BIN
graphics/HUD/DemoFace_Dizzy.png
Normal file
|
After Width: | Height: | Size: 119 B |
BIN
graphics/HUD/DemoFace_Evil.png
Normal file
|
After Width: | Height: | Size: 120 B |
BIN
graphics/HUD/DemoFace_Flash.png
Normal file
|
After Width: | Height: | Size: 327 B |
BIN
graphics/HUD/DemoFace_Grin.png
Normal file
|
After Width: | Height: | Size: 111 B |
BIN
graphics/HUD/DemoFace_Head.png
Normal file
|
After Width: | Height: | Size: 401 B |
BIN
graphics/HUD/DemoFace_Hurt.png
Normal file
|
After Width: | Height: | Size: 115 B |
BIN
graphics/HUD/DemoFace_HurtLeft.png
Normal file
|
After Width: | Height: | Size: 123 B |
BIN
graphics/HUD/DemoFace_HurtRight.png
Normal file
|
After Width: | Height: | Size: 123 B |
BIN
graphics/HUD/DemoFace_Off.png
Normal file
|
After Width: | Height: | Size: 185 B |
BIN
graphics/HUD/DemoFace_Ouch.png
Normal file
|
After Width: | Height: | Size: 131 B |
BIN
graphics/HUD/DemoFace_Rage.png
Normal file
|
After Width: | Height: | Size: 185 B |
BIN
graphics/HUD/DemoFace_Sad.png
Normal file
|
After Width: | Height: | Size: 118 B |
BIN
graphics/HUD/DemoFace_Smug.png
Normal file
|
After Width: | Height: | Size: 122 B |
BIN
graphics/HUD/DemoFace_Unamused.png
Normal file
|
After Width: | Height: | Size: 112 B |
BIN
graphics/HUD/DemoFace_Wink.png
Normal file
|
After Width: | Height: | Size: 116 B |
|
|
@ -208,6 +208,7 @@ SWWM_EXTENDEDPICKUP = "Extend Item Size";
|
||||||
SWWM_VOICELOG = "Log Player Comments";
|
SWWM_VOICELOG = "Log Player Comments";
|
||||||
SWWM_SKIPSKILL = "Skip Skill Confirmation";
|
SWWM_SKIPSKILL = "Skip Skill Confirmation";
|
||||||
SWWM_HUDTRIMAMMO = "Trim Ammo List";
|
SWWM_HUDTRIMAMMO = "Trim Ammo List";
|
||||||
|
SWWM_HUDMUGSHOT = "Face In HUD";
|
||||||
SWWM_MMTITLE = "Minimap Settings";
|
SWWM_MMTITLE = "Minimap Settings";
|
||||||
SWWM_MM_ENABLE = "Show Minimap";
|
SWWM_MM_ENABLE = "Show Minimap";
|
||||||
SWWM_MM_ROTATE = "Rotate Minimap";
|
SWWM_MM_ROTATE = "Rotate Minimap";
|
||||||
|
|
@ -378,6 +379,7 @@ TOOLTIP_SWWM_EXTENDEDPICKUP = "Gives all items a vanilla-sized \"virtual hitbox\
|
||||||
TOOLTIP_SWWM_VOICELOG = "Subtitled player comments will be saved to the Messages tab of the Demolitionist Menu.";
|
TOOLTIP_SWWM_VOICELOG = "Subtitled player comments will be saved to the Messages tab of the Demolitionist Menu.";
|
||||||
TOOLTIP_SWWM_SKIPSKILL = "Skips confirmation of skill selection, if you get tired of seeing it every time.";
|
TOOLTIP_SWWM_SKIPSKILL = "Skips confirmation of skill selection, if you get tired of seeing it every time.";
|
||||||
TOOLTIP_SWWM_HUDTRIMAMMO = "Only shows ammo for currently carried weapons in the HUD.";
|
TOOLTIP_SWWM_HUDTRIMAMMO = "Only shows ammo for currently carried weapons in the HUD.";
|
||||||
|
TOOLTIP_SWWM_HUDMUGSHOT = "Shows the Demolitionist's face in the HUD, for a more classic touch.";
|
||||||
TOOLTIP_SWWMMINIMAPMENU = "Configure the minimap.";
|
TOOLTIP_SWWMMINIMAPMENU = "Configure the minimap.";
|
||||||
TOOLTIP_SWWMACHIEVEMENTMENU = "View your achievements.";
|
TOOLTIP_SWWMACHIEVEMENTMENU = "View your achievements.";
|
||||||
TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter.";
|
TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter.";
|
||||||
|
|
|
||||||
|
|
@ -207,6 +207,7 @@ SWWM_EXTENDEDPICKUP = "Extender Tamaño de Ítem";
|
||||||
SWWM_VOICELOG = "Registrar Comentarios de Jugador";
|
SWWM_VOICELOG = "Registrar Comentarios de Jugador";
|
||||||
SWWM_SKIPSKILL = "Saltar Confirmación de Dificultad";
|
SWWM_SKIPSKILL = "Saltar Confirmación de Dificultad";
|
||||||
SWWM_HUDTRIMAMMO = "Recortar Lista de Munición";
|
SWWM_HUDTRIMAMMO = "Recortar Lista de Munición";
|
||||||
|
SWWM_HUDMUGSHOT = "Rostro en el HUD";
|
||||||
SWWM_MMTITLE = "Opciones de Minimapa";
|
SWWM_MMTITLE = "Opciones de Minimapa";
|
||||||
SWWM_MM_ENABLE = "Mostrar Minimapa";
|
SWWM_MM_ENABLE = "Mostrar Minimapa";
|
||||||
SWWM_MM_ROTATE = "Rotar Minimapa";
|
SWWM_MM_ROTATE = "Rotar Minimapa";
|
||||||
|
|
@ -382,6 +383,7 @@ TOOLTIP_SWWM_EXTENDEDPICKUP = "Da a todos los ítems una \"hitbox virtual\" de t
|
||||||
TOOLTIP_SWWM_VOICELOG = "Los comentarios de jugador subtitulados se guardarán en la pestaña de Mensajes del Menú de Demolicionista.";
|
TOOLTIP_SWWM_VOICELOG = "Los comentarios de jugador subtitulados se guardarán en la pestaña de Mensajes del Menú de Demolicionista.";
|
||||||
TOOLTIP_SWWM_SKIPSKILL = "Salta la confirmación de selección de dificultad, si te has cansado de verla todo el tiempo.";
|
TOOLTIP_SWWM_SKIPSKILL = "Salta la confirmación de selección de dificultad, si te has cansado de verla todo el tiempo.";
|
||||||
TOOLTIP_SWWM_HUDTRIMAMMO = "Muestra solo la munición de las armas obtenidas en el HUD.";
|
TOOLTIP_SWWM_HUDTRIMAMMO = "Muestra solo la munición de las armas obtenidas en el HUD.";
|
||||||
|
TOOLTIP_SWWM_HUDMUGSHOT = "Muestra el rostro de la Demolicionista en el HUD, para un toque más clásico.";
|
||||||
TOOLTIP_SWWMMINIMAPMENU = "Configura el minimapa.";
|
TOOLTIP_SWWMMINIMAPMENU = "Configura el minimapa.";
|
||||||
TOOLTIP_SWWMACHIEVEMENTMENU = "Revisa tus logros.";
|
TOOLTIP_SWWMACHIEVEMENTMENU = "Revisa tus logros.";
|
||||||
TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación.";
|
TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación.";
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
[default]
|
[default]
|
||||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r157 \cu(Tue 5 Jul 22:18:04 CEST 2022)\c-";
|
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r158 \cu(Tue 5 Jul 23:33:29 CEST 2022)\c-";
|
||||||
SWWM_SHORTVER="\cw1.3pre r157 \cu(2022-07-05 22:18:04)\c-";
|
SWWM_SHORTVER="\cw1.3pre r158 \cu(2022-07-05 23:33:29)\c-";
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@ OptionMenu "SWWMOptionMenu"
|
||||||
Option "$SWWM_UNIQSTATS", "swwm_uniqstats", "YesNo"
|
Option "$SWWM_UNIQSTATS", "swwm_uniqstats", "YesNo"
|
||||||
Slider "$SWWM_HUDMARGIN", "swwm_hudmargin", 0, 20, 1, 0
|
Slider "$SWWM_HUDMARGIN", "swwm_hudmargin", 0, 20, 1, 0
|
||||||
Option "$SWWM_HUDTRIMAMMO", "swwm_hudtrimammo", "YesNo"
|
Option "$SWWM_HUDTRIMAMMO", "swwm_hudtrimammo", "YesNo"
|
||||||
|
Option "$SWWM_HUDMUGSHOT", "swwm_hudmugshot", "YesNo"
|
||||||
Slider "$SWWM_MAXMSG", "swwm_maxshown", 1, 10, 1, 0
|
Slider "$SWWM_MAXMSG", "swwm_maxshown", 1, 10, 1, 0
|
||||||
Slider "$SWWM_MAXMSGBIG", "swwm_maxshownbig", 1, 20, 1, 0
|
Slider "$SWWM_MAXMSGBIG", "swwm_maxshownbig", 1, 20, 1, 0
|
||||||
Slider "$SWWM_MAXPICK", "swwm_maxpickup", 1, 10, 1, 0
|
Slider "$SWWM_MAXPICK", "swwm_maxpickup", 1, 10, 1, 0
|
||||||
|
|
|
||||||
9
shaders/glsl/BarrierFace.fp
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
// barrier overlay, but shaped like the texture
|
||||||
|
|
||||||
|
void SetupMaterial( inout Material mat )
|
||||||
|
{
|
||||||
|
vec4 col = getTexel(vTexCoord.st);
|
||||||
|
vec3 grad = texture(bartex,vec2(0.,fract(vTexCoord.t+timer))).rgb;
|
||||||
|
mat.Base.rgb = grad*col.a;
|
||||||
|
mat.Base.a = col.a;
|
||||||
|
}
|
||||||
|
|
@ -65,11 +65,21 @@ Enum EMiniHUDFontColor
|
||||||
NUM_MINIHUD_COLOR
|
NUM_MINIHUD_COLOR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Enum EDemoFaceState
|
||||||
|
{
|
||||||
|
FS_DEFAULT,
|
||||||
|
FS_EVIL,
|
||||||
|
FS_GRIN,
|
||||||
|
FS_PAIN,
|
||||||
|
FS_OUCH,
|
||||||
|
FS_DEAD // UNUSED
|
||||||
|
};
|
||||||
|
|
||||||
Class SWWMStatusBar : BaseStatusBar
|
Class SWWMStatusBar : BaseStatusBar
|
||||||
{
|
{
|
||||||
TextureID StatusTex, WeaponTex, ScoreTex, InventoryTex, ChatTex[6],
|
TextureID StatusTex, WeaponTex, ScoreTex, InventoryTex, ChatTex[6],
|
||||||
HealthTex[9], FuelTex[2], DashTex, EnemyBTex, EnemyHTex[6],
|
HealthTex[9], FuelTex[2], DashTex, EnemyBTex, EnemyHTex[6],
|
||||||
GenericAmmoTex[3], AmmoTex[3], MiniBox, bgtex;
|
GenericAmmoTex[3], AmmoTex[3], MiniBox, bgtex, FaceTex[17];
|
||||||
|
|
||||||
Font mSmallFont, mBigFont, mTinyFont, MiniHUDFont, MiniHUDFontOutline;
|
Font mSmallFont, mBigFont, mTinyFont, MiniHUDFont, MiniHUDFontOutline;
|
||||||
int mhudfontcol[NUM_MINIHUD_COLOR];
|
int mhudfontcol[NUM_MINIHUD_COLOR];
|
||||||
|
|
@ -113,7 +123,7 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
// projection data cache
|
// projection data cache
|
||||||
SWWMProjectionData projdata;
|
SWWMProjectionData projdata;
|
||||||
|
|
||||||
SmoothDynamicValueInterpolator ScoreInter;
|
DynamicValueInterpolator ScoreInter;
|
||||||
|
|
||||||
Inventory lastsel;
|
Inventory lastsel;
|
||||||
Weapon lastwep;
|
Weapon lastwep;
|
||||||
|
|
@ -175,6 +185,12 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
SmoothDynamicValueInterpolator HealthInter, FuelInter, DashInter;
|
SmoothDynamicValueInterpolator HealthInter, FuelInter, DashInter;
|
||||||
SmoothLinearValueInterpolator LagHealthInter;
|
SmoothLinearValueInterpolator LagHealthInter;
|
||||||
|
|
||||||
|
EDemoFaceState facestate;
|
||||||
|
int paindir;
|
||||||
|
int facetimer;
|
||||||
|
int blinktime;
|
||||||
|
transient ui int rss;
|
||||||
|
|
||||||
override void FlushNotify()
|
override void FlushNotify()
|
||||||
{
|
{
|
||||||
// flush interpolators (useful since this virtual gets called
|
// flush interpolators (useful since this virtual gets called
|
||||||
|
|
@ -1024,9 +1040,75 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
qsort_playerscore(a,p+1,h);
|
qsort_playerscore(a,p+1,h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateMugState()
|
||||||
|
{
|
||||||
|
let d = Demolitionist(CPlayer.mo);
|
||||||
|
if ( !d ) return;
|
||||||
|
// damage handling
|
||||||
|
if ( d.lastdamagetic && (d.lastdamagetic == gametic) )
|
||||||
|
{
|
||||||
|
if ( d.lastdamage > 70 )
|
||||||
|
{
|
||||||
|
facestate = FS_OUCH;
|
||||||
|
facetimer = (d.lastdamagetimer-gametic)+10;
|
||||||
|
}
|
||||||
|
else if ( facestate < FS_OUCH )
|
||||||
|
{
|
||||||
|
facestate = FS_PAIN;
|
||||||
|
facetimer = (d.lastdamagetimer-gametic)+10;
|
||||||
|
paindir = 0;
|
||||||
|
// paraphrased from vanilla, with some tweaks
|
||||||
|
if ( CPlayer.attacker && (CPlayer.attacker != d) && d )
|
||||||
|
{
|
||||||
|
double atkang = d.AngleTo(CPlayer.attacker);
|
||||||
|
double angdiff = Actor.deltaangle(CPlayer.mo.angle,atkang);
|
||||||
|
if ( abs(angdiff) < 135 )
|
||||||
|
{
|
||||||
|
if ( angdiff > 45 ) paindir = -1;
|
||||||
|
else if ( angdiff < -45 ) paindir = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// grin timer
|
||||||
|
if ( d.lastgrin && (d.lastgrin == gametic) && (facestate <= FS_GRIN) )
|
||||||
|
{
|
||||||
|
facestate = FS_GRIN;
|
||||||
|
facetimer = 50;
|
||||||
|
}
|
||||||
|
if ( CPlayer.mo.FindInventory("RagekitPower") && (facestate < FS_PAIN) )
|
||||||
|
{
|
||||||
|
facestate = FS_EVIL;
|
||||||
|
facetimer = 10;
|
||||||
|
}
|
||||||
|
if ( facetimer > 0 )
|
||||||
|
{
|
||||||
|
facetimer--;
|
||||||
|
if ( facetimer <= 0 )
|
||||||
|
{
|
||||||
|
facestate = FS_DEFAULT;
|
||||||
|
blinktime = 30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( !(gametic&1) )
|
||||||
|
{
|
||||||
|
if ( blinktime <= 0 )
|
||||||
|
{
|
||||||
|
blinktime--;
|
||||||
|
if ( blinktime < -3 )
|
||||||
|
{
|
||||||
|
rss = int(MSTimeF());
|
||||||
|
blinktime = (abs(GetRandom())%10)?(40+abs(GetRandom())%40):6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else blinktime--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// separated so they can be auto-ticked by the demolitionist menu
|
// separated so they can be auto-ticked by the demolitionist menu
|
||||||
void TickInterpolators()
|
void TickInterpolators()
|
||||||
{
|
{
|
||||||
|
UpdateMugState();
|
||||||
ScoreInter.Update(SWWMCredits.Get(CPlayer));
|
ScoreInter.Update(SWWMCredits.Get(CPlayer));
|
||||||
int hp = CPlayer.Health;
|
int hp = CPlayer.Health;
|
||||||
HealthInter.Update(hp);
|
HealthInter.Update(hp);
|
||||||
|
|
@ -1434,6 +1516,25 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
AmmoTex[2] = TexMan.CheckForTexture("graphics/HUD/AmmoBoxB.png",TexMan.Type_Any);
|
AmmoTex[2] = TexMan.CheckForTexture("graphics/HUD/AmmoBoxB.png",TexMan.Type_Any);
|
||||||
MiniBox = TexMan.CheckForTexture("graphics/HUD/MinimapBox.png",TexMan.Type_Any);
|
MiniBox = TexMan.CheckForTexture("graphics/HUD/MinimapBox.png",TexMan.Type_Any);
|
||||||
bgtex = TexMan.CheckForTexture("graphics/tempbg.png",TexMan.Type_Any);
|
bgtex = TexMan.CheckForTexture("graphics/tempbg.png",TexMan.Type_Any);
|
||||||
|
FaceTex[0] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Head.png",TexMan.Type_Any);
|
||||||
|
FaceTex[1] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Flash.png",TexMan.Type_Any);
|
||||||
|
FaceTex[2] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Default.png",TexMan.Type_Any);
|
||||||
|
FaceTex[3] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Unamused.png",TexMan.Type_Any);
|
||||||
|
FaceTex[4] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Blink.png",TexMan.Type_Any);
|
||||||
|
FaceTex[5] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Grin.png",TexMan.Type_Any);
|
||||||
|
FaceTex[6] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Evil.png",TexMan.Type_Any);
|
||||||
|
FaceTex[7] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Hurt.png",TexMan.Type_Any);
|
||||||
|
FaceTex[8] = TexMan.CheckForTexture("graphics/HUD/DemoFace_HurtLeft.png",TexMan.Type_Any);
|
||||||
|
FaceTex[9] = TexMan.CheckForTexture("graphics/HUD/DemoFace_HurtRight.png",TexMan.Type_Any);
|
||||||
|
FaceTex[10] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Ouch.png",TexMan.Type_Any);
|
||||||
|
FaceTex[11] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Dead.png",TexMan.Type_Any);
|
||||||
|
FaceTex[12] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Smug.png",TexMan.Type_Any);
|
||||||
|
FaceTex[13] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Angery.png",TexMan.Type_Any);
|
||||||
|
FaceTex[14] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Barrier.png",TexMan.Type_Any);
|
||||||
|
FaceTex[15] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Rage.png",TexMan.Type_Any);
|
||||||
|
FaceTex[16] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Angerage.png",TexMan.Type_Any);
|
||||||
|
// other expressions will be added when needed
|
||||||
|
blinktime = 30;
|
||||||
mSmallFont = Font.GetFont('TewiFont');
|
mSmallFont = Font.GetFont('TewiFont');
|
||||||
mBigFont = Font.GetFont('TewiFontOutline');
|
mBigFont = Font.GetFont('TewiFontOutline');
|
||||||
mTinyFont = Font.GetFont('MiniwiFont');
|
mTinyFont = Font.GetFont('MiniwiFont');
|
||||||
|
|
@ -1539,7 +1640,7 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
AmmoMaxFlash[i] = 0;
|
AmmoMaxFlash[i] = 0;
|
||||||
AmmoOldMaxAmounts[i] = int.min;
|
AmmoOldMaxAmounts[i] = int.min;
|
||||||
}
|
}
|
||||||
ScoreInter = SmoothDynamicValueInterpolator.Create(0,.1,1,999999999);
|
ScoreInter = DynamicValueInterpolator.Create(0,.1,1,999999999);
|
||||||
hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
|
hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
|
||||||
PrevFrame = MSTimeF();
|
PrevFrame = MSTimeF();
|
||||||
}
|
}
|
||||||
|
|
@ -2722,12 +2823,14 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawInventory( int invy = 56 )
|
private void DrawInventory( bool drawmug = false )
|
||||||
{
|
{
|
||||||
|
int invy = drawmug?61:56;
|
||||||
// active items (armor / powerups)
|
// active items (armor / powerups)
|
||||||
double xx = margin+2;
|
double xx = margin+2;
|
||||||
double yy = ss.y-(margin+invy);
|
double yy = ss.y-(margin+invy);
|
||||||
if ( CPlayer.mo.InvSel && !isInventoryBarVisible() ) yy -= 34;
|
if ( drawmug ) yy -= 9;
|
||||||
|
if ( CPlayer.mo.InvSel && !isInventoryBarVisible() && !drawmug ) yy -= 34;
|
||||||
bool drewarmor = false;
|
bool drewarmor = false;
|
||||||
for ( Inventory i=CPlayer.mo.Inv; i; i=i.Inv )
|
for ( Inventory i=CPlayer.mo.Inv; i; i=i.Inv )
|
||||||
{
|
{
|
||||||
|
|
@ -2737,8 +2840,13 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
drewarmor = true;
|
drewarmor = true;
|
||||||
}
|
}
|
||||||
yy = ss.y-(margin+invy);
|
yy = ss.y-(margin+invy);
|
||||||
if ( drewarmor ) xx += 40;
|
if ( drawmug ) yy -= 9;
|
||||||
else if ( CPlayer.mo.InvSel && !isInventoryBarVisible() ) yy -= 34;
|
if ( drewarmor )
|
||||||
|
{
|
||||||
|
xx += 36;
|
||||||
|
if ( drawmug && CPlayer.mo.InvSel && !isInventoryBarVisible() ) yy -= 34;
|
||||||
|
}
|
||||||
|
else if ( CPlayer.mo.InvSel && !isInventoryBarVisible() && !drawmug ) yy -= 34;
|
||||||
for ( Inventory i=CPlayer.mo.Inv; i; i=i.Inv )
|
for ( Inventory i=CPlayer.mo.Inv; i; i=i.Inv )
|
||||||
{
|
{
|
||||||
if ( (i is 'SWWMLamp') && SWWMLamp(i).bActivated )
|
if ( (i is 'SWWMLamp') && SWWMLamp(i).bActivated )
|
||||||
|
|
@ -2790,8 +2898,8 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
DrawInvIcon(next[1],xx+70,yy+2,1./3.);
|
DrawInvIcon(next[1],xx+70,yy+2,1./3.);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Screen.DrawTexture(InventoryTex,false,margin,ss.y-(margin+invy+2),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
Screen.DrawTexture(InventoryTex,false,margin+(drawmug?36:0),ss.y-(margin+invy+2),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
DrawInvIcon(CPlayer.mo.InvSel,margin+2,ss.y-(margin+invy),selected:true);
|
DrawInvIcon(CPlayer.mo.InvSel,margin+2+(drawmug?36:0),ss.y-(margin+invy),selected:true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawWeapons()
|
private void DrawWeapons()
|
||||||
|
|
@ -2967,7 +3075,7 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
Screen.DrawTexture(AmmoTex[0],false,xx,yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
Screen.DrawTexture(AmmoTex[0],false,xx,yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
}
|
}
|
||||||
// score
|
// score
|
||||||
String sstr = String.Format("%09d",int(ScoreInter.GetValue(fractic)));
|
String sstr = String.Format("%09d",int(ScoreInter.GetValue()));
|
||||||
xx = ss.x-(margin+48);
|
xx = ss.x-(margin+48);
|
||||||
if ( bDrewAmmo ) yy -= 12;
|
if ( bDrewAmmo ) yy -= 12;
|
||||||
else yy = ss.y-(margin+22);
|
else yy = ss.y-(margin+22);
|
||||||
|
|
@ -3016,9 +3124,77 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawStatus()
|
private int GetRandom()
|
||||||
{
|
{
|
||||||
Screen.DrawTexture(StatusTex,false,margin,ss.y-(margin+22),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
return (rss = (rss<<1)*35447+(rss/87));
|
||||||
|
}
|
||||||
|
|
||||||
|
private double RandomShiver()
|
||||||
|
{
|
||||||
|
int sd = GetRandom();
|
||||||
|
return ((abs(sd)%11)-5)*.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int GetFaceTex()
|
||||||
|
{
|
||||||
|
if ( CPlayer.Health <= 0 ) return 11;
|
||||||
|
if ( facestate == FS_GRIN ) return 5;
|
||||||
|
if ( facestate == FS_EVIL ) return 6;
|
||||||
|
if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") ) return (blinktime<-1)?4:12;
|
||||||
|
if ( facestate == FS_OUCH ) return 10;
|
||||||
|
if ( facestate == FS_PAIN ) return (paindir==1)?8:(paindir==-1)?9:7;
|
||||||
|
switch ( blinktime )
|
||||||
|
{
|
||||||
|
case -1:
|
||||||
|
case -3:
|
||||||
|
return 3;
|
||||||
|
break;
|
||||||
|
case -2:
|
||||||
|
return 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawMugshot()
|
||||||
|
{
|
||||||
|
rss = int(MSTimeF())*128;
|
||||||
|
let demo = Demolitionist(CPlayer.mo);
|
||||||
|
double paintime = clamp((demo.lastdamagetimer-(gametic+Fractic))/35.,0.,1.);
|
||||||
|
double noiz = min(demo.lastdamage*.5*paintime,3.);
|
||||||
|
Vector2 shake = (RandomShiver(),RandomShiver())*noiz;
|
||||||
|
if ( !CPlayer.mo.FindInventory("GhostPower") )
|
||||||
|
{
|
||||||
|
Screen.DrawTexture(FaceTex[0],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
|
bool raging = CPlayer.mo.FindInventory("RagekitPower");
|
||||||
|
bool angy = CPlayer.mo.FindInventory("AngeryPower");
|
||||||
|
if ( raging && angy ) Screen.DrawTexture(FaceTex[16],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
|
else if ( raging ) Screen.DrawTexture(FaceTex[15],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
|
else if ( angy ) Screen.DrawTexture(FaceTex[13],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
|
Screen.DrawTexture(FaceTex[1],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Color,Color(255,255,0,0),DTA_Alpha,min(1.,noiz));
|
||||||
|
if ( (CPlayer.Health > 0) && (isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower")) )
|
||||||
|
Screen.DrawTexture(FaceTex[1],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,.8+.1*sin(gametic+fractic));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Screen.DrawTexture(FaceTex[0],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_FillColor,Color(0,0,0),DTA_Alpha,.25*(1.-min(1.,noiz)));
|
||||||
|
Screen.DrawTexture(FaceTex[1],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_FillColor,Color(255,0,0),DTA_Alpha,.25*min(1.,noiz));
|
||||||
|
}
|
||||||
|
Screen.DrawTexture(FaceTex[GetFaceTex()],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
|
if ( CPlayer.mo.FindInventory("BarrierPower") ) Screen.DrawTexture(FaceTex[14],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,.5,DTA_LegacyRenderStyle,STYLE_Add);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawStatus( bool drawmug = false )
|
||||||
|
{
|
||||||
|
int ox = 0;
|
||||||
|
int oy = 0;
|
||||||
|
if ( drawmug )
|
||||||
|
{
|
||||||
|
DrawMugshot();
|
||||||
|
ox = 36;
|
||||||
|
oy = 5;
|
||||||
|
}
|
||||||
|
Screen.DrawTexture(StatusTex,false,margin+ox,ss.y-(margin+22+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
String str;
|
String str;
|
||||||
double ht = clamp(HealthInter.GetValue(fractic),0,10000);
|
double ht = clamp(HealthInter.GetValue(fractic),0,10000);
|
||||||
str = String.Format("%3d",clamp(round(ht),0,999));
|
str = String.Format("%3d",clamp(round(ht),0,999));
|
||||||
|
|
@ -3030,34 +3206,34 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
else if ( round(ht) > 100 ) hcolor = MCR_CYAN;
|
else if ( round(ht) > 100 ) hcolor = MCR_CYAN;
|
||||||
if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") )
|
if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") )
|
||||||
{
|
{
|
||||||
Screen.DrawTexture(HealthTex[0],false,margin+3,ss.y-(margin+19),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
Screen.DrawTexture(HealthTex[0],false,margin+3+ox,ss.y-(margin+19+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
||||||
Screen.DrawTexture(HealthTex[4],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
Screen.DrawTexture(HealthTex[4],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||||
hcolor = MCR_WHITE;
|
hcolor = MCR_WHITE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Screen.DrawTexture(HealthTex[0],false,margin+3,ss.y-(margin+19),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
Screen.DrawTexture(HealthTex[0],false,margin+3+ox,ss.y-(margin+19+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
||||||
Screen.DrawTexture(HealthTex[0],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
Screen.DrawTexture(HealthTex[0],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||||
if ( ht > 100 )
|
if ( ht > 100 )
|
||||||
{
|
{
|
||||||
hw = min(ht-100,100);
|
hw = min(ht-100,100);
|
||||||
Screen.DrawTexture(HealthTex[1],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
Screen.DrawTexture(HealthTex[1],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||||
}
|
}
|
||||||
if ( ht > 200 )
|
if ( ht > 200 )
|
||||||
{
|
{
|
||||||
hw = min(ht-200,300)/3.;
|
hw = min(ht-200,300)/3.;
|
||||||
Screen.DrawTexture(HealthTex[2],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
Screen.DrawTexture(HealthTex[2],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||||
}
|
}
|
||||||
if ( ht > 500 )
|
if ( ht > 500 )
|
||||||
{
|
{
|
||||||
hw = min(ht-500,500)/5.;
|
hw = min(ht-500,500)/5.;
|
||||||
Screen.DrawTexture(HealthTex[3],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
Screen.DrawTexture(HealthTex[3],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( CPlayer.mo.FindInventory("DivineSpriteEffect") )
|
if ( CPlayer.mo.FindInventory("DivineSpriteEffect") )
|
||||||
{
|
{
|
||||||
double falph = clamp((ht-1000)/6000.,0.,1.);
|
double falph = clamp((ht-1000)/6000.,0.,1.);
|
||||||
Screen.DrawTexture(HealthTex[5],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph,DTA_LegacyRenderStyle,STYLE_Add);
|
Screen.DrawTexture(HealthTex[5],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph,DTA_LegacyRenderStyle,STYLE_Add);
|
||||||
String tst;
|
String tst;
|
||||||
double alph = .1;
|
double alph = .1;
|
||||||
int trl = 9;
|
int trl = 9;
|
||||||
|
|
@ -3066,42 +3242,42 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
tst = "AAA";
|
tst = "AAA";
|
||||||
SWWMUtility.ObscureText(tst,(gametic-trl)/3,true);
|
SWWMUtility.ObscureText(tst,(gametic-trl)/3,true);
|
||||||
trl--;
|
trl--;
|
||||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_WHITE],margin+107,ss.y-(margin+20),tst,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph*alph,DTA_LegacyRenderStyle,STYLE_Add);
|
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_WHITE],margin+107+ox,ss.y-(margin+20+oy),tst,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph*alph,DTA_LegacyRenderStyle,STYLE_Add);
|
||||||
}
|
}
|
||||||
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107,ss.y-(margin+20),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,1.-falph);
|
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107+ox,ss.y-(margin+20+oy),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,1.-falph);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107,ss.y-(margin+20),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107+ox,ss.y-(margin+20+oy),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||||
int f = HealthFlash;
|
int f = HealthFlash;
|
||||||
if ( f && (gametic < f) )
|
if ( f && (gametic < f) )
|
||||||
{
|
{
|
||||||
double alph = max((f-(gametic+FracTic))/25.,0.)**1.5;
|
double alph = max((f-(gametic+FracTic))/25.,0.)**1.5;
|
||||||
Screen.DrawTexture(HealthTex[7],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,bhw,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
Screen.DrawTexture(HealthTex[7],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,bhw,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
||||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_FLASH],margin+107,ss.y-(margin+20),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_FLASH],margin+107+ox,ss.y-(margin+20+oy),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
||||||
}
|
}
|
||||||
if ( (CPlayer.health > 0) && (CPlayer.health <= 25) && (PulsePhase <= 15) )
|
if ( (CPlayer.health > 0) && (CPlayer.health <= 25) && (PulsePhase <= 15) )
|
||||||
{
|
{
|
||||||
double alph = clamp(sin((PulsePhase-FracTic)*12.),0.,1.);
|
double alph = clamp(sin((PulsePhase-FracTic)*12.),0.,1.);
|
||||||
Screen.DrawTexture(HealthTex[6],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_Alpha,alph);
|
Screen.DrawTexture(HealthTex[6],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_Alpha,alph);
|
||||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_REDFLASH],margin+107,ss.y-(margin+20),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_REDFLASH],margin+107,ss.y-(margin+20+oy),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
||||||
}
|
}
|
||||||
ht = clamp(LagHealthInter.GetValue(fractic),0,1000);
|
ht = clamp(LagHealthInter.GetValue(fractic),0,1000);
|
||||||
double hwl = min(ht,100);
|
double hwl = min(ht,100);
|
||||||
if ( hwl > bhw )
|
if ( hwl > bhw )
|
||||||
{
|
{
|
||||||
Screen.DrawTexture(HealthTex[8],false,margin+3,ss.y-(margin+19),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl,DTA_ColorOverlay,Color(255,0,0,0));
|
Screen.DrawTexture(HealthTex[8],false,margin+3+ox,ss.y-(margin+19+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl,DTA_ColorOverlay,Color(255,0,0,0));
|
||||||
Screen.DrawTexture(HealthTex[8],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl);
|
Screen.DrawTexture(HealthTex[8],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
double ft = clamp(FuelInter.GetValue(fractic),0,120);
|
double ft = clamp(FuelInter.GetValue(fractic),0,120);
|
||||||
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+3,ss.y-(margin+7),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft,DTA_ColorOverlay,Color(255,0,0,0));
|
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+3+ox,ss.y-(margin+7+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft,DTA_ColorOverlay,Color(255,0,0,0));
|
||||||
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+2,ss.y-(margin+8),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft);
|
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+2+ox,ss.y-(margin+8+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft);
|
||||||
let d = Demolitionist(CPlayer.mo);
|
let d = Demolitionist(CPlayer.mo);
|
||||||
bool blink = (!d || (d.dashfuel > 20) || ((gametic%10) < 5));
|
bool blink = (!d || (d.dashfuel > 20) || ((gametic%10) < 5));
|
||||||
double dt = clamp(DashInter.GetValue(fractic),0,120);
|
double dt = clamp(DashInter.GetValue(fractic),0,120);
|
||||||
Screen.DrawTexture(DashTex,false,margin+3,ss.y-(margin+4),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(255,0,0,0));
|
Screen.DrawTexture(DashTex,false,margin+3+ox,ss.y-(margin+4+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(255,0,0,0));
|
||||||
Screen.DrawTexture(DashTex,false,margin+2,ss.y-(margin+5),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(blink?0:96,0,0,0));
|
Screen.DrawTexture(DashTex,false,margin+2+ox,ss.y-(margin+5+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(blink?0:96,0,0,0));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawPickups()
|
private void DrawPickups()
|
||||||
|
|
@ -3401,8 +3577,9 @@ Class SWWMStatusBar : BaseStatusBar
|
||||||
{
|
{
|
||||||
DrawTarget();
|
DrawTarget();
|
||||||
DrawTopStuff();
|
DrawTopStuff();
|
||||||
DrawInventory();
|
bool drawmug = swwm_hudmugshot;
|
||||||
DrawStatus();
|
DrawInventory(drawmug);
|
||||||
|
DrawStatus(drawmug);
|
||||||
DrawWeapons();
|
DrawWeapons();
|
||||||
if ( hnd ) hnd.DrawBossBar(self);
|
if ( hnd ) hnd.DrawBossBar(self);
|
||||||
DrawPickups();
|
DrawPickups();
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ Class Demolitionist : PlayerPawn
|
||||||
|
|
||||||
int invwipe; // inventory wipe flags for next level
|
int invwipe; // inventory wipe flags for next level
|
||||||
|
|
||||||
transient int lastbang;
|
transient int lastbang, lastgrin;
|
||||||
|
|
||||||
transient bool ingivecheat;
|
transient bool ingivecheat;
|
||||||
|
|
||||||
|
|
@ -2816,6 +2816,7 @@ Class Demolitionist : PlayerPawn
|
||||||
SWWMHandler.AddOneliner("getweapon",2);
|
SWWMHandler.AddOneliner("getweapon",2);
|
||||||
}
|
}
|
||||||
else SWWMHandler.AddOneliner("getweapon",2);
|
else SWWMHandler.AddOneliner("getweapon",2);
|
||||||
|
lastgrin = gametic;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( (item is 'Key') && !key_reentrant && !deathmatch && !bInDefaultInventory )
|
if ( (item is 'Key') && !key_reentrant && !deathmatch && !bInDefaultInventory )
|
||||||
|
|
@ -2836,6 +2837,7 @@ Class Demolitionist : PlayerPawn
|
||||||
SWWMHandler.AddOneliner("keyget",2);
|
SWWMHandler.AddOneliner("keyget",2);
|
||||||
}
|
}
|
||||||
else SWWMHandler.AddOneliner("keyget",2);
|
else SWWMHandler.AddOneliner("keyget",2);
|
||||||
|
lastgrin = gametic;
|
||||||
}
|
}
|
||||||
// share all keys in mp
|
// share all keys in mp
|
||||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||||
|
|
@ -2852,7 +2854,11 @@ Class Demolitionist : PlayerPawn
|
||||||
// add collectible to stats
|
// add collectible to stats
|
||||||
if ( item is 'SWWMCollectible' )
|
if ( item is 'SWWMCollectible' )
|
||||||
{
|
{
|
||||||
if ( !ingivecheat ) SWWMHandler.AddOneliner(SWWMCollectible(item).GetLine,2);
|
if ( !ingivecheat )
|
||||||
|
{
|
||||||
|
SWWMHandler.AddOneliner(SWWMCollectible(item).GetLine,2);
|
||||||
|
lastgrin = gametic;
|
||||||
|
}
|
||||||
if ( !mystats ) return;
|
if ( !mystats ) return;
|
||||||
let cls = item.GetClass();
|
let cls = item.GetClass();
|
||||||
if ( (mystats.ownedcollectibles.Size() > 0) && (mystats.ownedcollectibles.Find(cls) < mystats.ownedcollectibles.Size()) ) return;
|
if ( (mystats.ownedcollectibles.Size() > 0) && (mystats.ownedcollectibles.Find(cls) < mystats.ownedcollectibles.Size()) ) return;
|
||||||
|
|
@ -2863,6 +2869,7 @@ Class Demolitionist : PlayerPawn
|
||||||
{
|
{
|
||||||
mystats.gotyorick = true;
|
mystats.gotyorick = true;
|
||||||
SWWMHandler.AddOneliner("skullget",2);
|
SWWMHandler.AddOneliner("skullget",2);
|
||||||
|
lastgrin = gametic;
|
||||||
}
|
}
|
||||||
// notify key obtained to flash icon
|
// notify key obtained to flash icon
|
||||||
if ( item is 'Key' )
|
if ( item is 'Key' )
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,10 @@ Class ExplodiumGun : SWWMWeapon
|
||||||
// add the oneliner
|
// add the oneliner
|
||||||
let demo = Demolitionist(Owner);
|
let demo = Demolitionist(Owner);
|
||||||
if ( demo && demo.mystats && !demo.mystats.GotWeapon(SisterWeapon.GetClass()) && (Owner.player == players[consoleplayer]) && !demo.ingivecheat )
|
if ( demo && demo.mystats && !demo.mystats.GotWeapon(SisterWeapon.GetClass()) && (Owner.player == players[consoleplayer]) && !demo.ingivecheat )
|
||||||
|
{
|
||||||
SWWMHandler.AddOneliner(SWWMWeapon(SisterWeapon).GetLine,2);
|
SWWMHandler.AddOneliner(SWWMWeapon(SisterWeapon).GetLine,2);
|
||||||
|
demo.lastgrin = gametic;
|
||||||
|
}
|
||||||
item.bPickupGood = true;
|
item.bPickupGood = true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||