-
Notifications
You must be signed in to change notification settings - Fork 11
Character Files
A character consists of two things at minimum:
- A picture named "thumb.png", which is the picture displayed in the TNH menu
- A JSON file named "character.json", which holds all of the information about the character
Any custom loot pool icons will also go in the character file.
Below is a list of properties that a character can have. Additionally, a "character_template.txt" file can be found in the custom character folder, which can be useful for getting started creating a character.
DisplayName=
Type: String
Sets what the characters name is in the TNH menu
Group=
Type: Int
Sets what category the character shows up in, with 0 being daring defaults
StartingTokens=
Type: Int
Sets the number of tokens a character starts with
ForceAllAgentWeapons=
Type: Bool
Unkown what this does, but is normally set to false
Description=
Type: String
This is the text that appears below the characters name in the TNH menu
UsesPurchasePriceIncrement=
Type: Bool
If true, then when the player purchases an item it costs one more token to purchase that item again
Has_Weapon_Primary=
Type: Bool
If true, the player will spawn with an item chosen from the
Weapon_Primary{ }
object
Has_Weapon_Secondary=
Type: Bool
If true, the player will spawn with an item chosen from the
Weapon_Secondary{ }
object
Has_Weapon_Tertiary=
Type: Bool
If true, the player will spawn with an item chosen from the
Weapon_Tertiary{ }
object
Has_Item_Primary=
Type: Bool
If true, the player will spawn with an item chosen from the
Item_Primary{ }
object
Has_Item_Secondary=
Type: Bool
If true, the player will spawn with an item chosen from the
Item_Secondary{ }
object
Has_Item_Tertiary=
Type: Bool
If true, the player will spawn with an item chosen from the
Item_Tertiary{ }
object
Has_Item_Shield=
Type: Bool
If true, the player will spawn with an item chosen from the
Item_Shield{ }
object
EquipmentPool{ }
Type: EquipmentPoolDef
An object which contains all of the equipment pools that can spawn at a TNH item spawner
Progressions[ ]
Type: List<TNH_Progression>
A list of progressions that this character can go through
NOTE: Most characters will only have one entry in this list
Progressions_Endless[ ]
Type: List<TNH_Progression>
Currently un-tested where this slots into progression (at start of run or after last level of normal progression?)
Starting loadouts are objects which decide what weapons and items the player starts with. These objects are properties of the character, just like the properties listed above. You can have the following starting loadout objects:
Weapon_Primary{ }
Weapon_Secondary{ }
Weapon_Tertiary{ }
Item_Primary{ }
Item_Secondary{ }
Item_Tertiary{ }
Item_Shield{ }
Below are the properties of a starting loadout:
ListOverride[]
Type: List<FVRObject>
This is currently unused (for now), but must still be declared in the character file
Num_Mags_SL_Clips=
Type: Int
Sets the number of magazines or speed loaders the weapon starts with
Num_Rounds=
Type: Int
Sets the number of bullets a weapon starts with (possibly unused if spawned weapon takes magazines)
TableDefs[ ]
Type: List<ObjectTableDef>
A list of object tables which are used to determine what equipment could possibly spawn
Equipment pools are objects which contain an ObjectTableDef for spawnable weapons, and also has the properties which decide purchase cost and the levels when the pool appears in the TNH item spawner. Each character has one EquipmentPool object, which has a list of pool entries inside it.
Entries[ ]
Type: List<PoolEntry>
This is a list of all possible pools that can show up in the TNH item spawner
Type=
Type: String (Enum)
This determines where a pool will show up in the item spawner. Firearms show up on the left-most side, Equipment in the middle, and Consumables on the right
Options:
- Firearm
- Equipment
- Consumable
TokenCost=
Type: Int
Cost of purchasing an item from this pool at the TNH item spawner
TokenCost_Limited=
Type: Int
Cost of purchasing an item from this pool at the TNH item spawner (When playing on limited ammo mode)
MinLevelAppears=
Type: Int
The level that this pool can start appearing at. TNH starts at level 0, so if set to 0, this pool will appear on the first level
MaxLevelAppears=
Type: Int
The highest level that this pool can appear at
Rarity=
Type: Int
Sets how likely this pool is to appear. Default is usually 1, and higher values represent rarer pools
TableDef{ }
Type: ObjectTableDef
The object table which determines what kinds of weapons can spawn from this pool entry
Object tables are essentially loot pools, which can either be automatically generated based on set parameters, or manually created using IDOverrides. Below is a list of properties for the ObjectTableDef object
Icon=
Type: String
This is the name of the icon (in your character file) that will be displayed in the TNH item spawner
Category=
Type: String (Enum)
Set this to whatever category of item you want to spawn in this pool
Options:
- Uncategorized
- Firearm
- Magazine
- Clip
- Cartridge
- Attachment
- SpeedLoader
- Thrown
- MeleeWeapon
- Explosive
- Powerup
- Target
- Tool
- Firework
- Ornament
MinAmmoCapacity=
Type: Int
This is the minimum ammo capacity of weapons that will be added to the table
NOTE: If you are spawning something other than weapons in this pool, set this to
-1
MaxAmmoCapacity=
Type: Int
This is the maximum ammo capacity of weapons that will be added to the table
NOTE: If you are spawning something other than weapons in this pool, set this to
-1
IsBlanked=
Type: Bool
Unknown what this does, but set to false by default
SpawnsInSmallCase=
Type: Bool
If true, items from this object pool will spawn in a small case when purchased at the TNH item spawner
SpawnsInLargeCase=
Type: Bool
If true, items from this object pool will spawn in a large case when purchased at the TNH item spawner
UseIDListOverride=
Type: Bool
If true, this object pool will use items from the
IDOverride
list instead of automatically generating
IDOverride=
Type: List<String>
A list of ObjectIDs that will be added to this pool. ObjectIDs can be found in the "ObjectIDs.txt" file generated in the CustomCharacter folder
Eras=
Type: List<String>
Set this to the eras of weaponry you want to spawn in this pool
Options:
- None
- Colonial
- WildWest
- TurnOfTheCentury
- WW1
- WW2
- PostWar
- Modern
- Futuristic
- Medieval
Sets=
Type: List<String>
Set this to the object set of weaponry you want to spawn in this pool
Options:
- Real
- GroundedFictional
- SciFiFictional
- Meme
- MF
- Holiday
- TNH
Sizes=
Type: List<String>
Set this to the sizes of weaponry you want to spawn in this pool
Options:
- None
- Pistol
- Compact
- Carbine
- FullSize
- Bulky
- Oversize
Actions=
Type: List<String>
Set this to the action types on the weaponry you want to spawn in this pool
Options:
- None
- BreakAction
- BoltAction
- Revolver
- PumpAction
- LeverAction
- Automatic
- RollingBlock
- OpenBreach
- Preloaded
- SingleActionRevolver
Modes=
Type: List<String>
Set this to the firing modes on the type of weaponry you want to spawn in this pool
Options:
- None
- SemiAuto
- Burst
- FullAuto
- SingleFire
ExcludeModes=
Type: List<String>
Set this to the firing modes you don't want on the weaponry you want to spawn in this pool
Options:
- None
- SemiAuto
- Burst
- FullAuto
- SingleFire
Feedoptions=
Type: List<String>
Set this to the feed options of weaponry you want to spawn in this pool
Options:
- None
- BreachLoad
- InternalMag
- BoxMag
- StripperClip
- EnblocClip
MountsAvailable=
Type: List<String>
Set this to the mounting types on the weaponry you want to spawn in this pool
Options:
- None
- Picatinny
- Russian
- Muzzle
- Stock
- Bespoke
RoundPowers=
Type: List<String>
Set this to the round powers of the weaponry you want to spawn in this pool
Options:
- None
- Tiny
- Pistol
- Shotgun
- Intermediate
- FullPower
- AntiMaterial
- Ordnance
- Exotic
- Fire
Features=
Type: List<String>
Set this to the types of attachment features for the attachments you want to spawn in this pool
NOTE: I'm pretty sure this is only used if the pool is for attachments, not weapons
Options:
- None
- IronSight
- Magnification
- Reflex
- Suppression
- Stock
- Laser
- Illumination
- Grip
- Decoration
- RecoilMitigation
- BarrelExtension
- Adapter
- Bayonet
- ProjectileWeapon
- Bipod
MeleeStyles=
Type: List<String>
Set this to the types of melee styles for melee weapons you want to spawn in this pool
Options:
- None
- Tactical
- Tool
- Improvised
- Medieval
- Shield
- PowerTool
MeleeHandedness=
Type: List<String>
Set this to the handedness (number of hands used to hold) for melee weapons you want to spawn in this pool
Options:
- None
- OneHanded
- TwoHanded
MountTypes=
Type: List<String>
Set this to the types of mounts that can be attached to for attachments you want to spawn in this pool
Options:
- None
- Picatinny
- Russian
- Muzzle
- Stock
- Bespoke
PowerupTypes=
Type: List<String>
Set this to the types of powerups you want to spawn in this pool
Options:
- None
- Health
- QuadDamage
- InfiniteAmmo
- Invicibility
- GhostMode
- FarOutMeat
- MuscleMeat
- HomeTown
- SnakeEye
- Blort
- Regen
- Cyclops
- WheredIGo
- ChillOut
ThrownTypes=
Type: List<String>
Set this to the types of throwables you want to spawn in this pool
Options:
- None
- ManualFuse
- Pinned
- Strange
ThrownDamageTypes=
Type: List<String>
Set this to the damage types of throwables you want to spawn in this pool
Options:
- None
- Kinetic
- Explosive
- Fire
- Utility
Objs[]
Type: List<FVRObject>
Unused, but still must be declared in the character file
Progressions contain properties relating to the holds, supply points, and patrols of each level. Generally, there is only one progression entry in the Progressions[ ]
list, and then entries in the Levels[ ]
list is where the actual level-by-level properties are set.
Levels[ ]
Type: List<Level>
The list of levels that the character will go through (in order)
NumOverrideTokensForHold=
Type: Int
The number of tokens the character is rewarded for completing the levels
TakeChallenge{ }
@AdditionalSupplyPoints=
Type: Int
The number of additional supply points that will be spawned on top of the normal amount
TakeChallenge{ }
Type: TNH_TakeChallenge
An object with properties for the defenses that are spawned at a hold point
HoldChallenge{ }
Type: TNH_HoldChallenge
An object with properties for holding the hold point, such as encryptions and attacking waves
SupplyChallenge{ }
Type: TNH_TakeChallenge
An object with properties for defenses spawned at supply points
PatrolChallenge{ }
Type: TNH_PatrolChallenge
An object with properties for patrols that spawn
TrapsChallenge{ }
Type: TNH_TrapsChallenge
An object with properties for... traps? I didn't know TNH had traps, but it's here, and you should still declare it just in case
The TakeChallenge{ }
object is used for both defenses spawned at hold points, as well as defenses spawned at supply points.
It has the following properties:
NumGuards=
Type: Int
Sets the number of defending sosigs that will spawn
NumTurrets=
Type: Int
Sets the number of defending turrets that will spawn
IFFUsed=
Type: Int
Sets the team that spawned defenders will be on. Default is 1, and the players IFF is 0.
TurretType=
Type: String (Enum)
Sets the type of turrets that will spawn as defenses
Options:
- SMG
- FLAK
- Machinegun
- Flamethrower
- Suppression
GID=
Type: String (Enum)
Sets the type of sosig defenders that will spawn
Options:
The HoldChallenge{ }
object holds properties such as what encryptions spawn, how many encryptions spawn, and what the attacking waves are. The hold challenge object itself only has one property: a list called Phases[ ]
. The player will go on to complete each phase in order to complete the hold challenge.
Phases[ ]
Type: List<Phase>
The list of hold phases the character will go through (in order)
Encryption=
Type: String (Enum)
The type of encryption that will spawn during this phase
Options:
- Static
- Hardened
- Swarm