pxpx loader
parent
b1d673faf3
commit
9f6e67bbef
15
src/main.rs
15
src/main.rs
|
@ -1,5 +1,5 @@
|
|||
use maraiah::{durandal::{bin::*, err::*, file::*, image::*, sound::*, text::*},
|
||||
marathon::{machdr, map, pict, shp, snd, trm, wad}};
|
||||
marathon::{machdr, map, phy, pict, shp, snd, trm, wad}};
|
||||
use std::{collections::HashSet,
|
||||
fs,
|
||||
io::{self, Write}};
|
||||
|
@ -41,7 +41,9 @@ fn dump_chunk(opt: &Options, cid: Ident, cnk: &[u8], eid: u16) -> ResultS<()>
|
|||
{
|
||||
if opt.wad_all {
|
||||
make_chunk(opt, cid, cnk, eid)?;
|
||||
} else if opt.wad_chunks.contains(&cid) {
|
||||
}
|
||||
|
||||
if opt.wad_chunks.contains(&cid) {
|
||||
match &cid {
|
||||
b"PICT" => {
|
||||
let im = pict::load_pict(cnk)?;
|
||||
|
@ -61,10 +63,9 @@ fn dump_chunk(opt: &Options, cid: Ident, cnk: &[u8], eid: u16) -> ResultS<()>
|
|||
b"medi" => make_yaml(opt, &rd_array(cnk, map::read_medi)?)?,
|
||||
b"plat" => make_yaml(opt, &rd_array(cnk, map::read_plat)?)?,
|
||||
b"term" => make_yaml(opt, &rd_array(cnk, trm::read_term)?)?,
|
||||
b"PXpx" => make_yaml(opt, &rd_array(cnk, phy::read_pxpx)?)?,
|
||||
_ => (),
|
||||
}
|
||||
} else if opt.wad_unknown {
|
||||
make_chunk(opt, cid, cnk, eid)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
@ -241,11 +242,6 @@ fn main() -> ResultS<()>
|
|||
StoreTrue,
|
||||
"wad: Dump all chunks into a folder");
|
||||
|
||||
arg!("--wad-dump-unknown",
|
||||
opt.wad_unknown,
|
||||
StoreTrue,
|
||||
"wad: Dump all unknown chunks into a folder");
|
||||
|
||||
arg!("--wad-write-header",
|
||||
opt.wad_header,
|
||||
StoreTrue,
|
||||
|
@ -321,7 +317,6 @@ struct Options
|
|||
snd_dump: bool,
|
||||
snd_write: bool,
|
||||
wad_all: bool,
|
||||
wad_unknown: bool,
|
||||
wad_header: bool,
|
||||
wad_chunks: HashSet<Ident>,
|
||||
wad_c_temp: String,
|
||||
|
|
|
@ -2,7 +2,6 @@ use crate::{durandal::{bin::*, err::*, fixed::*, text::mac_roman_conv},
|
|||
marathon::xfer::TransferMode};
|
||||
use bitflags::bitflags;
|
||||
use serde::Serialize;
|
||||
use std::fmt;
|
||||
|
||||
pub fn read_minf(b: &[u8]) -> ResultS<Minf>
|
||||
{
|
||||
|
@ -678,9 +677,9 @@ c_enum! {
|
|||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for Point
|
||||
impl std::fmt::Debug for Point
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result
|
||||
{
|
||||
write!(f, "({}, {})", self.x, self.y)
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
pub mod machdr;
|
||||
pub mod map;
|
||||
pub mod phy;
|
||||
pub mod pict;
|
||||
pub mod shp;
|
||||
pub mod snd;
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
use crate::{durandal::{err::*, fixed::*}};
|
||||
use serde::Serialize;
|
||||
|
||||
pub fn read_pxpx(b: &[u8]) -> ResultS<(Physics, usize)>
|
||||
{
|
||||
read_data! {
|
||||
104, BE in b =>
|
||||
vel_fwd = u32[0];
|
||||
vel_bkw = u32[4];
|
||||
vel_prp = u32[8];
|
||||
acc_nrm = u32[12];
|
||||
dec_nrm = u32[16];
|
||||
dec_air = u32[20];
|
||||
acc_grv = u32[24];
|
||||
acc_cli = u32[28];
|
||||
vel_trm = u32[32];
|
||||
dec_ext = u32[36];
|
||||
acc_ang = u32[40];
|
||||
dec_ang = u32[44];
|
||||
vel_ang = u32[48];
|
||||
vel_rec = u32[52];
|
||||
fng_vel = u32[56];
|
||||
fng_max = u32[60];
|
||||
ele_max = u32[64];
|
||||
dec_xng = u32[68];
|
||||
stp_dta = u32[72];
|
||||
stp_amp = u32[76];
|
||||
ply_rad = u32[80];
|
||||
ply_hei = u32[84];
|
||||
ply_dhi = u32[88];
|
||||
ply_cam = u32[92];
|
||||
ply_spl = u32[96];
|
||||
ply_hcm = u32[100];
|
||||
}
|
||||
|
||||
let vel_fwd = Fixed::from_bits(vel_fwd);
|
||||
let vel_bkw = Fixed::from_bits(vel_bkw);
|
||||
let vel_prp = Fixed::from_bits(vel_prp);
|
||||
let acc_nrm = Fixed::from_bits(acc_nrm);
|
||||
let dec_nrm = Fixed::from_bits(dec_nrm);
|
||||
let dec_air = Fixed::from_bits(dec_air);
|
||||
let acc_grv = Fixed::from_bits(acc_grv);
|
||||
let acc_cli = Fixed::from_bits(acc_cli);
|
||||
let vel_trm = Fixed::from_bits(vel_trm);
|
||||
let dec_ext = Fixed::from_bits(dec_ext);
|
||||
let acc_ang = Fixed::from_bits(acc_ang);
|
||||
let dec_ang = Fixed::from_bits(dec_ang);
|
||||
let vel_ang = Fixed::from_bits(vel_ang);
|
||||
let vel_rec = Fixed::from_bits(vel_rec);
|
||||
let fng_vel = Fixed::from_bits(fng_vel);
|
||||
let fng_max = Fixed::from_bits(fng_max);
|
||||
let ele_max = Fixed::from_bits(ele_max);
|
||||
let dec_xng = Fixed::from_bits(dec_xng);
|
||||
let stp_dta = Fixed::from_bits(stp_dta);
|
||||
let stp_amp = Fixed::from_bits(stp_amp);
|
||||
let ply_rad = Fixed::from_bits(ply_rad);
|
||||
let ply_hei = Fixed::from_bits(ply_hei);
|
||||
let ply_dhi = Fixed::from_bits(ply_dhi);
|
||||
let ply_cam = Fixed::from_bits(ply_cam);
|
||||
let ply_spl = Fixed::from_bits(ply_spl);
|
||||
let ply_hcm = Fixed::from_bits(ply_hcm);
|
||||
|
||||
Ok((Physics{acc_ang, acc_cli, acc_grv, acc_nrm, dec_air, dec_ang, dec_ext,
|
||||
dec_nrm, dec_xng, ele_max, fng_max, fng_vel, ply_cam, ply_dhi,
|
||||
ply_hcm, ply_hei, ply_rad, ply_spl, stp_amp, stp_dta, vel_ang,
|
||||
vel_bkw, vel_fwd, vel_prp, vel_rec, vel_trm}, 104))
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct Physics
|
||||
{
|
||||
pub acc_ang: Fixed,
|
||||
pub acc_cli: Fixed,
|
||||
pub acc_grv: Fixed,
|
||||
pub acc_nrm: Fixed,
|
||||
pub dec_air: Fixed,
|
||||
pub dec_ang: Fixed,
|
||||
pub dec_ext: Fixed,
|
||||
pub dec_nrm: Fixed,
|
||||
pub dec_xng: Fixed,
|
||||
pub ele_max: Fixed,
|
||||
pub fng_max: Fixed,
|
||||
pub fng_vel: Fixed,
|
||||
pub ply_cam: Fixed,
|
||||
pub ply_dhi: Fixed,
|
||||
pub ply_hcm: Fixed,
|
||||
pub ply_hei: Fixed,
|
||||
pub ply_rad: Fixed,
|
||||
pub ply_spl: Fixed,
|
||||
pub stp_amp: Fixed,
|
||||
pub stp_dta: Fixed,
|
||||
pub vel_ang: Fixed,
|
||||
pub vel_bkw: Fixed,
|
||||
pub vel_fwd: Fixed,
|
||||
pub vel_prp: Fixed,
|
||||
pub vel_rec: Fixed,
|
||||
pub vel_trm: Fixed,
|
||||
}
|
||||
|
||||
// EOF
|
Loading…
Reference in New Issue