Modding Quickstart Guide
|This Article contains Outdated Information.
- This article is a guide about the development of Mods. For more information on developing scenario mods, see Lua.
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.
All mods are contained in the mods/ directory within the Prison Architect save folder. Each mod has its own subdirectory with the following structure.
- [Mod Name]]
- [Mod Name]]
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 ThumbnailEdit
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.
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||Name of the mod.||string||""|
|Author||Name of the author||string|
|Description||Description of the mod.||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.
While the manifest.txt is mandatory, not all of these keys are. Name, Author and Description are probably rather important though.
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.
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.
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.
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.
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.
|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|
BEGIN CriminalTrait Name EvilMastermind ChanceLow 10 ChanceMedium 20 ChanceHigh 30 END
The Crime is an object that defines a possible crime the prisoner has committed.
|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.
BEGIN Crime Name Bamboozling MinSentence 1 MaxSentence 5 Risk Low Trait Fraud Trait EvilMastermind END
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.
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.
|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|
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).
|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|
|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.|
|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.|
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.
A provider object defines a way for the prisoner to satisfy his needs.
|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
|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|
|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.|
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.
The production.txt file contains definitions for rules and objects that move and change other objects and entities.
The ProductionRule object defines a transport that needs to be done if available.
|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|
|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.)|
|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).|
|HighPriority||Most likely marks this rule as a high priority rule, to be considered before those that are not.|
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
A processor is an object, which will take one object and turn it into a different object if someone is working on it.
|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|
|ShowDuringOperation||If this is used, then the input-object is shown in front of the worker during processing.|
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
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.
|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|
|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.|
|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|
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
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.
|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.
|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.
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 fundamental research.
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.
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:
|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).
|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.
|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|
|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.|
|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.|
|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.|
|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.|
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
(Under Construction) [verification needed]
(Under Construction) [verification needed]