From b9cf56d84bee8ee77ad6a9b5bc49d25c9d4c7a00 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Wed, 13 Mar 2024 15:17:33 -0700 Subject: [PATCH 01/13] position/scale is optional when editing triggers --- schema/randomprime.schema.json | 19 +++++++++++++------ src/add_modify_obj_patches.rs | 24 ++++++++++++------------ src/patch_config.rs | 4 ++-- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/schema/randomprime.schema.json b/schema/randomprime.schema.json index 7266e935..b7d332e7 100644 --- a/schema/randomprime.schema.json +++ b/schema/randomprime.schema.json @@ -3738,11 +3738,21 @@ }, "position": { "description": "Position of the trigger.", - "$ref": "#/$defs/vector3" + "$ref": "#/$defs/vector3", + "default": [ + 0.0, + 0.0, + 0.0 + ] }, "scale": { "description": "Extent of the trigger.", - "$ref": "#/$defs/vector3Positive" + "$ref": "#/$defs/vector3Positive", + "default": [ + 5, + 5, + 5 + ] }, "force": { "description": "If the apply force flag is enabled, this is the force applied.", @@ -3781,10 +3791,7 @@ "default": false } }, - "required": [ - "position", - "scale" - ], + "required": [], "additionalProperties": false } }, diff --git a/src/add_modify_obj_patches.rs b/src/add_modify_obj_patches.rs index cffbc6c1..b170f24d 100644 --- a/src/add_modify_obj_patches.rs +++ b/src/add_modify_obj_patches.rs @@ -556,8 +556,8 @@ pub fn patch_add_trigger<'r>( () => { structs::Trigger { name: b"my trigger\0".as_cstr(), - position: config.position.into(), - scale: config.scale.into(), + position: config.position.unwrap_or([0.0, 0.0, 0.0]).into(), + scale: config.scale.unwrap_or([5.0, 5.0, 5.0]).into(), damage_info: structs::scly_structs::DamageInfo { weapon_type: config.damage_type.unwrap_or(DamageType::Power) as u32, damage: config.damage_amount.unwrap_or(0.0), @@ -577,16 +577,16 @@ pub fn patch_add_trigger<'r>( ($obj:expr) => { let property_data = $obj.property_data.as_trigger_mut().unwrap(); - property_data.position = config.position.into(); - property_data.scale = config.scale.into(); - - if let Some(active ) = config.active { property_data.active = active as u8 } - if let Some(damage_type ) = config.damage_type { property_data.damage_info .weapon_type = damage_type as u32 } - if let Some(damage_amount ) = config.damage_amount { property_data.damage_info .damage = damage_amount } - if let Some(force ) = config.force { property_data.force = force .into() } - if let Some(flags ) = config.flags { property_data.flags = flags } - if let Some(deactivate_on_enter) = config.deactivate_on_enter { property_data.deactivate_on_enter = deactivate_on_enter as u8 } - if let Some(deactivate_on_exit ) = config.deactivate_on_exit { property_data.deactivate_on_exit = deactivate_on_exit as u8 } + if let Some(active ) = config.active { property_data.active = active as u8 } + if let Some(position ) = config.position { property_data.position = position .into() } + if let Some(scale ) = config.scale { property_data.scale = scale .into() } + if let Some(damage_type ) = config.damage_type { property_data.damage_info .weapon_type = damage_type as u32 } + if let Some(damage_type ) = config.damage_type { property_data.damage_info .weapon_type = damage_type as u32 } + if let Some(damage_amount ) = config.damage_amount { property_data.damage_info .damage = damage_amount } + if let Some(force ) = config.force { property_data.force = force .into() } + if let Some(flags ) = config.flags { property_data.flags = flags } + if let Some(deactivate_on_enter ) = config.deactivate_on_enter { property_data.deactivate_on_enter = deactivate_on_enter as u8 } + if let Some(deactivate_on_exit ) = config.deactivate_on_exit { property_data.deactivate_on_exit = deactivate_on_exit as u8 } }; } diff --git a/src/patch_config.rs b/src/patch_config.rs index 3d2667e9..1b5b37bb 100644 --- a/src/patch_config.rs +++ b/src/patch_config.rs @@ -393,8 +393,8 @@ pub struct TriggerConfig pub id: Option, pub layer: Option, pub active: Option, - pub position: [f32;3], - pub scale: [f32;3], + pub position: Option<[f32;3]>, + pub scale: Option<[f32;3]>, pub force: Option<[f32;3]>, pub damage_type: Option, pub damage_amount: Option, From 78a9c6b3812f9811460e15659d53ac9cce7f25f6 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Thu, 14 Mar 2024 09:50:03 -0700 Subject: [PATCH 02/13] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c7d639cc..1c8b436b 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ To give you a taste of what's implemented, here are some highlighted features wh ## Usage -- The application which best makes use of this program is [randovania](https://github.com/randovania/randovania). It's a full-GUI application centered around randomizing the game with various settings, even supporting co-operative multiworld. +- The application which best makes use of this program is [randovania](https://github.com/randovania/randovania). It's a full-GUI application centered around randomizing the game with various settings, even supporting co-operative multiworld. It's implemented via the py-randomprime wrapper (described below) - Some "fanhacks" have been made utilizing the features exposed by this program more directly. They can be found in the [metroid-prime-fanhacks](https://github.com/toasterparty/metroid-prime-fanhacks) repository. Be sure to check out the [Creator's Guide](https://github.com/toasterparty/metroid-prime-fanhacks/blob/main/doc/readme.md) for an in-depth dive into the patcher API and how to use it. -- [py-randomprime](https://github.com/randovania/py-randomprime) implements Python bindings for this project's feature set making it much more portable. +- [py-randomprime](https://github.com/randovania/py-randomprime) implements Python bindings for this project's feature set making it much more portable. The py-randomprime repository also builds standalone windows executable files (`.exe`) and attaches them to each release. ## Documentation From c5fdfadc0f5a806fa60b66fbbb2913156c74bc9b Mon Sep 17 00:00:00 2001 From: toasterparty Date: Wed, 20 Mar 2024 14:11:54 -0700 Subject: [PATCH 03/13] "layer" for "lockOnPoints" --- schema/randomprime.schema.json | 6 ++++++ src/add_modify_obj_patches.rs | 29 +++++++++++++++-------------- src/patch_config.rs | 1 + 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/schema/randomprime.schema.json b/schema/randomprime.schema.json index b7d332e7..3292a634 100644 --- a/schema/randomprime.schema.json +++ b/schema/randomprime.schema.json @@ -3172,6 +3172,12 @@ "description": "Position of the point", "$ref": "#/$defs/vector3" }, + "layer": { + "description": "Layer # to place the lockOnPoint at", + "type": "integer", + "minimum": 0, + "maximum": 63 + }, "isGrapple": { "description": "If true, adds grapple functionality to this point.", "type": "boolean", diff --git a/src/add_modify_obj_patches.rs b/src/add_modify_obj_patches.rs index b170f24d..c1d45efd 100644 --- a/src/add_modify_obj_patches.rs +++ b/src/add_modify_obj_patches.rs @@ -2444,6 +2444,7 @@ pub fn patch_lock_on_point<'r>( let is_grapple = config.is_grapple.unwrap_or(false); let no_lock = config.no_lock.unwrap_or(false); let position = config.position; + let layer = config.layer.unwrap_or(0) as usize; if is_grapple { let deps = vec![ @@ -2467,7 +2468,7 @@ pub fn patch_lock_on_point<'r>( area.add_dependencies(game_resources, 0, deps_iter); } - let actor_id = config.id1.unwrap_or(area.new_object_id_from_layer_name("Default")); + let actor_id = config.id1.unwrap_or(area.new_object_id_from_layer_id(layer)); let mut grapple_point_id = 0; let mut special_function_id = 0; let mut timer_id = 0; @@ -2477,20 +2478,20 @@ pub fn patch_lock_on_point<'r>( let mut add_scan_point = false; if is_grapple { - grapple_point_id = config.id2.unwrap_or(area.new_object_id_from_layer_name("Default")); + grapple_point_id = config.id2.unwrap_or(area.new_object_id_from_layer_id(layer)); add_scan_point = true; // We don't actually need the scan points, just their assets. Could save on objects by making this false via config if add_scan_point { - special_function_id = area.new_object_id_from_layer_name("Default"); - timer_id = area.new_object_id_from_layer_name("Default"); - poi_pre_id = area.new_object_id_from_layer_name("Default"); - poi_post_id = area.new_object_id_from_layer_name("Default"); + special_function_id = area.new_object_id_from_layer_id(layer); + timer_id = area.new_object_id_from_layer_id(layer); + poi_pre_id = area.new_object_id_from_layer_id(layer); + poi_post_id = area.new_object_id_from_layer_id(layer); } } else if !no_lock { - damageable_trigger_id = config.id2.unwrap_or(area.new_object_id_from_layer_name("Default")); + damageable_trigger_id = config.id2.unwrap_or(area.new_object_id_from_layer_id(layer)); } let layers = area.mrea().scly_section_mut().layers.as_mut_vec(); - layers[0].objects.as_mut_vec().push( + layers[layer].objects.as_mut_vec().push( structs::SclyObject { instance_id: actor_id, property_data: structs::Actor { @@ -2569,7 +2570,7 @@ pub fn patch_lock_on_point<'r>( ); if is_grapple { - layers[0].objects.as_mut_vec().push( + layers[layer].objects.as_mut_vec().push( structs::SclyObject { instance_id: grapple_point_id, property_data: structs::GrapplePoint { @@ -2598,7 +2599,7 @@ pub fn patch_lock_on_point<'r>( ); if add_scan_point { - layers[0].objects.as_mut_vec().push( + layers[layer].objects.as_mut_vec().push( structs::SclyObject { instance_id: special_function_id, connections: vec![ @@ -2636,7 +2637,7 @@ pub fn patch_lock_on_point<'r>( } ); - layers[0].objects.as_mut_vec().push( + layers[layer].objects.as_mut_vec().push( structs::SclyObject { instance_id: timer_id, connections: vec![ @@ -2657,7 +2658,7 @@ pub fn patch_lock_on_point<'r>( } ); - layers[0].objects.as_mut_vec().push( + layers[layer].objects.as_mut_vec().push( structs::SclyObject { instance_id: poi_pre_id, connections: vec![].into(), @@ -2676,7 +2677,7 @@ pub fn patch_lock_on_point<'r>( } ); - layers[0].objects.as_mut_vec().push( + layers[layer].objects.as_mut_vec().push( structs::SclyObject { instance_id: poi_post_id, connections: vec![].into(), @@ -2696,7 +2697,7 @@ pub fn patch_lock_on_point<'r>( ); } } else if !no_lock { - layers[0].objects.as_mut_vec().push( + layers[layer].objects.as_mut_vec().push( structs::SclyObject { instance_id: damageable_trigger_id, property_data: structs::DamageableTrigger { diff --git a/src/patch_config.rs b/src/patch_config.rs index 1b5b37bb..0e85e023 100644 --- a/src/patch_config.rs +++ b/src/patch_config.rs @@ -347,6 +347,7 @@ pub struct CameraHintConfig pub struct LockOnPoint { pub id1: Option, + pub layer: Option, pub active1: Option, pub id2: Option, pub active2: Option, From a3137bc3b5584c0e5156d81813b388b1803faa83 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Thu, 21 Mar 2024 20:56:46 -0700 Subject: [PATCH 04/13] Fix deleting shit near doors on accident --- src/mlvl_wrapper.rs | 4 +++- src/patches.rs | 15 ++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/mlvl_wrapper.rs b/src/mlvl_wrapper.rs index adc6320a..07ece368 100644 --- a/src/mlvl_wrapper.rs +++ b/src/mlvl_wrapper.rs @@ -206,6 +206,9 @@ impl<'r, 'mlvl, 'cursor, 'list> MlvlArea<'r, 'mlvl, 'cursor, 'list> } self.mrea().scly_section_mut().layers.as_mut_vec().push(SclyLayer::new()); + + assert!(self.layer_names.len() as u32 == self.layer_flags.layer_count); + assert!(self.layer_flags.layer_count as u32 == self.mrea().scly_section().layers.len() as u32); } pub fn add_dependencies(&mut self, pickup_resources: &HashMap<(u32, FourCC), Resource<'r>>, @@ -228,4 +231,3 @@ impl<'r, 'mlvl, 'cursor, 'list> MlvlArea<'r, 'mlvl, 'cursor, 'list> self.mrea_cursor.insert_after(iter); } } - diff --git a/src/patches.rs b/src/patches.rs index 74074479..d9bea792 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -577,9 +577,9 @@ fn patch_remove_blast_shield<'r>( fn this_near_that(this: [f32;3], that: [f32;3]) -> bool { - f32::abs(this[0] - that[0]) < 3.0 && - f32::abs(this[1] - that[1]) < 3.0 && - f32::abs(this[2] - that[2]) < 3.0 + f32::abs(this[0] - that[0]) < 1.0 && + f32::abs(this[1] - that[1]) < 1.0 && + f32::abs(this[2] - that[2]) < 1.0 } fn patch_door<'r>( @@ -697,6 +697,11 @@ fn patch_door<'r>( let mut blast_shield_layer_idx: usize = 0; if blast_shield_type.is_some() { special_function_id = area.new_object_id_from_layer_id(0); + + /* Add a new layer to this room to put all the blast shield objects onto */ + area.add_layer(b"Custom Shield Layer\0".as_cstr()); + blast_shield_layer_idx = area.layer_flags.layer_count as usize - 1; + sound_id = area.new_object_id_from_layer_id(blast_shield_layer_idx); streamed_audio_id = area.new_object_id_from_layer_id(blast_shield_layer_idx); shaker_id = area.new_object_id_from_layer_id(blast_shield_layer_idx); @@ -708,10 +713,6 @@ fn patch_door<'r>( auto_open_relay_id = area.new_object_id_from_layer_id(blast_shield_layer_idx); dt_id = area.new_object_id_from_layer_id(blast_shield_layer_idx); poi_id = area.new_object_id_from_layer_id(blast_shield_layer_idx); - - /* Add a new layer to this room to put all the blast shield objects onto */ - area.add_layer(b"Custom Shield Layer\0".as_cstr()); - blast_shield_layer_idx = area.layer_flags.layer_count as usize - 1; } if door_type_after_open.is_some() { From 80257148dca6a2396c27a91d79a7aa74ae3b9dbd Mon Sep 17 00:00:00 2001 From: toasterparty Date: Tue, 26 Mar 2024 15:46:03 -0700 Subject: [PATCH 05/13] fix layer count edge case --- src/patches.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/patches.rs b/src/patches.rs index d9bea792..a7fd1a10 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -7327,7 +7327,6 @@ fn patch_set_layers<'r> -> Result<(), String> { let mrea_id = area.mlvl_area.mrea.to_u32().clone(); - let layer_count = area.layer_flags.layer_count; // add more layers if needed let max = { @@ -7346,7 +7345,7 @@ fn patch_set_layers<'r> for (layer_id, enabled) in layers.iter() { let layer_id = layer_id.clone(); - if layer_id >= layer_count { + if layer_id >= area.layer_flags.layer_count { panic!("Unexpected layer #{} in room 0x{:X}", layer_id, mrea_id); } From 3999e6f190c6a01a5f581ce9212aeb6dac23c273 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Wed, 27 Mar 2024 12:40:23 -0700 Subject: [PATCH 06/13] Fix missing dependencies in end cinema --- src/bin/resource_tracing.rs | 19 +++ src/custom_assets.rs | 1 + src/patches.rs | 19 +++ src/pickup_meta.rs.in | 264 ++++++++++++++++++++++++++++++++++++ 4 files changed, 303 insertions(+) diff --git a/src/bin/resource_tracing.rs b/src/bin/resource_tracing.rs index e0018f4d..9575a42b 100644 --- a/src/bin/resource_tracing.rs +++ b/src/bin/resource_tracing.rs @@ -1520,6 +1520,25 @@ fn main() } let mut deps: Vec<_> = pickup_table[&pm].deps.iter().collect(); + + let res = ResourceKey::new(0x29782CA6, FourCC::from_bytes(b"TXTR")); + deps.push(&res); + + let res = ResourceKey::new(0xA0DA476B, FourCC::from_bytes(b"PART")); + deps.push(&res); + + let res = ResourceKey::new(0x5E027EA1, FourCC::from_bytes(b"TXTR")); + deps.push(&res); + + let res = ResourceKey::new(0x79B5BD15, FourCC::from_bytes(b"TXTR")); + deps.push(&res); + + let res = ResourceKey::new(0xE224FF03, FourCC::from_bytes(b"TXTR")); + deps.push(&res); + + let res = ResourceKey::new(0x57fe7e67, FourCC::from_bytes(b"AGSC")); + deps.push(&res); + deps.sort(); println!(" PickupModel::{:?} => {{", pm); println!(" const DATA: &[(u32, FourCC)] = &["); diff --git a/src/custom_assets.rs b/src/custom_assets.rs index 2af904a7..2fad53c6 100644 --- a/src/custom_assets.rs +++ b/src/custom_assets.rs @@ -556,6 +556,7 @@ pub fn custom_assets<'r>( Vec::new(), Vec::new(), Vec::new(), + Vec::new(), ]; /* Mapping of strings and their corresponding scan_id. Use this to avoid diff --git a/src/patches.rs b/src/patches.rs index a7fd1a10..b342ea90 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -16839,6 +16839,25 @@ fn build_and_run_patches<'r>(gc_disc: &mut structs::GcDisc<'r>, config: &PatchCo ), ); + patcher.add_resource_patch( + resource_info!("!EndCinema_Master.SAVW").into(), + move |res| patch_add_scans_to_savw( + res, + &savw_scans_to_add, + &savw_scan_logbook_category, + &savw_to_remove_from_logbook, + ), + ); + patcher.add_resource_patch( + resource_info!("!EndCinema_Master.SAVW").into(), + move |res| patch_add_scans_to_savw( + res, + &local_savw_scans_to_add[World::EndCinema as usize], + &savw_scan_logbook_category, + &savw_to_remove_from_logbook, + ), + ); + patcher.add_scly_patch( (starting_room.pak_name.as_bytes(), starting_room.mrea), move |ps, area| patch_starting_pickups( diff --git a/src/pickup_meta.rs.in b/src/pickup_meta.rs.in index 42a68435..cabc8353 100644 --- a/src/pickup_meta.rs.in +++ b/src/pickup_meta.rs.in @@ -10371,18 +10371,24 @@ impl PickupModel PickupModel::Missile => { const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x29CFC780, FourCC::from_bytes(b"TXTR")), (0x2D7E6590, FourCC::from_bytes(b"CMDL")), (0x4651CA46, FourCC::from_bytes(b"CSKR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x5E2F550E, FourCC::from_bytes(b"ANIM")), (0x6298442F, FourCC::from_bytes(b"EVNT")), (0x72BABF19, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x8438F539, FourCC::from_bytes(b"PART")), (0x99BA9BFA, FourCC::from_bytes(b"STRG")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA9B8E446, FourCC::from_bytes(b"ANCS")), (0xBA1EB6DD, FourCC::from_bytes(b"SCAN")), (0xC6D1DD10, FourCC::from_bytes(b"PART")), (0xD3219C7F, FourCC::from_bytes(b"TXTR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xF8333189, FourCC::from_bytes(b"CINF")), ]; DATA @@ -10391,13 +10397,19 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x26D1AF8C, FourCC::from_bytes(b"SCAN")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2ACC1D76, FourCC::from_bytes(b"ANIM")), (0x3C325E69, FourCC::from_bytes(b"EVNT")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x86908399, FourCC::from_bytes(b"CMDL")), (0x9DA8053E, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA9728E25, FourCC::from_bytes(b"TXTR")), (0xC71E7706, FourCC::from_bytes(b"TXTR")), (0xC7E861A6, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE95E2914, FourCC::from_bytes(b"STRG")), (0xECD68B2F, FourCC::from_bytes(b"PART")), (0xEDBF2C4F, FourCC::from_bytes(b"CSKR")), @@ -10410,13 +10422,19 @@ impl PickupModel (0x0AF51680, FourCC::from_bytes(b"CSKR")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x129FDDC5, FourCC::from_bytes(b"ANIM")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x35FFA9A8, FourCC::from_bytes(b"CINF")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), (0x5A390DBB, FourCC::from_bytes(b"TXTR")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x61DAB956, FourCC::from_bytes(b"CMDL")), (0x6536B232, FourCC::from_bytes(b"TXTR")), (0x6E62EF9F, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x9F0C908A, FourCC::from_bytes(b"ANCS")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xC4AD9154, FourCC::from_bytes(b"TXTR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10426,13 +10444,19 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x129FDDC5, FourCC::from_bytes(b"ANIM")), (0x1D588B22, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x35FFA9A8, FourCC::from_bytes(b"CINF")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), (0x5A390DBB, FourCC::from_bytes(b"TXTR")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6536B232, FourCC::from_bytes(b"TXTR")), (0x6E62EF9F, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xC4AD9154, FourCC::from_bytes(b"TXTR")), (0xDEAF000B, FourCC::from_bytes(b"CMDL")), (0xDEAF000C, FourCC::from_bytes(b"ANCS")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10441,13 +10465,19 @@ impl PickupModel (0x0AF51680, FourCC::from_bytes(b"CSKR")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x129FDDC5, FourCC::from_bytes(b"ANIM")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x35FFA9A8, FourCC::from_bytes(b"CINF")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), (0x5A390DBB, FourCC::from_bytes(b"TXTR")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6536B232, FourCC::from_bytes(b"TXTR")), (0x6E62EF9F, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xC4AD9154, FourCC::from_bytes(b"TXTR")), (0xDEAF0007, FourCC::from_bytes(b"CMDL")), (0xDEAF0008, FourCC::from_bytes(b"ANCS")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFC095F6C, FourCC::from_bytes(b"TXTR")), ]; DATA @@ -10457,14 +10487,20 @@ impl PickupModel (0x0AF51680, FourCC::from_bytes(b"CSKR")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x129FDDC5, FourCC::from_bytes(b"ANIM")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x35FFA9A8, FourCC::from_bytes(b"CINF")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), (0x5A390DBB, FourCC::from_bytes(b"TXTR")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6536B232, FourCC::from_bytes(b"TXTR")), (0x6E62EF9F, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBE4CD99D, FourCC::from_bytes(b"TXTR")), (0xC4AD9154, FourCC::from_bytes(b"TXTR")), (0xDEAF0009, FourCC::from_bytes(b"CMDL")), (0xDEAF000A, FourCC::from_bytes(b"ANCS")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10474,15 +10510,21 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x1012A90C, FourCC::from_bytes(b"TXTR")), (0x1544D478, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x404B452B, FourCC::from_bytes(b"EVNT")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x8F38E8B8, FourCC::from_bytes(b"ANIM")), (0x92C600F3, FourCC::from_bytes(b"STRG")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA3E787B7, FourCC::from_bytes(b"ANCS")), (0xA4A43BEF, FourCC::from_bytes(b"TXTR")), (0xA6B6F3C0, FourCC::from_bytes(b"CSKR")), (0xA6BC431F, FourCC::from_bytes(b"SCAN")), (0xCAE3A983, FourCC::from_bytes(b"CINF")), (0xCD995C16, FourCC::from_bytes(b"CMDL")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10492,14 +10534,20 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x1544D478, FourCC::from_bytes(b"TXTR")), (0x27A97006, FourCC::from_bytes(b"ANCS")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x394D3877, FourCC::from_bytes(b"ANIM")), (0x3D672B4F, FourCC::from_bytes(b"SCAN")), (0x454FB170, FourCC::from_bytes(b"TXTR")), (0x4B26EFDA, FourCC::from_bytes(b"EVNT")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x72E23E75, FourCC::from_bytes(b"STRG")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x95946E41, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA95D06BC, FourCC::from_bytes(b"TXTR")), (0xAF9DEFBE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFEBBC197, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -10508,14 +10556,20 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x1544D478, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x394D3877, FourCC::from_bytes(b"ANIM")), (0x454FB170, FourCC::from_bytes(b"TXTR")), (0x4B26EFDA, FourCC::from_bytes(b"EVNT")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAF9DEFBE, FourCC::from_bytes(b"CINF")), (0xDEAF0000, FourCC::from_bytes(b"TXTR")), (0xDEAF0001, FourCC::from_bytes(b"TXTR")), (0xDEAF0002, FourCC::from_bytes(b"CMDL")), (0xDEAF0003, FourCC::from_bytes(b"ANCS")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFEBBC197, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -10528,14 +10582,20 @@ impl PickupModel (0x167182D9, FourCC::from_bytes(b"STRG")), (0x24AB3B7D, FourCC::from_bytes(b"SCAN")), (0x2907FC4A, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2D0FD5C9, FourCC::from_bytes(b"ANCS")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x5F907842, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x85ACAA1D, FourCC::from_bytes(b"PART")), (0x8CD437EB, FourCC::from_bytes(b"TXTR")), (0x8E86EF6B, FourCC::from_bytes(b"ANIM")), (0x903E8AC5, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xB402D72C, FourCC::from_bytes(b"PART")), (0xBC16DE4A, FourCC::from_bytes(b"TXTR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFB112513, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -10546,17 +10606,23 @@ impl PickupModel (0x0B5631D5, FourCC::from_bytes(b"TXTR")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x2907FC4A, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2D0FD5C9, FourCC::from_bytes(b"ANCS")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x5F907842, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7CC60BE4, FourCC::from_bytes(b"SCAN")), (0x85ACAA1D, FourCC::from_bytes(b"PART")), (0x8CD437EB, FourCC::from_bytes(b"TXTR")), (0x8E86EF6B, FourCC::from_bytes(b"ANIM")), (0x903E8AC5, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xB402D72C, FourCC::from_bytes(b"PART")), (0xBC16DE4A, FourCC::from_bytes(b"TXTR")), (0xCC15A04B, FourCC::from_bytes(b"STRG")), (0xDCEC3E77, FourCC::from_bytes(b"FRME")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFB112513, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -10567,20 +10633,26 @@ impl PickupModel (0x052E7879, FourCC::from_bytes(b"CINF")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x1544D478, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2D0FD5C9, FourCC::from_bytes(b"ANCS")), (0x2EE6F56F, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), (0x5936040B, FourCC::from_bytes(b"SCAN")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x5F907842, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x79D95DEC, FourCC::from_bytes(b"CMDL")), (0x7A755049, FourCC::from_bytes(b"TXTR")), (0x85ACAA1D, FourCC::from_bytes(b"PART")), (0x8E86EF6B, FourCC::from_bytes(b"ANIM")), (0x9024CB39, FourCC::from_bytes(b"TXTR")), (0x97C01F3F, FourCC::from_bytes(b"CSKR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA6A53C6B, FourCC::from_bytes(b"STRG")), (0xA93E01C8, FourCC::from_bytes(b"TXTR")), (0xAD3748D3, FourCC::from_bytes(b"TXTR")), (0xB402D72C, FourCC::from_bytes(b"PART")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFCEFB0E9, FourCC::from_bytes(b"CMDL")), ]; DATA @@ -10590,13 +10662,19 @@ impl PickupModel (0x003B3ACB, FourCC::from_bytes(b"CINF")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x236BD87E, FourCC::from_bytes(b"STRG")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x3886541A, FourCC::from_bytes(b"EVNT")), (0x45E07BF0, FourCC::from_bytes(b"ANIM")), (0x57C7107D, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xB5544D27, FourCC::from_bytes(b"CMDL")), (0xB8104083, FourCC::from_bytes(b"SCAN")), (0xDA110E43, FourCC::from_bytes(b"ANCS")), (0xDE7BE2F1, FourCC::from_bytes(b"CSKR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE580D665, FourCC::from_bytes(b"TXTR")), ]; DATA @@ -10608,14 +10686,20 @@ impl PickupModel (0x1A14D35C, FourCC::from_bytes(b"TXTR")), (0x227D7166, FourCC::from_bytes(b"CMDL")), (0x25F83BA2, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x406D5277, FourCC::from_bytes(b"STRG")), (0x41905B6C, FourCC::from_bytes(b"SCAN")), (0x4952DEB0, FourCC::from_bytes(b"CSKR")), (0x57C7107D, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x846318C4, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAFAF685B, FourCC::from_bytes(b"EVNT")), (0xBE05B2FB, FourCC::from_bytes(b"ANIM")), (0xC3F66606, FourCC::from_bytes(b"TXTR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE580D665, FourCC::from_bytes(b"TXTR")), (0xFBDEF3C0, FourCC::from_bytes(b"CINF")), ]; @@ -10625,16 +10709,22 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x16AF35A5, FourCC::from_bytes(b"SCAN")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x350B1882, FourCC::from_bytes(b"STRG")), (0x57C7107D, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), (0x58E0A485, FourCC::from_bytes(b"EVNT")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x8EDBB0E2, FourCC::from_bytes(b"TXTR")), (0x939E316F, FourCC::from_bytes(b"ANIM")), (0x9805E2E8, FourCC::from_bytes(b"PART")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBE1D126E, FourCC::from_bytes(b"CSKR")), (0xBEC320DD, FourCC::from_bytes(b"PART")), (0xD532BDB8, FourCC::from_bytes(b"CMDL")), (0xD6457054, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xF19131AD, FourCC::from_bytes(b"ANCS")), ]; DATA @@ -10644,13 +10734,19 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x15EB6BD3, FourCC::from_bytes(b"TXTR")), (0x21A5ABB9, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2CFCC30D, FourCC::from_bytes(b"ANIM")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x79A693CE, FourCC::from_bytes(b"CINF")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x9DC85413, FourCC::from_bytes(b"STRG")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAE483B46, FourCC::from_bytes(b"SCAN")), (0xAE688BD7, FourCC::from_bytes(b"CSKR")), (0xB47048B5, FourCC::from_bytes(b"TXTR")), (0xC5472401, FourCC::from_bytes(b"CMDL")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE3CBC3F3, FourCC::from_bytes(b"ANCS")), (0xE540AB36, FourCC::from_bytes(b"TXTR")), (0xFBE3C603, FourCC::from_bytes(b"EVNT")), @@ -10661,15 +10757,21 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x17E4C9EC, FourCC::from_bytes(b"ANIM")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2CD50CE7, FourCC::from_bytes(b"EVNT")), (0x523F88D7, FourCC::from_bytes(b"CINF")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x79094CAC, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x9727B7AC, FourCC::from_bytes(b"TXTR")), (0x999E81FE, FourCC::from_bytes(b"ANCS")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA10715DA, FourCC::from_bytes(b"CMDL")), (0xCA28BA0C, FourCC::from_bytes(b"CSKR")), (0xD8926FCA, FourCC::from_bytes(b"TXTR")), (0xDCEC3E77, FourCC::from_bytes(b"FRME")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xF5D79A23, FourCC::from_bytes(b"SCAN")), (0xFC883F7C, FourCC::from_bytes(b"STRG")), ]; @@ -10679,15 +10781,21 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x01A25A46, FourCC::from_bytes(b"SCAN")), (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x3955EB0B, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x75B438F4, FourCC::from_bytes(b"EVNT")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x80368CAB, FourCC::from_bytes(b"CINF")), (0x8EDBB0E2, FourCC::from_bytes(b"TXTR")), (0x93498E1F, FourCC::from_bytes(b"CSKR")), (0x98CEC86D, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xC5B5ED4D, FourCC::from_bytes(b"ANCS")), (0xC5EDCD90, FourCC::from_bytes(b"ANIM")), (0xD56C2A41, FourCC::from_bytes(b"STRG")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xF86621C9, FourCC::from_bytes(b"CMDL")), ]; DATA @@ -10696,15 +10804,21 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x08E84FCD, FourCC::from_bytes(b"EVNT")), (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x3494C49B, FourCC::from_bytes(b"TXTR")), (0x495B7C35, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7C04E388, FourCC::from_bytes(b"ANCS")), (0x853A56F0, FourCC::from_bytes(b"CMDL")), (0x9E04451F, FourCC::from_bytes(b"ANIM")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xB59EB7E6, FourCC::from_bytes(b"TXTR")), (0xB93E801A, FourCC::from_bytes(b"SCAN")), (0xC35CF119, FourCC::from_bytes(b"TXTR")), (0xDBDF0424, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xEE15F926, FourCC::from_bytes(b"CSKR")), (0xF7333676, FourCC::from_bytes(b"STRG")), ]; @@ -10716,14 +10830,20 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x14B4448C, FourCC::from_bytes(b"TXTR")), (0x1F8C3030, FourCC::from_bytes(b"CSKR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6056B36F, FourCC::from_bytes(b"STRG")), (0x74A39FE6, FourCC::from_bytes(b"CMDL")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7C04E388, FourCC::from_bytes(b"ANCS")), (0x9E04451F, FourCC::from_bytes(b"ANIM")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA773BBFF, FourCC::from_bytes(b"TXTR")), (0xB4AFD8E6, FourCC::from_bytes(b"TXTR")), (0xB59EB7E6, FourCC::from_bytes(b"TXTR")), (0xDBDF0424, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE904020F, FourCC::from_bytes(b"SCAN")), ]; DATA @@ -10732,15 +10852,21 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x08E84FCD, FourCC::from_bytes(b"EVNT")), (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x416869E2, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7C04E388, FourCC::from_bytes(b"ANCS")), (0x85BA7ACB, FourCC::from_bytes(b"CMDL")), (0x8797E964, FourCC::from_bytes(b"TXTR")), (0x9E04451F, FourCC::from_bytes(b"ANIM")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA258EB79, FourCC::from_bytes(b"STRG")), (0xA3A5E262, FourCC::from_bytes(b"SCAN")), (0xB59EB7E6, FourCC::from_bytes(b"TXTR")), (0xDBDF0424, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xEE95D51D, FourCC::from_bytes(b"CSKR")), (0xFF187234, FourCC::from_bytes(b"TXTR")), ]; @@ -10752,15 +10878,21 @@ impl PickupModel (0x0A515BBB, FourCC::from_bytes(b"TXTR")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x23B58EFB, FourCC::from_bytes(b"SCAN")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x3494C49B, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x5EDDD583, FourCC::from_bytes(b"TXTR")), (0x64C92BBB, FourCC::from_bytes(b"STRG")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7C04E388, FourCC::from_bytes(b"ANCS")), (0x9E04451F, FourCC::from_bytes(b"ANIM")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAE6410BE, FourCC::from_bytes(b"CSKR")), (0xB59EB7E6, FourCC::from_bytes(b"TXTR")), (0xC54BBF68, FourCC::from_bytes(b"CMDL")), (0xDBDF0424, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10768,7 +10900,12 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x08E84FCD, FourCC::from_bytes(b"EVNT")), (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x9E04451F, FourCC::from_bytes(b"ANIM")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAE6410BE, FourCC::from_bytes(b"CSKR")), (0xB59EB7E6, FourCC::from_bytes(b"TXTR")), (0xDBDF0424, FourCC::from_bytes(b"CINF")), @@ -10777,6 +10914,7 @@ impl PickupModel (0xDEAF001A, FourCC::from_bytes(b"TXTR")), (0xDEAF001B, FourCC::from_bytes(b"TXTR")), (0xDEAF001C, FourCC::from_bytes(b"TXTR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10787,15 +10925,21 @@ impl PickupModel (0x0DB01DA5, FourCC::from_bytes(b"SCAN")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x13C89576, FourCC::from_bytes(b"CINF")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x33000DC9, FourCC::from_bytes(b"PART")), (0x5613D44D, FourCC::from_bytes(b"ANIM")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6BB8DE6F, FourCC::from_bytes(b"CSKR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x809FB418, FourCC::from_bytes(b"TXTR")), (0x8D456884, FourCC::from_bytes(b"EVNT")), (0x9315FD66, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAECF2932, FourCC::from_bytes(b"TXTR")), (0xD4107F49, FourCC::from_bytes(b"STRG")), (0xDCEC3E77, FourCC::from_bytes(b"FRME")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10803,16 +10947,22 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x09884086, FourCC::from_bytes(b"PART")), (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x47B6B93D, FourCC::from_bytes(b"SCAN")), (0x4F15E331, FourCC::from_bytes(b"STRG")), (0x52A3B1A4, FourCC::from_bytes(b"ANCS")), (0x57F7A883, FourCC::from_bytes(b"EVNT")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x846B0326, FourCC::from_bytes(b"ANIM")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xB10A1E68, FourCC::from_bytes(b"CSKR")), (0xC1B0421D, FourCC::from_bytes(b"CINF")), (0xC8A4F91F, FourCC::from_bytes(b"TXTR")), (0xD6ACCAC3, FourCC::from_bytes(b"TXTR")), (0xDA25B1BE, FourCC::from_bytes(b"CMDL")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, @@ -10820,16 +10970,22 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x030AD58A, FourCC::from_bytes(b"PART")), (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2A400857, FourCC::from_bytes(b"EVNT")), (0x345566A9, FourCC::from_bytes(b"ANIM")), (0x347D1C1E, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6397CC1B, FourCC::from_bytes(b"ANCS")), (0x718E2792, FourCC::from_bytes(b"CINF")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xA3837853, FourCC::from_bytes(b"TXTR")), (0xA792116A, FourCC::from_bytes(b"CMDL")), (0xA9ADE0F9, FourCC::from_bytes(b"TXTR")), (0xCCBDBEBC, FourCC::from_bytes(b"CSKR")), (0xDD4DD38A, FourCC::from_bytes(b"STRG")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE584FD20, FourCC::from_bytes(b"PART")), (0xF576EC35, FourCC::from_bytes(b"SCAN")), ]; @@ -10839,15 +10995,21 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), (0x8B48B3A3, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), (0xE0671C75, FourCC::from_bytes(b"CSKR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), ]; @@ -10858,14 +11020,20 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x10EDFFCC, FourCC::from_bytes(b"CMDL")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x7BC2501A, FourCC::from_bytes(b"CSKR")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), ]; @@ -10876,14 +11044,20 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x12174A4C, FourCC::from_bytes(b"CMDL")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x7938E59A, FourCC::from_bytes(b"CSKR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), ]; @@ -10893,14 +11067,20 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), (0x8E42FE22, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE56D51F4, FourCC::from_bytes(b"CSKR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), @@ -10912,14 +11092,20 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x0F5AB995, FourCC::from_bytes(b"CSKR")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x64751643, FourCC::from_bytes(b"CMDL")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), ]; @@ -10929,14 +11115,20 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), (0x89B20623, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE29DA9F5, FourCC::from_bytes(b"CSKR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), @@ -10947,14 +11139,20 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), (0x884E88DC, FourCC::from_bytes(b"CMDL")), (0x93754EA4, FourCC::from_bytes(b"SCAN")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xB54C5C4A, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE361270A, FourCC::from_bytes(b"CSKR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), @@ -10966,14 +11164,20 @@ impl PickupModel (0x0C5C82EA, FourCC::from_bytes(b"CSKR")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x67732D3C, FourCC::from_bytes(b"CMDL")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), ]; @@ -10983,14 +11187,20 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), (0x97F9CE85, FourCC::from_bytes(b"CSKR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), (0xFCD66153, FourCC::from_bytes(b"CMDL")), @@ -11001,14 +11211,20 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), (0x95037B05, FourCC::from_bytes(b"CSKR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), (0xFE2CD4D3, FourCC::from_bytes(b"CMDL")), @@ -11020,14 +11236,20 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x15E7B24D, FourCC::from_bytes(b"CMDL")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x7EC81D9B, FourCC::from_bytes(b"CSKR")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), ]; @@ -11037,14 +11259,20 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x226368A0, FourCC::from_bytes(b"EVNT")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x7A08BCE4, FourCC::from_bytes(b"ANIM")), (0x7A6A5389, FourCC::from_bytes(b"SCAN")), (0x83210FCE, FourCC::from_bytes(b"CMDL")), (0x94FFF5FA, FourCC::from_bytes(b"CSKR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBB268AE6, FourCC::from_bytes(b"STRG")), (0xBB4814A2, FourCC::from_bytes(b"TXTR")), (0xBB5BF8F4, FourCC::from_bytes(b"TXTR")), (0xC26B16AE, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE80EA018, FourCC::from_bytes(b"CSKR")), (0xFAA9C708, FourCC::from_bytes(b"ANCS")), (0xFFD05A2C, FourCC::from_bytes(b"CMDL")), @@ -11055,10 +11283,15 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x1544D478, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2F976E86, FourCC::from_bytes(b"CMDL")), (0x394D3877, FourCC::from_bytes(b"ANIM")), (0x454FB170, FourCC::from_bytes(b"TXTR")), (0x4B26EFDA, FourCC::from_bytes(b"EVNT")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAF9DEFBE, FourCC::from_bytes(b"CINF")), (0xBE4CD99D, FourCC::from_bytes(b"TXTR")), (0xDEAF0000, FourCC::from_bytes(b"TXTR")), @@ -11067,6 +11300,7 @@ impl PickupModel (0xDEAF0004, FourCC::from_bytes(b"TXTR")), (0xDEAF0005, FourCC::from_bytes(b"CMDL")), (0xDEAF0006, FourCC::from_bytes(b"ANCS")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFEBBC197, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -11075,10 +11309,15 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x1544D478, FourCC::from_bytes(b"TXTR")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x394D3877, FourCC::from_bytes(b"ANIM")), (0x454FB170, FourCC::from_bytes(b"TXTR")), (0x4B26EFDA, FourCC::from_bytes(b"EVNT")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6E3D2E18, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xAF9DEFBE, FourCC::from_bytes(b"CINF")), (0xDEAF0000, FourCC::from_bytes(b"TXTR")), (0xDEAF0001, FourCC::from_bytes(b"TXTR")), @@ -11087,6 +11326,7 @@ impl PickupModel (0xDEAF0015, FourCC::from_bytes(b"ANCS")), (0xDEAF0016, FourCC::from_bytes(b"TXTR")), (0xDEAF0017, FourCC::from_bytes(b"TXTR")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xFEBBC197, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -11096,15 +11336,21 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x1C8E4445, FourCC::from_bytes(b"CSKR")), (0x22622977, FourCC::from_bytes(b"CINF")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x34CA9AB4, FourCC::from_bytes(b"SCAN")), (0x353793AF, FourCC::from_bytes(b"STRG")), (0x363A21D1, FourCC::from_bytes(b"TXTR")), (0x4AFD819B, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x67B9684C, FourCC::from_bytes(b"ANIM")), (0x77A1EB93, FourCC::from_bytes(b"CMDL")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x8CD437EB, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBC16DE4A, FourCC::from_bytes(b"TXTR")), (0xDEEE73AB, FourCC::from_bytes(b"ANCS")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xEB66A2FD, FourCC::from_bytes(b"TXTR")), (0xFA73F2AE, FourCC::from_bytes(b"EVNT")), ]; @@ -11115,33 +11361,45 @@ impl PickupModel (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x21A5ABB9, FourCC::from_bytes(b"PART")), (0x274D21BE, FourCC::from_bytes(b"CMDL")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x2EB394AF, FourCC::from_bytes(b"SCAN")), (0x363A21D1, FourCC::from_bytes(b"TXTR")), (0x4C628E68, FourCC::from_bytes(b"CSKR")), (0x4F1B3A49, FourCC::from_bytes(b"EVNT")), (0x511062EB, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x90C6A0EE, FourCC::from_bytes(b"ANCS")), (0x97A102B7, FourCC::from_bytes(b"TXTR")), (0x9BC71C1B, FourCC::from_bytes(b"STRG")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xB34CE4BB, FourCC::from_bytes(b"TXTR")), (0xCBD93807, FourCC::from_bytes(b"CINF")), (0xDFBEBEF1, FourCC::from_bytes(b"ANIM")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), ]; DATA }, PickupModel::PowerBombRefill => { const DATA: &[(u32, FourCC)] = &[ (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x57C7107D, FourCC::from_bytes(b"TXTR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), (0x58E0A485, FourCC::from_bytes(b"EVNT")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), (0x6CD2FE2E, FourCC::from_bytes(b"SCAN")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), (0x8EDBB0E2, FourCC::from_bytes(b"TXTR")), (0x939E316F, FourCC::from_bytes(b"ANIM")), (0x9805E2E8, FourCC::from_bytes(b"PART")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xBE1D126E, FourCC::from_bytes(b"CSKR")), (0xBEC320DD, FourCC::from_bytes(b"PART")), (0xD532BDB8, FourCC::from_bytes(b"CMDL")), (0xD6457054, FourCC::from_bytes(b"CINF")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xE5804F4E, FourCC::from_bytes(b"STRG")), (0xF19131AD, FourCC::from_bytes(b"ANCS")), ]; @@ -11151,7 +11409,12 @@ impl PickupModel const DATA: &[(u32, FourCC)] = &[ (0x098BE8D8, FourCC::from_bytes(b"PART")), (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x29782CA6, FourCC::from_bytes(b"TXTR")), (0x4651CA46, FourCC::from_bytes(b"CSKR")), + (0x57FE7E67, FourCC::from_bytes(b"AGSC")), + (0x5E027EA1, FourCC::from_bytes(b"TXTR")), + (0x79B5BD15, FourCC::from_bytes(b"TXTR")), + (0xA0DA476B, FourCC::from_bytes(b"PART")), (0xDEAF000D, FourCC::from_bytes(b"TXTR")), (0xDEAF000E, FourCC::from_bytes(b"TXTR")), (0xDEAF000F, FourCC::from_bytes(b"TXTR")), @@ -11159,6 +11422,7 @@ impl PickupModel (0xDEAF0011, FourCC::from_bytes(b"ANCS")), (0xDEAF0012, FourCC::from_bytes(b"EVNT")), (0xDEAF0013, FourCC::from_bytes(b"ANIM")), + (0xE224FF03, FourCC::from_bytes(b"TXTR")), (0xF8333189, FourCC::from_bytes(b"CINF")), ]; DATA From f9cfe85f84aa517bb29bd51e785e0fe76804f2b8 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Wed, 27 Mar 2024 16:02:20 -0700 Subject: [PATCH 07/13] fix unable to patch strg 1979224398 --- src/patches.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/patches.rs b/src/patches.rs index b342ea90..ba1130a6 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -16587,10 +16587,6 @@ fn build_and_run_patches<'r>(gc_disc: &mut structs::GcDisc<'r>, config: &PatchCo move |res| patch_artifact_totem_scan_strg(res, &strg_text, config.version), ); } - patcher.add_scly_patch( - resource_info!("07_stonehenge.MREA").into(), - |_ps, area| patch_tournament_winners(_ps, area, game_resources) - ); } patcher.add_resource_patch( resource_info!("STRG_Main.STRG").into(),// 0x0552a456 @@ -17355,6 +17351,13 @@ fn build_and_run_patches<'r>(gc_disc: &mut structs::GcDisc<'r>, config: &PatchCo } } + if !config.force_vanilla_layout && !strgs.contains_key("1979224398") { + patcher.add_scly_patch( + resource_info!("07_stonehenge.MREA").into(), + |_ps, area| patch_tournament_winners(_ps, area, game_resources) + ); + } + for (strg, replacement_strings) in strgs { let id = match strg.parse::() { Ok(n) => n, From f9cc25d02ed3152a2ca73042dab22831f044ad20 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Sat, 30 Mar 2024 09:41:02 -0700 Subject: [PATCH 08/13] fix doortypeafteropen --- src/patches.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/patches.rs b/src/patches.rs index ba1130a6..f8ee2f85 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -577,9 +577,9 @@ fn patch_remove_blast_shield<'r>( fn this_near_that(this: [f32;3], that: [f32;3]) -> bool { - f32::abs(this[0] - that[0]) < 1.0 && - f32::abs(this[1] - that[1]) < 1.0 && - f32::abs(this[2] - that[2]) < 1.0 + f32::abs(this[0] - that[0]) < 2.7 && + f32::abs(this[1] - that[1]) < 2.7 && + f32::abs(this[2] - that[2]) < 2.7 } fn patch_door<'r>( @@ -620,6 +620,9 @@ fn patch_door<'r>( // TODO: optimize // && door_type != &door_type_after_open { + if mrea_id == 0xFB54A0CB { + println!("{:?} -> {:?}", door_type, door_type_after_open); + } Some(door_type_after_open) } else { None From c94584e5f05f0113cad5511706d5be58413306f9 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Sat, 30 Mar 2024 09:43:20 -0700 Subject: [PATCH 09/13] remove debug comment --- src/patches.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/patches.rs b/src/patches.rs index f8ee2f85..4f81bfd5 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -620,9 +620,6 @@ fn patch_door<'r>( // TODO: optimize // && door_type != &door_type_after_open { - if mrea_id == 0xFB54A0CB { - println!("{:?} -> {:?}", door_type, door_type_after_open); - } Some(door_type_after_open) } else { None From 8b87b35c441c23317c93ec88ba6b8ef5810d29b1 Mon Sep 17 00:00:00 2001 From: Miepee <38186597+Miepee@users.noreply.github.com> Date: Fri, 5 Apr 2024 00:36:50 +0200 Subject: [PATCH 10/13] Change CGC date to 2023 --- src/custom_assets.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/custom_assets.rs b/src/custom_assets.rs index 2fad53c6..cd4e9074 100644 --- a/src/custom_assets.rs +++ b/src/custom_assets.rs @@ -651,7 +651,7 @@ pub fn custom_assets<'r>( vec![ "Chozo script translated.\0".to_string(), "Racing\0".to_string(), - "As we have done for millennia, we Chozo work constantly on our speed. Our fastest are our sentinels; They are, and have always been, repositories for our most precious secrets and strongest powers.\n\n2024 (CGC) - TheGingerChris + BajaBlood\n2023 - Cosmonawt\n2022 (CGC) - Cosmo + Cestrion\n2021 - Dinopony\n2020 - Interslice\n2019 - TheWeakestLink64\0".to_string(), + "As we have done for millennia, we Chozo work constantly on our speed. Our fastest are our sentinels; They are, and have always been, repositories for our most precious secrets and strongest powers.\n\n2023 (CGC) - TheGingerChris + BajaBlood\n2023 - Cosmonawt\n2022 (CGC) - Cosmo + Cestrion\n2021 - Dinopony\n2020 - Interslice\n2019 - TheWeakestLink64\0".to_string(), ], 1, 0, From fcd31763d7dae902f48174bb3d8572859eb4d37e Mon Sep 17 00:00:00 2001 From: toasterparty Date: Sun, 7 Apr 2024 21:22:56 -0700 Subject: [PATCH 11/13] tweak wallcrawl fix patch --- src/patches.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/patches.rs b/src/patches.rs index 4f81bfd5..2cb7a4f7 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -12189,14 +12189,16 @@ fn patch_anti_oob<'r>( } if scale[0] > 4.9 { - dock.scale[0] = 2.6; + dock.scale[0] = 2.4; + dock.scale[1] = 1.5; } if scale[1] > 4.9 { - dock.scale[1] = 2.6; + dock.scale[0] = 1.5; + dock.scale[1] = 2.4; } - dock.scale[2] = 2.0; + dock.scale[2] = 1.85; // Center with the door dock.position[2] = dock.position[2] - 0.6; From 7c07488053cd9d23f88dea7912393c3e00ac7185 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Wed, 10 Apr 2024 10:20:05 -0700 Subject: [PATCH 12/13] Don't add new layers when placing respawning items --- src/patches.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/patches.rs b/src/patches.rs index 2cb7a4f7..f0db4842 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -2157,9 +2157,17 @@ fn patch_add_item<'r>( pickup_model_data.actor_params.thermal_cskr = ResId::invalid(); } - let name = CString::new(format!("Randomizer - Pickup ({:?})", pickup_model_data.name)).unwrap(); - area.add_layer(Cow::Owned(name)); - let new_layer_idx = area.layer_flags.layer_count as usize - 1; + let respawn = pickup_config.respawn.unwrap_or(false); + + let new_layer_idx = { + if !respawn { + let name = CString::new(format!("Randomizer - Pickup ({:?})", pickup_model_data.name)).unwrap(); + area.add_layer(Cow::Owned(name)); + area.layer_flags.layer_count as usize - 1 + } else { + 0 + } + }; // Add hudmemo string as dependency to room // let hudmemo_strg: ResId = { @@ -2614,7 +2622,7 @@ fn patch_add_item<'r>( ); } - if !pickup_config.respawn.unwrap_or(false) && new_layer_idx != 0 { + if !respawn && new_layer_idx != 0 { // Create Special Function to disable layer once item is obtained // This is needed because otherwise the item would re-appear every // time the room is loaded From a308024b4063a5e08ed98740ac1e16444ad35b96 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Wed, 10 Apr 2024 10:22:18 -0700 Subject: [PATCH 13/13] optimize starting memo dependencies --- src/patches.rs | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/patches.rs b/src/patches.rs index f0db4842..bfa6d57a 100644 --- a/src/patches.rs +++ b/src/patches.rs @@ -9201,13 +9201,14 @@ fn patch_starting_pickups<'r>( let mut timer_starting_items_popup_id = 0; let mut hud_memo_starting_items_popup_id = 0; let mut special_function_id = 0; + if show_starting_memo { starting_memo_layer_idx = area.layer_flags.layer_count as usize; area.add_layer(b"starting items\0".as_cstr()); timer_starting_items_popup_id = area.new_object_id_from_layer_id(starting_memo_layer_idx); hud_memo_starting_items_popup_id = area.new_object_id_from_layer_id(starting_memo_layer_idx); - special_function_id = area.new_object_id_from_layer_name("Default"); + special_function_id = area.new_object_id_from_layer_id(starting_memo_layer_idx); } let scly = area.mrea().scly_section_mut(); @@ -9271,27 +9272,24 @@ fn patch_starting_pickups<'r>( active: 1, }.into(), }, + structs::SclyObject { + instance_id: special_function_id, + property_data: structs::SpecialFunction::layer_change_fn( + b"hudmemo layer change\0".as_cstr(), + area_internal_id, + starting_memo_layer_idx as u32, + ).into(), + connections: vec![].into(), + }, ] ); - - layers[0].objects.as_mut_vec().push( - structs::SclyObject { - instance_id: special_function_id, - property_data: structs::SpecialFunction::layer_change_fn( - b"hudmemo layer change\0".as_cstr(), - area_internal_id, - starting_memo_layer_idx as u32, - ).into(), - connections: vec![].into(), - } - ); - area.add_dependencies( &game_resources, - 0, + starting_memo_layer_idx, iter::once(custom_asset_ids::STARTING_ITEMS_HUDMEMO_STRG.into()) ); } + Ok(()) }