Knee-Deep in Knee-Deep in ZDoom

From DoomWiki.org

Knee-Deep in Knee-Deep in ZDoom
Title screen
Authors esselfortium & KDiKDiZD team
Port Vanilla Doom
IWAD Doom II
Year 2022
Link Doomworld/idgames
Cacoward-2018.png This mod received one of the 2022 Cacowards on Doomworld!

Knee-Deep in Knee-Deep in ZDoom is a vanilla-compatible episode-length demake of Knee-Deep in ZDoom released by Sarah Mancuso (esselfortium) in November 2022. As with the original Knee-Deep in ZDoom, the WAD is a reinterpretation of id Software's Knee-Deep in the Dead. Originally conceptualised in 2008 by a small team of mappers, the project was stuck in development hell until early 2020, when it was picked up again by esselfortium, who revised and overhauled the maps, bringing them into their final form, while also rebuilding the DeHackEd patch from the ground up.

The WAD makes changes to both the gameplay and visual presentation of the original Knee-Deep in ZDoom, featuring a revised enemy roster, reworked map layouts, new textures and visual effects, as well as a custom soundtrack by esselfortium and James Paddock (Jimmy) that consists of reinterpretations of the original MIDIs by Bobby Prince. Note that Knee-Deep in Knee-Deep in ZDoom will not actually work on any ZDoom-based port with the exception of GZDoom.

At the Cacowards 2022, the project received both a Cacoward and the Mordeth award.

Story[edit]

A tongue-in-cheek story of sorts is provided in the in-game help menu (F1) and accompanying textfile:

Your name is Doom Guy, an actor. You've been cast in a cable TV reenactment of 2007's "Knee-Deep in ZDoom". You were never much of a history buff, but it'll put food on the table and help cover Daisy's vet bills. Maybe it'll even revive your acting career. You adjust the prop helmet to breathe a little easier, try out a few cheesy poses with your character's handgun, and ready yourself for the first day of filming.

Content[edit]

Levels[edit]

The KDiKDiZD WAD contains thirteen maps, of which nine are "normal" maps featuring game-play. The other four are narrative in nature, and are not linked in the following list. It is a Doom II-style WAD, with map names like "MAP01", while the map titles begin with a nominal "ZxMy" designation as text.

Soundtrack[edit]

  • MAP01: "The End of DOOM" by Robert Prince
  • Z1M1: "Hanger Danger" by esselfortium
  • Z1M2: "Nuclear Plant-Based Diet" by James Paddock (Jimmy)
  • Z1M3: "Underground Overload" by Jimmy
  • Z1M4: "Control Alt Delete" by esselfortium
  • Z1M5: "Phoebe's Labrador" by esselfortium
  • Z1M6: "Hunter Gatherer" by Jimmy
  • Z1M7: "Computer Core Workout" by Jimmy
  • Z1M8: "Faux Bows-N-Harmony" by esselfortium
  • Z1M9: "Rainy Moods To Study Demons To" by esselfortium
  • MAP21: no music
  • MAP22: "Red Lobster Music" by esselfortium
  • MAP23: "The End of DOOM" by Robert Prince

Built-in demos[edit]

This WAD features three built-in demos. All require Doom II v1.9 to view them. The demo levels are:

Demo Level Skill Tics Length
DEMO1 MAP17: Z1M5: Phobos Lab 4 3342 1:35.49
DEMO2 MAP19: Z1M7: Computer Station 4 1807 0:51.63
DEMO3 MAP14: Z1M2: Nuclear Plant 4 2698 1:17.09

Custom Content[edit]

Technical[edit]

KDiKDiZD is known for pushing the boundaries of the stock DOOM2.EXE significantly. While technical explanations for the monsters are provided below, this section highlights the many tricks and innovations seen in KDiKDiZD as detailed by esselfortium in the official Doomworld thread:[1]

  • Camera textures: Animated sequences of a scene. Two types are used:
    • Type 1: Created using screenshots and Photoshop, disassembling the scene into multiple layers and then arranging those layers in Doom Builder as thin self-referencing sectors that can be moved using floor/ceiling actions.
    • Type 2: Created using videos and Photoshop, reducing the video to a small set of frames that a script can step through in-game by instant-lowering a series of very thin sectors in sequence.
    • Half-cylinder projections instead of 90-degree lines are used for two reasons: It allows for more pixel detail to be fit into a smaller window shape, and using angled lines allows for much smaller gaps between each layer of the display, within the limitation of Doom's 1-mapunit grid size, so that multiple animation frames and masking layers can appear to all be a single layer.
  • Scripting: Several maps in KDiKDiZD employ a modified Mikoportal setup to create vanilla conveyors:
    • Through the usage of a DeHackEd object called an Explosion Generator (an object that calls the A_Explode code pointer every tic) that slighly pushes a voodoo doll, rather than relying on a crusher which is unreliable on barrels.
    • A dedicated thing type in DeHackEd to temporarily block a voodoo doll until a script has been activated.
    • Through the A_KeenDie code pointer, a door is opened in Z1M8 which allows an Explosion Generator to destroy the DeHackEd object blocking the voodoo doll's path.
    • The sliding doors in Z1M4 and Z1M5 Mikoveyor scripts and a sequence of instant-lowering sectors.
    • The sliding door seen from a camera texture in Z1M2's computer maze is an actual polyobject sliding door, spawned in the map using an ExtraData lump and recorded as video, then reconstituted as a series of thin instant-lowering self-referencing sectors using the "type 2" camera texture method described above.
  • PLAYPAL and COLORMAP modifications:
    • Dark reds incorporated from the palette seen in Back to Saturn X, so that red doesn't turn brown in dim areas. This is done by increasing the contrast on the low end of the red and desaturated-red ramps, so it doesn't use up any additional space in the palette.
    • 38 fullbright colors squeezed in by eliminating duplicate and near-duplicate colors from the palette, to allow for bright lights in non-fullbright sectors, without sacrificing any standard color ranges.
  • Texture effects:
    • Translucent floors and reflective floors: A trick seen in the Boom source port, wherein midtextures with the translucent line flag would be aligned under the floor to "bleed over" the flats and create the appearance of translucent flats is employed in vanilla Doom. Because vanilla does not support transluscent lines, the midtextures are recolored in KDiKDiZD to more closely match the color range of the flats (and sometimes vice versa, recoloring both the textures and the flats), and applied a dithered transparency mask to the textures so that the midtextures can be seen through in the transparent spaces between pixels.
      • For Z1M8's reflective marble floor, the textures were also mirrored, and upside-down recolored torches were created in DeHackEd to complete the effect. Because this effect breaks if there is any visible change in sector properties on the affected floor, esselfortium also applied baked-in gradient lighting to the walls and used some fullbright red ceiling flats to add contrast.
    • Midtexture slopes: Slopes are used in creative ways in KDiKDiZD:
      • Simple ceiling slopes with solid black inside them and shadowcasting baked into the textures below them (for instance, the arches in the Z1M3 mines).
      • Slopes using palette-fullbright solid colors inside them, as another way to create an illusion of solidity (for instance, the slopes beside the nukage bridge in the first room of Z1M5).
      • Slopes using 256-brightness sectors inside them with noise-patterned textures/flats inside, with baked-in lighting to appear more solid (for instance, the arched corridors in Z1M5 and Z1M7, the "broccoli" room near Z1M7's forcefield switch, or the sloped ramp in Z1M1's opening outdoor scene).
      • Slopes using 256-brightness sectors inside them with LITE5-style shading inside them, to create sloped lights (for instance, the lit gates here and there in Z1M4 or the sloped green lights in Z1M5's small outdoor nukage courtyard).
    • Baked-in lighting:
      • Rather than using individual sectors for small gradients, pre-baked textures and/or flats are used with gradiented shadowcasting already applied to them.
      • Areas with colored lighting were done simply by recoloring the affected textures/flats in Photoshop.
    • Rotating objects:
      • Z1M4's ceiling fans and hologram screen use the old method of making an animated texture with all frames transparent except for one, applied to an asterisk shaped arrangement of lines with a different animation start offset on each line.
      • Z1M3 and Z1M5's spinning nukage mixers use a modified form of the above method that also creates the appearance of solid geometry by applying animations also to the outer sides and changing the animation starts on the backsides to be one step out of sync from the front sides.
  • Extra keys: In maps that use more than the standard R/Y/B key arrangement, key doors were simulated using thin sectors that instant-lower when the key is picked up.

Custom monsters[edit]

Just like Knee-Deep in ZDoom (KDiZD), KDiKDiZD features an extended roster of enemies. About half of the original list of custom monsters are included, albeit most of them in slightly revised form.
Aside from that, the WAD also includes several new additions to the cast of custom monsters.

Rapid fire trooper
Same as in KDiZD, this is a zombieman with a rapid-fire gun. They have 30 hit points and replace the Wolfenstein SS.
Suicide bomber
A new addition to KDiKDiZD over the original, this black-clad zombie seeks out the player and will explode when either shot or making contact with them. They have 60 hit points and replace the dead lost soul (thing number 116).
Chaingunner
Just like in KDiZD, this is a sprite redress of the chaingunner with no additional changes.
Shadow
A small imp-like creature with 80 hit points that quickly moves about with a slouched posture, grey skin, and large red eyes. It will freeze in position for one second, before beginning to hurl small, dark red fireballs at its target at 30 tic intervals (about 0.86 seconds). It is mostly identical to its KDiZD counterpart, though neither translucent nor leaving a blurry outline behind as it moves, but possesses a slightly faster firing cycle during its attack (30 vs 36 tics). It replaces Commander Keen.
Soul harvester
A grey-skinned, emaciated imp-like creature with 100 hit points, same as in KDiZD. It shoots yellow skull projectiles that have a 75% chance of homing in on the player. It has no melee attack and replaces the revenant.
Mauler
A blood red variant of the demon with large, black horns that charges into the player just like a lost soul during its attack, but unlike a lost soul, it has no risk of becoming inactive after it slams into an obstacle, as it will always return to chasing the player again. It has 150 hit points and is largely identical to its KDiZD counterpart. It replaces the pool of brains (thing number 137).
Dark imp
An imp with dark skin and orange eyes, a wide open mouth, and even more spikes covering its body than a regular imp. They closely resemble the third variant of dark imps in the original KDiZD in terms of visuals, but have 160 hit points, more than any of the three variants present in the original, and fire a quick burst of three cacodemon projectiles as its ranged attack. Just like the regular imp, the dark imp possesses an XDeath state, allowing it to be gibbed. It replaces Romero's head.
Nightmare demon
A new addition to KDiKDiZD over the original, this grey-scale variant of the demon has 200 hit points, moves 40% faster than regular demons, bites slightly faster (4 tics or about 0.11 seconds), and has about a 38% lower pain chance. It also has a green tongue rather the usual red. It can be seen as a revision of the blood demon from KDiZD and replaces the 'hanging torso, looking down' (thing number 131).
Wargrin
A new addition to KDiKDiZD over the original, this humanoid mutant crawls along the floor on both hands and legs, and has a flamethrower equipped on its back. It has 250 hit points and fires a burst of three volleys, each consisting of a pair of small fire projectiles, mirroring the firing pattern of the mancubus, which it replaces.
Dark caco
A new addition to KDiKDiZD over the original, this grey-scale cacodemon has 400 hit points but no melee attack, moves faster than a regular cacodemon, and spits out a continuous string of the same kind of small, dark red fireballs that the Shadow fires, though at a much higher rate of fire of one shot every 5 tics (about 0.14 seconds). It replaces the arachnotron.
Soul reaper
A new addition to KDiKDiZD over the original, this tall, grey-skinned, emaciated monster resembles a fully grown soul harvester and attacks with the same kind of yellow skull projectiles with a 75% chance of homing in on its target. However, unlike the soul harvester, it also has a melee attack and fires a burst of two projectiles, instead of just one, as its ranged attack. It has 400 hit points and replaces the arch-vile flame (thing number 5).
Hell knight
Same as in KDiZD, Hell knights feature a sepia-filtered look. They also use different sounds for their screams and roars but behave otherwise the same as regular Hell knights. Interestingly, the Hell knights in this WAD do not utilize a separate set of sprites like they normally do, but instead use the same sprite set as the baron of Hell, which is recolored through DeHackEd by making use of Doom's palette translation flags. This way additional DeHackEd states are freed up for other custom actors.
Hell warrior
An orange-skinned Hell noble with a lion's mane, 600 hit points, and a shield. While it looks and behaves similarly to the Hell warriors from KDiZD, there are many subtle differences between the two in terms of their attacks and animations. It flings baron projectiles but with the intervals between shots more than halved, and upon triggering its pain state, will raise its shield to defend itself, temporarily becoming invulnerable to regular damage (about 0.86 seconds), although it can still be hurt through blast damage. While the shield is raised, if the target remains in its line of sight, it will fire a volley of three projectiles from its shield, two wargrin projectiles and a Shadow fireball in the center. This is followed up by a second volley if the target is still in its line of sight. While it fires the projectiles from its shield, it is vulnerable again to regular damage for a moment (about 0.17 seconds) despite having its shield raised, before becoming invulnerable again between volleys. It replace the arch-vile.
Bruiser
A triplet of orange-skinned, fiery Hell nobles with 3000 hit points each serve as the final boss of the WAD, as opposed to their implementation in KDiZD, where they represented the penultimate boss encounter (only two instead of three) before the fight against the giant mantis-like Deimos Guardian. They are somewhat smaller than their KDiZD equivalents due to the fact that the bruisers in the original were upscaled in-engine, and KDiKDiZD reuses their sprites unaltered; but just like in KDiZD, they have three different ranged attacks in their arsenal, though the exact nature and behavior of these attacks differ from the original. The first attack is a burst of six volleys of wargrin projectiles. The second is a ground attack that spawns fireballs (modified lost souls) along the floor that home in on and impact with the player. The final attack is triggered either by moving into their melee range or through activating their pain state, whereupon they will spawn three yellow skull projectiles in quick succession, each with a 75% chance of homing in on the player. They replace the swaying body (thing number 102).


Technical implementation[edit]

  • The bruiser's ground attack uses modified lost souls that are spawned through the pain elemental's A_PainAttack code pointer to create the homing behavior of the fireballs, thereby launching them directly at the player. Unlike regular projectiles, they are modified to be affected by gravity as well as spawn on the ground. After 12 tics, a fireball will call A_PainAttack itself and spawn a new fireball in front of itself that is again shot at the player, with the cycle repeating and each fireball moving closer to the target. After it spawned the next projectile, the previous fireball will finish its explosion animation for another 8 tics, but continue to exist even after it becomes invisible, with its final frame lasting for about 2.4 seconds (85 tics). This way there are at least eight fireballs existing at the same time before the first one ceases to exist. However, should one impact with an obstacle, like the step in the ground separating the inner part of the boss arena from the outer perimeter, or the side of a pillar, the lost soul will jump straight to its A_PainAttack state, increasing the possible number of projectiles that can exist at the same time. That way, if two bruisers fire their ground attack in short succession, the lost soul limit of 21 can quickly be reached, preventing more fireballs from being spawned. This will lead to an attempt to trigger the ground attack by the third bruiser to fail, with the attack animation not creating any projectiles at all. This also serves as a limiter to how many fireballs will be able to spawn as they follow the player around the room. Without the lost soul limit, the room could potentially become flooded with projectiles. Nonetheless, the fireballs can still chase the player infinitely, as long they don't get stuck on any obstacle; they will, however, invariably collide with something sooner rather than later because of the layout of the boss arena. Note that the GZDoom version of KDiKDiZD, which uses ZScript instead of DeHackEd, does not recreate this effect accurately, with fewer fireballs being spawned, and less pronounced homing behavior.
  • The Hell warrior's shield is actually a modified rocket that is spawned with a velocity of exactly 1 inside the Hell warrior's sprite, keeping it fixed in place, and with its radius being made large enough to enclose the entire collision box of the Hell warrior, protecting him from attacks from all angles. Unlike regular projectiles, the rocket has the SHOOTABLE flag set, and as a result is linked in the blockmap, making it shootable, though it also has zero health, so it can't actually be damaged. It is timed to vanished before the Hell warrior shoots the projectiles from his shield, and afterwards a second rocket is spawned, should the player remain in sight. Because the Hell warrior's shield uses the regular rocket, the player's rockets in the game are actually modified BFG's projectiles that function and behave exactly like the original.
  • The suicide bomber does less damage in KDiKDiZD than it does in mods like Valiant, where its explosion is being executed through the A_Detonate code pointer, introduced in the original MBF, which lets the modder adjust the blast damage and radius of the explosion. Vanilla Doom lacks this code pointer and is reliant instead on A_Explode to generate explosions, which cannot be customized in any way. To tame the suicide bomber's explosive potential somewhat, its radius is increased by 25%, decreasing the maximum damage a target can receive due to them being further away from the blast's origin. The suicide bomber in Valiant actually calls A_Detonate twice in a row when impacting with the player, dealing double damage: once through their melee attack, with the resulting explosion killing it, and immediately again in their death state that also has A_Detonate set because it's the state that is normally activated through shooting it. The suicide bomber in KDiKDiZD avoids this by having a separate gib death state defined that doesn't have A_Explode set as its action, ensuring that after their melee state triggers the explosion, they are sent to their gib death state rather than their normal death state, where they would explode again. The normal death state in turn is only activated when they are being shot rather than reaching the player and triggering their melee state.
  • Because lost souls are used as part of one of the bruiser's attacks, the lost souls encountered in the WAD are actually custom monsters modified to mirror the behavior of the regular lost soul. Since the lost soul's slot in the Doom engine is hard-coded to double their chance of triggering an attack, this was compensated for by giving the new lost soul twice the amount of A_Chase states, but at half the duration for each state (four states rather than two, at three tics per state rather than six), while also halving their step distance. This means they move twice as often but only half the distance each time, maintaining the correct speed of a lost soul, while also doubling the chances of triggering an attack, bringing it on par with the regular lost soul's attack behavior. They do, however, have a higher chance of changing direction while walking between attacks, since they switch between states more often. They replace the 'Tall Lamp 2' (thing number 81).
  • The spider mastermind is replaced by a flying, invisible, non-blocking, and unshootable resurrector entity that is used in Z1M8 to create the illusion of corpses reanimating by themselves. In order to achieve this effect, swarms of resurrectors are released into an area, where they move around at an extreme speed (twice as fast as pinky demons on nightmare difficulty) while looping the arch-vile's A_VileChase code pointer at every tic, which makes them revive monsters they come across as they fly back and forth through the room, chasing the player and bouncing off walls. This, coupled with fact that they have their reaction time set to 1, results in the almost instantaneous revival of dead monsters in the affected area as soon as the resurrectors are released. Each will revive exactly one monster and then cease to exist on the next state, limiting the amount of resurrections that can take place to the number of resurrectors in the area. While resurrecting a corpse, the resurrector entity will momentarily switch to the arch-vile's S_Vile_Heal1 animation frame, even though the resurrectors themselves use the same sprite as the plush cacodemon that is found on the table in the dressing room at the beginning of every map. This happens because A_VileChase is hard-coded to jump to this frame when it resurrects a corpse. The resurrectors inherit this behavior. They cannot be damaged in any way, and their presence is entirely imperceptible to the player since, besides being invisible and inaudible, they do not block the player or other monsters from moving through them and do not affect the kill count.
  • Both the cyberdemon and pain elemental are replaced by decorations: the cyberdemon by a large, leaf-crowned tree, several of which can be found standing outside the building leading to the exit at the end of Z1M8, and the pain elemental by a dead miner lying on the ground with outstretched arms that is used in most levels.

Custom weapons[edit]

Knee-Deep in Knee-Deep in ZDoom includes two main weapon modifications: a custom super shotgun replacing the standard SSG and the flare rifle replacing the plasma gun. Additionally, the BFG9000 is removed from the game, with the corresponding weapon slot instead calling the regular pistol, which as a result has two weapon slots associated with it.

  • The super shotgun reuses the sprites and sounds of the custom SSG from the original KDiZD, but has a faster rate of fire (49 tics vs 66 tics) than the KDiZD SSG, though still marginally slower than the regular DOOM II SSG (+1 tic).
  • The flare gun fires small, yellow plasma "bullets", which have been modified to have their damage almost tripled (14-112 damage) compared to the normal plasma projectiles (5-40 damage), but the rate of fire is much lower, shooting a projectile every 9 tics rather than the standard 3 tics, resulting in roughly the same DPS as the normal plasma gun. It uses the firing sound of the rifle replacing the BFG9000 in KDiZD but is otherwise based on the flare gun from Mapgame by Fletcher` released in 2009, reusing the sprites of both the weapon and the plasma bullet.
  • The pistol has its firing rate slightly increased (-1 tic) to match that of KDiZD's pistol.

Custom items[edit]

  • KDiKDiZD includes a full eight sprite rotations for most of its items and pickups, creating a faux 3D effect by allowing them to be viewed from different angles, just like in the original KDiZD. The following items and pickups have all eight rotation sprites included:
    medical kit, stimpack, armor, megaarmor, armor bonus, berserk, radiation suit, automap, backpack, box of rockets, box of ammo, ammo clip, box of shells, shells & flare ammo (modified energy cell pack).
  • The red, blue, and yellow skull keys have been replaced with orange, silver, and green key cards, respectively, and all six keys have additional rotation frames, enabling them to be displayed rotating around their own axis.
  • There is a special seismic bomb device in Z1M1 that has to be collected and placed at a specific location to progress in the map. It replaces the flaming barrel.
  • KDiKDiZD does not make use of energy cells, megaspheres or light amplification goggles, with the megasphere instead being repurposed as the seismic bomb once the device is set in the wall in Z1M1, as well as its subsequent explosion, and the light goggles being replaced by a special variant of the berserk that has the MF_SHOOTABLE flag set internally, enabling it to teleport by being pushed over a linedef through an explosion; it otherwise functions like a normal berserk pack.

See also[edit]

External links[edit]

References[edit]

  1. esselfortium (22 November 2022). Doomworld forums post. Doomworld forums. Retrieved 10 December 2022.