From f5a4e06faeed34d7d59d31095fcba676830086c8 Mon Sep 17 00:00:00 2001 From: MrMiguel211 <60329473+MrMiguel211@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:26:03 -0700 Subject: [PATCH] Add more options for liquids --- schema/randomprime.schema.json | 38 ++- src/add_modify_obj_patches.rs | 12 + src/patch_config.rs | 6 + src/patches.rs | 434 ++++++++++++++++---------------- structs/src/scly_props/water.rs | 112 ++++----- 5 files changed, 328 insertions(+), 274 deletions(-) diff --git a/schema/randomprime.schema.json b/schema/randomprime.schema.json index 2ab99768..6b732665 100644 --- a/schema/randomprime.schema.json +++ b/schema/randomprime.schema.json @@ -2861,7 +2861,7 @@ "default": false }, "liquids": { - "description": "Add liquid volumes to this room.", + "description": "Add liquid volumes to this room. The bigger their size, the bigger the `tileSize` and `tileSubdivisions` values must be in order for the liquid to render properly.", "type": "array", "items": { "type": "object", @@ -2894,6 +2894,42 @@ "scale": { "description": "The extent of the liquid volume.", "$ref": "#/$defs/vector3Positive" + }, + "morphInTime": { + "description": "Duration in which the water will be traveling to it's destination.", + "type": "number", + "minimum": 0.0, + "default": 3.0 + }, + "morphOutTime": { + "description": "Duration in which the water will be traveling back to it's source position.", + "type": "number", + "minimum": 0.0, + "default": 3.0 + }, + "tileSize": { + "description": "Specify the size of the water tiles.", + "type": "number", + "minimum": 0.0, + "default": 2.4 + }, + "tileSubdivisions": { + "description": "Specify the amount of tile subdivisions on the liquid.", + "type": "integer", + "minimum": 0, + "default": 6 + }, + "alphaInTime": { + "description": "Duration in which the water will be fading back in view.", + "type": "number", + "minimum": 0.0, + "default": 3.0 + }, + "alphaOutTime": { + "description": "Duration in which the water will be fading out of view.", + "type": "number", + "minimum": 0.0, + "default": 3.0 } }, "required": [ diff --git a/src/add_modify_obj_patches.rs b/src/add_modify_obj_patches.rs index 8a6d0b09..81e82e95 100644 --- a/src/add_modify_obj_patches.rs +++ b/src/add_modify_obj_patches.rs @@ -329,6 +329,18 @@ pub fn patch_add_liquid<'r>( .as_mut_vec(); water_obj.property_data.as_water_mut().unwrap().active = config.active.unwrap_or(true) as u8; + water_obj.property_data.as_water_mut().unwrap().morph_in_time = + config.morph_in_time.unwrap_or(1.0) as f32; + water_obj.property_data.as_water_mut().unwrap().morph_out_time = + config.morph_out_time.unwrap_or(1.0) as f32; + water_obj.property_data.as_water_mut().unwrap().tile_size = + config.tile_size.unwrap_or(2.4) as f32; + water_obj.property_data.as_water_mut().unwrap().tile_subdivisions = + config.tile_subdivisions.unwrap_or(6) as u32; + water_obj.property_data.as_water_mut().unwrap().alpha_in_time = + config.alpha_in_time.unwrap_or(3.0) as f32; + water_obj.property_data.as_water_mut().unwrap().alpha_out_time = + config.alpha_out_time.unwrap_or(3.0) as f32; let property_data: structs::SclyProperty = water_obj.property_data; assert!(property_data.object_type() == structs::Water::OBJECT_TYPE); diff --git a/src/patch_config.rs b/src/patch_config.rs index eb79abef..5e9ee303 100644 --- a/src/patch_config.rs +++ b/src/patch_config.rs @@ -175,6 +175,12 @@ pub struct WaterConfig { pub liquid_type: String, pub position: [f32; 3], pub scale: [f32; 3], + pub morph_in_time: Option, + pub morph_out_time: Option, + pub tile_size: Option, + pub tile_subdivisions: Option, + pub alpha_in_time: Option, + pub alpha_out_time: Option, } #[derive(PartialEq, Debug, Serialize, Deserialize, Copy, Clone)] diff --git a/src/patches.rs b/src/patches.rs index df7e4da6..55688031 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -3101,7 +3101,7 @@ fn patch_remove_water( #[derive(Copy, Clone, Debug)] pub enum WaterType { Normal, - Poision, + Poison, Lava, Phazon, } @@ -3110,7 +3110,7 @@ impl WaterType { pub fn iter() -> impl Iterator { [ WaterType::Normal, - WaterType::Poision, + WaterType::Poison, WaterType::Lava, WaterType::Phazon, ] @@ -3124,7 +3124,7 @@ impl WaterType { if string == "water" || string == "normal" { WaterType::Normal } else if string == "poison" || string == "acid" { - WaterType::Poision + WaterType::Poison } else if string == "lava" || string == "magma" { WaterType::Lava } else if string == "phazon" { @@ -3139,18 +3139,18 @@ impl WaterType { let water = water_obj.property_data.as_water().unwrap(); let mut deps: Vec<(u32, FourCC)> = vec![ - (water.txtr1, FourCC::from_bytes(b"TXTR")), - (water.txtr2, FourCC::from_bytes(b"TXTR")), - (water.txtr3, FourCC::from_bytes(b"TXTR")), - (water.txtr4, FourCC::from_bytes(b"TXTR")), - (water.refl_map_txtr, FourCC::from_bytes(b"TXTR")), - (water.txtr6, FourCC::from_bytes(b"TXTR")), - (water.lightmap_txtr, FourCC::from_bytes(b"TXTR")), - (water.small_enter_part, FourCC::from_bytes(b"PART")), - (water.med_enter_part, FourCC::from_bytes(b"PART")), - (water.large_enter_part, FourCC::from_bytes(b"PART")), - (water.part4, FourCC::from_bytes(b"PART")), - (water.part5, FourCC::from_bytes(b"PART")), + (water.pattern_map_1, FourCC::from_bytes(b"TXTR")), + (water.pattern_map_2, FourCC::from_bytes(b"TXTR")), + (water.color_map, FourCC::from_bytes(b"TXTR")), + (water.bump_map, FourCC::from_bytes(b"TXTR")), + (water.env_map, FourCC::from_bytes(b"TXTR")), + (water.env_bump_map, FourCC::from_bytes(b"TXTR")), + (water.lightmap, FourCC::from_bytes(b"TXTR")), + (water.splash_particle_1, FourCC::from_bytes(b"PART")), + (water.splash_particle_2, FourCC::from_bytes(b"PART")), + (water.splash_particle_3, FourCC::from_bytes(b"PART")), + (water.visor_runoff_particle, FourCC::from_bytes(b"PART")), + (water.unmorph_visor_runoff_particle, FourCC::from_bytes(b"PART")), ]; deps.retain(|i| i.0 != 0xffffffff && i.0 != 0); deps @@ -3171,94 +3171,94 @@ impl WaterType { radius: 0.0, knockback_power: 0.0, }, - unknown1: [0.0, 0.0, 0.0].into(), - unknown2: 2047, - unknown3: 0, - display_fluid_surface: 1, - txtr1: 2837040919, - txtr2: 2565985674, - txtr3: 3001645351, - txtr4: 4294967295, - refl_map_txtr: 4294967295, - txtr6: 1899158552, - unknown5: [3.0, 3.0, -1.0].into(), - unknown6: 35.0, + force: [0.0, 0.0, 0.0].into(), + flags: 2047, + thermal_cold: 0, + display_surface: 1, + pattern_map_1: 2837040919, + pattern_map_2: 2565985674, + color_map: 3001645351, + bump_map: 4294967295, + env_map: 4294967295, + env_bump_map: 1899158552, + bump_map_dir: [3.0, 3.0, -1.0].into(), + bump_scale: 35.0, morph_in_time: 5.0, morph_out_time: 5.0, active: 1, fluid_type: 0, - unknown11: 0, - unknown12: 0.65, + unknown1: 0, + alpha: 0.65, fluid_uv_motion: structs::FluidUVMotion { fluid_layer_motion1: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 20.0, - unknown2: 0.0, - unknown3: 0.15, - unknown4: 20.0, + time_to_wrap: 20.0, + orientation: 0.0, + magnitude: 0.15, + multiplication: 20.0, }, fluid_layer_motion2: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 15.0, - unknown2: 0.0, - unknown3: 0.15, - unknown4: 10.0, + time_to_wrap: 15.0, + orientation: 0.0, + magnitude: 0.15, + multiplication: 10.0, }, fluid_layer_motion3: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 30.0, - unknown2: 0.0, - unknown3: 0.15, - unknown4: 20.0, + time_to_wrap: 30.0, + orientation: 0.0, + magnitude: 0.15, + multiplication: 20.0, }, - unknown1: 70.0, - unknown2: 0.0, + time_to_wrap: 70.0, + orientation: 0.0, }, - unknown30: 0.0, - unknown31: 10.0, - unknown32: 1.0, - unknown33: 1.0, - unknown34: 0.0, - unknown35: 90.0, - unknown36: 0.0, - unknown37: 0.0, - unknown38: [1.0, 1.0, 1.0, 1.0].into(), - unknown39: [0.443137, 0.568627, 0.623529, 1.0].into(), - small_enter_part: 0xffffffff, - med_enter_part: 0xffffffff, - large_enter_part: 0xffffffff, - part4: 0xffffffff, - part5: 0xffffffff, - sound1: 2499, - sound2: 2499, - sound3: 463, - sound4: 464, - sound5: 465, - unknown40: 2.4, - unknown41: 6, - unknown42: 0.0, - unknown43: 1.0, - unknown44: 0.5, - unknown45: 0.8, - unknown46: 0.5, - unknown47: 0.0, - heat_wave_height: 0.0, - heat_wave_speed: 1.0, - heat_wave_color: [1.0, 1.0, 1.0, 1.0].into(), - lightmap_txtr: 231856622, - unknown51: 0.3, - alpha_in_time: 5.0, - alpha_out_time: 5.0, - unknown54: 0, - unknown55: 0, - crash_the_game: 0, + turb_speed: 20.0, + turb_distance: 100.0, + turb_frequence_max: 1.0, + turb_frequence_min: 3.0, + turb_phase_max: 0.0, + turb_phase_min: 90.0, + turb_amplitude_max: 0.0, + turb_amplitude_min: 0.0, + splash_color: [1.0, 1.0, 1.0, 1.0].into(), + inside_fog_color: [0.443137, 0.568627, 0.623529, 1.0].into(), + splash_particle_1: 1688698462, + splash_particle_2: 678723448, + splash_particle_3: 1571480382, + visor_runoff_particle: 1859537006, + unmorph_visor_runoff_particle: 1390596347, + visor_runoff_sound: 2499, + unmorph_visor_runoff_sound: 2499, + splash_sfx_1: 463, + splash_sfx_2: 464, + splash_sfx_3: 465, + tile_size: 2.4, + tile_subdivisions: 6, + specular_min: 0.0, + specular_max: 1.0, + reflection_size: 0.5, + ripple_intensity: 0.8, + reflection_blend: 0.5, + fog_bias: 0.0, + fog_magnitude: 0.0, + fog_speed: 1.0, + fog_color: [1.0, 1.0, 1.0, 1.0].into(), + lightmap: 4294967295, + units_per_lightmap_texel: 2.3, + alpha_in_time: 1.0, + alpha_out_time: 1.0, + unknown2: 0, + unknown3: 0, + unknown4: 0, })), }, - WaterType::Poision => structs::SclyObject { + WaterType::Poison => structs::SclyObject { instance_id: 0xFFFFFFFF, connections: vec![].into(), property_data: structs::SclyProperty::Water(Box::new(structs::Water { - name: b"poision water\0".as_cstr(), + name: b"poison water\0".as_cstr(), position: [405.3748, -43.92318, 10.530313].into(), scale: [13.0, 30.0, 1.0].into(), damage_info: structs::scly_structs::DamageInfo { @@ -3267,87 +3267,87 @@ impl WaterType { radius: 0.0, knockback_power: 0.0, }, - unknown1: [0.0, 0.0, 0.0].into(), - unknown2: 2047, - unknown3: 0, - display_fluid_surface: 1, - txtr1: 2671389366, - txtr2: 430856216, - txtr3: 1337209902, - txtr4: 4294967295, - refl_map_txtr: 4294967295, - txtr6: 1899158552, - unknown5: [3.0, 3.0, -4.0].into(), - unknown6: 48.0, + force: [0.0, 0.0, 0.0].into(), + flags: 2047, + thermal_cold: 0, + display_surface: 1, + pattern_map_1: 2671389366, + pattern_map_2: 430856216, + color_map: 1337209902, + bump_map: 4294967295, + env_map: 4294967295, + env_bump_map: 1899158552, + bump_map_dir: [3.0, 3.0, -4.0].into(), + bump_scale: 48.0, morph_in_time: 5.0, morph_out_time: 5.0, active: 1, fluid_type: 1, - unknown11: 0, - unknown12: 0.8, + unknown1: 0, + alpha: 0.8, fluid_uv_motion: structs::FluidUVMotion { fluid_layer_motion1: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 20.0, - unknown2: 0.0, - unknown3: 0.15, - unknown4: 20.0, + time_to_wrap: 20.0, + orientation: 0.0, + magnitude: 0.15, + multiplication: 20.0, }, fluid_layer_motion2: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 10.0, - unknown2: 180.0, - unknown3: 0.15, - unknown4: 10.0, + time_to_wrap: 10.0, + orientation: 180.0, + magnitude: 0.15, + multiplication: 10.0, }, fluid_layer_motion3: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 40.0, - unknown2: 0.0, - unknown3: 0.15, - unknown4: 25.0, + time_to_wrap: 40.0, + orientation: 0.0, + magnitude: 0.15, + multiplication: 25.0, }, - unknown1: 100.0, - unknown2: 0.0, + time_to_wrap: 100.0, + orientation: 0.0, }, - unknown30: 20.0, - unknown31: 100.0, - unknown32: 1.0, - unknown33: 3.0, - unknown34: 0.0, - unknown35: 90.0, - unknown36: 0.0, - unknown37: 0.0, - unknown38: [1.0, 1.0, 1.0, 1.0].into(), - unknown39: [0.619608, 0.705882, 0.560784, 1.0].into(), - small_enter_part: 0xffffffff, - med_enter_part: 0xffffffff, - large_enter_part: 0xffffffff, - part4: 0xffffffff, - part5: 0xffffffff, - sound1: 2499, - sound2: 2499, - sound3: 463, - sound4: 464, - sound5: 465, - unknown40: 2.4, - unknown41: 6, - unknown42: 0.0, - unknown43: 1.0, - unknown44: 0.5, - unknown45: 0.8, - unknown46: 1.0, - unknown47: 0.0, - heat_wave_height: 0.0, - heat_wave_speed: 1.0, - heat_wave_color: [0.784314, 1.0, 0.27451, 1.0].into(), - lightmap_txtr: 1723170806, - unknown51: 0.3, - alpha_in_time: 5.0, - alpha_out_time: 5.0, - unknown54: 0, - unknown55: 0, - crash_the_game: 0, + turb_speed: 20.0, + turb_distance: 100.0, + turb_frequence_max: 1.0, + turb_frequence_min: 3.0, + turb_phase_max: 0.0, + turb_phase_min: 90.0, + turb_amplitude_max: 0.0, + turb_amplitude_min: 0.0, + splash_color: [1.0, 1.0, 1.0, 1.0].into(), + inside_fog_color: [0.619608, 0.705882, 0.560784, 1.0].into(), + splash_particle_1: 2237216893, + splash_particle_2: 4804096, + splash_particle_3: 3159663901, + visor_runoff_particle: 1859537006, + unmorph_visor_runoff_particle: 1390596347, + visor_runoff_sound: 2499, + unmorph_visor_runoff_sound: 2499, + splash_sfx_1: 463, + splash_sfx_2: 464, + splash_sfx_3: 465, + tile_size: 2.4, + tile_subdivisions: 6, + specular_min: 0.0, + specular_max: 1.0, + reflection_size: 0.5, + ripple_intensity: 0.8, + reflection_blend: 1.0, + fog_bias: 0.0, + fog_magnitude: 0.0, + fog_speed: 1.0, + fog_color: [0.784314, 1.0, 0.27451, 1.0].into(), + lightmap: 4294967295, + units_per_lightmap_texel: 0.5, + alpha_in_time: 1.0, + alpha_out_time: 1.0, + unknown2: 0, + unknown3: 0, + unknown4: 0, })), }, WaterType::Lava => structs::SclyObject { @@ -3363,87 +3363,87 @@ impl WaterType { radius: 0.0, knockback_power: 0.0, }, - unknown1: [0.0, 0.0, 0.0].into(), - unknown2: 2047, - unknown3: 1, - display_fluid_surface: 1, - txtr1: 117134624, - txtr2: 2154768270, - txtr3: 3598011320, - txtr4: 1249771730, - refl_map_txtr: 4294967295, - txtr6: 4294967295, - unknown5: [3.0, 3.0, -4.0].into(), - unknown6: 70.0, - morph_in_time: 5.0, - morph_out_time: 5.0, + force: [0.0, 0.0, 0.0].into(), + flags: 2047, + thermal_cold: 1, + display_surface: 1, + pattern_map_1: 117134624, + pattern_map_2: 2154768270, + color_map: 3598011320, + bump_map: 1249771730, + env_map: 4294967295, + env_bump_map: 4294967295, + bump_map_dir: [3.0, 3.0, -4.0].into(), + bump_scale: 70.0, + morph_in_time: 15.0, + morph_out_time: 15.0, active: 1, fluid_type: 2, - unknown11: 0, - unknown12: 0.65, + unknown1: 0, + alpha: 0.65, fluid_uv_motion: structs::FluidUVMotion { fluid_layer_motion1: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 30.0, - unknown2: 0.0, - unknown3: 0.15, - unknown4: 10.0, + time_to_wrap: 30.0, + orientation: 0.0, + magnitude: 0.15, + multiplication: 10.0, }, fluid_layer_motion2: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 40.0, - unknown2: 180.0, - unknown3: 0.15, - unknown4: 20.0, + time_to_wrap: 40.0, + orientation: 180.0, + magnitude: 0.15, + multiplication: 20.0, }, fluid_layer_motion3: structs::FluidLayerMotion { fluid_uv_motion: 0, - unknown1: 45.0, - unknown2: 0.0, - unknown3: 0.15, - unknown4: 10.0, + time_to_wrap: 45.0, + orientation: 0.0, + magnitude: 0.15, + multiplication: 10.0, }, - unknown1: 70.0, - unknown2: 0.0, + time_to_wrap: 70.0, + orientation: 0.0, }, - unknown30: 20.0, - unknown31: 100.0, - unknown32: 1.0, - unknown33: 3.0, - unknown34: 0.0, - unknown35: 90.0, - unknown36: 0.0, - unknown37: 0.0, - unknown38: [1.0, 1.0, 1.0, 1.0].into(), - unknown39: [0.631373, 0.270588, 0.270588, 1.0].into(), - small_enter_part: 0xffffffff, - med_enter_part: 0xffffffff, - large_enter_part: 0xffffffff, - part4: 0xffffffff, - part5: 0xffffffff, - sound1: 2412, - sound2: 2412, - sound3: 1373, - sound4: 1374, - sound5: 1375, - unknown40: 2.4, - unknown41: 6, - unknown42: 0.0, - unknown43: 1.0, - unknown44: 0.5, - unknown45: 0.8, - unknown46: 0.5, - unknown47: 1.7, - heat_wave_height: 1.2, - heat_wave_speed: 1.0, - heat_wave_color: [1.0, 0.682353, 0.294118, 1.0].into(), - lightmap_txtr: 4294967295, - unknown51: 0.3, - alpha_in_time: 5.0, - alpha_out_time: 5.0, - unknown54: 4294967295, - unknown55: 4294967295, - crash_the_game: 0, + turb_speed: 20.0, + turb_distance: 100.0, + turb_frequence_max: 1.0, + turb_frequence_min: 3.0, + turb_phase_max: 0.0, + turb_phase_min: 90.0, + turb_amplitude_max: 0.0, + turb_amplitude_min: 0.0, + splash_color: [1.0, 1.0, 1.0, 1.0].into(), + inside_fog_color: [0.631373, 0.270588, 0.270588, 1.0].into(), + splash_particle_1: 1773746298, + splash_particle_2: 343573999, + splash_particle_3: 1354016026, + visor_runoff_particle: 3917594797, + unmorph_visor_runoff_particle: 1390596347, + visor_runoff_sound: 2412, + unmorph_visor_runoff_sound: 2412, + splash_sfx_1: 1373, + splash_sfx_2: 1374, + splash_sfx_3: 1375, + tile_size: 2.4, + tile_subdivisions: 6, + specular_min: 0.0, + specular_max: 1.0, + reflection_size: 0.5, + ripple_intensity: 0.8, + reflection_blend: 0.5, + fog_bias: 1.7, + fog_magnitude: 1.2, + fog_speed: 1.0, + fog_color: [1.0, 0.682353, 0.294118, 1.0].into(), + lightmap: 4294967295, + units_per_lightmap_texel: 0.3, + alpha_in_time: 1.0, + alpha_out_time: 1.0, + unknown2: 4294967295, + unknown3: 4294967295, + unknown4: 0, })), }, WaterType::Phazon => { diff --git a/structs/src/scly_props/water.rs b/structs/src/scly_props/water.rs index 577af8d4..48bd9919 100644 --- a/structs/src/scly_props/water.rs +++ b/structs/src/scly_props/water.rs @@ -14,63 +14,63 @@ pub struct Water<'r> { pub position: GenericArray, pub scale: GenericArray, pub damage_info: DamageInfo, - pub unknown1: GenericArray, - pub unknown2: u32, - pub unknown3: u8, - pub display_fluid_surface: u8, - pub txtr1: u32, - pub txtr2: u32, - pub txtr3: u32, - pub txtr4: u32, - pub refl_map_txtr: u32, - pub txtr6: u32, - pub unknown5: GenericArray, - pub unknown6: f32, + pub force: GenericArray, + pub flags: u32, + pub thermal_cold: u8, + pub display_surface: u8, + pub pattern_map_1: u32, + pub pattern_map_2: u32, + pub color_map: u32, + pub bump_map: u32, + pub env_map: u32, + pub env_bump_map: u32, + pub bump_map_dir: GenericArray, + pub bump_scale: f32, pub morph_in_time: f32, pub morph_out_time: f32, pub active: u8, pub fluid_type: u32, - pub unknown11: u8, - pub unknown12: f32, + pub unknown1: u8, + pub alpha: f32, pub fluid_uv_motion: FluidUVMotion, - pub unknown30: f32, - pub unknown31: f32, - pub unknown32: f32, - pub unknown33: f32, - pub unknown34: f32, - pub unknown35: f32, - pub unknown36: f32, - pub unknown37: f32, - pub unknown38: GenericArray, // RGBA - pub unknown39: GenericArray, // RGBA - pub small_enter_part: u32, - pub med_enter_part: u32, - pub large_enter_part: u32, - pub part4: u32, - pub part5: u32, - pub sound1: u32, - pub sound2: u32, - pub sound3: u32, - pub sound4: u32, - pub sound5: u32, - pub unknown40: f32, - pub unknown41: u32, - pub unknown42: f32, - pub unknown43: f32, - pub unknown44: f32, - pub unknown45: f32, - pub unknown46: f32, - pub unknown47: f32, - pub heat_wave_height: f32, - pub heat_wave_speed: f32, - pub heat_wave_color: GenericArray, // RGBA - pub lightmap_txtr: u32, - pub unknown51: f32, + pub turb_speed: f32, + pub turb_distance: f32, + pub turb_frequence_max: f32, + pub turb_frequence_min: f32, + pub turb_phase_max: f32, + pub turb_phase_min: f32, + pub turb_amplitude_max: f32, + pub turb_amplitude_min: f32, + pub splash_color: GenericArray, // RGBA + pub inside_fog_color: GenericArray, // RGBA + pub splash_particle_1: u32, + pub splash_particle_2: u32, + pub splash_particle_3: u32, + pub visor_runoff_particle: u32, + pub unmorph_visor_runoff_particle: u32, + pub visor_runoff_sound: u32, + pub unmorph_visor_runoff_sound: u32, + pub splash_sfx_1: u32, + pub splash_sfx_2: u32, + pub splash_sfx_3: u32, + pub tile_size: f32, + pub tile_subdivisions: u32, + pub specular_min: f32, + pub specular_max: f32, + pub reflection_size: f32, + pub ripple_intensity: f32, + pub reflection_blend: f32, + pub fog_bias: f32, + pub fog_magnitude: f32, + pub fog_speed: f32, + pub fog_color: GenericArray, // RGBA + pub lightmap: u32, + pub units_per_lightmap_texel: f32, pub alpha_in_time: f32, pub alpha_out_time: f32, - pub unknown54: u32, - pub unknown55: u32, - pub crash_the_game: u8, + pub unknown2: u32, + pub unknown3: u32, + pub unknown4: u8, } #[auto_struct(Readable, Writable)] @@ -79,18 +79,18 @@ pub struct FluidUVMotion { pub fluid_layer_motion1: FluidLayerMotion, pub fluid_layer_motion2: FluidLayerMotion, pub fluid_layer_motion3: FluidLayerMotion, - pub unknown1: f32, - pub unknown2: f32, + pub time_to_wrap: f32, + pub orientation: f32, } #[auto_struct(Readable, Writable)] #[derive(Debug, Clone)] pub struct FluidLayerMotion { pub fluid_uv_motion: u32, - pub unknown1: f32, - pub unknown2: f32, - pub unknown3: f32, - pub unknown4: f32, + pub time_to_wrap: f32, + pub orientation: f32, + pub magnitude: f32, + pub multiplication: f32, } use crate::{impl_position, impl_scale};