Painslayer is a gameplay mod for GZDoom engine by Agent_Ash aka Jekyll Grim Payne, inspired by Painkiller (2004) by People Can Fly.
Painslayer aims to "demake" weapons from Painkiller and Painkiller: Battle Out of Hell into lovingly hand-painted sprites, while recreating the mechanics as closely as possible. It's meant to be played on existing Doom maps and is compatible with custom monsters.
This update spent a bit too long in the oven, but it's finally out! The main focus was to improve performance. The main source of performance issues in GZDoom is a multitude of actors, such as smoke, debris, trails and flames spawned by projectils and special effects.
GZDoom has had an internal particle system for a while—that system allowed spawning particles that were very cheap on performance, but the downside is that you couldn't modify their look. They could only look like circles or squares. Well, this has changed!
Now particles can be textured with any graphic. While their animation capabilities are limited, and they can't have physics or interact with environment, this meant I could replace almost all smoke, debris and flame effects with these shiny new particles. So I did.
The performance difference varies from slight to very significant. You can find multiple examples (and more information about the update) in this video:
I've also spent a fairly significant amount of time improving Electro's interaction with water. Unfortunately, as of now it only interact with 3D water (not flat water textures), but it does so pretty impressively, if I may say so myself. You can find examples in the video above, or check out these GIFs:
You can find more details in the full changelog below.
Full changelog for update 2.0.0
Changed
The vast majority of particle effects (particles hovering over powerups, smoke and fire particles spawned by projectiles, etc.) have been moved to GZDoom's new native textured particle system. This will vastly improve performance of particles even at very high particle count, especially above moving floors.
General weapon changes:
Gravity-affected projectiles (stakes, Heater bombs, grenades) will no longer be affected by water sectors and will have the same gravity on the surface and underwater. While arguably unrealistic, this makes their behavior much more predictable, keeping them useful underwater.
Projectiles will not spawn flames while underwater. (For example, the trail of a burning stake or explosions of grenades and rockets while under the effect of the Weapon Modifier power-up.)
Pain/Killer:
Killer (alternative attack) now deals exactly 40 damage (instead of 15 multiplied by 1-8 randomly).
Combo Killer (combo attack) was brought a bit more in line with its original Painkiller behavior and generally slightly nerfed, since it was a bit too powerful against single targets, like bosses:
Combo Killer now deals exactly 200 damage (instead of 80 multiplied by 1-8 randomly).
Combo Killer will now fly through the enemy it hits rather than bouncing back automatically. This means the player will need to manually recall it by pressing altfire, requiring a bit more attention and skill. (Note, the projectile will still only damage the first enemy it hits, flying through other actors harmlessly.)
The delay between recalling Combo Killer and being able to fire it again was increased from 3 tics to 6 tics.
Stakegun/Grenade Launcher:
Stakes will fly at a lower speed if fired underwater. This is partly for the sake of realism, and partly to side-step bugs caused by weird water behavior in GZDoom.
Grenades will now deal exactly 50 damage on impact (used to be 20 multiplied by 1-8 randomly). Explosion damage remains unchanged (the same as in Doom).
Explosive stakes (combo attack) will now deal exactly 60 damage on impact (used to be 25 multiplied by 1-8 randomly).
Minigun/Rocket Launcher:
The Minigun spin speed will now gradually increase and decrease when you hold down/let go of the attack button, and the speed won't be reset upon letting go of the button. This means that you won't be forced to watch the whole wind-up/wind-down animation when firing in short bursts.
Rockets will now deal exactly 50 damage on impact (used to be 20 multiplied by 1-8 randomly). Explosion damage remains unchanged (the same as in Doom).
Electro/Driver:
Shurikens (primary attack) will now deal exactly 20 damage on impact (instead of 7 multiplied by 1-8 randomly). This makes them more consistent, and they will generally be a bit more powerful, since Driver used to feel rather underwhelming.
The auto-aim/latch-on behavior of the Electro beam (secondary attack) will now always prioritize monsters and other players over shootable props (such as breakable chests).
If Electro is fired while underwater, it'll damage the player and everything around them. The actual beam won't be spawned, and instead a large electic muzzle flash will be displayed. It is still possible to keep attacking, and it may even be useful if the shooter has health to spare.
If the Electro beam is fired into water, while the player is outside of it, it'll damage everything in the water around the point of impact on the water's surface.
Electric Disk (combo attack) will also damage everything around itself while underwater.
Boltgun/Heater:
Bolt (primary attack) base damage has been increased from 53 to 57.
Bolts will fly at a lower speed if fired underwater. This is partly for the sake of realism, and partly to side-step bugs caused by weird water behavior in GZDoom.
Heater bombs (secondary attack) will now explode automatically 4 seconds after being fired even if they don't hit anything. (To cover the cases where they fall down a deep pit or float in a large pool for a while).
Heater bombs will now deal exactly 35 damage on impact (instead of 10 multiplied randomly by 1-8).
Explosive Bolts (combo attack) will now deal exactly 35 damage on impact (used to be 25 multiplied randomly by 1-8).
Mega Soul (Megasphere replacement):
Now has new appearance, with a gold-and-red color scheme and particles (similarly to Gold Soul). The reasoning was that the original design (green soul with red bits inside) was rather underwhelming, being too similar to the base green soul pickup; polls showed that players with little experience in Painkiller/Painslayer mostly perceived it as a weaker pickup compared to Gold Soul (which is a Soulsphere replacement).
Mega Soull will now be always picked up when touched, even if the player has full health and armor. This is to bring its behavior more in line with Doom's Megasphere.
Gold Soul (Soulsphere replacement) will now heal 100 HP up to 200 rather than 100 HP up to 100. This is different from the original Painkiller behavior, but is in line with what Soulsphere does in Doom, and is thus a reasonable mechanical adjustment.
The Blessing Tarot Card will now increase maximum health to 250 (in addition to its main effect of increasing base health to 150).
Players who are currently in Demon Mode will appear as flat-red and fullbright to other players in network games.
Added
Added a new, prettier idle electric arc to the Electro sprites.
Added a new trail consisting of electric sparks to the Electro Disk (combo attack projectile).
Minigun firing animation now uses 8 frames instead of 4, for smoother animation during wind-up/wind-down sequences.
Fixed
Fixed a VM abort related to the Crystal Ball powerup: picking up items that had a map marker attached to them will no longer cause an abort.
Fixed various projectiles (bolts, stakes, Heater bombs) being fired at weird angles if fired inside a 3D water sector.
Fixed Electro beam sometimes not latching on targets.
Heads-up display:
Fixed boss healthbars flickering
Fixed boss healthbars stretching vertically if the hud_aspectscale CVAR was set to true (they will now match the compass shape)
Fixed boss healthbars being occasionally displayed for already dead bosses
Fixed Freezer reload duration not being shortened by the Dexterity Tarot Card.
Fixed burning enemies becoming scorched if they were killed by a non-fire attack while burning.
Fixed a Demon Mode bug where the level music would resume playing if the player saved and loaded the game while still in Demon Mode. The music will now stay properly muted for the duration of the Demon Mode.
Fixed flames spawned by grenade/rocket explosions (while under the effects of Weapon Modifier) being fired at too high speeds.
Fixed monster corpses still being colored in red when in Demon Mode, if the "Keep enemy corpses" option is used.
Fixed invisible ammo spawners persisting in the map after the actual ammo was already spawned.
No articles were found matching the criteria specified. We suggest you try the article list with no filter applied, to browse all available. Post article and help us achieve our mission of showcasing the best content from all developers. Join now to share your own content, we welcome creators and consumers alike and look forward to your comments.
Script error, "painslayer.pk3:zpainkiller/w_electrodriver.zs" line 481:
Cannot convert Pointer<NativeStruct<F3DFloor>> to Pointer<NativeStruct<Sector>>
VM execution aborted: tried to read from address zero.
Called from PK_FreezeControl.AttachToOwner at Painslayer130.pk3:zpainkiller/w_shotgun.zs, line 324
Called from Inventory.TryPickup at gzdoom.pk3:zscript/actors/inventory/inventory.zs, line 492
Called from Inventory.CallTryPickup at gzdoom.pk3:zscript/actors/inventory/inventory.zs, line 603
Called from Actor.GiveInventory at gzdoom.pk3:zscript/actors/inventory_util.zs, line 90
Called from PK_FreezerProjectile.StateFunction.1 at Painslayer130.pk3:zpainkiller/w_shotgun.zs, line 151
Called from PK_BaseActor.Tick at Painslayer130.pk3:zpainkiller/pk_main.zs, line 326Called from PK_Projectile.Tick at Painslayer130.pk3:zpainkiller/pk_weapon.zs, line 876
Called from state PK_FreezerProjectile.1 in PK_FreezerProjectile
Called from Thinker.Tick [Native]
No. If I'd intended to use 3D models in this mod, I wouldn't have spent hours upon hours on creating the sprites and coding the weapons specifically to utilize sprite layers.
This mod is a conscious "demake" of Painkiller, meant to look fitting within the Doom aesthetic (which means lo-fi geometry, textures and sprite-based enemies), not a recreation of the original game.
I'm also not planning to borrow stuff from Painkiller: Mutilator and I'm not in competition with that mod; me and RDM are just doing different takes on what Painkiller could look like in GZDoom.
If anyone else wants to make an add-on, I have no problem with that (as long as they acquire all the necessary permissions), but it won't be easily doable because there are things that have to be coded differently for 3D models and for sprites, and it's also not possible to combine models with sprites in weapons.
No. For one, I don't have the rights to distribute their music.
I'm considering perhaps adding functionality to play it dynamically in the future (such as combat music activating during combat), but even if I do this, I'll not include the actual music into the mod, I'll perhaps give the players an opportunity to copy the tracks from their copy of Painkiller Black Edition.
That said, I'm not sure this pursuit is worth it because this is a gameplay mod, it's meant to be playable on existing maps, and the choice of music is largely the map author's concern. So, no promises for now, but if I have the time, I may add this functionality in the future.
Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.
Elementalism sometimes crashes when killing enemies with the stake gun or bolt gun.
Awwww, darnit:
Script error, "painslayer.pk3:zpainkiller/w_electrodriver.zs" line 481:
Cannot convert Pointer<NativeStruct<F3DFloor>> to Pointer<NativeStruct<Sector>>
Execution could not continue.
1 errors while parsing DECORATE scripts
Why is this happening?
This comment is currently awaiting admin approval, join now to view.
Just used the mod with Hellraiser TC from 95 ..damn .that worked perfectly.Video at the end
VM execution aborted: tried to read from address zero.
Called from PK_FreezeControl.AttachToOwner at Painslayer130.pk3:zpainkiller/w_shotgun.zs, line 324
Called from Inventory.TryPickup at gzdoom.pk3:zscript/actors/inventory/inventory.zs, line 492
Called from Inventory.CallTryPickup at gzdoom.pk3:zscript/actors/inventory/inventory.zs, line 603
Called from Actor.GiveInventory at gzdoom.pk3:zscript/actors/inventory_util.zs, line 90
Called from PK_FreezerProjectile.StateFunction.1 at Painslayer130.pk3:zpainkiller/w_shotgun.zs, line 151
Called from PK_BaseActor.Tick at Painslayer130.pk3:zpainkiller/pk_main.zs, line 326Called from PK_Projectile.Tick at Painslayer130.pk3:zpainkiller/pk_weapon.zs, line 876
Called from state PK_FreezerProjectile.1 in PK_FreezerProjectile
Called from Thinker.Tick [Native]
same problem tho
Will there be an addon to add 3D models and Painkiller monsters? I imagine you would borrow the Painkiller Mutilator mod models made by RDM.
No. If I'd intended to use 3D models in this mod, I wouldn't have spent hours upon hours on creating the sprites and coding the weapons specifically to utilize sprite layers.
This mod is a conscious "demake" of Painkiller, meant to look fitting within the Doom aesthetic (which means lo-fi geometry, textures and sprite-based enemies), not a recreation of the original game.
I'm also not planning to borrow stuff from Painkiller: Mutilator and I'm not in competition with that mod; me and RDM are just doing different takes on what Painkiller could look like in GZDoom.
If anyone else wants to make an add-on, I have no problem with that (as long as they acquire all the necessary permissions), but it won't be easily doable because there are things that have to be coded differently for 3D models and for sprites, and it's also not possible to combine models with sprites in weapons.
Is there ambient music from original PK?
No. For one, I don't have the rights to distribute their music.
I'm considering perhaps adding functionality to play it dynamically in the future (such as combat music activating during combat), but even if I do this, I'll not include the actual music into the mod, I'll perhaps give the players an opportunity to copy the tracks from their copy of Painkiller Black Edition.
That said, I'm not sure this pursuit is worth it because this is a gameplay mod, it's meant to be playable on existing maps, and the choice of music is largely the map author's concern. So, no promises for now, but if I have the time, I may add this functionality in the future.