This article is about the Prison Architect save file Format ".prison" file. Its aim is to document every parameter of the save file.
The save file consists of organized, human readable text, and can be edited with a basic text editor. Editing the save file can be used to change some settings, hack in something, fix some glitches & bugs, and of course, to cheat.
Basics and Format[]
Prison Architect is a 2D game. It uses X and Y coordinates in a grid format. In game, X is left-right, Y is top-bottom. The save file contains "Head" entries followed by multiple "BEGIN ... END" block entries. Some of those entries have more "BEGIN ... END" block entries inside them.
.prison[]
The .prison format is the way games are saved in Prison Architect. They are very simply put, just .txt files. The .prison file defines all features of a prison, including the progress of Research and the daily Regime.
Location[]
Save files can be found from the main menu in Prison Architect by selecting the "Open Save Folder" option. Alternatively, save files can be found in the following locations, depending on the operating system being run and the version of the game installed (e.g. Steam vs standalone):
OS | Location |
---|---|
Windows (General) | %localappdata%\Introversion\Prison Architect\saves\
|
Windows (XP) | C:\documents and settings\your-username\local settings\application data\introversion\prison architect\saves\
|
Windows (Vista or 7) | C:\users\your-username\appdata\local\introversion\prison architect\saves\
|
Mac OS X (10.6+) | ~/Library/Application Support/Prison Architect/saves/
|
Linux | ~/.Prison Architect/saves/
|
General Concepts[]
Each object is given an Id.i and an Id.u, which are two separate identifier numbers. Id.i is unique to that object type while Id.u is unique to the whole game. The next Id.u to be used is stored as ObjectId.next.
Header[]
.prison files begin with a header of basic information.
Some of your entries might be missing. This happens when they match their default value. You can still add them manually to the save file if you wish to change it's value.
Version alpha-35 NumCellsX 300 NumCellsY 160 OriginX 0 OriginY 0 OriginW 200 OriginH 160 TimeIndex 104234. TimeWarpFactor 0.500000 RandomSeed 242 SecondsPlayed 180430 ObjectId.next 2982405 EnabledElectricity true EnabledWater true EnabledFood true
EnabledGangs EnabledMisconduct true EnabledDecay true EnabledVisibility true ImmediateMaterials false ObjectsCentreAligned true FailureConditions true FoodVariation 3 LethalForce true BioVersions 4 CeoLetterRead true Intake.next 105599. Intake.numPrisoners 14 Intake.reqMin true Intake.reqNormal false Intake.reqMax true
On the forums, Chris has stated that adding the text below will make it so "All materials will be delivered by truck, and your workmen will spend a lot of time unloading them. Workmen will no longer be able to teleport materials around"
ImmediateMaterials false
NumCellsX specifies the width of the game area and NumCellsY specifies the height of the game area. When altered to a larger number, the map increases downward and to the right, the defined number of tiles. When the size is decreased, all items that were beyond the edge of the map are visible on the very edge of the newly sized map. If the map is increased once again, the original positions of the items are retained.
- Version
- Description: Version of Prison Architect that the save file was created with.
- Default value: [Current game version]
- Value type: text
- Example value: alpha-6
- NumCellsX
- Description: Size of the map from left to right. This includes any purchased land as well.
- Default value: Large map = 200, Medium map = 150, Small map = 100
- Value type: integer
- Example value: 200
- NumCellsY
- Description: Size of the map from top to bottom. This includes any purchased land as well.
- Default value: Large map = 160, Medium map = 120, Small map = 80
- Value type: integer
- Example value: 160
- OriginX
- Description: Road position on map from left to right.
- Default value: 0
- Value type: integer
- Example value: 100
- OriginY
- Description: Road position on map from top to bottom.
- Default value: 0
- Value type: integer
- Example value: 80
- OriginW
- Description: Default width of the map.
- Default value: Large map = 200, Medium map = 150, Small map = 100
- Value type: integer
- Example value: 200
- OriginH
- Description: Default height of the map.
- Default value: Large map = 160, Medium map = 120, Small map = 80
- Value type: integer
- Example value: 160
- TimeIndex
- Description: Total in game time passed. 60 units is equal to 1 in-game hour. For example: a value of 1440 is 1 in-game day.
- Default value: 480.000
- Value type: float
- Example value: 30503.2
- TimeWarpFactor
- Description: How fast in-game time will go. Note: Setting it to 1.00000 would mean 1 in-game hour would pass in 60 real life seconds, setting it to 2.00000 would mean 1 in-game hour would pass in 30 real life seconds, Setting it to 0.50000 would mean 1 in-game hour would pass in 120 real life seconds.
- Default value: Large map = 0.50000, Medium map = 0.75000, Small map = 1.00000
- Value type: float
- Example value: 0.500000
- RandomSeed
- Description: Randomly generated map.
- Default value: [No default value]
- Value type: 32-bit signed integer (-2147483647 to 2147483647)
- Example value: 11656
- If this value is omitted or equal to zero, the game will generate a new positive value (although it does accept negative values in the savefile).
- SecondsPlayed
- Description: Total amount of seconds that map has been played.
- Default value: 0
- Value type: integer
- Example value: 180059
- ObjectId.next
- Description: next unique id that will be assigned to an object.
- Default value: [No default value]
- Value type: integer
- Example value: 2983450
- EnabledElectricity
- Description: If set to false, you will have unlimited electricity. You won't need electric cables or a power station.
- Default value: true
- Value type: boolean
- Example value: false
- EnabledWater
- Description: If set to false, you will have unlimited water. You won't need pipes or a water station.
- Default value: true
- Value type: boolean
- Example value: false
- EnabledFood
- Description: If set to false, cooks will not cook or serve food. Prisoners will get hungry and will complain about it, though.
- Default value: true
- Value type: boolean
- Example value: false
- EnabledMisconduct
- Description: if set to false, prisoners will not riot or break prison rules.
- Default value: true
- Value type: boolean
- Example value: false
- EnabledGangs
- Description: If set to true, some prisoners will be in gangs and join in fights together.
- Default value: false
- Value type: boolean
- Example value: true
- EnabledDecay
- Description: If set to false, everything would stop getting dirty and dirty things will stay clean once cleaned. (Cell's Con will stop going down). Note: Blood from fights will still show up.
- Default value: true
- Value type: boolean
- Example value: false
- EnabledVisibility
- Description: Determines if FOW(Fog Of War) is on or off.
- Default value: true
- Value type: boolean
- Example value: false
- ImmediateMaterials
- Description: If set to false, all materials will be delivered by truck and Workmen will no longer be able to teleport materials around.
- Default value: true
- Value type: boolean
- Example value: false
- EnabledIntake
- Description: Determines if continuous intake of prisoners is on or off.
- Default value: true
- Value type: boolean
- Example value: false
- EnabledEvents
- Description: If set to true random events will pop up while you run your prison. If set to false you wont get said events. Can be toggleable ingame through only the 'Create New Prison' prompt.
- IMPORTANT: If you set 'EnabledEvents' to 'false' while you have an event currently running. That event will stay on your todo list indefinitely. In order to remove these events, press Ctrl-F and try finding the exact line "BEGIN Events". Then delete the text between "BEGIN ActiveEvents" and the "END" tag associated with it (Not neccesarily the first "END" that comes after it!). Remember to delete the "BEGIN ActiveEvents" and its "END" tag as well.
- Default value: false
- Value type: boolean
- Example value: true
- ObjectsCentreAligned
- Description: (Unknown)
- Default value: true
- Value type: boolean
- Example value: false
- FailureConditions
- Description: Determines if failure conditions is on or off.
- Default value: true
- Value type: boolean
- Example value: false
- FoodQuantity
- Description: Determines the amount of food quantity in the prison.
- Default value: 2
- Possible values: 1 = Low, 2 = Medium, 3 = High.
- Value type: integer
- Example value: 3
- FoodVariation
- Description: Determines the food variety in the prison.
- Default value: 2
- Possible values: 0 = None, 1 = Low, 2 = Medium, 3 = High.
- Value type: integer
- Example value: 3
- LethalForce
- Description: Determines if freefire is activated or deactivated.
- Default value: false
- Value type: boolean
- Example value: true
- BioVersions
- Description: (Unknown). Note: Even if you edit it, once you save your game it will revert to the default value of 4.
- Default value: 4
- Value type: integer
- Example value: 2
- CeoLetterRead
- Description: Determines if the CEO letter was read in that prison or not.
- Default value: false
- Value type: boolean
- Example value: true
- Intake.next
- Description: The time when the next prisoner intake will happen. (in seconds).
- Default value: 1919.00
- Value type: float
- Example value: 105599.00
- Intake.numPrisoners
- Description: The number of prisoners that will arrive at the next prisoner intake.
- Default value: 8
- Value type: integer
- Example value: 19
- Intake.reqMin
- Description: Determines if low risk prisoners are set to open.
- Default value: false
- Value type: boolean
- Example value: true
- Intake.reqNormal
- Description: Determines if normal risk prisoners are set to open.
- Default value: true
- Value type: boolean
- Example value: false
- Intake.reqMax
- Description: Determines if maximum risk prisoners are set to open.
- Default value: false
- Value type: boolean
- Example value: true
Cells[]
This entry stores data after the "Header" data level. It defines what material is located in a tile location. If a map is 200x160 tiles in size, "0 0" refers to the top-left most tile, "0 1" is the second tile below the top-most tile, "199 159" will be bottom-right most tile.
BEGIN Cells BEGIN "0 0" Mat PavingStone Con 37.8430 END BEGIN "0 1" Mat Sand Con 18.5168 END BEGIN "0 2" Con 6.91396 END BEGIN "0 3" Mat PavingStone Con 31.9050 END BEGIN "0 3" Mat BrickWall Con 58.4516 Ind true END BEGIN "0 4" Mat Grass Con 78.3275 Room.i 27 Room.u 277797 END END
The first two numbers are the co-ordinates of the cell in question.
In the above example, cell [0,0] is made of paving stones, whilst cell [0,1] is sand.
If a cell is considered 'Inside' the cell will contain an attribute 'Ind' with a value of true. This will be absent for outside cells.
Each cell also contains a reference to the Room ID and Unique Id if it forms part of a room.
- Mat
- Description: Materials name.
- Default value: Dirt
- Possible value: List of Materials
- Value type: text
- Example value: BrickWall
- Con
- Description: Condition of the Material. (How damaged it is).
- Default value: [No default value]
- Possible values: from 0.00000(Worst condition) to 100.00000(Best condition)
- Value type: float
- Example value: 0.00000
- Room.i
- Description: Room's ID.
- Default value: [No default value]
- Value type: integer
- Example value: 19
- Room.u
- Description: Room's Unique ID.
- Default value: [No default value]
- Value type: integer
- Example value: 779284
- Ind
- Description: Determines if the current tile is indoors.
- Default value: false
- Value type: boolean
- Example value: true
The following materials can be used:
BrickWall Building BuildingConcrete BuildingFrame BurntFloor BurntWall CancelJobs CeramicFloor ClearIndoorArea ConcreteFloor ConcreteTiles ConcreteWall Demolish DemolishWalls Dirt FancyTiles Fence Grass Gravel LongGrass MarbleTiles MetalFloor MosaicFloor Mud None PavingStone PerimeterWall RemoveTunnels Road RoadMarkings RoadMarkingsLeft RoadMarkingsRight Roof Sand Stone Water WhiteTiles WoodenFloor
Objects[]
This entry defines each object attributes after the "Cells" data. This includes general objects (beds, tables, doors, etc,), your staff (work-mans, guards, warden, accountant, etc.) and your prisoners.
BEGIN "[i 1045]" Id.i 1045 Id.u 550275 Type Bench SubType 0 Pos.x 108.5000 Pos.y 65.00000 Or.x -1.000000 Or.y 0.0000000 END
The number in brackets states the id of the object.
In the above example, you can see a single object, being a bench with id "1045", unique identifier "550275", type "Bench", sub-type "0", position x in "108.5000" and position y in "65.00000".
If an object has orientation will have the attributes Or.x and Or.y.
Each object can have more optional attributes.
Required attributes
- Id.i
- Description: Object list's id.
- Default value: [No default value]
- Value type: integer
- Id.u
- Description: Object's unique id for the game.
- Default value: [No default value]
- Value type: integer
- Type
- Description: The type of object to be displayed.
- Default value: [No default value]
- Value type: text
- SubType
- Description: The Sub-type or skin of the object.
- Default value: [No default value]
- Value type: integer
- Pos.x
- Description: Cell's position from left to right.
- Default value: [No default value]
- Value type: float
- Pos.y
- Description: Cell's position from top to bottom.
- Default value: [No default value]
- Value type: float
Optional attributes
- Or.x
- Description: Orientation in the x axis.
- Default value: 0
- Possible values: -1 (up), 0 (not going up or down), 1 (down)
- Value type: integer
- Or.y
- Description: Orientation in the y axis.
- Default value: 0
- Possible values: -1(left), 0 (right), 1 (right)
- Value type: integer
- Powered
- Description: Determines if the object has electrical power.
- Default value: false
- Value type: boolean
- On
- Description: Determines if the object is on or off.
- Default value: false
- Value type: boolean