1use crate::dat::common::DeString;
2
3#[derive(Protocol, Debug, Clone, PartialEq)]
4pub struct SpriteTable {
5 pub size: u16,
6 #[protocol(length_prefix(elements(size)))]
7 pub sprite_enabled: Vec<u32>,
8 #[protocol(length_prefix(pointers(sprite_enabled)))]
9 pub sprites: Vec<Sprite>,
10}
11
12#[derive(Protocol, Debug, Clone, PartialEq)]
13pub struct Sprite {
14 pub name: DeString,
15 pub filename: DeString,
16 pub particle_effect_name: DeString,
17 pub slp_id: i32,
18 pub is_loaded: bool,
19 pub force_player_color: u8,
20 pub layer: u8,
21 pub color_table: u16,
22 pub transparent_selection: bool,
23 pub bounding_box: (i16, i16, i16, i16),
24 pub num_deltas: u16,
25 pub sound_id: i16,
26 pub w_wise_sound_id: i32,
27 pub angle_sound_used: u8,
28 pub num_frames: u16,
29 pub num_angles: u16,
30 pub base_speed: f32,
31 pub frame_rate: f32,
32 pub replay_delay: f32,
33 pub sequence_type: u8,
34 pub id: i16,
35 pub mirror_flag: i8,
36 pub editor_flag: i8,
37 #[protocol(length_prefix(elements(num_deltas)))]
38 pub deltas: Vec<SpriteDelta>,
39 #[protocol(skip_if("angle_sound_used == 0"))]
40 #[protocol(length_prefix(elements(num_angles)))]
41 pub attack_sounds: Option<Vec<AngleSound>>,
42}
43
44#[derive(Protocol, Debug, Clone, PartialEq)]
45pub struct SpriteDelta {
46 pub graphic_id: i16,
47 pub padding_1: i16,
48 pub sprite_ptr: i32,
49 pub offset_x: i16,
50 pub offset_y: i16,
51 pub display_angle: i16,
52 pub padding_2: i16,
53}
54
55#[derive(Protocol, Debug, Clone, PartialEq)]
56pub struct AngleSound {
57 pub sound_delay: i16,
58 pub sound_id: u16,
59 pub wwise_sound_id: u32,
60 pub sound_delay_: i16,
61 pub sound_id_: u16,
62 pub wwise_sound_id_: u32,
63 pub sound_delay__: i16,
64 pub sound_id__: u16,
65 pub wwise_sound_id__: u32,
66}
67
68#[derive(Protocol, Debug, Clone, PartialEq)]
69pub struct SoundProp {
70 pub sound_delay: i16,
71 pub sound_id: u16,
72 pub wwise_sound_id: i32,
73}