mirror of
https://github.com/redstrate/Kawari.git
synced 2025-04-24 16:17:44 +00:00
126 lines
2.9 KiB
Rust
126 lines
2.9 KiB
Rust
use binrw::binrw;
|
|
|
|
use crate::common::{CHAR_NAME_MAX_LENGTH, CustomizeData, Position, read_string, write_string};
|
|
|
|
use super::StatusEffect;
|
|
|
|
#[binrw]
|
|
#[brw(repr = u8)]
|
|
#[derive(Clone, PartialEq, Debug, Default)]
|
|
pub enum ObjectKind {
|
|
#[default]
|
|
None = 0,
|
|
Player = 1,
|
|
BattleNpc = 2,
|
|
EventNpc = 3,
|
|
Treasure = 4,
|
|
Aetheryte = 5,
|
|
GatheringPoint = 6,
|
|
EventObj = 7,
|
|
Mount = 8,
|
|
Companion = 9,
|
|
Retainer = 10,
|
|
AreaObject = 11,
|
|
HousingEventObject = 12,
|
|
Cutscene = 13,
|
|
MjiObject = 14,
|
|
Ornament = 15,
|
|
CardStand = 16,
|
|
}
|
|
|
|
#[binrw]
|
|
#[brw(little)]
|
|
#[brw(repr = u8)]
|
|
#[derive(Debug, Clone, Default, PartialEq)]
|
|
pub enum CharacterMode {
|
|
None = 0x0,
|
|
#[default]
|
|
Normal = 0x1,
|
|
Dead = 0x2,
|
|
}
|
|
|
|
#[binrw]
|
|
#[brw(little)]
|
|
#[derive(Debug, Clone, Default)]
|
|
pub struct CommonSpawn {
|
|
pub title: u16,
|
|
pub u1b: u16,
|
|
pub current_world_id: u16,
|
|
pub home_world_id: u16,
|
|
|
|
pub gm_rank: u8,
|
|
pub u3c: u8,
|
|
pub u4: u8,
|
|
pub online_status: u8,
|
|
|
|
pub pose: u8,
|
|
pub u5a: u8,
|
|
pub u5b: u8,
|
|
pub u5c: u8,
|
|
|
|
pub target_id: u64,
|
|
pub u6: u32,
|
|
pub u7: u32,
|
|
pub main_weapon_model: u64,
|
|
pub sec_weapon_model: u64,
|
|
pub craft_tool_model: u64,
|
|
|
|
pub u14: u32,
|
|
pub u15: u32,
|
|
pub bnpc_base: u32, // See BNpcBase Excel sheet
|
|
pub bnpc_name: u32, // See BNpcName Excel sheet
|
|
pub unk3: [u8; 8],
|
|
pub director_id: u32, // FIXME: i think the next three are in the wrong order
|
|
pub spawner_id: u32,
|
|
pub parent_actor_id: u32,
|
|
pub hp_max: u32,
|
|
pub hp_curr: u32,
|
|
pub display_flags: u32, // assumed
|
|
pub fate_id: u16, // assumed
|
|
pub mp_curr: u16,
|
|
pub mp_max: u16,
|
|
pub unk: u16,
|
|
pub model_chara: u16, // See ModelChara Excel sheet
|
|
pub rotation: u16, // assumed
|
|
pub current_mount: u16, // assumed
|
|
pub active_minion: u16, // assumed
|
|
pub u23: u8, // assumed
|
|
pub u24: u8, // assumed
|
|
pub u25: u8, // assumed
|
|
pub u26: u8, // assumed
|
|
pub spawn_index: u8,
|
|
pub mode: CharacterMode,
|
|
pub persistent_emote: u8,
|
|
pub object_kind: ObjectKind,
|
|
pub subtype: u8,
|
|
pub voice: u8,
|
|
pub enemy_type: u8,
|
|
pub unk27: u8,
|
|
pub level: u8,
|
|
pub class_job: u8,
|
|
pub unk28: u8,
|
|
pub unk29: u8,
|
|
pub mount_head: u8,
|
|
pub mount_body: u8,
|
|
pub mount_feet: u8,
|
|
pub mount_color: u8,
|
|
pub scale: u8,
|
|
pub element_data: [u8; 6],
|
|
pub padding2: [u8; 1],
|
|
pub effect: [StatusEffect; 30],
|
|
pub pos: Position,
|
|
pub models: [u32; 10],
|
|
pub unknown6_58: [u8; 10],
|
|
pub padding3: [u8; 4],
|
|
#[br(count = CHAR_NAME_MAX_LENGTH)]
|
|
#[bw(pad_size_to = CHAR_NAME_MAX_LENGTH)]
|
|
#[br(map = read_string)]
|
|
#[bw(map = write_string)]
|
|
pub name: String,
|
|
pub look: CustomizeData,
|
|
#[br(count = 6)]
|
|
#[bw(pad_size_to = 6)]
|
|
#[br(map = read_string)]
|
|
#[bw(map = write_string)]
|
|
pub fc_tag: String,
|
|
}
|