Jump to content

RRS Planning



I want to make a list of the things I'd like to do with the Raider Reform School. It's getting a bit complicated, and there's a degree of overlap, so I want to keep it all straight. So I'm going to use this topic as a worklist, and a development log. I'll update either the main topic or else add a comment as things develop. Some of this is stuff I don't know how to do yet, so some of this could get interesting. if you like that sort of thing.


OK: What do I want to do?


  • Fusion Girl Support
  • Scripting Blender
  • Test maternal Adoption Disabler
  • MCM
  • Pregswap non-breeder tattoos (optionally?)
  • Remote controller for designations
  • Some lore


Fusion Girl


I'm sick of looking at broken CBBE knees. So I'm going to switch to FG, and that means that the Raider Reform Girl is going to switch too. That said, if I was using the mod and the author suddenly decided to change the body used, I can imagine myself getting upset, so I want to support CBBE too. There's a few issues around that.


  • Two downloads or one? Or one and a patch? I'm thinking two downloads. Which is a pain since I need to maintain two sets of files. Doing a single esp and prgramatically changing the model paths appeals, but then I need to include both sets of textures and meshes, and in any case it's scripted and therefore subject to errors at runtime.
  • The other possibility is a patch file that overrides the armor addon records and changes the paths ... but I'm reluctant to use an esp slot for something so trivial. And I can't ESL it because it has AA records.
  • I already have FG models for the top and bikini, and they're working in my game at the moment.
  • The big problem is the tats. Specifically



  • I assume that if I paint them onto a FG model and texture I can get ones that will work for the new body, but that's a lot of tedious and fiddly work. Which brings me to the next point:


Scripting Blender


Blender has a Python API. I speak Python quite well. So it shouldn't be beyond me to write a script that positions the view and then loads a texture and a brush, applies the brush and saves the result.


Let's list some resources.


Blender Python Documentation

BlenderPython Reddit sub


This one is a pain since it's gt a lot of unknowns, but it's a bit of a showstopper for the FG work. Well, either that or I redo all those tats by hand. Which I really don't want to do.


Test Maternal Adoption Disabler


I have a version of the adopter script that can be modified by global settings. One disables the adopter altogether, the other skips kids whose mother is the player character. The first one works great but for the second ... I play as a guy and I don't fancy starting a female playthrough and waiting until my char's babies grow into children.


So I could do with a volunteer. But first I need to pack up the script with the old CBBE resources. I think I'm going to set up a rrs_common folder in MO for the things that don't change, and then rrs_cbbe and rrs_fg folders for the body specific stuff.




I don't much like making MCMs. I don't suppose anyone does. But getting folks to open the console and set globals is not a long term solution. So ... I think I need one. Probably more and more so going forward.


Pregswap non-breeder tattoos


The pregswap2 script is the one that switches breeder and fertile textures back and forth. (The original pregswap is obsolete and unused, but I'm reluctant to change the name in case it messes up script properties). What I'd like to do is have all the tats in the game go pink when the wearer is breedable, and then go back to their designation colors when she's pregnant. I wouldn't change the tops this way, just the tats. So you'd immediately know who needed breeding and who didn't. I can do that by applying the pregswap2 script to all the garments rather than just the breeder ones, and then leaving the object mod properties empty.


It's a bit fiddly, and there may be issues with properties not being set correctly on the new items. That last is a pain, since a clean save will remove all existing tops and tats, and redoing 50+ of them is no joke. I might be able to finagle it in scripting if it's a problem.


Remote controller for designations


I want a handheld clicky thing that you can point at a RRS girl and get a list of options. Mainly I want to be able to change her designation without going into the inventory and faffing around, but it might be nice to get some information as well.


Real Handcuffs has a suitable device, which it uses to trigger collars. I reckon I can adapt that. @Kharos was kind enough to give me a detailed breakthrough on how it worked.



I've since sought and received permission from fadingsignal  to use the mesh, so it's probably just a question of copying the device and associated items into RRS and then changing the script attached to the ammo mod. To start with I might just copy the device and the omod, and make RRS depend on RH. I can fix details once it's working.


Some Lore


I've written bits and pieces of lore for the School, but nothing that quite gelled yet. I want a background figure that serves a similar purpose to Korneum The Objectionable in the Slaver's Spellbook. Someone who had the basic idea and produced the technology and who sets the moral tone for the thing. Probably just a couple of holotapes in the Sanctuary workbench. I'm tempted to add some quests for schematics and the like, but I can imagine finding it very tedious to have to clear out some dungeon at the far end of the map, just so I could put some pretty colors on my slavegirls.


In terms of tone, the School Founder is going to be quite different from Korneum. Where the Slaver's Spellbook revels in its depravity, I want the Raider Reform School to adopt a high moral tone: all very this is for your own good, and this hurts me more than it hurts you, and lots of pontificating about the Good of Society and the Future of the Commonwealth. Obviously the player isn't going to be required to run the school (such as it is) that way; this is just to add a bit of flavor and make the gear seem a little less random.


I think I'd also like to create a second character who left some technical notes about the pre-war tech they used to create all this. Mainly so I can makes jokes about it all being "nano, or maybe quantum" and perhaps start describing the operation of the tats and tops in terms of "nanoquants". It'd give a bit of contrast to the tone of the Founder.




Recommended Comments

About CBBE vs FusionGirl: If the difference is just in the assets, I would suggest using the same file path for the assets and having a choice in the fomod installer about which assets to install. No logic required inside your mod to select the correct assets, only one (albeit larger) download, and does not waste disk space after installation. This will also scale better in the future if somebody invents a third body type.

The disadvantage is that it requires a bit work to set up the fomod installer. Also if you are packing your assets into a .ba2 archive, you will still need to create two versions of that archive.

Link to comment
35 minutes ago, Kharos said:

Also if you are packing your assets into a .ba2 archive, you will still need to create two versions of that archive.


That's the key thing, to my mind. Loose files can really slow down the game at start-up, and they can be a liability when upgrading. Plus the whole format is an undocumented mess. If I went with an installer, I'd use BAIN.


@Indarellosuggests just supplying bodyslide projects and letting them build the outfits to their own body type. That's probably the best solution to the model path problem. Doesn't help for the tats though.

Link to comment

OK. The pregswap option for the tops works. Only tested it on a slave TT so far, but it switches the tat to "Fertile" when the girl is breedable, and back to "slave" when she isn't. There might be an issue with old tats not being cleanly removed. Needs a little more testing.




OK. Problem is clear enough. The code tells if the shirt "is pregnant" by checking to see if the "breeder" omod is installed. But that's not going to work if there isn't a breeder omod. So I check the overlays and see if the fertile tat is visible. I could set the omod, but since it's not going to change, that won't help the logic. Also, I wnt this to work for the tat-only variants. (which still have tops, to be fair - they're just zapped).


; So: can't check pregnancy state based on installed omod, because we want to use this
; for non-breeder omods, and they won't change the tops at all.
; so instead, we loop over the overlays and look for tat_fertile_black
bool function tat_says_fertile()
        ents = Overlays.GetAll(a, true)
        int i = ents.length
        while i > 0
                i -= 1
                entry ent = ents[i]
                if ent.template == tat_fertile_black
                        return true
        return false


Link to comment

OK. That seems to work. I ended starting a new save with a zero-mods character, catching a slave and setting up one pillory, a bed a chair and a chemlab in sanctuary and creating a named save. Now I can create  garment, equip it on the slave, check the tats, breed her, check them again, and wsith Better Wait installed, wait until she gives birth and check again.


Only done that end to end for the Laborer tank top, but if the script logic works, I can probably catch any property errors in play.


Also started on the MCM. Setting the poll time for pregswap updates, as well as a disabler to make only breeder outfits check for pregswap. After that I want to do the adopter settings and that'll probably be it for the time being.


I might write a little python script to manage the JSON for the MCM. Python is far more forgiving of sloppy syntax like trailing commas, and it's error reporting ... well, it exists. So it makes sense to build these structures in Python and then export to JSON. I've done this before with other JSON formats and it saves a lot of stress and angst.

Link to comment

OK. I have swapping tats that work reliably. Pre-existing ones can get a bit confused, probably because they have the old script still running on them. That can be fixed by scrapping the old one, or it may well be fixed over time. I might add a timeout loop into the old tattoos script, just so they shut down gracefully if the "pregswap all" option is chosen. Probably they should do it anyway since pregswap2 is handling all the tat work now. Best way to do that is ... hmmm. There it's not like a program where you can call exit(). Probably just neuter the script so it doesn't do anything. Then if someone gets both sets of tats applied at once, it can be fixed by removing and re-equipping.


The MCM is working, except that I'm not actually using the values. So that needs to happen.


I posted on the BlenderPython sub on reddit asking for some pointers, but it doesn't look like I'm going to get any. It's a fairly low volume place and it looks like no-one's in the mood to hand-hold the newbie. That's OK, I'll just have to work this out on my own. Possibly starting today, since I'm getting fed up of looking at broken ass tats. First thing is probably to make sure I can do this manually. Just in case there's something complicated in the mesh that breaks my workflow. Can't imagine what that might be, but nice to be sure.




OK. I got an obj file by loading the unmodified FG nif in Outfit Studio and then exporting it as obj, and I can use the dds texture direct ... but then blender will try and save it as dds and I don't want that. In any case, I'll be painting onto black, white or alpha most of the time, so the skin texture is not that important.

Link to comment

Blender screen set up. I loaded the FG mesh, centered the body so the groin is about at the origin, then flipped it round for the ass view and rotated it another 30 degrees. That's the view I used for the CBBE ones, so this should be about right. Judging the size and rotation is harder, but as long as it looks decent it doesn't have to be exact.


All the tat brushes are 1024x1024. That started out just to make sure they were square (or else blender assumes they are and distortion ensues) but it means if I get the rotation right for one of them, I can save the scene and use it for all of them. So I;m thinking this for a first cut. Tat seems a little small here, but in-game they tend to look a lot bigger, and in some ways I'd prefer "discreet" to "in your face".


I made "skin" textures of 2048x2048 in white, black and alpha. I'll load the white one first. This run will give me black on a white skin. I can use a layer mask in gimp to turn the white to alpha.




Saved that as ass_left.blend so I can get the exact position and rotation for the other layers. The painted skin texture I save a copy as ass_fertile_black_on_white.png


Now, change the skin to black and paint the same image to get the white component.




Then I load alpha and do the color. Which I won't bother screenshotting since it's just a pink blob floating in the void.


Next load the black-one white texture. To get just he black part, I load it up in Gimp, add a layer mask, choose "grey scale copy of the image" for the starting mask and then invert the colors. Which is tedious. Then I do the same for the white-on-black except I don't need to invert the mask. After that I have three overlays for the ass. Now I just need to do it all again for the mons, and then composite the ass and mons textures together. And after that I have most of the process to repeat for the "breeder" variant.  And then I need to them all up in paint.net so I can save with the correct flavour of DDS.


You can see why I'd like to automate part of the process.


Anyway, that gives me this:




Which looks good. I can't zoom in so close though. That's probably because CBBE used 4k skin textures, so I made 4k overlays. The default FG ones are 2k, so there are 2K as well. Upshot is, if I zoom in too close...




... the pixelation starts to show. I'm not sure whether to stick to 2k and have mercy on people's video cards, or go to 4k and see what the difference looks like.

Link to comment



That's the difference! I think I'll stick to 4k. If anyone wants cut down versions (or 8k ones, I suppose), I might just release the blanks and point them at this page :)

Link to comment



The Blender scripting looks like a bust. The documentation says "right click on a button and choose 'get python id' and that's your API call". which would be just about usable, but the new Bender UI doesn't have that context menu item. So, that's not viable at this time.


And re-doing the tats by hand isn't either. There's going to be a re-do of the FusionGirl UV maps, apparently, and whatever I do now will probably need to be redone then.


So I've been looking at dynamic retextures. Specifically, I've finished the bikini top object mods, so I can change the design to anything I want at a workbench. What I'd like to do is attach all of this to the shoes and stockings from the Fusion Girl Chain Bikini port, so I can set shoes and socks along with the tat and top.I think I can set up one item of clothing, which has a bikini top and a tank top, as well as shoes and socks, and just hide what I don't need. The CBSockings mods already do that to handle different stocking types.


But there's an interesting hitch. If create a bikini top and set it to "whore" texture, when it equips, it immediately swaps itself to "breeder" for "fertile" according to the pregnancy state of the wearer. Now I can probably ignore the pregnant omod properly, and instead set that property from the active omod (assuming the shirt doesn't say "fertile". That would mean finding the current omod from a list, which means I'd need to be able to tell a shirt mod from a non-shirt one. A formlist, maybe. Or set a keyword on the misc item and use the Omod "GetLooseMod" call to get the misc and check for keywords


It would be nice to just set the pregnant omod when the active omod is changed at a workbench, but I can't work out how to do that. I'm guessing it's possible since something turns "pipe pistol" into "pipe rifle" and "pipe sniper rifle" acccording to the mods installed.


Eh. Not a lot to work with there. I just wanted to make a brain dump and see if I could get my thoughts in order a bit. Time to play the game now.

Link to comment

Following on from yesterday's post:


  • The tats are the only thing I can test with any degree of reliability. There may be no top at all.
  • So I get the breed state of the garment by testing the tat
  • Do I need to consider what happens if someone asks for a "top-only" option? I'll come back to that.
  • The first time something is equipped, it's always going to be in the "pregnant" state. Which is to say breeder tats will say "breeder" and whore tats will say "whore"
  • So the first time it's equipped, if it's not in pregnant state, I save the omod as the pregnant option.
  • If it is in pregnant state, I leave the preggers omod alone.
  • If I do change them, I need to change the tats too.
  • I could do with a single point of reference here that has an index into several arrays, and points at the option for each designation.
  • But to set that up properly, I need to run scripts when omods are swapped.
  • ...
  • and actually, I can do that! Changing omod fires off an onequipped/onunequipped event ... but only if the item is being worn. I don't think that helps in the workbench.

I think I need to work out how those weapon names are changed.


I'll think about it some more. There's no particular hurry.

Link to comment

OK. I can do this! There's an event, OnPlayerModArmorWeapon, that fires when the player modifies something in the workbench. That's how Coddsworth knows to be impressed when you do some crafting.


The function signature is


Event OnPlayerModArmorWeapon(Form akBaseObject, ObjectMod akModBaseObject)

The trouble is, there's no object reference there. So no way to get at the RRS script to set properties.


So where does that leave us?


The case where someone has their designation changed while wearing it isn't so bad: I'm running a script at that point and I can make sure the state is consistent. Otherwise, I can see weird cases, like someone setting the tattoo to slave and the top to whore.


What might work would be another, hidden part of the garment called "designation". Or it could be a separate, hidden inventory item. It's assume it's part of the outfit for now. We find the designation item, we know what the outfit is supposed to be for. So we can update the visible elements when it's equipped. And picked up, probably, so when the player gets it from the workbench, we juggle omods then and , and I can set display names at the same time.



Link to comment

Looking at the ObjectMod page on the CK wiki. There are some interesting things.


One of them is I can define a mod to add or remove a keyword from the base armor. So I can absolutely do a WornHasKeyword test to determine the state of the garment.


Another is the addon index. If I do tank top, bikini and no-top as three separate AA records, then I can switch between them the way the heavy, medium and light versions of armor can be swapped at a workbench. That gets around someone trying to add all three together.



  • Separate AA records for tanktop, bikini and no-top
  • invisible designation submesh that takes a Designation omod
  • designation omod sets keywords for designation. It'd be nice to have an index number, but I can use an array of keywords, and call find on it to get an index into lists of omods and tat names
  • maybe make the tattoo a separate, non displaying mesh? Or just have a "hide tattoo" keyword and make a Hide Tattoo omod? That sounds better.
  • OK. So why not just a "Designation" omod? Does nothing but set the designation keyword. Everything else from there is set on pickup or equip/unequip

This is starting to sound like a plan!


(I might want to do something to silently remove designation omods from the inventory. Or just hide them, maybe)

Link to comment





That's three keywords to determine what sort of top is present, or should be present, one to hide the tattoo. (Should I have another to show the tattoo? I thjink so, or how do I get it back?). Seven Designation keywords to show what tat and top to display when the wearer is pregnant, and "pregnant" and "breedable" keywords to say if she's preggers or not. I'm choosing "Breedable" here so that if I ever get a "becomes fertile" event from FPE, I can change things up based on that, too.


Now: I need mods and omods for all of that. I need attach points for  the top config, one for the tattoo config, one for designation, and one for breed state. (Breed state is going to show whether the garment is reading as pregnant or fertile, not the wearer.


OK. Good progress for the morning. Time to really do something else now.

Link to comment

I'd sooner use BAIN. FOMod is an undocumented, overcomplicated mess.


But yeah, it might well end up needing something like that.

Link to comment
  • Create New...