diff --git a/Readme.md b/Readme.md index fe7533f..7bdc21f 100644 --- a/Readme.md +++ b/Readme.md @@ -3,7 +3,7 @@ What began as a test for importing UT vertex meshes has turned into an actual full UT weapon and item mod. -This mod requires a recent GZDoom devbuild (g3.6pre-31-gd965c9aa7 or later). +This mod requires GZDoom 3.7.0 or later. ## Currently implemented @@ -45,35 +45,32 @@ This mod requires a recent GZDoom devbuild (g3.6pre-31-gd965c9aa7 or later). - "Instant Rocket" mode toggleable with reload - Scaling/Customization options for the HUD - UT-like player movement physics + - Visual recoil affecting aim (improved A_Swing from Soundless Mound, can be + toggled) + - UT-like weapon dropping style + - UT player classes (sound only, no models yet) ## In progress - General polishing, bugfixing and rebalancing - Add some more effects - - Visual recoil affecting aim (time to recycle SM's A_Swing once again) - Lava/Slime footstep sounds? - - Additional model optimization and cleanup (optional, not needed for 1.0) - - Trim out unused animations (this one is going to be very time-consuming) - - Re-export models using umodelextract to correct the "mangling" caused by - using umodel (inconsistent texture indices, extra texture groups) - - Fix some oddly-oriented triangles (e.g. some parts of the flak cannon, can - be easily noticed when using invisibility) - - Recenter the backpack mesh (it was a complete hack job to begin with) - UT gore system (toggleable) ## Future plans - - Change the way inventory items are dropped to be more UT-like, this will - require GZDoom changes + - Additional model optimization and cleanup (optional, not needed for 1.0) + - Trim out unused animations (this one is going to be very time-consuming) + - Recenter the backpack mesh (it was a complete hack job to begin with) - Add ammo counters to Pulsegun, Minigun, Flak Cannon and Rocket Launcher once scripted textures are implemented - Add player models once GZDoom gets a well deserved model animation system overhaul (at the moment this would require a monumental amount of work in the current state-tied system) - Add weapon attachment support to player models when that is also added in - - Migrate RandomSpawners to CheckReplacement - Unreal 1 weapons mod and maybe also a monsters mod - - Port some of my UT weapon mods + - Port some of my UT weapon mods (and maybe also some of my personal faves by + others, such as Psi Weapon Dreams) ## Known bugs @@ -83,7 +80,7 @@ This mod requires a recent GZDoom devbuild (g3.6pre-31-gd965c9aa7 or later). even fix this) - Biorifle sludge doesn't handle 3d floors (especially sloped ones) properly. This is due to the unavailability of 3D floor data on ZScript and will be - fixed once 3D floors are exported to scripting + fixed once 3D floors are exported to scripting (still waiting on that PR) ## Known bugs that are not this mod's fault diff --git a/cvarinfo.txt b/cvarinfo.txt index a5f75e5..a35a451 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -1,30 +1,38 @@ -user int flak_protomenu = 0; // version of main menu (0: final, 1: 22x betas, 2: same as 1, but with extended menu music) -user bool flak_showmenu = true; // show the UT main menu background whenever the menu is open -server bool flak_pulsereload = false; // pulsegun can reload (features unused animation from early versions) -server bool flak_enforcerreload = false; // enforcer can reload -user bool flak_redeemerreadout = true; // enable target readout, may cause slowdowns on weak CPUs -user int flak_colorprefs = 2; // 0: team color, 1: player color, 2: custom color -user color flak_colorcustom = "00 80 ff"; // custom hud color -user int flak_opacity = 15; // UT's opacity is 1 <-> 16 in steps of 1 (default 15) - // 16 means fully opaque, everything else is just additive with gradually lowering alpha - // status is never fully opaque (clamped under 16) - // currently selected weapon and numbers are fully opaque until 8 opacity (their opacity is bumped by 7 basically) -user bool flak_showweapons = true; // if disabled, frags and ammo are shown centered, with a gap for armor and health -user bool flak_showstatus = true; // if disabled armor and health show on the top right (or center between frags and ammo if weapon display is disabled) -user bool flak_showammo = true; // show ammo counters -user bool flak_showfrags = true; // show kill/frag count -user bool flak_showinfo = true; // show name of aimed at player in mp (and their health if in coop or same team) -user float flak_hudsize = 1.0; // 0.2 <-> 1.0 in steps of 0.2 (default 1.0) -user float flak_weaponsize = 0.8; // 0.2 <-> 1.0 in steps of 0.2 (default 0.8) -user float flak_statussize = 1.0; // 0.5 <-> 1.5 in steps of 0.1 (default 1.0) -user bool flak_footsteps = true; // players make footstep sounds -server bool flak_translocator = false; // translocator is enabled (hello, sequence breaking) -user bool flak_noswitchdeemer = true; // don't switch to redeemer when out of ammo -user bool flak_deemershader = false; // fancy blur/grain/tint shader -server bool flak_classicsshock = false; // classic enhanced shock rifle (no altfire, beams don't have splash damage) -server bool flak_utmovement = false; // emulate UE1's air/ground movement physics -server bool flak_doomspeed = false; // keep Doomguy run speed when using UT movement -server bool flak_doomaircontrol = false; // keep Doom's limited air control when using UT movement -server bool flak_nobosstelefrag = false; // disable telefragging of boss monsters (useful when translocator is enabled) -server bool flak_nowalkdrop = false; // don't drop off ledges while holding walk key (glitchy) -server bool flak_corpsedamage = false; // [WIP/EXPERIMENTAL] allow corpses to take damage and be gibbed, currently just causes a jump to XDeath until gore system is implemented +user int flak_protomenu = 0; // version of main menu (0: final, 1: 22x betas, 2: same as 1, but with extended menu music) +user bool flak_showmenu = true; // show the UT main menu background whenever the menu is open +server bool flak_pulsereload = false; // pulsegun can reload (features unused animation from early versions) +server bool flak_enforcerreload = false; // enforcer can reload +user bool flak_redeemerreadout = true; // enable target readout, may cause slowdowns on weak CPUs +user bool flak_redeemerreadout_perframe = false; // target readout updates per-frame rather than per-tic. experimental for asmjit performance testing (seems to work well so far) +user int flak_colorprefs = 2; // 0: team color, 1: player color, 2: custom color +user color flak_colorcustom = "00 80 ff"; // custom hud color +user int flak_opacity = 15; // UT's opacity is 1 <-> 16 in steps of 1 (default 15) + // 16 means fully opaque, everything else is just additive with gradually lowering alpha + // status is never fully opaque (clamped under 16) + // currently selected weapon and numbers are fully opaque until 8 opacity (their opacity is bumped by 7 basically) +user bool flak_showweapons = true; // if disabled, frags and ammo are shown centered, with a gap for armor and health +user bool flak_showstatus = true; // if disabled armor and health show on the top right (or center between frags and ammo if weapon display is disabled) +user bool flak_showammo = true; // show ammo counters +user bool flak_showfrags = true; // show kill/frag count +user bool flak_showinfo = true; // show name of aimed at player in mp (and their health if in coop or same team) +user float flak_hudsize = 1.0; // 0.2 <-> 1.0 in steps of 0.2 (default 1.0) +user float flak_weaponsize = 0.8; // 0.2 <-> 1.0 in steps of 0.2 (default 0.8) +user float flak_statussize = 1.0; // 0.5 <-> 1.5 in steps of 0.1 (default 1.0) +user bool flak_footsteps = true; // players make footstep sounds +user bool flak_bossfootsteps = false; // boss players play mechanic footsteps (unlike in vanilla UT) +server bool flak_translocator = false; // translocator is enabled (hello, sequence breaking) +server bool flak_transloc2k4 = false; // translocator has recharging ammo like in UT2k4 and up +user bool flak_noswitchdeemer = true; // don't switch to redeemer when out of ammo +user bool flak_deemershader = false; // fancy blur/grain/tint shader +server bool flak_classicsshock = false; // classic enhanced shock rifle (no altfire, beams don't have splash damage) +server bool flak_utmovement = false; // emulate UE1's air/ground movement physics +server bool flak_doomspeed = false; // keep Doomguy run speed when using UT movement +server bool flak_doomaircontrol = false; // keep Doom's limited air control when using UT movement +server bool flak_nobosstelefrag = false; // disable telefragging of boss monsters (useful when translocator is enabled) +server bool flak_nowalkdrop = false; // [GLITCHY] don't drop off ledges while holding walk key +server bool flak_corpsedamage = false; // [WIP/EXPERIMENTAL] allow corpses to take damage and be gibbed, currently just causes a jump to XDeath until gore system is implemented +server bool flak_swingers = true; // weapon recoil that affects player view +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) \ No newline at end of file diff --git a/gldefs.txt b/gldefs.txt index 60bf262..e2c887c 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -182,6 +182,10 @@ HardwareShader Texture "models/JFA1.png" { Shader "shaders/glsl/AmbientGlow.fp" } +HardwareShader Texture "models/Flak_t.png" +{ + Shader "shaders/glsl/AmbientGlow.fp" +} HardwareShader Texture "models/JMedBox1.png" { Shader "shaders/glsl/AmbientGlow.fp" @@ -264,6 +268,10 @@ HardwareShader Texture "models/JM21.png" { Shader "shaders/glsl/AmbientGlow.fp" } +HardwareShader Texture "models/Mini_t.png" +{ + Shader "shaders/glsl/AmbientGlow.fp" +} HardwareShader Texture "models/JRocketPack1.png" { Shader "shaders/glsl/AmbientGlow.fp" @@ -272,6 +280,10 @@ HardwareShader Texture "models/JuRocket1_.png" { Shader "shaders/glsl/AmbientGlow.fp" } +HardwareShader Texture "models/Eight_t.png" +{ + Shader "shaders/glsl/AmbientGlow.fp" +} HardwareShader Texture "models/BulletBoxT.png" { Shader "shaders/glsl/AmbientGlow.fp" diff --git a/graphics/Blake.png b/graphics/Blake.png new file mode 100644 index 0000000..5b1d0b8 Binary files /dev/null and b/graphics/Blake.png differ diff --git a/graphics/Brock.png b/graphics/Brock.png new file mode 100644 index 0000000..19891f0 Binary files /dev/null and b/graphics/Brock.png differ diff --git a/graphics/Ivana.png b/graphics/Ivana.png new file mode 100644 index 0000000..c16e1d1 Binary files /dev/null and b/graphics/Ivana.png differ diff --git a/graphics/Lauren.png b/graphics/Lauren.png new file mode 100644 index 0000000..a3d748c Binary files /dev/null and b/graphics/Lauren.png differ diff --git a/graphics/M_DOOM.png b/graphics/M_DOOM.png index 67b138d..0ddd7e7 100644 Binary files a/graphics/M_DOOM.png and b/graphics/M_DOOM.png differ diff --git a/graphics/SkySetB_back.png b/graphics/SkySetB_back.png index 1b02d21..34e30c4 100644 Binary files a/graphics/SkySetB_back.png and b/graphics/SkySetB_back.png differ diff --git a/graphics/SkySetB_down.png b/graphics/SkySetB_down.png index 2461645..b9e4b7a 100644 Binary files a/graphics/SkySetB_down.png and b/graphics/SkySetB_down.png differ diff --git a/graphics/SkySetB_front.png b/graphics/SkySetB_front.png index 691b8a7..d4a6345 100644 Binary files a/graphics/SkySetB_front.png and b/graphics/SkySetB_front.png differ diff --git a/graphics/SkySetB_left.png b/graphics/SkySetB_left.png index 9b14403..857cff6 100644 Binary files a/graphics/SkySetB_left.png and b/graphics/SkySetB_left.png differ diff --git a/graphics/SkySetB_right.png b/graphics/SkySetB_right.png index fa78d20..50b3f79 100644 Binary files a/graphics/SkySetB_right.png and b/graphics/SkySetB_right.png differ diff --git a/graphics/SkySetB_up.png b/graphics/SkySetB_up.png index 33b178b..58457c3 100644 Binary files a/graphics/SkySetB_up.png and b/graphics/SkySetB_up.png differ diff --git a/graphics/Xan.png b/graphics/Xan.png new file mode 100644 index 0000000..6e971d5 Binary files /dev/null and b/graphics/Xan.png differ diff --git a/graphics/crosshairs/XHAIRB10.png b/graphics/crosshairs/XHAIRB10.png new file mode 100644 index 0000000..fc966a7 Binary files /dev/null and b/graphics/crosshairs/XHAIRB10.png differ diff --git a/graphics/crosshairs/XHAIRB11.png b/graphics/crosshairs/XHAIRB11.png new file mode 100644 index 0000000..9167f22 Binary files /dev/null and b/graphics/crosshairs/XHAIRB11.png differ diff --git a/graphics/crosshairs/XHAIRB12.png b/graphics/crosshairs/XHAIRB12.png new file mode 100644 index 0000000..4110546 Binary files /dev/null and b/graphics/crosshairs/XHAIRB12.png differ diff --git a/graphics/crosshairs/XHAIRB13.png b/graphics/crosshairs/XHAIRB13.png new file mode 100644 index 0000000..b71771c Binary files /dev/null and b/graphics/crosshairs/XHAIRB13.png differ diff --git a/graphics/crosshairs/XHAIRB14.png b/graphics/crosshairs/XHAIRB14.png new file mode 100644 index 0000000..28d1dcb Binary files /dev/null and b/graphics/crosshairs/XHAIRB14.png differ diff --git a/graphics/crosshairs/XHAIRB15.png b/graphics/crosshairs/XHAIRB15.png new file mode 100644 index 0000000..dd508fe Binary files /dev/null and b/graphics/crosshairs/XHAIRB15.png differ diff --git a/graphics/crosshairs/XHAIRB16.png b/graphics/crosshairs/XHAIRB16.png new file mode 100644 index 0000000..7bd3c63 Binary files /dev/null and b/graphics/crosshairs/XHAIRB16.png differ diff --git a/graphics/crosshairs/XHAIRB8.png b/graphics/crosshairs/XHAIRB8.png new file mode 100644 index 0000000..601328a Binary files /dev/null and b/graphics/crosshairs/XHAIRB8.png differ diff --git a/graphics/crosshairs/XHAIRB9.png b/graphics/crosshairs/XHAIRB9.png new file mode 100644 index 0000000..49676e2 Binary files /dev/null and b/graphics/crosshairs/XHAIRB9.png differ diff --git a/graphics/decals/BldSplt0.png b/graphics/decals/BldSplt0.png new file mode 100644 index 0000000..1ed783b Binary files /dev/null and b/graphics/decals/BldSplt0.png differ diff --git a/graphics/decals/BldSplt1.png b/graphics/decals/BldSplt1.png new file mode 100644 index 0000000..737f9b5 Binary files /dev/null and b/graphics/decals/BldSplt1.png differ diff --git a/graphics/decals/BldSplt2.png b/graphics/decals/BldSplt2.png new file mode 100644 index 0000000..caa4b7c Binary files /dev/null and b/graphics/decals/BldSplt2.png differ diff --git a/graphics/decals/BldSplt3.png b/graphics/decals/BldSplt3.png new file mode 100644 index 0000000..04f4ba5 Binary files /dev/null and b/graphics/decals/BldSplt3.png differ diff --git a/graphics/decals/BldSplt4.png b/graphics/decals/BldSplt4.png new file mode 100644 index 0000000..b7097a1 Binary files /dev/null and b/graphics/decals/BldSplt4.png differ diff --git a/graphics/decals/BldSplt5.png b/graphics/decals/BldSplt5.png new file mode 100644 index 0000000..6992397 Binary files /dev/null and b/graphics/decals/BldSplt5.png differ diff --git a/graphics/decals/BldSplt6.png b/graphics/decals/BldSplt6.png new file mode 100644 index 0000000..46da8db Binary files /dev/null and b/graphics/decals/BldSplt6.png differ diff --git a/graphics/decals/BldSplt7.png b/graphics/decals/BldSplt7.png new file mode 100644 index 0000000..f20617c Binary files /dev/null and b/graphics/decals/BldSplt7.png differ diff --git a/graphics/decals/BldSplt8.png b/graphics/decals/BldSplt8.png new file mode 100644 index 0000000..737f9b5 Binary files /dev/null and b/graphics/decals/BldSplt8.png differ diff --git a/graphics/decals/BldSplt9.png b/graphics/decals/BldSplt9.png new file mode 100644 index 0000000..cc61e6a Binary files /dev/null and b/graphics/decals/BldSplt9.png differ diff --git a/graphics/decals/BlodPol6.png b/graphics/decals/BlodPol6.png new file mode 100644 index 0000000..46da8db Binary files /dev/null and b/graphics/decals/BlodPol6.png differ diff --git a/graphics/decals/BlodPol7.png b/graphics/decals/BlodPol7.png new file mode 100644 index 0000000..6daa8b2 Binary files /dev/null and b/graphics/decals/BlodPol7.png differ diff --git a/graphics/decals/BlodPol8.png b/graphics/decals/BlodPol8.png new file mode 100644 index 0000000..f71db8d Binary files /dev/null and b/graphics/decals/BlodPol8.png differ diff --git a/graphics/decals/BlodPol9.png b/graphics/decals/BlodPol9.png new file mode 100644 index 0000000..343bc49 Binary files /dev/null and b/graphics/decals/BlodPol9.png differ diff --git a/graphics/WallCrk1.png b/graphics/decals/WallCrk1.png similarity index 100% rename from graphics/WallCrk1.png rename to graphics/decals/WallCrk1.png diff --git a/graphics/WallCrk2.png b/graphics/decals/WallCrk2.png similarity index 100% rename from graphics/WallCrk2.png rename to graphics/decals/WallCrk2.png diff --git a/graphics/bigblast.png b/graphics/decals/bigblast.png similarity index 100% rename from graphics/bigblast.png rename to graphics/decals/bigblast.png diff --git a/graphics/bigshck1.png b/graphics/decals/bigshck1.png similarity index 100% rename from graphics/bigshck1.png rename to graphics/decals/bigshck1.png diff --git a/graphics/bigshck2.png b/graphics/decals/bigshck2.png similarity index 100% rename from graphics/bigshck2.png rename to graphics/decals/bigshck2.png diff --git a/graphics/biospla2.png b/graphics/decals/biospla2.png similarity index 100% rename from graphics/biospla2.png rename to graphics/decals/biospla2.png diff --git a/graphics/biosplat.png b/graphics/decals/biosplat.png similarity index 100% rename from graphics/biosplat.png rename to graphics/decals/biosplat.png diff --git a/graphics/energymk.png b/graphics/decals/energymk.png similarity index 100% rename from graphics/energymk.png rename to graphics/decals/energymk.png diff --git a/graphics/impcrack.png b/graphics/decals/impcrack.png similarity index 100% rename from graphics/impcrack.png rename to graphics/decals/impcrack.png diff --git a/graphics/pock0_t.png b/graphics/decals/pock0_t.png similarity index 100% rename from graphics/pock0_t.png rename to graphics/decals/pock0_t.png diff --git a/graphics/pock2_t.png b/graphics/decals/pock2_t.png similarity index 100% rename from graphics/pock2_t.png rename to graphics/decals/pock2_t.png diff --git a/graphics/pock4_t.png b/graphics/decals/pock4_t.png similarity index 100% rename from graphics/pock4_t.png rename to graphics/decals/pock4_t.png diff --git a/graphics/rcktblst.png b/graphics/decals/rcktblst.png similarity index 100% rename from graphics/rcktblst.png rename to graphics/decals/rcktblst.png diff --git a/graphics/ripblast.png b/graphics/decals/ripblast.png similarity index 100% rename from graphics/ripblast.png rename to graphics/decals/ripblast.png diff --git a/graphics/shockmrk.png b/graphics/decals/shockmrk.png similarity index 100% rename from graphics/shockmrk.png rename to graphics/decals/shockmrk.png diff --git a/graphics/hud/Boss.png b/graphics/hud/Boss.png new file mode 100644 index 0000000..d173a8b Binary files /dev/null and b/graphics/hud/Boss.png differ diff --git a/graphics/hud/BossArm.png b/graphics/hud/BossArm.png new file mode 100644 index 0000000..194faff Binary files /dev/null and b/graphics/hud/BossArm.png differ diff --git a/graphics/hud/BossBlt.png b/graphics/hud/BossBlt.png new file mode 100644 index 0000000..1373411 Binary files /dev/null and b/graphics/hud/BossBlt.png differ diff --git a/graphics/hud/BossBot.png b/graphics/hud/BossBot.png new file mode 100644 index 0000000..347a72f Binary files /dev/null and b/graphics/hud/BossBot.png differ diff --git a/graphics/hud/BossPad.png b/graphics/hud/BossPad.png new file mode 100644 index 0000000..b011f9e Binary files /dev/null and b/graphics/hud/BossPad.png differ diff --git a/graphics/hud/IconTrn2.png b/graphics/hud/IconTrn2.png new file mode 100644 index 0000000..55e3fbc Binary files /dev/null and b/graphics/hud/IconTrn2.png differ diff --git a/graphics/hud/UseTrn2.png b/graphics/hud/UseTrn2.png new file mode 100644 index 0000000..dbb8868 Binary files /dev/null and b/graphics/hud/UseTrn2.png differ diff --git a/graphics/AroDup.png b/graphics/redeemer/AroDup.png similarity index 100% rename from graphics/AroDup.png rename to graphics/redeemer/AroDup.png diff --git a/graphics/GuidedX.png b/graphics/redeemer/GuidedX.png similarity index 100% rename from graphics/GuidedX.png rename to graphics/redeemer/GuidedX.png diff --git a/graphics/GuidedX1.png b/graphics/redeemer/GuidedX1.png similarity index 100% rename from graphics/GuidedX1.png rename to graphics/redeemer/GuidedX1.png diff --git a/graphics/GuidedX2.png b/graphics/redeemer/GuidedX2.png similarity index 100% rename from graphics/GuidedX2.png rename to graphics/redeemer/GuidedX2.png diff --git a/graphics/Readout.png b/graphics/redeemer/Readout.png similarity index 100% rename from graphics/Readout.png rename to graphics/redeemer/Readout.png diff --git a/graphics/wh0.png b/graphics/redeemer/wh0.png similarity index 100% rename from graphics/wh0.png rename to graphics/redeemer/wh0.png diff --git a/graphics/wh1.png b/graphics/redeemer/wh1.png similarity index 100% rename from graphics/wh1.png rename to graphics/redeemer/wh1.png diff --git a/graphics/wh2.png b/graphics/redeemer/wh2.png similarity index 100% rename from graphics/wh2.png rename to graphics/redeemer/wh2.png diff --git a/graphics/wh3.png b/graphics/redeemer/wh3.png similarity index 100% rename from graphics/wh3.png rename to graphics/redeemer/wh3.png diff --git a/graphics/wh4.png b/graphics/redeemer/wh4.png similarity index 100% rename from graphics/wh4.png rename to graphics/redeemer/wh4.png diff --git a/graphics/wh5.png b/graphics/redeemer/wh5.png similarity index 100% rename from graphics/wh5.png rename to graphics/redeemer/wh5.png diff --git a/graphics/wh6.png b/graphics/redeemer/wh6.png similarity index 100% rename from graphics/wh6.png rename to graphics/redeemer/wh6.png diff --git a/graphics/wh7.png b/graphics/redeemer/wh7.png similarity index 100% rename from graphics/wh7.png rename to graphics/redeemer/wh7.png diff --git a/graphics/wh8.png b/graphics/redeemer/wh8.png similarity index 100% rename from graphics/wh8.png rename to graphics/redeemer/wh8.png diff --git a/graphics/wh9.png b/graphics/redeemer/wh9.png similarity index 100% rename from graphics/wh9.png rename to graphics/redeemer/wh9.png diff --git a/graphics/whminus.png b/graphics/redeemer/whminus.png similarity index 100% rename from graphics/whminus.png rename to graphics/redeemer/whminus.png diff --git a/menudef.txt b/menudef.txt index 59308de..6633aaf 100644 --- a/menudef.txt +++ b/menudef.txt @@ -23,12 +23,19 @@ OptionMenu "UTOptionMenu" Option "Enforcer Reloading", "flak_enforcerreload", "YesNo" Option "Pulsegun Reloading", "flak_pulsereload", "YesNo" Option "Redeemer Target Visuals", "flak_redeemerreadout", "YesNo" + Option "Per-Frame Target Updates", "flak_redeemerreadout_perframe", "YesNo" Option "Redeemer View Shader", "flak_deemershader", "YesNo" Option "No Redeemer Autoswitch", "flak_noswitchdeemer", "YesNo" Option "Classic Enh. Shock Rifle", "flak_classicsshock", "YesNo" + Option "Visual Recoil", "flak_swingers", "YesNo" + Slider "Visual Recoil Strength", "flak_swingerstrength", 0.0, 1.0, 0.1, 1 + StaticText " " + StaticText "Item Options", "Gold" + Option "Jump Boots Act Like Radsuit", "flak_radboots", "YesNo" StaticText " " StaticText "Translocator (Potentially Game-Breaking)", "Gold" Option "Prevent Boss Telefrag", "flak_nobosstelefrag", "YesNo" + Option "Translocator Has Ammo", "flak_transloc2k4", "YesNo" Option "Enable Translocator", "flak_translocator", "YesNo" Command "Apply Changes", "event refreshtrans" StaticText " " @@ -53,6 +60,9 @@ OptionMenu "UTOptionMenu" StaticText " " StaticText "Misc Options", "Gold" Option "UT Footsteps", "flak_footsteps", "YesNo" + Option "Use Boss Class Footsteps", "flak_bossfootsteps", "YesNo" + Option "UT Blood", "flak_blood", "YesNo" + Option "[WIP] UT Gibbing", "flak_gibs", "YesNo" Option "[WIP] Corpses Take Damage", "flak_corpsedamage", "YesNo" } diff --git a/modeldef.enforcer b/modeldef.enforcer index 4164b1d..8e766b8 100644 --- a/modeldef.enforcer +++ b/modeldef.enforcer @@ -384,4 +384,4 @@ Model "Enforcer" FrameIndex 2NFA S 2 148 FrameIndex 2NFA T 2 149 FrameIndex 2NFA U 2 150 -} \ No newline at end of file +} diff --git a/modeldef.gore b/modeldef.gore new file mode 100644 index 0000000..f32a831 --- /dev/null +++ b/modeldef.gore @@ -0,0 +1,248 @@ +Model "UTGenericGib1" +{ + Path "models" + Model 0 "chunkM_d.3d" + Skin 0 "JGCow1.png" + Scale 0.04 0.04 0.048 + Offset 0 0 2 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 2 + + FrameIndex UGIB A 0 0 +} + +Model "UTGenericGib2" +{ + Path "models" + Model 0 "chunk2M_d.3d" + Skin 0 "JGCow1.png" + Scale 0.04 0.04 0.048 + Offset 0 0 2 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 2 + + FrameIndex UGIB A 0 0 +} + +Model "UTGenericGib3" +{ + Path "models" + Model 0 "chunk3M_d.3d" + Skin 0 "JGCow1.png" + Scale 0.04 0.04 0.048 + Offset 0 0 2 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 2 + + FrameIndex UGIB A 0 0 +} + +Model "UTGenericGib4" +{ + Path "models" + Model 0 "chunk4M_d.3d" + Skin 0 "JGCow1.png" + Scale 0.04 0.04 0.048 + Offset 0 0 2 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 2 + + FrameIndex UGIB A 0 0 +} + +Model "UTThigh" +{ + Path "models" + Model 0 "ThighUTM_d.3d" + Skin 0 "ThighT.png" + Scale 0.1 0.12 0.1 + Offset 0 3.5 0 + PitchOffset 90 + AngleOffset -90 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 2 + + FrameIndex UGIB A 0 0 +} + +Model "UTLiver" +{ + Path "models" + Model 0 "LiverM_d.3d" + Skin 0 "Jparts1.png" + Scale 0.04 0.04 0.048 + Offset 0 0 1 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 1 + + FrameIndex UGIB A 0 0 +} + +Model "UTStomach" +{ + Path "models" + Model 0 "stomachM_d.3d" + Skin 0 "Jparts1.png" + Scale 0.06 0.06 0.072 + Offset 0 0 1 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 1 + + FrameIndex UGIB A 0 0 +} + +Model "UTHeart" +{ + Path "models" + Model 0 "PHeartM_d.3d" + Skin 0 "Jmisc1.png" + Scale 0.03 0.03 0.036 + Offset 0 0 0.5 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 0.5 + + FrameIndex UGIB A 0 0 + FrameIndex UGIB B 0 1 + FrameIndex UGIB C 0 2 + FrameIndex UGIB D 0 3 + FrameIndex UGIB E 0 4 + FrameIndex UGIB F 0 5 +} + +Model "UTFemaleArm" +{ + Path "models" + Model 0 "femalearmm_d.3d" + Skin 0 "femalearmT.png" + Scale 0.16 0.16 0.192 + Offset 0 0 1.5 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 1.5 + + FrameIndex UGIB A 0 0 +} + +Model "UTFemaleFoot" +{ + Path "models" + Model 0 "femalefootm_d.3d" + Skin 0 "femalefootT.png" + Scale 0.16 0.16 0.192 + Offset 0 0 1.5 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 1.5 + + FrameIndex UGIB A 0 0 +} + +Model "UTFemaleTorso" +{ + Path "models" + Model 0 "femaletorsom_d.3d" + Skin 0 "femaletorsoT.png" + Scale 0.16 0.16 0.192 + Offset 0 0 4 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 4 + + FrameIndex UGIB A 0 0 +} + +Model "UTMaleArm" +{ + Path "models" + Model 0 "malearmm_d.3d" + Skin 0 "malearmT.png" + Scale 0.16 0.16 0.192 + Offset 0 0 1.5 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 1.5 + + FrameIndex UGIB A 0 0 +} + +Model "UTMaleFoot" +{ + Path "models" + Model 0 "malefootm_d.3d" + Skin 0 "malefootT.png" + Scale 0.16 0.16 0.192 + Offset 0 0 1.5 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 1.5 + + FrameIndex UGIB A 0 0 +} + +Model "UTMaleTorso" +{ + Path "models" + Model 0 "maletorsom_d.3d" + Skin 0 "maletorsoT.png" + Scale 0.16 0.16 0.192 + Offset 0 0 4 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 4 + + FrameIndex UGIB A 0 0 +} + +Model "UTHeadFemale" +{ + Path "models" + Model 0 "HeadFemaleM_d.3d" + Skin 0 "FMT1.png" + Scale 0.14 0.14 0.168 + Offset 0 0 3 + AngleOffset -90 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 3 + + FrameIndex UGIB A 0 0 +} + +Model "UTHeadMale" +{ + Path "models" + Model 0 "headmalem_d.3d" + Skin 0 "MMT1.png" + Scale 0.14 0.14 0.168 + Offset 0 0 3 + AngleOffset -90 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 3 + + FrameIndex UGIB A 0 0 +} diff --git a/modeldef.misc b/modeldef.misc index ff3c4da..f4b9606 100644 --- a/modeldef.misc +++ b/modeldef.misc @@ -48,8 +48,9 @@ Model "UTHealthPack" { Path "models" Model 0 "hbox_d.3d" - SurfaceSkin 0 0 "jhbox1.png" - SurfaceSkin 0 1 "FIZZHP00" + // indices start at 1 for this mesh + SurfaceSkin 0 1 "jhbox1.png" + SurfaceSkin 0 2 "FIZZHP00" Scale 0.2 0.24 0.2 RollOffset -90 ZOffset 16 @@ -61,9 +62,10 @@ Model "UTHealthBox" { Path "models" Model 0 "hboxbeta_d.3d" - SurfaceSkin 0 0 "jhboxbeta1.png" - SurfaceSkin 0 1 "FIZZHP10" + // indices start at 1 for this mesh + SurfaceSkin 0 1 "jhboxbeta1.png" SurfaceSkin 0 2 "FIZZHP10" + SurfaceSkin 0 3 "FIZZHP10" Scale 0.08 0.08 0.096 ZOffset 4 @@ -74,8 +76,9 @@ Model "UTMedBox" { Path "models" Model 0 "MedBox_d.3d" - SurfaceSkin 0 0 "JMedBox1.png" - SurfaceSkin 0 1 "FIZZHP10" + // indices start at 1 for this mesh + SurfaceSkin 0 1 "JMedBox1.png" + SurfaceSkin 0 2 "FIZZHP10" Scale 0.06 0.06 0.072 ZOffset 5 @@ -244,7 +247,8 @@ Model "UTInvisibility" { Path "models" Model 0 "invis2M_d.3d" - SurfaceSkin 0 0 "jinvis.png" + // indices start at 1 for this mesh + SurfaceSkin 0 1 "jinvis.png" Scale 0.1 0.1 0.12 ZOffset 9 @@ -254,7 +258,9 @@ Model "UTInvisibilityX" { Path "models" Model 0 "invis2M_d.3d" - SurfaceSkin 0 1 "invis00" + // gzdoom doesn't handle the environment mapped flag, so I had to edit + // it into a separate texnum + SurfaceSkin 0 2 "invis00" Scale 0.1 0.1 0.12 ZOffset 9 diff --git a/modeldef.pulse b/modeldef.pulse index 6008490..830f162 100644 --- a/modeldef.pulse +++ b/modeldef.pulse @@ -87,9 +87,10 @@ Model "PulseGun" { Path "models" Model 0 "PulseGunR_d.3d" - SurfaceSkin 0 0 "AmmoLedBase.png" - SurfaceSkin 0 1 "JPulseGun_02.png" - SurfaceSkin 0 2 "JPulseGun_03.png" + // indices start at 1 for this model + SurfaceSkin 0 1 "AmmoLedBase.png" + SurfaceSkin 0 2 "JPulseGun_02.png" + SurfaceSkin 0 3 "JPulseGun_03.png" AngleOffset 90 Scale 0.26 -0.28 0.28 Offset 0.0 -7.5 -10.4 diff --git a/modeldef.ripper b/modeldef.ripper index a6419bb..3694b3d 100644 --- a/modeldef.ripper +++ b/modeldef.ripper @@ -29,12 +29,12 @@ Model "Razor2" { Path "models" Model 0 "RazorBlade_d.3d" - SurfaceSkin 0 0 "RazSkin.png" + // indices start at 1 for this mesh + SurfaceSkin 0 1 "RazSkin.png" Offset -9.5 0 0 Scale 0.18 0.18 0.216 AngleOffset 90 USEACTORPITCH - USEACTORROLL FrameIndex RAZB A 0 0 } @@ -43,12 +43,12 @@ Model "Razor2Trail" { Path "models" Model 0 "RazorBlade_d.3d" - SurfaceSkin 0 1 "RazTrail.png" + // indices start at 1 for this mesh + SurfaceSkin 0 2 "RazTrail.png" Offset -19 0 0 Scale 0.36 0.18 0.216 AngleOffset 90 USEACTORPITCH - USEACTORROLL DONTCULLBACKFACES FrameIndex RAZB A 0 0 @@ -58,7 +58,8 @@ Model "Razor2Alt" { Path "models" Model 0 "RazorBlade_d.3d" - SurfaceSkin 0 0 "RazSkin.png" + // indices start at 1 for this mesh + SurfaceSkin 0 1 "RazSkin.png" Offset -9.5 0 0 Scale 0.18 0.18 0.216 AngleOffset 90 diff --git a/modeldef.shock b/modeldef.shock index c18c72c..ddb8eef 100644 --- a/modeldef.shock +++ b/modeldef.shock @@ -165,8 +165,7 @@ Model "ShockRifle" SurfaceSkin 0 0 "asmd_t1.png" SurfaceSkin 0 1 "asmd_t2.png" SurfaceSkin 0 2 "asmd_t3.png" - SurfaceSkin 0 3 "asmd_t3.png" - SurfaceSkin 0 4 "asmd_t4.png" + SurfaceSkin 0 3 "asmd_t4.png" AngleOffset 90 RollOffset 3 // subtly hide an ugly looking part of the model Scale 0.15 -0.12 0.15 @@ -253,8 +252,7 @@ Model "EnhancedShockRifle" SurfaceSkin 0 0 "sasmd_t1.png" SurfaceSkin 0 1 "sasmd_t2.png" SurfaceSkin 0 2 "sasmd_t3.png" - SurfaceSkin 0 3 "sasmd_t3.png" - SurfaceSkin 0 4 "sasmd_t4.png" + SurfaceSkin 0 3 "sasmd_t4.png" AngleOffset 90 RollOffset 3 // subtly hide an ugly looking part of the model Scale 0.15 -0.12 0.15 diff --git a/models/ASMD2M_a.3d b/models/ASMD2M_a.3d index 7f90a04..57d41bf 100644 Binary files a/models/ASMD2M_a.3d and b/models/ASMD2M_a.3d differ diff --git a/models/ASMD2M_d.3d b/models/ASMD2M_d.3d index 24932e1..45bdf56 100644 Binary files a/models/ASMD2M_d.3d and b/models/ASMD2M_d.3d differ diff --git a/models/ASMD2pick_a.3d b/models/ASMD2pick_a.3d index fe39a1e..ae49c40 100644 Binary files a/models/ASMD2pick_a.3d and b/models/ASMD2pick_a.3d differ diff --git a/models/ASMD2pick_d.3d b/models/ASMD2pick_d.3d index c5005dc..7c0ba02 100644 Binary files a/models/ASMD2pick_d.3d and b/models/ASMD2pick_d.3d differ diff --git a/models/AUbelt1.png b/models/AUbelt1.png index 2c57b2b..12c9f39 100644 Binary files a/models/AUbelt1.png and b/models/AUbelt1.png differ diff --git a/models/Armor2M_a.3d b/models/Armor2M_a.3d index ec9462b..4206692 100644 Binary files a/models/Armor2M_a.3d and b/models/Armor2M_a.3d differ diff --git a/models/Armor2M_d.3d b/models/Armor2M_d.3d index e701897..fd59a35 100644 Binary files a/models/Armor2M_d.3d and b/models/Armor2M_d.3d differ diff --git a/models/AutoML_a.3d b/models/AutoML_a.3d index 8322d5a..ed58d0d 100644 Binary files a/models/AutoML_a.3d and b/models/AutoML_a.3d differ diff --git a/models/AutoML_d.3d b/models/AutoML_d.3d index 0f43f6d..f629ddc 100644 Binary files a/models/AutoML_d.3d and b/models/AutoML_d.3d differ diff --git a/models/AutoMR_a.3d b/models/AutoMR_a.3d index 875cc6d..0fee45e 100644 Binary files a/models/AutoMR_a.3d and b/models/AutoMR_a.3d differ diff --git a/models/AutoMR_d.3d b/models/AutoMR_d.3d index 87754df..191777f 100644 Binary files a/models/AutoMR_d.3d and b/models/AutoMR_d.3d differ diff --git a/models/BRifle2Pick_a.3d b/models/BRifle2Pick_a.3d index 17df02d..64d4aa8 100644 Binary files a/models/BRifle2Pick_a.3d and b/models/BRifle2Pick_a.3d differ diff --git a/models/BRifle2Pick_d.3d b/models/BRifle2Pick_d.3d index 270620f..9e1753d 100644 Binary files a/models/BRifle2Pick_d.3d and b/models/BRifle2Pick_d.3d differ diff --git a/models/BRifle2_a.3d b/models/BRifle2_a.3d index e95a43d..3acf859 100644 Binary files a/models/BRifle2_a.3d and b/models/BRifle2_a.3d differ diff --git a/models/BRifle2_d.3d b/models/BRifle2_d.3d index 4217d84..b55473a 100644 Binary files a/models/BRifle2_d.3d and b/models/BRifle2_d.3d differ diff --git a/models/BigFlash_a.3d b/models/BigFlash_a.3d index d1d627b..41f3c72 100644 Binary files a/models/BigFlash_a.3d and b/models/BigFlash_a.3d differ diff --git a/models/BigFlash_d.3d b/models/BigFlash_d.3d index 65d92c1..abb3c4a 100644 Binary files a/models/BigFlash_d.3d and b/models/BigFlash_d.3d differ diff --git a/models/BioAmmoM_a.3d b/models/BioAmmoM_a.3d index 2e6c9c2..fdc2426 100644 Binary files a/models/BioAmmoM_a.3d and b/models/BioAmmoM_a.3d differ diff --git a/models/BioAmmoM_d.3d b/models/BioAmmoM_d.3d index 76a8b4b..f5c8099 100644 Binary files a/models/BioAmmoM_d.3d and b/models/BioAmmoM_d.3d differ diff --git a/models/BioGelm_a.3d b/models/BioGelm_a.3d index 90c2faa..447ff22 100644 Binary files a/models/BioGelm_a.3d and b/models/BioGelm_a.3d differ diff --git a/models/BioGelm_d.3d b/models/BioGelm_d.3d index 1dcb9c9..2557804 100644 Binary files a/models/BioGelm_d.3d and b/models/BioGelm_d.3d differ diff --git a/models/BladeHopperM_a.3d b/models/BladeHopperM_a.3d index ebca92f..b211780 100644 Binary files a/models/BladeHopperM_a.3d and b/models/BladeHopperM_a.3d differ diff --git a/models/BladeHopperM_d.3d b/models/BladeHopperM_d.3d index ceff6af..58bf1a9 100644 Binary files a/models/BladeHopperM_d.3d and b/models/BladeHopperM_d.3d differ diff --git a/models/BulletBoxM_a.3d b/models/BulletBoxM_a.3d index 1eeaa6b..9bf90bf 100644 Binary files a/models/BulletBoxM_a.3d and b/models/BulletBoxM_a.3d differ diff --git a/models/BulletBoxM_d.3d b/models/BulletBoxM_d.3d index 6ec243c..1418ed6 100644 Binary files a/models/BulletBoxM_d.3d and b/models/BulletBoxM_d.3d differ diff --git a/models/BulletImpact_a.3d b/models/BulletImpact_a.3d index 8cceccf..03c6955 100644 Binary files a/models/BulletImpact_a.3d and b/models/BulletImpact_a.3d differ diff --git a/models/BulletImpact_d.3d b/models/BulletImpact_d.3d index f715e6d..d4e211f 100644 Binary files a/models/BulletImpact_d.3d and b/models/BulletImpact_d.3d differ diff --git a/models/ChainSawPick_a.3d b/models/ChainSawPick_a.3d index 6f6cb5d..b76ba4c 100644 Binary files a/models/ChainSawPick_a.3d and b/models/ChainSawPick_a.3d differ diff --git a/models/ChainSawPick_d.3d b/models/ChainSawPick_d.3d index d0b0870..0a82010 100644 Binary files a/models/ChainSawPick_d.3d and b/models/ChainSawPick_d.3d differ diff --git a/models/EClipM_a.3d b/models/EClipM_a.3d index da14e6c..82a2212 100644 Binary files a/models/EClipM_a.3d and b/models/EClipM_a.3d differ diff --git a/models/EClipM_d.3d b/models/EClipM_d.3d index 410a065..2f1c17c 100644 Binary files a/models/EClipM_d.3d and b/models/EClipM_d.3d differ diff --git a/models/Eight2Pick_a.3d b/models/Eight2Pick_a.3d index 6d39f86..f85efbd 100644 Binary files a/models/Eight2Pick_a.3d and b/models/Eight2Pick_a.3d differ diff --git a/models/Eight2Pick_d.3d b/models/Eight2Pick_d.3d index 5028e2b..557051d 100644 Binary files a/models/Eight2Pick_d.3d and b/models/Eight2Pick_d.3d differ diff --git a/models/Eightm_a.3d b/models/Eightm_a.3d index 37d2201..2b0190f 100644 Binary files a/models/Eightm_a.3d and b/models/Eightm_a.3d differ diff --git a/models/Eightm_d.3d b/models/Eightm_d.3d index 6085b36..adb33ab 100644 Binary files a/models/Eightm_d.3d and b/models/Eightm_d.3d differ diff --git a/models/FMT1.png b/models/FMT1.png new file mode 100644 index 0000000..3520efb Binary files /dev/null and b/models/FMT1.png differ diff --git a/models/FemaleTorsoT.png b/models/FemaleTorsoT.png new file mode 100644 index 0000000..5fae50b Binary files /dev/null and b/models/FemaleTorsoT.png differ diff --git a/models/Flak2Pick_a.3d b/models/Flak2Pick_a.3d index d1d1c12..0733a5a 100644 Binary files a/models/Flak2Pick_a.3d and b/models/Flak2Pick_a.3d differ diff --git a/models/Flak2Pick_d.3d b/models/Flak2Pick_d.3d index f8fcf87..341c0db 100644 Binary files a/models/Flak2Pick_d.3d and b/models/Flak2Pick_d.3d differ diff --git a/models/FlakAmmoM_a.3d b/models/FlakAmmoM_a.3d index 34988b6..7312f38 100644 Binary files a/models/FlakAmmoM_a.3d and b/models/FlakAmmoM_a.3d differ diff --git a/models/FlakAmmoM_d.3d b/models/FlakAmmoM_d.3d index 184ce07..a5399b0 100644 Binary files a/models/FlakAmmoM_d.3d and b/models/FlakAmmoM_d.3d differ diff --git a/models/HeadFemaleM_a.3d b/models/HeadFemaleM_a.3d new file mode 100644 index 0000000..0ae8018 Binary files /dev/null and b/models/HeadFemaleM_a.3d differ diff --git a/models/HeadFemaleM_d.3d b/models/HeadFemaleM_d.3d new file mode 100644 index 0000000..34ebba8 Binary files /dev/null and b/models/HeadFemaleM_d.3d differ diff --git a/models/ImpPick_a.3d b/models/ImpPick_a.3d index 66900ae..cc0267e 100644 Binary files a/models/ImpPick_a.3d and b/models/ImpPick_a.3d differ diff --git a/models/ImpPick_d.3d b/models/ImpPick_d.3d index d910c5a..1a41cc9 100644 Binary files a/models/ImpPick_d.3d and b/models/ImpPick_d.3d differ diff --git a/models/ImpactHammer_a.3d b/models/ImpactHammer_a.3d index 0a91ba9..7b0ab1c 100644 Binary files a/models/ImpactHammer_a.3d and b/models/ImpactHammer_a.3d differ diff --git a/models/ImpactHammer_d.3d b/models/ImpactHammer_d.3d index 003b209..fabb3ae 100644 Binary files a/models/ImpactHammer_d.3d and b/models/ImpactHammer_d.3d differ diff --git a/models/JBRifle2.png b/models/JBRifle2.png index 9a01ed8..0ca737f 100644 Binary files a/models/JBRifle2.png and b/models/JBRifle2.png differ diff --git a/models/JBigFlash1.png b/models/JBigFlash1.png index f62569c..cebfde3 100644 Binary files a/models/JBigFlash1.png and b/models/JBigFlash1.png differ diff --git a/models/JGCow1.png b/models/JGCow1.png new file mode 100644 index 0000000..27d5245 Binary files /dev/null and b/models/JGCow1.png differ diff --git a/models/JPammo_01.png b/models/JPammo_01.png index fa98b92..1f0aa94 100644 Binary files a/models/JPammo_01.png and b/models/JPammo_01.png differ diff --git a/models/JShockCore.png b/models/JShockCore.png index 5ed4111..2942ca8 100644 Binary files a/models/JShockCore.png and b/models/JShockCore.png differ diff --git a/models/JTranslator1.png b/models/JTranslator1.png index c23f04d..5b00838 100644 Binary files a/models/JTranslator1.png and b/models/JTranslator1.png differ diff --git a/models/Jhbox1.png b/models/Jhbox1.png index bd5d6f5..088101b 100644 Binary files a/models/Jhbox1.png and b/models/Jhbox1.png differ diff --git a/models/Jlboot2.png b/models/Jlboot2.png index ed95c0a..abb748b 100644 Binary files a/models/Jlboot2.png and b/models/Jlboot2.png differ diff --git a/models/Jmisc1.png b/models/Jmisc1.png new file mode 100644 index 0000000..fc70e9a Binary files /dev/null and b/models/Jmisc1.png differ diff --git a/models/Jparts1.png b/models/Jparts1.png new file mode 100644 index 0000000..5109d83 Binary files /dev/null and b/models/Jparts1.png differ diff --git a/models/Jtutot1.png b/models/Jtutot1.png index 22604d3..5b0fc65 100644 Binary files a/models/Jtutot1.png and b/models/Jtutot1.png differ diff --git a/models/Jtutot2.png b/models/Jtutot2.png index 957226f..21ddc5a 100644 Binary files a/models/Jtutot2.png and b/models/Jtutot2.png differ diff --git a/models/Jtutot3.png b/models/Jtutot3.png index 4462990..4502c09 100644 Binary files a/models/Jtutot3.png and b/models/Jtutot3.png differ diff --git a/models/Jtutot4.png b/models/Jtutot4.png index 15f5231..3abca80 100644 Binary files a/models/Jtutot4.png and b/models/Jtutot4.png differ diff --git a/models/Jwhpick1.png b/models/Jwhpick1.png index f2b7669..de1c998 100644 Binary files a/models/Jwhpick1.png and b/models/Jwhpick1.png differ diff --git a/models/LiverM_a.3d b/models/LiverM_a.3d new file mode 100644 index 0000000..0146b76 Binary files /dev/null and b/models/LiverM_a.3d differ diff --git a/models/LiverM_d.3d b/models/LiverM_d.3d new file mode 100644 index 0000000..f6b9361 Binary files /dev/null and b/models/LiverM_d.3d differ diff --git a/models/MMT1.png b/models/MMT1.png new file mode 100644 index 0000000..51f06ff Binary files /dev/null and b/models/MMT1.png differ diff --git a/models/MagPick_a.3d b/models/MagPick_a.3d index 7a00640..1e778e0 100644 Binary files a/models/MagPick_a.3d and b/models/MagPick_a.3d differ diff --git a/models/MagPick_d.3d b/models/MagPick_d.3d index 77c31d5..e84d224 100644 Binary files a/models/MagPick_d.3d and b/models/MagPick_d.3d differ diff --git a/models/MedBox_a.3d b/models/MedBox_a.3d index 01f734a..92c8750 100644 Binary files a/models/MedBox_a.3d and b/models/MedBox_a.3d differ diff --git a/models/MedBox_d.3d b/models/MedBox_d.3d index 806ac03..f90d027 100644 Binary files a/models/MedBox_d.3d and b/models/MedBox_d.3d differ diff --git a/models/MercSymbol_a.3d b/models/MercSymbol_a.3d index 75a78d7..a8a9725 100644 Binary files a/models/MercSymbol_a.3d and b/models/MercSymbol_a.3d differ diff --git a/models/MercSymbol_d.3d b/models/MercSymbol_d.3d index b31bf8c..10d736b 100644 Binary files a/models/MercSymbol_d.3d and b/models/MercSymbol_d.3d differ diff --git a/models/MiniAmmom_a.3d b/models/MiniAmmom_a.3d index 4b0c8fa..0b3c584 100644 Binary files a/models/MiniAmmom_a.3d and b/models/MiniAmmom_a.3d differ diff --git a/models/MiniAmmom_d.3d b/models/MiniAmmom_d.3d index fdf6bab..7668698 100644 Binary files a/models/MiniAmmom_d.3d and b/models/MiniAmmom_d.3d differ diff --git a/models/MiniTrace_d.3d b/models/MiniTrace_d.3d index a79c7d6..df58f3e 100644 Binary files a/models/MiniTrace_d.3d and b/models/MiniTrace_d.3d differ diff --git a/models/Minigun2m_a.3d b/models/Minigun2m_a.3d index 5b0e4fb..c1d1d05 100644 Binary files a/models/Minigun2m_a.3d and b/models/Minigun2m_a.3d differ diff --git a/models/Minigun2m_d.3d b/models/Minigun2m_d.3d index e0be845..e10abb1 100644 Binary files a/models/Minigun2m_d.3d and b/models/Minigun2m_d.3d differ diff --git a/models/MinigunPick_a.3d b/models/MinigunPick_a.3d index 53c79cd..3ec0fae 100644 Binary files a/models/MinigunPick_a.3d and b/models/MinigunPick_a.3d differ diff --git a/models/MinigunPick_d.3d b/models/MinigunPick_d.3d index 86074ba..3577d55 100644 Binary files a/models/MinigunPick_d.3d and b/models/MinigunPick_d.3d differ diff --git a/models/Module_a.3d b/models/Module_a.3d index 4944646..b50f1fe 100644 Binary files a/models/Module_a.3d and b/models/Module_a.3d differ diff --git a/models/Module_d.3d b/models/Module_d.3d index 8a434df..3a07247 100644 Binary files a/models/Module_d.3d and b/models/Module_d.3d differ diff --git a/models/PAmmo_a.3d b/models/PAmmo_a.3d index 98d9a4c..dc36796 100644 Binary files a/models/PAmmo_a.3d and b/models/PAmmo_a.3d differ diff --git a/models/PAmmo_d.3d b/models/PAmmo_d.3d index 415b1df..182b9a1 100644 Binary files a/models/PAmmo_d.3d and b/models/PAmmo_d.3d differ diff --git a/models/PBolt_d.3d b/models/PBolt_d.3d index f3a60f4..c5344b9 100644 Binary files a/models/PBolt_d.3d and b/models/PBolt_d.3d differ diff --git a/models/PHeartM_a.3d b/models/PHeartM_a.3d new file mode 100644 index 0000000..f3757ad Binary files /dev/null and b/models/PHeartM_a.3d differ diff --git a/models/PHeartM_d.3d b/models/PHeartM_d.3d new file mode 100644 index 0000000..bf975a8 Binary files /dev/null and b/models/PHeartM_d.3d differ diff --git a/models/PulseGunR_a.3d b/models/PulseGunR_a.3d index da79de3..4f76113 100644 Binary files a/models/PulseGunR_a.3d and b/models/PulseGunR_a.3d differ diff --git a/models/PulseGunR_d.3d b/models/PulseGunR_d.3d index 262819d..0f6ec34 100644 Binary files a/models/PulseGunR_d.3d and b/models/PulseGunR_d.3d differ diff --git a/models/PulsePickup_a.3d b/models/PulsePickup_a.3d index 024e4f9..d85bf78 100644 Binary files a/models/PulsePickup_a.3d and b/models/PulsePickup_a.3d differ diff --git a/models/PulsePickup_d.3d b/models/PulsePickup_d.3d index 93f24cc..ffd1a4b 100644 Binary files a/models/PulsePickup_d.3d and b/models/PulsePickup_d.3d differ diff --git a/models/RazPick2_a.3d b/models/RazPick2_a.3d index 5ff367d..3deb04c 100644 Binary files a/models/RazPick2_a.3d and b/models/RazPick2_a.3d differ diff --git a/models/RazPick2_d.3d b/models/RazPick2_d.3d index a7b338e..2845c0d 100644 Binary files a/models/RazPick2_d.3d and b/models/RazPick2_d.3d differ diff --git a/models/Razor2_a.3d b/models/Razor2_a.3d index aa4a916..624b256 100644 Binary files a/models/Razor2_a.3d and b/models/Razor2_a.3d differ diff --git a/models/Razor2_d.3d b/models/Razor2_d.3d index ad0f1f7..fbb4440 100644 Binary files a/models/Razor2_d.3d and b/models/Razor2_d.3d differ diff --git a/models/RazorBlade_d.3d b/models/RazorBlade_d.3d index 3e60aa9..f29266d 100644 Binary files a/models/RazorBlade_d.3d and b/models/RazorBlade_d.3d differ diff --git a/models/Rifle2m_a.3d b/models/Rifle2m_a.3d index b12afb4..4357f9e 100644 Binary files a/models/Rifle2m_a.3d and b/models/Rifle2m_a.3d differ diff --git a/models/Rifle2m_d.3d b/models/Rifle2m_d.3d index c6f4591..8db467c 100644 Binary files a/models/Rifle2m_d.3d and b/models/Rifle2m_d.3d differ diff --git a/models/RiflePick_a.3d b/models/RiflePick_a.3d index 4c9cacd..0f8da2e 100644 Binary files a/models/RiflePick_a.3d and b/models/RiflePick_a.3d differ diff --git a/models/RiflePick_d.3d b/models/RiflePick_d.3d index 9af3219..9c40615 100644 Binary files a/models/RiflePick_d.3d and b/models/RiflePick_d.3d differ diff --git a/models/RifleRoundM_a.3d b/models/RifleRoundM_a.3d index 3af94fd..ffabbab 100644 Binary files a/models/RifleRoundM_a.3d and b/models/RifleRoundM_a.3d differ diff --git a/models/RifleRoundM_d.3d b/models/RifleRoundM_d.3d index efb9505..8034128 100644 Binary files a/models/RifleRoundM_d.3d and b/models/RifleRoundM_d.3d differ diff --git a/models/RocketPackMesh_a.3d b/models/RocketPackMesh_a.3d index 6c0ca16..764a245 100644 Binary files a/models/RocketPackMesh_a.3d and b/models/RocketPackMesh_a.3d differ diff --git a/models/RocketPackMesh_d.3d b/models/RocketPackMesh_d.3d index b0dfbce..cb227b6 100644 Binary files a/models/RocketPackMesh_d.3d and b/models/RocketPackMesh_d.3d differ diff --git a/models/SBolt_d.3d b/models/SBolt_d.3d index 88fd58f..91a7a4c 100644 Binary files a/models/SBolt_d.3d and b/models/SBolt_d.3d differ diff --git a/models/Shellc_a.3d b/models/Shellc_a.3d index 4c345ee..604addb 100644 Binary files a/models/Shellc_a.3d and b/models/Shellc_a.3d differ diff --git a/models/Shellc_d.3d b/models/Shellc_d.3d index 65b433a..bc31b99 100644 Binary files a/models/Shellc_d.3d and b/models/Shellc_d.3d differ diff --git a/models/ShieldBeltMeshM_a.3d b/models/ShieldBeltMeshM_a.3d index 72a2866..bddc744 100644 Binary files a/models/ShieldBeltMeshM_a.3d and b/models/ShieldBeltMeshM_a.3d differ diff --git a/models/ShieldBeltMeshM_d.3d b/models/ShieldBeltMeshM_d.3d index 1a75e79..3594002 100644 Binary files a/models/ShieldBeltMeshM_d.3d and b/models/ShieldBeltMeshM_d.3d differ diff --git a/models/ShockCoreM_a.3d b/models/ShockCoreM_a.3d index 075fad4..71fd33b 100644 Binary files a/models/ShockCoreM_a.3d and b/models/ShockCoreM_a.3d differ diff --git a/models/ShockCoreM_d.3d b/models/ShockCoreM_d.3d index 6d11cce..0b4fea7 100644 Binary files a/models/ShockCoreM_d.3d and b/models/ShockCoreM_d.3d differ diff --git a/models/ShockRWM_a.3d b/models/ShockRWM_a.3d index eee94c5..40a8e87 100644 Binary files a/models/ShockRWM_a.3d and b/models/ShockRWM_a.3d differ diff --git a/models/ShockRWM_d.3d b/models/ShockRWM_d.3d index bae754b..0f94d87 100644 Binary files a/models/ShockRWM_d.3d and b/models/ShockRWM_d.3d differ diff --git a/models/ShockWavem_a.3d b/models/ShockWavem_a.3d index eee94c5..40a8e87 100644 Binary files a/models/ShockWavem_a.3d and b/models/ShockWavem_a.3d differ diff --git a/models/ShockWavem_d.3d b/models/ShockWavem_d.3d index bae754b..0f94d87 100644 Binary files a/models/ShockWavem_d.3d and b/models/ShockWavem_d.3d differ diff --git a/models/Tele2_d.3d b/models/Tele2_d.3d index be54aad..9a4789c 100644 Binary files a/models/Tele2_d.3d and b/models/Tele2_d.3d differ diff --git a/models/ThighPads_a.3d b/models/ThighPads_a.3d index fff8638..3a0c962 100644 Binary files a/models/ThighPads_a.3d and b/models/ThighPads_a.3d differ diff --git a/models/ThighPads_d.3d b/models/ThighPads_d.3d index ee3dc2c..e1b637a 100644 Binary files a/models/ThighPads_d.3d and b/models/ThighPads_d.3d differ diff --git a/models/ThighT.png b/models/ThighT.png new file mode 100644 index 0000000..8fa8a73 Binary files /dev/null and b/models/ThighT.png differ diff --git a/models/ThighUTM_a.3d b/models/ThighUTM_a.3d new file mode 100644 index 0000000..3d906f4 Binary files /dev/null and b/models/ThighUTM_a.3d differ diff --git a/models/ThighUTM_d.3d b/models/ThighUTM_d.3d new file mode 100644 index 0000000..49b21ed Binary files /dev/null and b/models/ThighUTM_d.3d differ diff --git a/models/Trans3loc_a.3d b/models/Trans3loc_a.3d index 6e6065a..878fe66 100644 Binary files a/models/Trans3loc_a.3d and b/models/Trans3loc_a.3d differ diff --git a/models/Trans3loc_d.3d b/models/Trans3loc_d.3d index 08eddc0..8f02efa 100644 Binary files a/models/Trans3loc_d.3d and b/models/Trans3loc_d.3d differ diff --git a/models/TranslatorMesh_a.3d b/models/TranslatorMesh_a.3d index 92d5d8c..1e2dddc 100644 Binary files a/models/TranslatorMesh_a.3d and b/models/TranslatorMesh_a.3d differ diff --git a/models/TranslatorMesh_d.3d b/models/TranslatorMesh_d.3d index 185fbd6..b3385b7 100644 Binary files a/models/TranslatorMesh_d.3d and b/models/TranslatorMesh_d.3d differ diff --git a/models/Transloc_a.3d b/models/Transloc_a.3d index b4bddda..2cadac9 100644 Binary files a/models/Transloc_a.3d and b/models/Transloc_a.3d differ diff --git a/models/Transloc_d.3d b/models/Transloc_d.3d index c593d24..e39db70 100644 Binary files a/models/Transloc_d.3d and b/models/Transloc_d.3d differ diff --git a/models/UDamage_a.3d b/models/UDamage_a.3d index f14ef6e..b7828c0 100644 Binary files a/models/UDamage_a.3d and b/models/UDamage_a.3d differ diff --git a/models/UDamage_d.3d b/models/UDamage_d.3d index 2068cd3..ce76881 100644 Binary files a/models/UDamage_d.3d and b/models/UDamage_d.3d differ diff --git a/models/UTRingex_a.3d b/models/UTRingex_a.3d index 47dff7e..3a33b5c 100644 Binary files a/models/UTRingex_a.3d and b/models/UTRingex_a.3d differ diff --git a/models/UTRingex_d.3d b/models/UTRingex_d.3d index d3f99d2..2758dcc 100644 Binary files a/models/UTRingex_d.3d and b/models/UTRingex_d.3d differ diff --git a/models/UTRocket_a.3d b/models/UTRocket_a.3d index 769aa2b..d56597f 100644 Binary files a/models/UTRocket_a.3d and b/models/UTRocket_a.3d differ diff --git a/models/UTRocket_d.3d b/models/UTRocket_d.3d index e886159..8859c37 100644 Binary files a/models/UTRocket_d.3d and b/models/UTRocket_d.3d differ diff --git a/models/Vial_a.3d b/models/Vial_a.3d index f1487dd..29a9e08 100644 Binary files a/models/Vial_a.3d and b/models/Vial_a.3d differ diff --git a/models/Vial_d.3d b/models/Vial_d.3d index a3efcfb..36d3e80 100644 Binary files a/models/Vial_d.3d and b/models/Vial_d.3d differ diff --git a/models/WHPick_a.3d b/models/WHPick_a.3d index 481443e..baa31e0 100644 Binary files a/models/WHPick_a.3d and b/models/WHPick_a.3d differ diff --git a/models/WHPick_d.3d b/models/WHPick_d.3d index 5b51ee2..49d545b 100644 Binary files a/models/WHPick_d.3d and b/models/WHPick_d.3d differ diff --git a/models/WarHead_a.3d b/models/WarHead_a.3d index 3b46504..972a8f4 100644 Binary files a/models/WarHead_a.3d and b/models/WarHead_a.3d differ diff --git a/models/WarHead_d.3d b/models/WarHead_d.3d index 18bf4e6..4063be2 100644 Binary files a/models/WarHead_d.3d and b/models/WarHead_d.3d differ diff --git a/models/bossheadT.png b/models/bossheadT.png index f669912..2b6c85e 100644 Binary files a/models/bossheadT.png and b/models/bossheadT.png differ diff --git a/models/bossheadm_a.3d b/models/bossheadm_a.3d index 4c77542..59c5893 100644 Binary files a/models/bossheadm_a.3d and b/models/bossheadm_a.3d differ diff --git a/models/bossheadm_d.3d b/models/bossheadm_d.3d index fac0b99..1b9c045 100644 Binary files a/models/bossheadm_d.3d and b/models/bossheadm_d.3d differ diff --git a/models/chainsawM_a.3d b/models/chainsawM_a.3d index 763f3ab..3fa69a8 100644 Binary files a/models/chainsawM_a.3d and b/models/chainsawM_a.3d differ diff --git a/models/chainsawM_d.3d b/models/chainsawM_d.3d index a8bc823..d7fe13d 100644 Binary files a/models/chainsawM_d.3d and b/models/chainsawM_d.3d differ diff --git a/models/chunk2M_a.3d b/models/chunk2M_a.3d index 8d2687a..c2867de 100644 Binary files a/models/chunk2M_a.3d and b/models/chunk2M_a.3d differ diff --git a/models/chunk2M_d.3d b/models/chunk2M_d.3d index 7f804ff..157fc80 100644 Binary files a/models/chunk2M_d.3d and b/models/chunk2M_d.3d differ diff --git a/models/chunk3M_a.3d b/models/chunk3M_a.3d index 8d2687a..c2867de 100644 Binary files a/models/chunk3M_a.3d and b/models/chunk3M_a.3d differ diff --git a/models/chunk3M_d.3d b/models/chunk3M_d.3d index 7f804ff..157fc80 100644 Binary files a/models/chunk3M_d.3d and b/models/chunk3M_d.3d differ diff --git a/models/chunk4M_a.3d b/models/chunk4M_a.3d index 1eda858..dead706 100644 Binary files a/models/chunk4M_a.3d and b/models/chunk4M_a.3d differ diff --git a/models/chunk4M_d.3d b/models/chunk4M_d.3d index 00bfcef..d0230be 100644 Binary files a/models/chunk4M_d.3d and b/models/chunk4M_d.3d differ diff --git a/models/chunkM_a.3d b/models/chunkM_a.3d index c0a1e85..113d394 100644 Binary files a/models/chunkM_a.3d and b/models/chunkM_a.3d differ diff --git a/models/chunkM_d.3d b/models/chunkM_d.3d index 4affd81..d39f922 100644 Binary files a/models/chunkM_d.3d and b/models/chunkM_d.3d differ diff --git a/models/femalearmT.png b/models/femalearmT.png new file mode 100644 index 0000000..9a842fa Binary files /dev/null and b/models/femalearmT.png differ diff --git a/models/femalearmm_a.3d b/models/femalearmm_a.3d new file mode 100644 index 0000000..47c589b Binary files /dev/null and b/models/femalearmm_a.3d differ diff --git a/models/femalearmm_d.3d b/models/femalearmm_d.3d new file mode 100644 index 0000000..6896f21 Binary files /dev/null and b/models/femalearmm_d.3d differ diff --git a/models/femalefootT.png b/models/femalefootT.png new file mode 100644 index 0000000..c39b174 Binary files /dev/null and b/models/femalefootT.png differ diff --git a/models/femalefootm_a.3d b/models/femalefootm_a.3d new file mode 100644 index 0000000..5ab4a2f Binary files /dev/null and b/models/femalefootm_a.3d differ diff --git a/models/femalefootm_d.3d b/models/femalefootm_d.3d new file mode 100644 index 0000000..866caa6 Binary files /dev/null and b/models/femalefootm_d.3d differ diff --git a/models/femaletorsom_a.3d b/models/femaletorsom_a.3d new file mode 100644 index 0000000..0700d35 Binary files /dev/null and b/models/femaletorsom_a.3d differ diff --git a/models/femaletorsom_d.3d b/models/femaletorsom_d.3d new file mode 100644 index 0000000..74063da Binary files /dev/null and b/models/femaletorsom_d.3d differ diff --git a/models/flakm_a.3d b/models/flakm_a.3d index 2168a79..ad52d9d 100644 Binary files a/models/flakm_a.3d and b/models/flakm_a.3d differ diff --git a/models/flakm_d.3d b/models/flakm_d.3d index 86069a9..9ae584f 100644 Binary files a/models/flakm_d.3d and b/models/flakm_d.3d differ diff --git a/models/flakslugm_a.3d b/models/flakslugm_a.3d index 4706b44..76f3b9a 100644 Binary files a/models/flakslugm_a.3d and b/models/flakslugm_a.3d differ diff --git a/models/flakslugm_d.3d b/models/flakslugm_d.3d index 5665861..40d749f 100644 Binary files a/models/flakslugm_d.3d and b/models/flakslugm_d.3d differ diff --git a/models/hbox_a.3d b/models/hbox_a.3d index a6298b6..cbbe5f2 100644 Binary files a/models/hbox_a.3d and b/models/hbox_a.3d differ diff --git a/models/hbox_d.3d b/models/hbox_d.3d index 13a022b..97d8211 100644 Binary files a/models/hbox_d.3d and b/models/hbox_d.3d differ diff --git a/models/hboxbeta_a.3d b/models/hboxbeta_a.3d index 9e209f7..f6d87d2 100644 Binary files a/models/hboxbeta_a.3d and b/models/hboxbeta_a.3d differ diff --git a/models/hboxbeta_d.3d b/models/hboxbeta_d.3d index 0b7eb7f..927c3b6 100644 Binary files a/models/hboxbeta_d.3d and b/models/hboxbeta_d.3d differ diff --git a/models/headmalem_a.3d b/models/headmalem_a.3d new file mode 100644 index 0000000..8e06966 Binary files /dev/null and b/models/headmalem_a.3d differ diff --git a/models/headmalem_d.3d b/models/headmalem_d.3d new file mode 100644 index 0000000..5d85ca1 Binary files /dev/null and b/models/headmalem_d.3d differ diff --git a/models/invis2M_a.3d b/models/invis2M_a.3d index 89871f6..b11ae52 100644 Binary files a/models/invis2M_a.3d and b/models/invis2M_a.3d differ diff --git a/models/invis2M_d.3d b/models/invis2M_d.3d index 2bea3c0..163fc07 100644 Binary files a/models/invis2M_d.3d and b/models/invis2M_d.3d differ diff --git a/models/jboot_a.3d b/models/jboot_a.3d index b7182d5..f1ca0d9 100644 Binary files a/models/jboot_a.3d and b/models/jboot_a.3d differ diff --git a/models/jboot_d.3d b/models/jboot_d.3d index 5642be6..e10a3c9 100644 Binary files a/models/jboot_d.3d and b/models/jboot_d.3d differ diff --git a/models/jinvis.png b/models/jinvis.png index d644ef9..2499847 100644 Binary files a/models/jinvis.png and b/models/jinvis.png differ diff --git a/models/malearmT.png b/models/malearmT.png new file mode 100644 index 0000000..ba30599 Binary files /dev/null and b/models/malearmT.png differ diff --git a/models/malearmm_a.3d b/models/malearmm_a.3d new file mode 100644 index 0000000..021bdc5 Binary files /dev/null and b/models/malearmm_a.3d differ diff --git a/models/malearmm_d.3d b/models/malearmm_d.3d new file mode 100644 index 0000000..16662ce Binary files /dev/null and b/models/malearmm_d.3d differ diff --git a/models/malefootT.png b/models/malefootT.png new file mode 100644 index 0000000..45c0ebf Binary files /dev/null and b/models/malefootT.png differ diff --git a/models/malefootm_a.3d b/models/malefootm_a.3d new file mode 100644 index 0000000..b4b40f7 Binary files /dev/null and b/models/malefootm_a.3d differ diff --git a/models/malefootm_d.3d b/models/malefootm_d.3d new file mode 100644 index 0000000..2982dd2 Binary files /dev/null and b/models/malefootm_d.3d differ diff --git a/models/maletorsoT.png b/models/maletorsoT.png new file mode 100644 index 0000000..439b3f6 Binary files /dev/null and b/models/maletorsoT.png differ diff --git a/models/maletorsom_a.3d b/models/maletorsom_a.3d new file mode 100644 index 0000000..2305d5d Binary files /dev/null and b/models/maletorsom_a.3d differ diff --git a/models/maletorsom_d.3d b/models/maletorsom_d.3d new file mode 100644 index 0000000..f8a55e6 Binary files /dev/null and b/models/maletorsom_d.3d differ diff --git a/models/missile_a.3d b/models/missile_a.3d index aa0a26e..1a4e5da 100644 Binary files a/models/missile_a.3d and b/models/missile_a.3d differ diff --git a/models/missile_d.3d b/models/missile_d.3d index 10a1c5e..75dd444 100644 Binary files a/models/missile_d.3d and b/models/missile_d.3d differ diff --git a/models/sbolt0.png b/models/sbolt0.png index 98d4f3d..ad82ce9 100644 Binary files a/models/sbolt0.png and b/models/sbolt0.png differ diff --git a/models/sbolt1.png b/models/sbolt1.png index b5a9b52..5a0250f 100644 Binary files a/models/sbolt1.png and b/models/sbolt1.png differ diff --git a/models/sbolt2.png b/models/sbolt2.png index 965c8d5..fce0b35 100644 Binary files a/models/sbolt2.png and b/models/sbolt2.png differ diff --git a/models/stomachM_a.3d b/models/stomachM_a.3d new file mode 100644 index 0000000..be58386 Binary files /dev/null and b/models/stomachM_a.3d differ diff --git a/models/stomachM_d.3d b/models/stomachM_d.3d new file mode 100644 index 0000000..fa57bb5 Binary files /dev/null and b/models/stomachM_d.3d differ diff --git a/models/tloc2_.png b/models/tloc2_.png index cf751fb..fe7aa51 100644 Binary files a/models/tloc2_.png and b/models/tloc2_.png differ diff --git a/sndinfo.txt b/sndinfo.txt index 638223c..5f879a3 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -16,8 +16,11 @@ ut/malepain3 injurm04 ut/malepain4 injurh5 ut/land land1 ut/malegrunt land10 +ut/malegrunt1 mland3 ut/malejump jump1 +ut/malejump1 tmjump3 ut/malehump land01 +ut/malehump1 mland3 ut/malesurf gasp02 ut/malegasp hgasp1 ut/maledrowned1 uwinjr41 @@ -25,27 +28,54 @@ ut/drowned uwinjr42 $random ut/maledrowned { ut/maledrowned1 ut/drowned } ut/maledrowning drownm02 -$playeralias player male *death ut/maledie -$playeralias player male *xdeath ut/malexdie -$playeralias player male *gibbed ut/gibp -$playeralias player male *pain100 ut/malepain1 -$playeralias player male *pain75 ut/malepain2 -$playeralias player male *pain50 ut/malepain3 -$playeralias player male *pain25 ut/malepain4 -$playeralias player male *grunt ut/malegrunt -$playeralias player male *land DSEMPTY -$playeralias player male *uland ut/land -$playeralias player male *jump ut/malejump -$playeralias player male *usefail ut/malehump -$playeralias player male *surface ut/malesurface -$playeralias player male *gasp ut/malegasp +// hotfix for a doom glitch +$playeralias player male *land DSEMPTY +$playeralias player female *land DSEMPTY +$playeralias player other *land DSEMPTY -$playeralias player male *death-drowning ut/maledrowned -$playeralias player male *xdeath-drowning ut/maledrowned -$playeralias player male *pain100-drowning ut/maledrowning -$playeralias player male *pain75-drowning ut/maledrowning -$playeralias player male *pain50-drowning ut/maledrowning -$playeralias player male *pain25-drowning ut/maledrowning +$playeralias tmale1 neutral *death ut/maledie +$playeralias tmale1 neutral *xdeath ut/malexdie +$playeralias tmale1 neutral *gibbed ut/gibp +$playeralias tmale1 neutral *pain100 ut/malepain1 +$playeralias tmale1 neutral *pain75 ut/malepain2 +$playeralias tmale1 neutral *pain50 ut/malepain3 +$playeralias tmale1 neutral *pain25 ut/malepain4 +$playeralias tmale1 neutral *grunt ut/malegrunt +$playeralias tmale1 neutral *land DSEMPTY +$playeralias tmale1 neutral *uland ut/land1 +$playeralias tmale1 neutral *jump ut/malejump1 +$playeralias tmale1 neutral *usefail ut/malehump1 +$playeralias tmale1 neutral *surface ut/malesurface +$playeralias tmale1 neutral *gasp ut/malegasp + +$playeralias tmale1 neutral *death-drowning ut/maledrowned +$playeralias tmale1 neutral *xdeath-drowning ut/maledrowned +$playeralias tmale1 neutral *pain100-drowning ut/maledrowning +$playeralias tmale1 neutral *pain75-drowning ut/maledrowning +$playeralias tmale1 neutral *pain50-drowning ut/maledrowning +$playeralias tmale1 neutral *pain25-drowning ut/maledrowning + +$playeralias tmale2 neutral *death ut/maledie +$playeralias tmale2 neutral *xdeath ut/malexdie +$playeralias tmale2 neutral *gibbed ut/gibp +$playeralias tmale2 neutral *pain100 ut/malepain1 +$playeralias tmale2 neutral *pain75 ut/malepain2 +$playeralias tmale2 neutral *pain50 ut/malepain3 +$playeralias tmale2 neutral *pain25 ut/malepain4 +$playeralias tmale2 neutral *grunt ut/malegrunt +$playeralias tmale2 neutral *land DSEMPTY +$playeralias tmale2 neutral *uland ut/land +$playeralias tmale2 neutral *jump ut/malejump +$playeralias tmale2 neutral *usefail ut/malehump +$playeralias tmale2 neutral *surface ut/malesurface +$playeralias tmale2 neutral *gasp ut/malegasp + +$playeralias tmale2 neutral *death-drowning ut/maledrowned +$playeralias tmale2 neutral *xdeath-drowning ut/maledrowned +$playeralias tmale2 neutral *pain100-drowning ut/maledrowning +$playeralias tmale2 neutral *pain75-drowning ut/maledrowning +$playeralias tmale2 neutral *pain50-drowning ut/maledrowning +$playeralias tmale2 neutral *pain25-drowning ut/maledrowning ut/femaledie1 decap01 ut/femaledie2 death1d @@ -67,33 +97,73 @@ ut/femaledrowned1 uwhit01 $random ut/femaledrowned { ut/femaledroenwd1 ut/drowned } ut/femaledrowning mdrown2f -$playeralias player female *death ut/femaledie -$playeralias player female *xdeath ut/femalexdie -$playeralias player female *gibbed ut/gibp -$playeralias player female *pain100 ut/femalepain1 -$playeralias player female *pain75 ut/femalepain2 -$playeralias player female *pain50 ut/femalepain3 -$playeralias player female *pain25 ut/femalepain4 -$playeralias player female *grunt ut/femalegrunt -$playeralias player female *land DSEMPTY -$playeralias player female *uland ut/land -$playeralias player female *jump ut/femalejump -$playeralias player female *usefail ut/femalegrunt -$playeralias player female *surface ut/femalesurf -$playeralias player female *gasp ut/femalegasp +$playeralias tfemale neutral *death ut/femaledie +$playeralias tfemale neutral *xdeath ut/femalexdie +$playeralias tfemale neutral *gibbed ut/gibp +$playeralias tfemale neutral *pain100 ut/femalepain1 +$playeralias tfemale neutral *pain75 ut/femalepain2 +$playeralias tfemale neutral *pain50 ut/femalepain3 +$playeralias tfemale neutral *pain25 ut/femalepain4 +$playeralias tfemale neutral *grunt ut/femalegrunt +$playeralias tfemale neutral *land DSEMPTY +$playeralias tfemale neutral *uland ut/land +$playeralias tfemale neutral *jump ut/femalejump +$playeralias tfemale neutral *usefail ut/femalegrunt +$playeralias tfemale neutral *surface ut/femalesurf +$playeralias tfemale neutral *gasp ut/femalegasp -$playeralias player female *death-drowning ut/femaledrowned -$playeralias player female *xdeath-drowning ut/femaledrowned -$playeralias player female *pain100-drowning ut/femaledrowning -$playeralias player female *pain75-drowning ut/femaledrowning -$playeralias player female *pain50-drowning ut/femaledrowning -$playeralias player female *pain25-drowning ut/femaledrowning +$playeralias tfemale neutral *death-drowning ut/femaledrowned +$playeralias tfemale neutral *xdeath-drowning ut/femaledrowned +$playeralias tfemale neutral *pain100-drowning ut/femaledrowning +$playeralias tfemale neutral *pain75-drowning ut/femaledrowning +$playeralias tfemale neutral *pain50-drowning ut/femaledrowning +$playeralias tfemale neutral *pain25-drowning ut/femaledrowning + +ut/bossdie1 bdeath1 +ut/bossdie2 bdeath2 +ut/bossdie3 bdeath3 +$random ut/bossdie { ut/bossdie1 ut/bossdie2 ut/bossdie3 } +ut/bossxdie1 bdeath4 +ut/bossxdie2 bdeath3 +$random ut/bossxdie { ut/bossxdie1 ut/bossxdie2 } +ut/gibpboss bnewgib +ut/bosspain1 binjur1 +ut/bosspain2 binjur2 +ut/bosspain3 binjur3 +ut/bosspain4 binjur4 +ut/bossgrunt bland01 +ut/bossjump bjump1 +ut/bosshump bjump1 + +$playeralias tboss neutral *death ut/bossdie +$playeralias tboss neutral *xdeath ut/bossxdie +$playeralias tboss neutral *gibbed ut/gibpboss +$playeralias tboss neutral *pain100 ut/bosspain1 +$playeralias tboss neutral *pain75 ut/bosspain2 +$playeralias tboss neutral *pain50 ut/bosspain3 +$playeralias tboss neutral *pain25 ut/bosspain4 +$playeralias tboss neutral *grunt ut/bossgrunt +$playeralias tboss neutral *land DSEMPTY +$playeralias tboss neutral *uland ut/land +$playeralias tboss neutral *jump ut/bossjump +$playeralias tboss neutral *usefail ut/bosshump +$playeralias tboss neutral *surface ut/malesurf +$playeralias tboss neutral *gasp ut/malegasp + +$playeralias tboss neutral *death-drowning ut/maledrowned +$playeralias tboss neutral *xdeath-drowning ut/maledrowned +$playeralias tboss neutral *pain100-drowning ut/maledrowning +$playeralias tboss neutral *pain75-drowning ut/maledrowning +$playeralias tboss neutral *pain50-drowning ut/maledrowning +$playeralias tboss neutral *pain25-drowning ut/maledrowning ut/playerfootstep1 stone02 ut/playerfootstep2 stone04 ut/playerfootstep3 stone05 $random ut/playerfootstep { ut/playerfootstep1 ut/playerfootstep2 ut/playerfootstep3 } +ut/bossfootstep bfootstep + ut/playerfootstepwet lsplash ut/wetsplash dsplash @@ -129,15 +199,15 @@ misc/gibbed3 gib3 misc/gibbed4 gib4 misc/gibbed5 gib5 $random misc/gibbed { misc/gibbed1 misc/gibbed2 misc/gibbed3 misc/gibbed4 misc/gibbed5 } -// universal gibs compat -$alias UniversalGibs/Gib misc/gibbed -// droplets compat misc/gibp1 gibp1 misc/gibp2 gibp3 misc/gibp3 gibp4 misc/gibp4 gibp5 misc/gibp5 gibp6 $random misc/gibp { misc/gibp1 misc/gibp2 misc/gibp3 misc/gibp4 misc/gibp5 } +// universal gibs compat +$alias UniversalGibs/Gib misc/gibbed +// droplets compat $alias blood/hit misc/gibp impact/select imppick diff --git a/sounds/BFootstep.ogg b/sounds/BFootstep.ogg new file mode 100644 index 0000000..82560bc Binary files /dev/null and b/sounds/BFootstep.ogg differ diff --git a/sounds/MLand3.ogg b/sounds/MLand3.ogg new file mode 100644 index 0000000..af427c3 Binary files /dev/null and b/sounds/MLand3.ogg differ diff --git a/sounds/TMJump3.ogg b/sounds/TMJump3.ogg new file mode 100644 index 0000000..d4bd309 Binary files /dev/null and b/sounds/TMJump3.ogg differ diff --git a/sprites/GEX2I0.png b/sprites/GEX2I0.png deleted file mode 100644 index 9d878a7..0000000 Binary files a/sprites/GEX2I0.png and /dev/null differ diff --git a/sprites/GEX2J0.png b/sprites/GEX2J0.png deleted file mode 100644 index 4ea38dc..0000000 Binary files a/sprites/GEX2J0.png and /dev/null differ diff --git a/sprites/GEX3F0.png b/sprites/GEX3F0.png deleted file mode 100644 index 37346d5..0000000 Binary files a/sprites/GEX3F0.png and /dev/null differ diff --git a/sprites/GEX3H0.png b/sprites/GEX3H0.png deleted file mode 100644 index d3d4bef..0000000 Binary files a/sprites/GEX3H0.png and /dev/null differ diff --git a/sprites/GEX3I0.png b/sprites/GEX3I0.png deleted file mode 100644 index 15d4675..0000000 Binary files a/sprites/GEX3I0.png and /dev/null differ diff --git a/sprites/GEX3J0.png b/sprites/GEX3J0.png deleted file mode 100644 index 91ab3d9..0000000 Binary files a/sprites/GEX3J0.png and /dev/null differ diff --git a/sprites/GEX3K0.png b/sprites/GEX3K0.png deleted file mode 100644 index 575acf7..0000000 Binary files a/sprites/GEX3K0.png and /dev/null differ diff --git a/sprites/ASMBA0.png b/sprites/asmd/ASMBA0.png similarity index 100% rename from sprites/ASMBA0.png rename to sprites/asmd/ASMBA0.png diff --git a/sprites/ASMBB0.png b/sprites/asmd/ASMBB0.png similarity index 100% rename from sprites/ASMBB0.png rename to sprites/asmd/ASMBB0.png diff --git a/sprites/ASMBC0.png b/sprites/asmd/ASMBC0.png similarity index 100% rename from sprites/ASMBC0.png rename to sprites/asmd/ASMBC0.png diff --git a/sprites/ASMBD0.png b/sprites/asmd/ASMBD0.png similarity index 100% rename from sprites/ASMBD0.png rename to sprites/asmd/ASMBD0.png diff --git a/sprites/ASMKA0.png b/sprites/asmd/ASMKA0.png similarity index 100% rename from sprites/ASMKA0.png rename to sprites/asmd/ASMKA0.png diff --git a/sprites/ASMXA0.png b/sprites/asmd/ASMXA0.png similarity index 100% rename from sprites/ASMXA0.png rename to sprites/asmd/ASMXA0.png diff --git a/sprites/ASMXB0.png b/sprites/asmd/ASMXB0.png similarity index 100% rename from sprites/ASMXB0.png rename to sprites/asmd/ASMXB0.png diff --git a/sprites/ASMXC0.png b/sprites/asmd/ASMXC0.png similarity index 100% rename from sprites/ASMXC0.png rename to sprites/asmd/ASMXC0.png diff --git a/sprites/ASMXD0.png b/sprites/asmd/ASMXD0.png similarity index 100% rename from sprites/ASMXD0.png rename to sprites/asmd/ASMXD0.png diff --git a/sprites/ASMXE0.png b/sprites/asmd/ASMXE0.png similarity index 100% rename from sprites/ASMXE0.png rename to sprites/asmd/ASMXE0.png diff --git a/sprites/ASMXF0.png b/sprites/asmd/ASMXF0.png similarity index 100% rename from sprites/ASMXF0.png rename to sprites/asmd/ASMXF0.png diff --git a/sprites/ASMXG0.png b/sprites/asmd/ASMXG0.png similarity index 100% rename from sprites/ASMXG0.png rename to sprites/asmd/ASMXG0.png diff --git a/sprites/ASMXH0.png b/sprites/asmd/ASMXH0.png similarity index 100% rename from sprites/ASMXH0.png rename to sprites/asmd/ASMXH0.png diff --git a/sprites/ASMXI0.png b/sprites/asmd/ASMXI0.png similarity index 100% rename from sprites/ASMXI0.png rename to sprites/asmd/ASMXI0.png diff --git a/sprites/ASMXJ0.png b/sprites/asmd/ASMXJ0.png similarity index 100% rename from sprites/ASMXJ0.png rename to sprites/asmd/ASMXJ0.png diff --git a/sprites/ASMXK0.png b/sprites/asmd/ASMXK0.png similarity index 100% rename from sprites/ASMXK0.png rename to sprites/asmd/ASMXK0.png diff --git a/sprites/ASMXL0.png b/sprites/asmd/ASMXL0.png similarity index 100% rename from sprites/ASMXL0.png rename to sprites/asmd/ASMXL0.png diff --git a/sprites/SSMBA0.png b/sprites/asmd/SSMBA0.png similarity index 100% rename from sprites/SSMBA0.png rename to sprites/asmd/SSMBA0.png diff --git a/sprites/SSMBB0.png b/sprites/asmd/SSMBB0.png similarity index 100% rename from sprites/SSMBB0.png rename to sprites/asmd/SSMBB0.png diff --git a/sprites/SSMBC0.png b/sprites/asmd/SSMBC0.png similarity index 100% rename from sprites/SSMBC0.png rename to sprites/asmd/SSMBC0.png diff --git a/sprites/SSMBD0.png b/sprites/asmd/SSMBD0.png similarity index 100% rename from sprites/SSMBD0.png rename to sprites/asmd/SSMBD0.png diff --git a/sprites/SSMKA0.png b/sprites/asmd/SSMKA0.png similarity index 100% rename from sprites/SSMKA0.png rename to sprites/asmd/SSMKA0.png diff --git a/sprites/SSMXA0.png b/sprites/asmd/SSMXA0.png similarity index 100% rename from sprites/SSMXA0.png rename to sprites/asmd/SSMXA0.png diff --git a/sprites/SSMXB0.png b/sprites/asmd/SSMXB0.png similarity index 100% rename from sprites/SSMXB0.png rename to sprites/asmd/SSMXB0.png diff --git a/sprites/SSMXC0.png b/sprites/asmd/SSMXC0.png similarity index 100% rename from sprites/SSMXC0.png rename to sprites/asmd/SSMXC0.png diff --git a/sprites/SSMXD0.png b/sprites/asmd/SSMXD0.png similarity index 100% rename from sprites/SSMXD0.png rename to sprites/asmd/SSMXD0.png diff --git a/sprites/SSMXE0.png b/sprites/asmd/SSMXE0.png similarity index 100% rename from sprites/SSMXE0.png rename to sprites/asmd/SSMXE0.png diff --git a/sprites/SSMXF0.png b/sprites/asmd/SSMXF0.png similarity index 100% rename from sprites/SSMXF0.png rename to sprites/asmd/SSMXF0.png diff --git a/sprites/SSMXG0.png b/sprites/asmd/SSMXG0.png similarity index 100% rename from sprites/SSMXG0.png rename to sprites/asmd/SSMXG0.png diff --git a/sprites/SSMXH0.png b/sprites/asmd/SSMXH0.png similarity index 100% rename from sprites/SSMXH0.png rename to sprites/asmd/SSMXH0.png diff --git a/sprites/SSMXI0.png b/sprites/asmd/SSMXI0.png similarity index 100% rename from sprites/SSMXI0.png rename to sprites/asmd/SSMXI0.png diff --git a/sprites/SSMXJ0.png b/sprites/asmd/SSMXJ0.png similarity index 100% rename from sprites/SSMXJ0.png rename to sprites/asmd/SSMXJ0.png diff --git a/sprites/blood/BDRPA0.png b/sprites/blood/BDRPA0.png new file mode 100644 index 0000000..134176c Binary files /dev/null and b/sprites/blood/BDRPA0.png differ diff --git a/sprites/blood/BDRPB0.png b/sprites/blood/BDRPB0.png new file mode 100644 index 0000000..c207618 Binary files /dev/null and b/sprites/blood/BDRPB0.png differ diff --git a/sprites/blood/BDRPC0.png b/sprites/blood/BDRPC0.png new file mode 100644 index 0000000..49d4c86 Binary files /dev/null and b/sprites/blood/BDRPC0.png differ diff --git a/sprites/blood/BDRPD0.png b/sprites/blood/BDRPD0.png new file mode 100644 index 0000000..c551dd2 Binary files /dev/null and b/sprites/blood/BDRPD0.png differ diff --git a/sprites/blood/BDRPE0.png b/sprites/blood/BDRPE0.png new file mode 100644 index 0000000..286d848 Binary files /dev/null and b/sprites/blood/BDRPE0.png differ diff --git a/sprites/blood/BPF1A0.png b/sprites/blood/BPF1A0.png new file mode 100644 index 0000000..35d8809 Binary files /dev/null and b/sprites/blood/BPF1A0.png differ diff --git a/sprites/blood/BPF1B0.png b/sprites/blood/BPF1B0.png new file mode 100644 index 0000000..437b7c3 Binary files /dev/null and b/sprites/blood/BPF1B0.png differ diff --git a/sprites/blood/BPF1C0.png b/sprites/blood/BPF1C0.png new file mode 100644 index 0000000..9273299 Binary files /dev/null and b/sprites/blood/BPF1C0.png differ diff --git a/sprites/blood/BPF1D0.png b/sprites/blood/BPF1D0.png new file mode 100644 index 0000000..ff4a4e8 Binary files /dev/null and b/sprites/blood/BPF1D0.png differ diff --git a/sprites/blood/BPF1E0.png b/sprites/blood/BPF1E0.png new file mode 100644 index 0000000..a8c7fb7 Binary files /dev/null and b/sprites/blood/BPF1E0.png differ diff --git a/sprites/blood/BPF1F0.png b/sprites/blood/BPF1F0.png new file mode 100644 index 0000000..5393a92 Binary files /dev/null and b/sprites/blood/BPF1F0.png differ diff --git a/sprites/blood/BPF1G0.png b/sprites/blood/BPF1G0.png new file mode 100644 index 0000000..3a00fc9 Binary files /dev/null and b/sprites/blood/BPF1G0.png differ diff --git a/sprites/blood/BPF1H0.png b/sprites/blood/BPF1H0.png new file mode 100644 index 0000000..e6880b8 Binary files /dev/null and b/sprites/blood/BPF1H0.png differ diff --git a/sprites/blood/BPF1I0.png b/sprites/blood/BPF1I0.png new file mode 100644 index 0000000..dfb098c Binary files /dev/null and b/sprites/blood/BPF1I0.png differ diff --git a/sprites/blood/BPF1J0.png b/sprites/blood/BPF1J0.png new file mode 100644 index 0000000..f98b35c Binary files /dev/null and b/sprites/blood/BPF1J0.png differ diff --git a/sprites/blood/BPF1K0.png b/sprites/blood/BPF1K0.png new file mode 100644 index 0000000..ebd8268 Binary files /dev/null and b/sprites/blood/BPF1K0.png differ diff --git a/sprites/blood/BPF2A0.png b/sprites/blood/BPF2A0.png new file mode 100644 index 0000000..e9c99d9 Binary files /dev/null and b/sprites/blood/BPF2A0.png differ diff --git a/sprites/blood/BPF2B0.png b/sprites/blood/BPF2B0.png new file mode 100644 index 0000000..b64f86a Binary files /dev/null and b/sprites/blood/BPF2B0.png differ diff --git a/sprites/blood/BPF2C0.png b/sprites/blood/BPF2C0.png new file mode 100644 index 0000000..2c567d4 Binary files /dev/null and b/sprites/blood/BPF2C0.png differ diff --git a/sprites/blood/BPF2D0.png b/sprites/blood/BPF2D0.png new file mode 100644 index 0000000..b4edc5c Binary files /dev/null and b/sprites/blood/BPF2D0.png differ diff --git a/sprites/blood/BPF2E0.png b/sprites/blood/BPF2E0.png new file mode 100644 index 0000000..1fa0618 Binary files /dev/null and b/sprites/blood/BPF2E0.png differ diff --git a/sprites/blood/BPF2F0.png b/sprites/blood/BPF2F0.png new file mode 100644 index 0000000..875ac12 Binary files /dev/null and b/sprites/blood/BPF2F0.png differ diff --git a/sprites/blood/BPF2G0.png b/sprites/blood/BPF2G0.png new file mode 100644 index 0000000..11f4fff Binary files /dev/null and b/sprites/blood/BPF2G0.png differ diff --git a/sprites/blood/BPF2H0.png b/sprites/blood/BPF2H0.png new file mode 100644 index 0000000..85c5f17 Binary files /dev/null and b/sprites/blood/BPF2H0.png differ diff --git a/sprites/blood/BPF3A0.png b/sprites/blood/BPF3A0.png new file mode 100644 index 0000000..76446b5 Binary files /dev/null and b/sprites/blood/BPF3A0.png differ diff --git a/sprites/blood/BPF3B0.png b/sprites/blood/BPF3B0.png new file mode 100644 index 0000000..070a6dc Binary files /dev/null and b/sprites/blood/BPF3B0.png differ diff --git a/sprites/blood/BPF3C0.png b/sprites/blood/BPF3C0.png new file mode 100644 index 0000000..ee6c81e Binary files /dev/null and b/sprites/blood/BPF3C0.png differ diff --git a/sprites/blood/BPF3D0.png b/sprites/blood/BPF3D0.png new file mode 100644 index 0000000..b3f094f Binary files /dev/null and b/sprites/blood/BPF3D0.png differ diff --git a/sprites/blood/BPF3E0.png b/sprites/blood/BPF3E0.png new file mode 100644 index 0000000..2c4fbc1 Binary files /dev/null and b/sprites/blood/BPF3E0.png differ diff --git a/sprites/blood/BPF3F0.png b/sprites/blood/BPF3F0.png new file mode 100644 index 0000000..8a05803 Binary files /dev/null and b/sprites/blood/BPF3F0.png differ diff --git a/sprites/blood/BPF3G0.png b/sprites/blood/BPF3G0.png new file mode 100644 index 0000000..5334339 Binary files /dev/null and b/sprites/blood/BPF3G0.png differ diff --git a/sprites/blood/BPF3H0.png b/sprites/blood/BPF3H0.png new file mode 100644 index 0000000..e75962d Binary files /dev/null and b/sprites/blood/BPF3H0.png differ diff --git a/sprites/blood/BPF3I0.png b/sprites/blood/BPF3I0.png new file mode 100644 index 0000000..b5dc126 Binary files /dev/null and b/sprites/blood/BPF3I0.png differ diff --git a/sprites/blood/BPF3J0.png b/sprites/blood/BPF3J0.png new file mode 100644 index 0000000..45fafb1 Binary files /dev/null and b/sprites/blood/BPF3J0.png differ diff --git a/sprites/EXP2A0.png b/sprites/flak/EXP2A0.png similarity index 100% rename from sprites/EXP2A0.png rename to sprites/flak/EXP2A0.png diff --git a/sprites/EXP2B0.png b/sprites/flak/EXP2B0.png similarity index 100% rename from sprites/EXP2B0.png rename to sprites/flak/EXP2B0.png diff --git a/sprites/EXP2C0.png b/sprites/flak/EXP2C0.png similarity index 100% rename from sprites/EXP2C0.png rename to sprites/flak/EXP2C0.png diff --git a/sprites/EXP2D0.png b/sprites/flak/EXP2D0.png similarity index 100% rename from sprites/EXP2D0.png rename to sprites/flak/EXP2D0.png diff --git a/sprites/EXP2E0.png b/sprites/flak/EXP2E0.png similarity index 100% rename from sprites/EXP2E0.png rename to sprites/flak/EXP2E0.png diff --git a/sprites/EXP2F0.png b/sprites/flak/EXP2F0.png similarity index 100% rename from sprites/EXP2F0.png rename to sprites/flak/EXP2F0.png diff --git a/sprites/EXP2G0.png b/sprites/flak/EXP2G0.png similarity index 100% rename from sprites/EXP2G0.png rename to sprites/flak/EXP2G0.png diff --git a/sprites/EXP2H0.png b/sprites/flak/EXP2H0.png similarity index 100% rename from sprites/EXP2H0.png rename to sprites/flak/EXP2H0.png diff --git a/sprites/EXP2I0.png b/sprites/flak/EXP2I0.png similarity index 100% rename from sprites/EXP2I0.png rename to sprites/flak/EXP2I0.png diff --git a/sprites/EXP2J0.png b/sprites/flak/EXP2J0.png similarity index 100% rename from sprites/EXP2J0.png rename to sprites/flak/EXP2J0.png diff --git a/sprites/EXP2K0.png b/sprites/flak/EXP2K0.png similarity index 100% rename from sprites/EXP2K0.png rename to sprites/flak/EXP2K0.png diff --git a/sprites/EXP2L0.png b/sprites/flak/EXP2L0.png similarity index 100% rename from sprites/EXP2L0.png rename to sprites/flak/EXP2L0.png diff --git a/sprites/EXP2M0.png b/sprites/flak/EXP2M0.png similarity index 100% rename from sprites/EXP2M0.png rename to sprites/flak/EXP2M0.png diff --git a/sprites/EXP2N0.png b/sprites/flak/EXP2N0.png similarity index 100% rename from sprites/EXP2N0.png rename to sprites/flak/EXP2N0.png diff --git a/sprites/EXP2O0.png b/sprites/flak/EXP2O0.png similarity index 100% rename from sprites/EXP2O0.png rename to sprites/flak/EXP2O0.png diff --git a/sprites/EXP2P0.png b/sprites/flak/EXP2P0.png similarity index 100% rename from sprites/EXP2P0.png rename to sprites/flak/EXP2P0.png diff --git a/sprites/EXP2Q0.png b/sprites/flak/EXP2Q0.png similarity index 100% rename from sprites/EXP2Q0.png rename to sprites/flak/EXP2Q0.png diff --git a/sprites/EXP2R0.png b/sprites/flak/EXP2R0.png similarity index 100% rename from sprites/EXP2R0.png rename to sprites/flak/EXP2R0.png diff --git a/sprites/FGLOA0.png b/sprites/flak/FGLOA0.png similarity index 100% rename from sprites/FGLOA0.png rename to sprites/flak/FGLOA0.png diff --git a/sprites/FGLOB0.png b/sprites/flak/FGLOB0.png similarity index 100% rename from sprites/FGLOB0.png rename to sprites/flak/FGLOB0.png diff --git a/sprites/FGLOC0.png b/sprites/flak/FGLOC0.png similarity index 100% rename from sprites/FGLOC0.png rename to sprites/flak/FGLOC0.png diff --git a/sprites/FGLOD0.png b/sprites/flak/FGLOD0.png similarity index 100% rename from sprites/FGLOD0.png rename to sprites/flak/FGLOD0.png diff --git a/sprites/FGLOE0.png b/sprites/flak/FGLOE0.png similarity index 100% rename from sprites/FGLOE0.png rename to sprites/flak/FGLOE0.png diff --git a/sprites/FGLOF0.png b/sprites/flak/FGLOF0.png similarity index 100% rename from sprites/FGLOF0.png rename to sprites/flak/FGLOF0.png diff --git a/sprites/FGLOG0.png b/sprites/flak/FGLOG0.png similarity index 100% rename from sprites/FGLOG0.png rename to sprites/flak/FGLOG0.png diff --git a/sprites/FGLOH0.png b/sprites/flak/FGLOH0.png similarity index 100% rename from sprites/FGLOH0.png rename to sprites/flak/FGLOH0.png diff --git a/sprites/FGLOI0.png b/sprites/flak/FGLOI0.png similarity index 100% rename from sprites/FGLOI0.png rename to sprites/flak/FGLOI0.png diff --git a/sprites/FGLOJ0.png b/sprites/flak/FGLOJ0.png similarity index 100% rename from sprites/FGLOJ0.png rename to sprites/flak/FGLOJ0.png diff --git a/sprites/FGLOK0.png b/sprites/flak/FGLOK0.png similarity index 100% rename from sprites/FGLOK0.png rename to sprites/flak/FGLOK0.png diff --git a/sprites/GBLBA0.png b/sprites/ges/GBLBA0.png similarity index 100% rename from sprites/GBLBA0.png rename to sprites/ges/GBLBA0.png diff --git a/sprites/GBLBB0.png b/sprites/ges/GBLBB0.png similarity index 100% rename from sprites/GBLBB0.png rename to sprites/ges/GBLBB0.png diff --git a/sprites/GBLBC0.png b/sprites/ges/GBLBC0.png similarity index 100% rename from sprites/GBLBC0.png rename to sprites/ges/GBLBC0.png diff --git a/sprites/GBLBD0.png b/sprites/ges/GBLBD0.png similarity index 100% rename from sprites/GBLBD0.png rename to sprites/ges/GBLBD0.png diff --git a/sprites/GBLBE0.png b/sprites/ges/GBLBE0.png similarity index 100% rename from sprites/GBLBE0.png rename to sprites/ges/GBLBE0.png diff --git a/sprites/GEX1A0.png b/sprites/ges/GEX1A0.png similarity index 100% rename from sprites/GEX1A0.png rename to sprites/ges/GEX1A0.png diff --git a/sprites/GEX1B0.png b/sprites/ges/GEX1B0.png similarity index 100% rename from sprites/GEX1B0.png rename to sprites/ges/GEX1B0.png diff --git a/sprites/GEX1C0.png b/sprites/ges/GEX1C0.png similarity index 100% rename from sprites/GEX1C0.png rename to sprites/ges/GEX1C0.png diff --git a/sprites/GEX1D0.png b/sprites/ges/GEX1D0.png similarity index 100% rename from sprites/GEX1D0.png rename to sprites/ges/GEX1D0.png diff --git a/sprites/GEX1E0.png b/sprites/ges/GEX1E0.png similarity index 100% rename from sprites/GEX1E0.png rename to sprites/ges/GEX1E0.png diff --git a/sprites/GEX1F0.png b/sprites/ges/GEX1F0.png similarity index 100% rename from sprites/GEX1F0.png rename to sprites/ges/GEX1F0.png diff --git a/sprites/GEX1G0.png b/sprites/ges/GEX1G0.png similarity index 100% rename from sprites/GEX1G0.png rename to sprites/ges/GEX1G0.png diff --git a/sprites/GEX1H0.png b/sprites/ges/GEX1H0.png similarity index 100% rename from sprites/GEX1H0.png rename to sprites/ges/GEX1H0.png diff --git a/sprites/GEX1I0.png b/sprites/ges/GEX1I0.png similarity index 100% rename from sprites/GEX1I0.png rename to sprites/ges/GEX1I0.png diff --git a/sprites/GEX1J0.png b/sprites/ges/GEX1J0.png similarity index 100% rename from sprites/GEX1J0.png rename to sprites/ges/GEX1J0.png diff --git a/sprites/GEX1K0.png b/sprites/ges/GEX1K0.png similarity index 100% rename from sprites/GEX1K0.png rename to sprites/ges/GEX1K0.png diff --git a/sprites/GEX2A0.png b/sprites/ges/GEX2A0.png similarity index 100% rename from sprites/GEX2A0.png rename to sprites/ges/GEX2A0.png diff --git a/sprites/GEX2B0.png b/sprites/ges/GEX2B0.png similarity index 100% rename from sprites/GEX2B0.png rename to sprites/ges/GEX2B0.png diff --git a/sprites/GEX2C0.png b/sprites/ges/GEX2C0.png similarity index 100% rename from sprites/GEX2C0.png rename to sprites/ges/GEX2C0.png diff --git a/sprites/GEX2D0.png b/sprites/ges/GEX2D0.png similarity index 100% rename from sprites/GEX2D0.png rename to sprites/ges/GEX2D0.png diff --git a/sprites/GEX2E0.png b/sprites/ges/GEX2E0.png similarity index 100% rename from sprites/GEX2E0.png rename to sprites/ges/GEX2E0.png diff --git a/sprites/GEX2F0.png b/sprites/ges/GEX2F0.png similarity index 100% rename from sprites/GEX2F0.png rename to sprites/ges/GEX2F0.png diff --git a/sprites/GEX2G0.png b/sprites/ges/GEX2G0.png similarity index 100% rename from sprites/GEX2G0.png rename to sprites/ges/GEX2G0.png diff --git a/sprites/GEX2H0.png b/sprites/ges/GEX2H0.png similarity index 100% rename from sprites/GEX2H0.png rename to sprites/ges/GEX2H0.png diff --git a/sprites/ges/GEX2I0.png b/sprites/ges/GEX2I0.png new file mode 100644 index 0000000..8c03b56 Binary files /dev/null and b/sprites/ges/GEX2I0.png differ diff --git a/sprites/ges/GEX2J0.png b/sprites/ges/GEX2J0.png new file mode 100644 index 0000000..a44cc79 Binary files /dev/null and b/sprites/ges/GEX2J0.png differ diff --git a/sprites/GEX2K0.png b/sprites/ges/GEX2K0.png similarity index 100% rename from sprites/GEX2K0.png rename to sprites/ges/GEX2K0.png diff --git a/sprites/GEX3A0.png b/sprites/ges/GEX3A0.png similarity index 100% rename from sprites/GEX3A0.png rename to sprites/ges/GEX3A0.png diff --git a/sprites/GEX3B0.png b/sprites/ges/GEX3B0.png similarity index 100% rename from sprites/GEX3B0.png rename to sprites/ges/GEX3B0.png diff --git a/sprites/GEX3C0.png b/sprites/ges/GEX3C0.png similarity index 100% rename from sprites/GEX3C0.png rename to sprites/ges/GEX3C0.png diff --git a/sprites/GEX3D0.png b/sprites/ges/GEX3D0.png similarity index 100% rename from sprites/GEX3D0.png rename to sprites/ges/GEX3D0.png diff --git a/sprites/GEX3E0.png b/sprites/ges/GEX3E0.png similarity index 100% rename from sprites/GEX3E0.png rename to sprites/ges/GEX3E0.png diff --git a/sprites/ges/GEX3F0.png b/sprites/ges/GEX3F0.png new file mode 100644 index 0000000..910338a Binary files /dev/null and b/sprites/ges/GEX3F0.png differ diff --git a/sprites/GEX3G0.png b/sprites/ges/GEX3G0.png similarity index 100% rename from sprites/GEX3G0.png rename to sprites/ges/GEX3G0.png diff --git a/sprites/ges/GEX3H0.png b/sprites/ges/GEX3H0.png new file mode 100644 index 0000000..76c11ab Binary files /dev/null and b/sprites/ges/GEX3H0.png differ diff --git a/sprites/ges/GEX3I0.png b/sprites/ges/GEX3I0.png new file mode 100644 index 0000000..a7959ca Binary files /dev/null and b/sprites/ges/GEX3I0.png differ diff --git a/sprites/ges/GEX3J0.png b/sprites/ges/GEX3J0.png new file mode 100644 index 0000000..840b8ba Binary files /dev/null and b/sprites/ges/GEX3J0.png differ diff --git a/sprites/ges/GEX3K0.png b/sprites/ges/GEX3K0.png new file mode 100644 index 0000000..860049e Binary files /dev/null and b/sprites/ges/GEX3K0.png differ diff --git a/sprites/PBALA0.png b/sprites/pulse/PBALA0.png similarity index 100% rename from sprites/PBALA0.png rename to sprites/pulse/PBALA0.png diff --git a/sprites/PBALB0.png b/sprites/pulse/PBALB0.png similarity index 100% rename from sprites/PBALB0.png rename to sprites/pulse/PBALB0.png diff --git a/sprites/PBALC0.png b/sprites/pulse/PBALC0.png similarity index 100% rename from sprites/PBALC0.png rename to sprites/pulse/PBALC0.png diff --git a/sprites/PBALD0.png b/sprites/pulse/PBALD0.png similarity index 100% rename from sprites/PBALD0.png rename to sprites/pulse/PBALD0.png diff --git a/sprites/PBALE0.png b/sprites/pulse/PBALE0.png similarity index 100% rename from sprites/PBALE0.png rename to sprites/pulse/PBALE0.png diff --git a/sprites/PCAPA0.png b/sprites/pulse/PCAPA0.png similarity index 100% rename from sprites/PCAPA0.png rename to sprites/pulse/PCAPA0.png diff --git a/sprites/PCAPB0.png b/sprites/pulse/PCAPB0.png similarity index 100% rename from sprites/PCAPB0.png rename to sprites/pulse/PCAPB0.png diff --git a/sprites/PCAPC0.png b/sprites/pulse/PCAPC0.png similarity index 100% rename from sprites/PCAPC0.png rename to sprites/pulse/PCAPC0.png diff --git a/sprites/PCAPD0.png b/sprites/pulse/PCAPD0.png similarity index 100% rename from sprites/PCAPD0.png rename to sprites/pulse/PCAPD0.png diff --git a/sprites/PHITA0.png b/sprites/pulse/PHITA0.png similarity index 100% rename from sprites/PHITA0.png rename to sprites/pulse/PHITA0.png diff --git a/sprites/PHITB0.png b/sprites/pulse/PHITB0.png similarity index 100% rename from sprites/PHITB0.png rename to sprites/pulse/PHITB0.png diff --git a/sprites/PHITC0.png b/sprites/pulse/PHITC0.png similarity index 100% rename from sprites/PHITC0.png rename to sprites/pulse/PHITC0.png diff --git a/sprites/PHITD0.png b/sprites/pulse/PHITD0.png similarity index 100% rename from sprites/PHITD0.png rename to sprites/pulse/PHITD0.png diff --git a/sprites/PSPKA0.png b/sprites/pulse/PSPKA0.png similarity index 100% rename from sprites/PSPKA0.png rename to sprites/pulse/PSPKA0.png diff --git a/sprites/NE__A0.png b/sprites/redeemer/NE__A0.png similarity index 100% rename from sprites/NE__A0.png rename to sprites/redeemer/NE__A0.png diff --git a/sprites/NE__B0.png b/sprites/redeemer/NE__B0.png similarity index 100% rename from sprites/NE__B0.png rename to sprites/redeemer/NE__B0.png diff --git a/sprites/NE__C0.png b/sprites/redeemer/NE__C0.png similarity index 100% rename from sprites/NE__C0.png rename to sprites/redeemer/NE__C0.png diff --git a/sprites/NE__D0.png b/sprites/redeemer/NE__D0.png similarity index 100% rename from sprites/NE__D0.png rename to sprites/redeemer/NE__D0.png diff --git a/sprites/NE__E0.png b/sprites/redeemer/NE__E0.png similarity index 100% rename from sprites/NE__E0.png rename to sprites/redeemer/NE__E0.png diff --git a/sprites/NE__F0.png b/sprites/redeemer/NE__F0.png similarity index 100% rename from sprites/NE__F0.png rename to sprites/redeemer/NE__F0.png diff --git a/sprites/NE__G0.png b/sprites/redeemer/NE__G0.png similarity index 100% rename from sprites/NE__G0.png rename to sprites/redeemer/NE__G0.png diff --git a/sprites/NE__H0.png b/sprites/redeemer/NE__H0.png similarity index 100% rename from sprites/NE__H0.png rename to sprites/redeemer/NE__H0.png diff --git a/sprites/NE__I0.png b/sprites/redeemer/NE__I0.png similarity index 100% rename from sprites/NE__I0.png rename to sprites/redeemer/NE__I0.png diff --git a/sprites/NE__J0.png b/sprites/redeemer/NE__J0.png similarity index 100% rename from sprites/NE__J0.png rename to sprites/redeemer/NE__J0.png diff --git a/sprites/NE__K0.png b/sprites/redeemer/NE__K0.png similarity index 100% rename from sprites/NE__K0.png rename to sprites/redeemer/NE__K0.png diff --git a/sprites/NE__L0.png b/sprites/redeemer/NE__L0.png similarity index 100% rename from sprites/NE__L0.png rename to sprites/redeemer/NE__L0.png diff --git a/sprites/NE__M0.png b/sprites/redeemer/NE__M0.png similarity index 100% rename from sprites/NE__M0.png rename to sprites/redeemer/NE__M0.png diff --git a/sprites/RTRLA0.png b/sprites/redeemer/RTRLA0.png similarity index 100% rename from sprites/RTRLA0.png rename to sprites/redeemer/RTRLA0.png diff --git a/sprites/WE__A0.png b/sprites/redeemer/WE__A0.png similarity index 100% rename from sprites/WE__A0.png rename to sprites/redeemer/WE__A0.png diff --git a/sprites/WE__B0.png b/sprites/redeemer/WE__B0.png similarity index 100% rename from sprites/WE__B0.png rename to sprites/redeemer/WE__B0.png diff --git a/sprites/WE__C0.png b/sprites/redeemer/WE__C0.png similarity index 100% rename from sprites/WE__C0.png rename to sprites/redeemer/WE__C0.png diff --git a/sprites/WE__D0.png b/sprites/redeemer/WE__D0.png similarity index 100% rename from sprites/WE__D0.png rename to sprites/redeemer/WE__D0.png diff --git a/sprites/WE__E0.png b/sprites/redeemer/WE__E0.png similarity index 100% rename from sprites/WE__E0.png rename to sprites/redeemer/WE__E0.png diff --git a/sprites/WE__F0.png b/sprites/redeemer/WE__F0.png similarity index 100% rename from sprites/WE__F0.png rename to sprites/redeemer/WE__F0.png diff --git a/sprites/WE__G0.png b/sprites/redeemer/WE__G0.png similarity index 100% rename from sprites/WE__G0.png rename to sprites/redeemer/WE__G0.png diff --git a/sprites/WE__H0.png b/sprites/redeemer/WE__H0.png similarity index 100% rename from sprites/WE__H0.png rename to sprites/redeemer/WE__H0.png diff --git a/sprites/WE__I0.png b/sprites/redeemer/WE__I0.png similarity index 100% rename from sprites/WE__I0.png rename to sprites/redeemer/WE__I0.png diff --git a/sprites/WE__J0.png b/sprites/redeemer/WE__J0.png similarity index 100% rename from sprites/WE__J0.png rename to sprites/redeemer/WE__J0.png diff --git a/sprites/WE__K0.png b/sprites/redeemer/WE__K0.png similarity index 100% rename from sprites/WE__K0.png rename to sprites/redeemer/WE__K0.png diff --git a/sprites/WE__L0.png b/sprites/redeemer/WE__L0.png similarity index 100% rename from sprites/WE__L0.png rename to sprites/redeemer/WE__L0.png diff --git a/sprites/WE__M0.png b/sprites/redeemer/WE__M0.png similarity index 100% rename from sprites/WE__M0.png rename to sprites/redeemer/WE__M0.png diff --git a/sprites/WE__N0.png b/sprites/redeemer/WE__N0.png similarity index 100% rename from sprites/WE__N0.png rename to sprites/redeemer/WE__N0.png diff --git a/sprites/WE__O0.png b/sprites/redeemer/WE__O0.png similarity index 100% rename from sprites/WE__O0.png rename to sprites/redeemer/WE__O0.png diff --git a/sprites/WE__P0.png b/sprites/redeemer/WE__P0.png similarity index 100% rename from sprites/WE__P0.png rename to sprites/redeemer/WE__P0.png diff --git a/sprites/WE__Q0.png b/sprites/redeemer/WE__Q0.png similarity index 100% rename from sprites/WE__Q0.png rename to sprites/redeemer/WE__Q0.png diff --git a/sprites/WE__R0.png b/sprites/redeemer/WE__R0.png similarity index 100% rename from sprites/WE__R0.png rename to sprites/redeemer/WE__R0.png diff --git a/sprites/RIPXA0.png b/sprites/ripper/RIPXA0.png similarity index 100% rename from sprites/RIPXA0.png rename to sprites/ripper/RIPXA0.png diff --git a/sprites/RIPXB0.png b/sprites/ripper/RIPXB0.png similarity index 100% rename from sprites/RIPXB0.png rename to sprites/ripper/RIPXB0.png diff --git a/sprites/RIPXC0.png b/sprites/ripper/RIPXC0.png similarity index 100% rename from sprites/RIPXC0.png rename to sprites/ripper/RIPXC0.png diff --git a/sprites/RIPXD0.png b/sprites/ripper/RIPXD0.png similarity index 100% rename from sprites/RIPXD0.png rename to sprites/ripper/RIPXD0.png diff --git a/sprites/RIPXE0.png b/sprites/ripper/RIPXE0.png similarity index 100% rename from sprites/RIPXE0.png rename to sprites/ripper/RIPXE0.png diff --git a/sprites/RIPXF0.png b/sprites/ripper/RIPXF0.png similarity index 100% rename from sprites/RIPXF0.png rename to sprites/ripper/RIPXF0.png diff --git a/sprites/RIPXG0.png b/sprites/ripper/RIPXG0.png similarity index 100% rename from sprites/RIPXG0.png rename to sprites/ripper/RIPXG0.png diff --git a/sprites/RFLAA0.png b/sprites/rocket/RFLAA0.png similarity index 100% rename from sprites/RFLAA0.png rename to sprites/rocket/RFLAA0.png diff --git a/sprites/US10A0.png b/sprites/smoke/US10A0.png similarity index 100% rename from sprites/US10A0.png rename to sprites/smoke/US10A0.png diff --git a/sprites/US10B0.png b/sprites/smoke/US10B0.png similarity index 100% rename from sprites/US10B0.png rename to sprites/smoke/US10B0.png diff --git a/sprites/US10C0.png b/sprites/smoke/US10C0.png similarity index 100% rename from sprites/US10C0.png rename to sprites/smoke/US10C0.png diff --git a/sprites/US10D0.png b/sprites/smoke/US10D0.png similarity index 100% rename from sprites/US10D0.png rename to sprites/smoke/US10D0.png diff --git a/sprites/US10E0.png b/sprites/smoke/US10E0.png similarity index 100% rename from sprites/US10E0.png rename to sprites/smoke/US10E0.png diff --git a/sprites/US10F0.png b/sprites/smoke/US10F0.png similarity index 100% rename from sprites/US10F0.png rename to sprites/smoke/US10F0.png diff --git a/sprites/US10G0.png b/sprites/smoke/US10G0.png similarity index 100% rename from sprites/US10G0.png rename to sprites/smoke/US10G0.png diff --git a/sprites/US10H0.png b/sprites/smoke/US10H0.png similarity index 100% rename from sprites/US10H0.png rename to sprites/smoke/US10H0.png diff --git a/sprites/US10I0.png b/sprites/smoke/US10I0.png similarity index 100% rename from sprites/US10I0.png rename to sprites/smoke/US10I0.png diff --git a/sprites/US10J0.png b/sprites/smoke/US10J0.png similarity index 100% rename from sprites/US10J0.png rename to sprites/smoke/US10J0.png diff --git a/sprites/US10K0.png b/sprites/smoke/US10K0.png similarity index 100% rename from sprites/US10K0.png rename to sprites/smoke/US10K0.png diff --git a/sprites/US10L0.png b/sprites/smoke/US10L0.png similarity index 100% rename from sprites/US10L0.png rename to sprites/smoke/US10L0.png diff --git a/sprites/US10M0.png b/sprites/smoke/US10M0.png similarity index 100% rename from sprites/US10M0.png rename to sprites/smoke/US10M0.png diff --git a/sprites/US10N0.png b/sprites/smoke/US10N0.png similarity index 100% rename from sprites/US10N0.png rename to sprites/smoke/US10N0.png diff --git a/sprites/US10O0.png b/sprites/smoke/US10O0.png similarity index 100% rename from sprites/US10O0.png rename to sprites/smoke/US10O0.png diff --git a/sprites/US10P0.png b/sprites/smoke/US10P0.png similarity index 100% rename from sprites/US10P0.png rename to sprites/smoke/US10P0.png diff --git a/sprites/US1_A0.png b/sprites/smoke/US1_A0.png similarity index 100% rename from sprites/US1_A0.png rename to sprites/smoke/US1_A0.png diff --git a/sprites/US1_B0.png b/sprites/smoke/US1_B0.png similarity index 100% rename from sprites/US1_B0.png rename to sprites/smoke/US1_B0.png diff --git a/sprites/US1_C0.png b/sprites/smoke/US1_C0.png similarity index 100% rename from sprites/US1_C0.png rename to sprites/smoke/US1_C0.png diff --git a/sprites/US1_D0.png b/sprites/smoke/US1_D0.png similarity index 100% rename from sprites/US1_D0.png rename to sprites/smoke/US1_D0.png diff --git a/sprites/US1_E0.png b/sprites/smoke/US1_E0.png similarity index 100% rename from sprites/US1_E0.png rename to sprites/smoke/US1_E0.png diff --git a/sprites/US1_F0.png b/sprites/smoke/US1_F0.png similarity index 100% rename from sprites/US1_F0.png rename to sprites/smoke/US1_F0.png diff --git a/sprites/US1_G0.png b/sprites/smoke/US1_G0.png similarity index 100% rename from sprites/US1_G0.png rename to sprites/smoke/US1_G0.png diff --git a/sprites/US1_H0.png b/sprites/smoke/US1_H0.png similarity index 100% rename from sprites/US1_H0.png rename to sprites/smoke/US1_H0.png diff --git a/sprites/US1_I0.png b/sprites/smoke/US1_I0.png similarity index 100% rename from sprites/US1_I0.png rename to sprites/smoke/US1_I0.png diff --git a/sprites/US1_J0.png b/sprites/smoke/US1_J0.png similarity index 100% rename from sprites/US1_J0.png rename to sprites/smoke/US1_J0.png diff --git a/sprites/US1_K0.png b/sprites/smoke/US1_K0.png similarity index 100% rename from sprites/US1_K0.png rename to sprites/smoke/US1_K0.png diff --git a/sprites/US1_L0.png b/sprites/smoke/US1_L0.png similarity index 100% rename from sprites/US1_L0.png rename to sprites/smoke/US1_L0.png diff --git a/sprites/US1_M0.png b/sprites/smoke/US1_M0.png similarity index 100% rename from sprites/US1_M0.png rename to sprites/smoke/US1_M0.png diff --git a/sprites/US1_N0.png b/sprites/smoke/US1_N0.png similarity index 100% rename from sprites/US1_N0.png rename to sprites/smoke/US1_N0.png diff --git a/sprites/US1_O0.png b/sprites/smoke/US1_O0.png similarity index 100% rename from sprites/US1_O0.png rename to sprites/smoke/US1_O0.png diff --git a/sprites/US1_P0.png b/sprites/smoke/US1_P0.png similarity index 100% rename from sprites/US1_P0.png rename to sprites/smoke/US1_P0.png diff --git a/sprites/US2_A0.png b/sprites/smoke/US2_A0.png similarity index 100% rename from sprites/US2_A0.png rename to sprites/smoke/US2_A0.png diff --git a/sprites/US2_B0.png b/sprites/smoke/US2_B0.png similarity index 100% rename from sprites/US2_B0.png rename to sprites/smoke/US2_B0.png diff --git a/sprites/US2_C0.png b/sprites/smoke/US2_C0.png similarity index 100% rename from sprites/US2_C0.png rename to sprites/smoke/US2_C0.png diff --git a/sprites/US2_D0.png b/sprites/smoke/US2_D0.png similarity index 100% rename from sprites/US2_D0.png rename to sprites/smoke/US2_D0.png diff --git a/sprites/US2_E0.png b/sprites/smoke/US2_E0.png similarity index 100% rename from sprites/US2_E0.png rename to sprites/smoke/US2_E0.png diff --git a/sprites/US2_F0.png b/sprites/smoke/US2_F0.png similarity index 100% rename from sprites/US2_F0.png rename to sprites/smoke/US2_F0.png diff --git a/sprites/US2_G0.png b/sprites/smoke/US2_G0.png similarity index 100% rename from sprites/US2_G0.png rename to sprites/smoke/US2_G0.png diff --git a/sprites/US2_H0.png b/sprites/smoke/US2_H0.png similarity index 100% rename from sprites/US2_H0.png rename to sprites/smoke/US2_H0.png diff --git a/sprites/US2_I0.png b/sprites/smoke/US2_I0.png similarity index 100% rename from sprites/US2_I0.png rename to sprites/smoke/US2_I0.png diff --git a/sprites/US2_J0.png b/sprites/smoke/US2_J0.png similarity index 100% rename from sprites/US2_J0.png rename to sprites/smoke/US2_J0.png diff --git a/sprites/US2_K0.png b/sprites/smoke/US2_K0.png similarity index 100% rename from sprites/US2_K0.png rename to sprites/smoke/US2_K0.png diff --git a/sprites/US2_L0.png b/sprites/smoke/US2_L0.png similarity index 100% rename from sprites/US2_L0.png rename to sprites/smoke/US2_L0.png diff --git a/sprites/US2_M0.png b/sprites/smoke/US2_M0.png similarity index 100% rename from sprites/US2_M0.png rename to sprites/smoke/US2_M0.png diff --git a/sprites/US2_N0.png b/sprites/smoke/US2_N0.png similarity index 100% rename from sprites/US2_N0.png rename to sprites/smoke/US2_N0.png diff --git a/sprites/US2_O0.png b/sprites/smoke/US2_O0.png similarity index 100% rename from sprites/US2_O0.png rename to sprites/smoke/US2_O0.png diff --git a/sprites/US2_P0.png b/sprites/smoke/US2_P0.png similarity index 100% rename from sprites/US2_P0.png rename to sprites/smoke/US2_P0.png diff --git a/sprites/US3_A0.png b/sprites/smoke/US3_A0.png similarity index 100% rename from sprites/US3_A0.png rename to sprites/smoke/US3_A0.png diff --git a/sprites/US3_B0.png b/sprites/smoke/US3_B0.png similarity index 100% rename from sprites/US3_B0.png rename to sprites/smoke/US3_B0.png diff --git a/sprites/US3_C0.png b/sprites/smoke/US3_C0.png similarity index 100% rename from sprites/US3_C0.png rename to sprites/smoke/US3_C0.png diff --git a/sprites/US3_D0.png b/sprites/smoke/US3_D0.png similarity index 100% rename from sprites/US3_D0.png rename to sprites/smoke/US3_D0.png diff --git a/sprites/US3_E0.png b/sprites/smoke/US3_E0.png similarity index 100% rename from sprites/US3_E0.png rename to sprites/smoke/US3_E0.png diff --git a/sprites/US3_F0.png b/sprites/smoke/US3_F0.png similarity index 100% rename from sprites/US3_F0.png rename to sprites/smoke/US3_F0.png diff --git a/sprites/US3_G0.png b/sprites/smoke/US3_G0.png similarity index 100% rename from sprites/US3_G0.png rename to sprites/smoke/US3_G0.png diff --git a/sprites/US3_H0.png b/sprites/smoke/US3_H0.png similarity index 100% rename from sprites/US3_H0.png rename to sprites/smoke/US3_H0.png diff --git a/sprites/US3_I0.png b/sprites/smoke/US3_I0.png similarity index 100% rename from sprites/US3_I0.png rename to sprites/smoke/US3_I0.png diff --git a/sprites/US3_J0.png b/sprites/smoke/US3_J0.png similarity index 100% rename from sprites/US3_J0.png rename to sprites/smoke/US3_J0.png diff --git a/sprites/US3_K0.png b/sprites/smoke/US3_K0.png similarity index 100% rename from sprites/US3_K0.png rename to sprites/smoke/US3_K0.png diff --git a/sprites/US3_L0.png b/sprites/smoke/US3_L0.png similarity index 100% rename from sprites/US3_L0.png rename to sprites/smoke/US3_L0.png diff --git a/sprites/US3_M0.png b/sprites/smoke/US3_M0.png similarity index 100% rename from sprites/US3_M0.png rename to sprites/smoke/US3_M0.png diff --git a/sprites/US3_N0.png b/sprites/smoke/US3_N0.png similarity index 100% rename from sprites/US3_N0.png rename to sprites/smoke/US3_N0.png diff --git a/sprites/US3_O0.png b/sprites/smoke/US3_O0.png similarity index 100% rename from sprites/US3_O0.png rename to sprites/smoke/US3_O0.png diff --git a/sprites/US3_P0.png b/sprites/smoke/US3_P0.png similarity index 100% rename from sprites/US3_P0.png rename to sprites/smoke/US3_P0.png diff --git a/sprites/US4_A0.png b/sprites/smoke/US4_A0.png similarity index 100% rename from sprites/US4_A0.png rename to sprites/smoke/US4_A0.png diff --git a/sprites/US4_B0.png b/sprites/smoke/US4_B0.png similarity index 100% rename from sprites/US4_B0.png rename to sprites/smoke/US4_B0.png diff --git a/sprites/US4_C0.png b/sprites/smoke/US4_C0.png similarity index 100% rename from sprites/US4_C0.png rename to sprites/smoke/US4_C0.png diff --git a/sprites/US4_D0.png b/sprites/smoke/US4_D0.png similarity index 100% rename from sprites/US4_D0.png rename to sprites/smoke/US4_D0.png diff --git a/sprites/US4_E0.png b/sprites/smoke/US4_E0.png similarity index 100% rename from sprites/US4_E0.png rename to sprites/smoke/US4_E0.png diff --git a/sprites/US4_F0.png b/sprites/smoke/US4_F0.png similarity index 100% rename from sprites/US4_F0.png rename to sprites/smoke/US4_F0.png diff --git a/sprites/US4_G0.png b/sprites/smoke/US4_G0.png similarity index 100% rename from sprites/US4_G0.png rename to sprites/smoke/US4_G0.png diff --git a/sprites/US4_H0.png b/sprites/smoke/US4_H0.png similarity index 100% rename from sprites/US4_H0.png rename to sprites/smoke/US4_H0.png diff --git a/sprites/US4_I0.png b/sprites/smoke/US4_I0.png similarity index 100% rename from sprites/US4_I0.png rename to sprites/smoke/US4_I0.png diff --git a/sprites/US4_J0.png b/sprites/smoke/US4_J0.png similarity index 100% rename from sprites/US4_J0.png rename to sprites/smoke/US4_J0.png diff --git a/sprites/US4_K0.png b/sprites/smoke/US4_K0.png similarity index 100% rename from sprites/US4_K0.png rename to sprites/smoke/US4_K0.png diff --git a/sprites/US4_L0.png b/sprites/smoke/US4_L0.png similarity index 100% rename from sprites/US4_L0.png rename to sprites/smoke/US4_L0.png diff --git a/sprites/US4_M0.png b/sprites/smoke/US4_M0.png similarity index 100% rename from sprites/US4_M0.png rename to sprites/smoke/US4_M0.png diff --git a/sprites/US4_N0.png b/sprites/smoke/US4_N0.png similarity index 100% rename from sprites/US4_N0.png rename to sprites/smoke/US4_N0.png diff --git a/sprites/US4_O0.png b/sprites/smoke/US4_O0.png similarity index 100% rename from sprites/US4_O0.png rename to sprites/smoke/US4_O0.png diff --git a/sprites/US5_A0.png b/sprites/smoke/US5_A0.png similarity index 100% rename from sprites/US5_A0.png rename to sprites/smoke/US5_A0.png diff --git a/sprites/US5_B0.png b/sprites/smoke/US5_B0.png similarity index 100% rename from sprites/US5_B0.png rename to sprites/smoke/US5_B0.png diff --git a/sprites/US5_C0.png b/sprites/smoke/US5_C0.png similarity index 100% rename from sprites/US5_C0.png rename to sprites/smoke/US5_C0.png diff --git a/sprites/US5_D0.png b/sprites/smoke/US5_D0.png similarity index 100% rename from sprites/US5_D0.png rename to sprites/smoke/US5_D0.png diff --git a/sprites/US5_E0.png b/sprites/smoke/US5_E0.png similarity index 100% rename from sprites/US5_E0.png rename to sprites/smoke/US5_E0.png diff --git a/sprites/US5_F0.png b/sprites/smoke/US5_F0.png similarity index 100% rename from sprites/US5_F0.png rename to sprites/smoke/US5_F0.png diff --git a/sprites/US5_G0.png b/sprites/smoke/US5_G0.png similarity index 100% rename from sprites/US5_G0.png rename to sprites/smoke/US5_G0.png diff --git a/sprites/US5_H0.png b/sprites/smoke/US5_H0.png similarity index 100% rename from sprites/US5_H0.png rename to sprites/smoke/US5_H0.png diff --git a/sprites/US5_I0.png b/sprites/smoke/US5_I0.png similarity index 100% rename from sprites/US5_I0.png rename to sprites/smoke/US5_I0.png diff --git a/sprites/US5_J0.png b/sprites/smoke/US5_J0.png similarity index 100% rename from sprites/US5_J0.png rename to sprites/smoke/US5_J0.png diff --git a/sprites/US5_K0.png b/sprites/smoke/US5_K0.png similarity index 100% rename from sprites/US5_K0.png rename to sprites/smoke/US5_K0.png diff --git a/sprites/US5_L0.png b/sprites/smoke/US5_L0.png similarity index 100% rename from sprites/US5_L0.png rename to sprites/smoke/US5_L0.png diff --git a/sprites/US5_M0.png b/sprites/smoke/US5_M0.png similarity index 100% rename from sprites/US5_M0.png rename to sprites/smoke/US5_M0.png diff --git a/sprites/US5_N0.png b/sprites/smoke/US5_N0.png similarity index 100% rename from sprites/US5_N0.png rename to sprites/smoke/US5_N0.png diff --git a/sprites/US5_O0.png b/sprites/smoke/US5_O0.png similarity index 100% rename from sprites/US5_O0.png rename to sprites/smoke/US5_O0.png diff --git a/sprites/US6_A0.png b/sprites/smoke/US6_A0.png similarity index 100% rename from sprites/US6_A0.png rename to sprites/smoke/US6_A0.png diff --git a/sprites/US6_B0.png b/sprites/smoke/US6_B0.png similarity index 100% rename from sprites/US6_B0.png rename to sprites/smoke/US6_B0.png diff --git a/sprites/US6_C0.png b/sprites/smoke/US6_C0.png similarity index 100% rename from sprites/US6_C0.png rename to sprites/smoke/US6_C0.png diff --git a/sprites/US6_D0.png b/sprites/smoke/US6_D0.png similarity index 100% rename from sprites/US6_D0.png rename to sprites/smoke/US6_D0.png diff --git a/sprites/US6_E0.png b/sprites/smoke/US6_E0.png similarity index 100% rename from sprites/US6_E0.png rename to sprites/smoke/US6_E0.png diff --git a/sprites/US6_F0.png b/sprites/smoke/US6_F0.png similarity index 100% rename from sprites/US6_F0.png rename to sprites/smoke/US6_F0.png diff --git a/sprites/US6_G0.png b/sprites/smoke/US6_G0.png similarity index 100% rename from sprites/US6_G0.png rename to sprites/smoke/US6_G0.png diff --git a/sprites/US6_H0.png b/sprites/smoke/US6_H0.png similarity index 100% rename from sprites/US6_H0.png rename to sprites/smoke/US6_H0.png diff --git a/sprites/US6_I0.png b/sprites/smoke/US6_I0.png similarity index 100% rename from sprites/US6_I0.png rename to sprites/smoke/US6_I0.png diff --git a/sprites/US6_J0.png b/sprites/smoke/US6_J0.png similarity index 100% rename from sprites/US6_J0.png rename to sprites/smoke/US6_J0.png diff --git a/sprites/US6_K0.png b/sprites/smoke/US6_K0.png similarity index 100% rename from sprites/US6_K0.png rename to sprites/smoke/US6_K0.png diff --git a/sprites/US6_L0.png b/sprites/smoke/US6_L0.png similarity index 100% rename from sprites/US6_L0.png rename to sprites/smoke/US6_L0.png diff --git a/sprites/US6_M0.png b/sprites/smoke/US6_M0.png similarity index 100% rename from sprites/US6_M0.png rename to sprites/smoke/US6_M0.png diff --git a/sprites/US6_N0.png b/sprites/smoke/US6_N0.png similarity index 100% rename from sprites/US6_N0.png rename to sprites/smoke/US6_N0.png diff --git a/sprites/US6_O0.png b/sprites/smoke/US6_O0.png similarity index 100% rename from sprites/US6_O0.png rename to sprites/smoke/US6_O0.png diff --git a/sprites/US6_P0.png b/sprites/smoke/US6_P0.png similarity index 100% rename from sprites/US6_P0.png rename to sprites/smoke/US6_P0.png diff --git a/sprites/US7_A0.png b/sprites/smoke/US7_A0.png similarity index 100% rename from sprites/US7_A0.png rename to sprites/smoke/US7_A0.png diff --git a/sprites/US7_B0.png b/sprites/smoke/US7_B0.png similarity index 100% rename from sprites/US7_B0.png rename to sprites/smoke/US7_B0.png diff --git a/sprites/US7_C0.png b/sprites/smoke/US7_C0.png similarity index 100% rename from sprites/US7_C0.png rename to sprites/smoke/US7_C0.png diff --git a/sprites/US7_D0.png b/sprites/smoke/US7_D0.png similarity index 100% rename from sprites/US7_D0.png rename to sprites/smoke/US7_D0.png diff --git a/sprites/US7_E0.png b/sprites/smoke/US7_E0.png similarity index 100% rename from sprites/US7_E0.png rename to sprites/smoke/US7_E0.png diff --git a/sprites/US7_F0.png b/sprites/smoke/US7_F0.png similarity index 100% rename from sprites/US7_F0.png rename to sprites/smoke/US7_F0.png diff --git a/sprites/US7_G0.png b/sprites/smoke/US7_G0.png similarity index 100% rename from sprites/US7_G0.png rename to sprites/smoke/US7_G0.png diff --git a/sprites/US7_H0.png b/sprites/smoke/US7_H0.png similarity index 100% rename from sprites/US7_H0.png rename to sprites/smoke/US7_H0.png diff --git a/sprites/US7_I0.png b/sprites/smoke/US7_I0.png similarity index 100% rename from sprites/US7_I0.png rename to sprites/smoke/US7_I0.png diff --git a/sprites/US7_J0.png b/sprites/smoke/US7_J0.png similarity index 100% rename from sprites/US7_J0.png rename to sprites/smoke/US7_J0.png diff --git a/sprites/US7_K0.png b/sprites/smoke/US7_K0.png similarity index 100% rename from sprites/US7_K0.png rename to sprites/smoke/US7_K0.png diff --git a/sprites/US7_L0.png b/sprites/smoke/US7_L0.png similarity index 100% rename from sprites/US7_L0.png rename to sprites/smoke/US7_L0.png diff --git a/sprites/US7_M0.png b/sprites/smoke/US7_M0.png similarity index 100% rename from sprites/US7_M0.png rename to sprites/smoke/US7_M0.png diff --git a/sprites/US7_N0.png b/sprites/smoke/US7_N0.png similarity index 100% rename from sprites/US7_N0.png rename to sprites/smoke/US7_N0.png diff --git a/sprites/US7_O0.png b/sprites/smoke/US7_O0.png similarity index 100% rename from sprites/US7_O0.png rename to sprites/smoke/US7_O0.png diff --git a/sprites/US7_P0.png b/sprites/smoke/US7_P0.png similarity index 100% rename from sprites/US7_P0.png rename to sprites/smoke/US7_P0.png diff --git a/sprites/US8_A0.png b/sprites/smoke/US8_A0.png similarity index 100% rename from sprites/US8_A0.png rename to sprites/smoke/US8_A0.png diff --git a/sprites/US8_B0.png b/sprites/smoke/US8_B0.png similarity index 100% rename from sprites/US8_B0.png rename to sprites/smoke/US8_B0.png diff --git a/sprites/US8_C0.png b/sprites/smoke/US8_C0.png similarity index 100% rename from sprites/US8_C0.png rename to sprites/smoke/US8_C0.png diff --git a/sprites/US8_D0.png b/sprites/smoke/US8_D0.png similarity index 100% rename from sprites/US8_D0.png rename to sprites/smoke/US8_D0.png diff --git a/sprites/US8_E0.png b/sprites/smoke/US8_E0.png similarity index 100% rename from sprites/US8_E0.png rename to sprites/smoke/US8_E0.png diff --git a/sprites/US8_F0.png b/sprites/smoke/US8_F0.png similarity index 100% rename from sprites/US8_F0.png rename to sprites/smoke/US8_F0.png diff --git a/sprites/US8_G0.png b/sprites/smoke/US8_G0.png similarity index 100% rename from sprites/US8_G0.png rename to sprites/smoke/US8_G0.png diff --git a/sprites/US8_H0.png b/sprites/smoke/US8_H0.png similarity index 100% rename from sprites/US8_H0.png rename to sprites/smoke/US8_H0.png diff --git a/sprites/US8_I0.png b/sprites/smoke/US8_I0.png similarity index 100% rename from sprites/US8_I0.png rename to sprites/smoke/US8_I0.png diff --git a/sprites/US8_J0.png b/sprites/smoke/US8_J0.png similarity index 100% rename from sprites/US8_J0.png rename to sprites/smoke/US8_J0.png diff --git a/sprites/US8_K0.png b/sprites/smoke/US8_K0.png similarity index 100% rename from sprites/US8_K0.png rename to sprites/smoke/US8_K0.png diff --git a/sprites/US8_L0.png b/sprites/smoke/US8_L0.png similarity index 100% rename from sprites/US8_L0.png rename to sprites/smoke/US8_L0.png diff --git a/sprites/US8_M0.png b/sprites/smoke/US8_M0.png similarity index 100% rename from sprites/US8_M0.png rename to sprites/smoke/US8_M0.png diff --git a/sprites/US8_N0.png b/sprites/smoke/US8_N0.png similarity index 100% rename from sprites/US8_N0.png rename to sprites/smoke/US8_N0.png diff --git a/sprites/US8_O0.png b/sprites/smoke/US8_O0.png similarity index 100% rename from sprites/US8_O0.png rename to sprites/smoke/US8_O0.png diff --git a/sprites/US8_P0.png b/sprites/smoke/US8_P0.png similarity index 100% rename from sprites/US8_P0.png rename to sprites/smoke/US8_P0.png diff --git a/sprites/US9_A0.png b/sprites/smoke/US9_A0.png similarity index 100% rename from sprites/US9_A0.png rename to sprites/smoke/US9_A0.png diff --git a/sprites/US9_B0.png b/sprites/smoke/US9_B0.png similarity index 100% rename from sprites/US9_B0.png rename to sprites/smoke/US9_B0.png diff --git a/sprites/US9_C0.png b/sprites/smoke/US9_C0.png similarity index 100% rename from sprites/US9_C0.png rename to sprites/smoke/US9_C0.png diff --git a/sprites/US9_D0.png b/sprites/smoke/US9_D0.png similarity index 100% rename from sprites/US9_D0.png rename to sprites/smoke/US9_D0.png diff --git a/sprites/US9_E0.png b/sprites/smoke/US9_E0.png similarity index 100% rename from sprites/US9_E0.png rename to sprites/smoke/US9_E0.png diff --git a/sprites/US9_F0.png b/sprites/smoke/US9_F0.png similarity index 100% rename from sprites/US9_F0.png rename to sprites/smoke/US9_F0.png diff --git a/sprites/US9_G0.png b/sprites/smoke/US9_G0.png similarity index 100% rename from sprites/US9_G0.png rename to sprites/smoke/US9_G0.png diff --git a/sprites/US9_H0.png b/sprites/smoke/US9_H0.png similarity index 100% rename from sprites/US9_H0.png rename to sprites/smoke/US9_H0.png diff --git a/sprites/US9_I0.png b/sprites/smoke/US9_I0.png similarity index 100% rename from sprites/US9_I0.png rename to sprites/smoke/US9_I0.png diff --git a/sprites/US9_J0.png b/sprites/smoke/US9_J0.png similarity index 100% rename from sprites/US9_J0.png rename to sprites/smoke/US9_J0.png diff --git a/sprites/US9_K0.png b/sprites/smoke/US9_K0.png similarity index 100% rename from sprites/US9_K0.png rename to sprites/smoke/US9_K0.png diff --git a/sprites/US9_L0.png b/sprites/smoke/US9_L0.png similarity index 100% rename from sprites/US9_L0.png rename to sprites/smoke/US9_L0.png diff --git a/sprites/US9_M0.png b/sprites/smoke/US9_M0.png similarity index 100% rename from sprites/US9_M0.png rename to sprites/smoke/US9_M0.png diff --git a/sprites/US9_N0.png b/sprites/smoke/US9_N0.png similarity index 100% rename from sprites/US9_N0.png rename to sprites/smoke/US9_N0.png diff --git a/sprites/US9_O0.png b/sprites/smoke/US9_O0.png similarity index 100% rename from sprites/US9_O0.png rename to sprites/smoke/US9_O0.png diff --git a/sprites/US9_P0.png b/sprites/smoke/US9_P0.png similarity index 100% rename from sprites/US9_P0.png rename to sprites/smoke/US9_P0.png diff --git a/textures.gore b/textures.gore new file mode 100644 index 0000000..24dbcb4 --- /dev/null +++ b/textures.gore @@ -0,0 +1,6 @@ +Sprite "UGIBA0",1,1{} +Sprite "UGIBB0",1,1{} +Sprite "UGIBC0",1,1{} +Sprite "UGIBD0",1,1{} +Sprite "UGIBE0",1,1{} +Sprite "UGIBF0",1,1{} diff --git a/textures/doomtest/Glassg.png b/textures/doomtest/Glassg.png index 436962b..6bb4ec8 100644 Binary files a/textures/doomtest/Glassg.png and b/textures/doomtest/Glassg.png differ diff --git a/textures/doomtest/rClfBas0.png b/textures/doomtest/rClfBas0.png index 1efcc62..0c37779 100644 Binary files a/textures/doomtest/rClfBas0.png and b/textures/doomtest/rClfBas0.png differ diff --git a/textures/doomtest/rClfFlr0.png b/textures/doomtest/rClfFlr0.png index 5b4e58e..9cd179d 100644 Binary files a/textures/doomtest/rClfFlr0.png and b/textures/doomtest/rClfFlr0.png differ diff --git a/textures/doomtest/uAlnWl2b.png b/textures/doomtest/uAlnWl2b.png index 9e7549d..e509279 100644 Binary files a/textures/doomtest/uAlnWl2b.png and b/textures/doomtest/uAlnWl2b.png differ diff --git a/textures/doomtest/xAlnWl2b.png b/textures/doomtest/xAlnWl2b.png index 42a528b..8d90722 100644 Binary files a/textures/doomtest/xAlnWl2b.png and b/textures/doomtest/xAlnWl2b.png differ diff --git a/xhairs.txt b/xhairs.txt new file mode 100644 index 0000000..9184122 --- /dev/null +++ b/xhairs.txt @@ -0,0 +1,7 @@ +8 "UT Crosshair 1" +9 "UT Crosshair 2" +10 "UT Crosshair 3" +11 "UT Crosshair 4" +12 "UT Crosshair 5" +13 "UT Crosshair 6" +14 "UT Crosshair 7" diff --git a/zmapinfo.txt b/zmapinfo.txt index 4ad1c5d..958dc67 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -1,7 +1,7 @@ GameInfo { AddEventHandlers = "RedeemerHUDHandler", "UTMainHandler" - PlayerClasses = "UTPlayer" + PlayerClasses = "UTPlayerTMale1", "UTPlayerTMale2", "UTPlayerTFemale1", "UTPlayerTFemale2", "UTPlayerTBoss" StatusBarClass = "UTHud" BackpackType = "UTBackpack" BorderFlat = "TEMPBG" diff --git a/zscript.txt b/zscript.txt index 16b410b..e2ceb1f 100644 --- a/zscript.txt +++ b/zscript.txt @@ -1,8 +1,9 @@ -version "3.5" +version "3.7" #include "zscript/mk_matrix.zsc" #include "zscript/mk_coordutil.zsc" #include "zscript/mk_quaternion.zsc" +#include "zscript/utgore.zsc" #include "zscript/utcommon.zsc" #include "zscript/impacthammer.zsc" #include "zscript/chainsaw.zsc" diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index 9bf3e6e..8aa2475 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -216,9 +216,9 @@ Class BioGel : Actor if ( globalfreeze || level.frozen ) return; if ( !bNOGRAVITY ) { - A_SetRoll(roll+rollvel,SPF_INTERPOLATE); - A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE); - A_SetPitch(pitch+yawvel,SPF_INTERPOLATE); + roll += rollvel; + pitch += pitchvel; + pitch += yawvel; if ( waterlevel > 0 ) { vel.xy *= 0.98; @@ -288,6 +288,7 @@ Class BioGel : Actor // align self to what surface was hit, currently does not support 3d floors + slopes properly virtual void AlignSelf() { + bINTERPOLATEANGLES = false; bHITOWNER = true; A_NoGravity(); A_Stop(); @@ -538,6 +539,7 @@ Class BioGel : Actor +MOVEWITHSECTOR; +NODAMAGETHRUST; +HITTRACER; + +INTERPOLATEANGLES; } States { @@ -655,15 +657,20 @@ Class BioRifle : UTWeapon else A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); Vector3 x, y, z; double a, s; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+8.0*y-5.0*z; Actor p; if ( alt ) { p = Spawn("BioGlob",origin); p.A_SetScale(1.0+invoker.charge*0.8); + UTMainHandler.DoSwing(self,(FRandom[GES](-0.6,-1.3),FRandom[GES](-0.9,-0.2)),1+invoker.charge*0.3,-0.1,3,SWING_Spring,3,2); + } + else + { + p = Spawn("BioGel",origin); + UTMainHandler.DoSwing(self,(FRandom[GES](-0.6,-1.3),FRandom[GES](-0.9,-0.2)),2,-0.5,2,SWING_Spring,2,2); } - else p = Spawn("BioGel",origin); p.angle = angle; p.pitch = BulletSlope(); p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed; @@ -692,6 +699,7 @@ Class BioRifle : UTWeapon { Weapon weap = Weapon(invoker); if ( !weap ) return; + UTMainHandler.DoSwing(self,(FRandom[GES](-1,1),FRandom[GES](-1,1)),0.02*invoker.charge,0,5,SWING_Spring,0,2); if ( invoker.charge >= 5.1 ) return; if ( weap.Ammo1.Amount <= 0 ) return; if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; diff --git a/zscript/chainsaw.zsc b/zscript/chainsaw.zsc index ba1d06d..7652de3 100644 --- a/zscript/chainsaw.zsc +++ b/zscript/chainsaw.zsc @@ -46,13 +46,14 @@ Class UTChainsaw : UTWeapon action void A_SawHit() { A_QuakeEx(2,2,2,2,0,1,"",QF_RELATIVE,rollIntensity:0.15); + UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.6,-0.2,2,SWING_Spring); invoker.sawcnt += 1./TICRATE; if ( invoker.sawcnt < 0.15 ) return; invoker.sawcnt = 0; invoker.FireEffect(); A_AlertMonsters(); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x-4.0*z; FLineTraceData d; LineTrace(angle,90,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); @@ -86,10 +87,11 @@ Class UTChainsaw : UTWeapon action void A_SawSwipe( bool initial = false ) { A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); + UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.6,-0.2,2,SWING_Spring); if ( initial ) invoker.FireEffect(); A_AlertMonsters(); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x-2.0*z; FLineTraceData d; double ang = (angle-60)+120*invoker.sawcnt; @@ -136,9 +138,10 @@ Class UTChainsaw : UTWeapon A_AlertMonsters(); if ( bAlt ) A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE,rollIntensity:0.4); else A_QuakeEx(0,0,0,2,0,1,"",QF_RELATIVE,rollIntensity:0.2); + UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.25,-0.1,2,SWING_Spring); if ( bAlt || Random[Chainsaw](0,2) ) return; Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+5.0*x+1.0*y-3.0*z; for ( int i=0; i<5; i++ ) { @@ -232,9 +235,17 @@ Class UTChainsaw : UTWeapon CSWJ FEDCBA 1 A_Vibrate(); Goto Idle; AltFire: - CSWA A 0 A_PlaySound("chainsaw/fire",CHAN_6); + CSWA A 0 + { + A_PlaySound("chainsaw/fire",CHAN_6); + UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-0.8,-1.2),FRandom[Chainsaw](-0.4,-0.7)),0,1,5,SWING_Spring,6,3); + } CSWA ABCDE 2 A_Vibrate(true); - CSWA F 2 A_Overlay(PSP_WEAPON+1,"AltFireSwipes"); + CSWA F 2 + { + A_Overlay(PSP_WEAPON+1,"AltFireSwipes"); + UTMainHandler.DoSwing(self,(FRandom[Chainsaw](0.8,1.2),0),0,2,6,SWING_Spring,1,3); + } CSWA GHIJ 2; CSWA K 2 A_Vibrate(true); CSWA K 0 A_PlaySound("chainsaw/idle",CHAN_6,looping:true); diff --git a/zscript/eightball.zsc b/zscript/eightball.zsc index 62b8d3c..316ffb5 100644 --- a/zscript/eightball.zsc +++ b/zscript/eightball.zsc @@ -118,6 +118,7 @@ Class UTRocket : Actor +SEEKERMISSILE; +FORCERADIUSDMG; +NODAMAGETHRUST; + +INTERPOLATEANGLES; } override void PostBeginPlay() { @@ -184,7 +185,7 @@ Class UTRocket : Actor Spawn: RCKT B 1 { - A_SetRoll(roll+30,SPF_INTERPOLATE); + roll += 30; if ( invoker.ticcnt++ > 3 ) { invoker.ticcnt = 0; @@ -194,8 +195,8 @@ Class UTRocket : Actor if ( vel.length() > 45. ) vel = Vel.unit()*45.; Vector3 dir = vel.unit(); if ( waterlevel <= 0 ) vel = dir*min(vel.length()+1,32); - A_SetAngle(atan2(dir.y,dir.x),SPF_INTERPOLATE); - A_SetPitch(asin(-dir.z),SPF_INTERPOLATE); + angle = atan2(dir.y,dir.x); + pitch = asin(-dir.z); for ( int i=0; i<3; i++ ) { let s = Spawn("UTSmoke",pos); @@ -242,9 +243,9 @@ Class UTGrenade : UTRocket Spawn: RCKT A 1 { - A_SetAngle(angle+anglevel,SPF_INTERPOLATE); - A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE); - A_SetRoll(roll+rollvel,SPF_INTERPOLATE); + angle += anglevel; + pitch += pitchvel; + roll += rollvel; A_Countdown(); } Wait; @@ -332,11 +333,13 @@ Class UTRocketLauncher : UTWeapon UTMainHandler.DoFlash(self,Color(64,255,0,0),1); A_AlertMonsters(); A_QuakeEx(2+num,2+num,2+num,6+num,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1+num*0.05); + for ( int i=0; i 1 ) Screen.DrawText(confont,Font.CR_GREEN,Screen.GetWidth()*0.01,lbottom-Screen.GetHeight()*0.01-confont.GetHeight()*2,String.Format("L Clip: %2d / 20\nR Clip: %2d / 20",slaveclipcount,clipcount)); else Screen.DrawText(confont,Font.CR_GREEN,Screen.GetWidth()*0.01,lbottom-Screen.GetHeight()*0.01-confont.GetHeight(),String.Format("Clip: %2d / 20",clipcount)); } @@ -209,7 +210,7 @@ Class Enforcer : UTWeapon if ( !weap || !player ) return; if ( slave ) { - if ( CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.slaveclipcount < 5) ) A_PlaySound("enforcer/click",CHAN_6); + if ( flak_enforcerreload && (invoker.slaveclipcount < 5) ) A_PlaySound("enforcer/click",CHAN_6); if ( (invoker.slaveclipcount <= 0) || (weap.Ammo1.Amount <= 0) ) { invoker.slaverefire = 0; @@ -236,7 +237,7 @@ Class Enforcer : UTWeapon } else { - if ( CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.clipcount < 5) ) A_PlaySound("enforcer/click",CHAN_WEAPON); + if ( flak_enforcerreload && (invoker.clipcount < 5) ) A_PlaySound("enforcer/click",CHAN_WEAPON); if ( (invoker.clipcount <= 0) || (weap.Ammo1.Amount <= 0) ) { A_ClearRefire(); @@ -273,12 +274,12 @@ Class Enforcer : UTWeapon if ( slave ) { invoker.slaveclipcount--; - if ( !CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.slaveclipcount <=0) ) invoker.slaveclipcount = (weap.Ammo1.Amount>0)?Min(20,weap.Ammo1.Amount):20; + if ( !flak_enforcerreload && (invoker.slaveclipcount <=0) ) invoker.slaveclipcount = (weap.Ammo1.Amount>0)?Min(20,weap.Ammo1.Amount):20; } else { invoker.clipcount--; - if ( !CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.clipcount <=0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(20,weap.Ammo1.Amount):20; + if ( !flak_enforcerreload && (invoker.clipcount <=0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(20,weap.Ammo1.Amount):20; } invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(32,255,128,0),1); @@ -291,6 +292,7 @@ Class Enforcer : UTWeapon else A_Overlay(-3,"LeftMuzzleFlash"); A_OverlayFlags(-3,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); A_OverlayRenderstyle(-3,STYLE_Add); + UTMainHandler.DoSwing(self,(FRandom[Enforcer](0.5,0.2),FRandom[Enforcer](-0.3,0.2)),2,0,1,SWING_Spring,0,2); } else { @@ -298,16 +300,17 @@ Class Enforcer : UTWeapon else A_Overlay(-2,"MuzzleFlash"); A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); A_OverlayRenderstyle(-2,STYLE_Add); + UTMainHandler.DoSwing(self,(FRandom[Enforcer](-0.2,-0.5),FRandom[Enforcer](-0.3,0.2)),2,0,1,SWING_Spring,0,2); } Vector3 x, y, z, x2, y2, z2; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = pos+(0,0,player.viewheight)+10.0*x; int ydir = slave?-1:1; if ( alt ) origin = origin-z*3.0+ydir*y*1.0; else origin = origin-z*1.0+ydir*y*4.0; double a = FRandom[Enforcer](0,360), s = FRandom[Enforcer](0,alt?0.08:0.004); if ( invoker.SlaveActive ) s *= 3; - [x2, y2, z2] = Matrix4.GetAxes(BulletSlope(),angle,roll); + [x2, y2, z2] = dt_Matrix4.GetAxes(BulletSlope(),angle,roll); Vector3 dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); FLineTraceData d; LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); @@ -439,7 +442,7 @@ Class Enforcer : UTWeapon TNT1 A 1 { if ( (invoker.clipcount <= 0) && (invoker.Ammo1.Amount > 0) ) A_Overlay(PSP_WEAPON,"Reload"); - else if ( CVar.GetCVar('flak_enforcerreload').GetBool() && ((invoker.clipcount < min(20,invoker.Ammo1.Amount)) || (invoker.slaveclipcount < min(20,invoker.Ammo1.Amount))) ) A_WeaponReady(WRF_ALLOWRELOAD); + else if ( flak_enforcerreload && ((invoker.clipcount < min(20,invoker.Ammo1.Amount)) || (invoker.slaveclipcount < min(20,invoker.Ammo1.Amount))) ) A_WeaponReady(WRF_ALLOWRELOAD); else A_WeaponReady(); if ( !invoker.slaveactive && (CountInv("Enforcer") > 1) ) A_Overlay(2,"LeftReady"); } @@ -452,7 +455,7 @@ Class Enforcer : UTWeapon invoker.slaveactive = false; A_Overlay(2,"LeftDeselect"); } - else if ( CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.slavereload || (invoker.slaveclipcount < 0)) ) A_Overlay(2,"LeftReload"); + else if ( flak_enforcerreload && (invoker.slavereload || (invoker.slaveclipcount < 0)) ) A_Overlay(2,"LeftReload"); else if ( invoker.slavedown ) A_Overlay(2,"LeftDeselect"); else A_LeftWeaponReady(); } diff --git a/zscript/flakcannon.zsc b/zscript/flakcannon.zsc index c3bac4b..4432890 100644 --- a/zscript/flakcannon.zsc +++ b/zscript/flakcannon.zsc @@ -105,6 +105,53 @@ Class ChunkTrail : Actor } } +Class FlakAccumulator : Thinker +{ + Actor victim; + int amount; + int cnt; + + override void Tick() + { + Super.Tick(); + cnt++; + if ( cnt < 5 ) return; + Destroy(); + } + + static void Accumulate( Actor victim, int amount ) + { + let ti = ThinkerIterator.Create("FlakAccumulator",STAT_USER); + FlakAccumulator a, match = null; + while ( a = FlakAccumulator(ti.Next()) ) + { + if ( a.victim != victim ) continue; + match = a; + break; + } + if ( !match ) + { + match = new("FlakAccumulator"); + match.ChangeStatNum(STAT_USER); + match.victim = victim; + } + match.cnt = 0; + match.amount += amount; + } + + static int GetAmount( Actor victim ) + { + let ti = ThinkerIterator.Create("FlakAccumulator",STAT_USER); + FlakAccumulator a; + while ( a = FlakAccumulator(ti.Next()) ) + { + if ( a.victim != victim ) continue; + return a.amount; + } + return 0; + } +} + Class FlakChunk : Actor { ChunkTrail trail; @@ -127,6 +174,7 @@ Class FlakChunk : Actor -BOUNCEAUTOOFF; +CANBOUNCEWATER; +SKYEXPLODE; + +INTERPOLATEANGLES; Scale 0.3; } override void PostBeginPlay() @@ -177,9 +225,9 @@ Class FlakChunk : Actor } if ( trail ) trail.alpha = max(0,11-frame)/11.; if ( InStateSequence(CurState,FindState("Death")) ) return; - A_SetRoll(roll+rollvel,SPF_INTERPOLATE); - A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE); - A_SetAngle(angle+pitchvel,SPF_INTERPOLATE); + roll += rollvel; + pitch += pitchvel; + angle += pitchvel; } action void A_HandleBounce() { @@ -208,6 +256,10 @@ Class FlakChunk : Actor override int DoSpecialDamage( Actor target, int damage, Name damagetype ) { if ( vel.length() <= 5.0 ) return 0; + FlakAccumulator.Accumulate(target,damage); + int gibhealth = (target.GibHealth==int.min)?-target.SpawnHealth():target.GibHealth; + int calcdmg = FlakAccumulator.GetAmount(target); + if ( target.Health-calcdmg <= (gibhealth/2) ) bEXTREMEDEATH = true; if ( !target.bNOBLOOD ) { target.SpawnBlood(pos,AngleTo(target),damage); @@ -370,7 +422,7 @@ Class FlakSlug : Actor Spawn("SlugLight",pos); Vector3 x, y, z; double a, s; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Actor p; for ( int i=0; i<5; i++ ) { @@ -459,16 +511,17 @@ Class FlakCannon : UTWeapon A_PlaySound("flak/fire",CHAN_WEAPON); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(160,255,96,0),1); + UTMainHandler.DoSwing(self,(FRandom[Flak](-0.3,-0.8),FRandom[Flak](-0.5,0.5)),4,-1.5,2,SWING_Spring,2,2); A_AlertMonsters(); A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); Vector3 x, y, z; double a, s; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+4.0*y-3.0*z; A_Overlay(-2,"MuzzleFlash"); A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); A_OverlayRenderstyle(-2,STYLE_Add); - [x, y, z] = Matrix4.GetAxes(BulletSlope(),angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(BulletSlope(),angle,roll); Actor p; for ( int i=0; i<6; i++ ) { @@ -508,11 +561,12 @@ Class FlakCannon : UTWeapon A_PlaySound("flak/altfire",CHAN_WEAPON); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,255,96,0),1); + UTMainHandler.DoSwing(self,(FRandom[Flak](-0.4,-0.8),FRandom[Flak](0.4,0.8)),4,-1,3,SWING_Spring,3,5); A_AlertMonsters(); A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); Vector3 x, y, z; double a, s; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+2.0*y-3.0*z; A_Overlay(-2,"MuzzleFlash"); A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); diff --git a/zscript/impacthammer.zsc b/zscript/impacthammer.zsc index 1456c83..81461dd 100644 --- a/zscript/impacthammer.zsc +++ b/zscript/impacthammer.zsc @@ -59,6 +59,7 @@ Class ImpactHammer : UTWeapon A_AlertMonsters(); } A_QuakeEx(clamp(int(invoker.chargesize*3),0,3),clamp(int(invoker.chargesize*3),0,3),clamp(int(invoker.chargesize*3),0,3),amt+1,0,96,"",QF_RELATIVE,rollIntensity:clamp(invoker.chargesize*0.3,0,0.3)); + UTMainHandler.DoSwing(self,(FRandom[Impact](-1,1),FRandom[Impact](-1,1)),invoker.chargesize*0.1,0,1,SWING_Spring); } action void A_FireBlast() { @@ -66,9 +67,10 @@ Class ImpactHammer : UTWeapon if ( !weap ) return; A_PlaySound("impact/release",CHAN_WEAPON); invoker.FireEffect(); + UTMainHandler.DoSwing(self,(FRandom[Impact](-0.3,-1.5),FRandom[Impact](-1.2,-0.4)),3,-0.8,3,SWING_Spring,3,2); A_AlertMonsters(); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+3.0*y-4.0*z; double realcharge = min(1.5,invoker.chargesize); FLineTraceData d; @@ -127,10 +129,11 @@ Class ImpactHammer : UTWeapon if ( !weap ) return; A_PlaySound("impact/fire",CHAN_WEAPON); invoker.FireEffect(); + UTMainHandler.DoSwing(self,(FRandom[Impact](-0.3,-1.5),FRandom[Impact](-1.2,-0.4)),2,-0.6,2,SWING_Spring,1,2); A_AlertMonsters(); A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+3.0*y-4.0*z; FLineTraceData d; LineTrace(angle,120,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); @@ -185,7 +188,7 @@ Class ImpactHammer : UTWeapon { FLineTraceData d; Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+3.0*y-4.0*z; LineTrace(angle,40,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); if ( (invoker.chargesize > 1) && (d.HitType == TRACE_HitActor) ) diff --git a/zscript/minigun.zsc b/zscript/minigun.zsc index d77fdb6..35b6110 100644 --- a/zscript/minigun.zsc +++ b/zscript/minigun.zsc @@ -42,6 +42,7 @@ Class MinigunTracer : Actor +NOCLIP; +NOGRAVITY; +DONTSPLASH; + +INTERPOLATEANGLES; } override void Tick() { @@ -55,9 +56,9 @@ Class MinigunTracer : Actor } dir = dir.unit(); SetOrigin(Vec3Offset(dir.x*160,dir.y*160,dir.z*160),true); - A_SetAngle(atan2(dir.y,dir.x),SPF_INTERPOLATE); - A_SetPitch(asin(-dir.z),SPF_INTERPOLATE); - A_SetRoll(roll+60,SPF_INTERPOLATE); + angle = atan2(dir.y,dir.x); + pitch = asin(-dir.z); + roll += 60; } States { @@ -86,16 +87,24 @@ Class Minigun : UTWeapon invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(32,255,255,0),1); A_AlertMonsters(); - if ( alt ) A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12); - else A_QuakeEx(1,1,1,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08); + if ( alt ) + { + A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12); + UTMainHandler.DoSwing(self,(FRandom[Minigun](-1,1),FRandom[Minigun](-1,1)),0.5,0,1,SWING_Spring,0,3); + } + else + { + A_QuakeEx(1,1,1,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08); + UTMainHandler.DoSwing(self,(FRandom[Minigun](-1,1),FRandom[Minigun](-1,1)),0.3,0,1,SWING_Spring,0,3); + } let l = Spawn("MinigunLight",pos); l.target = self; if ( !alt ) MinigunLight(l).cnt--; Vector3 x, y, z, x2, y2, z2; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+y*2.0-z*2.0; double a = FRandom[Minigun](0,360), s = FRandom[Minigun](0,alt?0.05:0.02); - [x2, y2, z2] = Matrix4.GetAxes(BulletSlope(),angle,roll); + [x2, y2, z2] = dt_Matrix4.GetAxes(BulletSlope(),angle,roll); Vector3 dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); FLineTraceData d; LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); @@ -213,12 +222,12 @@ Class Minigun : UTWeapon Ready: MGNS ABCDEFGHIJKLMNOPQRST 1 A_WeaponReady(WRF_NOFIRE); Idle: - MGNI ABCDEFGHIJKLMNOPQRS 5 + MGNI A 1 { A_CheckReload(); A_WeaponReady(); } - Loop; + Wait; Fire: AltFire: MGNI A 3 { invoker.bcnt = 5; } diff --git a/zscript/mk_coordutil.zsc b/zscript/mk_coordutil.zsc index 299feed..709a425 100644 --- a/zscript/mk_coordutil.zsc +++ b/zscript/mk_coordutil.zsc @@ -5,7 +5,7 @@ See https://www.gnu.org/licenses/lgpl-3.0.txt for its terms. */ -Class mkCoordUtil +Class dt_CoordUtil { // projects a world point onto screen // view matrix setup mostly pulled from gutawer's code @@ -21,32 +21,32 @@ Class mkCoordUtil double apitch = asin(angy/alen); double ayaw = yaw-90; // rotations - Matrix4 mRoll = Matrix4.rotate((0,0,1),roll); - Matrix4 mPitch = Matrix4.rotate((1,0,0),apitch); - Matrix4 mYaw = Matrix4.rotate((0,-1,0),ayaw); + dt_Matrix4 mRoll = dt_Matrix4.rotate((0,0,1),roll); + dt_Matrix4 mPitch = dt_Matrix4.rotate((1,0,0),apitch); + dt_Matrix4 mYaw = dt_Matrix4.rotate((0,-1,0),ayaw); // scaling - Matrix4 mScale = Matrix4.identity(); + dt_Matrix4 mScale = dt_Matrix4.identity(); mScale.set(1,1,pr); // YZ swap - Matrix4 mYZ = Matrix4.create(); + dt_Matrix4 mYZ = dt_Matrix4.create(); mYZ.set(0,0,1); mYZ.set(2,1,1); mYZ.set(1,2,-1); mYZ.set(3,3,1); // translation - Matrix4 mMove = Matrix4.identity(); + dt_Matrix4 mMove = dt_Matrix4.identity(); mMove.set(3,0,-eye.x); mMove.set(3,1,-eye.y); mMove.set(3,2,-eye.z); // perspective - Matrix4 mPerspective = Matrix4.perspective(fov,ar,5,65535); + dt_Matrix4 mPerspective = dt_Matrix4.perspective(fov,ar,5,65535); // full matrix - Matrix4 mView = mRoll.mul(mPitch); + dt_Matrix4 mView = mRoll.mul(mPitch); mView = mView.mul(mYaw); mView = mView.mul(mScale); mView = mView.mul(mYZ); mView = mView.mul(mMove); - Matrix4 mWorldToScreen = mPerspective.mul(mView); + dt_Matrix4 mWorldToScreen = mPerspective.mul(mView); return mWorldToScreen.vmat(vect); } diff --git a/zscript/mk_matrix.zsc b/zscript/mk_matrix.zsc index 37ddf69..7a15095 100644 --- a/zscript/mk_matrix.zsc +++ b/zscript/mk_matrix.zsc @@ -5,25 +5,25 @@ See https://www.gnu.org/licenses/lgpl-3.0.txt for its terms. */ -Class Matrix4 +Class dt_Matrix4 { private double m[16]; - Matrix4 init() + dt_Matrix4 init() { int i; for ( i=0; i<16; i++ ) m[i] = 0; return self; } - static Matrix4 create() + static dt_Matrix4 create() { - return new("Matrix4").init(); + return new("dt_Matrix4").init(); } - static Matrix4 identity() + static dt_Matrix4 identity() { - Matrix4 o = Matrix4.create(); + dt_Matrix4 o = dt_Matrix4.create(); for ( int i=0; i<4; i++ ) o.set(i,i,1); return o; } @@ -38,27 +38,27 @@ Class Matrix4 m[r*4+c] = v; } - Matrix4 add( Matrix4 o ) + dt_Matrix4 add( dt_Matrix4 o ) { - Matrix4 r = Matrix4.create(); + dt_Matrix4 r = dt_Matrix4.create(); int i, j; for ( i=0; i<4; i++ ) for ( j=0; j<4; j++ ) r.set(j,i,get(j,i)+o.get(j,i)); return r; } - Matrix4 scale( double s ) + dt_Matrix4 scale( double s ) { - Matrix4 r = Matrix4.create(); + dt_Matrix4 r = dt_Matrix4.create(); int i, j; for ( i=0; i<4; i++ ) for ( j=0; j<4; j++ ) r.set(j,i,get(j,i)*s); return r; } - Matrix4 mul( Matrix4 o ) + dt_Matrix4 mul( dt_Matrix4 o ) { - Matrix4 r = Matrix4.create(); + dt_Matrix4 r = dt_Matrix4.create(); int i, j; for ( i=0; i<4; i++ ) for ( j=0; j<4; j++ ) r.set(j,i,get(0,i)*o.get(j,0)+get(1,i)*o.get(j,1)+get(2,i)*o.get(j,2)+get(3,i)*o.get(j,3)); @@ -75,9 +75,9 @@ Class Matrix4 return (x,y,z)/w; } - static Matrix4 rotate( Vector3 axis, double theta ) + static dt_Matrix4 rotate( Vector3 axis, double theta ) { - Matrix4 r = Matrix4.identity(); + dt_Matrix4 r = dt_Matrix4.identity(); double s, c, oc; s = sin(theta); c = cos(theta); @@ -94,9 +94,9 @@ Class Matrix4 return r; } - static Matrix4 perspective( double fov, double ar, double znear, double zfar ) + static dt_Matrix4 perspective( double fov, double ar, double znear, double zfar ) { - Matrix4 r = Matrix4.create(); + dt_Matrix4 r = dt_Matrix4.create(); double f = 1/tan(fov*0.5); r.set(0,0,f/ar); r.set(1,1,f); @@ -110,10 +110,10 @@ Class Matrix4 static Vector3, Vector3, Vector3 getaxes( double pitch, double yaw, double roll ) { Vector3 x = (1,0,0), y = (0,-1,0), z = (0,0,1); // y inverted for left-handed result - Matrix4 mRoll = Matrix4.rotate((1,0,0),roll); - Matrix4 mPitch = Matrix4.rotate((0,1,0),pitch); - Matrix4 mYaw = Matrix4.rotate((0,0,1),yaw); - Matrix4 mRot = mRoll.mul(mYaw); + dt_Matrix4 mRoll = dt_Matrix4.rotate((1,0,0),roll); + dt_Matrix4 mPitch = dt_Matrix4.rotate((0,1,0),pitch); + dt_Matrix4 mYaw = dt_Matrix4.rotate((0,0,1),yaw); + dt_Matrix4 mRot = mRoll.mul(mYaw); mRot = mRot.mul(mPitch); x = mRot.vmat(x); y = mRot.vmat(y); diff --git a/zscript/mk_quaternion.zsc b/zscript/mk_quaternion.zsc index 24631a5..8a5770c 100644 --- a/zscript/mk_quaternion.zsc +++ b/zscript/mk_quaternion.zsc @@ -5,11 +5,11 @@ See https://www.gnu.org/licenses/lgpl-3.0.txt for its terms. */ -Class Quat +Class dt_Quat { protected double W, X, Y, Z; - Quat init( double w, double x, double y, double z ) + dt_Quat init( double w, double x, double y, double z ) { self.W = w; self.X = x; @@ -18,7 +18,7 @@ Class Quat return self; } - void copy( Quat q ) + void copy( dt_Quat q ) { W = q.W; X = q.X; @@ -26,26 +26,26 @@ Class Quat Z = q.Z; } - static Quat create( double w, double x, double y, double z ) + static dt_Quat create( double w, double x, double y, double z ) { - return new("Quat").init(w,x,y,z); + return new("dt_Quat").init(w,x,y,z); } - static Quat create_axis( Vector3 axis, double theta ) + static dt_Quat create_axis( Vector3 axis, double theta ) { double scale = axis dot axis; - if ( scale < double.epsilon ) return Quat.create(1,0,0,0); + if ( scale < double.epsilon ) return dt_Quat.create(1,0,0,0); theta *= 0.5; double f = sin(theta)/sqrt(scale); - return Quat.create(cos(theta),axis.x*f,axis.y*f,axis.z*f); + return dt_Quat.create(cos(theta),axis.x*f,axis.y*f,axis.z*f); } - static Quat create_euler( double pitch, double yaw, double roll ) + static dt_Quat create_euler( double pitch, double yaw, double roll ) { - Quat zrot = Quat.create_axis((0,0,1),yaw); - Quat yrot = Quat.create_axis((0,1,0),pitch); - Quat xrot = Quat.create_axis((1,0,0),roll); - Quat sum = zrot.qmul(yrot); + dt_Quat zrot = dt_Quat.create_axis((0,0,1),yaw); + dt_Quat yrot = dt_Quat.create_axis((0,1,0),pitch); + dt_Quat xrot = dt_Quat.create_axis((1,0,0),roll); + dt_Quat sum = zrot.qmul(yrot); sum = sum.qmul(xrot); return sum; } @@ -89,9 +89,9 @@ Class Quat return pitch, yaw, roll; } - Quat qmul( Quat q ) + dt_Quat qmul( dt_Quat q ) { - return Quat.create(w*q.w-x*q.x-y*q.y-z*q.z,w*q.x+x*q.w+y*q.z-z + return dt_Quat.create(w*q.w-x*q.x-y*q.y-z*q.z,w*q.x+x*q.w+y*q.z-z *q.y,w*q.y+y*q.w+z*q.x-x*q.z,w*q.z+z*q.w+x*q.y-y*q.x); } } diff --git a/zscript/powerups.zsc b/zscript/powerups.zsc index 13eff03..d6518a8 100644 --- a/zscript/powerups.zsc +++ b/zscript/powerups.zsc @@ -36,7 +36,9 @@ Class DamageAmpLight : DynamicLight Destroy(); return; } - SetOrigin(target.pos,true); + if ( target.player ) + SetOrigin(target.Vec2OffsetZ(0,0,target.player.viewz),true); + else SetOrigin(target.Vec3Offset(0,0,target.height/2),true); args[LIGHT_INTENSITY] = Random[ASMD](10,12)*8; bDORMANT = Powerup(master).isBlinking(); } @@ -268,8 +270,7 @@ Class UTInvisibilityX : Actor Destroy(); return; } - SetOrigin(target.pos,true); - A_SetAngle(target.angle,SPF_INTERPOLATE); + Warp(target,flags:WARPF_COPYINTERPOLATION|WARPF_NOCHECKPOSITION); bInvisible = target.bInvisible; } States @@ -318,7 +319,8 @@ Class UTJumpBoots : Inventory if ( pickup ) { Owner.GiveInventory("PowerJumpBoots_HighJump",1); - Owner.GiveInventory("PowerJumpBoots_IronFeet",1); + if ( flak_radboots ) + Owner.GiveInventory("PowerJumpBoots_IronFeet",1); } return false; } @@ -326,7 +328,8 @@ Class UTJumpBoots : Inventory { Super.Tick(); if ( !Owner || !Owner.player ) return; - amount--; + if ( flak_radboots ) + amount--; if ( (amount > 0) && (owner.player.jumptics == -1) ) { Amount = max(0,Amount-700); @@ -380,6 +383,8 @@ Class PowerJumpBoots_IronFeet : PowerIronFeet override void DoEffect() { Powerup.DoEffect(); + if ( !flak_radboots ) + DepleteOrDestroy(); } } diff --git a/zscript/pulsegun.zsc b/zscript/pulsegun.zsc index 7862dc7..78add62 100644 --- a/zscript/pulsegun.zsc +++ b/zscript/pulsegun.zsc @@ -6,7 +6,7 @@ Class PulseAmmo : Ammo Inventory.PickupMessage "You picked up a Pulse Cell."; Inventory.Amount 25; Inventory.MaxAmount 200; - Ammo.BackpackAmount 50; + Ammo.BackpackAmount 40; Ammo.BackpackMaxAmount 400; Ammo.DropAmount 10; } @@ -87,7 +87,7 @@ Class ViewPulseSpark : PulseSpark return; } Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(target.pitch,target.angle,target.roll); + [x, y, z] = dt_Matrix4.GetAxes(target.pitch,target.angle,target.roll); Vector3 origin = x*ofs.x+y*ofs.y+z*ofs.z+(0,0,target.player.viewz); SetOrigin(target.Vec2OffsetZ(origin.x,origin.y,origin.z),true); bInvisible = (players[consoleplayer].camera != target); @@ -373,12 +373,12 @@ Class PulseBolt : Actor if ( !damagedactor ) { accdamage = min(0.5*(level.time-lasthit),0.1); - t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,90)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); + t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](80,100)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); accdamage = 0; } else if ( t.Results.HitActor != damagedactor ) { - t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,90)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); + t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](80,100)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); accdamage = 0; } lasthit = level.time; @@ -386,7 +386,7 @@ Class PulseBolt : Actor accdamage += 1./TICRATE; if ( accdamage > 0.17 ) { - t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,90)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); + t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](80,100)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); accdamage = 0; } } @@ -515,7 +515,7 @@ Class StarterBolt : PulseBolt Vector3 x, y, z, origin; if ( target.player ) { - [x, y, z] = Matrix4.GetAxes(target.pitch,target.angle,target.roll); + [x, y, z] = dt_Matrix4.GetAxes(target.pitch,target.angle,target.roll); origin = target.Vec2OffsetZ(0,0,target.player.viewz)+8.0*x+4.1*y-2.7*z; } else origin = target.Vec3Offset(0,0,target.missileheight); @@ -538,7 +538,7 @@ Class PulseGun : UTWeapon override void PostRender( double lbottom ) { - if ( !CVar.GetCVar('flak_pulsereload').GetBool() ) return; + if ( !flak_pulsereload ) return; Screen.DrawText(confont,Font.CR_GREEN,Screen.GetWidth()*0.01,lbottom-Screen.GetHeight()*0.01-confont.GetHeight(),String.Format("Clip: %2d / 50",clipcount)); } @@ -556,12 +556,13 @@ Class PulseGun : UTWeapon if ( weap.Ammo1.Amount <= 0 ) return; if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; invoker.clipcount--; - if ( !CVar.GetCVar('flak_pulsereload').GetBool() && (invoker.clipcount <= 0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(50,weap.Ammo1.Amount):50; + if ( !flak_pulsereload && (invoker.clipcount <= 0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(50,weap.Ammo1.Amount):50; invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(32,128,255,128),1); + UTMainHandler.DoSwing(self,(FRandom[Pulse](-1,-1),FRandom[Pulse](-1,1)),0.1,-0.02,3,SWING_Spring,0,2); A_AlertMonsters(); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = Vec2OffsetZ(0,0,player.viewz)+10.0*x+4.1*y-2.7*z; for ( int i=0; i<4; i++ ) { @@ -616,9 +617,10 @@ Class PulseGun : UTWeapon if ( weap.Ammo1.Amount <= 0 ) return; if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; invoker.clipcount--; - if ( !CVar.GetCVar('flak_pulsereload').GetBool() && (invoker.clipcount <=0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(50,weap.Ammo1.Amount):50; + if ( !flak_pulsereload && (invoker.clipcount <=0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(50,weap.Ammo1.Amount):50; invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(32,128,255,128),1); + UTMainHandler.DoSwing(self,(FRandom[Pulse](-1,-1),FRandom[Pulse](-1,1)),0.3,-0.1,2,SWING_Spring,0,3); A_AlertMonsters(); A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); A_Overlay(-2,"MuzzleFlash"); @@ -626,7 +628,7 @@ Class PulseGun : UTWeapon A_OverlayRenderstyle(-2,STYLE_Add); Vector3 x, y, z; double a; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = Vec2OffsetZ(0,0,player.viewz)+10.0*x+3.0*y-1.8*z; origin += y*cos(invoker.sangle)*2.0+z*sin(invoker.sangle)*2.0; invoker.sangle += 100; @@ -658,7 +660,7 @@ Class PulseGun : UTWeapon { A_PlaySound("pulse/bolt",CHAN_WEAPON,1.0,true); Vector3 x, y, z, origin; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); origin = Vec2OffsetZ(0,0,player.viewz)+10.0*x+4.1*y-2.7*z; invoker.beam = Spawn("StarterBolt",origin); invoker.beam.angle = angle; @@ -713,7 +715,7 @@ Class PulseGun : UTWeapon PGNI A 1 { A_CheckReload(); - if ( CVar.GetCVar('flak_pulsereload').GetBool() ) + if ( flak_pulsereload ) { if ( (invoker.clipcount <= 0) && (invoker.Ammo1.Amount > 0) ) return A_Jump(255,"Reload"); A_WeaponReady(WRF_ALLOWRELOAD); diff --git a/zscript/ripper.zsc b/zscript/ripper.zsc index 19cc4ec..03aec45 100644 --- a/zscript/ripper.zsc +++ b/zscript/ripper.zsc @@ -4,11 +4,11 @@ Class RipperAmmo : Ammo { Tag "Razor Blades"; Inventory.PickupMessage "You picked up Razor Blades."; - Inventory.Amount 25; - Inventory.MaxAmount 75; - Ammo.BackpackAmount 50; - Ammo.BackpackMaxAmount 150; - Ammo.DropAmount 10; + Inventory.Amount 10; + Inventory.MaxAmount 40; + Ammo.BackpackAmount 20; + Ammo.BackpackMaxAmount 80; + Ammo.DropAmount 5; } States { @@ -38,9 +38,8 @@ Class Razor2Trail : Actor return; } SetOrigin(target.pos,true); - A_SetAngle(target.angle,SPF_INTERPOLATE); - A_SetPitch(target.pitch,SPF_INTERPOLATE); - A_SetRoll(target.roll,SPF_INTERPOLATE); + angle = target.angle; + pitch = target.pitch; alpha = target.vel.length()/target.speed; } States @@ -58,7 +57,7 @@ Class Razor2 : Actor Radius 2; Height 2; Speed 27; - DamageFunction (Random[Ripper](25,35)*((DamageType=='Decapitated')?3.5:1.0)); + DamageFunction (Random[Ripper](20,25)*((DamageType=='Decapitated')?3:1.0)); DamageType 'Shredded'; Obituary "%k ripped a chunk of meat out of %o with the Ripper."; BounceType "Doom"; @@ -259,7 +258,7 @@ Class Ripper2 : UTWeapon Weapon.AmmoUse 1; Weapon.AmmoType2 "RipperAmmo"; Weapon.AmmoUse2 1; - Weapon.AmmoGive 15; + Weapon.AmmoGive 10; UTWeapon.DropAmmo 5; } action void A_RazorFire( bool alt = false ) @@ -273,10 +272,18 @@ Class Ripper2 : UTWeapon invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(8,0,255,255),1); A_AlertMonsters(); - if ( alt ) A_QuakeEx(3,3,3,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); - else A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08); + if ( alt ) + { + A_QuakeEx(3,3,3,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); + UTMainHandler.DoSwing(self,(FRandom[Ripper](-0.3,-0.6),FRandom[Ripper](0.2,0.6)),3,-0.5,3,SWING_Spring,5,4); + } + else + { + A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08); + UTMainHandler.DoSwing(self,(FRandom[Ripper](-0.3,-0.6),FRandom[Ripper](0.2,0.6)),1,-0.3,2,SWING_Spring,2,2); + } Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+6.0*y-4.0*z; Actor p; if ( alt ) p = Spawn("Razor2Alt",origin); @@ -308,11 +315,11 @@ Class Ripper2 : UTWeapon Loop; Fire: RZRF A 0 A_RazorFire(); - RZRF ABDEGHIJKLMNO 1; + RZRF ABCDEFGHIJKLMNO 1; Goto Idle; AltFire: RZRF A 0 A_RazorFire(true); - RZRF ABDEG 3; + RZRF ABCDEFG 3; RZRF HIJKLMNO 1; Goto Idle; Deselect: diff --git a/zscript/shockrifle.zsc b/zscript/shockrifle.zsc index 56cd688..1247e97 100644 --- a/zscript/shockrifle.zsc +++ b/zscript/shockrifle.zsc @@ -334,7 +334,11 @@ Class ShockBeam : Actor ExplodeMissile(null,t.Results.HitActor); if ( t.Results.HitActor is 'ShockHitbox' ) { - if ( target ) target.TakeInventory('ShockAmmo',2); + if ( target ) + { + target.TakeInventory('ShockAmmo',2); + UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),5,-1,3,SWING_Spring,3,6); + } let b = t.Results.HitActor.target; UTMainHandler.DoBlast(b,250,70000); b.ExplodeMissile(null,self); @@ -379,7 +383,7 @@ Class ShockBeam : Actor t.Results.HitLine.RemoteActivate(target,t.Results.Side,SPAC_Impact,pos); // calculate normal HitNormal = (-t.Results.HitLine.delta.y,t.Results.HitLine.delta.x,0).unit(); - if ( t.Results.Side == 1 ) HitNormal *= -1; + if ( t.Results.Side == 0 ) HitNormal *= -1; } else if ( t.Results.HitType == TRACE_HitFloor ) HitNormal = t.Results.HitSector.floorplane.Normal; @@ -557,7 +561,11 @@ Class SuperShockBeam : Actor ExplodeMissile(null,t.Results.HitActor); if ( t.Results.HitActor is 'ShockHitbox' ) { - if ( target ) target.TakeInventory('EnhancedShockAmmo',1); + if ( target ) + { + target.TakeInventory('EnhancedShockAmmo',1); + UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),10,-2,3,SWING_Spring,3,6); + } let b = t.Results.HitActor.target; UTMainHandler.DoBlast(b,400,70000); b.ExplodeMissile(null,self); @@ -582,8 +590,12 @@ Class SuperShockBeam : Actor } else { - t.Results.HitActor.DamageMobj(self,target,Random[ASMD](3500,5000),'joltedX',DMG_USEANGLE|DMG_THRUSTLESS,atan2(t.Results.HitVector.y,t.Results.HitVector.x)); - UTMainHandler.DoKnockback(t.Results.HitActor,t.Results.HitVector,60000); + // the actor may "cease to exist" if it dies after the call to ExplodeMissile, so guard against that + if ( t.Results.HitActor ) + { + t.Results.HitActor.DamageMobj(self,target,Random[ASMD](3500,5000),'joltedX',DMG_USEANGLE|DMG_THRUSTLESS,atan2(t.Results.HitVector.y,t.Results.HitVector.x)); + UTMainHandler.DoKnockback(t.Results.HitActor,t.Results.HitVector,60000); + } let r = Spawn("SuperShockBeamRing",pos); r.angle = atan2(t.Results.HitVector.y,t.Results.HitVector.x); r.pitch = asin(-t.Results.HitVector.z); @@ -617,7 +629,7 @@ Class SuperShockBeam : Actor action void A_BeamExplode() { Spawn("SuperShockBeamLight",pos); - if ( !CVar.GetCVar('flak_classicsshock').GetBool() ) + if ( !flak_classicsshock ) { UTMainHandler.DoBlast(self,50,60000); A_Explode(Random[ASMD](500,800),50); @@ -966,7 +978,7 @@ Class ViewShockSpark : ShockSpark return; } Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(target.pitch,target.angle,target.roll); + [x, y, z] = dt_Matrix4.GetAxes(target.pitch,target.angle,target.roll); Vector3 origin = x*ofs.x+y*ofs.y+z*ofs.z+(0,0,target.player.viewz); SetOrigin(target.Vec2OffsetZ(origin.x,origin.y,origin.z),true); bInvisible = (players[consoleplayer].camera != target); @@ -996,10 +1008,11 @@ Class ShockRifle : UTWeapon A_PlaySound("shock/fire",CHAN_WEAPON); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,128,0,255),1); + UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),2,-0.3,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+2.0*y-1.5*z; Actor p = Spawn("ShockBeam",origin); p.angle = angle; @@ -1033,10 +1046,11 @@ Class ShockRifle : UTWeapon A_PlaySound("shock/altfire",CHAN_WEAPON); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,128,0,255),1); + UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),3,-0.4,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+2.0*y-1.5*z; Actor p = Spawn("ShockBall",origin); p.angle = angle; @@ -1177,10 +1191,11 @@ Class EnhancedShockRifle : UTWeapon A_PlaySound("shock/fire",CHAN_WEAPON); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,255,128,0),1); + UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),4,-0.6,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+2.0*y-1.5*z; Actor p = Spawn("SuperShockBeam",origin); p.angle = angle; @@ -1214,10 +1229,11 @@ Class EnhancedShockRifle : UTWeapon A_PlaySound("shock/altfire",CHAN_WEAPON); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,255,128,0),1); + UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),6,-0.8,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+2.0*y-1.5*z; Actor p = Spawn("SuperShockBall",origin); p.angle = angle; @@ -1285,7 +1301,7 @@ Class EnhancedShockRifle : UTWeapon ASMF BCDEFGHIJJ 2; Goto Idle; AltFire: - ASMI A 0 A_JumpIf(CVar.GetCVar('flak_classicsshock').GetBool(),"Fire"); + ASMI A 0 A_JumpIf(flak_classicsshock,"Fire"); ASMI A 0 A_JumpIfNoAmmo("DryFire"); ASMA A 1 A_SShockAlt(); ASMA BCDFGHIJ 2; diff --git a/zscript/sniperrifle.zsc b/zscript/sniperrifle.zsc index 2d8a1c2..34c2185 100644 --- a/zscript/sniperrifle.zsc +++ b/zscript/sniperrifle.zsc @@ -77,10 +77,17 @@ Class SniperRifle : UTWeapon UTMainHandler.DoFlash(self,Color(32,0,0,255),1); A_PlaySound("sniper/fire",CHAN_WEAPON); A_AlertMonsters(); - if ( zoomed ) A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.09); + if ( zoomed ) + { + A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.09); + for ( int i=0; i<3; i++ ) + UTMainHandler.DoSwing(self,(FRandom[Sniper](-0.3,0.05),FRandom[Sniper](-0.3,0.1)),2,-0.5,Random[Sniper](3,4),SWING_Spring,Random[Sniper](3,4),Random[Sniper](4,5)); + } else { A_QuakeEx(3,3,3,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12); + for ( int i=0; i<3; i++ ) + UTMainHandler.DoSwing(self,(FRandom[Sniper](-0.3,0.05),FRandom[Sniper](-0.3,0.1)),4,-1,Random[Sniper](3,4),SWING_Spring,Random[Sniper](3,4),Random[Sniper](4,5)); A_Overlay(-2,"MuzzleFlash"); A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); A_OverlayRenderstyle(-2,STYLE_Add); @@ -88,7 +95,7 @@ Class SniperRifle : UTWeapon let l = Spawn("SniperLight",pos); l.target = self; Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = Vec2OffsetZ(0,0,player.viewz)+10.0*x; if ( !zoomed ) origin = origin+y*4.0-z*2.0; FLineTraceData d; @@ -169,6 +176,7 @@ Class SniperRifle : UTWeapon Weapon.AmmoGive 8; Weapon.Kickback 250; UTWeapon.DropAmmo 2; + +NOEXTREMEDEATH; } States { diff --git a/zscript/translocator.zsc b/zscript/translocator.zsc index 5afb97e..ebde8a2 100644 --- a/zscript/translocator.zsc +++ b/zscript/translocator.zsc @@ -274,9 +274,43 @@ Class TranslocatorAfterimage : Actor } } +Class TranslocatorAmmo : Ammo +{ + Default + { + Tag "Translocator Ammo"; + Inventory.Amount 6; + Inventory.MaxAmount 6; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 6; + } +} + Class Translocator : UTWeapon { Actor module; + double ammocharge; + + override void Tick() + { + Super.Tick(); + if ( !Owner ) return; + if ( flak_transloc2k4 ) + { + AmmoType1 = "TranslocatorAmmo"; + if ( !Ammo1 ) Ammo1 = NonIdioticAddAmmo(Owner,AmmoType1,6); + if ( Ammo1.Amount >= Ammo1.MaxAmount ) return; + if ( ammocharge >= 1. ) + { + ammocharge = 0.; + Ammo1.Amount = min(Ammo1.Amount+1,Ammo1.MaxAmount); + } + else ammocharge = min(1.,ammocharge+0.4/TICRATE); + return; + } + if ( Ammo1 ) Ammo1.Destroy(); + if ( AmmoType1 ) AmmoType1 = null; + } action void A_ThrowModule() { @@ -284,9 +318,10 @@ Class Translocator : UTWeapon if ( !weap ) return; A_PlaySound("transloc/throw",CHAN_WEAPON); invoker.FireEffect(); + UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,0.4),FRandom[Translocator](-0.2,0.7)),2,-0.3,3,SWING_Spring,2,3); A_AlertMonsters(); Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); + [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x-8.0*y-12.0*z; let p = Spawn("TranslocatorModule",origin); p.target = self; @@ -305,6 +340,7 @@ Class Translocator : UTWeapon if ( !weap ) return; A_PlaySound("transloc/return",CHAN_WEAPON); invoker.FireEffect(); + UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,-0.4),FRandom[Translocator](-0.2,0.7)),3,-1,2,SWING_Spring,2,2); A_AlertMonsters(); if ( invoker.module && invoker.module.bAMBUSH ) { @@ -326,6 +362,8 @@ Class Translocator : UTWeapon A_PlaySound("transloc/return",CHAN_WEAPON); return; } + // consume ammo if any + if ( weap.Ammo1 ) weap.Ammo1.Amount = max(0,weap.Ammo1.Amount-1); // check if there's enough space Vector3 oldpos = pos, newpos = invoker.module.pos; double modulefloorz = invoker.module.floorz, moduleceilingz = invoker.module.ceilingz; @@ -372,6 +410,8 @@ Class Translocator : UTWeapon Weapon.SelectionOrder 10; +WEAPON.NO_AUTO_SWITCH; +WEAPON.CHEATNOTWEAPON; + +WEAPON.AMMO_OPTIONAL; + +WEAPON.ALT_AMMO_OPTIONAL; } States { @@ -409,10 +449,10 @@ Class Translocator : UTWeapon TLI2 A 0; Goto Idle2; Fire: - TLCF A 0 A_JumpIf(invoker.module,"Return"); + TLCF A 0 A_JumpIf(invoker.module||(invoker.Ammo1&&invoker.Ammo1.Amount<=0),"Return"); TLCF A 0 A_ThrowModule(); TLCF ABCDEFGH 1; - TLCF IJKLMNOPQRS 1 A_WeaponReady(); + TLCF IJKLMNOPQRS 1 A_WeaponReady(WRF_NOPRIMARY); Goto Idle; Return: TLCF A 0 A_ReturnModule(); diff --git a/zscript/utcommon.zsc b/zscript/utcommon.zsc index d4c2788..17fd548 100644 --- a/zscript/utcommon.zsc +++ b/zscript/utcommon.zsc @@ -3,7 +3,7 @@ Class UTPlayer : DoomPlayer bool lastground; int lastgroundtic; double lastvelz, prevvelz; - transient CVar footsteps, utmovement, doomspeed, doomaircontrol, nowalkdrop; + transient CVar footsteps; Vector2 acceleration; Vector3 acceleration3; int last_fm, last_sm; @@ -11,14 +11,29 @@ Class UTPlayer : DoomPlayer int last_tap_fm, last_tap_sm; int last_jump_held; + int dolltype; + + Property DollType : dolltype; + + enum EDollType + { + DOLL_Male, + DOLL_Female, + DOLL_Boss + }; + const groundspeed = 400.; - const accelrate = 2048.; + const swimspeed = 200.; + const baseaccelrate = 2048.; const walkfactor = 0.3; const utaircontrol = 0.35; + const swimspeed_doomish = 400.; const groundspeed_doomish = 600.; - const terminalvelocity = 2500.; const dodgez = 210.; const utjumpz = 325.; + const groundfriction = 8.; + const fluidfriction = 1.2; + const terminalvelocity = 2500.; Default { @@ -28,6 +43,12 @@ Class UTPlayer : DoomPlayer Player.DamageScreenColor "FF 00 00"; Player.ViewHeight 46; Player.GruntSpeed 20; + MaxDropoffHeight 18; + MaxStepHeight 18; + +NOFRICTION; + +NOFRICTIONBOUNCE; + +NOMENU; + UTPlayer.DollType DOLL_Male; } // Have to modify the give cheat to handle UT armor @@ -183,12 +204,12 @@ Class UTPlayer : DoomPlayer override void Tick() { Super.Tick(); - if ( !player ) return; + if ( !player || (player.mo != self) ) return; if ( !footsteps ) footsteps = CVar.GetCVar('flak_footsteps',players[consoleplayer]); if ( !footsteps.GetBool() ) return; double ang = level.time/(20*TICRATE/35.)*360.; bool forcefootstep = false; - if ( player.onground && !bNoGravity && !lastground && (waterlevel < 3) ) + if ( player.onground && !bNoGravity && !lastground && (waterlevel < 2) ) { player.jumptics = 0; if ( lastvelz < -8 ) @@ -199,16 +220,17 @@ Class UTPlayer : DoomPlayer } else forcefootstep = true; } - if ( forcefootstep || ((abs(sin(ang)) >= 1.0) && player.onground && lastground && (player.jumptics == 0) && (player.cmd.forwardmove || player.cmd.sidemove) && (waterlevel < 3)) ) + if ( forcefootstep || ((abs(sin(ang)) >= 1.0) && player.onground && lastground && (player.jumptics == 0) && (player.cmd.forwardmove || player.cmd.sidemove) && (waterlevel < 2)) ) { double vol = abs(vel.xy.length())*0.03; if ( forcefootstep ) vol = clamp(-lastvelz*0.05,0.01,1.0); if ( (waterlevel > 0) || GetFloorTerrain().IsLiquid && !bOnMobj ) A_PlaySound("ut/playerfootstepwet",CHAN_5,vol); - else A_PlaySound("ut/playerfootstep",CHAN_5,vol); + else PlayFootstep(vol); } lastground = player.onground; lastvelz = prevvelz; prevvelz = vel.z; + // TODO exit/entry sounds for water } double FrictionToUnreal() @@ -220,16 +242,12 @@ Class UTPlayer : DoomPlayer override void MovePlayer() { - if ( !utmovement ) utmovement = CVar.GetCVar('flak_utmovement'); - if ( !doomspeed ) doomspeed = CVar.GetCVar('flak_doomspeed'); - if ( !doomaircontrol ) doomaircontrol = CVar.GetCVar('flak_doomaircontrol'); - if ( !nowalkdrop ) nowalkdrop = CVar.GetCVar('flak_nowalkdrop'); - bNODROPOFF = false; - if ( !utmovement.GetBool() ) + if ( !flak_utmovement || !player || (player.mo != self) ) { Super.MovePlayer(); return; } + bNODROPOFF = false; UserCmd cmd = player.cmd; if ( player.turnticks ) { @@ -239,16 +257,21 @@ Class UTPlayer : DoomPlayer else Angle += cmd.yaw*(360./65536.); player.onground = (pos.z <= floorz) || bOnMobj || bMBFBouncer || (player.cheats & CF_NOCLIP2); if ( player.onground ) lastgroundtic = gametic; - if ( (abs(lastgroundtic-gametic) < 4) && (player.jumptics == 0) ) player.onground = true; + if ( !player.onground && !bNoGravity && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) ) + { + SetOrigin(Vec2OffsetZ(0,0,floorz),true); + player.onground = true; + } double friction = FrictionToUnreal(); double fs = TweakSpeeds(1.0,0.0); - if ( !doomspeed.GetBool() ) + if ( !flak_doomspeed ) { if ( cmd.buttons&BT_SPEED ) fs *= walkfactor; } else fs *= max(abs(cmd.forwardmove/12800.),abs(cmd.sidemove/10240.)); if ( CanCrouch() && (player.crouchfactor != -1) ) fs *= player.crouchfactor; acceleration = rotatevector((cmd.forwardmove,-cmd.sidemove),angle); + double accelrate = baseaccelrate*fs; Vector2 dodge = (0,0); int fm = cmd.forwardmove; int sm = cmd.sidemove; @@ -276,11 +299,11 @@ Class UTPlayer : DoomPlayer } } last_sm = sm; - if ( !bNoGravity && player.onground ) + if ( !bNoGravity && player.onground && (waterlevel < 2) ) { - if ( !waterlevel && (dodge.length() > 0) ) + if ( dodge.length() > 0 ) { - if ( doomspeed.GetBool() ) vel += dodge.unit()*(groundspeed_doomish*1.5)/TICRATE; + if ( flak_doomspeed ) vel += dodge.unit()*(groundspeed_doomish*1.5)/TICRATE; else vel += dodge.unit()*(groundspeed*1.5)/TICRATE; vel.z += dodgez/TICRATE; bOnMobj = false; @@ -296,11 +319,12 @@ Class UTPlayer : DoomPlayer } else { - if ( nowalkdrop.GetBool() ) + if ( flak_nowalkdrop ) bNODROPOFF = ((acceleration.length() > double.epsilon) && (cmd.buttons&BT_SPEED)); // Hook in Unreal physics Vector2 dir = (0,0); if ( vel.xy.length() > double.epsilon ) dir = vel.xy.unit(); + double doomfriction = clamp(GetFriction()/ORIG_FRICTION,0.0,1.0); if ( acceleration.length() <= double.epsilon ) { Vector2 oldvel = vel.xy; @@ -315,10 +339,9 @@ Class UTPlayer : DoomPlayer } vel.xy = vel.xy + acceleration/TICRATE; double maxvel; - if ( doomspeed.GetBool() ) maxvel = (groundspeed_doomish*fs)/TICRATE; - else maxvel = (groundspeed*fs)/TICRATE; - double doomfriction = clamp(GetFriction()/ORIG_FRICTION,0.0,1.0); - maxvel *= doomfriction; + if ( flak_doomspeed ) maxvel = groundspeed_doomish/TICRATE; + else maxvel = groundspeed/TICRATE; + maxvel *= fs*doomfriction; if ( vel.xy.length() > maxvel ) vel.xy = vel.xy.unit()*maxvel; if ( !(player.cheats & CF_PREDICTING) ) { @@ -328,7 +351,7 @@ Class UTPlayer : DoomPlayer player.vel = vel.xy; } } - else if ( !bNoGravity && !waterlevel ) + else if ( !bNoGravity && (waterlevel < 2) ) { // air acceleration when falling float maxaccel = accelrate/TICRATE; @@ -343,10 +366,11 @@ Class UTPlayer : DoomPlayer Vector2 acceldir = acceleration.unit(); acceleration = acceldir * Min(acceleration.length(), accelrate/TICRATE); } - acceleration *= doomaircontrol.GetBool()?level.aircontrol:utaircontrol; + acceleration *= flak_doomaircontrol?level.aircontrol:utaircontrol; double maxvel; - if ( doomspeed.GetBool() ) maxvel = (groundspeed_doomish*fs)/TICRATE; + if ( flak_doomspeed ) maxvel = (groundspeed_doomish*fs)/TICRATE; else maxvel = (groundspeed*fs)/TICRATE; + // TODO attempt to replicate walk on ice velocity increase glitch // if new velocity is higher than ground speed, steer but don't increase it if ( (vel.xy+acceleration/TICRATE).length() > maxvel ) { @@ -356,42 +380,72 @@ Class UTPlayer : DoomPlayer else vel.xy = vel.xy+acceleration/TICRATE; if ( vel.length() > terminalvelocity/TICRATE ) vel = vel.unit()*(terminalvelocity/TICRATE); player.vel *= 0; + player.jumptics = -2; + } + else if ( bFly || (player.cheats&CF_NOCLIP2) ) + { + // fly cheat has infinite friction (player stops moving when movement keys are released) + Vector3 dir = (0,0,0); + if ( vel.length() > double.epsilon ) dir = vel.unit(); + Vector3 x, y; + [x, y] = dt_Matrix4.GetAxes(pitch,angle,0); + acceleration3 = x*player.cmd.forwardmove+y*player.cmd.sidemove; + if ( player.cmd.buttons&BT_JUMP ) acceleration3.z = 0x500; + else if ( player.cmd.buttons&BT_CROUCH ) acceleration3.z = -0x500; + if ( acceleration3.length() <= double.epsilon ) vel *= 0; + else + { + Vector3 acceldir = acceleration3.unit(); + acceleration3 = acceldir*Min(acceleration3.length(),accelrate/TICRATE); + vel = vel-(dir-acceldir)*vel.length(); + } + vel = vel+acceleration3/TICRATE; + double maxvel; + if ( flak_doomspeed ) maxvel = groundspeed_doomish/TICRATE; + else maxvel = groundspeed/TICRATE; + maxvel *= fs; + if ( vel.length() > maxvel ) vel = vel.unit()*maxvel; + player.vel *= 0; + player.jumptics = -2; + if ( !(player.cheats & CF_PREDICTING) ) PlayIdle(); } else { - // swimming uses standard physics, otherwise things break - double forwardmove, sidemove; - double bobfactor; - double friction, movefactor; - double fm, sm; - [friction, movefactor] = GetFriction(); - bobfactor = (friction double.epsilon ) dir = vel.unit(); + double doomfriction = clamp(GetFriction()/ORIG_FRICTION,0.0,1.0); + Vector3 x, y; + [x, y] = dt_Matrix4.GetAxes(pitch,angle,0); + acceleration3 = x*player.cmd.forwardmove+y*player.cmd.sidemove; + if ( player.cmd.buttons&BT_JUMP ) acceleration3.z = 0x500; + else if ( player.cmd.buttons&BT_CROUCH ) acceleration3.z = -0x500; + if ( acceleration3.length() <= double.epsilon ) { - fm *= player.crouchfactor; - sm *= player.crouchfactor; - bobfactor *= player.crouchfactor; + Vector3 oldvel = vel; + vel = vel-(2*dir)*vel.length()*friction/TICRATE; + if ( oldvel dot vel < 0.0 ) vel *= 0; } - forwardmove = fm*movefactor*(35/TICRATE); - sidemove = sm*movefactor*(35/TICRATE); - if ( forwardmove ) + else { - Bob(Angle, cmd.forwardmove*bobfactor/256.,true); - ForwardThrust(forwardmove,Angle); + Vector3 acceldir = acceleration3.unit(); + acceleration3 = acceldir*Min(acceleration3.length(),accelrate/TICRATE); + vel = vel-(dir-acceldir)*vel.length()*friction/TICRATE; } - if ( sidemove ) + vel = vel+acceleration3/TICRATE; + double maxvel; + if ( flak_doomspeed ) maxvel = swimspeed_doomish/TICRATE; + else maxvel = swimspeed/TICRATE; + maxvel *= fs*doomfriction; + if ( vel.length() > maxvel ) vel = vel.unit()*maxvel; + player.vel = vel.xy; + player.jumptics = -2; + if ( !(player.cheats & CF_PREDICTING) ) { - let a = Angle-90; - Bob(a,cmd.sidemove*bobfactor/256.,false); - Thrust(sidemove,a); + if ( acceleration3.length() <= double.epsilon ) PlayIdle(); + else PlayRunning(); } - if ( !(player.cheats&CF_PREDICTING) && ((forwardmove != 0) || (sidemove != 0)) ) - PlayRunning(); } if ( player.cheats & CF_REVERTPLEASE ) { @@ -399,11 +453,33 @@ Class UTPlayer : DoomPlayer player.camera = player.mo; } } + override void CheckCrouch( bool totallyfrozen ) + { + if ( !flak_utmovement || !player || (player.mo != self) ) + { + Super.CheckCrouch(totallyfrozen); + return; + } + if ( player.cmd.buttons&BT_JUMP ) player.cmd.buttons &= ~BT_CROUCH; + if ( CanCrouch() && (player.health > 0) && level.IsCrouchingAllowed() && player.onground ) // in UT you can't crouch unless you're on the ground + { + if ( !totallyfrozen ) + { + int crouchdir = player.crouching; + if ( !crouchdir ) crouchdir = (player.cmd.buttons&BT_CROUCH)?-1:1; + else if ( player.cmd.buttons&BT_CROUCH ) player.crouching = 0; + if ( (crouchdir == 1) && (player.crouchfactor < 1) && (pos.Z+height < ceilingz) ) + CrouchMove(1); + else if ( (crouchdir == -1) && (player.crouchfactor > 0.5 )) + CrouchMove(-1); + } + } + else player.Uncrouch(); + player.crouchoffset = -(ViewHeight)*(1-player.crouchfactor); + } override void CheckJump() { - if ( !utmovement ) utmovement = CVar.GetCVar('flak_utmovement'); - if ( !doomspeed ) doomspeed = CVar.GetCVar('flak_doomspeed'); - if ( !utmovement.GetBool() ) + if ( !flak_utmovement || !player || (player.mo != self) ) { Super.CheckJump(); return; @@ -411,12 +487,10 @@ Class UTPlayer : DoomPlayer if ( player.cmd.buttons&BT_JUMP ) { if ( player.crouchoffset ) player.crouching = 1; - else if ( waterlevel >= 2 ) Vel.z = 4*Speed; - else if ( bNoGravity ) Vel.z = 3.; - else if ( level.IsJumpingAllowed() && player.onground && (player.jumpTics == 0) && (last_jump_held < gametic-1) ) + else if ( level.IsJumpingAllowed() && player.onground && (player.jumpTics == 0) && (last_jump_held < gametic-1) && !bNoGravity && (waterlevel < 2) && !(player.cheats&(CF_FLY|CF_NOCLIP2)) ) { double jumpvelz; - if ( doomspeed.GetBool() ) jumpvelz = jumpz; + if ( flak_doomspeed ) jumpvelz = jumpz; else jumpvelz = utjumpz/TICRATE; double jumpfac = 0; for ( let p = Inv; p != null; p = p.Inv ) @@ -438,22 +512,75 @@ Class UTPlayer : DoomPlayer if ( !player.onground || player.jumptics ) last_jump_held = gametic; } + + virtual void PlayFootstep( double vol ) + { + A_PlaySound("ut/playerfootstep",CHAN_5,vol); + } } -// Random Spawner that passes through dropped status to items -Class RandomSpawner2 : RandomSpawner +// these only exist for sound +// female classes have identical sounds, so they use the same soundclass here +Class UTPlayerTMale1 : UTPlayer { - override void PostSpawn( Actor spawned ) + Default { - if ( !bDROPPED ) return; - if ( spawned is 'Inventory' ) Inventory(spawned).bTOSSED = bDROPPED; - if ( spawned is 'UTWeapon' ) - { - spawned.SetState(spawned.ResolveState("Spawn")+1); - Inventory(spawned).bALWAYSPICKUP = true; - if ( UTWeapon(spawned).DropAmmo > 0 ) - Weapon(spawned).AmmoGive1 = min(UTWeapon(spawned).DropAmmo,Weapon(spawned).AmmoGive1); - } + Player.SoundClass "tmale1"; + Player.DisplayName "M Commando"; + Player.Portrait "Blake"; + -NOMENU; + } +} +Class UTPlayerTMale2 : UTPlayer +{ + Default + { + Player.SoundClass "tmale2"; + Player.DisplayName "M Soldier"; + Player.Portrait "Brock"; + -NOMENU; + } +} +Class UTPlayerTFemale1 : UTPlayer +{ + Default + { + Player.SoundClass "tfemale"; + Player.DisplayName "F Commando"; + Player.Portrait "Ivana"; + UTPlayer.DollType DOLL_Female; + -NOMENU; + } +} +Class UTPlayerTFemale2 : UTPlayer +{ + Default + { + Player.SoundClass "tfemale"; + Player.DisplayName "F Soldier"; + Player.Portrait "Lauren"; + UTPlayer.DollType DOLL_Female; + -NOMENU; + } +} +Class UTPlayerTBoss : UTPlayer +{ + transient CVar bossfootsteps; + Default + { + Player.SoundClass "tboss"; + Player.DisplayName "Boss"; + Player.Portrait "Xan"; + UTPlayer.DollType DOLL_Boss; + // should have NOBLOOD, but Xan did bleed in vanilla UT so... + // (this is what gave birth to the theory that Xan was actually Jerl Liandri himself) + -NOMENU; + } + override void PlayFootstep( double vol ) + { + if ( !bossfootsteps ) bossfootsteps = CVar.GetCVar('flak_bossfootsteps',players[consoleplayer]); + if ( bossfootsteps.GetBool() ) A_PlaySound("ut/bossfootstep",CHAN_5,vol); + else Super.PlayFootstep(vol); } } @@ -491,6 +618,12 @@ Class UTWeapon : Weapon override void Tick() { Super.Tick(); + // don't slide on floor when dropped + if ( CurState == ResolveState("Spawn")+1 ) + { + if ( pos.z <= floorz ) + vel.xy *= 0; + } if ( !Owner || !Owner.player || (Owner.player.ReadyWeapon != self) ) return; Owner.player.WeaponState |= WF_WEAPONBOBBING; // UT weapons always bob } @@ -580,6 +713,19 @@ Class UTWeapon : Weapon return ammoitem; } + override void OnDrop( Actor dropper ) + { + Vector2 hofs = RotateVector((dropper.radius,0),dropper.angle); + SetOrigin(dropper.Vec3Offset(hofs.x,hofs.y,dropper.height*0.5),false); + Vector3 x, y, z; + [x, y, z] = dt_Matrix4.GetAxes(dropper.pitch,dropper.angle,dropper.roll); + vel = x*12.0; + vel.z += 4.0; + angle = dropper.angle; + pitch = 0; + roll = 0; + } + Default { Weapon.BobStyle "Smooth"; @@ -743,7 +889,7 @@ Class UTViewSpark : UTSpark return; } Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(target.pitch,target.angle,target.roll); + [x, y, z] = dt_Matrix4.GetAxes(target.pitch,target.angle,target.roll); Vector3 origin = x*ofs.x+y*ofs.y+z*ofs.z+(0,0,target.player.viewz); SetOrigin(target.Vec2OffsetZ(origin.x,origin.y,origin.z),true); bInvisible = (players[consoleplayer].camera != target); @@ -770,6 +916,7 @@ Class UTChip : Actor +THRUACTORS; +NOTELEPORT; +DONTSPLASH; + +INTERPOLATEANGLES; BounceType "Doom"; BounceFactor 0.3; Gravity 0.7; @@ -801,9 +948,9 @@ Class UTChip : Actor Spawn: CHIP # 1 { - A_SetAngle(angle+anglevel,SPF_INTERPOLATE); - A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE); - A_SetRoll(roll+rollvel,SPF_INTERPOLATE); + angle += anglevel; + pitch += pitchvel; + roll += rollvel; } Loop; Bounce: @@ -987,7 +1134,7 @@ Class UTViewSmoke : UTSmoke return; } Vector3 x, y, z; - [x, y, z] = Matrix4.GetAxes(target.pitch,target.angle,target.roll); + [x, y, z] = dt_Matrix4.GetAxes(target.pitch,target.angle,target.roll); Vector3 origin = x*ofs.x+y*ofs.y+z*ofs.z+(0,0,target.player.viewz); SetOrigin(target.Vec2OffsetZ(origin.x,origin.y,origin.z),true); bInvisible = (players[consoleplayer].camera != target); @@ -1154,6 +1301,68 @@ Class ShredCorpseHitbox : Actor } } +Enum ESwingMode +{ + SWING_Straight, // constant increment + SWING_Spring, // bounces back after a delay +}; + +Class Swinger : Thinker +{ + Actor target; + Vector2 dir; + double inc, rmul; + int steps, mode, delay; + double str, tstr; + int cnt, cstate; + + Enum ESwingerState + { + STATE_Initial, + STATE_Wait, + STATE_Return, + }; + + override void Tick() + { + if ( !target ) cstate = -1; + switch ( cstate ) + { + case STATE_Initial: + target.A_SetAngle(target.angle+dir.x*str*flak_swingerstrength,SPF_INTERPOLATE); + target.A_SetPitch(target.pitch+dir.y*str*flak_swingerstrength,SPF_INTERPOLATE); + str += inc; + if ( ++cnt >= steps ) + { + cnt = 0; + str = tstr/steps; + cstate = (mode==SWING_Straight)?(-1):(delay>0)?STATE_Wait:STATE_Return; + } + else tstr += str; + break; + case STATE_Wait: + if ( ++cnt >= delay ) + { + cnt = 0; + cstate = STATE_Return; + } + break; + case STATE_Return: + target.A_SetAngle(target.angle-dir.x*(str/rmul)*flak_swingerstrength,SPF_INTERPOLATE); + target.A_SetPitch(target.pitch-dir.y*(str/rmul)*flak_swingerstrength,SPF_INTERPOLATE); + if ( ++cnt >= steps*rmul ) + { + cnt = 0; + cstate = -1; + } + break; + default: + Destroy(); + return; + } + } +} + Class GenericFlash : HUDMessageBase { Color col; @@ -1193,7 +1402,6 @@ Class UTMainHandler : StaticEventHandler { ui TextureID tex; Array flashes; - transient CVar nobosstelefrag; override void CheckReplacement( ReplaceEvent e ) { @@ -1206,12 +1414,13 @@ Class UTMainHandler : StaticEventHandler else if ( e.Replacee == 'Pistol' ) e.Replacement = 'Enforcer'; else if ( (e.Replacee == 'Shotgun') || (e.Replacee == 'SuperShotgun') ) { - if ( Random[Replacements](0,1) ) e.Replacement = 'BioRifle'; + if ( !Random[Replacements](0,3) ) e.Replacement = 'Enforcer'; + else if ( Random[Replacements](0,1) ) e.Replacement = 'BioRifle'; else e.Replacement = 'ShockRifle'; } else if ( e.Replacee == 'Chaingun' ) { - if ( Random[Replacements](0,1) ) e.Replacement = 'PulseGun'; + if ( Random[Replacements](0,2) ) e.Replacement = 'PulseGun'; else e.Replacement = 'Ripper2'; } else if ( e.Replacee == 'RocketLauncher' ) @@ -1228,12 +1437,14 @@ Class UTMainHandler : StaticEventHandler else if ( e.Replacee == 'Clip' ) e.Replacement = 'EClip'; else if ( e.Replacee == 'ClipBox' ) { - if ( Random[Replacements](0,1) ) e.Replacement = 'PulseAmmo'; + if ( !Random[Replacements](0,2) ) e.Replacement = 'EClip'; + else if ( Random[Replacements](0,2) ) e.Replacement = 'PulseAmmo'; else e.Replacement = 'RipperAmmo'; } else if ( e.Replacee == 'Shell' ) { - if ( Random[Replacements](0,1) ) e.Replacement = 'BioAmmo2'; + if ( !Random[Replacements](0,2) ) e.Replacement = 'EClip'; + else if ( Random[Replacements](0,1) ) e.Replacement = 'BioAmmo2'; else e.Replacement = 'ShockAmmo2'; } else if ( e.Replacee == 'ShellBox' ) @@ -1243,8 +1454,16 @@ Class UTMainHandler : StaticEventHandler } else if ( e.Replacee == 'RocketAmmo' ) { - if ( Random[Replacements](0,1) ) e.Replacement = 'FlakAmmo2'; - else e.Replacement = 'UTRocketAmmo2'; + if ( Random[Replacements](0,1) ) + { + if ( !Random[Replacements](0,3) ) e.Replacement = 'FlakAmmo'; + else e.Replacement = 'FlakAmmo2'; + } + else + { + if ( !Random[Replacements](0,3) ) e.Replacement = 'UTRocketAmmo'; + else e.Replacement = 'UTRocketAmmo2'; + } } else if ( e.Replacee == 'RocketBox' ) { @@ -1254,11 +1473,12 @@ Class UTMainHandler : StaticEventHandler else if ( e.Replacee == 'Cell' ) { if ( Random[Replacements](0,1) ) e.Replacement = 'EClip'; + else if ( !Random[Replacements](0,3) ) e.Replacement = 'RifleAmmo'; else e.Replacement = 'RifleAmmo2'; } else if ( e.Replacee == 'CellPack' ) { - if ( !Random[Replacements](0,5) ) e.Replacement = 'WarheadAmmo'; + if ( !Random[Replacements](0,6) ) e.Replacement = 'WarheadAmmo'; else if ( Random[Replacements](0,1) ) e.Replacement = 'MiniAmmo'; else e.Replacement = 'RifleAmmo'; } @@ -1285,6 +1505,7 @@ Class UTMainHandler : StaticEventHandler else if ( e.Replacee == 'YellowSkull' ) e.Replacement = 'UTGoldSkull'; else if ( e.Replacee == 'TeleportFog' ) e.Replacement = 'UTTeleportFog'; else if ( e.Replacee == 'ItemFog' ) e.Replacement = 'UTItemFog'; + else if ( flak_blood && (e.Replacee == 'Blood') ) e.Replacement = 'UTBlood'; } private Actor AddLight( Vector3 pos, Color col, int radius ) @@ -1411,8 +1632,7 @@ Class UTMainHandler : StaticEventHandler override void WorldThingSpawned( WorldEvent e ) { - if ( !nobosstelefrag ) nobosstelefrag = CVar.GetCVar('flak_nobosstelefrag'); - if ( nobosstelefrag.GetBool() && e.Thing.bBOSS ) e.Thing.bNOTELEFRAG = true; + if ( flak_nobosstelefrag && e.Thing.bBOSS ) e.Thing.bNOTELEFRAG = true; } ui void StartMenu() @@ -1437,12 +1657,12 @@ Class UTMainHandler : StaticEventHandler override void PlayerEntered( PlayerEvent e ) { - if ( CVar.GetCVar('flak_translocator').GetBool() ) + if ( flak_translocator ) players[e.playernumber].mo.GiveInventory("Translocator",1); } override void PlayerRespawned( PlayerEvent e ) { - if ( CVar.GetCVar('flak_translocator').GetBool() ) + if ( flak_translocator ) players[e.playernumber].mo.GiveInventory("Translocator",1); } @@ -1450,7 +1670,7 @@ Class UTMainHandler : StaticEventHandler { if ( e.Name ~== "refreshtrans" ) { - if ( CVar.GetCVar('flak_translocator').GetBool() ) + if ( flak_translocator ) { for ( int i=0; i gibcls[] = {"UTGenericGib1","UTGenericGib2","UTGenericGib3","UTGenericGib4"}; + Actor a; + double ang, pt; + Vector3 dir; + bool dummy; + for ( int i=0; i 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(); + A_PlaySound("misc/gibp"); + double ang, pt; + for ( int i=0; i<6; i++ ) + { + let d = Spawn("UTBloodDrop",pos); + d.translation = bloodtranslation; + if ( bloodcolor ) d.SetShade(bloodcolor); + else d.SetShade(gameinfo.defaultbloodcolor); + ang = FRandom[Blood](0,360); + pt = FRandom[Blood](-90,90); + Vector3 dir = -vel*0.4; + dir += (cos(ang)*cos(pt),sin(ang)*cos(pt),-sin(pt))*1.3; + d.vel = dir*FRandom[Blood](0.8,1.2); + d.scale *= 0.75*FRandom[Blood](0.6,1.4); + } + 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); + } + States + { + Spawn: + UGIB A 1 + { + roll += rollvel; + angle += anglevel; + pitch += pitchvel; + } + Wait; + Bounce: + UGIB A 0 A_HandleBounce(); + Goto Spawn; + Death: + UGIB A 1 A_SetTics(Random[Blod](12,18)*15); + UGIB A 1 A_FadeOut(0.05); + Wait; + } +} +Class UTGenericGib1 : UTGib {} +Class UTGenericGib2 : UTGib {} +Class UTGenericGib3 : UTGib {} +Class UTGenericGib4 : UTGib {} +Class UTThigh : UTGib {} +Class UTFemaleArm : UTGib {} +Class UTFemaleFoot : UTGib {} +Class UTFemaleTorso : UTGib {} +Class UTMaleArm : UTGib {} +Class UTMaleFoot : UTGib {} +Class UTMaleTorso : UTGib {} +Class UTHeart : UTGib +{ + States + { + Spawn: + UGIB ABCDEF 2; + Loop; + Bounce: + UGIB A 0; + Goto Spawn; + Death: + UGIB ABCDEFABCDEFABCDEF 2; + UGIB ABCDEFABCDEF 4; + UGIB ABCDEF 8; + UGIB A -1; + Stop; + } +} +Class UTLiver : UTGib {} +Class UTStomach : UTGib {} +Class UTHeadFemale : UTGib {} +Class UTHeadMale : UTGib {} diff --git a/zscript/uthud.zsc b/zscript/uthud.zsc index db2b613..e82eeb3 100644 --- a/zscript/uthud.zsc +++ b/zscript/uthud.zsc @@ -23,7 +23,7 @@ Class ViewTracer : LineTracer Class UTHud : BaseStatusBar { - TextureID AmmoBar, Boxes[4], Keys[5], BigNum[12], Flash, Slots[10], Icons[14], Uses[14], Man[5], Woman[5], WeaponBox; + TextureID AmmoBar, Boxes[4], Keys[5], BigNum[12], Flash, Slots[10], Icons[14], Uses[14], Man[5], Woman[5], Boss[5], WeaponBox, IconTloc2, UseTloc2; Class IconClasses[14]; double HScale; Color tintcolor, bgcolor; @@ -142,12 +142,19 @@ Class UTHud : BaseStatusBar Woman[2] = TexMan.CheckForTexture("WomanPad",TexMan.Type_Any); Woman[3] = TexMan.CheckForTexture("WomanBot",TexMan.Type_Any); Woman[4] = TexMan.CheckForTexture("WomanBlt",TexMan.Type_Any); + Boss[0] = TexMan.CheckForTexture("Boss",TexMan.Type_Any); + Boss[1] = TexMan.CheckForTexture("BossArm",TexMan.Type_Any); + Boss[2] = TexMan.CheckForTexture("BossPad",TexMan.Type_Any); + Boss[3] = TexMan.CheckForTexture("BossBot",TexMan.Type_Any); + Boss[4] = TexMan.CheckForTexture("BossBlt",TexMan.Type_Any); WeaponBox = TexMan.CheckForTexture("WpSel",TexMan.Type_Any); } override void Draw( int state, double TicFrac ) { Super.Draw(state,TicFrac); + if ( IconTloc2.IsNull() ) IconTloc2 = TexMan.CheckForTexture("IconTrn2",TexMan.Type_Any); + if ( UseTLoc2.IsNull() ) UseTloc2 = TexMan.CheckForTexture("UseTrn2",TexMan.Type_Any); HScale = Screen.GetWidth()/1280.; switch ( CVar.GetCVar('flak_colorprefs',CPlayer).GetInt() ) { @@ -223,8 +230,18 @@ Class UTHud : BaseStatusBar { Color halftint = Color(tintcolor.a,tintcolor.r/2,tintcolor.g/2,tintcolor.b/2); if ( !(w is IconClasses[i]) ) continue; - if ( use ) UTDrawTintedTex(Uses[i],sx,opacity+7); - else UTDrawTintedTex(Icons[i],sx,opacity,halftint); + if ( use ) + { + if ( (i == 11) && flak_transloc2k4 ) + UTDrawTintedTex(UseTloc2,sx,opacity+7); + else UTDrawTintedTex(Uses[i],sx,opacity+7); + } + else + { + if ( (i == 11) && flak_transloc2k4 ) + UTDrawTintedTex(IconTloc2,sx,opacity+7); + else UTDrawTintedTex(Icons[i],sx,opacity,halftint); + } return true; } return false; @@ -265,11 +282,31 @@ Class UTHud : BaseStatusBar CurX = showweapons?(Screen.GetWidth()-128*hudsize*HScale):(Screen.GetWidth()*0.5+128*hudsize*HScale); CurY = Screen.GetHeight()-64*hudsize*HScale; if ( showweapons && ((weaponsize*hudsize)>=1.0) ) CurY -= 64*hudsize*HScale; + double BaseX = CurX; + double BaseY = CurY; UTDrawTintedTex(Boxes[0],hudsize); CurX += 8*hudsize*HScale; CurY += 14*hudsize*HScale; DrawColor = WhiteColor; - if ( ammotype1 ) UTDrawBigNum(ammotype1.Amount,hudsize); + if ( ammotype1 ) + { + UTDrawBigNum(ammotype1.Amount,hudsize); + let cw = CPlayer.ReadyWeapon; + if ( flak_transloc2k4 && (cw is 'Translocator') ) + { + // draw ammo charge bar + double ch = Translocator(cw).ammocharge; + CurX = BaseX+6*hudsize*HScale; + CurY = BaseY+53*hudsize*HScale; + Vector2 ss = (0.54,0.3)*hudsize*HScale; + double dw = (Screen.GetWidth()/ss.x), dh = (Screen.GetHeight()/ss.y); + double dx = CurX/ss.x, dy = CurY/ss.y; + Vector2 bs = TexMan.GetScaledSize(AmmoBar); + double ddw = bs.x*ch; + double alpha = clamp((opacity+7)/15.,0.0,1.0); + Screen.DrawTexture(AmmoBar,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_WindowRightF,ddw,DTA_Alpha,alpha); + } + } if ( ammotype2 && (ammotype2 != ammotype1) ) { CurX = showweapons?(Screen.GetWidth()-128*hudsize*HScale):((Screen.GetWidth()+256*hudsize*HScale)*0.5); @@ -298,7 +335,22 @@ Class UTHud : BaseStatusBar d = DamageAmplifier(CPlayer.mo.FindInventory("DamageAmplifier")); j = UTJumpBoots(CPlayer.mo.FindInventory("UTJumpBoots")); if ( d && !d.isBlinking() ) dollcolor = d.BlendColor; - if ( CPlayer.GetGender() == 1 ) + int dolltype = 0; + if ( CPlayer.mo is 'UTPlayer' ) dolltype = UTPlayer(CPlayer.mo).DollType; + else + { + // female doll for female, male doll for male/neutral, boss doll for object + dolltype = (CPlayer.GetGender()==3)?UTPlayer.DOLL_Boss:(CPlayer.GetGender()==1)?UTPlayer.DOLL_Female:UTPlayer.DOLL_Male; + } + if ( dolltype == UTPlayer.DOLL_Boss ) + { + UTDrawTintedTex(Boss[0],hudsize*statussize,min(opacity,15),dollcolor); + if ( a ) UTDrawTintedTex(Boss[1],hudsize*statussize,int(min(opacity,15)*(a.Amount/double(a.MaxAmount))),dollcolor); + if ( t ) UTDrawTintedTex(Boss[2],hudsize*statussize,int(min(opacity,15)*(t.Amount/double(t.MaxAmount))),dollcolor); + if ( j ) UTDrawTintedTex(Boss[3],hudsize*statussize,int(min(opacity,15)*(j.Amount/double(j.MaxAmount))),dollcolor); + if ( s ) UTDrawTintedTex(Boss[4],hudsize*statussize,int(min(opacity,15)*(s.Amount/double(s.MaxAmount))),GoldColor); + } + else if ( dolltype == UTPlayer.DOLL_Female ) { UTDrawTintedTex(Woman[0],hudsize*statussize,min(opacity,15),dollcolor); if ( a ) UTDrawTintedTex(Woman[1],hudsize*statussize,int(min(opacity,15)*(a.Amount/double(a.MaxAmount))),dollcolor); @@ -352,7 +404,7 @@ Class UTHud : BaseStatusBar if ( CPlayer.mo.Health < CPlayer.mo.SpawnHealth()/2 ) { Color blinkcolor; - double blinky = ((gametic+fractic)/Thinker.TICRATE)*1.5; + double blinky = ((level.time+fractic)/Thinker.TICRATE)*1.5; blinky = blinky-floor(blinky); blinkcolor = LerpColor(tintcolor,WhiteColor,blinky); UTDrawTintedTex(Boxes[2],hudsize,-1,blinkcolor); @@ -378,8 +430,6 @@ Class UTHud : BaseStatusBar double WeaponOffset = 128*WeapScale; let cw = CPlayer.ReadyWeapon; int cwslot = -1; - let pw = CPlayer.PendingWeapon; - int pwslot = -1; if ( cw && (cw.SlotNumber != -1) ) { cwslot = cw.SlotNumber?(cw.SlotNumber-1):9; @@ -389,7 +439,9 @@ Class UTHud : BaseStatusBar CurX = BaseX+cwslot*WeaponOffset; CurY = BaseY; } - if ( pw && (pw.SlotNumber != -1) && (pw != WP_NOCHANGE) ) + let pw = CPlayer.PendingWeapon; + int pwslot = -1; + if ( pw && (pw != WP_NOCHANGE) && (pw.SlotNumber != -1) ) { pwslot = pw.SlotNumber?(pw.SlotNumber-1):9; CurX = BaseX+pwslot*WeaponOffset-64*WeapScale; @@ -468,7 +520,7 @@ Class UTHud : BaseStatusBar CurY = Screen.GetHeight()-64*hudsize*HScale; if ( showweapons && ((weaponsize*hudsize)>=1.0) ) CurY -= 64*hudsize*HScale; DrawColor = tintcolor; - double whiten = ((gametic+fractic)-lastfrag)/Thinker.TICRATE; + double whiten = ((level.time+fractic)-lastfrag)/Thinker.TICRATE; if ( whiten < 3.0 ) { if ( tintcolor == GoldColor ) @@ -490,7 +542,7 @@ Class UTHud : BaseStatusBar } private void DrawIdentifyInfo() { - double lalpha = 2.0-((gametic+fractic)-lastseentic)/Thinker.TICRATE; + double lalpha = 2.0-((level.time+fractic)-lastseentic)/Thinker.TICRATE; if ( !lastseen || (lalpha <= 0) ) return; String cl1 = "Teal", cl2 = "Cyan"; if ( deathmatch && (lastseen.player.GetTeam() < teams.size()) ) @@ -512,6 +564,7 @@ Class UTHud : BaseStatusBar private void DrawKeys() { + if ( deathmatch ) return; // no need to draw in DM if ( gameinfo.gametype&(GAME_Hexen|GAME_Strife) ) return; // no key display for these ATM (will do eventually) bool locks[6]; for ( int i=0; i<6; i++ ) locks[i] = CPlayer.mo.CheckKeys(i+1,false,true); @@ -563,19 +616,19 @@ Class UTHud : BaseStatusBar Super.Tick(); if ( deathmatch||teamplay ) { - if ( CPlayer.fragcount != lastfragcnt ) lastfrag = gametic; + if ( CPlayer.fragcount != lastfragcnt ) lastfrag = level.time; lastfragcnt = CPlayer.fragcount; } else { - if ( CPlayer.killcount != lastfragcnt ) lastfrag = gametic; + if ( CPlayer.killcount != lastfragcnt ) lastfrag = level.time; lastfragcnt = CPlayer.killcount; } vtracer.ignore = CPlayer.mo; vtracer.trace(CPlayer.mo.Vec2OffsetZ(0,0,CPlayer.viewz),CPlayer.mo.CurSector,(cos(CPlayer.mo.angle)*cos(CPlayer.mo.pitch),sin(CPlayer.mo.angle)*cos(CPlayer.mo.pitch),-sin(CPlayer.mo.pitch)),1000,0); if ( vtracer.Results.HitType != TRACE_HitActor ) return; lastseen = vtracer.Results.HitActor; - lastseentic = gametic; + lastseentic = level.time; } private void DrawUTHUD() diff --git a/zscript/warheadlauncher.zsc b/zscript/warheadlauncher.zsc index e0cc08c..675925b 100644 --- a/zscript/warheadlauncher.zsc +++ b/zscript/warheadlauncher.zsc @@ -254,6 +254,7 @@ Class WarShell : Actor +SKYEXPLODE; +FORCERADIUSDMG; +EXPLODEONWATER; + +INTERPOLATEANGLES; } override void PostBeginPlay() { @@ -397,14 +398,14 @@ Class GuidedWarShell : WarShell guideangle = lagangle2*0.95+lagangle*0.05; guidepitch = lagpitch2*0.95+lagpitch*0.05; guideroll = lagroll2*0.95+lagroll*0.05; - Quat orient = Quat.create_euler(pitch,angle,roll); - Quat angles = Quat.create_euler(guidepitch,guideangle,guideroll); + dt_Quat orient = dt_Quat.create_euler(pitch,angle,roll); + dt_Quat angles = dt_Quat.create_euler(guidepitch,guideangle,guideroll); orient = orient.qmul(angles); double npitch, nangle, nroll; [npitch, nangle, nroll] = orient.to_euler(); - A_SetAngle(nangle,SPF_INTERPOLATE); - A_SetPitch(npitch,SPF_INTERPOLATE); - A_SetRoll(nroll,SPF_INTERPOLATE); + angle = nangle; + pitch = npitch; + roll = nroll; vel = (vel+(cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch))*0.8).unit()*11; } lagangle2 = lagangle2*0.95+lagangle*0.05; @@ -451,8 +452,8 @@ Class RedeemerHUD : HUDMessageBase double ViewAngle, ViewPitch, ViewRoll, LagRoll, LagRoll2; TextureID reticle1, reticle2, arrow, mark, readout; Font whfont; - ThinkerIterator t; - MidTracer tr; + transient ThinkerIterator t; + transient MidTracer tr; Array ta; Shape2D sshape, darrow; bool dodim; @@ -465,8 +466,6 @@ Class RedeemerHUD : HUDMessageBase mark = TexMan.CheckForTexture("Crosshr6",TexMan.Type_Any); readout = TexMan.CheckForTexture("Readout",TexMan.Type_Any); whfont = Font.GetFont('WHFONT'); - t = ThinkerIterator.Create("Actor"); - tr = new("MidTracer"); sshape = new("Shape2D"); sshape.PushCoord((0,0)); sshape.PushCoord((1,0)); @@ -478,11 +477,13 @@ Class RedeemerHUD : HUDMessageBase } override bool Tick() { - LagRoll = Quat.Normalize180(ViewRoll-LagRoll2); - LagRoll2 += Quat.Normalize180(LagRoll-LagRoll2)*0.1; + LagRoll = dt_Quat.Normalize180(ViewRoll-LagRoll2); + LagRoll2 += dt_Quat.Normalize180(LagRoll-LagRoll2)*0.1; // shootable targetting - if ( CVar.GetCVar('flak_redeemerreadout',players[consoleplayer]).GetBool() ) + if ( CVar.GetCVar('flak_redeemerreadout',players[consoleplayer]).GetBool() && !CVar.GetCVar('flak_redeemerreadout_perframe',players[consoleplayer]).GetBool() ) { + if ( !t ) t = ThinkerIterator.Create("Actor"); + if ( !tr ) tr = new("MidTracer"); t.Reinit(); ta.Clear(); Actor a; @@ -492,10 +493,10 @@ Class RedeemerHUD : HUDMessageBase Vector3 tdir = Level.Vec3Diff(ViewPos,a.Pos+(0,0,a.Height*0.5)); if ( !a.bSHOOTABLE || (a.Health <= 0) || ((Camera is 'GuidedWarShell') && (a == GuidedWarShell(Camera).b)) || (tdir.length() > 2000) || (acos(tdir.unit() dot vdir) > players[consoleplayer].FOV) || tr.Trace(ViewPos,Camera.CurSector,tdir.unit(),tdir.length(),0) ) continue; Vector3 wpos = ViewPos+tdir; - Vector3 spos = mkCoordUtil.WorldToScreen(wpos,ViewPos,ViewPitch,ViewAngle,ViewRoll,players[consoleplayer].FOV); + Vector3 spos = dt_CoordUtil.WorldToScreen(wpos,ViewPos,ViewPitch,ViewAngle,ViewRoll,players[consoleplayer].FOV); if ( spos.z > 1.0 ) continue; TargetActor te = new("TargetActor"); - te.vpos = mkCoordUtil.ToViewport(spos); + te.vpos = dt_CoordUtil.ToViewport(spos); te.diststr = String.Format("%f",tdir.length()); te.diststr.Replace(".",""); ta.Push(te); @@ -510,6 +511,28 @@ Class RedeemerHUD : HUDMessageBase // shootable targetting if ( CVar.GetCVar('flak_redeemerreadout',players[consoleplayer]).GetBool() ) { + if ( CVar.GetCVar('flak_redeemerreadout_perframe',players[consoleplayer]).GetBool() ) + { + if ( !t ) t = ThinkerIterator.Create("Actor"); + if ( !tr ) tr = new("MidTracer"); + t.Reinit(); + ta.Clear(); + Actor a; + Vector3 vdir = (cos(ViewAngle)*cos(ViewPitch),sin(ViewAngle)*cos(ViewPitch),-sin(ViewPitch)); + while ( a = Actor(t.Next()) ) + { + Vector3 tdir = Level.Vec3Diff(ViewPos,a.Pos+(0,0,a.Height*0.5)); + if ( !a.bSHOOTABLE || (a.Health <= 0) || ((Camera is 'GuidedWarShell') && (a == GuidedWarShell(Camera).b)) || (tdir.length() > 2000) || (acos(tdir.unit() dot vdir) > players[consoleplayer].FOV) || tr.Trace(ViewPos,Camera.CurSector,tdir.unit(),tdir.length(),0) ) continue; + Vector3 wpos = ViewPos+tdir; + Vector3 spos = dt_CoordUtil.WorldToScreen(wpos,ViewPos,ViewPitch,ViewAngle,ViewRoll,players[consoleplayer].FOV); + if ( spos.z > 1.0 ) continue; + TargetActor te = new("TargetActor"); + te.vpos = dt_CoordUtil.ToViewport(spos); + te.diststr = String.Format("%f",tdir.length()); + te.diststr.Replace(".",""); + ta.Push(te); + } + } for ( int i=0; i