#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum BoxType {
Attack = 0,
AttackInactive = 1,
Hurt = 2,
Stun = 3,
PhysicalExtent = 4,
Grab = 5,
GuardAir = 6,
GuardHigh = 7,
GuardMed = 8,
GuardLow = 9,
ThrowInvincible = 10,
Invincible = 11,
}
impl BoxType {
pub fn from_u8(v: u8) -> Option<Self> {
match v {
0 => Some(Self::Attack),
1 => Some(Self::AttackInactive),
2 => Some(Self::Hurt),
3 => Some(Self::Stun),
4 => Some(Self::PhysicalExtent),
5 => Some(Self::Grab),
6 => Some(Self::GuardAir),
7 => Some(Self::GuardHigh),
8 => Some(Self::GuardMed),
9 => Some(Self::GuardLow),
10 => Some(Self::ThrowInvincible),
11 => Some(Self::Invincible),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum LoopMode {
Once = 0,
Loop = 1,
PingPong = 2,
}
impl LoopMode {
pub fn from_u8(v: u8) -> Self {
match v {
1 => Self::Loop,
2 => Self::PingPong,
_ => Self::Once,
}
}
}
#[derive(Debug, Clone)]
pub struct SpriteEntry {
pub src_x: u16,
pub src_y: u16,
pub src_w: u16,
pub src_h: u16,
pub pivot_x: i16,
pub pivot_y: i16,
pub entry_flags: u8,
pub tag: u8,
pub duration_ms: u16,
}
#[derive(Debug, Clone)]
pub struct Hitbox {
pub name: String,
pub box_type: BoxType,
pub enabled: bool,
pub knockback: bool,
pub x: f32,
pub y: f32,
pub width: f32,
pub height: f32,
pub damage: u16,
pub hitstun: u16,
pub blockstun: u16,
pub knockback_angle: f32,
pub knockback_strength: f32,
pub rotation: f32,
}
#[derive(Debug, Clone)]
pub struct AudioCue {
pub clip_id: String,
pub volume: f32,
pub pitch: f32,
}
#[derive(Debug, Clone)]
pub struct HitboxFrame {
pub id: u16,
pub label: String,
pub program: String,
pub tags: String,
pub hitboxes: Vec<Hitbox>,
pub audio_cues: Vec<AudioCue>,
}
#[derive(Debug, Clone)]
pub struct UffAnimation {
pub name: String,
pub default_fps: u16,
pub loop_mode: LoopMode,
pub pixel_flags: u8,
pub sheet_w: u16,
pub sheet_h: u16,
pub frame_w: u16,
pub frame_h: u16,
pub floor_y_override: u16,
pub sprite_table: Vec<SpriteEntry>,
pub frames: Vec<HitboxFrame>,
pub pixel_data: Option<Vec<u8>>,
}
#[derive(Debug, Clone)]
pub struct UffPackage {
pub char_name: String,
pub floor_y: u16,
pub animations: Vec<UffAnimation>,
}