User:HertzDevil/Reverse-engineering notes/Data types

Basic data types

 * Main article: User:HertzDevil/Reverse-engineering notes/Basic data types

Enumeration types

 * Main article: User:HertzDevil/Reverse-engineering notes/Enumeration types

Player hero definitions
The files at  define data for the heroes which can be obtained by players.


 * List parameters:

stats_tuple
JSON schema

legendary_info
JSON schema

hero_definition
JSON schema

Enemy definitions
The files at  define data for enemy-only units. This means enemies have base stats and GPs too.


 * List parameters:


 * top_weapon: If non-null, points to the identifier for the weapon equipped by this unit when promoted to in derived maps. For example Veronica's points to Élivágar, and all generic enemies have this field null.
 * is_boss: True if this unit is an enemy boss, false if this unit is a generic unit.
 * base_stats: Hypothetical base stats for the enemy at . Used in derived maps for rarity promotion.
 * growth_rates: Hypothetical growth rates for the enemy at . Used in derived maps for leveling up.

Other fields have the same meaning as in.

Terrain definitions
The file  defines all 31 terrains used in the game. These only handle the gameplay aspects; animation background is defined elsewhere. Movement costs are defined in.


 * List parameters:

terrain_definition

 * index: The index of the terrain.
 * base_terrain: The terrain index to use when this terrain is destroyed by an ally, or -1 if this terrain is not breakable by allies.
 * foe_base_terrain: The terrain index to use when this terrain is destroyed by a foe, or -1 if this terrain is not breakable by foes. Used in Rival Domains and Grand Conquests.
 * side: 0 if the terrain belongs to the player, 1 if enemy, -1 otherwise.
 * terrain_group: Purpose unknown. Might have been used for animation backgrounds?
 * inaccessible: True if the terrain cannot be entered by any unit. Certain tiles such as the banners from Tactics Drills are inaccessible but not wall terrains.
 * hp: Number of hits the terrain can take before it is destroyed.
 * is_wall: True for wall terrains, false otherwise. Wall terrains use different tile graphics depending on whether adjacent tiles are also walls (except breakable ice and crates because these tilemaps have identical graphics for all directions).
 * is_liquid: True for water bodies and lava, false otherwise. Purpose unknown.
 * is_bridge: True for bridge terrains, false otherwise. Purpose unknown.
 * is_trench: True for trench terrains, false otherwise.
 * is_fortress: Whether destroying this terrain causes a victory or loss. Used for player and enemy fortresses.
 * is_rd_terrain: True for the special terrains used in Rival Domains and Grand Conquests, false otherwise. Purpose unknown (since it can be derived from other struct members).
 * mit_mod: Mitigation modifier as a percentage; 30 for defensive terrain, 0 otherwise.
 * regen_hp: Amount of HP regenerated on each turn; 10 for fortresses and camps, 0 otherwise.

Field graphics definitions
The files at define the graphical assets maps use.


 * List parameters:

gfx_resource_t
A single graphical asset.


 * kind: A descriptive string for the asset.
 * filename: If non-null, points to the asset's filename relative to . Otherwise this asset has no visible sprites.

field_gfx_definition
Mapping from a map to its graphical assets.


 * map_id: The internal identifier of the map. Additionally,  is used for all generic outdoor maps, and   for indoor maps.
 * wall: The sprites for wall terrains. Walls are only drawn if at least one wall tile is breakable; otherwise, wall graphics are directly embedded in the map image.
 * backdrop: The sprite for the map's backdrop.
 * overlay: The sprites for the map's overlays. Up to 2 can be defined.
 * anim: A descriptive string representing the battle animation background.

Map definitions
The files at  define data for permanent maps, including final Tempest Trials maps. Maps for game mode variants, such as those for Chain Challenges, are not stored here.

map_position
Coordinates representing a point on a map.
 * x: X position, 0 for the leftmost column.
 * y: Y position, 0 for the bottom-most row.

unit_data
Definition of a single unit placed on the map.


 * id_tag: Internal string identifier of the unit. Begins with  for heroes, and   for enemy-only units.
 * skills: If non-null, the entries point to the internal skill identifiers for the following slots respectively, in that order: Weapon, Assist, Special, Passive A, Passive B, Passive C, Sacred Seal.
 * accessory: If non-null, points to the internal string identifier of the accessory equipped by the unit (begins with ).
 * pos: Initial coordinates of the unit.
 * rarity: Rarity of the unit.
 * lv: Displayed level of the unit.
 * cooldown_count: The initial Special cooldown count of the unit, or -1 to use the default value.
 * stats: Base stats of the unit when all skills are unequipped.
 * start_turn: The first turn by which the unit starts moving regardless of the movement group it belongs to, or -1 if the unit does not move until an opponent engages any unit of the unit's movement group.
 * movement_group: An index shared between units which start moving together; engaging any unit causes all units with the same movement_group value to start moving (unless movement_delay is set and that particular unit is not engaged). A value of -1 means the unit belongs to its own group.
 * movement_delay: Once the unit's movement group starts moving, waits for up to movement_delay turns until this unit is engaged, or moves immediately if this value is equal to -1.
 * break_terrain: Whether the unit considers breakable terrain as breakable.
 * tether: (Whether the unit returns to its initial position if it cannot find any moves to make.)
 * true_lv: Internal level of the unit. The  is shown if this is higher than the displayed level.
 * is_enemy: True if the unit is a foe, false if ally. For permanent maps this remained unused until the introduction of Tactics Drills.
 * spawn_check: If non-null, points to an internal unit string identifier used to check whether a reinforcement should be spawned.
 * spawn_count: If this unit appears as a reinforcement, the number of units that can be spawned; otherwise this field is -1 and the unit appears initially.
 * spawn_turns: Number of turns to wait before the unit is allowed to spawn (i.e. the unit will spawn as early as the end of Turn spawn_turns enemy phase or the start of Turn (spawn_turns + 1) player phase), or -1 if the unit can spawn on any turn.
 * spawn_target_remain: If not -1, this unit spawns only when the number of units with internal identifier spawn_check is equal to spawn_target_remain. (Existing map files only use 0 so far.)
 * spawn_target_kills: If not -1, this unit spawns only when at least spawn_target_kills units with internal identifier spawn_check are defeated.

field_definition
Terrain data of a map. Graphical information is stored outside map files.


 * id: Internal string identifier of the map. For permanent maps this is just the filename without the extension and the difficulty (e.g. ).
 * width: Width of the map.
 * height: Height of the map.
 * base_terrain: Default terrain index of the map. If this is not -1, special defaults ( and  ) for field graphics representing this terrain are used, otherwise the map would have its own entry in the files under  . Used in maps for Rival Domains and Tactics Drills.
 * terrain: Terrain indices, starting from the bottom to the top, then from left to right within each row. This ordering is consistent with.

map_definition
Top-level definition of a map. One instance appears in each map file at.


 * highest_score: What appears to be the maximum score among all units where the score matches the displayed stat sum only for the few easiest maps. Purpose unknown.
 * field: Terrain definition of this map.
 * player_pos: List of coordinates for the player's team, in the order they are placed. Each element is followed by 4 bytes of padding. For Tactics Drills maps this list is empty.
 * units: List of units on the map, including all reinforcements.
 * player_count: Length of the player_pos array.
 * unit_count: Length of the units array.
 * turns_to_win: If non-zero, the maximum number of turns under which the player must win the map.
 * last_enemy_phase: Whether the enemy phase occurs on the last turn if turns_to_win is given. Only used for Tactics Drills maps.
 * turns_to_defend: If non-zero, the number of turns the player must defend in order to win the map.

BGM assignments
The files at  define which songs maps and enemy battles use. Files under the  subdirectory are for Grand Conquests, but they specify to use the "Default" music, which is actually the list of random BGM, stored in.

Weapon class definitions
The file  defines the weapon classes used by units. Weapon skills only indicate which weapon classes can equip them; common weapon attributes are defined in the weapon classes rather than the weapon skills.


 * List parameters:


 * id_tag: Internal string identifier of the weapon class, e.g.  for.
 * sprite_base: Filename prefixes of the weapon sprites used for this weapon class, e.g.  and   for bow classes.
 * base_weapon: Internal string identifier of the base weapon skill, e.g.  ( for all bow classes.
 * index: Internal index of the weapon class.
 * color: Color of the weapon class.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"

! Value !! Encrypted !! Color
 * 0 || 0x2C || Colorless
 * 1 || 0x2D || Red
 * 2 || 0x2E || Blue
 * 3 || 0x2F || Green
 * }
 * range: Default attack range of the weapon class. Only, used by  and , check this value.
 * equip_group: Group index of the weapon class as classified according to the skill menu used during skill inheritance.
 * res_damage: Uses the foe's Res to calculate damage if true, uses Def otherwise.
 * is_staff: If true, allows  to grant the effect of  or.
 * is_dagger: If true, allows  to inflict stat penalties on foes.
 * is_breath: If true, allows  to calculate damage using the lower of foe's Def or Res.
 * is_beast: If true, allows the unit to transform into a beast and receive stats from.
 * is_staff: If true, allows  to grant the effect of  or.
 * is_dagger: If true, allows  to inflict stat penalties on foes.
 * is_breath: If true, allows  to calculate damage using the lower of foe's Def or Res.
 * is_beast: If true, allows the unit to transform into a beast and receive stats from.

Only one of is_staff, is_dagger, is_breath, and is_beast can be used by skills, in that order of precedence.

Skill definitions
All skills, including refined weapons and exclusive skill refinements, are defined in the files at.


 * List parameters:


 * id_tag: Full internal string identifier of the skill, e.g.  for.
 * refine_base: Internal string identifier of the unrefined version of the weapon, e.g..
 * name_id: Internal string identifier of the skill name resource, e.g..
 * desc_id: Internal string identifier of the skill description resource, e.g..
 * refine_id: Internal string identifier of the skill that gives rise to the refined skill effect, e.g..
 * refine_id: Internal string identifier of the skill that activates while the unit is transformed into a beast, e.g..
 * prerequisites: Internal string identifiers of skills required to learn the current skill.
 * next_skill: Internal string identifier of the canonical upgrade of the current skill. It is defined if and only if promotion_rarity is not zero.
 * sprites: Filenames of the sprites used by the weapon, in this order: bow, weapon / arrow, map animation, AoE Special map animation.
 * stats: Permanent stat bonuses of the skill. For weapons this does not include might.
 * class_params: A set of extra parameters that are used only for skill effects common to weapon classes for which,  ,  , or   is true:
 * : If class_params.hp = 1, calculates damage from staff like other weapons.; If class_params.hp = 2, foe cannot counterattack.
 * : After combat, if unit attacked, inflicts stat+class_params on target and foes within class_params.hp spaces of target through their next actions.
 * : If class_params.hp = 1, and if target_mov foe uses target_wep, calculates damage using the lower of foe's Def or Res.
 * : If class_params.hp = 1, at start of turn, if unit is adjacent to only beast or dragon allies or if unit is not adjacent to any ally, unit transforms (otherwise, unit reverts); if unit transforms, grants stat+class_params.
 * skill_params: Various skill parameters packed into a stat tuple. These do not necessarily represent stat values. Their meanings depend on the skill abilities.
 * refine_stats: Stat bonuses of the skill's refinement, as shown on the weapon description.
 * id_num: A unique increasing index for every skill, added to  for refined weapons.
 * sort_id: The internal sort value used in places such as the skill inheritance menu to order skills within the same category according to their skill families.
 * icon_id: The icon index of the skill, referring to the files.
 * wep_equip: A bitmask indexed by, with bits set for weapon classes that can equip the current skill.
 * mov_equip: A bitmask indexed by, with bits set for movement classes that can equip the current skill.
 * sp_cost: SP required to learn the given skill.
 * category: Category of the skill.
 * {|class="wikitable default mw-collapsed mw-collapsible"

! Value !! Encrypted !! Category
 * 0 || 0xBC || Weapon
 * 1 || 0xBD || Assist
 * 2 || 0xBE || Special
 * 3 || 0xBF || Passive A
 * 4 || 0xB8 || Passive B
 * 5 || 0xB9 || Passive C
 * 6 || 0xBA || Sacred Seal
 * 7 || 0xBB || Refined weapon skill effect
 * 8 || 0xB4 || Beast transformation effect
 * }
 * tome_class: The element type for tome weapon skills.
 * exclusive: True if the skill cannot be inherited.
 * enemy_only: True if the skill can only be equipped by enemies.
 * range: Range of the skill for weapons and Assists, 0 for other skills.
 * might: Might for weapon skills, including bonuses that come from refinements, 0 for other skills.
 * cooldown_count: Cooldown count of the skill. The total cooldown count of a unit is the sum of cooldown_count for all equipped skills. Skills that accelerate Special trigger have a negative value.
 * assist_cd: True if the skill grants Special cooldown count-1 to the unit after this Assist is used.
 * healing: True if the skill is a healing Assist skill.
 * skill_range: Range of the skill effect that comes with the given skill, e.g. 1 for Hone skills and weapons that give equivalent skill effects.
 * score: A value that roughly corresponds to the SP cost of the skill. Might have been used for Arena matches.
 * promotion_tier: 2 for a few low-tier Specials and staff weapons / Assists, 0 for highest-tier skills, and 1 for everything else. Used by derived maps to determine how far skills are allowed to promote.
 * promotion_rarity: If non-zero, this skill would be promoted on derived maps if the unit's rarity is greater than or equal to this value.
 * refined: True if the skill is a refined weapon.
 * refine_sort_id: Internal sort value for refined weapons: 1 and 2 for skills, 101 – 104 for Atk/Spd/Def/Res refinements, 0 otherwise.
 * wep_effective: A bitmask indexed by, representing weapon class effectivenesses this skill grants. Only meaningful on weapon skills.
 * mov_effective: A bitmask indexed by, representing movement class effectivenesses this skill grants. Only meaningful on weapon skills.
 * wep_shield: A bitmask indexed by, representing weapon class effectivenesses this skill protects from. Used by.
 * mov_shield: A bitmask indexed by, representing movement class effectivenesses this skill protects from.
 * wep_weakness: A bitmask indexed by, representing weapon class weaknesses this skill grants. Used by.
 * mov_weakness: A bitmask indexed by, representing movement class weaknesses this skill grants. Currently unused.
 * wep_adaptive: A bitmask indexed by, representing weapon classes that receive damage from this skill calculated using the lower of Def or Res. Used by breaths. Only meaningful on weapon skills.
 * mov_adaptive: A bitmask indexed by, representing movement classes that receive damage from this skill calculated using the lower of Def or Res. Currently unused. Only meaningful on weapon skills.
 * timing_id: An index into the string table in  indicating the moment where the skill triggers.
 * ability_id: An index into the string table in  indicating the skill effect type. A skill can only contain one skill effect (refined weapons have an extra skill effect if refine_id is non-null).
 * limit1_id: An index into the string table in  indicating the skill's activation restriction.
 * limit1_params: Restriction-dependent parameters.
 * limit2_id, limit2_params: An additional activation restriction on the given skill. Both must be satisfied for the skill to activate.
 * target_wep: A bitmask indexed by, representing the target's weapon classes required for the skill's effect to activate. If zero, works on all weapon classes.
 * target_mov: A bitmask indexed by, representing the target's movement classes required for the skill's effect to activate. If zero, works on all movement classes.
 * passive_next: Like next_skill, except that this field is null for weapons, does not point to, and similarly for the three other Spur passives. ( pointed to  even before the CYL2 update.)
 * timestamp: A POSIX timestamp relative to the skill's release date; half a month into the future for skills released before Version 2.0.0, 1 month into the future for skills released since Version 2.0.0. This skill may be equipped by random units if timestamp is -1 or the current time is past timestamp.
 * random_allowed: Indicates whether random units can equip this skill. This affects Training Tower and Allegiance Battles. It has 3 possible values:
 * 0: This skill may not be equipped on random units.
 * 10: This skill may be equipped on random units.
 * 20: Purpose unknown. Same effect as 10. Used by basic non-staff weapons (e.g., , ) and basic staff Assists.
 * min_lv, max_lv: If non-zero, represent the lowest and highest levels respectively that allow random units to equip the given skill.
 * tt_inherit_base: If true, this skill may be considered by the 10th Stratum of the Training Tower for the random skill pool if it is equipped by the corresponding unit from the base map.
 * random_mode: Controls how random units may equip this skill. It has 3 possible values: (see for details)
 * 0: This skill may not be equipped on random units.
 * 1: This skill may be equipped by any random unit.
 * 2: This skill may be equipped by random units that own the skill.
 * 0: This skill may not be equipped on random units.
 * 10: This skill may be equipped on random units.
 * 20: Purpose unknown. Same effect as 10. Used by basic non-staff weapons (e.g., , ) and basic staff Assists.
 * min_lv, max_lv: If non-zero, represent the lowest and highest levels respectively that allow random units to equip the given skill.
 * tt_inherit_base: If true, this skill may be considered by the 10th Stratum of the Training Tower for the random skill pool if it is equipped by the corresponding unit from the base map.
 * random_mode: Controls how random units may equip this skill. It has 3 possible values: (see for details)
 * 0: This skill may not be equipped on random units.
 * 1: This skill may be equipped by any random unit.
 * 2: This skill may be equipped by random units that own the skill.

Grand Conquest world definitions
The files in  define the worlds used during Grand Conquests.

gc_area
Definition of an area node.


 * node_id: Internal index used to refer this area.
 * x, y: Physical coordinates of the area in pixels.
 * is_base: Whether this area is the base of the army it belongs.
 * army: The army initially controlling this area.
 * {|class="wikitable default mw-collapsed mw-collapsible"

! Value !! Encrypted !! Army
 * 0 || 0x01 || Alfonse (red)
 * 1 || 0x00 || Sharena (blue)
 * 2 || 0x03 || Anna (green)
 * }
 * area_no: The area number.
 * area_bonuses: If non-null, point to strings representing bonuses granted by this area. Valid bonuses are:
 * {|class="wikitable default mw-collapsed mw-collapsible"
 * area_no: The area number.
 * area_bonuses: If non-null, point to strings representing bonuses granted by this area. Valid bonuses are:
 * {|class="wikitable default mw-collapsed mw-collapsible"

! String !! Description (Only highest value applied. Does not stack.) (That turn only. Does not stack.)
 * 歩行能力強化 || Grants Atk/Spd/Def/Res+4 to infantry units.
 * 歩行奥義 || Grants Special cooldown charge +1 per attack to infantry units during combat.
 * 歩行奥義 || Grants Special cooldown charge +1 per attack to infantry units during combat.
 * 歩行奥義 || Grants Special cooldown charge +1 per attack to infantry units during combat.
 * 重装能力強化 || Grants Atk/Spd/Def/Res+4 to armored units.
 * 重装移動強化 || At start of turn, armored units can move 1 extra space.
 * 重装移動強化 || At start of turn, armored units can move 1 extra space.
 * 重装移動強化 || At start of turn, armored units can move 1 extra space.
 * 騎馬能力強化 || Grants Atk/Spd/Def/Res+4 to cavalry units.
 * 騎馬追撃 || If cavalry units initiate combat, units make a guaranteed follow-up attack.
 * 飛行能力強化 || Grants Atk/Spd/Def/Res+4 to flying units.
 * 飛行先導 || Units can move to a space adjacent to a flying ally within 2 spaces.
 * }
 * adjacent_area_bonus: If non-null, points to a string representing bonuses granted to adjacent areas of the controlling army.
 * map_id: Internal string identifier of the map used by this area.
 * neighbour_count: Number of areas connected to this area.
 * neighbours: An array of integers referring to neighbour areas by their node_id values. Always contains an odd number of entries; invalid entries have a value of 2947461234 (encrypted: ).
 * adjacent_area_bonus: If non-null, points to a string representing bonuses granted to adjacent areas of the controlling army.
 * map_id: Internal string identifier of the map used by this area.
 * neighbour_count: Number of areas connected to this area.
 * neighbours: An array of integers referring to neighbour areas by their node_id values. Always contains an odd number of entries; invalid entries have a value of 2947461234 (encrypted: ).

gc_world_definition
Definition of a Grand Conquest world. Each Grand Conquest consists of 3 world definition files from  to , corresponding to the 3 battles.


 * image: Filename of the world background image, relative to.
 * area_count: Number of areas in this world.
 * areas: Array of pointers to area definitions.

Weapon refinement options
The files at  list all weapon refinement options.


 * List parameters:

refine_res_t
Data for resources used or given by a weapon refinement.


 * res_type: The resource type.
 * count: Number of resource units used or given.

refine_data
Information for a weapon refinement option. SP costs are looked up at  of the skill corresponding to.


 * orig: Internal string identifier of the original weapon.
 * refined: Internal string identifier of the refined weapon.
 * use: Resources used by the given refinement. The first entry's type is either Refining Stone or Divine Dew, the second always Arena Medal.
 * give: Resources given by the given refinement, Divine Dew for exclusive weapons, no resources otherwise.

Quest information
The files at  specify data for Quests & Missions.


 * List parameters:

quest_unit_match
Information about player or enemy units required for a given quest.


 * hero_id: If non-null, points to the internal string identifier of the Hero to be used / defeated.
 * color: Color requirement of the Hero.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"

! Value !! Color
 * 0 || Red
 * 1 || Blue
 * 2 || Green
 * 3 || Colorless
 * -1 || Any
 * }
 * wep_type: If not -1, a  value that requires the unit's weapon class index (  for playable units) to be the given value.
 * mov_type: If not -1, a  value that requires the unit's movement class index (  for playable units) to be the given value.
 * lv: If not -1, requires the unit's level to be lv or above.
 * blessing: If not 0, requires that the unit has a blessing with the given element conferred, or is a Legendary Hero of the given element.
 * blessed: If not 0, requires that the unit has a blessing with the given element conferred.
 * wep_type: If not -1, a  value that requires the unit's weapon class index (  for playable units) to be the given value.
 * mov_type: If not -1, a  value that requires the unit's movement class index (  for playable units) to be the given value.
 * lv: If not -1, requires the unit's level to be lv or above.
 * blessing: If not 0, requires that the unit has a blessing with the given element conferred, or is a Legendary Hero of the given element.
 * blessed: If not 0, requires that the unit has a blessing with the given element conferred.

quest_definition
Information for a single quest entry.


 * quest_id: A unique string identifier for the quest. Recurring quests are composed of separate quest definitions that contain a different day or week number in this field (e.g. ).
 * common_id: If non-null, points to a separate string identifier shared between common quests across different quest groups, that is used to derive the quest descriptions (e.g. ).
 * times: Number of times the quest has to be fulfilled to obtain its rewards.
 * trigger: The event type that triggers the quest to check if it is fulfilled.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"

! Value !! Count
 * 1 || On foe defeat
 * 2 || On scenario clear
 * 3 || On Arena Assault clear
 * 4 || On Tap Battle floor clear
 * 5 || On Tap Battle boss clear
 * }
 * map_group: Internal string identifier of the map or event required for the given quest, without the difficulty.
 * game_mode, game_mode2: Game mode for the given quest. The two fields are identical.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"
 * 5 || On Tap Battle boss clear
 * }
 * map_group: Internal string identifier of the map or event required for the given quest, without the difficulty.
 * game_mode, game_mode2: Game mode for the given quest. The two fields are identical.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"

! Value !! Quest type
 * 0 || None (defeat a foe)
 * 1 || Normal map
 * 3 || Special map
 * 5 || Training Tower
 * 6 || Arena Duel
 * 7 || Voting Gauntlet
 * 8 || Tempest Trials
 * 11 || Arena Assault
 * 12 || Tap Battle
 * 14 || Grand Conquests
 * }
 * difficulty: If not -1, the minimum difficulty requirement of the given quest.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"
 * 8 || Tempest Trials
 * 11 || Arena Assault
 * 12 || Tap Battle
 * 14 || Grand Conquests
 * }
 * difficulty: If not -1, the minimum difficulty requirement of the given quest.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"
 * }
 * difficulty: If not -1, the minimum difficulty requirement of the given quest.
 * {|class="wikitable default sortable mw-collapsed mw-collapsible"

! Value !! Maps !! Arena Duels !! Arena Assault consecutive battles to win
 * 1 || Hard || Intermediate ||rowspan=3| Number of
 * 1 || Hard || Intermediate ||rowspan=3| Number of
 * 2 || Lunatic || Advanced
 * 3 || Infernal || -
 * }
 * max_allies: If not -1, the maximum number of allies allowed.
 * survive: If not -1, the number of allies that have to survive upon clearing a map (always 4).
 * map_id: Like map_group, but with the map difficulty embedded. Only present on quests that require an exact difficulty.
 * unit_reqs: Requirements for the units that can be used to fulfill the given requirement.
 * foe_reqs: Requirements for the units that can be used to fulfill the given requirement.
 * reward: Pointer to the encrypted reward payload.
 * payload_size: Size of the encrypted reward payload.
 * reward: Pointer to the encrypted reward payload.
 * payload_size: Size of the encrypted reward payload.

quest_list
All quests from a group at a given difficulty.


 * difficulty: If non-null, points to one of,  , and  . Used for quest lists that have multiple difficulties.
 * quests: Pointer to the array of quest definitions.
 * quest_count: Number of quests defined in the given list.

quest_group

 * id_tag: Internal string identifier used for the quest title (e.g. ).
 * group: Internal string identifier of the quest group (e.g. ).
 * lists: Pointer to the array of quest lists.
 * start: The time this quest group becomes available.
 * finish: The time this quest group becomes unavailable.
 * difficulties: Number of quest lists this group has.
 * sort_id: Internal sort value used to order cleared / uncleared quest groups.
 * id_num: A unique index for each quest group.