Indie Stone logo


Expanded Modding Support Details

January 12, 2012

Hello modding fans!

In this blogpost we’ll detail an addition to the modding support in the next update. In one word: LUA.

Project Zomboid now fully supports LUA scripts within the modding interface. In case you do not know what LUA is, it’s basically a programming language where the code is simply put in text files instead of being compiled into an exe, meaning it is open for modders to play about with, modify and learn from. Project Zomboid currently has a really simple scripting system for creating new inventory items and conversations or cutscenes, but the power of LUA goes way way beyond that.

Barring a few accidental omissions no doubt, the next version of Project Zomboid will allow modders near unlimited access to the entire inner workings of the game, opening up 10000x the mod possibilities. Modders will be able to code their own game logic to implement new game mechanics, item effects, or practically anything else they could dream up. There will of course be exceptions, particularly for the first version, but with the release of the LUA scripting we should see much more in-depth and powerful mods emerge in the weeks and months afterwards, with each update providing more and more power.

Here are a few (slightly silly) examples that should hopefully show a few things that are now open to modders:

1) Live map editing

This code adds a lua function as an event for ‘OnGameStart’ which cycles through the entire map, tile by tile, gets a list of every object on that tile and loops through those, and any with collidable properties it deletes. Modders can therefore modify the map in any way they like before or during the game.

function DeleteAllWalls()
	local world = GetWorld();
	local cell = world:GetCell();	

	if cell == nil then
	 print ("Failed to get cell");
	 for x = 0, cell:GetWidth() do
	   for y = 0, cell:GetHeight() do
 	     for z = 0, cell:GetMaxFloors() do
		local square = cell:GetGridSquare(x, y, z);
		if square ~= nil then

		  local objects = square:GetTileObjects();

		  if(objects ~= nil) then
		    for k,v in ipairs(objects) do
		      local properties = v:GetProperties();
		      if(properties ~= nil) then
			if properties:Is(PropertyType.solid) or
			    properties:Is(PropertyType.solidtrans) or
			    properties:Is(PropertyType.collideN) or
			    properties:Is(PropertyType.collideW) then






2) Direct graphics drawing: ESCAPE THE WILL

Here we add The Will Porter as a ghostly apparition that follows your mouse! This shows that, as well as draw into the isometric map with tiles, modders can now draw textures directly to the screen, allowing the potential for UI changes or other graphical mods.

x = 0;
y = 0;
function DrawTheWill()
	local texture = GetTexture("media/ui/will.png");
	local core = GetCore();

	if texture ~= nil then

	local centreX = x + (texture:GetWidth() / 2);
	local centreY = y + (texture:GetHeight() / 2);

	x = x + ( (GetMouseX() - centreX) / 5.0);
	y = y + ( (GetMouseY() - centreY) / 5.0);




3) Item behaviours: EXPLODING APPLE OF DOOM

Here we add exploding suicide apples to the game! We add an event to the apple that when eaten will explode, killing those within a radius and setting fire to random tiles.

function DoExplodingApple(character, item)

   if item:GetType() == "Apple" then

      local radius = 30;
      local numFires = 300;

      local cell = GetWorld():GetCell();

      local objects = cell:GetObjects();
	for k,v in ipairs(objects) do
	   if character:DistTo(v) < radius and v:IsCharacter() then

	GetSoundManager():PlayWorldSound("explode", character:GetSquare(), 0, 20, 1.0, false);

	for i = 0, numFires do
	   local sq = cell:GetGridSquare(ZombRand(character:GetX()-radius, character:GetX()+radius),
	  		                 ZombRand(character:GetY()-radius, character:GetY()+radius),
					 character:GetZ() );

	    if sq ~= nil then




We couldn’t possibly have expected how many mods would become available for Project Zomboid so quickly. We were genuinely blown away, and cannot wait to see what the modders can do when they get their hands on this!

Related Posts