elDiablo wrote:Just a quick reply to a few things in this post:
- In regards to the reoffending rate, it is calculated per prisoner using a pretty complex formula based on their experience in the prison and a lot more. I could add a (read-only) value to the prisoner's table to return this calculated value if people want. The reason it's missing at the moment is that all shown variables are member variables of the prisoner (or WorldObject) class that we hold in a data registry for quick loading/saving/lookup/etc. As the reoffending rate isn't a variable, it doesn't exist in there. Shouldn't be too much to get the grade as a read only variable though.
Ah well... I already figured as much... because pretty many values "available for query" are found directly inside the savefile with the exact same name (and structure)... which is why I came to the conclusion that the mapped variables are almost identical to the representation of the save file format... which is how I found certain variables to use within Lua Scripts in the first place since most of them are nowhere documented yet. That said... not everything works or returns a value.
And yeah... it would be pretty awesome if most of the values the game uses internally would be added at least as "read-only" values to the specific object's table... one can never have enough information about what's currently going on with all the objects or globally in the world.
Would it also be in the range of possibilities that the current amount of prisoners per security level and the current cell capacity per security gets added as "read-only" values?
Because the mod I'm writing is experiencing a nasty stutter every time I have to use "Object.GetNearbyObjects(this, "Prisoner", <Worlddiagonal>)"... just to get ALL current prisoners on the map to be able to count the amount of prisoners per security level manually. The lag is about 0.3-0.6 seconds every time just to map the entire prisoner table (yeah I timed it using Game.Time() difference of time before and after querying).
If the current amount of prisoners per sec level and current capacity per sec level values could be queried the global World object in a way something like following:
World.Prisoners.MinSec
World.Prisoners.Normal
World.Prisoners.MaxSec
World.Prisoners.SuperMax
World.Prisoners.Protected
World.Prisoners.DeathRow
World.Capacity.MinSec
World.Capacity.Normal
World.Capacity.MaxSec
World.Capacity.SuperMax
World.Capacity.Protected
World.Capacity.DeathRow
... that would be awesome.
Then the stuttering my mod causes every now and then would be gone as I wouldn't have to get the entire prisoner list anymore to be up to date for the things I want to do. I would really appreciate that... especially if I ever intend to release the mod to Steam because otherwise people might complain about the lag every now and then and there's absolutely nothing I can do about it.
elDiablo wrote:- The save file is the way it is due to legacy. One thing we decided was important very early on in PAs development was the ability to have a save file work all the way through development. We never wanted to say to people, "oh, by the way, that prison you spent 100 hours on? Yeah, that's gone...". This, combined with the way the systems work in the game (for example, the water system keeps it own information separate from the cells it affects), mean that the save file does have a lot of duplication, as you pointed out, of x,y position. It's a trade off we made to have the compatibility over a save file increase. We also write it out as plain text (rather than binary format) so that it is human readable and players can look through and play with it if they want.
Hope that lets you know our thoughts on why some things are the way they are
Yeah, I thought about the "Legacy" and "Compatibility" issue... but shouldn't there be a legacy/compatibility branch in every game (or programs in general) for something like savegame/file loading? One that looks which version the savegame was saved with, use that old version's loading mechanism to gather the gamestate... and upon saving store it to the new save file structure? And every now and then "cutoff" the support for very old versions?
At least that's how most other games do it... otherwise the mess stays forever which is probably hardcore for code maintenance. Factorio does it that way for example. If your map is too old you are out of luck... and that's not particularly a bad thing in my opinion.
In real life I mainly studied Construction Engineering and Architecture (besides Electrical Engineering and a small part of IT)... and while a lot of my professors used to be like
"But the building is old and represents traditions and it should be maintained/conserved whatnot!"... I often replied
"Yeah, surely that justifies to keep it on lifesupport forever until it collapses in itself burying people alive."So every now and then it's okay to tear things down and build them from scratch. That's how life is...
yuk wrote:For example...this one is called Reformery, but I've since learned how to make dorms better (look at my max sec area) so I started a new prison to give that a go. The prisoner flow is not so 100% in my new prison but I am working on it.
http://imgur.com/a/pl4BXThe schedule there goes that lockup is 12-6, then shower, then lockup. This ensures everyone in the dorm has showered while giving them time to tend to other needs. They then go to yard for 1 hour then into eat. After eating they go to work for 4 hours. After work they lockup for 2 and freetime for 2 (this ensures everyone is in their own cell and won't travel to the closest and overflow them) then back to work (with all their needs met) for 3 hours. Finally they eat for 2 and then lockup again. It works very well.
All my canteens have toilet and shower blocks in them. My yards too. Both yards and canteens have phones. Dorms have radios and tvs etc so I don't like to add them elsewhere (so the rooms grade well). I usually prefer all prisoners to go through an infirmary to get to a canteen or their doorms but this prison I tried something different (and regretted it greatly). I like to feed them before bed so they don't wake up pissed and cause shit.
Looks pretty neat... and huge. I like the central Canteen!
Though I avoid using Dormitories currently because they are still bugged out in Update 7c (which I'm playing on) when it comes to their room grading. The bug seemingly has been fixed for Update 8, at least Icepick put my Bug Report to "Solved" on Mantis, but I'm still waiting for an updated Preview Build or final Update 8 to be released at the and of the month so more bugs are fixed.
Also the Prisoner's Privacy Need suffers badly using Dormitories. I can't deal with how imbalanced that is... Because even if you have 2x2 cells (Smaller than normally required 2x3) the prisoners aren't complaining about anything as long as the cell is the average room grade... but even if you build a dormitory with 6 tiles PER prisoner they are complaining about privacy. That's why I am not using Dormitories. I don't want to provoke fights between the room mates just because the system is not well balanced. I think someone did some practical research and found out that the Privacy Need doesn't suffer if there is at least 12 tiles PER prisoner in the Dormitory... but that's completely insane in my opinion, just like 16 tiles for a single prisoner Cell is badly balanced (it should be 15 or even better 12 since every item fits within 12 tile cells anyways) and the main reason for why I'd never do that (except maybe for the 3 Gang leaders to force them there).
I think that the Privacy need should suffer, yes, but it shouldn't suffer if there are at least 6-8, maybe 9 tiles per prisoner in the dormitory. Otherwise building a dormitory doesn't make sense as it would require more space overhead just to make the prisoners feel "okay" than it would require if you would just build a lot of single 2x3 cells, which then defeats the purpose of even building a Dormitory. Because hypothetically you can put the same amount of prisoners in the same space using single cells and have happier prisoners than using Dormitories and having unhappy prisoners.
yuk wrote:OI tried using a shared space with rotating schedule but the issue is supermax won't work and there's nothing else for them to do...so they go into the canteen or the yard and wander around. They are SO FRUSTRATING. Your system sounds amazing! I'd love to see it
. What's an airlock? Sounds interesting I may experiment with zoned hallways/doors to see how that turns out too
.
Yeah the SuperMax people are a problem... or let's say the Gang Members are the problem. Too bad there is no reform program to convince some of them to leave their gang life behind. There should be something like that and if they successfully leave their gang they would be marked with the Ex Gang Member trait and become a target for every other Gang Member in the prison, so from there on you'd have to put them in Protective Custody and they'd behave like other Protective Custody prisoners.
I would mod something like that into the game, I already looked into doing it but the problem is that:
- You can't get or edit Reputations, Bio Information, finished Reform Programs or Misconducts etc in general
- You can't call/run a Lua script once a reform program is finished to decide/determine what to do next with the prisoner or whatever. Would be nice if such a thing was possible for various things (like Reform Programs, Research, Production, Needs etc)
- You can't edit which prisoners are to be called to a reform program (for example the game internally uses Alcoholism/DrugAddiction/Parole as referrals for the more advanced reform programs that don't depend on a need, but you can't add such a referral to a prisoner, which means you can't call out for gang members or whatever else who you want to refer to/call out for)
- Several other small problems I encountered while evaluating the implementation but that I already forgot about.
With my current prison the working class is only MinSec, Normal, MaxSec in 3 shift rotation... like I mentioned earlier: 0:00-4:00 MinSec, 4:00-8:00 Normal, 8:00-12:00 MaxSec, 12:00-16:00 MinSec, 16:00-20:00 Normal, 20:00-24:00 MaxSec, and Eat/Sleep/Yard/LockUp in the 8 hours between each workshift. The SuperMax are mostly locked down and the other time they are either eating or in the yard. Each Security level has only 1 hour of free time in my regime. More than that causes malus points in the prisoner's grading from what I eperienced. But then again the point system is not really explained anywhere so you have to figure everything out yourself.
In another prison of mine I'm also trying out a 4 shift rotation including SuperMax. 0:00-3:00 MinSec, 3:00-6:00 Normal, 6:00-9:00 MaxSec, 9:00-12:00 SuperMax, 12:00-15:00 MinSec, 15:00-18:00 Normal, 18:00-21:00 MaxSec, 21:00-24:00 SuperMax... and again Eat/Sleep/Lockdown/Yard in between each workshift. This prison is currently working together with the Mod I'm working on.. The mod detects when someone is in Solitary for Misconducts and shifts the prisoner automatically one Category up (if there is space in the target Category that is). The mod also detects if someone is behaving for more than a couple of days and shifts the Prisoner down one Category. So almost everyone with <3 days without Misconduct ends up in SuperMax, 3-6 days in MaxSec, 6-9 Days in Normal, >9 in MinSec. The thresholds and if a category is allowed to recategorized in the first place are configureable with buttons on the Controller Item one has to place.
As for the Airlock... when you place 2 doors directly in following each other (not next to each other) then the game will recognize the tile in between those two doors as it's own small room... which allows you to put a Deployment zone there. So you can mark that Tile with MinSec (or whatever else) for example and only MinSec prisoners can go through that tile. That way you can filter out the prisoner types you want to go through the doors. But you need such an "Airlock" for each Security level you want to pass... so sometimes you need multiple such airlocks next to each other for each security level you want to go through there from one shared zone to another shared zone. I wish I could provide a picture link now, but I would have to upload one somewhere.
yuk wrote:elDiablo wrote:Just a quick reply to a few things in this post:
- In regards to the reoffending rate, it is calculated per prisoner using a pretty complex formula based on their experience in the prison and a lot more. I could add a (read-only) value to the prisoner's table to return this calculated value if people want. The reason it's missing at the moment is that all shown variables are member variables of the prisoner (or WorldObject) class that we hold in a data registry for quick loading/saving/lookup/etc. As the reoffending rate isn't a variable, it doesn't exist in there. Shouldn't be too much to get the grade as a read only variable though.
YES that would be AMAZING!!! Thank you so much!!
It's such an important part it would be good to have it accessible to modders
. Are you able to make their attributes accessible too so we can get mods to find volatile or instigating prisoners?
THAT too... additionally to my own request of current prisoners per Sec level and prisoner capacity per Sec level!