Project Zomboid

Project Zomboid

59 ratings
Mod Quality Levels
By star
About bugs in mods from the workshop.
   
Award
Favorite
Favorited
Unfavorite
Introduction
In this article, I'll explain the differences between various mods in Project Zomboid, focusing on their likelihood of being buggy and other quality aspects.
(Russian)

Disclaimer
Judging mods and modders is not a straightforward task. While I sometimes feel presumptuous in making these assessments, I believe discussing quality is crucial for enhancing the mod culture and habits in the Project Zomboid community in general.
Mod Types
The primary rule to remember is that the presence of bugs in a mod is more critical than the idea and game design of the mod.

Tier 0 - Undiscovered Mod
These mods are yet to be fully explored and detailed information about them is currently unavailable.

Tier 1 - Legacy Mod
Legacy Mods replace entire game files. This replacement is effective only while the mod is installed and active. Disabling the mod will reverse its effects. To identify such mods, look for file names in the mod folder that exactly match those in the game folder.

The main issue with these mods is the high likelihood of conflicts with future game updates. When developers release a new version of PZ, these mods may continue to replace files with outdated versions, potentially causing in-game conflicts. In some cases, they may even nullify new features until the mod is disabled. Mod authors must update these mods with each game update to prevent these issues.

It's worth noting that file replacement is sometimes unavoidable, as in the case of reskin or retexture mods. However, if a mod replaces the entire texture pack, it is still considered problematic under this tier.

Tier 2 - Legacy-Compatible Mod
These mods do not replace entire game files but may replace whole function or object definitions. The replacements are only active while the mod is enabled.

Identifying these mods can be challenging. One method is to inspect the mod's files, especially the item definition text files. If you find an item ID that matches one in the game's folder (/media/scripts/), it's a sign that the mod falls into this category:
item ItemName {

The chance of future incompatibilities with the game and other mods is medium, but it's generally less severe than replacing entire files.

Not Legacy mods
(i.e. Tier 3 or higher)

To see that a mod isn't legacy, just make sure it doesn't replace files, functions, or objects. You should have at least a little knowledge of programming.

Examples:
Legacy
Not Legacy
Files
There is a file in the mod:
/media/scripts/newitems.txt
The same file is in the game folder:
/media/scripts/newitems.txt
There is a file in the mod:
/media/scripts/my_items.txt
No such a file in the game folder.
Files
There is a file in the mod:
/media/lua/client/TimedActions/ISReadABook.lua
The same file is in the game folder:
/media/lua/client/TimedActions/ISReadABook.lua
There is a file in the mod:
/media/lua/client/ISReadABook_fix.lua
Functions
-- Reduce read time function ISReadABook:new(character, item, time) local o = {} setmetatable(o, self) self.__index = self o.character = character; o.item = item; o.stopOnWalk = true; o.stopOnRun = true; ................... -- reduce total read time time = time * 0.5 ................... o.ignoreHandsWounds = true; o.maxTime = time; o.caloriesModifier = 0.5; o.pageTimer = 0; o.forceProgressBar = true; if character:isTimedActionInstant() then o.maxTime = 1; end return o; end
-- Reduce read time local old_fn = ISReadABook.new; function ISReadABook:new(...) local o = old_fn(self, ...); if o.maxTime ~= 1 then o.maxTime = o.maxTime * 0.5; end return o; end
Items
There is item definition:
item Cigarettes { Count = 1, Weight = 0.05, Type = Normal, DisplayName = Pack of Cigarettes, Icon = SMPackClosed, CantBeFrozen = TRUE, }
The same definition (item Cigarettes) exists in the game txt files.

Please be aware that altering the item Type can have significant negative consequences, as it leads to the deletion of all previously existing items of that type from the save file once the mod is installed..
item CigarettePack { Count = 1, Weight = 0.05, Type = Normal, DisplayName = Pack of Cigarettes, Icon = SMPackClosed, CantBeFrozen = TRUE, }
(no such vanilla item)
OR
name = "Base.Cigarettes" item = ScriptManager.instance:getItem(name) if item then item:DoParam("Count = 1") item:DoParam("Weight = 0.05") item:DoParam("Icon = SMPack") end
(changing item properties directly)

Tier 3 - Work-in-Progress Mod
The creators of these mods are competent programmers or artists but may have approached their work casually, leading to typos and minor inaccuracies. These could cause issues, although the chances are relatively low.

Mod authors in this tier often rely on community feedback for improvements and may not proactively update their mods unless prompted.

To identify Work-in-Progress Mods, non-programmers should look at the description, icon, and screenshots in the Steam workshop. Detailed descriptions and visuals often indicate more effort put into the mod.

For those familiar with programming, reviewing the mod's code, especially Lua files, can provide insights into its tidiness:
--the sign that this is not legacy mod local old_fn = gameFunction function gameFunction(...) ........... -- the mod mechanics return old_fn(...) end
Accurate modification of item properties looks like this (using Lua, not txt files):
--the sign that this is not legacy mod ScriptManager.instance:getItem("Base.Battery"):DoParam("Weight = 0.05")
OR (very accurate):
local item = ScriptManager.instance:getItem("Base.Battery"); if item then item:DoParam("Weight = 0.05"); end

Starting with this tier, mods are generally compatible with most future game updates and other mods. They may remain functional even if abandoned, so the mod's last update date isn't always a critical factor.

Tier 4 - Specialized Mod
Specialized Mods are bug-free, particularly the simpler ones. However, their game design might be unconventional or niche.

Assessing these mods often requires a subjective approach and might be best done by an experienced game designer. Some factors to consider include:
  • whether the mod makes the game easier or harder,
  • the level of detail in its mechanics,
  • its balance compared to other game elements,
  • its realism (after all, this is Project Zomboid!).

Tier 5 - Polished Mod
These mods do not exhibit the issues mentioned in the previous tiers. They represent a well-rounded and high-quality modding experience.

It's important to note that even Polished Mods can be affected by game updates, and the occasional red popup doesn't necessarily reflect poor quality. Mistakes happen, and this applies to both professional modders and developers.

As for me personally, not all my mods are Polished.
Conclusion
Tier 1
Legacy
Tier 2
Legacy-Comp.
Tier 3
WIP
Tier 4
Specialized
Tier 5
Polished
Replacing files
Yes
No
No
No
No
Replacing objects & fns
?
Yes
No
No
No
Lazy manner
?
?
Yes
No
No
Game design
?
?
?
Wired
Good
Mod examples
The mod name
Verdict
Date of check
Legacy-Compatible
2021-01-28
Legacy-Compatible
2021-01-28
Legacy-Compatible
2021-01-28
Polished
2021-01-28
Polished
2021-01-28
WIP
2021-01-28
Legacy-Compatible*
2021-01-28
Specialized
2021-01-28
Polished
2021-01-28
Specialized?
2021-01-28
Polished?
2021-01-28
Legacy
2021-01-28
Specialized
2021-01-28
Polished
2021-01-28
Polished
2021-01-28
Polished
2021-01-28
Polished
2021-01-28
Specialized
2021-01-28
Polished
2021-01-28
* Minor replacement, so the mod can be rated as Specialized/Polished.
20 Comments
star  [author] 2 Apr, 2022 @ 2:40pm 
@ToastyCosty,
Try this: https://pastebin.com/GaACQdVT
ToastyCosty 2 Apr, 2022 @ 11:37am 
Hello!
First of all, great tips! i was searching around for some good-practises in order to make my code as compatible as possible and this seems to encapsulate most of my needs!
I just have one question: i tried to follow your example in order to override a vanilla function but it's giving me errors when it gets called ingame.

Would you mind taking a look and tell me what i'm doing wrong? https://pastebin.com/Qy52vKBd

thanks!
. 24 Mar, 2022 @ 10:42am 
snefu114 we understand from the way this man speaks and the way he acts he is american either from California or a western part of the united states for certain.
Titoxic 19 Dec, 2021 @ 6:17pm 
Thank you a lot, a simple nice example. I will try to rewrite all parts of my code that replace existing functions.
star  [author] 19 Dec, 2021 @ 12:37pm 
Keep replacing files. Learn Lua. Later you will figure out how to add your code to game code without replacing it.
Simple example: https://pastebin.com/LGDX2idi
Titoxic 19 Dec, 2021 @ 7:43am 
I am creating my first mod right now and from your criteria it would probably fall into the category "very bad". I am not replacing any .txt files in the scripts because I already had compatibility on my mind, but I am replacing at least two .lua files of the game. I don't know how to avoid doing that, could anyone explain me or possibly link a guide?
LilSisLori 28 Nov, 2021 @ 4:00pm 
Weird how you go from considering a mod bad if it breaks the game to considering it bad on subjective grounds (ie balance, lore, etc).
Fantasy System 6 Aug, 2021 @ 3:22pm 
@Phobeseneos IMO adding items that do not make sense for the time the game takes place in makes a mod poor quality.
Phobeseneos 6 Aug, 2021 @ 2:04pm 
@The Scout Calling britas mods bad is bs
Gunderwar 25 Jul, 2021 @ 2:26pm 
Some of the ratings for these mods feel a bit out of place to the state of the mods themselves,I don't know how to describe it, I believe adding a miscellaneous tag for mods that are beyond outdated or may reference files/lines that no longer exist or are changed in the base game would improve the readability of this system put into practice. Along with being a little more descriptive in how this system would categorize certain mods will improve it quite a bit. Such as if a mod is known to have major incompatibility problems with other mods or if the mod itself is too outdated and if it has to do with the mod being of poor game design makes reading a list that may be based off of this system for players who wish to play with mods without running into too many compatibility issues or bugs.