Create a new Archetype
Creating a new Archetype (WIP)
The following is how to create a new archetype, as well as a basic explainer of (some of) the information that makes up an Archetype.
TODO: Inherents
Things you need
- A server set up to pack bins
- The assets unpacked from the bins (specifically powercats.bin, powersets.bin, powers.bin and classes.bin, as those bins contain files relating to archetypes and their powers).
- The new or modified files for the archetype and their powersets.
File Structure
Here's how the files we're needing will be arranged in your serverdata folder. They must be arranged this way to bin properly.
- <your Ouroboros server directory>\Serverdata\Defs\
- classes.def
- \classes\
- PC_YOUR_ARCHETYPE_HERE.def -> the def file for your archetype.
- \Powers\
- Player_YOUR_ARCHETYPE_HERE_PRIMARY.categories -> Enumerates the powersets that are included in your archetype's primary powerset category
- Player_YOUR_ARCHETYPE_HERE_PRIMARY.categories -> As above, but for secondary powersets.
- YOUR_ARCHETYPE_HERE_PRIMARY.powersets -> This contains the list of powers in the powersets, what level they unlock, etc.
- YOUR_ARCHETYPE_HERE_SECONDARY.powersets -> See above
- YOUR_ARCHETYPE_HERE_PRIMARY_POWERSETNAME.powers -> The .powers files contain the actual attributes of the powers in each powerset.
A Rundown of the Files by Type
Each definition file has its own information. Below are samples with explanations of as many fields as I can explain right now. I encourage anyone who knows more to add to it.
classes.def
This tells the game to include specific archetype definitions from the classes directory and make them available.
// Generated by XLStoClassDef.bat ver 51 include defs/classes/PC_Blaster.def include defs/classes/PC_Controller.def include defs/classes/PC_Defender.def include defs/classes/PC_Scrapper.def include defs/classes/PC_Tanker.def include defs/classes/PC_Peacebringer.def include defs/classes/PC_Warshade.def //Each line starts with 'include' and tells where the archetype's .def file is. For villain archetypes, you can use v_classes.def instead, but unless the AT is specific to one side, it doesn't particularly matter which, so this rundown assumes classes.def include defs/classes/YOUR_ARCHETYPE_HERE.def
YOUR_ARCHETYPE_HERE.def
This file defines the attributes of your archetype.
Class { Name "ARCHETYPE NAME" DisplayName "DISPLAY NAME" PrimaryCategory "Primary" //This has to match whatever you name your Primary .categories file (minus the file extension). SecondaryCategory "Secondary" //As above, but for the secondary. PowerPoolCategory "Pool" //The Pool powers for this archetype. Just leave it as Pool unless you have specific reason to change it. DisplayShortHelp "Short help text." DisplayHelp "Long help text. This is the text that you see when you're looking at the archetype during the archetype selection step in character creation." Icon "Archetype_icon.tga" //The archetype's icon. These are textures in serverdata\texture_library\GUI\Icons\Archetype, but aren't strictly necessary as an existing one can be reused. AllowedOrigins Science, Magic, Natural, Mutation, Technology//Allowed origins. Currently only used for EATs. SpecialRestrictions Hero //I think these are hooked into by the code for checking that requirements are met? Hero/villain is irrelevant now, but the EATs have their own prereqs. ConnectHpAndStatus kFalse //Seems to be false for every class def file. Not sure what it does. AttribBase //The base attributes of the class. Most of them are the same, with the most common variance being Threat. AttribMaxTable //A table of each attribute's value at each level for this archetype. If you're going to tangle with this, please use a spreadsheet or something. AttribMaxMaxTable //A table of each attribute's actual maximum value at each level. The names are confusing, I know. AttribMin //The absolute minimum values in each attribute that this archetype is allowed to reach. ResistanceMaxTable //Maximum resistance to damage, status effects and anything else that could be resisted. (Wanna give your AT 100% resistance to healing? You shouldn't, but you can.) ResistanceMin //The minimum resistance values this archetype can hit in each attribute. //I actually don't know what the rest of the fields do, and I'll need to come back when I find out more. }
.categories files
These organize groups of powersets into categories that archetypes use. They're pretty simple:
PowerCategory Blaster_Ranged //Name the category. { DisplayName "P2430742932" //The string that the category displays for its name. You can use a pstring, or just a regular text string. I've found that both work. PowerSets Blaster_Ranged.Archery//Start listing the files. The actual .powers files these reference should be named like they are here, except that the '.' gets replaced with an underscore '_' PowerSets Blaster_Ranged.Assault_Rifle PowerSets Blaster_Ranged.Beam_Rifle PowerSets Blaster_Ranged.Dark_Blast PowerSets Blaster_Ranged.Dual_Pistols PowerSets Blaster_Ranged.Electrical_Blast PowerSets Blaster_Ranged.Energy_Blast PowerSets Blaster_Ranged.Fire_Blast PowerSets Blaster_Ranged.Ice_Blast PowerSets Blaster_Ranged.Psychic_Blast PowerSets Blaster_Ranged.Radiation_Blast PowerSets Blaster_Ranged.Sonic_Attack PowerSets Blaster_Ranged.Water_Blast PowerSets Blaster_Ranged.Wind_Blast }
.powersets files
These contain the information on specific powersets.
PowerSet Dominator_Control.Electric_Control//this references a specific .powers file, replacing the '.' here with an underscore '_'. In this case, it refers to Dominator_Control_Electric_Control.powers { Name "Electric_Control"//internal set name DisplayName "P2339549431"//displayed set name DisplayShortHelp "P2339549431"//short help text DisplayHelp "P2149248823"//help text you see during character creation SetAccountRequires "RogueAccess auth> IsRetailAccount auth> ! || IsReactivationActive? || LimitedRogueAccess auth> || ctpselco ProductOwned? ||" //requirements to access the set per account. SetAccountTooltip "P487305591"//This is the string that explains how to get access to this set. SetAccountProduct ctpselco IconName "Electric_Control_set.ico"//The set icon //Below is each power. It has to reference a power in the corresponding .powers file for the set. Powers Dominator_Control.Electric_Control.Electric_Fence Available 0 //This field tells the level the ability is unlocked for choosing. It starts from an index of zero, so you need to enter the intended level minus 1. a -1 here means it is never available for selection. AIMaxLevel 0 //The rest of the fields here don't really matter for creating an archetype, and seem to always be these values for player ATs. AIMinRankCon -9999 AIMaxRankCon 9999 MinDifficulty 2 MaxDifficulty 9999 Powers Dominator_Control.Electric_Control.Tesla_Cage Available 0 AIMaxLevel 0 AIMinRankCon -9999 AIMaxRankCon 9999 MinDifficulty 2 MaxDifficulty 9999 etc... }
.powers files
These files define the actual effects and attributes of the powers. I'm not going to go into detail here, as that will be more appropriate for Create a new Power, when that page is made.\
The .powers files should be named to match how they are referenced in the .powersets and .categories files (if you have Clown_Assault.Banana_Peels mentioned in those, you should name it Clown_Assault_Banana_Peels.powers)
Putting it together
Once you have the files in place, run the mapserver and test client to bin everything:
mapserver.exe -createbins -verbose 2
, then
ouroboros_test.exe -console -createbins -verbose 2 -project cov
. Next, you need to run the mapserver again to generate templates:
mapserver.exe -productionmode -templates
You should be good to go, but you may get some crashes. If that happens, it means that the database didn't get updated with the new attributevars. In that case, what you'll have to do is delete your cohdb from the SQL server manager and run DBserver to initialize a new one. WARNING: This will delete every character on the server if you do not back them up first. BACK UP YOUR CHARACTERS. Unless you don't care about keeping your characters or don't mind remaking them. In which case, don't worry about it.