Modding: Difference between revisions

From PZwiki
m (→‎Creating mods: minor fixes)
m (→‎Mapping resources: Add link to my WIP modding tool)
 
(32 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{Languages}}
{{Header|Modding}}
{{Header|Modding|version=Version 41|incver=78.16}}
{{Page version|41.78.16}}
[[File:SpiffosWorkshop.png|link=https://steamcommunity.com/app/108600/workshop/|frame|right|Spiffo's Workshop is the home of [[Project Zomboid]] mods on [[Steam]].]]
[[File:SpiffosWorkshop.png|link=https://steamcommunity.com/app/108600/workshop/|frame|right|Spiffo's Workshop is the home of [[Project Zomboid]] mods on [[Steam]].]]


Line 18: Line 18:
*[[Using mods]] - how to enable and configure mods.
*[[Using mods]] - how to enable and configure mods.
*[[Mod problems solution]] - what to do if mods do not work well or break the game.
*[[Mod problems solution]] - what to do if mods do not work well or break the game.
*[[Testing mods in multiplayer]] - guide about setting up the mod to work on the server.
<span style="font-size: 120%; font-weight: bold; color: green;">Tip: </span> join [https://discord.gg/theindiestone The Indie Stone Discord server] for get access to '''#mod_support''' channel, where you can ask question about using mods.
<span style="font-size: 120%; font-weight: bold; color: green;">Tip: </span> join [https://discord.gg/theindiestone The Indie Stone Discord server] for get access to '''#mod_support''' channel, where you can ask question about using mods.


Line 40: Line 41:
*'''Creating textures, pictures and icons''' - this direction complements the others. Models will need textures, items will need icons, the interface will need certain images, and maps will need textures for new tiles (new objects to be placed on the map).
*'''Creating textures, pictures and icons''' - this direction complements the others. Models will need textures, items will need icons, the interface will need certain images, and maps will need textures for new tiles (new objects to be placed on the map).
*'''Map creation''' - creating locations, buildings, and general environments for the game. See [[#Mapping]].
*'''Map creation''' - creating locations, buildings, and general environments for the game. See [[#Mapping]].
*'''Translations''' - translating the game to various languages, see [[#Translations]].
*'''Translations''' - translating the game to various languages, see [[Translations]].


<span style="font-size: 120%; font-weight: bold; color: green;">Tip: </span> Join [https://discord.gg/theindiestone The Indie Stone Discord server] to access the '''#mod_development''' chat, where you can ask any question about creating Project Zomboid mods.
<span style="font-size: 120%; font-weight: bold; color: green;">Tip: </span> Join [https://discord.gg/theindiestone The Indie Stone Discord server] to access the '''#mod_development''' channel, where you can ask any question about creating Project Zomboid mods.


===Working tools===
===Working tools===
*'''Text editors''' - used to edit scripts and write code. Preferably, use editors with Lua syntax highlighting - like [https://notepad-plus-plus.org Notepad++] or [https://code.visualstudio.com/ VS Code]
*'''Text editor''' - used to edit scripts and write code. Preferably, use editors with Lua syntax highlighting - like [https://notepad-plus-plus.org Notepad++] or [https://code.visualstudio.com/ VS Code].
*'''Image editor''' - used to create icons, textures for items and tiles. For example: [https://www.gimp.org/ GIMP], [https://www.adobe.com/ru/products/photoshop.html Photoshop] (paid)
*'''Image editor''' - used to create icons, textures for items and tiles. For example: [https://www.gimp.org/ GIMP].
*'''3D modeling''' - used to work on 3D models. For example: [https://store.steampowered.com/app/365670/Blender Blender]
*'''3D modeling''' - used to work on 3D models. For example: [https://store.steampowered.com/app/365670/Blender Blender].
*Latest [https://theindiestone.com/forums/index.php?/topic/59675-latest-tilezed-worlded-and-tilesets-september-8-2022/ TileZed, WorldEd, and tilesets] – TileZed can also be downloaded and compiled from [https://github.com/timbaker/tiled the source code on GitHub], or they can be installed (currently only for Windows), as [https://steamdb.info/app/380880/ Project Zomboid Modding Tools] if the game is owned on Steam.


====Modding tools====
====Modding tools====
Line 53: Line 55:
*[https://www.guidgenerator.com/ Free Online GUID Generator: for making GUIDs for modded clothing and outfits.]
*[https://www.guidgenerator.com/ Free Online GUID Generator: for making GUIDs for modded clothing and outfits.]


====Mapping tools====
===Resources===
*[https://theindiestone.com/forums/index.php?/topic/50425-latest-tilezed-worlded-and-tilesets-march-14-2022/ TileZed, WorldEd, and Tilesets] <small>(March 14, 2022)</small>
*[[Lua]] - introduction and guide to using Lua language.
*[https://theindiestone.com/forums/index.php?/topic/23816-latest-tilezed-worlded-and-tilesets-may-17-2018/&do=findComment&comment=270743 TileZed, WorldEd, and Tilesets] <small>(May 17, 2018)</small>
**[[Lua Functions]]
 
**[[Lua Events]]
===Basic Lua language===
**[[Lua Objects]]
*[[Lua Intro]] - an introduction to Lua
*[[Debug mode]] - explanation how to run the game in the debug (developer) mode and how to use it.
*[[Variables Assignments Datatypes]] - variables, Assignments and Datatypes
*[[Startup parameters]] - startup parameters to launch the game with.
**[[Variables Assignments Datatypes/Task one solutions|Task one solutions]] - ''test yourself solutions''
*[[Mod structure]] - explanation how the mod works and how to create a template for it.
*[[Arithmetic Operators]]
*[[Folders structure]] - description of files and folders that will be useful when developing mods.
*[[Relational and Boolean Operators]]
*[[File formats]] - documentation of file formats.
*[[Concatenation and Length Operators]]
*[[Tile properties]] - explanation of [[tile]] properties.
*[[If Statements and Functions]]
*[[Room definitions and item spawns]] - explanation of room definitions, used mainly for loot distribution.
*[[Loops]]
*[[Vehicle zones]] - explanation of vehicle zones.
*[[Local and Global Variables]]
*[[Procedural distributions]] – list of procedural distributions.
*[[Tables (modding)]]
*[[Game time]] - explanation about how time in game works and GameTime class.
*[[Looping Through Tables]]
*[[Decompiling game code]] - guide how to study the Java source code of the game.
*[[Lua Functions]]
*[[Adding new tiles]] - guide to making new tiles.
*[[Lua Objects]]
*[[Scripts guide]] - guide for scripts (.txt files) for items, recipes, and translations.
*[[Lua Events]]
*[[How to make a clothing mod]] - guide on how to add clothing mods.
 
===Other resources===
{{Improve}}
*[[Mod structure]] - how the mod works and how to create a template for the mod
*[[Folders structure]] - description of files and folders that will be useful when developing mods
*[[Debug mode]] - how to run the game in developer mode and use it
*[[Startup parameters]] - startup parameters to launch the game with
*[[Scripts guide]] - scripting guide (.txt files) for items, recipes, and translations
*[[File formats]] - file formats documentation
*[[Decompiling game code]] - how to study the Java source code of the game
*[[New Tiles]] - making new tiles
*[[Testing Mods in Multiplayer]] - guide about setting up the mod to work on the server
*[[GameTime]]
*[[List of Tiledefs in use by mods]]
*[[List of Tiledefs in use by mods]]
*[[Room definitions]]
*[[Tile Properties]]
*[[Vehicle Zones]]


==Mapping==
==Mapping==
{{Main|Mapping}}
{{Main|Mapping}}
{| class="pztable-com sortable" style="width: 50%;"
{| class="wikitable theme-blue sortable" style="width: 50%;"
! style="width: 60%;" | Tutorial
! style="width: 60%;" | Tutorial
! style="width: 20%;" | Author
! style="width: 20%;" | Author
Line 152: Line 138:
| Atoxwarrior
| Atoxwarrior
| June 26, 2016
| June 26, 2016
|-
|}
|}


Line 161: Line 148:
*[https://drive.google.com/file/d/1PRsZfmE3Ov7U9Nc_mSBv62fMFROpIIct/view?usp=sharing An app for moving the cells in maps.]
*[https://drive.google.com/file/d/1PRsZfmE3Ov7U9Nc_mSBv62fMFROpIIct/view?usp=sharing An app for moving the cells in maps.]
*[https://discord.com/channels/136501320340209664/279303619277488128/946017802647658586 A more recent base map for PZ.]
*[https://discord.com/channels/136501320340209664/279303619277488128/946017802647658586 A more recent base map for PZ.]
 
*[https://github.com/geromet/PZTools Distribution Explorer. Super "early access"]
==Localization==
If you plan to support other languages in your mod, you should save the text file using the proper encoding format that corresponds to the language you're translating. If you don't, characters will not appear correctly. Language information can be found in media/lua/shared/Translate/%lang%/language.txt files.
 
{| class="pztable-com sortable"
|- style="font-weight:bold;"
! Code
! Language
! Encoding
! Category
|-
| AR
| Espanol (AR) - Argentina Spanish
| Cp1252
| Western
|-
| CA
| Catalan
| ISO-8859-15
| Western
|-
| CH
| Traditional Chinese
| UTF-8
|
|-
| CN
| Simplified Chinese
| UTF-8
|
|-
| CS
| Czech
| Cp1250
|Central European
|-
| DA
| Danish
| Cp1252
| Western
|-
| DE
| Deutsch - German
| Cp1252
| Western
|-
| EN
| English
| UTF-8
|
|-
| ES
| Espanol (ES) - Spanish
| Cp1252
| Western
|-
| FI
| Finnish
| Cp1252
| Western
|-
| FR
| Francais - French
| Cp1252
| Western
|-
| HU
| Hungarian
| Cp1250
| Central European
|-
| ID
| Indonesia
| UTF-8
|
|-
| IT
| Italiano
| Cp1252
| Western
|-
| JP
| Japanese
| UTF-8
|
|-
| KO
| Korean
| UTF-16
|
|-
| NL
| Nederlands - Dutch
| Cp1252
| Western
|-
| NO
| Norsk - Norwegian
| Cp1252
| Western
|-
| PH
| Tagalog - Filipino
| UTF-8
|
|-
| PL
| Polish
| Cp1250
| Central European
|-
| PT
| Portuguese
| Cp1252
| Western
|-
| PTBR
| Brazilian Portuguese
| Cp1252
| Western
|-
| RO
| Romanian
| UTF-8
|
|-
| RU
| Russian
| Cp1251
| Cyrilic
|-
| TH
| Thai
| UTF-8
|
|-
| TR
| Turkish
| Cp1254
| Turkish
|-
| UA
| Ukrainian
| Cp1251
| Cyrilic
|}


==Notes==
==Notes==
Line 324: Line 166:


For example: with clothing mods fileguidtable.xml works for Windows and Mac, but will cause serious issue for Linux as it will be looking for "fileGuidTable.xml", as that is how the vanilla PZ file is capitalized. Although Client, Server, and Shared will work for the lua directories for non-Linux systems. it won't work for Linux; consequently use the vanilla capitalization, "client", "server" and "shared" for those.
For example: with clothing mods fileguidtable.xml works for Windows and Mac, but will cause serious issue for Linux as it will be looking for "fileGuidTable.xml", as that is how the vanilla PZ file is capitalized. Although Client, Server, and Shared will work for the lua directories for non-Linux systems. it won't work for Linux; consequently use the vanilla capitalization, "client", "server" and "shared" for those.
==See also==
*[[Mods]]
*[[Talk:Modding]] – for some raw guides to extracting images. The text needs to be cleaned up.


==External resources==
==External resources==
{| class="pztable-com sortable" style="width: 50%;"
{| class="wikitable theme-blue sortable" style="width: 50%;"
! style="width: 60%;" | Tutorial
! style="width: 60%;" | Tutorial
! style="width: 20%;" | Author
! style="width: 20%;" | Author
Line 390: Line 236:
*[https://theindiestone.com/forums/index.php?/topic/28633-complete-vehicle-modding-tutorial/  Complete Vehicle Modding Tutorial on TIS forum.]
*[https://theindiestone.com/forums/index.php?/topic/28633-complete-vehicle-modding-tutorial/  Complete Vehicle Modding Tutorial on TIS forum.]
*[https://github.com/MrBounty/PZ-Mod---Doc/blob/main/Useful%20links.md Useful links.]
*[https://github.com/MrBounty/PZ-Mod---Doc/blob/main/Useful%20links.md Useful links.]
*[https://pzwiki.net/wiki/New_Tiles Making New Tiles for PZ.]
*[https://theindiestone.com/forums/index.php?/topic/38165-quick-guide-how-to-mod-the-loot-distribution-system-distributionslua-proceduraldistributionslua/ How To Mod The Loot Distribution System.]
*[https://theindiestone.com/forums/index.php?/topic/38165-quick-guide-how-to-mod-the-loot-distribution-system-distributionslua-proceduraldistributionslua/ How To Mod The Loot Distribution System.]
*[https://github.com/demiurgeQuantified/PZEventDoc/blob/develop/docs/Events.md An up-to-date (41.78) reference to events and hooks.]
*[https://github.com/demiurgeQuantified/PZEventDoc/blob/develop/docs/Events.md An up-to-date (41.78) reference to events and hooks.]
*[https://github.com/demiurgeQuantified/PZEventStubs PZEventStubs: Lua stubs for events and hooks.]
*[https://github.com/demiurgeQuantified/PZEventStubs PZEventStubs: Lua stubs for events and hooks.]
*[https://github.com/demiurgeQuantified/PZModdingGuides/blob/main/guides/SandboxOptions.md A reference for adding custom sandbox options.]
*[https://github.com/demiurgeQuantified/PZModdingGuides/blob/main/guides/SandboxOptions.md A reference for adding custom sandbox options.]
*[https://github.com/demiurgeQuantified/PZModdingGuides/blob/main/guides/GameTime.md GameTime and deltas: An explanation of time deltas and their applications in modding.]
*[https://github.com/demiurgeQuantified/PZModdingGuides/blob/main/guides/ScriptFunctions.md Documentation on functions linked to item/recipe/vehicle scripts.]


===Clothing modding resources===
===Clothing modding resources===
Line 405: Line 252:
*[https://github.com/Konijima/PZ-Community-API/blob/master/Contents/mods/CommunityAPI/media/lua/shared/CommunityAPI/IsoUtils.lua  isoRangeScan: This is an utility function meant for large scale scans of isoGridSquares around a given IsoObject. The scans are done fractally - that is to say from a center (or centers) outward to fill a larger area.]
*[https://github.com/Konijima/PZ-Community-API/blob/master/Contents/mods/CommunityAPI/media/lua/shared/CommunityAPI/IsoUtils.lua  isoRangeScan: This is an utility function meant for large scale scans of isoGridSquares around a given IsoObject. The scans are done fractally - that is to say from a center (or centers) outward to fill a larger area.]
*[https://theindiestone.com/forums/index.php?/topic/21923-itemzed-updated-11b/ ItemZed: for editing Item scripts and distribution files (out of date, needs to be updated to work properly with build 41)]
*[https://theindiestone.com/forums/index.php?/topic/21923-itemzed-updated-11b/ ItemZed: for editing Item scripts and distribution files (out of date, needs to be updated to work properly with build 41)]
{{Navbox modding}}

Latest revision as of 13:33, 15 March 2024

ModdingModding
UI Tick.png
This page has been revised for the current stable version (41.78.16).
Help by adding any missing content. [edit]
Spiffo's Workshop is the home of Project Zomboid mods on Steam.

Terms & Conditions

By playing Project Zomboid, you agree to the Terms & Conditions.

By modding Project Zomboid, you also agree with the Modding Policy.

Key restrictions

  • The Indie Stone reserves the right to implement any features in the game irrespective of whether mods exist that accomplish the same goal.
  • Modders are solely responsible for their mod, including (but not limited to compliance with any hosting platforms (such as Steam Workshop). They are also responsible for obtaining third party consents for any third party materials in the mod. Legally, we have to ask that modders to ‘represent and warrant’ (i.e. promise legally) that their mod is their own original work and any third party contents are fully and properly licensed by the modder.
  • Creation of mods is subject to our modding policy, which may be updated from time to time with any technical requirements regarding how PZ mods must work.
  • Project Zomboid modders are free to receive monetary/gift donations from the players who use their releases, and appreciate the time and effort put into them. However, having mods created exclusively for those who choose to donate (or separate ‘in-mod’ content and bonuses) is not allowed. Mod creators cannot sell modifications to Project Zomboid.

Installing and using mods

Tip: join The Indie Stone Discord server for get access to #mod_support channel, where you can ask question about using mods.

To start a mod up, first make sure the mod is installed in the correct directory. Once you have done this, start up Project Zomboid. Once you get to the main menu, down at the bottom of the screen when you see menu options you will also find a menu option called MODS. Click on it, which will then lead you to the mod menu.

In there you should see the list of mods that you have installed. Double click on the mod you wish to start and a green tick should appear next to the mod.

Next thing to do is shut down Project Zomboid and start it up again. Once started your mod should now be ready to go. Instructions on using the mod are usually contained in README's or information in the thread.

Current mods

Main article: Mods

Creating mods

In modding for PZ, there are several main directions:

  • Changing scripts - scripts in the game describe the parameters of items, recipes, and vehicles. Making a mod that changes the values ​​of items, vehicles, a recipe, or adds a new item is not a difficult task. This does not require programming knowledge; any text editor may be used. Scripts are in .txt files and have a specific structure.
  • Writing Lua code - the main direction in PZ modding. Most mods contain Lua code. PZ is developed mainly in Java and Lua, so using Lua code in mods is closely related to the exploration of Java and Lua game code. When creating more complex mods, you will have to dive into the decompiled Java code of the game. We will cover the basics of the Lua language, but you should be familiar with the basics of programming. A general understanding of the syntax of the Java language is also desirable, as it may be necessary to explore the game code to figure out how some functions work.
  • Creating 3D models - at the moment, with the help of mods, you can add new models of vehicles, weapons, ordinary items, and clothes to the game. The game uses 2 model formats - .X and .FBX. For us to create mods with models, the .FBX format will be enough.
  • Creating animations - creating animations for the character. Includes creating an animation file and integrating it into the game.
  • Creating textures, pictures and icons - this direction complements the others. Models will need textures, items will need icons, the interface will need certain images, and maps will need textures for new tiles (new objects to be placed on the map).
  • Map creation - creating locations, buildings, and general environments for the game. See #Mapping.
  • Translations - translating the game to various languages, see Translations.

Tip: Join The Indie Stone Discord server to access the #mod_development channel, where you can ask any question about creating Project Zomboid mods.

Working tools

Modding tools

Resources

Mapping

Main article: Mapping
Tutorial Author Last updated
The One Stop TileZed Mapping Shop RingoD123 January 30, 2017
How to Combine Map Mods RingoD123 June 11, 2017
Full list of current Room Definitions RingoD123 February 7, 2014
Making new room definitions RingoD123 June 10, 2017
Mapping Tutorial's and Videos Thuztor April 20, 2015
Mapping Tutorial's and Videos (Outdated) Thuztor September 12, 2017
VegMap to Testing Custom Map Cpt_Paradox January 28, 2017
Making rooms with the place wall tool, item spawns, ortho and more! Cpt_Paradox November 30, 2017
Sliding Glass Doors, New Textures, Here's How! Cpt_Paradox November 30, 2017
How to make a map Start to Finish Full Video Tutorial BlackBeard January 30, 2017
All player made Building Archives BlackBeard May 31, 2019
Custom texture packs and tile definitions EasyPickins June 5, 2014
Card's Tutorial for Terrain Generation Cardenaglo February 22, 2017
Video Tutorials mapping Atoxwarrior June 26, 2016

Mapping resources

Notes

A note regarding optimization and timestamps

This numerical information in the console.txt output log is a timestamp, such as in "LOG  : General , 1669904231941" If you need to evaluate the runtime impact of code it is a good metric.

A note regarding updating and/or changing mods

Removing .txt and .lua files from a mod before updating them to the steam workshop may result in file mismatch errors etc. on account of steam not automatically removing said files from clients and/or servers. One solution is manually deleting these files from the installation directories of the server and/or clients. As well modders can avoid this issue by keeping those files, instead of removing them, but editing those files so they are empty instead of having any functional content. Including commented text explaining the reason for this in the files is also a good practice.

A note regarding Mac, Linux and case sensitivity

Note that, unlike Windows, Mac and Linux OS are case-sensitive regarding file and directory names. Although people playing PZ on Linux is uncommon, it's far more common with server hosting services. To avoid issues, make sure and follow the vanilla PZ capitalization conventions for file and directory names.

For example: with clothing mods fileguidtable.xml works for Windows and Mac, but will cause serious issue for Linux as it will be looking for "fileGuidTable.xml", as that is how the vanilla PZ file is capitalized. Although Client, Server, and Shared will work for the lua directories for non-Linux systems. it won't work for Linux; consequently use the vanilla capitalization, "client", "server" and "shared" for those.

See also

  • Mods
  • Talk:Modding – for some raw guides to extracting images. The text needs to be cleaned up.

External resources

Tutorial Author Last updated
Project Zomboid Modding Guide (WIP) Fenris Wolf January 22, 2023
RoboMat's Tutorials RoboMat July 24, 2013
Java Scripting Guide (very out of date, only the item and recipe sections seems to be applicable to current builds) Lemmy101 July 24, 2013

Javadoc reference to Project Zomboid codebase

Typescript modding

You can now use Typescript language to write your mods which are then compiled into lua. However it is not necessary to use Typescript to write mods.

Important additional modding resources

General additional modding resources

Clothing modding resources

Old and more specific additional modding resources