load_scripts/
load_scripts.rs1use std::{
2 fs::File,
3 io::{BufWriter, Write},
4};
5
6use infinite_rs::{ModuleFile, Result, tag::types::common_types::FieldData};
7use infinite_rs_derive::TagStructure;
8
9const DEPLOY_PATH: &str =
10 "C:/XboxGames/Halo Infinite/Content/deploy/any/globals/globals-rtx-new.module";
11const SAVE_PATH: &str = "./scripts";
12const SCRIPT_GROUP: &str = "hsc*";
13
14#[derive(Default, Debug, TagStructure)]
15#[data(size(0x2D8))]
16struct HsSourceFileTag {
17 #[data(offset(0x294))]
18 server: FieldData,
19 #[data(offset(0x2AC))]
20 client: FieldData,
21}
22
23fn main() -> Result<()> {
24 let mut module = ModuleFile::from_path(DEPLOY_PATH)?;
25 for idx in 0..module.files.len() {
26 if module.files[idx].tag_group == SCRIPT_GROUP {
27 let tag = module.read_tag(idx as u32)?;
28 if let Some(tag) = tag {
29 let mut source = HsSourceFileTag::default();
30 tag.read_metadata(&mut source)?;
31
32 let server_buf = source.server.data;
33 let client_buf = source.client.data;
34
35 let server_file = File::create(format!("{SAVE_PATH}/{}_server.luac", tag.tag_id))?;
36 let mut bw = BufWriter::new(server_file);
37 bw.write_all(&server_buf)?;
38
39 let client_file = File::create(format!("{SAVE_PATH}/{}_client.luac", tag.tag_id))?;
40 let mut bw = BufWriter::new(client_file);
41 bw.write_all(&client_buf)?;
42 }
43 }
44 }
45 Ok(())
46}