๐ Modding 101: Filenames
๐ช I've been thinking for a while that I should do a post like this, then I was asked for assistance with some filenames, so I figured it was time.
๐ Yes, I know we've got a whole bunch of "PartFlags and Tags" posts to finish.
๐น I don't like my PNG divider because it doesn't change color with Patreon's "Appearance" settings, so I'm gonna just use the text divider for now and we can all ignore the line-breaking.
โ//โ DISCLAIMER + FOREWORD:
I consider myself more of a "general mod creator" who does a bit of everything, so the way I do my filenames is more from a "general modding" perspective, if that means anything whatsoever.
โ
It is reasonable for you to not know what the "best practices" might be for filenames.
A tutorial might exist for this somewhere in the aether, but I've never seen one, so chances are that you haven't either. What I have seen is my fair share of absolutely unacceptable filenames from across the board. ๐๏ธ It's a jungle out there.
Point is, you are not alone and you need not feel bad if you've been doing it improperly without even realizing that there are "best practices".
Don't fret, ๐๏ธ๐ I can teach you how to stunt.
P.S. The purpose of this post is not to "call out" anyone or anyone's favorite creator. I am simply trying to help get us to where we need to be. That being said, you might recognize some of my examples.
โ โโ โ โ โ โ โ โ โ โ โ โ โ \\ โฎ // โ โ โ โ โ โ โ โ โ โ โ โโ โ
โ//โ GLOSSARY:
In the context of filenames:
ELEMENT -- This is each "section" of your filename, separated by an underscore "_".
FORMAT -- This is the "order/layout" of your filename elements.
โ โโ โ โ โ โ โ โ โ โ โ โ โ \\ โฎ // โ โ โ โ โ โ โ โ โ โ โ โโ โ
โ//โ FILENAME FORMATS:
Some of these are interchangeable, but AgeGender elements are specific to CAS.
You can mix and match elements, but if you're using a "Pack Identifier", it should probably be placed directly after the "Mod Type" to keep your mods grouped by Pack requirements.
I recommend including a "Modifier" with your "ModType", but you can always tack it onto the items that need it, e.g. instead of adding "Recolor" to your "ItemName", add it to your "ModType".
FOR CAS:
Creator_ModTypeWithModifier_PackID_Category_AgeGender_ItemName
Creator_ModTypeWithModifier_PackID_Category_AgeGender_Collection_ItemName
Creator_ModTypeWithModifier_Category_Collection_ItemName_AgeGender
Creator_ModTypeWithModifier_Category_ItemName
Creator_ModTypeWithModifier_Collection_ItemName
Creator_ModTypeWithModifier_ItemName.package
FOR BUILD, OBJECT (BUY), TUNING, ETC.:
Creator_ModTypeWithModifier_PackID_Category_ItemName
Creator_ModTypeWithModifier_Category_ItemName
Creator_ModTypeWithModifier_Collection_ItemName
Creator_ModTypeWithModifier_ItemName
โ//โ ACCEPTABLE FILENAME EXAMPLES:
You don't have to do exactly what I do, but you need a format that works.
Of course, I think my format is either perfection or near to perfection and everyone should use it. I wholeheartedly welcome you to just copy the way I do it and adjust it as necessary.
Seriously. My format works for everything. Have at it. I ain't clutching no pearls.
MYSELF AS AN EXAMPLE:
sej_CASA_BG_ClothingBottom_YF_TightsFootlessCropped
This is how I format my filenames for CAS content:
Creator Name
Mod Type with Modifier -- The "A" is the "modifier". It's short for "Add-On".
Pack ID -- I do Pack-specific CAS content, so I always use these.
Category -- Matches EAxis' format and the internal category.
Age and Gender -- Matches EAxis' format.
Item Name -- Matches EAxis' format.
sej_CASAddOn_BG_ClothingBottom_YF_TightsFootlessCropped
This is my expanded filename with my "modifier".
sej_CASAddOn_BG_ClothingBottom_YF_CollabSejian_TightsFootlessCropped
For a collaboration, I could do this.
sej_CASAddOn_BG_ClothingBottom_YF_Collection_TightsFootlessCropped
For a themed collection, I could do this.
etc.
โ//โ UNACCEPTABLE FILENAME EXAMPLES:
These are real filenames that I've edited with my details to avoid directly naming anyone.
As I said at the start, the purpose of this post is not to "call out" anyone, but you might recognize some of my examples. It is reasonable for creators to have made these mistakes.
Don't feel weird about this. Take the information in this post and put it to good use.
THESE FILENAMES ARE UNACCEPTABLE:
[SEJIAN] Overrides Collection - Tights Footless Cropped.package
[SEJIAN] Tights Footless Cropped.package
[sejian]Overrides_TightsFootlessCropped.package
[sejian] TightsFootlessCropped.package
[sejian] yfBottom_BGTightsFootlessCropped
(sejian)Overrides-Collection_Tights-Footless-Cropped.package
-sejian- TightsFootlessCropped.package
!sejian - TightsFootlessCropped.package
By Sejian - Overrides Collection (Bottoms).package
By Sej x Sejian - Overrides Collection (Bottoms).package
sejian Overrides Collection-Tights Footless Cropped.package
sejian TS4-TightsFootlessCropped.package
sejian Tights Footless Cropped.package
sejian_Tights Footless Cropped.package
sejian_TightsFootlessCropped-Ripped.package
sejian_Overrides_ [Tights Footless Cropped].package
sejian - Tights Footless Cropped.package
sejian - Tights Footless Cropped (Female).package
Tights Footless Cropped_Sejian.package
Tights Footless Cropped.package -- THIS IS THE WORST. WHO EVEN MADE THIS? For personal use this is fine, but if you're sharing content, you need to put a "Creator Name" on it somewhere.
etc.
THESE FILENAMES WOULD BENEFIT FROM IMPROVEMENTS:
sejian_fFullbody_Tights_Footless_Cropped.package
sejian_OverridesCollection_YF_TightsFootlessCropped.package
sejian_TightsFootlessCropped.package
sejian_OverridesCollection_TightsFootlessCropped_YF.package
sejian_OverridesCollection-TightsFootlessCropped_YF.package
etc.
โ โโ โ โ โ โ โ โ โ โ โ โ โ \\ โฎ // โ โ โ โ โ โ โ โ โ โ โ โโ โ
โ//โ UNDERSCORES V. DASHES:
I recommend using underscores "_" in filenames because EAxis uses underscores in their filenames. Even the PYTHON files squirreled away in our INSTALL FOLDER use underscores. I believe it's "a coding thing".
Underscores offer better readability.
Underscores don't work well with file system "Search" features. When searching for a word, you should place an asterisk "*" before and after the word. This is because of "the coding thing".
I don't recommend dashes "-" in filenames because EAxis never uses dashes "-". Dashes are correct for coding in general, but not here it seems.
Dashes are kinda unsightly in filenames.
Dashes work well with file system "Search" features. When searching for a word, you should be able to just search the word. This is because of "the coding thing".
โ//โ IT'S A CODING THING:
What I'm about to say might be an improper layman's explanation that anyone who understands coding might chastise me for... or maybe not?
In coding, underscores "_" are detected as a word or part of a word. A sentence with underscores is detected as one long word, and this might be why EAxis uses them. The game processes a filename with underscores as one long word without breaks:
sej_RESO_BG_DST_LauncherBG_Art_AdamYbarra_DragonQueen.package
Point your cursor over any element/word and double-click on it.
Dashes "-" are detected as breaks/spaces between words. A sentence with dashes is detected as multiple words. The game processes a filename with dashes as multiple words and verifies each word separately:
sej-RESO-BG-DST-LauncherBG-Art-AdamYbarra-DragonQueen.package
Now do the same here and see the difference.
Spaces " " are replaced by "%20" in coding. You can see this in any URL for any webpage that contains a space. The game might have to convert spaces to "%20" in order to properly read a filename with spaces:
"sej RESO BG DST LauncherBG" = "sej%20RESO%20BG%20DST%20LauncherBG"
Special characters "( [ { ' / @ ! #" have special functions in coding. For a special character to be read as a special character and not as a function, another special character has to be tacked onto it. The game might have to add additional special characters to the special characters in order to properly read a filename with special characters, e.g. "[" might turn into "['" or "[/" when the game is processing the filename.
[sej] = ['sej]' or [/sej]/
Periods "." are detected as the end of a "filename" and the beginning of a "file extension". If a filename has multiple periods in it, then the game might process the first period as the end of the filename and then process the word directly after it as an invalid extension, then detect and process the next period as the real end of the filename, and then process the true extension.
The%20Filename.TheInvalid-Extension.TheTrueExtension
โ
If increased load times due to improper filenames is really a thing, then all of that extra processing I explained above is possibly why it happens.
Dashes might be the correct replacement for spaces in coding and HTML, and for Google/WEB indexing, etc., but it's not the ideal thing for the game.
Underscores "_" or nothing at all with "Proper Case" should give the fastest processing and load times. UPPERCASE and lowercase can work too, they're just horrible for readability, and you want to be able to read your filenames easily.
If you'd like to learn more about the coding, then these two articles can get you started:
Of Spaces, Underscores and Dashes -- https://blog.codinghorror.com/of-spaces-underscores-and-dashes/
dashes-versus_underscores; The Definitive Guide -- https://x-equals.com/dashes-versus-underscores/
โ โโ โ โ โ โ โ โ โ โ โ โ โ \\ โฎ // โ โ โ โ โ โ โ โ โ โ โ โโ โ
โ//โ GENERAL GUIDELINES:
Follow a format and tweak it as necessary if you create different types of mods.
Absolutely always begin your filename with your "Creator Name".
Follow your "Creator Name" with a "Mod Type" for grouping even if you just do one type of content right now, because that could change in the future. I personally refer to this as my "Grouping Prefix".
Use underscores "_" to split up your filename elements. EAxis uses underscores, not dashes.
Avoid all special characters, including spaces " ", dashes "-", and brackets "( [ { } ] )".
Avoid all and punctuation characters, including commas "," and periods ".".
Use "Proper Case" capitalization for readability.
Use "Proper Case" capitalization instead of underscores "_" in elements to maintain their integrity, e.g. "The Bracing Breezes Collection" in "Collection_ItemName" format:
Bracing_Breezes_Swimsuit = BracingBreezes_Swimsuit
Bracing_Breezes_Slippers = BracingBreezes_Slippers
Avoid multiple words in UPPERCASE or lowercase, for readability:
SEJIANTHEROCKETSCIENTIST = SejianTheRocketScientist
sejianthegreatevil = SejianTheGreatEvil
โ//โ "CREATOR NAME" GUIDELINES:
Keep your "Creator Name" consistent.
This doesn't mean that you can't change it whenever, it just means don't go ham and change the way you type it randomly, for no reason. In other words:
Do this because our brains recognize patterns:
sejian_
sejian_
sejian_
But don't do this randomly, 'cause this is annoying as !@#$:
sejian_
SeJiAn_
s3j1@n_
Remove special characters "!@#$ (etc.)", spaces " ", dashes "-", periods ".", commas ",", etc.:
seji@n_ = sejian_
sej-ian_ = sejian_
Sejian, The Great Evil_ = SejianTheGreatEvil_
Names with numbers or fancy capitalization are fine:
53J14N_
SEJiAN_
If it's one word, do "lowercase" or standard capitalization:
sejian_
Sejian_
If it's multiple words, use "Proper Case" capitalization:
SejianTheRocketScientist_
SejianTheGreatEvil_
โ//โ "MOD TYPE AND MODIFIER" GUIDELINES:
Mods generally fall into FOUR (4) main "types".
Your "ModType" should start with one of these, then tack on a "modifier" if necessary:
CAS -- Content for Create-A-Sim.
Build -- Content for Build Mode.
Object -- Content for... Buy Mode? This includes non-buyable objects.
Mod -- This is an umbrella for all gameplay-altering mods, including Tuning mods, UI (SGFX) mods, TS4SCRIPT mods, etc.
"Modifiers" just expand/refine the "ModType" even more:
CASAddOn -- You've likely seen an "Add-On" post from your favorite CAS creator. It was a thing before I created my modifier. I use this for modified EAxis content.
CASOverride -- "CASO" is my big project to fix EAxis CAS. The name literally comes from the type of CAS mod that it is. It's a "CAS Override". Simplicity works.
CASRecolor -- This ain't one of mine but lots of creators release "recolors".
CASStandalone -- I use this either for entirely new creations or modified clones that have all of their resources embedded.
โ//โ "PACK ID" GUIDELINES:
This comes direct from EAxis' internal naming format.
BG -- Base Game
EP01 -- Get To Work
etc.
I could list them all out, but it would be a long list.
I don't mind doing it if y'all want a list right here for reference.
โ//โ "CATEGORY" GUIDELINES:
I used to follow EAxis internal naming format for this, which is "_AgeGenderCategory_", but I didn't like how my files were grouping, so I swapped them around and split them into two elements, but you can do "_AgeGenderCategory_" as one element if you prefer.
AccEarrings (or just Earrings)
AccNecklace (or just Necklace)
ClothingBody -- I tack on "Clothing" to these three so that they group together.
ClothingBottom -- See above.
ClothingTop -- See above.
Hair
Shoes
etc.
โ//โ "AGE AND GENDER" GUIDELINES:
This comes direct from EAxis' internal naming format.
YF -- Young Adult Female - Includes Teens, Adults, and Elders.
YM -- Young Adult Male - Includes Teens, Adults, and Elders.
YU -- Young Adult Unisex - Includes Teens, Adults, and Elders.
CF -- Child Female
CM -- Child Male
CU -- Child Unisex
PF -- Toddler Female
PM -- Toddler Male
PU -- Toddler Unisex
IF -- Infant Female
IM -- Infant Male
IU -- Infant Unisex
AF -- All Ages Female - Custom addition to complete the set.
AM -- All Ages Male - Custom addition to complete the set.
AU -- All Ages Unisex - Custom addition to complete the set.
โ//โ "COLLECTION" GUIDELINES:
If you're creating a themed collection, just stick a "Collection" element before the "ItemName". It won't group the items by collection, but it will serve as a visual identifier and a search term.
Even if you're not following or creating a format based on my examples, please add a "Collection" element to your filename format so that simmers can identify what collection an item came from.
When creators don't do this, what we end up with is a bunch of PACKAGES all mixed together with no idea what post it came from, which leads to unnecessary "Where Can I Find? (WCIF)" questions.
Don't create unnecessary work for yourself as a creator or for the simmers who use your content. Just expand your filename.
โ//โ "ITEM NAME" GUIDELINES:
Use "Proper Case" capitalization to avoid using underscores "_" in your "ItemName".
Unnecessary underscores will mess with your element grouping.
"Tights_Footless_Cropped" = "TightsFootlessCropped"
โ//โ TBC...?
Comments (5)
I just saw some .packages named using emojis, so I deleted the emojis because they didnโt serve a purpose. And Iโm guessing they arenโt a good choice for file naming.
If there is truth to the things I've read Elsweyr, and it's all still valid, and my novice understanding and explanation is correct, then no, emojis are not a good choice for file naming. ๐น Goodness me, I need to update CAS Filters and push it more to the community so we can hopefully get more creators aware of this filename thing, so they can stop giving us extra work! ๐น
I'm reading this while staring at all the yassified name files from Dreamgirl
Tights Footless Cropped.package AAAAAAAAAAAAAAAHHHHHH When I see this type of thing has randomly made it's way into my downloads folder? I'm a sucker for a good sim upload! It's an auto delete! You need more props. Please go collect a Random_Pink_Flamingo or Trash_Panda from your nearest dealer.
๐น
