class MibHeader(ft.Struct): STRUCT_SIZE = (17 * 4) + (6 * 2) + 3 mibSignature: ft.ushort() padding: ft.uint() mibId: ft.uint() starRating: ft.ubyte() unk1: ft.uint( ) # Looks to be HR vs LR, in terms of damage modifiers (zorah quests are 6star and LR damage) unk2: ft.uint() rankRewards: ft.uint() # LR or HR? mapId: ft.uint() unk4: ft.uint() playerSpawn: ft.uint() binaryMapToggle: ft.uint() dayNightControl: ft.uint() weatherControl: ft.uint() unk5: ft.uint() zennyReward: ft.uint() faintPenalty: ft.uint() unk6: ft.uint() questTimer: ft.uint() unk7: ft.ubyte() monsterIconId: ext.blist(ft.ushort(), 5) hrRestriction: ft.ubyte() # difficulty modifier unk8: ft.uint()
class LbmSkillEntry(Struct): STRUCT_SIZE = 10 unk1: ft.ubyte() unk2: ft.ubyte() item_id: ft.ushort() item_qty: ft.ushort() unk3: ft.pad(4)
class MibObjective(ft.Struct): STRUCT_SIZE = 8 objectiveId: ft.ubyte() event: ft.ubyte() unk1: ft.ushort() objectiveId1: ft.ushort() objectiveAmount: ft.ushort()
class LbmSkillEntry(Struct): STRUCT_SIZE = 10 rarity: ft.ubyte() augment_type: ft.ubyte() item_id: ft.ushort() item_qty: ft.ushort() unk3: ft.pad(4)
class SklDatEntry(Struct): STRUCT_SIZE = 11 skill_id: ft.ushort() level: ft.ubyte() param1: ft.ushort() param2: ft.ushort() param3: ft.ushort() param4: ft.ushort()
class LbmBaseEntry(Struct): STRUCT_SIZE = 14 rarity: ft.ubyte() equip_type: ft.ubyte() crafting_cost: ft.uint() item1_id: ft.ushort() item1_qty: ft.ushort() item2_id: ft.ushort() item2_qty: ft.ushort()
class StmpEntry(Struct): STRUCT_SIZE = 40 id: ft.uint() unk1: ft.ushort() unk3: ft.ushort() unk4: ft.ushort() unk6: ft.ushort() client_id: ft.int() unk7: ft.uint() rp_cost: ft.uint() item1_id: ft.uint() item2_id: ft.uint() item1_qty: ft.uint() item2_qty: ft.uint()
class KireEntry(Struct): STRUCT_SIZE = 18 id: ft.uint() red: ft.ushort() orange: ft.ushort() yellow: ft.ushort() green: ft.ushort() blue: ft.ushort() white: ft.ushort() purple: ft.ushort()
class ItmEntry(Struct): STRUCT_SIZE = 32 id: ft.uint() sub_type: ft.ubyte() type: ft.uint() rarity: ft.ubyte() carry_limit: ft.ubyte() unk_limit: ft.ubyte() order: ft.ushort() flags: ft.uint() icon_id: ft.uint() icon_color: ft.ubyte() carry_item: ft.ubyte() sell_price: ft.uint() buy_price: ft.uint()
class OAmDatEntry(Struct): STRUCT_SIZE = 42 id: ft.uint() set_id: ft.ushort() equip_slot: ft.ubyte() unk1: ft.ubyte() defense: ft.uint() rarity: ft.ubyte() list_order: ft.ushort() model_id: ft.uint() crafting_cost: ft.uint() variant: ft.ubyte() unk2: ft.ubyte() unk3: ft.ubyte() unk4: ft.ubyte() fire_res: ft.byte() water_res: ft.byte() ice_res: ft.byte() thunder_res: ft.byte() dragon_res: ft.byte() unk5: ft.uint() set_group: ft.ushort() gmd_name_index: ft.ushort() gmd_desc_index: ft.ushort()
class AmDatEntry(Struct): STRUCT_SIZE = 60 id: ft.uint() order: ft.ushort() variant: ft.ubyte() set_id: ft.ushort() type: ft.ubyte() equip_slot: ft.ubyte() defense: ft.ushort() mdl_main_id: ft.ushort() mdl_secondary_id: ft.ushort() icon_color: ft.ubyte() pad8: ft.ubyte() icon_effect: ft.ubyte() rarity: ft.ubyte() cost: ft.uint() fire_res: ft.byte() water_res: ft.byte() ice_res: ft.byte() thunder_res: ft.byte() dragon_res: ft.byte() num_gem_slots: ft.ubyte() gem_slot1_lvl: ft.ubyte() gem_slot2_lvl: ft.ubyte() gem_slot3_lvl: ft.ubyte() set_skill1: ft.short() set_skill1_lvl: ft.ubyte() set_skill2: ft.short() set_skill2_lvl: ft.ubyte() skill1: ft.short() skill1_lvl: ft.ubyte() skill2: ft.short() skill2_lvl: ft.ubyte() skill3: ft.short() skill3_lvl: ft.ubyte() gender: ft.ubyte() pad11: ft.ubyte() pad12: ft.ubyte() pad13: ft.ubyte() set_group: ft.ushort() gmd_name_index: ft.ushort() gmd_desc_index: ft.ushort() is_permanent: ft.ubyte()
class RodInseEntry(Struct): STRUCT_SIZE = 28 id: ft.uint() attack_type: ft.ubyte() # 0 = Server, 1 = Blunt unk1: ft.ubyte() # unknown, could be GMD. Currently the same as id. unk2: ft.ubyte() base_model_id: ft.ushort() tree_id: ft.byte() cost: ft.uint() rarity: ft.ubyte() power: ft.ushort() speed: ft.ushort() heal: ft.ushort() unk3: ft.ushort() dust_type: ft.ushort() # 0 = blast, 1 = heal, 2 = paralysis, 3 = poison tree_position: ft.ubyte() unk4: ft.ushort() # can't be GMD, as dragonsoul is OOB
class EqCrtEntry(Struct): STRUCT_SIZE = 33 equip_type: ft.ubyte() equip_id: ft.ushort() key_item: ft.ushort() unk1: ft.int() unk2: ft.uint() rank: ft.uint() item1_id: ft.ushort() item1_qty: ft.ubyte() item2_id: ft.ushort() item2_qty: ft.ubyte() item3_id: ft.ushort() item3_qty: ft.ubyte() item4_id: ft.ushort() item4_qty: ft.ubyte() unk3: ft.pad(4)
class WpDatEntry(Struct): STRUCT_SIZE = 65 id: ft.uint() unk1: ft.ushort() base_model_id: ft.ushort() part1_id: ft.ushort() part2_id: ft.ushort() color: ft.ubyte() tree_id: ft.ubyte() is_fixed_upgrade: ft.ubyte() crafting_cost: ft.uint() rarity: ft.ubyte() kire_id: ft.ubyte() handicraft: ft.ubyte() raw_damage: ft.ushort() defense: ft.ushort() affinity: ft.byte() element_id: ft.ubyte() element_damage: ft.ushort() hidden_element_id: ft.ubyte() hidden_element_damage: ft.ushort() elderseal: ft.ubyte() num_gem_slots: ft.ubyte() gem_slot1_lvl: ft.ubyte() gem_slot2_lvl: ft.ubyte() gem_slot3_lvl: ft.ubyte() wep1_id: ft.ushort() wep2_id: ft.ushort() unk2: ft.uint() unk3: ft.uint() unk4: ft.uint() tree_position: ft.ubyte() order: ft.ushort() gmd_name_index: ft.ushort() gmd_description_index: ft.ushort() skill_id: ft.ushort() unk5: ft.ushort()
class WpDatGEntry(Struct): STRUCT_SIZE = 68 id: ft.uint() unk1: ft.ushort() base_model_id: ft.short() part1_id: ft.short() part2_id: ft.short() color: ft.ubyte() tree_id: ft.ubyte() is_fixed_upgrade: ft.ubyte() muzzle_type: ft.ubyte() barrel_type: ft.ubyte() magazine_type: ft.ubyte() scope_type: ft.ubyte() crafting_cost: ft.uint() rarity: ft.ubyte() raw_damage: ft.ushort() defense: ft.ushort() affinity: ft.byte() element_id: ft.ubyte() element_damage: ft.ushort() hidden_element_id: ft.ubyte() hidden_element_damage: ft.ushort() elderseal: ft.ubyte() shell_table_id: ft.ushort() deviation: ft.ubyte() num_gem_slots: ft.ubyte() gem_slot1_lvl: ft.ubyte() gem_slot2_lvl: ft.ubyte() gem_slot3_lvl: ft.ubyte() unk2: ft.uint() unk3: ft.uint() unk4: ft.uint() unk5: ft.ubyte() special_ammo_type: ft.ubyte() tree_position: ft.ubyte() order: ft.ushort() gmd_name_index: ft.ushort() gmd_description_index: ft.ushort() skill_id: ft.ushort() unk6: ft.ushort()
class WepGlanEntry(Struct): STRUCT_SIZE = 8 id: ft.uint() type: ft.ushort() level: ft.ushort()
class SklDatEntry(Struct): STRUCT_SIZE = 27 skill_id: ft.ushort() level: ft.ubyte() param01: ft.ushort() param02: ft.ushort() param03: ft.ushort() param04: ft.ushort() param05: ft.ushort() param06: ft.ushort() param07: ft.ushort() param08: ft.ushort() param09: ft.ushort() param10: ft.ushort() param11: ft.ushort() param12: ft.ushort()
class EqCusEntry(Struct): STRUCT_SIZE = 41 equip_type: ft.ubyte() equip_id: ft.ushort() key_item_id: ft.ushort() unk1: ft.int() unk2: ft.uint() unk3: ft.uint() item1_id: ft.ushort() item1_qty: ft.ubyte() item2_id: ft.ushort() item2_qty: ft.ubyte() item3_id: ft.ushort() item3_qty: ft.ubyte() item4_id: ft.ushort() item4_qty: ft.ubyte() descendant1_idx: ft.ushort() descendant2_idx: ft.ushort() descendant3_idx: ft.ushort() descendant4_idx: ft.ushort() unk4: ft.ubyte() group: ft.ubyte() unk5: ft.ushort()