Jump to content

[mod] Species_Classes and Portraits text file generator


Goregath

Recommended Posts

Posted (edited)

@Goregath  Sorry for the spam, but I'm working on updating my mod, which also means leaning on yours again.  Just re-read the thread to refresh my memory.  Instructions are still written based on your original code of using file names for male/female/futa.  You later updated it to look for male/female folders as a different option (which I personally prefer), but you also mention it working with mods for different classes.  The example mod you tested with however doesn't have any genders specified, just the class.  Does your script currently account for using folders for both?  IE:  /Humanoid/MyNewSpecies/Admiral/Male?  If so, would it be possible for you to update your instructions on the file post with this info and confirmation what class folder names it's looking for?  I seem to recall Stellaris has changed them a couple of times over the years.  At least a couple of them anyways.

 

Edit:  Looking at your script, I think it's checking gender first, then class?  So I'd need to use /Humanoid/MyNewSpecies/Male/Admiral and so on?

Edited by XavierMace
Posted (edited)

@XavierMace Thanks for the guide on the changes, I'll give that a look over.

Just to clarify you are asking about a portrait set (as in another humanoid set)? or a new species set (custom set like Kemonomimi)?

TL;DR
It uses the full path of each picture to determine gender first, attempting to match female, male, then futa. Sorting it based on first found (e.g. FemaleFuta.dds is female, male/futa.dds is male). When it has 3 lists: Female, Male, Futa, each is passed individually to a function that tries the same thing with leader type (defined line 344). Again the first leader type detected is matched and it will move onto the next image (e.g /Humanoid/MyNewSpecies/Admiral/Male/scientistF01.dds will be a female admiral in the humanoid species tab under portrait set MyNewSpecies).


Long version
For the custom species, there is a list on line 84 called

Topspecies_names

The code uses this list to determine what species sets exist and make portrait sets of the subfolders.

After it's found a folder (say humanoid) it sorts them into a dictionary of portrait names. When it gets to the files, the file paths are sorted using regular expressions (regex). It uses 3 entries in the list define on line 68. Which are:

names = [['[Ff][0-9]+\.'+pic_types+'$','(?i)female'],
         ['[Mm][0-9]+\.'+pic_types+'$','(?i)male'],
         ['[Hh][0-9]+\.'+pic_types+'$','(?i)futa','(?i)indeterminate']]


So for example:
If your path is:
C:\\PathTo\\Documents\\Paradox Interactive\\Stellaris\\mod\\SomeMod\\gfx\\models\\Humanoid\\Hum01\\01HumF1.dds
it will try to match any in the first set of expressions ('[Ff][0-9]+\.'+pic_types+'$' or '(?i)female') which will succeed as the file ends in F1.dds (The dollar sign $ in regex means end of line.)

This matching process is done on lines 284 to 308 where the variable results is a list of full paths to each file, e.g:

results = [
C:\\PathTo\\Documents\\Paradox Interactive\\Stellaris\\mod\\SomeMod\\gfx\\models\\Humanoid\\Hum01\\01HumF1.dds,

C:\\PathTo\\Documents\\Paradox Interactive\\Stellaris\\mod\\SomeMod\\gfx\\models\\Humanoid\\Hum01\\01HumF2.dds,

C:\\PathTo\\Documents\\Paradox Interactive\\Stellaris\\mod\\SomeMod\\gfx\\models\\Humanoid\\Hum01\\01HumF3.dds,
...,

]

It will try to match all 3 types (female, male, futa), when it's done it checks what it's found. The only accptable combos are: all 3, male and female, or generic (untyped). If it can't make that, it will make all portraits untyped. i.e. if you provide only male and futa portraits, it will lump them all into an untyped group that will show up for all genders.


It does a similar method for the learder types. Line 74 defines what it searches for:

leader_names_search = {
        'ruler':['(?i)ruler'],
        'pop':['(?i)pop'],
        'scientist':['(?i)scientist'],
        'governor':['(?i)governor'],
        'general':['(?i)general'],
        'admiral':['(?i)admiral'],
        'envoy':['(?i)envoy'],
    }

Annoyingly I believe Python dictionaries are not sorted, so I cannot guarantee the order it will search for leaders. i.e. the file path /Humanoid/MyNewSpecies/Admiral/Male/scientistF01.dds could be either an admiral or a scientist and may even change each time the code is run.

Regrets
Having a look through to explain this, I find there are so many problems with my naming conventions and consistency. The code works fine (for older versions) but the names...
The function species_folders actually sorts the genders and the function gender_detect cleans up the names if they are invalid and creates the portrait file.

Clearly I'll need to clean this thing up at some point.

Edited by Goregath
Bad formatting; added failure case for gender
Posted
12 hours ago, Goregath said:

It does a similar method for the learder types. Line 74 defines what it searches for:

leader_names_search = {
        'ruler':['(?i)ruler'],
        'pop':['(?i)pop'],
        'scientist':['(?i)scientist'],
        'governor':['(?i)governor'],
        'general':['(?i)general'],
        'admiral':['(?i)admiral'],
        'envoy':['(?i)envoy'],
    }

Annoyingly I believe Python dictionaries are not sorted, so I cannot guarantee the order it will search for leaders. i.e. the file path /Humanoid/MyNewSpecies/Admiral/Male/scientistF01.dds could be either an admiral or a scientist and may even change each time the code is run.

 

Yeah, that's where I'm confused.  My original mod, which used your script just uses:

 

/Humanoid/MyNewSpecies/mynewspecies_leadertype_f00.dds

That technically works perfectly.  It just gets a bit messy for me when dealing with large volumes of pictures and portraits.  Organizing them into smaller groups would help me a lot personally.  So ideally I was trying to specify gender and class using the directory names instead of the file name.  If I'm following what you're saying, that would work for the classes but not the gender.  IE doing:

 

/Humanoid/MyNewSpecies/admiral/female/mynewspecies00.dds
or
/Humanoid/MyNewSpecies/female/admiral/mynewspecies00.dds

 

Where neither class nor gender is part of the dds file name, wouldn't work?  Or at least it didn't seem to?

 

In regards to your first question about portrait vs species, take a look at what's changed as I think the answer is dependent on that.  My mod is currently appending portrait sets to vanilla categories.

Posted (edited)
On 6/5/2024 at 4:45 AM, XavierMace said:

 

Yeah, that's where I'm confused.  My original mod, which used your script just uses:

 

/Humanoid/MyNewSpecies/mynewspecies_leadertype_f00.dds

That technically works perfectly.  It just gets a bit messy for me when dealing with large volumes of pictures and portraits.  Organizing them into smaller groups would help me a lot personally.  So ideally I was trying to specify gender and class using the directory names instead of the file name.  If I'm following what you're saying, that would work for the classes but not the gender.  IE doing:

 

/Humanoid/MyNewSpecies/admiral/female/mynewspecies00.dds
or
/Humanoid/MyNewSpecies/female/admiral/mynewspecies00.dds

 

Where neither class nor gender is part of the dds file name, wouldn't work?  Or at least it didn't seem to?

 

In regards to your first question about portrait vs species, take a look at what's changed as I think the answer is dependent on that.  My mod is currently appending portrait sets to vanilla categories.


Both those file paths should work for class and gender.
In the example I provide on the first page about Making A Race From An Old Mod I used folders to distinguish gender.
The only difference I see is that I use uppercase for Female, but that shouldn't matter.

If case is the problem, then the lines lower:

need to change.


They are a list of what the code looks for in gender, each being two entries.
The second entry '(?i)female' should be finding female that is case insensitive.

If it's not working maybe change it to '[Ff]emale' which would search for female with either capitalized or not 'f'.
example:

names = [['[Ff][0-9]+\.'+pic_types+'$','(?i)female'],
         ['[Mm][0-9]+\.'+pic_types+'$','(?i)male'],
         ['[Hh][0-9]+\.'+pic_types+'$','(?i)futa','(?i)indeterminate']]
 
names = [['[Ff][0-9]+\.'+pic_types+'$','[Ff]emale'],
         ['[Mm][0-9]+\.'+pic_types+'$','[Mm]male'],
         ['[Hh][0-9]+\.'+pic_types+'$','[fF]uta','[Ii]ndeterminate']]
Edited by Goregath
Posted
17 hours ago, Goregath said:


Both those file paths should work for class and gender.
In the example I provide on the first page about Making A Race From An Old Mod I used folders to distinguish gender.
The only difference I see is that I use uppercase for Female, but that shouldn't matter.

 

 

Hmmm, ok, I'll try it again next time I generate a new set.  It's certainly possible I did something else wrong.

  • 3 weeks later...
Posted
On 6/10/2024 at 2:21 AM, XavierMace said:

 

Hmmm, ok, I'll try it again next time I generate a new set.  It's certainly possible I did something else wrong.

It's been updated. If there is anything wrong or buggy, I'll see what I can do.

I've done a minimal test where I have the folder:
C:\Users\USERNAME\Documents\Paradox Interactive\Stellaris\mod\TestMod\gfx\models
with subfolders from Vanilla Framework.

And no other folders under Test Mod.

I point it to test mod, it creates the rest.

Worked for Sellaris with only "Base Game Gender Patch" mod running alongside.

Posted

ReUploaded because I'm a potato.

If you downloaded recently, try again please and get the working version.

 

I added a new example for those who want to see the new features.
Supports new race sets, and subbing in Futa/Indeterminate naming conventions for a missing gender.

 

I probably will change the defaults so less commands are needed for the terminal/IDLE.
But for backwards compatibility, I've left them.

Posted
On 6/26/2024 at 5:04 PM, Goregath said:

It's been updated. If there is anything wrong or buggy, I'll see what I can do.

I've done a minimal test where I have the folder:
C:\Users\USERNAME\Documents\Paradox Interactive\Stellaris\mod\TestMod\gfx\models
with subfolders from Vanilla Framework.

And no other folders under Test Mod.

I point it to test mod, it creates the rest.

Worked for Sellaris with only "Base Game Gender Patch" mod running alongside.

 

Awesome, thanks.   I've been super busy with work lately, but I'll probably be doing another mod update next weekend.

Posted
On 6/26/2024 at 11:22 PM, Goregath said:

ReUploaded because I'm a potato.

If you downloaded recently, try again please and get the working version.

 

I added a new example for those who want to see the new features.
Supports new race sets, and subbing in Futa/Indeterminate naming conventions for a missing gender.

 

I probably will change the defaults so less commands are needed for the terminal/IDLE.
But for backwards compatibility, I've left them.

 

Thanks again as always.  Running against the latest version of my mod, it generated all three common folders, however species_classes is empty.  That said looking at what's left in those files in 3.12.x, I guess there's not really any need to provide them if you're using OEM species so maybe functioning as intended?  It does seem to be working.

 

I haven't tried to look through the code yet, but is the Vanilla Framework flag just determining if it uses OEM species in the portrait sets file or VF's species?  I do have one other request if you'd be willing.  Would it be possible to have the script prompt you (or allow you to pass via a flag) the naming prefix being used?  IE instead of being hardcoded to VF, allow user to pass a prefix?  For example, I've got multiple "generations" of my mod.  So I prefix them accordingly to prevent other naming conflicts.  IE instead of VF, my first one is SL1, second one is SL2, etc.  I've been manually changing your script accordingly, which certainly works for me, but hey I'm lazy so I figured I'd ask.

 

I'm perfectly fine with the Python script as I have Python installed anyways, but you mentioned making it an executable, looking at this thread it looks pretty straight forward:  https://stackoverflow.com/questions/5458048/how-can-i-make-a-python-script-standalone-executable-to-run-without-any-dependen

Posted
7 hours ago, XavierMace said:

 

Thanks again as always.  Running against the latest version of my mod, it generated all three common folders, however species_classes is empty.  That said looking at what's left in those files in 3.12.x, I guess there's not really any need to provide them if you're using OEM species so maybe functioning as intended?  It does seem to be working.

 

I haven't tried to look through the code yet, but is the Vanilla Framework flag just determining if it uses OEM species in the portrait sets file or VF's species?  I do have one other request if you'd be willing.  Would it be possible to have the script prompt you (or allow you to pass via a flag) the naming prefix being used?  IE instead of being hardcoded to VF, allow user to pass a prefix?  For example, I've got multiple "generations" of my mod.  So I prefix them accordingly to prevent other naming conflicts.  IE instead of VF, my first one is SL1, second one is SL2, etc.  I've been manually changing your script accordingly, which certainly works for me, but hey I'm lazy so I figured I'd ask.

 

I'm perfectly fine with the Python script as I have Python installed anyways, but you mentioned making it an executable, looking at this thread it looks pretty straight forward:  https://stackoverflow.com/questions/5458048/how-can-i-make-a-python-script-standalone-executable-to-run-without-any-dependen

For the first problem:
It is populating species_classes for me, which was working in my new EXAMPLE 2 on the mod page.
I've added new flags and internally debated if they should all just default to True.

The new functionality is attached to 'custom_support' being True.

--run_all True --andro_sub True --custom_support True --block_prescripted_countries True --block_base_species True


I think for most people all of these should be True, other than andro_sub, that depends on use case.

For the second problem:

I added the functionality and it seems to work for me, but do note that if the name is too long it wont appear in Stellaris and that's beyond my control. (see image below)
The new flag is:

--name_prefix 'Buts'

Example_post.jpg.15753cf9b21abfce004f35156b9fda65.jpg

This is using my code to add Smutty Space Ponies as it was sorted similar to what I needed (and let me test andro_sub flag as half had only female and intersex.
It generated the species classes files using the custom_support flag.

 

Posted
5 hours ago, Xeno Fan said:

this wont even run on my pc i think onedrive fucked up my pathing i cant even run the code

If you send me the error msg I can have a go at figuring out what is wrong. :)

Posted

I feel bad that you made changes for me because I think you misunderstood what I was asking for or I didn't explain it very well.  I also realized on Sunday when updating my mod that I'm also probably no longer using your script as intended/expected so I should probably clarify my use case.

 

In my mind the only reason for VF and other portrait mods to use their own categories in the past was to prevent unintentionally overwriting vanilla or other mods.  In other words it was a safety/compatibility measure in my book.  Now we can append, so in my opinion there's generally no reason to use a non-OEM/retail category.  Personally (and obviously others may disagree), I prefer using the OEM/retail categories as that allows you to gene-mod pops between vanilla and lewds in-game.

 

The only catch there is if you have multiple mods with the same file names for their portraits/species/sets files.  Stellaris still treats that as a conflict and only loads one.  So using a unique prefix on species subclasses (and therefore the files) largely guarantees compatibility without forcing you to come up with more unique names.  So in my case all my mods have unique prefixes on the file names (SL1, SL2, etc) instead of VF as well as the subspecies and I use OEM categories (not VF) so that my portraits show up with all the official/retail portraits. So for example I have:

 

image.png.1e7ccc6375b7f9a987fe29f5f2b95ace.png

 

The definition files are prefixed the same way.  I also confirmed this weekend that running like this, the species_classes folder and it's file(s) are completely unneeded.  My mod is working perfectly with just the portrait_categories and portrait_sets folders.  I'm also only using a single file in each for all my species/portraits in the mod, so just _sl2_portrait_categories.txt and _sl2_portrait_sets.txt.

Posted

Don't feel bad, it's motivation to get off my butt and do some hobbyist coding when I can. :)

Lines 862 to 868 might be interesting to you:

#name_prefix for naming things, best if short number of chars but can be any length string
if name_prefix is None:
    if vanilla_framework:
        name_prefix = 'VF'
    else:
        mod_folder = os.path.basename(os.path.normpath('folderpath'))
        name_prefix = mod_folder[:2]


It's the only place where the VanillaFramework flag is used anymore, and that's only if name_prefix is None (which the default is 'VF'... I really should delete that vanilla_framework flag)
But when vanilla_framework is False and name_prefix is none, the code will assign the first two letters of the mod folder as the prefix.
This is the line with mod_folder[:2]. Changing the 2 to another number will change the number of letters used.

Can confirm that species classes file is only for non-vanilla species sets.
So if you're sticking to the vanilla sets, most of the custom changes are not necessary. (neither is the quoted code above)

PS: I also made a lot of the changes out of motivation while working on it. You motivated me to update it, I decided to add a lot of the extra stuff as I was planning to ages ago.

Posted
4 hours ago, Goregath said:

Don't feel bad, it's motivation to get off my butt and do some hobbyist coding when I can. :)

Lines 862 to 868 might be interesting to you:

#name_prefix for naming things, best if short number of chars but can be any length string
if name_prefix is None:
    if vanilla_framework:
        name_prefix = 'VF'
    else:
        mod_folder = os.path.basename(os.path.normpath('folderpath'))
        name_prefix = mod_folder[:2]


It's the only place where the VanillaFramework flag is used anymore, and that's only if name_prefix is None (which the default is 'VF'... I really should delete that vanilla_framework flag)
But when vanilla_framework is False and name_prefix is none, the code will assign the first two letters of the mod folder as the prefix.
This is the line with mod_folder[:2]. Changing the 2 to another number will change the number of letters used.

Can confirm that species classes file is only for non-vanilla species sets.
So if you're sticking to the vanilla sets, most of the custom changes are not necessary. (neither is the quoted code above)

PS: I also made a lot of the changes out of motivation while working on it. You motivated me to update it, I decided to add a lot of the extra stuff as I was planning to ages ago.

 

I know that feeling, I just end up using that energy to IT hobby stuff more related to my actual job.  LOL.   But, yeah, that was one of the sections I'd spotted and had been changing when I run the script.  I got side tracked from testing the script itself when I realized my mod was breaking something else which ended up being due to the species_classes file which I no longer needed to be including anyways.  It took me far too long to figure out that was what was causing my issues.

  • 10 months later...
Posted
On 7/9/2024 at 4:33 PM, Goregath said:

Don't feel bad, it's motivation to get off my butt and do some hobbyist coding when I can. :)

Lines 862 to 868 might be interesting to you:

#name_prefix for naming things, best if short number of chars but can be any length string
if name_prefix is None:
    if vanilla_framework:
        name_prefix = 'VF'
    else:
        mod_folder = os.path.basename(os.path.normpath('folderpath'))
        name_prefix = mod_folder[:2]


It's the only place where the VanillaFramework flag is used anymore, and that's only if name_prefix is None (which the default is 'VF'... I really should delete that vanilla_framework flag)
But when vanilla_framework is False and name_prefix is none, the code will assign the first two letters of the mod folder as the prefix.
This is the line with mod_folder[:2]. Changing the 2 to another number will change the number of letters used.

Can confirm that species classes file is only for non-vanilla species sets.
So if you're sticking to the vanilla sets, most of the custom changes are not necessary. (neither is the quoted code above)

PS: I also made a lot of the changes out of motivation while working on it. You motivated me to update it, I decided to add a lot of the extra stuff as I was planning to ages ago.

 

Not sure if you're still around, but I took a quick peek to see if 4.0 broke portrait mods and from quick testing the answer is largely no.  However, it does look like Paradox renamed/changed the greeting names.  So the portrait mod still "works" but error log is flooded with errors for the greeting.  I was also seeing some errors related to layers but not sure what that's about as it doesn't seem to happen for all the portraits.

  • 3 weeks later...
Posted
On 7/9/2024 at 4:33 PM, Goregath said:

Don't feel bad, it's motivation to get off my butt and do some hobbyist coding when I can. :)

 

I took a stab at updating your script for 4.0 (attached).  Only did one quick test run, but it looks to have addressed the greetings error and the change from pop to pop_group resulting in all pop groups having the same portrait on the management tab of the city view.  The greetings error was just a quick copy/paste to resolve the errors.  I did NOT gender the greetings which looks to be the reason for the greeting change in the first place.

 

On other side note.  I'm on a new PC and did a fresh install of Python (3.13.4).  I don't recall getting these messages last time I used the script but they also don't seem to have caused any problems:

 

Quote

E:\Temp\Stellaris\Stell_VanF 1_0_10_fixed.py:65: SyntaxWarning: invalid escape sequence '\g'
  paser.add_argument('--folderpath',help='Where is Vanilla Framework\gfx?')
E:\Temp\Stellaris\Stell_VanF 1_0_10_fixed.py:91: SyntaxWarning: invalid escape sequence '\.'
  names = [['[Ff][0-9]+\.'+pic_types+'$','(?i)female'],
E:\Temp\Stellaris\Stell_VanF 1_0_10_fixed.py:92: SyntaxWarning: invalid escape sequence '\.'
  ['[Mm][0-9]+\.'+pic_types+'$','(?i)male'],
E:\Temp\Stellaris\Stell_VanF 1_0_10_fixed.py:93: SyntaxWarning: invalid escape sequence '\.'
  ['[Hh][0-9]+\.'+pic_types+'$','(?i)futa','(?i)indeterminate']]
E:\Temp\Stellaris\Stell_VanF 1_0_10_fixed.py:836: SyntaxWarning: invalid escape sequence '\D'
  folderpath = r'%UserProfile%\Documents\Paradox Interactive\Stellaris\mod\ModNameHere'
E:\Temp\Stellaris\Stell_VanF 1_0_10_fixed.py:1110: SyntaxWarning: invalid escape sequence '\D'
  if you aim it at '%UserProfile%\Documents\Paradox Interactive\Stellaris\mod\Vanilla Framework\gfx\models\Aquatic'
E:\Temp\Stellaris\Stell_VanF 1_0_10_fixed.py:1161: SyntaxWarning: invalid escape sequence '\.'
  elif re.search('\.'+pic_types+'$',ii):

 

I got the same messages using the script copy from before my 4.0 changes, so I don't think it's something I did?

Stell_VanF 1_0_10_fixed.zip

Posted (edited)
On 6/5/2025 at 12:53 AM, XavierMace said:

 

I took a stab at updating your script for 4.0 (attached).  Only did one quick test run, but it looks to have addressed the greetings error and the change from pop to pop_group resulting in all pop groups having the same portrait on the management tab of the city view.  The greetings error was just a quick copy/paste to resolve the errors.  I did NOT gender the greetings which looks to be the reason for the greeting change in the first place.

 

On other side note.  I'm on a new PC and did a fresh install of Python (3.13.4).  I don't recall getting these messages last time I used the script but they also don't seem to have caused any problems:

 

 

I got the same messages using the script copy from before my 4.0 changes, so I don't think it's something I did?

Stell_VanF 1_0_10_fixed.zip 13.68 kB · 1 download

Sorry about the late reply, IRL things have significantly reduced my time to do anything.
I had a quick look at the code and the changes seem like paradox changing their syntax again.

For the python errors, it's complaining about the strings using escape sequences (the '\' char), when the code isn't doing that.
Python is expecting a command (like newline '\n') when it sees a '\' and automatically complains when it sees one it doesn't recognize.
The regex I believe interprets it as a real string (i.e. just a string, no commands), then applies it's own formatting.

If it's annoying, you can put r in front of the string to get python to treat it as a real string: e.g:
 

paser.add_argument('--folderpath',help=r'Where is Vanilla Framework\gfx?')


As far as I know, it's a harmless error.

Edited by Goregath
Posted
3 hours ago, Goregath said:

Sorry about the late reply, IRL things have significantly reduced my time to do anything.
I had a quick look at the code and the changes seem like paradox changing their syntax again.

For the python errors, it's complaining about the strings using escape sequences (the '\' char), when the code isn't doing that.
Python is expecting a command (like newline '\n') when it sees a '\' and automatically complains when it sees one it doesn't recognize.
The regex I believe interprets it as a real string (i.e. just a string, no commands), then applies it's own formatting.

If it's annoying, you can put r in front of the string to get python to treat it as a real string: e.g:
 

paser.add_argument('--folderpath',help=r'Where is Vanilla Framework\gfx?')


As far as I know, it's a harmless error.

 

Nah, like I said, it didn't seem to be causing any problems I just didn't recall getting the warnings the last time I'd used the script.  Maybe my memory is just worse than I thought.

  • 1 month later...
Posted

hi, can you tell me the spoecies mod in the picture with the egyptian anubis jackal guy? thanks. i searched the web for it but failed to find it.

Posted
23 hours ago, Sekhen said:

hi, can you tell me the spoecies mod in the picture with the egyptian anubis jackal guy? thanks. i searched the web for it but failed to find it.

 

Which picture?

Posted
On 7/21/2025 at 11:45 PM, Sekhen said:

hi, can you tell me the spoecies mod in the picture with the egyptian anubis jackal guy? thanks. i searched the web for it but failed to find it.

It is this mod is the mod I restore as an example:

It's old and I'm not sure if my program still works for it.
This post seems to have restored it:

  

On 11/15/2024 at 8:39 AM, test3211112 said:

I made a new version of all four original mods.

 

Everything should now be fixed and I added some updates in particular to everything involving the snu fever trait.

 

If there's any remaining bugs, let me know.

sexyxenos.zip 257.18 MB · 361 downloads sexysxenostraits.zip 53.5 MB · 297 downloads sexysxenoscountries.zipUnavailable sexysxenospersonalities.zip 6.25 kB · 187 downloads

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...