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. You need one for each powerset. You could theoretically use existing powerset files by just referencing them in the other defs, but please be aware that that can have unintended consequences, such as including the inherent taunt effect from tanker versions of powers.
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)
Inherents and You
Archetype Inherents are...weird. They are intended to be unique to each archetype, and so as a result, they are often not wholly contained in inherent_inherent.def Additionally, some Inherents are actually several powers, such as Domination, which is made up of six (!) interlocking pieces that work together to make the power work.
Additionally, the inherents often cheat a little bit, but being wholly or partly dummy powers, with the actual effects being hidden inside their actual powersets. For example, the inherent taunt of Gauntlet is actually a component of the Tanker's attack powers, not something applied by their inherent power, as are the bonus increases of the Blaster's Defiance. (That's why you can see the icons of your attacks on your status reticle after attacking as a Blaster: it's the power that's applying the buff.)
Ultimately, it's up to you to actually decide how to execute your inherent, and there's honestly enough stuff there that it deserves its own article. I recommend looking at the existing AT inherents and using those as a guide. If you want an effect that fires off whenever a power gets used, you might want to put that into the powers, but if it's a passive effect, a click, or a toggle, it's recommended to put that into the actual power itself.
More importantly, feel free to get creative! You're already making a brand new archetype, why not experiment? How about a toggle that gives bonus damage when turned on, and bonus healing when turned off? Why not a clicky that makes you explode and heal all your allies once your rage bar is full? What about a power that applies a global recharge enhancement for each nearby enemy? You are limited only by the power system, your creativity, and your skill, and the last two can improve only with practice and daring.
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.