fix side data interpretation

png-branch
an 2019-02-05 04:28:29 -05:00
parent 24c3ccc680
commit 23871101b4
2 changed files with 8 additions and 26 deletions

View File

@ -633,7 +633,7 @@ Side is 64 bytes.
| Point | Collision top-right | ExTRight | | Point | Collision top-right | ExTRight |
| Point | Collision bottom-left | ExBLeft | | Point | Collision bottom-left | ExBLeft |
| Point | Collision bottom-right | ExBRight | | Point | Collision bottom-right | ExBRight |
| u16 | Control Panel Type | PanelType | | u16 | Control panel preset number | PanelType |
| i16 | Control panel permutation | PanelPerm | | i16 | Control panel permutation | PanelPerm |
| u16 | First texture transfer mode | XferPri | | u16 | First texture transfer mode | XferPri |
| u16 | Second texture transfer mode | XferSec | | u16 | Second texture transfer mode | XferSec |
@ -1041,6 +1041,9 @@ exit upon reading them.
### Control Panel Type ### ### Control Panel Type ###
This is used internally for each control panel preset and determines the
permutation each one uses.
| Value | Description | Permutation | Name | | Value | Description | Permutation | Name |
| ----- | ----------- | ----------- | ---- | | ----- | ----------- | ----------- | ---- |
| 0 | Oxygen refuel | None | Oxygen | | 0 | Oxygen refuel | None | Oxygen |

View File

@ -55,6 +55,7 @@ fn read_side_tex(b: &[u8]) -> ResultS<SideTex>
{ {
let offs = Point::read(&b[0..4])?; let offs = Point::read(&b[0..4])?;
let tex_id = b.c_u16b(4)?; let tex_id = b.c_u16b(4)?;
let tex_id = if tex_id == 65535 {None} else {Some(tex_id)};
Ok(SideTex{offs, tex_id}) Ok(SideTex{offs, tex_id})
} }
@ -80,13 +81,7 @@ impl Chunked<Side> for Side
let xfer_tra = b.c_u16b(46)?; let xfer_tra = b.c_u16b(46)?;
let shade = b.c_u32b(48)?; let shade = b.c_u32b(48)?;
let flags = SideFlags::from_bits_truncate(flags); let flags = SideFlags::from_bits_truncate(flags);
let paneltyp = let shade = Fx32::from_bits(shade);
if flags.contains(SideFlags::Panel) {
Some(PanelType::from_repr(paneltyp)?)
} else {
None
};
let shade = Fx32::from_bits(shade);
Ok(Side{stype, flags, tex_pri, tex_sec, tex_tra, ex_tleft, ex_trigh, Ok(Side{stype, flags, tex_pri, tex_sec, tex_tra, ex_tleft, ex_trigh,
ex_bleft, ex_brigh, paneltyp, paneldat, xfer_pri, xfer_sec, ex_bleft, ex_brigh, paneltyp, paneldat, xfer_pri, xfer_sec,
xfer_tra, shade}) xfer_tra, shade})
@ -148,7 +143,7 @@ pub struct Line
pub struct SideTex pub struct SideTex
{ {
offs: Point, offs: Point,
tex_id: u16, tex_id: Option<u16>,
} }
#[derive(Debug)] #[derive(Debug)]
@ -163,7 +158,7 @@ pub struct Side
ex_trigh: Point, ex_trigh: Point,
ex_bleft: Point, ex_bleft: Point,
ex_brigh: Point, ex_brigh: Point,
paneltyp: Option<PanelType>, paneltyp: u16,
paneldat: i16, paneldat: i16,
xfer_pri: u16, xfer_pri: u16,
xfer_sec: u16, xfer_sec: u16,
@ -262,22 +257,6 @@ bitflags! {
} }
} }
c_enum! {
#[derive(Debug)]
pub enum PanelType: u16
{
0 => Oxygen,
1 => Shield,
2 => Shield2x,
3 => Shield3x,
4 => Light,
5 => Platform,
6 => Tag,
7 => PatternBuf,
8 => Terminal,
}
}
impl fmt::Debug for Point impl fmt::Debug for Point
{ {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result