From 5435f06d4e8f34fab5dd60242797545a6156390e Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Tue, 22 Jan 2019 13:34:14 +0100 Subject: [PATCH] Backport some changes from development branch: - Made Kinsie's Test Map changes toggleable (off by default) - Corrected physics of various projectiles - Replaced textures of health items to something better looking - Biosludge now only has a hitbox when stuck to surfaces, to be more consistent with vanilla behavior - Some code cleanup --- animdefs.txt | 15 ---- cvarinfo.txt | 1 + gldefs.txt | 53 +++----------- menudef.txt | 1 + modeldef.misc | 14 ++-- shaders/glsl/FizzDistortX.fp | 18 +++++ shaders/glsl/FizzDistortXY.fp | 18 +++++ textures.misc | 123 ++----------------------------- textures/fizzfull.png | Bin 0 -> 19151 bytes textures/fizzside.png | Bin 0 -> 3056 bytes textures/fizztop.png | Bin 0 -> 8360 bytes textures/warptex.png | Bin 0 -> 28936 bytes zscript/biorifle.zsc | 133 +++++++++++++++++----------------- zscript/eightball.zsc | 31 ++++++-- zscript/enforcer.zsc | 12 ++- zscript/flakcannon.zsc | 9 +-- zscript/ripper.zsc | 3 +- zscript/translocator.zsc | 22 ++++-- zscript/utcommon.zsc | 17 ++++- zscript/utgore.zsc | 37 +++++++--- 20 files changed, 222 insertions(+), 285 deletions(-) create mode 100644 shaders/glsl/FizzDistortX.fp create mode 100644 shaders/glsl/FizzDistortXY.fp create mode 100644 textures/fizzfull.png create mode 100644 textures/fizzside.png create mode 100644 textures/fizztop.png create mode 100644 textures/warptex.png diff --git a/animdefs.txt b/animdefs.txt index 1365cc2..dfd7600 100644 --- a/animdefs.txt +++ b/animdefs.txt @@ -5,21 +5,6 @@ texture static1 pic static2 tics 1 pic static3 tics 1 pic static4 tics 1 -texture FIZZHP00 - pic FIZZHP00 tics 8 - pic FIZZHP01 tics 8 - pic FIZZHP02 tics 8 - pic FIZZHP03 tics 8 -texture FIZZHP10 - pic FIZZHP10 tics 8 - pic FIZZHP11 tics 8 - pic FIZZHP12 tics 8 - pic FIZZHP13 tics 8 -texture FIZZHP20 - pic FIZZHP20 tics 8 - pic FIZZHP21 tics 8 - pic FIZZHP22 tics 8 - pic FIZZHP23 tics 8 texture invis00 pic invis00 tics 2 pic invis01 tics 2 diff --git a/cvarinfo.txt b/cvarinfo.txt index 9818139..e769b3d 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -38,3 +38,4 @@ server float flak_swingerstrength = 0.5; // strength of visual recoil server bool flak_radboots = true; // jump boots protect against damaging floors (this is to account for the lack of a radsuit) server bool flak_blood = true; // [WIP] use doom tournament blood (disable if using another gore mod) server bool flak_gibs = false; // [WIP/UNSTABLE] use doom tournament gibbing (disable if using another gore mod) +server bool flak_doomtest = false; // made toggleable due to loud complaints diff --git a/gldefs.txt b/gldefs.txt index e2c887c..bc7e5d7 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -2,53 +2,20 @@ HardwareShader Texture "models/Jgreen.png" { Shader "shaders/glsl/MeshEnviroMap.fp" } -Brightmap Texture "FIZZHP00" +HardwareShader Texture "fizzside" { - Map "brightmaps/fullbright.png" + Shader "shaders/glsl/FizzDistortX.fp" + Texture "warptex" "textures/warptex.png" } -Brightmap Texture "FIZZHP01" +HardwareShader Texture "fizztop" { - Map "brightmaps/fullbright.png" + Shader "shaders/glsl/FizzDistortXY.fp" + Texture "warptex" "textures/warptex.png" } -Brightmap Texture "FIZZHP02" +HardwareShader Texture "fizzfull" { - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP03" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP10" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP11" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP12" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP13" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP20" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP21" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP22" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "FIZZHP23" -{ - Map "brightmaps/fullbright.png" + Shader "shaders/glsl/FizzDistortXY.fp" + Texture "warptex" "textures/warptex.png" } HardwareShader Texture "models/jhbox1.png" { @@ -600,4 +567,4 @@ SkyBox "BlueSky" fliptop "graphics/SkySetB_left.png" "graphics/SkySetB_up.png" "graphics/SkySetB_down.png" -} \ No newline at end of file +} diff --git a/menudef.txt b/menudef.txt index cadc6e9..fb10856 100644 --- a/menudef.txt +++ b/menudef.txt @@ -66,6 +66,7 @@ OptionMenu "UTOptionMenu" Option "UT Blood", "flak_blood", "YesNo" Option "[WIP] UT Gibbing", "flak_gibs", "YesNo" Option "[WIP] Corpses Take Damage", "flak_corpsedamage", "YesNo" + Option "Edit Kinsie's Test Map", "flak_doomtest", "YesNo" } AddOptionMenu "OptionsMenu" diff --git a/modeldef.misc b/modeldef.misc index f4b9606..1ce2872 100644 --- a/modeldef.misc +++ b/modeldef.misc @@ -50,7 +50,7 @@ Model "UTHealthPack" Model 0 "hbox_d.3d" // indices start at 1 for this mesh SurfaceSkin 0 1 "jhbox1.png" - SurfaceSkin 0 2 "FIZZHP00" + SurfaceSkin 0 2 "fizzfull" Scale 0.2 0.24 0.2 RollOffset -90 ZOffset 16 @@ -64,8 +64,8 @@ Model "UTHealthBox" Model 0 "hboxbeta_d.3d" // indices start at 1 for this mesh SurfaceSkin 0 1 "jhboxbeta1.png" - SurfaceSkin 0 2 "FIZZHP10" - SurfaceSkin 0 3 "FIZZHP10" + SurfaceSkin 0 2 "fizzfull" + SurfaceSkin 0 3 "fizzfull" Scale 0.08 0.08 0.096 ZOffset 4 @@ -78,7 +78,7 @@ Model "UTMedBox" Model 0 "MedBox_d.3d" // indices start at 1 for this mesh SurfaceSkin 0 1 "JMedBox1.png" - SurfaceSkin 0 2 "FIZZHP10" + SurfaceSkin 0 2 "fizzfull" Scale 0.06 0.06 0.072 ZOffset 5 @@ -90,8 +90,8 @@ Model "UTHealthBonus" Path "models" Model 0 "Vial_d.3d" SurfaceSkin 0 0 "JVial0.png" - SurfaceSkin 0 1 "FIZZHP20" - SurfaceSkin 0 2 "FIZZHP20" + SurfaceSkin 0 1 "fizzside" + SurfaceSkin 0 2 "fizztop" Scale 0.04 0.04 0.048 ZOffset 8 DONTCULLBACKFACES @@ -317,4 +317,4 @@ Model "UTChip" FrameIndex CHIP B 0 1 FrameIndex CHIP C 0 2 FrameIndex CHIP D 0 3 -} \ No newline at end of file +} diff --git a/shaders/glsl/FizzDistortX.fp b/shaders/glsl/FizzDistortX.fp new file mode 100644 index 0000000..3e62195 --- /dev/null +++ b/shaders/glsl/FizzDistortX.fp @@ -0,0 +1,18 @@ +vec4 ProcessLight( vec4 color ) +{ + return vec4(1.0); +} + +vec4 ProcessTexel() +{ + vec2 coord = vTexCoord.st; + vec2 dist = 2.0*texture(warptex,vTexCoord.st).xy-1.0; + dist.x *= abs(mod(dist.y+timer*3.34536,4)-2)-1; + coord.x += dist.x*0.12; + dist = 2.0*texture(warptex,vTexCoord.st*2.0).xy-1.0; + dist.y *= abs(mod(dist.x+timer*5.45363,4)-2)-1; + coord.y -= dist.y*0.09; + coord.y = clamp(coord.y,0.0,1.0); + coord.x += timer*0.5346; + return getTexel(coord); +} diff --git a/shaders/glsl/FizzDistortXY.fp b/shaders/glsl/FizzDistortXY.fp new file mode 100644 index 0000000..8ecc683 --- /dev/null +++ b/shaders/glsl/FizzDistortXY.fp @@ -0,0 +1,18 @@ +vec4 ProcessLight( vec4 color ) +{ + return vec4(1.0); +} + +vec4 ProcessTexel() +{ + vec2 coord = vTexCoord.st; + vec2 dist = 2.0*texture(warptex,vTexCoord.st*0.6).xy-1.0; + dist.x *= abs(mod(dist.y+timer*1.34536,4)-2)-1; + coord.x += dist.x*0.12; + dist = 2.0*texture(warptex,vTexCoord.st*1.2).xy-1.0; + dist.y *= abs(mod(dist.x+timer*1.45363,4)-2)-1; + coord.y -= dist.y*0.09; + coord.x += timer*0.05346; + coord.y += timer*0.03425; + return getTexel(coord); +} diff --git a/textures.misc b/textures.misc index 6aa62ec..73e86c5 100644 --- a/textures.misc +++ b/textures.misc @@ -1,122 +1,9 @@ -Texture "FIZZHP00",256,256 +Texture "DefTex",128,128 { - Patch "LAVA1",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",128,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",192,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",64,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",128,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",192,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",0,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",64,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",128,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",192,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",0,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",64,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",128,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",192,192{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP01",256,256 -{ - Patch "LAVA2",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",128,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",192,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",64,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",128,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",192,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",0,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",64,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",128,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",192,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",0,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",64,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",128,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",192,192{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP02",256,256 -{ - Patch "LAVA3",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",128,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",192,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",64,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",128,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",192,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",0,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",64,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",128,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",192,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",0,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",64,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",128,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",192,192{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP03",256,256 -{ - Patch "LAVA4",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",128,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",192,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",64,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",128,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",192,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",0,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",64,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",128,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",192,128{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",0,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",64,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",128,192{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",192,192{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP10",128,128 -{ - Patch "LAVA1",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA1",64,64{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP11",128,128 -{ - Patch "LAVA2",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA2",64,64{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP12",128,128 -{ - Patch "LAVA3",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA3",64,64{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP13",128,128 -{ - Patch "LAVA4",0,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",64,0{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",0,64{Translation "0:255=#[0,0,255]"} - Patch "LAVA4",64,64{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP20",64,64 -{ - Patch "LAVA1",0,0{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP21",64,64 -{ - Patch "LAVA2",0,0{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP22",64,64 -{ - Patch "LAVA3",0,0{Translation "0:255=#[0,0,255]"} -} -Texture "FIZZHP23",64,64 -{ - Patch "LAVA4",0,0{Translation "0:255=#[0,0,255]"} + XScale 4 + YScale 4 + WorldPanning + Patch "-noflat-", 0, 0 } Sprite "HBOXA0",1,1{} Sprite "HBOXB0",1,1{} diff --git a/textures/fizzfull.png b/textures/fizzfull.png new file mode 100644 index 0000000000000000000000000000000000000000..a33a988692b5da1c73272c55549b23601e0c5c8d GIT binary patch literal 19151 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 HDWM4fOf%d3 literal 0 HcmV?d00001 diff --git a/textures/fizzside.png b/textures/fizzside.png new file mode 100644 index 0000000000000000000000000000000000000000..b25eb0f6a71505c425fe140e892d6e2702f1a51c GIT binary patch literal 3056 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 D_1@Nl literal 0 HcmV?d00001 diff --git a/textures/fizztop.png b/textures/fizztop.png new file mode 100644 index 0000000000000000000000000000000000000000..51fed753db8f6a3e6aac527b95b03bd36fefd0c5 GIT binary patch literal 8360 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 Z=-%c-f$yIiF)%PNc)I$ztaD0e0svjPAv*v7 literal 0 HcmV?d00001 diff --git a/textures/warptex.png b/textures/warptex.png new file mode 100644 index 0000000000000000000000000000000000000000..de45a9d0d93f75b2c005fc774edb804486fc9a74 GIT binary patch literal 28936 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 literal 0 HcmV?d00001 diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index 8aa2475..701a2a7 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -198,8 +198,6 @@ Class BioGel : Actor deadtimer = -1; l = Spawn("BioLight",pos); l.target = self; - b = Spawn("BioHitbox",pos); - b.target = self; rollvel = FRandom[GES](10,30)*RandomPick[GES](-1,1); pitchvel = FRandom[GES](10,30)*RandomPick[GES](-1,1); yawvel = FRandom[GES](10,30)*RandomPick[GES](-1,1); @@ -297,72 +295,8 @@ Class BioGel : Actor SetStateLabel("XDeath"); return; } - FLineTraceData d; A_SetSize(0.1,0); - if ( BlockingLine ) - { - atline = BlockingLine; - normal = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit(); - atside = 1; - if ( !BlockingLine.sidedef[1] || (CurSector == BlockingLine.frontsector) ) - { - atside = 0; - normal *= -1; - } - Vector3 orig = (BlockingLine.v1.p.x,BlockingLine.v1.p.y,0); - Vector3 onwall = pos-(normal dot (pos-orig))*normal; - SetOrigin(onwall+normal*0.5,false); - // attempt to guess line part (upper/mid/lower) - if ( !atline.sidedef[1] ) atpart = 0; // mid - else if ( atline.sidedef[atside?0:1].sector.ceilingplane.ZAtPoint(pos.xy) < pos.z ) atpart = 1; // upper - else if ( atline.sidedef[atside?0:1].sector.floorplane.ZAtPoint(pos.xy) > pos.z ) atpart = -1; // lower - else atpart = 0; - if ( atpart == 1 ) - { - if ( atline.flags&Line.ML_DONTPEGTOP ) atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(1); - else atz = pos.z-atline.sidedef[atside?0:1].sector.GetPlaneTexZ(1); - } - else if ( atpart == -1 ) - { - if ( atline.flags&Line.ML_DONTPEGBOTTOM ) atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(0); - else atz = pos.z-atline.sidedef[atside?0:1].sector.GetPlaneTexZ(0); - } - else if ( atline.flags&Line.ML_DONTPEGBOTTOM ) atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(0); - else atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(1); - angle = atan2(normal.y,normal.x); - pitch = 0; - roll = 180; // otherwise it slides upwards (UT changes roll like this too) - if ( waterlevel > 0 ) hittype = HIT_FLOOR; - else hittype = HIT_WALL; - } - else if ( pos.z <= floorz+4 ) - { - atsector = cursector; - atplane = 0; - normal = cursector.floorplane.Normal; - pitch = asin(-normal.z); - angle = atan2(normal.y,normal.x); - roll = FRandom[GES](0,360); - SetOrigin((pos.x,pos.y,floorz)+normal*0.5,false); - atz = pos.z-cursector.GetPlaneTexZ(0); - hittype = HIT_FLOOR; - } - else if ( pos.z >= ceilingz-8 ) - { - atsector = cursector; - atplane = 1; - normal = cursector.ceilingplane.Normal; - pitch = asin(-normal.z); - angle = atan2(normal.y,normal.x); - roll = FRandom[GES](0,360); - SetOrigin((pos.x,pos.y,ceilingz)+normal*0.5,false); - atz = pos.z-cursector.GetPlaneTexZ(1); - if ( waterlevel > 0 ) hittype = HIT_FLOOR; - else if ( normal dot (0,0,-1) > 0.7 ) - hittype = HIT_CEILING; - else hittype = HIT_FLOOR; - } - else if ( tracer && tracer.bACTLIKEBRIDGE ) + if ( tracer && tracer.bACTLIKEBRIDGE ) { atbridge = tracer; onbridge = true; @@ -461,11 +395,76 @@ Class BioGel : Actor } } } + else if ( BlockingFloor ) + { + atsector = BlockingFloor; + atplane = 0; + normal = BlockingFloor.floorplane.Normal; + pitch = asin(-normal.z); + angle = atan2(normal.y,normal.x); + roll = FRandom[GES](0,360); + SetOrigin((pos.x,pos.y,floorz)+normal*0.5,false); + atz = pos.z-BlockingFloor.GetPlaneTexZ(0); + hittype = HIT_FLOOR; + } + else if ( BlockingCeiling ) + { + atsector = BlockingCeiling; + atplane = 1; + normal = BlockingCeiling.ceilingplane.Normal; + pitch = asin(-normal.z); + angle = atan2(normal.y,normal.x); + roll = FRandom[GES](0,360); + SetOrigin((pos.x,pos.y,ceilingz)+normal*0.5,false); + atz = pos.z-BlockingCeiling.GetPlaneTexZ(1); + if ( waterlevel > 0 ) hittype = HIT_FLOOR; + else if ( normal dot (0,0,-1) > 0.7 ) + hittype = HIT_CEILING; + else hittype = HIT_FLOOR; + } + else if ( BlockingLine ) + { + atline = BlockingLine; + normal = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit(); + atside = 1; + if ( !BlockingLine.sidedef[1] || (CurSector == BlockingLine.frontsector) ) + { + atside = 0; + normal *= -1; + } + Vector3 orig = (BlockingLine.v1.p.x,BlockingLine.v1.p.y,0); + Vector3 onwall = pos-(normal dot (pos-orig))*normal; + SetOrigin(onwall+normal*0.5,false); + // attempt to guess line part (upper/mid/lower) + if ( !atline.sidedef[1] ) atpart = 0; // mid + else if ( atline.sidedef[atside?0:1].sector.ceilingplane.ZAtPoint(pos.xy) < pos.z ) atpart = 1; // upper + else if ( atline.sidedef[atside?0:1].sector.floorplane.ZAtPoint(pos.xy) > pos.z ) atpart = -1; // lower + else atpart = 0; + if ( atpart == 1 ) + { + if ( atline.flags&Line.ML_DONTPEGTOP ) atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(1); + else atz = pos.z-atline.sidedef[atside?0:1].sector.GetPlaneTexZ(1); + } + else if ( atpart == -1 ) + { + if ( atline.flags&Line.ML_DONTPEGBOTTOM ) atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(0); + else atz = pos.z-atline.sidedef[atside?0:1].sector.GetPlaneTexZ(0); + } + else if ( atline.flags&Line.ML_DONTPEGBOTTOM ) atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(0); + else atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(1); + angle = atan2(normal.y,normal.x); + pitch = 0; + roll = 180; // otherwise it slides upwards (UT changes roll like this too) + if ( waterlevel > 0 ) hittype = HIT_FLOOR; + else hittype = HIT_WALL; + } else { SetStateLabel("XDeath"); return; } + b = Spawn("BioHitbox",pos); + b.target = self; A_PlaySound("ges/hit"); A_SprayDecal("BioSplat",-172); int numpt = Min(100,int(Scale.x*10))+Random[GES](-5,5); diff --git a/zscript/eightball.zsc b/zscript/eightball.zsc index 316ffb5..b5bbe21 100644 --- a/zscript/eightball.zsc +++ b/zscript/eightball.zsc @@ -221,11 +221,11 @@ Class UTGrenade : UTRocket DamageType 'GrenadeDeath'; -NOGRAVITY; +USEBOUNCESTATE; - -BOUNCEAUTOOFF; - +BOUNCEAUTOOFFFLOORONLY; -EXPLODEONWATER; +CANBOUNCEWATER; - BounceType "Doom"; + +NOEXPLODEFLOOR; + BounceType "Hexen"; + WallBounceFactor 0.75; BounceFactor 0.75; ReactionTime 85; Speed 20; @@ -243,20 +243,37 @@ Class UTGrenade : UTRocket Spawn: RCKT A 1 { - angle += anglevel; - pitch += pitchvel; - roll += rollvel; + if ( !bNOGRAVITY ) + { + angle += anglevel; + pitch += pitchvel; + roll += rollvel; + } + let s = Spawn("UTSmoke",pos); + s.scale *= 2.0; + s.alpha *= 0.6; + s.vel = (FRandom[Eightball](-0.1,0.1),FRandom[Eightball](-0.1,0.1),FRandom[Eightball](-0.1,0.3)); + s.vel += vel*0.05; + s.SetShade("000000"); A_Countdown(); } Wait; Bounce: RCKT A 0 { + bHITOWNER = true; A_PlaySound("utrl/bounce"); rollvel = FRandom[Eightball](-16,16); pitchvel = FRandom[Eightball](-16,16); anglevel = FRandom[Eightball](-16,16); - bHITOWNER = true; + if ( vel.z > 10 ) vel.z = 0.5*(10+vel.z); + else if ( BlockingFloor && (vel.xy.length() < 0.5) ) + { + vel *= 0; + bNOGRAVITY = true; + bMOVEWITHSECTOR = true; + ClearBounce(); + } } Goto Spawn; Death: diff --git a/zscript/enforcer.zsc b/zscript/enforcer.zsc index 74b6d02..8610c82 100644 --- a/zscript/enforcer.zsc +++ b/zscript/enforcer.zsc @@ -88,7 +88,7 @@ Class BulletImpact : Actor Class UTCasing : Actor { - int deadtimer; + int deadtimer, numbounces; double pitchvel, anglevel; double heat; @@ -102,7 +102,9 @@ Class UTCasing : Actor +THRUACTORS; +USEBOUNCESTATE; +INTERPOLATEANGLES; - BounceType "Doom"; + Mass 1; + BounceType "Hexen"; + WallBounceFactor 0.65; BounceFactor 0.65; BounceSound "bullet/casing"; } @@ -144,6 +146,12 @@ Class UTCasing : Actor pitchvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1); anglevel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1); vel = (vel.unit()+(FRandom[Junk](-.2,.2),FRandom[Junk](-.2,.2),FRandom[Junk](-.2,.2))).unit()*vel.length(); + if ( numbounces && ((numbounces > 3) || (Random[Junk](1,20) < 17) || (vel.z > -1.4)) ) + { + ClearBounce(); + ExplodeMissile(); + } + numbounces++; } Goto Spawn; Death: diff --git a/zscript/flakcannon.zsc b/zscript/flakcannon.zsc index 4432890..0b28847 100644 --- a/zscript/flakcannon.zsc +++ b/zscript/flakcannon.zsc @@ -166,12 +166,11 @@ Class FlakChunk : Actor Speed 50; DamageFunction Random[Flak](15,20); DamageType 'Shredded'; - BounceType "Doom"; + BounceType "Hexen"; BounceFactor 0.8; WallBounceFactor 0.8; PROJECTILE; +USEBOUNCESTATE; - -BOUNCEAUTOOFF; +CANBOUNCEWATER; +SKYEXPLODE; +INTERPOLATEANGLES; @@ -232,9 +231,8 @@ Class FlakChunk : Actor action void A_HandleBounce() { bHITOWNER = true; - A_SprayDecal("WallCrack",-8); int numpt = Random[Flak](2,3); - if ( frame < 10 ) + if ( (frame < 10) && Random[Flak](0,1) ) { for ( int i=0; i 0) || target.InStateSequence(target.CurState,target.FindState("XDeath")) ) + if ( !flak_corpsedamage || !target || (target.Health > 0) || target.InStateSequence(target.CurState,target.FindState("XDeath")) ) { Destroy(); return; @@ -1300,6 +1302,7 @@ Class ShredCorpseHitbox : Actor { // force gib (cheap ATM) State gib = target.FindState("XDeath"); + if ( !gib ) gib = target.FindState("Death.Extreme"); if ( gib ) target.SetState(gib); Destroy(); } @@ -1539,6 +1542,12 @@ Class UTMainHandler : StaticEventHandler // prettify Kinsie's test map for a more Unreal feel if ( level.GetChecksum() ~== "FBC3B6622A8B74AE06DE01E70007AC33" ) { + // just replace the -noflat- with a better scaled version + if ( !flak_doomtest ) + { + TexMan.ReplaceTextures("-noflat-","DefTex",0); + return; + } TextureID deftex = TexMan.CheckForTexture("-noflat-",TexMan.Type_Any); TextureID skytx = TexMan.CheckForTexture("BlueSky",TexMan.Type_Any); TextureID baseflor = TexMan.CheckForTexture("rClfFlr0",TexMan.Type_Any); @@ -1716,6 +1725,9 @@ Class UTMainHandler : StaticEventHandler override void RenderOverlay( RenderEvent e ) { + // well this if sure is a long one + if ( players[consoleplayer].camera.player && players[consoleplayer].camera.player.ReadyWeapon && (players[consoleplayer].camera.player.ReadyWeapon is 'UTWeapon') ) + UTWeapon(players[consoleplayer].camera.player.ReadyWeapon).RenderOverlay(e); if ( !menuactive ) return; if ( tex.IsNull() || !tex.IsValid() ) return; if ( !CVar.GetCVar('flak_showmenu',players[consoleplayer]).GetBool() ) return; @@ -1727,11 +1739,12 @@ Class UTMainHandler : StaticEventHandler { if ( e.Thing.bDONTGIB ) return; // gibbers - if ( flak_gibs && !e.Thing.bNOBLOOD && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.Thing.Health < e.Thing.GetGibHealth())) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) ) + if ( flak_gibs && !e.Thing.bNOBLOOD && (e.Thing.FindState("XDeath") || e.Thing.FindState("Death.Extreme")) && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.Thing.Health < e.Thing.GetGibHealth())) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) ) { // players have special gibbing if ( e.Thing.player ) { + // TODO return; } // generic gibbing diff --git a/zscript/utgore.zsc b/zscript/utgore.zsc index bc634b2..41179fa 100644 --- a/zscript/utgore.zsc +++ b/zscript/utgore.zsc @@ -8,6 +8,7 @@ Class UTBlood : Actor +NOBLOCKMAP; +NOGRAVITY; +NOTELEPORT; + +DONTSPLASH; +FORCEXYBILLBOARD; +PUFFGETSOWNER; } @@ -61,6 +62,7 @@ Class UTBloodDrop : Actor Default { Scale 0.24; + Mass 1; Radius 2; Height 2; RenderStyle "Translucent"; @@ -99,6 +101,7 @@ Class UTBloodSpurt : Actor { +NOBLOCKMAP; +NOGRAVITY; + +DONTSPLASH; +NOTELEPORT; +THRUACTORS; } @@ -134,6 +137,7 @@ Class UTBloodTrail : Actor +NOBLOCKMAP; +NOGRAVITY; +NOTELEPORT; + +DONTSPLASH; +THRUACTORS; } override void PostBeginPlay() @@ -183,6 +187,7 @@ Class UTBloodPuff : Actor +NOBLOCKMAP; +NOGRAVITY; +NOTELEPORT; + +DONTSPLASH; +FORCEXYBILLBOARD; } States @@ -284,12 +289,13 @@ Class UTGib : Actor { Radius 4; Height 4; - BounceType "Doom"; - BounceFactor 0.7; - WallBounceFactor 0.7; + BounceType "Hexen"; + BounceFactor 0.8; + WallBounceFactor 0.8; +ROLLSPRITE; +ROLLCENTER; +INTERPOLATEANGLES; + +CANBOUNCEWATER; +MISSILE; +THRUACTORS; +USEBOUNCESTATE; @@ -297,19 +303,30 @@ Class UTGib : Actor override void PostBeginPlay() { Super.PostBeginPlay(); - let t = Spawn("UTBloodTrail",pos); - t.target = self; - if ( bloodcolor ) t.SetShade(bloodcolor); - else t.SetShade(gameinfo.defaultbloodcolor); - t.translation = bloodtranslation; + tracer = Spawn("UTBloodTrail",pos); + tracer.target = self; + if ( bloodcolor ) tracer.SetShade(bloodcolor); + else tracer.SetShade(gameinfo.defaultbloodcolor); + tracer.translation = bloodtranslation; rollvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1); anglevel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1); pitchvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1); } void A_HandleBounce() { - if ( vel.length() > double.epsilon ) - vel = (vel.unit()+(FRandom[Blod](-0.2,0.2),FRandom[Blod](-0.2,0.2),FRandom[Blod](-0.2,0.2))).unit()*vel.length(); + double spd = vel.length(); + if ( spd > double.epsilon ) + vel = (vel.unit()+(FRandom[Blod](-0.2,0.2),FRandom[Blod](-0.2,0.2),FRandom[Blod](-0.2,0.2))).unit()*spd; + if ( BlockingFloor && (vel.xy.length() < 1) ) + { + ClearBounce(); + ExplodeMissile(); + } + if ( spd < 10 ) + { + if ( tracer ) tracer.Destroy(); + } + else if ( spd > 20 ) vel *= 0.8; A_PlaySound("misc/gibp"); double ang, pt; for ( int i=0; i<6; i++ )