Modding Quickstart Guide

From Prison Architect Wiki
Jump to navigation Jump to search


This article is a guide about the development of Mods. For more information on developing scenario mods, see Lua.

Introduction[edit]

So, after looking into the new modding architecture of the Alpha 24 build for a little while, I decided to create a documentation of the same (utilizing and improving a little on the official information given to us by the devs), to allow fellow players and curious folks to get into it more easily.

It is important to note that I in fact don't have access to any more information than you all, so I'm merely gathering together the information that we have into a single thread, and spice it a little with documentation based on common sense and a bit of speculation with patterns found in the available code.

I don't claim to know everything just yet (see the speculation part above), so I am always willing to make updates and corrections as new (or better) data becomes available (either from you folks who might have noticed something I didn't, or from updates in following alpha builds of the game.). I have color coded all places where I am Unsure about the mentioned information, so it's either made from educated guesses or outright omitted. Feel free to help me fill/correct/confirm these passages.

What can we do with it?[edit]

As of the Alpha 24 build of Prison Architect, the developers have given us a bit more access into their handiwork by creating and giving us an upgraded version of the modding architecture that we had until then. Prior to Alpha 24, the modding was limited mostly to adding in new grants. We can now create new entities of about anything in the game, be it Staff, Prisoners, Objects, Materials, Jobs or Grants.

What can't we do with it (yet)?[edit]

We can create the above mentioned entities, but that's it. With some exceptions, we cannot create the "functionality" behind these entities, leaving them as pretty husks at best. There are some things we can create functionality for already (objects, mostly), and by combining things like Objects, Jobs & Processes, we can already create a few types of mod fully functional, but for the majority of mods, our hands are still bound.

So now that we have a rough picture of what we can and can't do so far, we can take a closer look into how to do the things that we can do. For this purpose, I will explain the general construction of any mod, before going into specifics as to what all the different files contained in a mod (and the main game) do and in what ways they can be edited.

The information for the available options of the text files are taken from the text files themselves and the ModSchema.

By the way, Modding still has some limitations which aren't widely known. At present(2015/3),

  • Limitation of 'Sprites.png'
    • It should be smaller than 1024x1024(both length and width should be <=1024) and you cannot multiple it.
    • It's only usable for modification of 'sprite' section. Section such as 'ToolbarSprite' or 'Sprite0' can't change with this.
  • You can't edit (or eliminate) almost all parameter which already exist.
    • If you add any modified lines (such as 'Bladder' to 'needs.txt') in your mod, game acts messy(this case, prisoners come to have two same needs in inner calculation and they can't satisfy their need collectedly).
    • Some of parameter like running cost and day-and-night cycle seems completely build in program and no access.

Structure[edit]

All mods are contained in the mods/ directory within the Prison Architect save folder. Each mod has its own subdirectory with the following structure.

Folder.png mods
Folder.png [Mod Name]]
Notepad.png manifest.txt
Picture.png thumbnail.png
Folder.png data
...

manifest.txt contains a list of fields (one per line) which describe the mod to the system, using the format

Name                "Mod Name"
Author              "Mod Author"
Description         "Mod Description"
Version             "v1.0"
Date                "DD/MM/YYYY"
URL                 "http://www.yourwebsite/my-pa-mod/"

The optional file thumbnail.png is the image that is shown by Prison Architect when the mod is selected in the menu. The directory data/ is structured in the same manner as main.dat, and any file in main.dat may be overridden by a file in the mod's data/ directory.

Manifest and Thumbnail[edit]

While the general contents of the manifest.txt and thumbnail have already been looked at in the prior chapter, I will describe them once more in this one. That way, if changes happen or additional restrictions are found (like a maximum size for the thumbnail), the changes can more easily be reflected in this chapter.

manifest.txt[edit]

The manifest.txt is located in the root folder of the mod and contains the metadata of the mod, which will end up being displayed within the game. The file itself contains a key-value list.

Key Description Type Default
Name Name of the mod. string ""
Author Name of the author string
Description Description of the mod. string
Version Mod version. string
Date Date for last update. string
URL Url to page of the author or the mod or such. string
isTranslation Defines whether or not the mod is a translation. If it is, it will be available in the new translation pack list. boolean

If you download a mod from the workshop, there will be a few additional lines, which are (I assume) auto-generated during the uploading process.

  • FileID
  • UpdateTime
  • SteamAuthor

While the manifest.txt is mandatory, not all of these keys are. Name, Author and Description are probably rather important though.

Example:

Name                "Example Mod"  
Author              "Sample Name" 
Description         "This is an example for a manifest.txt."  
Version		    1.0
IsTranslation       false  

The quotation marks are technically necessary only if there are spaces within the value, but you're never wrong to set them, except for the IsTranslation value. That is boolean and must not have quotation marks.

thumbnail.png[edit]

The thumbnail.png is an image file that will be displayed in the mod menu within the game, just above the meta-data of the manifest. It is located in the root folder of the mod. It is also optional.

It is not known to me yet whether or not there is a maximum size for the thumbnail.

Biographies[edit]

The biographies.txt contains values which a new instance of a Prisoner will gain when it is created. It is important to note that this file is not additive (yet). You will have to copy the original file from the game data and add upon it.

Names[edit]

The Names object is a big list containing all first and last names, of which a random combination is pulled to create the name for a random prisoner. The attributes are 'Forename' for a first name and 'Surname' for a last name.

CriminalTrait[edit]

A CriminalTrait is an object that defines a trait that a criminal can have. The existing traits may influence the prisoners' behaviour. It is, as of Alpha 24, not yet possible though for your custom traits to do the same.

Key Description Type Default
Name Name of the trait. string ""
ChanceLow Value between 0 and 100, chance of a Low Risk prisoner to receive this trait. int 0
ChanceMedium -"-, chance of a Medium Risk prisoner to receive this trait. int 0
ChanceHigh -"-, chance of a High Risk prisoner to receive this trait. int 0

Examples[edit]

BEGIN CriminalTrait
    Name            EvilMastermind
    ChanceLow       10
    ChanceMedium    20
    ChanceHigh      30
END

Crime[edit]

The Crime is an object that defines a possible crime the prisoner has committed.

Key Description Type Default
Name Name of the crime. string ""
MinSentence Minimum sentence given for this crime. int 0
MaxSentence Maximum sentence given for this crime. int 0
Risk Only a prisoner with this risk level can be sentenced with this crime. Can be Low, Medium, High. enum None
Trait Only prisoners with this trait can commit this crime. Possible value is a Name of any CriminalTrait defined in the file. enum None

Putting multiple traits in your object works as an AND-requirement, so a prisoner needs all traits to be eligible for this crime.

Examples[edit]

BEGIN Crime
    Name            Bamboozling
    MinSentence     1
    MaxSentence     5
    Risk            Low
    Trait           Fraud
    Trait           EvilMastermind
END

Needs[edit]

The needs.txt file contains the definitions for prisoner needs and methods for them to satisfy this need. This file is additive, meaning you can just create a new file with the same name in the data folder of your mod and add new needs and providers from there.

Need[edit]

This object contains defines a new need for the prisoners.


Related to this section, please keep in mind there's two inner parameters, ActionPoint[%] and Charge[%] for each need.

Charge is, roughly speaking, how much their need piled up.

When Charge exceeds ActionPoint, the need level turns to 'Medium'(Yellow) from 'Satisfied'(Green), and he starts to seek something to satisfy the need.

Key Description Type Default
Name Name of the need. string ""
Priority Value from 0 or 1 to 9 (or maybe further). The prisoner will try to satisfy needs with higher priorities first, if necessary. int 0
FailureAction This value defines a specific action that is taken if the prisoner has failed to satisfy the need in time. As of Alpha 24, no custom actions for this can be defined. Possible actions are noted below. enum None
MisbehaviourType Action that the needs do rises. (ex. Spoiling(say, Drugs and Alcohol) rises that need's 'Charge') enum None
TimeToAction

This value defines the time (minutes) for the need to when prisoner individual Charge reaches 100%. After this, prisoner's need level turns to High(Orange).

float 0.00
TimeToFailure This value defines the time for the need to reach the level turns to 'Critical'(Red), where a prisoner will execute his failure action (if present). This time count starts same to previous one, so it should be same or bigger than 'TimeToAction'. float 0.00
StartingActionPoints Could be a percentage from 0-100, using to define minimum of ActionPoint. int -1
RandomActionPoints Could be a percentage that is added to 'StartingActionPoints'. Each Prisoner's 'Action Point' is determined individually from "StartingActionPoints + n * RandomActionPoints (0<n<1)" int -1
Chance Chance (from 0 to 1), that a prisoner will develop this need upon creation. float 0.00
GenerationRules Unsure - Suspected that the need will either be furthered or created in a prisoner upon this event. Can be Family or Narcotics. enum None
Properties This value sets a certain attribute for the need. Multiple properties allowed. For available properties, see below. enum None
Visibility Defines whether or not this need is visible in the prisoner stats or the need tab. Can be Visible, Hidden or AutoHide. The use of AutoHide is not yet certain. Possibly hides the need if it's below a certain threshold (either 0 or below the action point?). enum Hidden

FailureActions[edit]

Key Description
Use Causes the prisoner to use something. So far unknown how that something is defined.
UsePhone Causes the prisoner to use the nearest phone.
Consume Causes the prisoner to consume an object. So far unknown how that object is defined.
Sleep Causes the prisoner to either go to sleep or simply fall asleep.
Urinate Causes the prisoner to pee himself.
SoilSuit Causes the prisoner to poo himself.
Eat Causes the prisoner to get something to eat.
Exercise Causes the prisoner to exercise.
Complain Causes the prisoner to complain about the need.
Do-Regime Unsure - Probably simply causes the prisoner to direct his actions according to the current regime.
Work Causes the prisoner to go to work.
Visitation Causes the prisoner to move to the Visitation room. So far unknown how the exact room is chosen.
GrabThrownContraband Causes the prisoner to receive contraband which is thrown over the wall.
ReformProgram Causes the prisoner to visit a reform program. So far unknown how the visited program is chosen.
Withdrawal Causes the prisoner to go into alcohol/narcotics withdrawal.

Properties[edit]

Key Description
AutoCharge This need increases continually on its own.
Involuntary The Prisoner doesn't have control over the Need, or its negative effects.
RaisesTemp Having this Need unsatisfied increases the overall riot risk in your prison.

Examples[edit]

BEGIN Need       
    Name                 Drugs  
    Priority             8  
    FailureAction        Withdrawal  
    MisbehaviorType      Spoiling  
    TimeToAction         720.000  
    TimeToFailure        1440.00  
    StartingActionPoints 33  
    RandomActionPoints   33  
    Chance               0.300000  
    GenerationRules      Narcotics  
    Visibility           AutoHide
    Properties           AutoCharge
    Properties           Involuntary
END

BEGIN Need       
    Name                 Exercise  
    Priority             7  
    Hidden               false   
    TimeToAction         1440.00  
    TimeToFailure        1440.00  
    StartingActionPoints 33  
    RandomActionPoints   33  
    Chance               0.500000  
    Visibility           Visible
    Properties           AutoCharge
    Properties           RaisesTemp
END

Note: Apparently, as of Alpha 24, there are also 'Hidden' and 'AutoCharge' keys found in certain needs (see above), with boolean values. These may replace (or already have replaced) the corresponding Properties and Visibility keys.

Provider[edit]

A provider object defines a way for the prisoner to satisfy his needs.

Key Description Type Default
Action Name of the action that is performed in order to satisfy the need. string "None"
ProviderType Defines whether this need is satisfied via an object or a room. Can be Object, Room or None. enum
Object Only necessary if ProviderType is set to Object. Defines the type of object this need can be satisfied with. Can be the name of any base or custom object. enum
Room Only necessary if ProviderType is set to Room. Defines the type of room this need can be satisfied in. Can be the name of any base or custom room. enum
Slot Only necessary if ProviderType is set to Object. Defines the slot of the object (if it has any) that will be used to satisfy the need. (Could be used for an object that can satisfy multiple needs, or has multiple slots for the need to be satisfied.) int -1
Regime The Prisoner will only satisfy this need during this regime slot (and perhaps FreeTime), if set. Can be the name of any regime slot or Unspecified for any. enum
PrimaryNeed Defines the need that will need to reach its action point for the prisoner to use this provider. Can be the name of any base or custom need. enum
PrimaryRate Defines the rate at which the primary need will be reduced while this provider is used. The entered value has to be negative (it is unknown if a positive value will simply not work or actually increase the need.) float -1.00
SecondaryNeed Defines a second need that would also be reduced while this provider is used. Can be the name of any base or custom Need. enum
SecondaryRate Defines the rate at which the secondary need will be reduced while this provider is used. Same rules as PrimaryRate apply. float -1.00
ActionType Defines the action that is taken to 'activate' this provider. 'Use' is fairly standard action for furniture-type providers. Possible actions are the same as FailureActions. enum
Flags Adds certain attributes to this provider. For possible Flags, see below. bitmask

Flags[edit]

Key Description
Shareable Allows multiple prisoners to use this provider simultaneously. (Useful for providers that are entire rooms.)
RequiresQuiet Needs quiet surroundings to use this provider.
UsesEntireObject Possibly important for objects with multiple slots. Probably blocks the used object itself until the prisoner is done.
RequiresNight Night time required to use this provider. Night time starts at 10pm and ends at 8am.

Examples[edit]

BEGIN Provider
	Action	        Exercise
	ProviderType	Room
	Room	        Yard
	PrimaryNeed	Exercise
	ActionType	Exercise
	Flags	        Shareable
END

BEGIN Provider
	Action	        Wee
	ProviderType	Object
	Object	        Toilet
	PrimaryNeed	Bladder
	PrimaryRate	-10.0000
	SecondaryNeed	Bowels
	SecondaryRate	-5.00000
	ActionType	Use
	Flags	        UsesEntireObject
END

BEGIN Provider
	Action	        ChangeClothes
	ProviderType	Object
	Object	        PrisonerUniform
	PrimaryNeed	Clothing
	PrimaryRate	-100.000
	ActionType	Consume
END

Note: Apparently using TertiaryNeed and TertiaryRate works to add a third need to be sated to your provider. It is unknown yet if adding more than three works, nor if you need to follow the pattern of Primary, Secondary, Tertiary, etc. or if the parser merely checks for Need and Rate.

Production[edit]

The production.txt file contains definitions for rules and objects that move and change other objects and entities.

ProductionRule[edit]

The ProductionRule object defines a transport that needs to be done if available.

Key Description Type Default
Rule Defines whether this rule is to store an object somewhere, or to move an entity (a prisoner or staff member or such). Can be Storage or Entity. enum None
Material Defines which object or entity should be moved. Can be the Name of any Object or entity-Object. enum None
Container Defines the object or entity that the moved object should be brought to. Can be the name of any Object or entity-Object. enum None
Room Defines a room to which the moved object should be brought. Can be the name of any Object. Defining both a Room and a Container will lead to people transporting the item to the defined object in the defined room. enum None
Distribution Defines the behavior of those transporting the object. They can either bring it to the nearest feasible object/room or to a random one. Can be Random or Nearest. enum Random
MinSlotId Defines the smallest slot number of an object (if necessary) in which the moved object will be stored. int 0
MaxSlotId Defines the largest slot number of an object (if necessary) in which the moved object will be stored. Can be used to have an object that can store multiple stacks of a certain object (e.g. serving table) or maybe create an object that can store different objects in different slots. int 0
Condition Adds additional conditions that need to be met for an object or entity to be moved according to this rule. For possible conditions, see below. enum
Properties Adds additional properties. For possible properties, see below. bitmask

Conditions[edit]

Key Description
EntitySeriouslyInjured Met when the entity is gravely injured. (e.g. used to bring hurt people to the infirmary).
EntityDead Met when an entity has died. (e.g. used to bring dead people to the morgue)
NotDuringMealService This rule is not active while meals are being prepared and served. (probably to prevent cooks from doing other stuff when they should be cooking or stealing the dirty trays away from under the prisoners' noses.)
UniformsRequireMoving Unsure
NotLoaded Does not move the object if it is currently loaded onto another object.
NotLoadedOnTable Only moves the object if it isn't sitting on a table.
LoadedOnTable Only moves the object if it is loaded on a table. (e.g. sellable objects must be loaded on table in order to be moved to Exports area).

Properties[edit]

Key Description
HighPriority Most likely marks this rule as a high priority rule, to be considered before those that are not.

Examples[edit]

BEGIN ProductionRule       
    Rule                 Storage
    Material             FoodTray  
    Container            ServingTable  
    Distribution         Nearest  
END

BEGIN ProductionRule       
    Rule                 Storage
    Material             IngredientsCooked  
    Container            ServingTable  
    Distribution         Nearest  
    MinSlotId            1  
    MaxSlotId            4  
    Properties           HighPriority
END

BEGIN ProductionRule       
    Rule                 Storage
    Material             FoodTrayDirty  
    Container            Sink  
    Distribution         Nearest  
    Condition            NotDuringMealService  
END

Processor[edit]

A processor is an object, which will take one object and turn it into a different object if someone is working on it.

Key Description Type Default
Processor Defines the object that will be used as processor. Can be the name of any object. enum None
Input Defines the object that is put into this processor. Can be the name of any object. enum None
InputCount Defines the number of entities necessary to start processing. int 1
Output Defines the object that the processor will output. Can be the name of any object. enum None
OutputCount Defines the number of entities that the process will output. int 1
OperatingTime The time (in seconds) the processing will take. float 1.00
Properties Adds additional properties. For possible properties, see below. bitmask
Worker Adds an entity capable of performing the task. Can be defined multiple times? enum
Qualification This defines the qualification a prisoner needs to have in order to be allowed to use this processor. Must be the name of any reform program. This seems to be a bug at the moment. Prisoners need to undergo a reform program before working on a processor. (like the workshop saw, press, etc) enum None
AlternateOutput Alternate output, if operation failed. Has to be a material (?) enum
AlternateOutputCount Amount of items got from failed task int
AlternateOutputChance Chance for the failure float

Properties[edit]

Key Description
ShowDuringOperation If this is used, then the input-object is shown in front of the worker during processing.

Examples[edit]

BEGIN Processor
    Processor            WorkshopSaw
    Input                SheetMetal
    Output               LicensePlateBlank
    OutputCount          2
    OperatingTime        12.0
END

BEGIN Processor
    Processor            CarpenterTable
    Input                Wood
    InputCount           5
    Output               SuperiorBed
    OperatingTime        60.0
    Properties           ShowDuringOperation
END

Reform Programs[edit]

The reform_programs.txt contains definitions of all the reform programs that a prisoner can visit. It is currently unknown if this file is additive or not.

Program[edit]

Key Description Type Default
Name Name of the program. string ""
SessionCost Cost of this program per session. Value needs to be negative. int 0
Places Number of available spots in the program. int 0
SessionLength Time (in minutes) one session takes. int 0
Teacher Defines the entity (or, apparently, object?) that will be tasked with teaching this course. Can be the name of any entity (or, apparently, object. I never have been taught by a DirtyFoodTray.). enum None
Equipment Defines the furniture that is necessary for the prisoners to have while in session. Can be the name of any object. enum None
EquipmentAlt Defines alternative furniture that is necessary for the prisoners to have while in session. Can be the name of any object. enum None
Room Defines the room that the program takes place in. Can be the name of any room. enum None
Properties Adds additional properties. For possible properties, see below. bitmask
Difficulty Sets the difficulty for this course. minus works(easier). int 0
Intake Sets the regulations regarding which prisoners can/have to participate. For available intake options, see below. enum None
Qualification Defines if this program has other programs as prerequisites. Can be the name of any Program. enum None
Research This program will only be available after a certain research has already been conducted. Can be the name of any Research. enum None

Intake[edit]

Key Description
Mandatory Every prisoner must take this course as soon as possible.
Voluntary Prisoner can decide for himself whether or not to take the course.
ReferralViolence Prisoner can/needs to participate if a violence problem is detected.
ReferralDrugAddiction Prisoner can/needs to participate if a drug problem is detected.
ReferralAlcoholism Prisoner can/needs to participate if an alcohol problem is detected.

Properties[edit]

Key Description
CanEscortStudent Guards can escort the prisoner to the program
CanHireExternally Teacher can be hired from outside and does not need to be a staff member.
StudentsSit Students need to sit down for the session. (probably adds requirement to have enough seats (or objects defined in Equipment/EquipmentAlt) for all students in a suitable room).
Academic Can only be taken by prisoners with the 'Clever' Trait.
Practical Can only be taken by prisoners with the 'Practical' Trait.
Repeatable Prisoners can pass this program multiple times.
Passive The prisoner's understanding and concentration are meaningless and not shown. attendance = success chance

Examples[edit]

The first example was put together as a small demonstration of what you could do with such programs. There have been people that wanted to have a mandatory medical screening for each prisoner when they arrive in the prison. Here's an example of how that could work (At the moment, this screening will just run through without any occurrences every time. Maybe in a future version you will be able to add a lua script to a program like this that could check if the prisoner has a drug or alcohol problem. That way such a screening could detect problem prisoners as soon as they arrive at the prison and take according actions.):

BEGIN Program
	Name		MedicalScreening
	SessionCost	-50
	Places		1
	SessionLength	30
	NumSessions	1
	Difficulty	0
	Teacher		Doctor
	Room		MedicalWard
	Equipment	MedicalBed
	Research 	Health
	Intake		Mandatory
	Properties	Passive
END

BEGIN Program
    Name            GeneralEducation
    SessionCost     -500
    Places          10
    SessionLength   180
    NumSessions     20
    Difficulty      50
    Room            Classroom
    Equipment       SchoolDesk
    Teacher         Teacher
    Research        Education
    Intake          Voluntary
    Qualification   FoundationEducation
    Properties      CanHireExternally
    Properties      StudentsSit
    Properties      Academic
END

Research[edit]

The research.txt contains all the available researches in the Bureaucracy menu. This file is additive, meaning you can simply create an empty file with the same name in your mod and add new research in it.

Key Description Type Default
Name Name of the research. string "None"
Type Can be Entity or Ability; Entity is used if your research unlocks an entity (e.g. new staff member). A counter will appear next to it showing how many of this entity you have hired (x1). Ability is used for everything else. enum None
Requires Defines the Research that needs to be done in order to be able to research this. Can be the name of any research. enum None
Admin Defines the research entity that will conduct this research. Makes only sense if the picked research is of the 'Entity' type. Can (in theory) be the name of any research. int 0
Sprite Defines the image that will be shown on the post-it in the bureaucracy menu.

Unsure - I believe it needs to be a name that is available within a *.spritebank, using sprites themselves didn't seem to work.

enum None
Cost Cost of this research. Must use negative values. int 0
CostPerUse Set a price for every unit used after the research is unlocked (body armor and tasers). int 0
Time Time (in ingame minutes) this research takes to complete. int 0
X X-coordinate of the tab for this research in the bureaucracy menu. int 0
Y Y-coordinate of the tab for this research in the bureaucracy menu. int 0

You will have to play around a little with the coordinates.


Examples[edit]

The first requires Mental Health to be researched, and will require a hired Psychologist (the entity connected to the 'MentalHealth' research) to actually research it. It is he who will be researching. Regarding the coordinates, the note for this research sits just right of the 'Mental Health' research note.

Positions of the Mental Health and the new Psychiatry research fields.
BEGIN Research
	Name		Psychiatry
	Type 	        Ability
 	Requires 	MentalHealth
 	Admin	        MentalHealth
	Cost		-1500
	Time		360
	X		960
	Y		620
END
	
BEGIN Research   
    Name                 MentalHealth  
    Type                 Entity  
    Requires             Warden  
    Admin                Warden  
    Sprite               Psychologist  
    Cost                 -500  
    Time                 360  
    X                    840  
    Y                    620  
END

Note: Warden is the research that is available from the beginning, so this is the requirement and admin to choose for a fundamental research.

Materials[edit]

The materials.txt contains all the definitions of objects, rooms, materials, equipment and callouts, and thus, will probably be the longest file you are going to have in your mod. This file is additive, meaning you can simply create a new file with the same name in the data folder of your mod and add new things.

Object[edit]

The Object object will define a new object, which can generally be anything, from the furniture in your prison, over the cables and pipes to the stacks and packs of materials that your workers use to build. An object is set up as following:

Key Description Type Default
Name Name of the object. string ""
Width How much space this object takes up (unrotated) horizontally, in blocks. int 1
Height How much space this object takes up (unrotated) vertically, in blocks. int 1
ConstructionTime How long does it take the worker to build this, in seconds. float -1.00
MoveSpeedFactor How quickly does someone carrying this object run, relatively (0.5 = half speed). float 1.00
Toughness How hard is this object to break. (Example values: StaffDoor: 40.00000; SolitaryDoor: 300.000) float 1.00
BlockVis Does this object obstruct vision? boolean false
MaxStackSize How many of these objects can be put into a single stack? int 1
Teleportable Setting to true means this object will appear when necessary, and not be brought in via a supply truck. Also workers won't need to go pick it up and will instead just go place it (see doors and lights). boolean false
Price How much does this object cost to purchase? int 0
RenderDepth Defines on which layer this object will be rendered. E.g. Prisoners have RenderDepth 2, so objects with RenderDepth <2 will be rendered behind them, while objects with RenderDepth >2 will be rendered in front of them. int 0
NumSlots Defines the number of slots this object has. Used for ProductionRules, Providers and Processors.

Unsure - Objects that are going to serve as Processor need to have 3 slots (Input, Workplace, Output).

int 0
AttachToWall Unsure - Perhaps only visually, but perhaps also means that the object gets deconstructed if the wall behind it is destroyed. boolean false
Group Defines the type of object this is. For available Group designations, see below. bitmask
BlockedBy This object cannot be built on spaces where already an object with the mentioned group is. Can be used multiple times. Uses the group names from above. bitmask
ViewRange Used only for entities (prisoners, guards, staff, etc.). Defines their effective view range in blocks. int 0
Properties Adds additional properties. For available properties, see below. bitmask
Research This object is only available after this research has been finished. Can be the name of any research. enum None
Sprite The name of the sprite in the *.spritebank, or the sprite itself, which will represent the object visually within the game. enum/sprite
SpriteScale Can be used to scale the original sprite, in order to represent smaller or larger objects without losing detail due to less drawing space. float 1.00
SpriteVariants Used to define multiple, different looking versions of an object (in the main files only used for entities). Unsure unsure how the sprites need to be arranged. In the main files, the sprite variations are all placed under one another, but there are also numbered sprite definitions in the *.spritebank file. int 1
ToolbarSprite The name of the sprite in the *.spritebank, or the sprite itself, which will represent the object visually in the tool-bar. enum/sprite
StackSprite Used to define the sprites that will be used for the stacks of your object. How to : When used with 3 different sizes of stacks in your sprite file, sprites needs to be arranged from left to right like this : "small" - "medium" - "big" and its coordonate must point to the upper left corner of the biggest stack. enum/sprite
MadeOf Defines the material the object is made of. Different materials may have different effects (most notably, flammability). For available materials, see below. enum None
Equipment Defines the equipment that the object is spawned with. For entities, this means they have it on their bodies. Can be the name of any equipment object.

Unsure - For objects, it could mean that the equipment is stored in this object, like smuggled material.

enum None
WorkGroup Unsure - Could be used to link certain objects and/or rooms. string ""
AutoOrder Unsure - Used to auto order another object/material. string ""
AutoOrderQuantity Unsure - Amount ordered. int

Groups[edit]

Key Description
Wall Unsure - Probably allows for the use of wall objects that are not in the material section?
StaticObject This is your basic, immovable furniture object.
Cable Defines this as cable. Unsure if this directly means that it will be built underground and can only be seen in the utility view.
LargePipe Like Cable, only for large pipes.
SmallPipe Like Cable, only for small pipes.
UtilityStation Defines this object as a utility station. Probably only shifts the icon for this object from the Objects menu to the Utility menu.
MustBeOutdoors Unsure - Requires this object to be outdoors.

Materials[edit]

Key Description
Wood Flammable. Wooden.
SolidMetal
HollowMetal
Composite Possibly flammable.

Properties[edit]

Key Description
Material Marks this object as building material.
Entity Marks this object as entity (living being).
Administrator Marks this entity as administrative staff member (warden, Chief of Security, etc.). Probably priority targets during riots.
StaticObject Marks this object as static. This makes it possible to dismantle and dump.
Utility Marks this object as utility object. Possibly deprecated with the Group attribute, or deprecating the Group attribute.
Electrical Marks this object as electrical. Needs power to work.
Door Marks this object as door.
BlockMovement Blocks Movement.
Staff This entity is part of the staff.
SlowDelivery Unsure, beyond the obvious. - Slow delivery. Might be that this means that the object does not just appear in deliveries, but has to be brought in by truck.
ExplodeWhenWet Self-explanatory. Explodes when it comes in contact with water, killing entities around it.
Sellable Marks this object as sell-able.
Vehicle Marks this object as vehicle.
RoomSpecific Can only be placed in a room that allows it.
CanPlaceOnRoad This object can be placed on the main supply road. (Do at your own risk, it is unknown if it might block the supply truck.)
Guard Marks entity as Guard.
Rubbish Marks object as rubbish that will be dumped.
CutsceneMarker Unsure
Wired Allows this object to be interacted with via wiring.
Processor Marks this object as a processor.
Scripted This property tells the game that there is a LUA script attached to this object.

Examples[edit]


BEGIN Object
	Name			PaddedWall
	Height			2
	ConstructionTime	3.00000
	MoveSpeedFactor 	0.700000
	Toughness		100.0000
	Price			-100
	Group			StaticObject
	BlockedBy		StaticObject
	BlockedBy		UtilityStation
	MadeOf			Composite
	Property		RoomSpecific
	BEGIN   Sprite
		x 2 
		y 0  
		w 2  
		h 4  
		RotateType 1
	END
END


BEGIN Object
    Name                 VisitorTable
    Width                3
    Height               2
    Price                -300
    ConstructionTime     2
    MoveSpeedFactor      0.500000  
    Toughness            15.0000  
    NumSlots             4
    Sprite               VisitorTable
    MadeOf               Wood
    ToolbarSprite        VisitorTableToolbar
    Properties           StaticObject
    Properties           RoomSpecific 
    BlockedBy            Wall
    BlockedBy            StaticObject  
    BlockedBy            UtilityStation  
END

Material[edit]

(Under Construction) [verification needed]

Room[edit]

(Under Construction) [verification needed]