From 9e0d903eb948bcceddc2ba77d971d95f900d1489 Mon Sep 17 00:00:00 2001 From: toasterparty Date: Sat, 12 Aug 2023 15:05:05 -0700 Subject: [PATCH] power beam WIP --- extra_assets/power_beam.PART | Bin 0 -> 933 bytes extra_assets/power_beam_accent.TXTR | Bin 0 -> 32780 bytes extra_assets/power_beam_capsule.TXTR | Bin 0 -> 32780 bytes extra_assets/power_beam_part.TXTR | Bin 0 -> 43692 bytes src/bin/resource_tracing.rs | 46 ++++++++- src/custom_assets.rs | 104 ++++++++++++++++++- src/pickup_meta.rs | 5 +- src/pickup_meta.rs.in | 147 +++++++++++++++++++-------- 8 files changed, 255 insertions(+), 47 deletions(-) create mode 100644 extra_assets/power_beam.PART create mode 100644 extra_assets/power_beam_accent.TXTR create mode 100644 extra_assets/power_beam_capsule.TXTR create mode 100644 extra_assets/power_beam_part.TXTR diff --git a/extra_assets/power_beam.PART b/extra_assets/power_beam.PART new file mode 100644 index 0000000000000000000000000000000000000000..c3db465c8fddd15b9bfeb0d7e180e7d658c0b893 GIT binary patch literal 933 zcmZvaO=uHA6vrp1=%HZfq1b9|)wY^wY`$!2jrqHu>6+OOcPBN;!9WjE4)p|ua-(M0TE>Rl%!dqV ziAQuf&Gjy%0!Rjs;9%*d*?^+oLQ5A!o?%L2!Ov*NypxJ(tUp?{vU2>zN zRTQeSqx`1pwV;$0H!Q7e1G8wqaT6V9USe}`9$V6_=xiNA=g(1W{cs6gkEYOl`7^ei z2w{6Zf*rj_(6i<&dcNI7@AO;r-TH-{=i0HWA|Nt2hG^S0M1McW?oVH_XKDjtSL4`w zvV{IZ4e`iBB-VdK;`<*YUw0#QFOPKX6!smPz(95ynT{XG{N0Gb*$nnStzziATKbTiH-MRO9C~mY!i6^wM;9OoZIHWikpCTr^5qKD7tfHNn8Wb+I%q70 z!^t8F;qxdg+y{O4UKgF<1=s4L|LTNltjb&En6^JJ6|u;NhX{f->>Y(D(-m82%rhb3 zMr$`oCbd;TcIVa~wOqY^$74k6k9n;5&ysUL9%xn@E$__J*wo?{#2G^JHsf_Yy)Kjj d<1K25Qcv$1H@JXU4&}GXWBsJ681mw>^&j^<3fBMt literal 0 HcmV?d00001 diff --git a/extra_assets/power_beam_accent.TXTR b/extra_assets/power_beam_accent.TXTR new file mode 100644 index 0000000000000000000000000000000000000000..ce1ad3f2ec6b857cea6f6bba4a8af9d49e6b2546 GIT binary patch literal 32780 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 TxfE}C|DNCU{dd2|djJ0ccZpg> literal 0 HcmV?d00001 diff --git a/src/bin/resource_tracing.rs b/src/bin/resource_tracing.rs index cb7bf706..8c24a197 100644 --- a/src/bin/resource_tracing.rs +++ b/src/bin/resource_tracing.rs @@ -899,6 +899,50 @@ fn create_flamethrower(pickup_table: &mut HashMap) }).is_none()); } +fn create_power_beam(pickup_table: &mut HashMap) +{ + let mut bytes = Vec::new(); + { + let mut pickup = Reader::new(&pickup_table[&PickupModel::IceBeam].bytes) + .read::(()).clone(); + pickup.name = Cow::Borrowed(CStr::from_bytes_with_nul(b"Power Beam\0").unwrap()); + pickup.cmdl = custom_asset_ids::POWER_BEAM_PICKUP_CMDL; + pickup.ancs.file_id = custom_asset_ids::POWER_BEAM_PICKUP_ANCS; + pickup.write_to(&mut bytes).unwrap(); + } + + let mut deps: HashSet<_> = pickup_table[&PickupModel::IceBeam].deps.iter() + .filter(|i| ![ + // b"SCAN".into(), + // b"STRG".into(), + // b"CMDL".into(), + // b"ANCS".into(), + // b"PART".into(), + // b"ANIM".into(), + // b"EVNT".into(), + // b"TXTR".into(), + ].contains(&i.fourcc)) + .cloned() + .collect(); + + deps.extend(&[ + ResourceKey::from(custom_asset_ids::POWER_BEAM_PICKUP_CMDL), + ResourceKey::from(custom_asset_ids::POWER_BEAM_PICKUP_ANCS), + ResourceKey::from(custom_asset_ids::POWER_BEAM_PART), + ResourceKey::from(custom_asset_ids::POWER_BEAM_EVNT), + ResourceKey::from(custom_asset_ids::POWER_BEAM_ANIM), + ResourceKey::from(custom_asset_ids::POWER_BEAM_PICKUP_TXTR1), + ResourceKey::from(custom_asset_ids::POWER_BEAM_PICKUP_TXTR2), + ResourceKey::from(custom_asset_ids::POWER_BEAM_PART_TXTR), + ]); + + assert!(pickup_table.insert(PickupModel::PowerBeam, PickupData { + bytes, + deps, + attainment_audio_file_name: b"/audio/jin_itemattain.dsp\0".to_vec(), + }).is_none()); +} + fn create_combat_visor(pickup_table: &mut HashMap) { let mut bytes = Vec::new(); @@ -1362,7 +1406,7 @@ fn main() create_xray_visor(&mut pickup_table); create_combat_visor(&mut pickup_table); create_flamethrower(&mut pickup_table); - // create_power_beam(&mut pickup_table); + create_power_beam(&mut pickup_table); println!("// This file is generated by bin/resource_tracing.rs"); println!(""); diff --git a/src/custom_assets.rs b/src/custom_assets.rs index 15050d04..e7bb47ed 100644 --- a/src/custom_assets.rs +++ b/src/custom_assets.rs @@ -60,6 +60,7 @@ pub mod custom_asset_ids { def_asset_ids! { // Item Assets PHAZON_SUIT_TXTR1: TXTR = 0xDEAF0000, + POWER_BEAM_PART_TXTR: TXTR = 0xDEAF0001, // we cheat and hard-code this in a PART that is loaded as an external asset, do not change PHAZON_SUIT_TXTR2: TXTR, PHAZON_SUIT_CMDL: CMDL, PHAZON_SUIT_ANCS: ANCS, @@ -88,6 +89,13 @@ pub mod custom_asset_ids { FLAMETHROWER_PICKUP_TXTR1: TXTR, FLAMETHROWER_PICKUP_TXTR2: TXTR, FLAMETHROWER_PICKUP_TXTR3: TXTR, + POWER_BEAM_PICKUP_CMDL: CMDL, + POWER_BEAM_PICKUP_ANCS: ANCS, + POWER_BEAM_PICKUP_TXTR1: TXTR, + POWER_BEAM_PICKUP_TXTR2: TXTR, + POWER_BEAM_PART: PART, + POWER_BEAM_ANIM: ANIM, + POWER_BEAM_EVNT: EVNT, // Custom Scans SHORELINES_POI_SCAN: SCAN, @@ -336,7 +344,6 @@ pub mod custom_asset_ids { pub fn custom_asset_filename(resource_info: structs::ResourceInfo) -> String { let base_name = match resource_info.file_id { - // id if custom_asset_ids::PHAZON_SUIT_TXTR1.to_u32() == id => "phazon_suit_txtr1".to_string() , _ => format!("{:X}", resource_info.file_id), }; @@ -417,6 +424,9 @@ fn extern_assets_compile_time<'r>() -> Vec> extern_asset!(FLAMETHROWER_PICKUP_TXTR1 , "flamethrower_vertice_color.TXTR" ), extern_asset!(FLAMETHROWER_PICKUP_TXTR2 , "flamethrower_cap_glow.TXTR" ), extern_asset!(FLAMETHROWER_PICKUP_TXTR3 , "flamethrower_color_body.TXTR" ), + extern_asset!(POWER_BEAM_PICKUP_TXTR1 , "power_beam_capsule.TXTR" ), + extern_asset!(POWER_BEAM_PICKUP_TXTR2 , "power_beam_accent.TXTR" ), + extern_asset!(POWER_BEAM_PART_TXTR , "power_beam_part.TXTR" ), extern_asset!(RANDOVANIA_GAMECUBE0_TXTR , "randovania_gamecube.TXTR" ), extern_asset!(RANDOVANIA_GAMECUBE1_TXTR , "randovania_gamecube_text.TXTR" ), @@ -608,6 +618,7 @@ pub fn custom_assets<'r>( assets.extend_from_slice(&create_shiny_missile_assets(resources)); assets.extend_from_slice(&create_flamethrower_assets(resources)); + assets.extend_from_slice(&create_power_beam_assets(resources)); assets.extend_from_slice(&create_ice_trap_icon_ancs( resources, @@ -1699,6 +1710,97 @@ fn create_flamethrower_assets<'r>( [cmdl, ancs] } +fn create_power_beam_assets<'r>( + resources: &HashMap<(u32, FourCC), structs::Resource<'r>>, +) -> [structs::Resource<'r>; 5] +{ + let cmdl = { + let cmdl = ResourceData::new( + &resources[&resource_info!("Node1_18.CMDL").into()] + ); + let cmdl_bytes = cmdl.decompress().into_owned(); + let mut cmdl = Reader::new(&cmdl_bytes[..]).read::(()); + + cmdl.material_sets.as_mut_vec()[0].texture_ids.as_mut_vec()[0] = custom_asset_ids::POWER_BEAM_PICKUP_TXTR1; + cmdl.material_sets.as_mut_vec()[0].texture_ids.as_mut_vec()[1] = custom_asset_ids::POWER_BEAM_PICKUP_TXTR2; + + let mut new_cmdl_bytes = vec![]; + cmdl.write_to(&mut new_cmdl_bytes).unwrap(); + + build_resource( + custom_asset_ids::POWER_BEAM_PICKUP_CMDL, + structs::ResourceKind::External(new_cmdl_bytes, b"CMDL".into()) + ) + }; + + let ancs = { + let ancs = ResourceData::new( + &resources[&resource_info!("Node1_18.ANCS").into()] + ); + let ancs_bytes = ancs.decompress().into_owned(); + let mut ancs = Reader::new(&ancs_bytes[..]).read::(()); + + ancs.char_set.char_info.as_mut_vec()[0].cmdl = custom_asset_ids::POWER_BEAM_PICKUP_CMDL; + ancs.char_set.char_info.as_mut_vec()[0].particles.part_assets.as_mut_vec()[0] = custom_asset_ids::POWER_BEAM_PART.to_u32(); // 0x9884086 + + match &mut ancs.anim_set.animations.as_mut_vec()[0].meta { + structs::MetaAnimation::Play(play) => { + play.get_mut().anim = custom_asset_ids::POWER_BEAM_ANIM; + } + _ => {panic!("ANIM wasn't PLAY")} + } + + ancs.anim_set.animation_resources.as_mut().unwrap().as_mut_vec()[0].anim = custom_asset_ids::POWER_BEAM_ANIM; + ancs.anim_set.animation_resources.as_mut().unwrap().as_mut_vec()[0].evnt = custom_asset_ids::POWER_BEAM_EVNT; + + let mut new_ancs_bytes = vec![]; + ancs.write_to(&mut new_ancs_bytes).unwrap(); + + build_resource( + custom_asset_ids::POWER_BEAM_PICKUP_ANCS, + structs::ResourceKind::External(new_ancs_bytes, b"ANCS".into()) + ) + }; + + let part = { + let bytes = include_bytes!("../extra_assets/power_beam.PART"); + build_resource( + custom_asset_ids::POWER_BEAM_PART, + structs::ResourceKind::External(bytes.to_vec(), b"PART".into()) + ) + }; + + let evnt = { + let mut evnt = resources[&resource_info!("IceBeam_ready.EVNT").into()] + .kind.as_evnt() + .unwrap().into_owned(); + + evnt.effect_events.as_mut_vec()[0].effect_file_id = custom_asset_ids::POWER_BEAM_PART.to_u32(); + + build_resource( + custom_asset_ids::POWER_BEAM_EVNT, + structs::ResourceKind::Evnt(evnt) + ) + }; + + let anim = { + let anim = ResourceData::new( + &resources[&resource_info!("IceBeam_ready.ANIM").into()] + ); + + let mut bytes = anim.decompress().into_owned(); + + custom_asset_ids::POWER_BEAM_EVNT.write_to(&mut std::io::Cursor::new(&mut bytes[8..])).unwrap(); + + build_resource( + custom_asset_ids::POWER_BEAM_ANIM, + structs::ResourceKind::External(bytes, b"ANIM".into()) + ) + }; + + [cmdl, ancs, part, evnt, anim] +} + fn create_ice_trap_icon_ancs<'r>( resources: &HashMap<(u32, FourCC), structs::Resource<'r>>, new_cmdl_id: ResId, diff --git a/src/pickup_meta.rs b/src/pickup_meta.rs index d79ba901..f3280c37 100644 --- a/src/pickup_meta.rs +++ b/src/pickup_meta.rs @@ -344,6 +344,7 @@ pub enum PickupModel IceSpreader, Flamethrower, FlamethrowerNew, + PowerBeam, WaveBeam, IceBeam, PlasmaBeam, @@ -396,6 +397,7 @@ impl PickupModel PickupModel::IceSpreader => "Ice Spreader", PickupModel::Flamethrower => "FlamethrowerOld", PickupModel::FlamethrowerNew => "Flamethrower", + PickupModel::PowerBeam => "Power Beam", PickupModel::WaveBeam => "Wave Beam", PickupModel::IceBeam => "Ice Beam", PickupModel::PlasmaBeam => "Plasma Beam", @@ -464,6 +466,7 @@ impl PickupModel PickupModel::IceSpreader, PickupModel::Flamethrower, PickupModel::FlamethrowerNew, + PickupModel::PowerBeam, PickupModel::WaveBeam, PickupModel::IceBeam, PickupModel::PlasmaBeam, @@ -538,7 +541,7 @@ impl PickupModel */ pub fn from_type(pickup_type: PickupType) -> Self { match pickup_type { - PickupType::PowerBeam => PickupModel::RandovaniaGamecube, + PickupType::PowerBeam => PickupModel::PowerBeam, PickupType::IceBeam => PickupModel::IceBeam, PickupType::WaveBeam => PickupModel::WaveBeam, PickupType::PlasmaBeam => PickupModel::PlasmaBeam, diff --git a/src/pickup_meta.rs.in b/src/pickup_meta.rs.in index d200a8f0..489e37d6 100644 --- a/src/pickup_meta.rs.in +++ b/src/pickup_meta.rs.in @@ -10300,12 +10300,12 @@ const PICKUP_CMDL_AABBS: [(u32, [u32; 6]); 39] = [ (0xCD995C16, [0xBED70230, 0xBE2637A1, 0xBEE9CA69, 0x3ED7022F, 0x3E2637A0, 0x3EDEBAA6]), (0xD532BDB8, [0xBE3EEAF8, 0xBE3EEAFA, 0xBE3EEAF9, 0x3E3EEAFA, 0x3E3EEAF8, 0x3E3EEAF9]), (0xDA25B1BE, [0xBF032CFF, 0xBEF982E4, 0x3D3B29F0, 0x3F032D02, 0x3EF982DE, 0x3FFBFE22]), - (0xDEAF0002, [0xBED70230, 0xBE2637A1, 0xBEE9CA69, 0x3ED7022F, 0x3E2637A0, 0x3EDEBAA6]), - (0xDEAF0005, [0xBED70230, 0xBE2637A1, 0xBEE9CA69, 0x3ED7022F, 0x3E2637A0, 0x3EDEBAA6]), - (0xDEAF0007, [0xBED5A986, 0xBED5A986, 0xBF1004EA, 0x3ED5A986, 0x3ED5A986, 0x3F1004EA]), - (0xDEAF0009, [0xBED5A986, 0xBED5A986, 0xBF1004EA, 0x3ED5A986, 0x3ED5A986, 0x3F1004EA]), - (0xDEAF000B, [0xBED5A986, 0xBED5A986, 0xBF1004EA, 0x3ED5A986, 0x3ED5A986, 0x3F1004EA]), - (0xDEAF0010, [0xBEBF4CAC, 0xBEBF4C8C, 0x3F3CB4FA, 0x3EBF4CAD, 0x3EBF4CD0, 0x4000D66D]), + (0xDEAF0003, [0xBED70230, 0xBE2637A1, 0xBEE9CA69, 0x3ED7022F, 0x3E2637A0, 0x3EDEBAA6]), + (0xDEAF0006, [0xBED70230, 0xBE2637A1, 0xBEE9CA69, 0x3ED7022F, 0x3E2637A0, 0x3EDEBAA6]), + (0xDEAF0008, [0xBED5A986, 0xBED5A986, 0xBF1004EA, 0x3ED5A986, 0x3ED5A986, 0x3F1004EA]), + (0xDEAF000A, [0xBED5A986, 0xBED5A986, 0xBF1004EA, 0x3ED5A986, 0x3ED5A986, 0x3F1004EA]), + (0xDEAF000C, [0xBED5A986, 0xBED5A986, 0xBF1004EA, 0x3ED5A986, 0x3ED5A986, 0x3F1004EA]), + (0xDEAF0011, [0xBEBF4CAC, 0xBEBF4C8C, 0x3F3CB4FA, 0x3EBF4CAD, 0x3EBF4CD0, 0x4000D66D]), (0xF86621C9, [0xBEDCA1FE, 0xBF5C1DF2, 0xBF80444F, 0x3EDC79E0, 0x3F5AC836, 0x3F66A5F1]), (0xFCD66153, [0xBFA12B7D, 0xBE9C29A5, 0xBFF5A1AE, 0x3FE1A34C, 0x34A7D97F, 0x3FD69829]), (0xFE2CD4D3, [0xBFA12B7D, 0xBE9C29A5, 0xBFF5A1AE, 0x3FE1A34C, 0x34A7D97F, 0x3FD69829]), @@ -10316,7 +10316,7 @@ impl PickupType pub fn attainment_audio_file_name(&self) -> &'static str { match self { - PickupType::PowerBeam => "/audio/itm_x_short_02.dsp\0", + PickupType::PowerBeam => "/audio/jin_itemattain.dsp\0", PickupType::IceBeam => "audio/jin_itemattain.dsp\0", PickupType::WaveBeam => "audio/jin_itemattain.dsp\0", PickupType::PlasmaBeam => "audio/jin_itemattain.dsp\0", @@ -10431,8 +10431,8 @@ impl PickupModel (0x6536B232, FourCC::from_bytes(b"TXTR")), (0x6E62EF9F, FourCC::from_bytes(b"EVNT")), (0xC4AD9154, FourCC::from_bytes(b"TXTR")), - (0xDEAF000B, FourCC::from_bytes(b"CMDL")), - (0xDEAF000C, FourCC::from_bytes(b"ANCS")), + (0xDEAF000C, FourCC::from_bytes(b"CMDL")), + (0xDEAF000D, FourCC::from_bytes(b"ANCS")), ]; DATA }, @@ -10446,8 +10446,8 @@ impl PickupModel (0x6536B232, FourCC::from_bytes(b"TXTR")), (0x6E62EF9F, FourCC::from_bytes(b"EVNT")), (0xC4AD9154, FourCC::from_bytes(b"TXTR")), - (0xDEAF0007, FourCC::from_bytes(b"CMDL")), - (0xDEAF0008, FourCC::from_bytes(b"ANCS")), + (0xDEAF0008, FourCC::from_bytes(b"CMDL")), + (0xDEAF0009, FourCC::from_bytes(b"ANCS")), (0xFC095F6C, FourCC::from_bytes(b"TXTR")), ]; DATA @@ -10463,8 +10463,8 @@ impl PickupModel (0x6E62EF9F, FourCC::from_bytes(b"EVNT")), (0xBE4CD99D, FourCC::from_bytes(b"TXTR")), (0xC4AD9154, FourCC::from_bytes(b"TXTR")), - (0xDEAF0009, FourCC::from_bytes(b"CMDL")), - (0xDEAF000A, FourCC::from_bytes(b"ANCS")), + (0xDEAF000A, FourCC::from_bytes(b"CMDL")), + (0xDEAF000B, FourCC::from_bytes(b"ANCS")), ]; DATA }, @@ -10513,9 +10513,9 @@ impl PickupModel (0x4B26EFDA, FourCC::from_bytes(b"EVNT")), (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")), + (0xDEAF0002, FourCC::from_bytes(b"TXTR")), + (0xDEAF0003, FourCC::from_bytes(b"CMDL")), + (0xDEAF0004, FourCC::from_bytes(b"ANCS")), (0xFEBBC197, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -10772,11 +10772,36 @@ impl PickupModel (0xAE6410BE, FourCC::from_bytes(b"CSKR")), (0xB59EB7E6, FourCC::from_bytes(b"TXTR")), (0xDBDF0424, FourCC::from_bytes(b"CINF")), - (0xDEAF0018, FourCC::from_bytes(b"CMDL")), - (0xDEAF0019, FourCC::from_bytes(b"ANCS")), - (0xDEAF001A, FourCC::from_bytes(b"TXTR")), + (0xDEAF0019, FourCC::from_bytes(b"CMDL")), + (0xDEAF001A, FourCC::from_bytes(b"ANCS")), (0xDEAF001B, FourCC::from_bytes(b"TXTR")), (0xDEAF001C, FourCC::from_bytes(b"TXTR")), + (0xDEAF001D, FourCC::from_bytes(b"TXTR")), + ]; + DATA + }, + PickupModel::PowerBeam => { + const DATA: &[(u32, FourCC)] = &[ + (0x09884086, FourCC::from_bytes(b"PART")), + (0x0DEB9456, FourCC::from_bytes(b"PART")), + (0x47B6B93D, FourCC::from_bytes(b"SCAN")), + (0x4F15E331, FourCC::from_bytes(b"STRG")), + (0x52A3B1A4, FourCC::from_bytes(b"ANCS")), + (0x57F7A883, FourCC::from_bytes(b"EVNT")), + (0x846B0326, FourCC::from_bytes(b"ANIM")), + (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")), + (0xDEAF0001, FourCC::from_bytes(b"TXTR")), + (0xDEAF001E, FourCC::from_bytes(b"CMDL")), + (0xDEAF001F, FourCC::from_bytes(b"ANCS")), + (0xDEAF0020, FourCC::from_bytes(b"TXTR")), + (0xDEAF0021, FourCC::from_bytes(b"TXTR")), + (0xDEAF0022, FourCC::from_bytes(b"PART")), + (0xDEAF0023, FourCC::from_bytes(b"ANIM")), + (0xDEAF0024, FourCC::from_bytes(b"EVNT")), ]; DATA }, @@ -11062,11 +11087,11 @@ impl PickupModel (0xAF9DEFBE, FourCC::from_bytes(b"CINF")), (0xBE4CD99D, FourCC::from_bytes(b"TXTR")), (0xDEAF0000, FourCC::from_bytes(b"TXTR")), - (0xDEAF0001, FourCC::from_bytes(b"TXTR")), - (0xDEAF0003, FourCC::from_bytes(b"ANCS")), - (0xDEAF0004, FourCC::from_bytes(b"TXTR")), - (0xDEAF0005, FourCC::from_bytes(b"CMDL")), - (0xDEAF0006, FourCC::from_bytes(b"ANCS")), + (0xDEAF0002, FourCC::from_bytes(b"TXTR")), + (0xDEAF0004, FourCC::from_bytes(b"ANCS")), + (0xDEAF0005, FourCC::from_bytes(b"TXTR")), + (0xDEAF0006, FourCC::from_bytes(b"CMDL")), + (0xDEAF0007, FourCC::from_bytes(b"ANCS")), (0xFEBBC197, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -11081,12 +11106,12 @@ impl PickupModel (0x6E3D2E18, FourCC::from_bytes(b"TXTR")), (0xAF9DEFBE, FourCC::from_bytes(b"CINF")), (0xDEAF0000, FourCC::from_bytes(b"TXTR")), - (0xDEAF0001, FourCC::from_bytes(b"TXTR")), - (0xDEAF0003, FourCC::from_bytes(b"ANCS")), - (0xDEAF0014, FourCC::from_bytes(b"CMDL")), - (0xDEAF0015, FourCC::from_bytes(b"ANCS")), - (0xDEAF0016, FourCC::from_bytes(b"TXTR")), + (0xDEAF0002, FourCC::from_bytes(b"TXTR")), + (0xDEAF0004, FourCC::from_bytes(b"ANCS")), + (0xDEAF0015, FourCC::from_bytes(b"CMDL")), + (0xDEAF0016, FourCC::from_bytes(b"ANCS")), (0xDEAF0017, FourCC::from_bytes(b"TXTR")), + (0xDEAF0018, FourCC::from_bytes(b"TXTR")), (0xFEBBC197, FourCC::from_bytes(b"CSKR")), ]; DATA @@ -11152,13 +11177,13 @@ impl PickupModel (0x098BE8D8, FourCC::from_bytes(b"PART")), (0x0DEB9456, FourCC::from_bytes(b"PART")), (0x4651CA46, FourCC::from_bytes(b"CSKR")), - (0xDEAF000D, FourCC::from_bytes(b"TXTR")), (0xDEAF000E, FourCC::from_bytes(b"TXTR")), (0xDEAF000F, FourCC::from_bytes(b"TXTR")), - (0xDEAF0010, FourCC::from_bytes(b"CMDL")), - (0xDEAF0011, FourCC::from_bytes(b"ANCS")), - (0xDEAF0012, FourCC::from_bytes(b"EVNT")), - (0xDEAF0013, FourCC::from_bytes(b"ANIM")), + (0xDEAF0010, FourCC::from_bytes(b"TXTR")), + (0xDEAF0011, FourCC::from_bytes(b"CMDL")), + (0xDEAF0012, FourCC::from_bytes(b"ANCS")), + (0xDEAF0013, FourCC::from_bytes(b"EVNT")), + (0xDEAF0014, FourCC::from_bytes(b"ANIM")), (0xF8333189, FourCC::from_bytes(b"CINF")), ]; DATA @@ -11312,7 +11337,7 @@ PickupModel::IceTrap => { 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAF, 0x00, - 0x0B, 0xDE, 0xAF, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0C, 0xDE, 0xAF, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, @@ -11346,7 +11371,7 @@ PickupModel::IceTrap => { 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAF, - 0x00, 0x07, 0xDE, 0xAF, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x08, 0xDE, 0xAF, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, @@ -11379,8 +11404,8 @@ PickupModel::IceTrap => { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAF, 0x00, 0x09, - 0xDE, 0xAF, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAF, 0x00, 0x0A, + 0xDE, 0xAF, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, @@ -11482,7 +11507,7 @@ PickupModel::IceTrap => { 0x00, 0x17, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAF, - 0x00, 0x02, 0xDE, 0xAF, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x03, 0xDE, 0xAF, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, @@ -11971,7 +11996,7 @@ PickupModel::IceTrap => { 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAF, 0x00, - 0x18, 0xDE, 0xAF, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x19, 0xDE, 0xAF, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, @@ -11991,6 +12016,40 @@ PickupModel::IceTrap => { 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xEB, 0x94, 0x56, ], + PickupModel::PowerBeam => &[ + 0x00, 0x00, 0x00, 0x12, 0x50, 0x6F, 0x77, 0x65, + 0x72, 0x20, 0x42, 0x65, 0x61, 0x6D, 0x00, 0x44, + 0x49, 0x6E, 0xDC, 0xC3, 0x97, 0xBA, 0xDD, 0x42, + 0xA8, 0xA9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x40, 0x00, 0x01, 0x3F, 0x40, 0x00, 0x01, 0x3F, + 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x42, + 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xDE, 0xAF, 0x00, 0x1E, 0xDE, + 0xAF, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, + 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, + 0x41, 0xA0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, + 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, + 0x3F, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x47, 0xB6, 0xB9, 0x3D, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x3F, + 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0x01, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xEB, 0x94, + 0x56, + ], PickupModel::WaveBeam => &[ 0x00, 0x00, 0x00, 0x12, 0x50, 0x5F, 0x57, 0x61, 0x76, 0x65, 0x62, 0x65, 0x61, 0x6D, 0x5F, 0x30, @@ -12506,7 +12565,7 @@ PickupModel::IceTrap => { 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xDE, 0xAF, 0x00, 0x05, 0xDE, 0xAF, 0x00, 0x06, + 0xDE, 0xAF, 0x00, 0x06, 0xDE, 0xAF, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -12539,8 +12598,8 @@ PickupModel::IceTrap => { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xDE, 0xAF, 0x00, 0x14, 0xDE, 0xAF, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xDE, 0xAF, 0x00, 0x15, 0xDE, 0xAF, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x41, 0xA0, @@ -12678,7 +12737,7 @@ PickupModel::IceTrap => { 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAF, - 0x00, 0x10, 0xDE, 0xAF, 0x00, 0x11, 0x00, 0x00, + 0x00, 0x11, 0xDE, 0xAF, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,