WhoDunIt is a survival modification for Zandronum, a multiplayer port of ZDoom. This repository is a means of upgrading WhoDunIt to the lastest version of Zandronum, fixing present issues and introducing features/capabilities to provide the same gameplay with a new, enhanced and open experience.
Improve the current way the murderer's score is calculated at the end of a round. Perhaps it's too easy for a murderer to earn 100%, so add a difficulty option for the server.
Sometimes, a murderer can even score 100% without necessarily winning. There can always be that one last innocent that survives, but still earns a perfect score regardless.
Also, Prepper has created some new medals that can be awarded to the murderer based on their item usage. For example, using bertholite canisters or smoke bombs excessively can earn them a unique medal corresponding to that item.
I think that anytime a group of people are playing, there are several or more clients that never have an opportunity to become the murderer once, as if the function that controls the murderer selection completely skips them. Clients joining/leaving the game might be causing this.
It can be frustrating when one person never seems to be picked while everyone else becomes the murderer several times before them, which isn't fair, so the function should be overhauled to fix this common issue.
Players are always complaining about CPU-related lag when playing WhoDunIt. A contributor to the lag might be the large amounts of actor decorations and dynamic lights used in some maps.
Currently, maps like WDI09, WDI10 and WDI18 use a pukable script that removes some actors to optimize performance. I think this feature should be expanded so it's compatible for all maps, and players have the option of adjusting the amount of detail without issues. This should focus only on actors that are purely decorative and do not affect the gameplay in any way.
Zandronum 3.0 / ZDoom 2.7.1 supports Named Scripts, which can be used to give scripts a proper name similar to a string. This would be useful for WhoDunIt's core as it can give global scripts are more telling name and significantly reduce the chance of script number conflicts between global/map scripts.
Apparently, there are major desyncs that happen that cause players to fire ranged weapons like the Crossbow or M1 Carbine with their fists. Even if they do this, they do not consume any of the ammunition they have loaded, so no crossbow bolts or bullets are actually being wasted.
Starting maps that take long to load (example: WDI20) might be causing this.
The murderer can sometimes see extra markers on their screen that are not attached to an innocent or a player that's alive. These markers are likely placed on a player start point or a map point that's mistaken for a player. The murderer's tracker script should be revised carefully to resolve this.
If a player disconnects usually before the score screen, their name will not be properly referenced and will print "Player [ID]" instead. This especially happens when the murderer, or the innocent who killed the murderer, leave before their names are printed onscreen.
To solve this, every player's name should be stored in a variable beforehand and updated in case they change their name in the middle of a round.
Currently, it's difficult to drop the chainsaw usually when selecting it. It's especially annoying if the chainsaw is selected by accident and the player cannot drop/deselect it until it's started up.
The chainsaw's DECORATE code should probably be edited to make this easier for players.
The murderer is selected twice playing two games, in one row even getting a punishment of 5 rounds (default cvar), this issue could be related with the crashes usually when the server restart the same player as murderer is selected again.
A major problem of WhoDunIt for the longest time is the annoying and excessive team killing that a few players do to ruin the gameplay for the community. Paranoia and the ability to attack any player you see is a part of the game, but the current paranoia system is still lenient enough for obnoxious team killers or trolls to keep at it.
I suggest a major overhaul to the current system to be more strict towards unnecessary team killing, but also fair for killings that have reasons. Here's how the current system works:
Currently, when an innocent kills another innocent, they drop their current weapon, all health kits, and are given a yellow aura that reveals them to other players. They cannot heal naturally until their health drops below 30.
In older versions, if an innocent kills a second innocent, they would be given a red aura and could be killed by anyone without consequences. However, the current system is designed so it will automatically remove that player from the game instead. It's optional whether we should return the red aura or not.
Here's some ideas I came up with:
If an innocent keeps attacking others carelessly almost to the point of killing them, the game should label them as "reckless", and any innocent that kills them in self-defense will not receive any repercussions for that paranoia kill. That way, players should have no hesitation to get rid of those who do nothing but harass the innocents without reason.
The system should determine whether a paranoia kill was by accident or not. For example, if a group of innocents are combating the murderer and one innocent kills another through misfire or missed swing, they should not be punished severely as any team killer would.
Players who end up team killing are "under watch" based on how many paranoia kills they've gotten. This number can accumulate, but diminishes when a round ends (the number of rounds that must pass in order for this to decrease can be adjusted by the server via CVARs). If a player reaches a certain limit of paranoia kills (also adjustable by the server via CVARs), they could become a free kill or automatically kicked from the game at the start of a new round.
Keep track of obnoxious player in case they disconnect and rejoin the server to prevent exploitation of the new paranoia system.
This is so far what I have in mind, but there could me more features to implement to make this system more robust and fair, hopefully being about more quality gameplay that requires teamwork and minimal trolling.
The shadow (a dynamic light) that appears under a player is still visible for a spectator. There should be another way to spawn the shadow so it only works for only live players.
Remove any content from WhoDunIt that's a duplicate of Skulltag (ex. Sprites, Textures, Flats, Patches) as they will already be loaded using other resources.
Create a new port or hub to select maps for clients or server, this hub has been implemented in ¨WDIEXHUB¨ for clients or players, and not implemented in Wdimain classic (see KEYCONF.TXT system of adminvote).
If a player dies and then respawns (can happen if telefragged by another player during spawning), they will become invisible, which is because the RenderStyle property of the player is being set to STYLE_NONE upon death.
A solution would be to reset the RenderStyle property to STYLE_NORMAL when the player respawns or do not change it at all. Going with the latter means the player's death states in DECORATE must be changed so two corpses don't show up briefly.
Players (who may have killed another innocent player) can sometimes spawn two corpses if they are backstabbed. One corpse is just a regular death, while the other is a backstab-type death.
This issue might have originated from a Touchup patch.
This is an "enter script" located in classics.acs inside the script 419 exist a poor amount of delay or missed in the first while is my theory, this issue is rarely showed begining the game in console.
If an innocent opens a fake medkit and it kills another innocent, the death is treated as a teamkill when actually, the murderer should've killed them.
If the murderer wins the round by killing the last living innocent with a weapon that's not their knife, the victim ends up being both a personal and paranoia kill.
It's possible at the score screen to see something like:
Personal Victims: 7 out of 7
Paranoia Victims: 1 out of 7
The one victim under the "Paranoia" category is the last victim, who was killed by the murderer.
The AltHUD can be used by some spectators to be able to see the health of every player especially the murderer. By disabling use of this HUD entirely, it can help against spectators from ghosting at the beginning of a round or having access to information they shouldn't know...
The backstab counter does not accurately tell exactly how many backstabs a murderer has earned until the end of a round. The actual number of backstabs committed is sometimes greater than what's recorded.
In some cases when a player dies, its corpse does not share the same color translation as the player itself, so the suit appears green like the default Doom Marine.
This may or may not be happening because of a Zandronum-related issue, but it's something worth looking into.
A rare occurrence is that the murderer can actually win without killing all the innocents, possibly because some players are overlooked when checking how many innocents are left.
The remote camera is useless in its current state because the video footage does not show on the murderer's HUD accordingly. The CameraTexture used to preview footage should be fixed.
Additionally, should we improve the overall function of the remote camera, and maybe add a CVAR that allows multiple cameras to be installed and viewed individually?
This issue happen constantly with innocents they take sanity even if they aren't selected like murd acquiring and accumulating sanity, one method is killing rats or just wait to accumulate sanity again (loop) and dropping the sanity through such as elements.
One solution is add flags like undroppable and give the sanity or madmeter only for the murder or class.
Note: removing that loop should be reduce part of the lag of the game.
Script 419 controls the murderer's tracker and displays markers on the innocents. Sometimes, this script is terminated by a "division of 0", so the markers are never displayed again.
This issues seems to happen a lot on a few specific maps including WDIEX01 and WDIEX02.
The HUD is displayed depending on whether a player has the inventory items: "HudAlive" and "HudCleaner", the latter of which erases the HUD from the screen.
However, in some games, especially those that reset mid-round, (dead) spectators can still see the player's HUD when they're not supposed to see it at all.
The way that these inventory items are being handled should probably be fixed to prevent this issue.
Global script and other actors should be overhauled and optimized to reduce bandwidth usage on servers which are causing clients to lag severely, especially on maps that are large, detailed, and full of many actors.
If a player is carrying any ranged weapon (Beretta, Shotgun, M1 Carbine, or Crossbow) and walks into same weapon lying on the ground, they will be able to pick up that weapon, essentially having two or more.
These weapons should be fixed so that players cannot pick up duplicates of the same weapon without "destroying" the other.