1. Project Zomboid
  2. News

Project Zomboid News

BaZil Brush



Hey all, here’s a quick update on what we are all up to.

Our initial plan was to release our next 41.72 patch to the Unstable beta today, but annoyingly last night’s internal playtest had too many niggles with vehicle gameplay for us to comfortably let you loose on it.

This is slightly annoying in terms of today’s blog, but probably not quite as annoying as you happily downloading the new version only for MP passengers to be stuck revving on the tarmac while their drivers whizz off towards Louisville.

Still, once the MP Strike Force have checked everything out and we’ve had another (more successful) test then this is some of the stuff that will be punted out for you to try out:

  • As mentioned in the last blog, the opt-in ability to see fellow MP players in your faction or safehouse on your in-game map.
  • A huge range of new and improved admin powers that should breathe a little more life into online play. First and foremost of these is a brush tool that will allow admins to create tiles, walls, fire, smoke, water etc. in-game.

    There’s also the ability to easily trigger thunder, a more synced health panel, improved spawning of vehicles and trailers and the ability to change player weights. Also, also are more zombie-attracting options, improved zed spawns and some powers over whether doors are locked or not.

    Here’s a quick video Aiteron has made to show it all off:
    [previewyoutube][/previewyoutube]
  • Another more minor, but quite pleasant all the same, addition from Aiteron is the possibility of adding icons to the context menu. As seen here.



  • New loot maps. Previously we didn’t have any loot maps for Louisville, but Tim has now integrated a bunch from the hand of Pat_Bren into the loot table. There are nine different maps in all, which means that as well as the usual ‘treasure map’ aspects you will be able to reveal a ninth of the Louisville map upon reading them.


  • Also of note in .72 is an improvement to the way in which mod errors are reported. We have added a list of mods to the pause menu, and if one of them is causing errors and ‘the red box of doom’ then the culprit will be highlighted within the list.
  • Perhaps of greater import to mod authors and our tech support team, however, is the improved lua error log that goes with the above: this will show if any files reported in call stacks are overridden by mods. We hope that this will allow modders, players and our own community liaison peeps to easier find mod conflicts and other issues.



[h3]SWEAT THE SMALL STUFF[/h3]
While it’s not exactly excitement dynamite, we know, this week we hit a point at which our internal tasklist board got a bit… silly. When you have been making a game for as long as we have there is a tendency for minor tasks, small bug fixes and ‘easy win’ suggestions to stack up, and up, and up…

The boards were just clogged, and it was hard to see the wood for the trees – and as such we pulled some coders from their features to blitz through and give our testing and production staff some temporary relief. Not sexy: we know, but also necessary for the sanity of some of our team.

This sort of stuff:


Having made a sizable dent in this sort of bug, everyone is now back at their usual post – but ‘Enforced Small Task Clearance Week’ also culminated in an event that will hopefully mean that we don’t have to have one of these mandated periods again in future.

Prolific modder Blair Algol has joined the team, and his role will be clearing out as many of the remaining hundreds (!) of these minor (but sometimes time-consuming) issues as he can.

Blair’s many mods touch so many different areas of the game that it seemed like a very natural fit for such a duty, while he also, of course, comes packaged with many ideas of how to make modding life easier for others in the community too.

Once the boards have been cleared, and Blair has a firmer grip on the codebase, it’s also our hope that he will be able to bring some of his own ideas and ingenuity into the game proper.


[h3]SOUND PHASE III[/h3]
Much like the Marvel movies, our soundscape improvement operations have worked in phases – and we recently had the meeting that kicked off Phase 3. The following are Noiseworks/Formosa’s next primary missions:

  • Improvements to how the sound system deals with multiplayer characters and sound priorities. Primary work here is to try and solve the issues where sounds drop out due to clashes in sound priorities and limits when multiple players are around.
  • Expand the reactive music beyond action moments. The ultimate goal is to allow the other non-action tracks to evolve and change: triggered by walking into buildings, looting a container, or any other little action that may trigger a change in the track that’s playing. Likewise making sure that they all also blend more organically between each other.
  • Gameplay related sound effects, like modelling the realistic effects of using firearms in enclosed spaces without ear protectors. Also: improved noises for large crowds of zeds, sprinters and bullet world impacts if the coding team can provide their support for implementation.



[h3]OTHER STUFF[/h3]
We are currently debating whether to release the map team’s current work (fixes, polish, improved farm buildings and agricultural areas, more defined Louisville upper class suburbs) in a 41 patch, or whether to outright say that the next export will be for 42 later down the line – alongside some sizable planned expansion into other towns and conurbations that would be beyond the edges of our current area. More on that, and where we are taking the Knox Event location-wise, in future blogs.

As we mentioned last time, we’re coming off the back of Turbo’s serious illness currently – so it’s been something of a month of consolidation rather than massive exciting strides ahead.

That said, sometimes strides ahead come in the form of things that will pay off in the far-flung future. Ever since the success of the 41 release we have had a lot more resources at our command, and have been able to invest it in both middleware that could bring PZ to new heights – and the talent to integrate it with our codebase.

As we all know, one of the weakest things about PZ is the UI. We all get on with it fine, but let’s face it: it aint a looker, and it can be a bit clunky, fiddly and slow. We’ve always said we’d give it an overhaul, but it’s always been a daunting prospect.

Since March, alongside our friends at General Arcade, we have been experimenting with some super fancy AAA high-end UI tech middleware that will make this process easier, and will make the end result better.

For the past few months we’ve been making sure that it’s compatible with the game, doesn’t negatively impact performance and will still allow for lua UI for our modders – and it has been this week that we feel comfortable enough to say out loud to each other that it’s going to work, and is safe to proceed.

So next time you see someone moaning that the PZ UI isn’t exactly glamorous – just tell them ‘they know, and it’ll take a while – but they’re working on it’. It’ll be some considerable time till we talk about this again, but we just wanted to let you know that this is another iron that we have in the fire.


Today’s pile-up campfire from Mr.Crab763. A changelist of all our pre-release and post-release patches since the 41 beta began can be found here. The Block of Italicised Text would like to direct your attention to the PZ Wiki should you feel like editing or amending something, and the PZ Mailing List that can send you update notifications once builds get released. We also live on Twitter right here! Our Discord is open for chat and hijinks too. Want to work with us? Details here.

Bad Red vs. Good Green



Hey all, here’s a Thursday round-up. We released version 41.71 last Thursday. We’re big on Thursdays around here.
41.71 contained a huge range of stuff, but topline features included: new and improved dynamic action music, a raft of improvements for Steam Deck players, new items, scarecrows, less wobbly and less performance-costly 3D items on your safehouse floor, loads of MP improvements under the hood, the fabled one-watch VHS video fix, new ambient and shutdown noises, modding improvements and tons more.

Better to read the forum release post than a long paragraph in the blog, I guess, if you are in need of a catch-up.

Since last week we hotfixed some issues with sound cut-outs on busy servers and with rapid-fire weapons, and so now we find ourselves moving onto…


[h3]41.72[/h3]
Seeing as we already have a fair amount of MP changes, fixes and balance in the pot for .72 at the moment it feels like it won’t be too long until we move it into the Unstable beta – unless of course a more disruptive feature comes to the boil over the next week or so and requires added internal testing.

The current changelist for what we have in this patch can be seen here if you are interested.

Primary items of note involve a lot of fixes and polish to radio use in-game, improvements to the representation of weapon-part upgrades in 3D models, and various issues with generators and batteries.

Also in the patch will be the opt-in ability for fellow faction and safehouse members to be visible on your in-game map.



And also some support for our colour-blind survivors, who will now be able to choose their favoured new text colours instead of BAD RED and GOOD GREEN. Thanks to Fox for this one.




[h3]BEYOND[/h3]
There are many advantages of having a tight small team when making a game like PZ. However, one of the biggest disadvantages is that when serious ‘irl’ stuff happens to any of us it makes aspects of development difficult. We’ve never really mentioned it before, and still won’t go into any detail, but this was one of the reasons that Build 41 itself took a long time to come to complete fruition.

The reason we are bringing this up is because one of the primary architects of the revamped B42 crafting system, Turbo, has been very ill (and often hospitalized) for much of the last three-four months.

Turbs said it was okay to let you all know this, as it clearly has meant that while RJ’s work on domestic animals and some roaming beasts has been rocketing on ahead – Turbo’s own work on the post-apoc crafting, tech-trees and recipes has had to be on hold.

We are so, so relieved and happy that Turbo’s treatment led up to an operation and a complete return to health – to the extent that he has been back working with us again this week. It’s been awesome having him about the place again.

We don’t yet know how much this will impact on build content, timings etc, and will be working out what’s what in the week or two ahead – tho B43 stuff is being worked on in parallel, so it hasn’t been detrimental to that.

Sorry if this has been a bit of a ‘too much info’ update, it’s probably not something you’d catch in a Call of Duty blog, but with Turbo’s permission, we thought it would give everyone a more accurate insight into where we’re at with things.

We also hope that everyone will join us in wishing Turbs continued good health – a phrase for which the Dutch probably have their own term for and that we will google later on.

To circle back around to more developmental matters-at-hand, here’s an image from RJ and Tim’s work on ways in which our non-domestic animals will roam the map. These are AnimalZone paths that share points, and allow for both long paths that cross cell boundaries and branching paths too.




[h3]MAPPING[/h3]
We love seeing the maps our community produces – each with their own flavours, design and challenge. To support all our mappers today we are releasing almost 1500 buildings and associated assets of our own in-game housing, garages, sheds and patio sets for use in community maps.

These should help map-builders flesh out their worlds without having to rely purely on their own constructed (and shared community) houses, flats and outbuildings.

If you are a mapper then you can find the released assets here.

We are not releasing ‘special’ and governmental/military buildings – but there are many, many houses, apartments, sheds, shacks, shops and restaurants here for folks to use in their own apocalyptic zombie nightmares.

In terms of our own future map improvement and expansion, meanwhile, check out what Ayrton has been doing to our Louisville rich districts.

“To bring more diversity to some locations of Louisville, I am converting some streets or blocks into Victorian-style districts, it should enable us to add a new layer of complexity to the urban plan with areas that are more/less wealthy, ancient, etc. Those new tiles are also being added across existing relevant buildings.”



Elsewhere Aiteron is playing around with his improved fishing system to mix in some added ‘fun quota’ alongside the improved anims/visuals we showed last time round. Long-term work on server-side items and timed actions for MP continues, and the Noiseworks/Formosa soundscape revolution continues with their next missions due to be discussed in the coming week.

Pat_Bren is also, meanwhile, crafting a bunch more annotated survivor maps to bolster our current stock – and also to cover Louisville and other newer areas of the Knox Event map.


[h3]JOB AD AGAIN[/h3]
Following the success of Build 41, we find ourselves in a position where we can hunt down other experienced Games Programmers to join the Project Zomboid team.

We are looking for coders willing and able to refresh some of our older systems, polish the existing ones and then to delve further into the features that will be part of the Knox Event’s exciting future.

Interested applicants should check our jobs page, but we should underline that we currently don’t have any entry-level positions available. You will need to have a fair amount of experience we are afraid.

This week’s touching crime scene from hp.tf. A changelist of all our pre-release and post-release patches since the 41 beta began can be found here. The Block of Italicised Text would like to direct your attention to the PZ Wiki should you feel like editing or amending something, and the PZ Mailing List that can send you update notifications once builds get released. We also live on Twitter right here! Our Discord is open for chat and hijinks too.

Project Zomboid update 41.71 adds dynamic combat music

One of the things that indie survival game Project Zomboid does phenomenally well is tension, proving you don't need a first-person perspective or ray-traced lighting effects to scare someone. The latest Project Zomboid update, version 41.71, adds a new dynamic music system that will dial up the tension during your ultimately futile fights against Kentucky's ravenous dead.


With update 41.71, Project Zomboid gets a new 'action music system.' Developer The Indie Stone says that rather than simply switching tracks during combat, you'll now hear a reactive musical score that can "increase and decrease in intensity during combat and other dramatic moments." So from now on, the score will crank up the tension as more zombies head your way when you're waylaid by a couple stragglers behind a liquor store or out in a field.


The patch adds some more nice additions and tweaks, too: there's a "compilation" of new hair types, plus an option for stubble in the hair and beard sections of the character creator - terrific for that 1950s comic strip tough guy look.


Read the rest of the story...


RELATED LINKS:

Project Zomboid NPCs will have complex, dynamic stories

Project Zomboid now supports 100-player servers, sort of

Project Zomboid multiplayer - what you need to know

41.71 - Released

41.71 compiled changelist


(Includes changes from builds 41.69 to 41.71 from the unstable branch.)


[h3]NEW[/h3]
New action music system
Instead of switching between tracks mid-combat, the music is reactive and can increase and decrease in intensity during combat and other dramatic moments.

Added "Stubble" checkboxes to the Hair and Beard sections in the character-creation ui.
Added new items + updated 3D models
Added new forage items

Added the skeleton mannequin and scarecrow.
Added additional item categories and addressed some blunders
Added compilation of new hair types
Added option to "add all" to partially full Thread, Duct Tape, Twine etc
Added media/scripts/mannequins.txt which describes the model/texture/animation/etc for different mannequins.
Added BackupsOnVersionChange server option.

Added a second set of translations to the Survival Guide that are displayed when using a controller.
Added formatting to rich text, where XXX is the name of a Joypad.Texture.XXX texture.
Device options can now be opened when radio is on floor, in loot window or when radio just dropped from inventory

Added methods Texture.saveToCurrentSavefileDirectory(filename) and Texture.saveToZomboidDirectory(filename).
The filename may contain folder names, but not "..", to prevent saving to arbitrary locations.
These methods replace the broken Texture.save(filename) method.

Clicking and holding the left mouse button when placing items now locks the item to the clicked square.

Added XBOX_Menu.png and XBOX_View.png controller icons.
Added autouse new sack of gravel/sand/etc when pouring it on ground
Renamed Skill books so that they are easier to categorise.
ISClothingExtraAction now sets the item's job type to "Wear" and displays the progress of the action in the inventory window.
Updated credits
Updated community translations.

3D items now shown as textures instead of models. They shouldn't slide around as much when the player moves.
This helps a lot with framerates when there are 100 nails on the ground, for example.
In debug mode, holding the HOME key will disable the item atlas and render models as before.
Added IsoSprite.ItemHeight and IsoSprite.Surface debug options to display a rectangle around surfaces that items can be placed on.
Changed some ItemHeight and Surface tile properties.
Added a title bar to the mini-map window which allows the mini-map to be repositioned. The title bar and bottom row of buttons are hidden unless the mouse is over the mini-map.
Changed setHaveConstruction to apply only when constructing and placing objects


[h3]MODELS/ANIMS[/h3]
Changed Diamond Pattern Sweater Vest and V-neck Sweater Vest to use Sweater body location
Changed High Viz vest to use Sweater body location
Added a different animation played when destroying floors with a sledgehammer.


[h3]MP[/h3]
Removed vehicle physics from server (not client) to address some of the vehicular weirdness sometimes seen online
do not apply impulses to static / kinematic vehicles
limit changes of linear and angular velocities
Passengers no longer allowed to exit the car while moving

Enable packet processing on the server
MultiplayerSeeNonPvpZones debug only option is added

Local admin check is delayed after set-access-level command
Player update replay is commented out
Check for local admin kick is improved
Turn on player teleport logs on the server
Admin is not kickable from safehouse

Burnt or smashed vehicle check is added for dismantle vehicle command
Car wreck is removed via new "dismantle" vehicle command
Only admin can delete vehicle via "remove" vehicle command
Add vehicle UI allows creation of burnt and smashed car wrecks

Anti-cheat: fixed kick local admin issue
Cancel auth ticket on client shutdown

Toggle timer is disabled in non-pvp area

MultiplayerLightAmbient debug option is removed

Refactored SafetySystem
Server option process cycles for SafetySystemManager are simplified
PVP safety is now set to true when PVP is disabled on server
Set the default Host server memory to 4GB on 64-bit systems. This is the value displayed in the "Server memory" combobox which is saved in Zomboid/Lua/host.ini.
Don't create a backup of the server savefile in Zomboid/backups/version if BackupsOnStart=false. This backup is created when a new version of the game is released, but only for the first server that is launched.
Hide the black overlay when the sleeping players are killed

Improvements to how the MP game handles dead player bodies
DeadBody creation is moved to the server
DeadBody ID is added (World version 192)
Client does not allocate dead body ID

Fixed player death animations
Fixed desaturation being set for dead player
Fixed reanimation delay timer starting immediately without 10 seconds delay
Fixed reanimation delay of 0-30 seconds
Fixed player death final animation
Fixed possible null point exception when zombie bites dead player
Fixed dead body grabbing breaking reanimation
Fixed dead body id not changing when added to world
Fixed desync of safety cooldown timer
Fixed sleeping player not being woken up in case of kick from safehouse
Fixed PVP icon being located over the map
Fixed players who could be kicked when admin removes that player from safehouse
Fixed when a non-owner player quits a safe house, other players also getting kicked.
Fixed when safehouse owner goes offline, the non-safehouse-members get teleported immediately
Fixed PVP button becoming inactive for each player across the map if Admin shot\got shot by a player"
Fixed player being kicked when admin creates or removes PVP zone
Fixed SyncNonPvpZone packet send/receive loop
Fixed newly connected player not having all the non PVP zones
Fixed possible nullpointer in checkForNearbyRadios
Fixed zed texture 4 being used for player texture 5 instead of random index
Fixed reanimated player corpse disappearing
Fixed being able to turn pvp on when server option PVP set to false.
Fixed BufferUnderflowException on the server in SneezeCough packet processing
Fixed possible NullPointerException in ClientPlayerDB.getAllSavedPlayers().
Fixed player appearance sync in multiplayer with greater than 32 connections.
Fixed erosion growth not being suppressed when building floors or digging graves in multiplayer.
Fixed radio sync in MP
Fixed players outside the Non-PVP zone being able to kill a player with a bomb located in that zone
Fixed player being able to remove PVP button cooldown in non-PVP zone
Fixed unexpected anti-cheat kick just after leaving non-PVP zone
Fixed being able to turn pvp on when server option PVP is set to false.
Fixed player being able to remove PVP button cooldown when in a non-PVP zone. (Safety cooldown timer is now stored/restored when player enters/leaves non-pvp-zone)

VHS Fix
Fixed listened-to media lines being saved globally instead of for each player. This could add over 200KB to each player's saved data if every line is listened to.
Fixed ClientPlayerDB handling of WorldVersion.
Transfer known media lines from recorded_media.bin to the player on the first load.
Check for null arguments to RecordedMedia.hasListenedToAll(). A mod seems to pass null for the IsoPlayer argument, which was ok when listened-to lines were stored globally instead of per-player.
The mod file is es.info.books.main.lua.

MODDER WARNING: This could break any mods that modify ISRadioInteractions.lua or are using the OnDeviceText event (which gained a new parameter).


[h3]MODDING[/h3]
Fixed mod animations not being loaded if they aren't in a subdirectory of anims_X, or aren't in a subdirectory registered in animations_meshes.txt. Any such animations are added to the MaleBody model by default.

Item tagging changes

MODDERS: PLEASE READ ADDENDUM DOCUMENTATION FOR INFO


Added new tags to some items: BlowTorch, Fork, GasMask, Glue, HazmatSuit, Knife, Razor, Scissors, Sledgehammer, Spoon, StartFire, WeldingMask. These tags are used in multiple places instead of looking for specific item types.
Added methods ItemContainer.getBestConditionEvalArg() and ItemContainer.getBestConditionEvalArgRecurse().

Script properties item.staticModel and item.worldStaticModel are set to the fully-qualified "module.type" after loading scripts. This is to fix mod items not finding "model" scripts that aren't in the Base module.

Added a new item-script property ReplaceTypes which supersedes ReplaceOnUseOn (which is still supported).
The format is "ReplaceTypes=Key1 Type1;Key2 Type2;..." where each key is some string (such as WaterSource) and each type is an item type.
ReplaceTypes allows specifying different replacement item types for different uses of an item, for example, filling an empty item with water and/or with gasoline.
It is used for the same thing as ReplaceOnUseOn, but allows multiple key/type mappings instead of only one.
These new methods were added to both Item and InventoryItem classes:
String getReplaceType()
HashMap getReplaceTypes()
String getReplaceType(String key)
boolean hasReplaceType(String key)
The existing ReplaceOnUseOn lines in items.txt add a new value to the item's ReplaceTypes HashMap.


[h3]SOUND CHANGES[/h3]
Added global parameters Electricity, RoomType, and Water.
Added a new tile property named "AmbientSound" to support custom ambient sounds from objects. Current values assigned to some tiles are:
FactoryMachineAmbiance
HotdogMachineAmbiance
PayPhoneAmbiance
StreetLightAmbiance
NeonLightAmbiance
NeonSignAmbiance
JukeboxAmbiance
ControlStationAmbiance
ClockAmbiance
GasPumpAmbiance
LightBulbAmbiance

The FMOD global parameter "Electricity" is set to 0.0 when the new WorldEventElectricityShutdown event passes the "ElectricityOff" timeline marker.
Added FMOD parameter value RoomType=Factory.
Changed debugSetRoomType() to accept an integer instead of the name of an enum value.

Added sounds:
ArcadeMachineAmbiance
CanisterAddFuelFromGasPump
CanisterAddFuelSiphon
VehicleAddFuelFromCanister
VehicleAddFuelFromGasPump
VehicleHeadlightsOn
VehicleHeadlightsOff
VehicleWindowHandleOpen
VehicleWindowHandleClose
VehicleWindowElectricOpen
VehicleWindowElectricClose

Synchronize room lights and other objects losing power with the ElectricityOff timeline marker.
Added PlaceOneSound and PlaceMultipleSound item script properties.
These are played when placing items using the "Place Item" command.
The default sound played if these aren't defined is PutItemInBag (the same sound played when dropping items).

Added BoxOfRoundsOpenOne and BoxOfShellsOpenOne sounds to some recipes.
Increased the time of these recipes to allow the sound to play. The time is still quite short (was 5 ticks, now 15 ticks). Probably nobody will die waiting.

Added FountainBigAmbiance sound played to the multi-tile water fountain.
The sound doesn't seem to loop and stops after several seconds.

Added RepairWithWrench sound played when plumbing sinks and for the moveables Wrench tool sound.
Added value MetalGate to the FenceTypeLow and TripObstacleType parameters.

Added sounds:
BBQPropaneTankInsert
BBQPropaneTankRemove
BBQPropaneRunning
BBQRegularAddFuel
BBQRegularLight
BBQRegularRunning
CampfireAddFuel
CampfireRunning
CampfireLight
CampfireBuild
FireplaceAddFuel
FireplaceRunning
FireplaceLight
ZombieTrip
ZombieThumpGarageDoor

Added EquippedBaggageContainer FMOD parameter.
Added "SoundParameter = Name Value" item-script property.
Added FMOD parameter SinkType=Generic|Ceramic|Metallic which affects the WaterDrip sound.

Hitting trees with weapons and bare hands plays the weapon's HitSound instead of ChopTree.
A melee weapon's SwingSound is now played via animation events instead of at the start of SwipeStatePlayer.
This allows using different sounds for different attack animations.
Currently this is used to play a different sound for spear stab versus spear slash attacks.

Play the WorldEventElectricityShutdown event from the nearest square in a building when outdoors.
Set the FMOD parameter "RoomType" using RoomType objects added in WorldEd.

Changed how ambient sounds are played from doors and windows.
Instead of choosing random objects, only the nearest exterior objects will play sound.
Different sounds are played depending on whether the door or window is open or closed.
This will be used for playing rain and wind sounds when the player is inside.

Fixed the BurningFlesh sound not stopping in multiplayer after a player dies.
Fixed the barbecue and fireplace extinguish sounds stopping instead of being triggered to fade out.
Play an animation when turning a propane barbecue on and off.
Fixed crouching when extinguishing a charcoal barbecue.
Fixed SFX and music cutting out in busy situations (often seen on MP servers)
Reimplemented ZombieVocalsManager to limit zombie voice events to the nearest 20 zombies.
Optimized sorting objects in DoorAndWindowEmitters and ZombieVocalsManager.
Changed handling of object ambient sounds so they only play from the nearest 20 objects. This includes doors, fridges, trees, windows and any sprite with the AmbientSound property set.
Removed DoorAndWindowEmitters. This is combined with ObjectAmbientEmitters.
Fixed ZombieVocalsManager not actually stopping vocal events when one of the 20 slots was reassigned to a different zombie.



[h3]CONTROLLER / STEAMDECK IMPROVEMENTS[/h3]
ProjectZomboid64.exe will disable the -XX:+UseZGC option if a required function is undefined in Kernel32.dll.
Steam Proton does not define the MapViewOfFile3() function, which prevents the Windows version of the game starting on the Steam Deck.
Conveniently, MapViewOfFile3() is only available on Windows 10 1803, the same version ZGC requires.
When options.ini doesn't exist on startup, set the display to fullscreen desktop resolution.
When options.ini doesn't exist on startup on Steam Deck, call Core.setOptionActiveController() to enable the controller.

Allow precise positioning when placing items using a controller. This is done by holding the Y button and using either D-pad or the left joystick to move the item around the square. When there is more than one surface, it can be changed by pressing the right shoulder button while the Y button is held down.

Enabled the on-screen keyboard in CoopUserName.lua.
Leave room for two lines of tooltip text at the bottom of the character-creation profession ui.
Several panels in the main menu can be scrolled using the right joystick.

The Start/Menu button will display the main menu in single-player, or resume normal game speed.
This is instead of pressing once to pause the game and double-pressing to display the main menu.
The game can still be paused using the Back/View button radial menu.

Added controller navigation in the Workshop ui (for submitting Workshop items). NOTE: The controller doesn't work in the Steam overlay, which some buttons display.
Allow mouse clicks etc in the inventory and loot windows when a controller is active.
Added controller navigation to the Temperature tab of the character info window.
Made the selection in the Health panel easier to see.
Made the character-info window more opaque.
Made CharacterCreationMain wider at lower resolutions to avoid overlap.
Added a button to the on-screen keyboard to hide and show password text.
Enabled controller navigation in the server browser ui.
Enabled controller navigation in the server-settings editor.
Put the inventory and loot windows in their default positions if the controller is disconnected and "Use Keyboard and Mouse" is selected.

When placing items, the inventory and loot windows are collapsed if they aren't pinned open.
When placing items, mouse clicks on world objects are ignored to prevent the loot window popping open.
Set the width of ISEquippedItem to match its buttons. This fixes the wider invisible area blocking mouse clicks.
Set the texture compression option to be on by default.

Fixed navigation in the Multiplayer tab in the options.
Fixed editing server spawn regions with a controller.
Fixed the filter checkboxes going outside the ui on small screens.
Fixed being unable to navigate to the filter checkboxes and some other buttons.
Fixed controller focus when creating a splitscreen player.
Fixed toggling the mod under the mouse pointer when pressing the controller A button.
Fixed several cases of improper controller focus after clicking buttons with the mouse.
Fixed Lua error in MapSpawnSelect when the filename entry is hidden.
Fixed LoadingQueueState disconnecting immediately due to the A button being pressed, after pressing it in the last character-creation panel.
Fixed ISGameLoadingUI not receiving the controller focus when an unexpected error occurred while loading.
Fixed BootstrapConnectPopup, ServerConnectPopup and ServerWorkshopItemScreen not working with a controller.
Fixed Build 41 popup and DebugScenarios ui appearing overtop BootstrapConnectPopup.
Fixed cancellation in ServerWorkshopItemScreen throwing an exception in ConnectToServerState due to GameClient.connection being null.
Fixed using the controller X button to "Toggle Vision Info" in the foraging ui.
Fixed rendering the post-death ui for split-screen players 3 and 4 in the top half of the screen.
Fixed a Lua error pressing the Y button when moving furniture when the player isn't on a square.


[h3]BALANCE[/h3]
Added BedType property to the Pizza-Whirled seats which fixes pizza spawning on them.
Added amount of bait items to Fishing UI
Added dismantling cameras for scrap/skill points
Plastic bags and paper money can now be used as tinder.
Doors broken by zombies now give unusable wood instead of planks.
Container items now grouped together into their type in the context menu, so you can 'fill all' of a certain container.
Players now able to stack and unstack logs on the ground
Cars now remember their cruise control setting
Breaking vehicle windows now produces broken glass
Decrease zed attraction volume of “remove broken glass action"
Updated and fixed item categorizations
Updated evolvedrecipes.txt and items_food.txt.
Removed Cookable:true from the Burger evolved recipe.
Added the "|Cooked" flag to Burger ingredients in farming.txt.
Updated distributions Lua files
Muffins produced by the "Get 6 Muffins" recipe have the name of the ingredient added to the muffins, if any, such as "Apple Muffin".
Muffins produced by the "Get 6 Muffins" recipe are marked "Cooked", so the hunger-reduction bonus due to being cooked is applied.
Fixed adding a spice to a stale Taco increases boredom and unhappiness.
Added new methods to the Food class (to fix the above issue):
getBoredomChangeUnmodified()
getEnduranceChangeUnmodified()
getStressChangeUnmodified()
getThirstChangeUnmodified()
getUnhappyChangeUnmodified()
Higher level carpentry crates now have more space.
Can now move empty composter.
Can now move military crates.



[h3]DEBUG[/h3]
Updated Debug context menu.
Updated Debug Menu UI.
Added Z param to teleport.
Added change vehicle skin option to debug.
Added Sync for changing color, blood and skin of vehicles.

Refactored "Remove Item"-tool UI.

Added option to the F11 UI: Disable Welcome message (Works only in debug mode).
Added Reload Lua button to main screen (only in debug mode).
Added Cheats Panel in debug menu. Updated cheat list (merged in options from Admin and F11 menu).
Added fast move cheat (Controls: Arrow keys, Page Up/Down) (Debug and Admin panel).
Added Admin context menu options (some options from debug).
Added cheat Spawn Key door

Added LootZed tool
Added LootZed tool cheat (Check what can spawn in a container with what chance)
Added remove items tools
Added Remove items tools in Debug mode (Option for remove items from container menu and option in Debug UI for remove items in area)
Added options to the "[DEBUG] Objects" menu to:
1) Change a mannequin's script.
2) Create a Moveable item in the player's inventory for a chosen mannequin script.

Changes to the debug Items List UI:
Don't recreate the ui each time it is displayed, because it's slow.
Keyboard focus is set to the "Type" text-entry box each time the ui is displayed.
Pressing the Tab key switches focus between the "Type" and "Name" text-entry boxes when either one has the focus.



[h3]FIXES[/h3]
Fixed the player's head being semi-transparent where hair and beard stubble appears. This also fixes semi-transparency that has always been there around the edges of holes in clothing.
Fixed the controller tooltip text in the character-creation profession ui not displaying.
Fixed the overly-long delay before changing the volume of a cd player or television when using a controller.
Fixed spam messages about CDplayer's invalid world sprite.
Fixed the player not running when moving too slowly to sprint.
Fixed the character-creation Add Trait button being covered by the controller tooltip text.
Fixed placing multiple items locking the items to the first square that is clicked.
Fixed controller focus not being set to the "Check back cover" ui.
Fixed exploit holding down the Escape key before starting certain actions.
Fixed taking damage when walking down stairs while faster-forwarding.
Fixed a NullPointerException in InventoryItem.update() when an item's ReplaceOnUseOn refers to an invalid item type.
Fixed the post-death ui appearing in the main menu in multiplayer, if the player dies while the main menu is displayed.
Fixed use of an undefined variable in SPlantGlobalObject.stateToIsoObject().
Fixed buggy player rendering in the in-game map when the player is attacked.
Fixed "Decaying Corpse Health Impact" health reduction for "Low" and "High" both being less than "Normal".
Fixed some duplications and formatting in MainCreationMethods.lua.
Fixed custom Sandbox floats displaying too many decimals in the tooltip.
Fixed walls in Fire station in LV remaining cutaway for no reason.
Fixed character being able to rest on seats seen through some windows.
Fixed siren and light bar shutting off once you get a certain distance away from the vehicle. Now even when you go over 1000 blocks away and come back, the lights and sirens on cars are still going off.
Fixed not being able to attach sheet ropes at certain locations.
Fixed cars not remembering their cruise control setting.
Fixed "Place item on ground" ignoring item's favourite status when placing items.
Fixed being able to interact with rain collectors through the wall.
Fixed player-built doors inside houses being transparent at any angle of view.
Fixed Walkie-Talkies not showing new "equipped" weight when equipped.
Fixed Metalwork locker container name being "Crate" in the loot window.
Fixed a spawned bowl of pasta or rice not being edible.
Fixed Painted Crates becoming white after Pick up / Place down.
Fixed Rotten food showing in right click menu as (Fresh) when newly spawned.
Fixed Applying Disinfectant to an un-infected wound making that body part immune to infection.
Fixed player-built walls cutting away completely when built inside of another building.
Fixed typo in AdjacentFreeTileFinder.lua.
Fixed "Cake Preparation" not spawning rotten in 6 Months Later scenario.
Fixed Dish Towel having option to "dry self" even if char is dry.
Fixed Hair/Beard types grow back to their dyed colour, instead of their natural colour.
Fixed Coffee / coffee beverage fatigue reduction values not saving on quit / restart.
Fixed replacing disassembled floors with dirt tiles above ground level.
Fixed clock Size option not being changable while in game.
Fixed nil variable in ISWorldObjectContextMenu.doSleepOption() when tired enough to sleep on the ground.
Fixed disassmbling floors playing the standing animation instead of crouching.
Fixed saved Radio Stations being removed when a radio is removed and reinstalled.
Fixed Foundation Makeup requiring a mirror when it already comes with one.
Fixed characters not using a Knive that was equipped or in main inventory when crafting while a better Knive was in a nearby container.
Fixed ISPaintMenu error when near a placed radio.
Fixed weirdness installing and uninstalling radios in vehicles.
Fixed NullPointerException in ParameterInside.
Fixed Composters not having a container icon and title.
Fixed blank VHS Home tapes spawning. They are now replaced with a random Retail VHS when spawning loot.
Fixed an occasional exception in ISInventoryPane.sortItemsByTypeAndWeight() caused by a bad item-sorting comparison function.
Fixed parts of weather effects not being rendered sometimes. This resulted in some clouds not being rendered at different zoom levels, causing the scene color to change when zooming in/out, for example.
Fixed items replaced by their ReplaceOnCooked type not being synced in multiplayer correctly.
Fixed Lua error when the mini-map doesn't exist.
Fixed jumbo item-atlas textures being drawn the first time models are loaded.
Fixed mannequins that spawn in containers being invisible when placing them the first time.
Fixed being unable to transfer the same item between containers until a timeout expires, if the first attempt was interrupted. This happened in multiplayer only.
Fixed item models being drawn jumbo-sized for one frame when they are still loading, when using the old way of rendering 3D items.
Fixed item-atlas textures being drawn in the incorrect position sometimes.
Fixed items floating in air or remaining on the ground after removing or placing furniture.
Fixed items on furniture being visible through walls. Item alpha is set to match that of the furniture it is placed on.
Fixed not setting the keyboard focus on the debug Items List ui the first time it is displayed.
Fixed the character-creation profession screen displaying controller icons after activating mods in the New Game ui, when no controller is active.
Fixed building Wallframe using two planks but giving three when disassembled
Fixed cooking an egg showing the progress bar twice
Fixed shirts and other clothing items getting auto-removed from the world when they shouldn't be.
Fixed the character-creation profession screen displaying controller icons after activating mods in the New Game ui, when no controller is active.
Fixed ISMap.canWrite() and ISMap:canErase() not using the Write and Eraser tags.
Fixed support pillars for stairs not being created on the server or other clients.
Fixed inability to burn corpses in MP
Fixed Millipede and Millepede2 in forageDefinitions.lua both using type=Base.Centipede.
Fixed forageSystem.modifyItemDef() incorrect use of _itemDef.type.
Fixed forageSystem.removeItemDef() possibly using a nil _itemDef variable when printing a warning.
Fixed HumanVisual.naturalBeardColor possibly being uninitialized before being copied in HumanVisual.copyFrom().
Fixed OldBrake1 VehicleType being 3 instead of 1.
Fixed the "Enable left joystick radial menu" option not being saved.
Fixed a Lua error pressing the Toggle Search Mode key before starting a game.
Fixed the Toggle Search Mode key getting in the way when the game is paused.
Fixed crafted radios getting less maximum range at higher Electricity levels.
Fixed crafted Ham Radios weighing 1.5-3 pounds instead of 20.



[h3]AND MORE[/h3]
Changes to food and balancing can be read on our forums, since they would have this post hit the character limit.
https://theindiestone.com/forums/index.php?/topic/54121-4171-released/

Project Zomboid version 41.71 out with Steam Deck and controller upgrades

Project Zomboid, a survival game from The Indie Stone that's currently in Early Access just had a big new stable release, and it should now work better on the Steam Deck and with controllers overall.

Read the full article here: https://www.gamingonlinux.com/2022/05/project-zomboid-version-4171-out-with-steam-deck-and-controller-upgrades