Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 26 additions & 6 deletions content/baseoq4/pak0/def/liquids_openq4.def
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ entityDef damage_openq4_drown
"noArmor" "1"
"knockback" "0"
"gib" "0"
"methodOfDeath" "18"
}

entityDef damage_openq4_lava
Expand All @@ -21,13 +22,16 @@ entityDef damage_openq4_lava
"knockback" "0"
"burn" "1"
"gib" "0"
"methodOfDeath" "20"
}

entityDef damage_openq4_slime
{
"damage" "10"
"knockback" "0"
"burn" "1"
"gib" "0"
"methodOfDeath" "19"
}

/*
Expand Down Expand Up @@ -92,8 +96,10 @@ entityDef func_liquid_openq4_lava
snd_clear_* the head coming back out
fx_splash_* the splash at the surface, played on entry and exit

These reference stock Quake 4 assets. Quake 4 ships no lava or slime entry sounds of its own, so
those reuse the water set; the acid splash and slime pool effects give each liquid its own look.
The production defaults below point directly at stock Quake 4 media. Showcase-only presentation
belongs to the map that uses it rather than this shared definition. Projectile loops and trace
segments have separate keys because the former follows a moving entity while the latter is given
two fixed points.
*/
entityDef liquid_openq4
{
Expand Down Expand Up @@ -127,19 +133,33 @@ entityDef liquid_openq4
"fx_bubbles_lava" "effects/levels/recomp_bubble.fx"
"fx_bubbles_slime" "effects/levels/recomp_bubble.fx"

// The wake something leaves crossing the liquid. Smoke does not survive underwater, so a
// projectile's fly trail and a hitscan tracer are both replaced by this while they are in it.
// Point these at a beam-style effect if you have one: the game passes an end origin, so an
// effect authored with a trail segment will stretch along the shot.
// A moving projectile receives a local looping cloud while it is submerged. Keep the legacy
// fx_trail keys as aliases for older game modules and mods.
"fx_projectile_trail_water" "effects/levels/recomp_bubble.fx"
"fx_projectile_trail_lava" "effects/levels/recomp_bubble.fx"
"fx_projectile_trail_slime" "effects/levels/recomp_bubble.fx"
"fx_trail_water" "effects/levels/recomp_bubble.fx"
"fx_trail_lava" "effects/levels/recomp_bubble.fx"
"fx_trail_slime" "effects/levels/recomp_bubble.fx"

// Hitscan wakes receive the submerged trace segment's start and end points.
"fx_trace_trail_water" "effects/levels/recomp_bubble.fx"
"fx_trace_trail_lava" "effects/levels/recomp_bubble.fx"
"fx_trace_trail_slime" "effects/levels/recomp_bubble.fx"

// smaller splash used for projectiles and thrown objects breaking the surface
"fx_impact_water" "effects/ambient/splash_med.fx"
"fx_impact_lava" "effects/levels/putra/acid_splash.fx"
"fx_impact_slime" "effects/ambient/slime_pool.fx"
"snd_impact_water" "bullet_impact_water"
"snd_impact_lava" "bullet_impact_water"
"snd_impact_slime" "bullet_impact_water"

// Dedicated environmental obituary methods: MAX_WEAPONS + 2/3/4.
"icon dm2" "gfx/guis/hud/icons/kill_drown_openq4"
"icon dm3" "gfx/guis/hud/icons/kill_slime_openq4"
"icon dm4" "gfx/guis/hud/icons/kill_lava_openq4"
"dm2_text" "#str_42801"
"dm3_text" "#str_42802"
"dm4_text" "#str_42803"
}
19 changes: 19 additions & 0 deletions content/baseoq4/pak0/def/maps_openq4.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
openQ4-authored map declarations.
*/

mapDef mp/liquid_lab {
"name" "#str_42800"
"DM" "1"
"Team DM" "1"
"Tourney" "1"
"CTF" "0"
"Arena CTF" "0"
"DeadZone" "0"
"Gametype_Deathmatch" "1"
"Gametype_TeamDeathmatch" "1"
"Gametype_Tournament" "1"
"Gametype_CaptureTheFlag" "0"
"Gametype_ArenaCaptureTheFlag" "0"
"Gametype_DeadZone" "0"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
effect effects/openq4/liquids/surface_bubbles_lava
{
size 110
emitter "lava boils"
{
duration 1,1
count 12,18
oriented
{
duration 0.3,0.7
persist
material "gfx/effects/fluids_drips/bubble_red_half"
start
{
position { cylinder 1,-65,-65,1,65,65 surface }
size { box 1,1,4,4 }
tint { line 1,0.25,0.02,1,0.65,0.05 }
fade { point 0 }
}
motion { size { envelope linear } fade { envelope cosine } }
end { size { box 5,5,12,12 } fade { point 0.8 } }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
effect effects/openq4/liquids/surface_bubbles_slime
{
size 110
emitter "slime boils"
{
duration 1,1
count 10,16
oriented
{
duration 0.45,1
persist
material "gfx/effects/fluids_drips/bubble_green_half"
start
{
position { cylinder 1,-65,-65,1,65,65 surface }
size { box 1,1,5,5 }
tint { line 0.28,0.8,0.03,0.55,1,0.12 }
fade { point 0 }
}
motion { size { envelope linear } fade { envelope cosine } }
end { size { box 6,6,14,14 } fade { point 0.8 } }
}
}
}
130 changes: 106 additions & 24 deletions content/baseoq4/pak0/materials/liquids_openq4.mtr
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
Texture references are stock Quake 4 assets.
*/

table openq4LavaTable { snap { 0.72, 0.8, 0.88, 0.96, 1, 0.96, 0.88, 0.8 } }

textures/openq4/liquids/water
{
qer_editorimage textures/q4x_q4xdm2/water01_d.tga
Expand Down Expand Up @@ -91,54 +89,138 @@ textures/openq4/liquids/lava
twosided
materialType lava

// Distort the already-rendered basin first. If this pass comes last its _currentRender sample
// replaces the colour stages and makes the lava look like a dark metal floor.
{
map textures/q4x_q4xdm2/lava2.tga
scale 1 , 1
translate time * 0.005, time * -0.01
rgb openq4LavaTable[ time * 0.05 ]
vertexProgram heatHaze.vfp
vertexParm 0 0 , time * 0.035
vertexParm 1 1.4
fragmentProgram heatHaze.vfp
fragmentMap 0 _currentRender
fragmentMap 1 textures/q4x_q4xdm2/lava1_local.tga
}
// A bright, nearly opaque body sits over the distortion. Two independently moving stock lava
// layers then provide hot yellow-orange molten structure.
{
blend blend
map _white
red 0.70
green 0.10
blue 0.005
alpha 0.92
}
{
blend add
map textures/q4x_q4xdm2/lava2.tga
scale 1.4, 1.5
translate time * 0, time * -0.03
rgb openq4LavaTable[ time * 0.04 ]
scale 0.72, 0.82
translate time * 0.007, time * -0.016
red 1.0
green 0.72
blue 0.42
}
{
blend add
map textures/q4x_q4xdm2/lava2.tga
scale 0.8, 1.1
translate time * -0.001, time * -0.02
rgb openq4LavaTable[ time * 0.1 ]
scale 1.55, 1.34
translate time * -0.012, time * -0.027
red 0.42
green 0.18
blue 0.035
}
}

textures/openq4/liquids/slime
{
qer_editorimage textures/decals/slime.tga
qer_editorimage textures/decals/goopool2_d.tga

slime
liquid
translucent
twosided
materialType slime

// Put the distortion behind the colour stages so it cannot replace them with the dark basin.
{
blend diffusemap
map textures/decals/slime.tga
scale 0.5, 0.5
translate time * 0.012, time * -0.009
vertexProgram heatHaze.vfp
vertexParm 0 0 , time * 0.025
vertexParm 1 0.7
fragmentProgram heatHaze.vfp
fragmentMap 0 _currentRender
fragmentMap 1 textures/q4x_q4xdm2/lava1_local.tga
}
// Dense toxic-green body plus two cellular intensity layers. The old stock slime decal is red
// wall grime, not a fluid surface, and made the pool look like a dark metal floor.
{
blend blend
map _white
red 0.025
green 0.58
blue 0.018
alpha 0.93
}
{
blend add
map textures/decals/slime.tga
scale 0.7, 0.65
translate time * -0.008, time * -0.015
rgb 0.35
map makeIntensity( textures/q4x_q4xdm2/lava2.tga )
scale 0.68, 0.78
translate time * 0.010, time * -0.014
red 0.055
green 0.80
blue 0.025
}
{
blend specularmap
map textures/decals/slime_s.tga
translate time * 0.01 , time * -0.01
blend add
map makeIntensity( textures/q4x_q4xdm2/lava2.tga )
scale 1.43, 1.27
translate time * -0.008, time * -0.025
red 0.018
green 0.34
blue 0.008
}
}

// Distinct death-feed glyphs built directly from stock images. These explicit materials also work
// in asset-free validation, where the retail icon_shader_colored guide is intentionally absent.
gfx/guis/hud/icons/kill_drown_openq4
{
noShadows
translucent
{
blend blend
map gfx/guis/hud/icons/kill_self.tga
red .2
green .65
blue 1
alpha parm3
clamp
}
}

gfx/guis/hud/icons/kill_slime_openq4
{
noShadows
translucent
{
blend blend
map gfx/guis/hud/icons/kill_self.tga
red .2
green 1
blue .1
alpha parm3
clamp
}
}

gfx/guis/hud/icons/kill_lava_openq4
{
noShadows
translucent
{
blend blend
map gfx/guis/hud/icons/item_fire.tga
red 1
green .35
blue .05
alpha parm3
clamp
}
}
31 changes: 31 additions & 0 deletions content/baseoq4/pak0/sound/liquids_openq4.sndshd
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/* Liquid Lab ambience assembled from sound samples shipped with Quake 4. */

sound openq4_liquid_water_loop
{
minDistance 96
maxDistance 700
volumeDb -12
looping

sound/ambience/water/wtr_loop_lgt
}

sound openq4_liquid_lava_loop
{
minDistance 96
maxDistance 700
volumeDb -7
looping

sound/environment/lava/lava_loop2.wav
}

sound openq4_liquid_slime_loop
{
minDistance 96
maxDistance 700
volumeDb -9
looping

sound/ambience/xian/ambient2/slime/loop_slime_02
}
5 changes: 5 additions & 0 deletions content/baseoq4/pak0/strings/english_openq4.lang
Original file line number Diff line number Diff line change
Expand Up @@ -910,4 +910,9 @@
"#str_42748" "Item"
"#str_42749" "This legacy server command is disabled during a managed match. Use Match Control."
"#str_42750" "You must wait %d more seconds before calling another vote."

"#str_42800" "Liquid Volume Lab"
"#str_42801" "%s drowned"
"#str_42802" "%s dissolved in slime"
"#str_42803" "%s burned in lava"
}
5 changes: 5 additions & 0 deletions content/baseoq4/pak0/strings/french_openq4.lang
Original file line number Diff line number Diff line change
Expand Up @@ -910,4 +910,9 @@
"#str_42748" "Objet"
"#str_42749" "Cette commande serveur héritée est désactivée pendant un match géré. Utilisez Match Control."
"#str_42750" "Vous devez attendre encore %d secondes avant de lancer un autre vote."

"#str_42800" "Laboratoire des volumes liquides"
"#str_42801" "%s s'est noyé"
"#str_42802" "%s s'est dissous dans la vase"
"#str_42803" "%s a brûlé dans la lave"
}
5 changes: 5 additions & 0 deletions content/baseoq4/pak0/strings/italian_openq4.lang
Original file line number Diff line number Diff line change
Expand Up @@ -910,4 +910,9 @@
"#str_42748" "Oggetto"
"#str_42749" "Questo comando server legacy è disabilitato durante una partita gestita. Usa Match Control."
"#str_42750" "Devi attendere altri %d secondi prima di indire un altro voto."

"#str_42800" "Laboratorio dei volumi liquidi"
"#str_42801" "%s è annegato"
"#str_42802" "%s si è dissolto nella melma"
"#str_42803" "%s è bruciato nella lava"
}
5 changes: 5 additions & 0 deletions content/baseoq4/pak0/strings/polish_openq4.lang
Original file line number Diff line number Diff line change
Expand Up @@ -910,4 +910,9 @@
"#str_42748" "Przedmiot"
"#str_42749" "Ta starsza komenda serwera jest wyłączona podczas zarządzanego meczu. Użyj Sterowania meczem."
"#str_42750" "Musisz odczekać jeszcze %d s przed zwołaniem kolejnego głosowania."

"#str_42800" "Laboratorium objętości cieczy"
"#str_42801" "%s utonął"
"#str_42802" "%s rozpuścił się w szlamie"
"#str_42803" "%s spłonął w lawie"
}
5 changes: 5 additions & 0 deletions content/baseoq4/pak0/strings/russian_openq4.lang
Original file line number Diff line number Diff line change
Expand Up @@ -910,4 +910,9 @@
"#str_42748" "Предмет"
"#str_42749" "Эта устаревшая серверная команда отключена во время управляемого матча. Используйте управление матчем."
"#str_42750" "До следующего голосования нужно подождать ещё %d сек."

"#str_42800" "Лаборатория жидкостей"
"#str_42801" "%s утонул"
"#str_42802" "%s растворился в слизи"
"#str_42803" "%s сгорел в лаве"
}
Loading
Loading