Skip to content

Character Files

devyndamonster edited this page Oct 24, 2020 · 28 revisions

Making A Character File

A character consists of two things at minimum:

  1. A picture named "thumb.png", which is the picture displayed in the TNH menu
  2. 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.

Basic Character Info

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

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:

  1. Weapon_Primary{ }
  2. Weapon_Secondary{ }
  3. Weapon_Tertiary{ }
  4. Item_Primary{ }
  5. Item_Secondary{ }
  6. Item_Tertiary{ }
  7. 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

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.

The equipment pool only has one property on it's own, shown below:


Entries[ ]

Type: List<PoolEntry>

This is a list of all possible pools that can show up in the TNH item spawner

Each pool entry has the following properties:


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

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
  • Pocket
  • 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

Progression

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.

Inside a progression entry is the following:


Levels[ ]

Type: List<Level>

The list of levels that the character will go through (in order)


Inside a level entry is the following:


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

Take Challenges

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:

Hold Challenges

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.

Inside a hold challenge is the following:


Phases[ ]

Type: List<Phase>

The list of hold phases the character will go through (in order)


Inside a hold phase is the following:


Encryption=

Type: String (Enum)

The type of encryption that will spawn during this phase

Options:

  • Static
  • Hardened
  • Swarm
Clone this wiki locally