STEAM WORKSHOP MODDING

By Sebastian Main

A showcase of my Steam workshop mods. Currently I have only one mod published that required coding, but I'd love to show it off!

Project Overview

A detailed look at the purpose and approach of this project

The Project

This mod simply addresses the issues when combining multiple other mods for one of my favorite games, Project Zomboid. A thrilling and the most realistic (despite the isometric artstyle) zombie survival simulator set in 1993 Knox County, Kentucky. By using this mod, it will allow NPC survivors to spawn in using more post-apocalyptic outfits contrary to their usual day one outbreak outfits. I like to play the game with a more of a 'Last of Us' setting so prior to my mod, it broke my immersion heavily to see NPCs with undamaged clothing ten years into the apocalypse.

Thus I developed this mod to fix this issue and finally make my playthroughs coherent when I find new survivors to recruit against the undead!

Date
July 17th, 2024
Category
Game Modding
Role
Developer

Our Approach

I first broke down exactly how to mod the game. As Project Zomboid runs on a Java and Lua foundation for the base game. Quickly I found out that I needed to understand Lua to create mods as that is what the modding community uses to make thousands of mods. So I began by studying other mods and replicated their processes to create my own mod.

With all my efforts I eventually got my mod published at as of April 2025, the mod has over 27k views, 3,200+ downloads, and 63 (5) star reviews (Steam adds 5 Star Rating at >100 Reviews)!

Tech Stack
Lua
Timeline
1 Month
Purpose
Rebuilt Website with Functionality for the Fraternity

Technical Details

A deeper look at the development process and implementation

Development Process

I began creating the mod by creating the two files that I wanted to have overwrite the base NPCs. The SuperSurvivorSuitsUtilities and the SuperSurvivorWeaponsList. The SuitsUtilities file allowed me to overwrite the base outfits by calling item IDs directly from the Project Zomboid database. Things like hats, gloves, shirts, pants, socks, and other accessories.

This is crucial for complete customization of all the NPCs. Furthermore, I can also create multiple outfits for NPCs in different rarities (where the rarer an outfit is, the less likely it'll be chosen when an NPC spawns). There are 5 different levels of rarity (Most rare to most common): Legendary, Very Rare, Rare, Uncommon, and Normal. With an additional variable called "Presets" where when specific NPCs are spawned in, like a 'soldier' for example, they'll always spawn with one of the preset outfits. Currently there are 8 preset outfits for militia, farmers, police, etc. Each rarity of outfits also has ~9 outfits. Totaling at 69 outfits currently. Each one is unique and allows for a dynamic experience when coming across survivors. Some may be very geared and could put up a fight in a confrontion. While others are wearing basic rags and will need help rather than harm.

Conversely, the WeaponsList file allows survivors to dynamically spawn with different weapons based on how long they've been alive. In Project Zomboid NPCs aren't directly spawned in front of the player. They are actually spawned in meta-data until the player or NPC are near each other. That is when the weapons and outfit spawning are determined. Once the NPC is loaded in, if they have survived '<'48 hours then they get basic weapons. Like a stake for example. While if they have survived '>' 48 hours, they get better weapons like pistols or shotguns. This allows for easy, uncompromised weapon spawning even if users have other weapon mods installed.

Technical Challenges

The biggest challenge when creating this mod was trying to understand the Project Zomboid database and how to reference the items in my Lua file. It was a quick challenge to overcome though by using online documentation on the Project Zomboid wiki to find item IDs.

Once I got the items I wanted to add to an NPC it basically become a cookie-cutter mold for each outfit!

// Example code snippet
local hoursSurvived = math.floor(getGameTime():getWorldAgeHours())

--	if hoursSurvived > 48 then
--  	table.insert(MeleWeapons,"Base.WoodAxe");
--  	table.insert(MeleWeapons,"Base.Plunger");
--  	table.insert(MeleWeapons,"Base.Stake");
--  	table.insert(MeleWeapons,"Base.Stake");
--	end

Key Features

  • Dynamic Outfit Selection
  • Dynamic Weapon Selection
  • Documentation for future users to add their own outfits
  • Published and Open Source

Lessons Learned

Working on this passion mod made me develop my connection deeper to one of my favorite games. While also allowing me to branch out my coding expertise and try something new. I enjoyed getting to be creative when designing this mod and allowed it to be compatible for future game updates!

INTERESTED IN MY WORK?

I'm available for freelance projects and would love to discuss how I can help bring your ideas to life.

GET IN TOUCH