pxpx loader

png-branch
an 2019-02-20 23:03:19 -05:00
parent b1d673faf3
commit 9f6e67bbef
4 changed files with 108 additions and 13 deletions

View File

@ -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,

View File

@ -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)
}

View File

@ -2,6 +2,7 @@
pub mod machdr;
pub mod map;
pub mod phy;
pub mod pict;
pub mod shp;
pub mod snd;

100
src/marathon/phy.rs Normal file
View File

@ -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