Modding Quickstart Guide

From Prison Architect Wiki
Revision as of 14:16, 6 September 2014 by Suthek (talk | contribs) (Created page with " ==Introduction== So, after looking into the new modding architecture of the a24-build for a little while, I decided to create a documentation of the same (utilizing and impr...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Introduction

So, after looking into the new modding architecture of the a24-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 [color=#BF0000]unsure[/color] 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?

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 a24, 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)?

We can create 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 [u]so far[/u], 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 textfiles are taken from the textfiles themselves and the ModSchema.


Structure of a Mod

Firstly we'll take a look at the setup of the mod folder. For this purpose, we'll just quickly jack the official explanation away from Chris:

[...]
Here are some instructions on how to make your mod compatible with the new official Prison Architect modding system.

- All mods are held in the /mods/ subfolder within the PA save data folder
- Each mod has its own subdirectory, with the folder layout shown:

mods
+---YourMod/
¦   ¦   manifest.txt
¦   ¦   thumbnail.png
¦   +---data
¦        ¦   ...

- These mod folders need to contain a data folder and a manifest.txt file, as well as an optional thumbnail.png. 
- The thumbnail is shown in the mods menu when the mod is selected
- The data folder mirrors the structure of the main.dat's data directory, allowing you to override any game files with your own
- The manifest.txt file contains a list of items which describe the mod to the system in the following format:

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

We see, that there is a clear structure for each mod. In the root folder of your mod, there needs to be the manifest.txt, which details the information of the mod that's displayed ingame in the Mods menu, as well as the thumbnail.png, which adds a picture to the same menu.

Also present is a data folder, which then contains the actual content of the mod. This data folder contains 2 subfolders (if necessary), one being 'language', the other being 'scripts'. Thus, a fully equipped mod folder would look like this:

mods +------YourMod/ | | manifest.txt | | thumbnail.png | +------data | + ----- language | | | base-language.txt | | | + ----- scripts | | | ... | | | | | ... |


The language folder contains the base-language.txt, while the scripts folder can contain lua scripts that describe behaviours of your objects (and, when the modding system is improved in a future version, other things). The data folder itself also contains all the *.txt-files and spritesheets necessary for your mod. Which of those will be necessary for what function will be looked at further down the line.

Manifest and Thumbnail

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

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.

Name string The name of the mod. Author string Name of the author. Description string Description of the mod. Version string Current version. Date string Version of Mod update. URL string URL of the author/mod/w.e. isTranslation boolean Defines wether or not the mod is a translation. If it is, it will be available in the new a24 translation pack list.

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

  1. FileID
  2. UpdateTime
  3. 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              "Bob Bobo" 
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

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 wether or not there is a maximum size for the thumbnail.

Biographies

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 [u]is not additive (yet). You will have to copy the original file from the game data and add upon it.[/u]

Names

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

A CriminalTrait is an object that defines a trait that a criminal can have (duh). The existing traits may influence the prisoners' behaviour. It is as of a24 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

BEGIN CriminalTrait
    Name            EvilMastermind
    ChanceLow       10
    ChanceMedium    20
    ChanceHigh      30
END

Crime

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

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

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

Needs

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

This object contains defines a new need for the prisoners.

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 a24, no custom actions for this can be defined. Possible actions are noted below. enum None
MisbehaviourType Causes a higher inclination towards a certain misbehavior if Need is not met. (Unsure) enum None
TimeToAction

This value defines the time (in minutes?) for the need to reach the level (from 0) where a prisoner will take action to satisfy it.

float 0.00
TimeToFailure This value defines the time for the need to reach the level where a prisoner will execute his failure action (if present). It is uncertain from which point this time counts, but it is suspected that this timer goes on from the Action Point. float 0.00
StartingActionPoints Could be a percentage from 0-100, defining the base starting level of this need. (Unsure) int -1
RandomActionPoints Could be a percentage that is added or subtracted to the base starting level. (Unsure) int -1
Chance Chance (from 0 to 1), that a prisoner will develop this need upon creation. float 0.00
GenerationRules Suspected that the need will either be furthered or created in a prisoner upon this event. Can be Family or Narcotics. (Unsure) enum None
Properties This value sets a certain attribute for the need. Multiple properties allowed. For available properties, see below. enum None
Visibility Defines wether 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

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 Unsure. Probably 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

Key Description
AutoCharge This need increases continually on its own.
Involuntary Unsure. Probably decides wether or not the FailureAction or MisbehaviorType are forced upon the prisoner when the need is failed or not. (Could be used to simulate e.g. OCDs.)
RaisesTemp Having this Need unsatisfied increases the overall riot risk in you prison.

Examples

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: Aparently as of a24 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

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 wether 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 probably 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

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 Needs night time to use this provider. The exact times that are defined as 'nighttime' are not yet known.

Examples

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: Aparently 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 <string>Need and <string>Rate.

Production

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

ProductionRule

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

Key Description Type Default
Rule Defines wether this rule is to store an object somewhere, or to move an entitiy (a prisoner or staff member or such). Can be Storage or Entitiy. enum None
Material Defines which object or entitiy 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 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.) enum -1.00
SecondaryNeed Adds additional conditions that need to be met for an object or entitity to be moved according to this rule. For possible conditions, see below. enum None
Properties Adds additional properties. For possible properties, see below. bitmask

Conditions

Key Description
EntitySeriouslyInjured Met when the entitiy is gravely injured. (e.g. used to bring hurt people to the infirmary).
EntityDead Met when an entitiy 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 Unsure. Probably does not move the object if it is currently loaded in the right object or a processor.
NotLoadedOnTable Only moves the object if it isn't sitting on a table.

Properties

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

Examples

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

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
Qualification This defines the qualification a prisoner needs to have in order to be allowed to use this processor. Can be the name of any reform program. enum None

Properties

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

Examples

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

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

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, aparently, object?) that will be tasked with teaching this course. Can be the name of any entity (or, aparently, 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. (Between 0 and 100?). 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

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

Properties

Key Description
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 Unsure. Probably mostly/only important for the new grading system.
Practical Same as Academic.
Repeatable Prisoners can pass this program multiple times.
Passive Could be that the prisoner does not do something himself here, but merely that something is done to him. The prisoner is passive.

Examples

The first example was put together as a small demonstration of what you could do with such programs. I've seen 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 occurances 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

The research.txt contains all the available researches in the Bureaucracy menu. [u]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.[/u]

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, but 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 Unsure. Perhaps allows for multiple researches of the same research. 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

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.

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 funamental research.

Materials

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. [u]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[/u].

Object

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 woker 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 Unsure. Setting to true probably means this object will appear when necessary, and not be brought in via a supply truck. 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
ToolbarSprite The name of the sprite in the *.spritebank, or the sprite itself, which will represent the object visually in the toolbar. 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 ""

Groups

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

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

Properties

Key Description
Material Marks this object as building material.
Entity Marks this object as entitiy (living being).
Administrator Marks this entitiy as administrative staff member (warden, Chief of Security, etc.). Probably priority targets during riots.
StaticObject Marks this object as static. Possibly deprecated with the Group attribute, or deprecating the Group attribute.
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 entitiy 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-explainatory. Explodes when it comes in contact with water, killing entities around it.
Sellable Marks this object as sellable.
Vehicle Marks this object as vehicle.
RoomSpecific Can only be placed in a room that allows it.
CanPlaceOnRoad This object can be blaced 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


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

8.2 Material

(Under Construction)