bonk loading
parent
8fe530352a
commit
fd2b589049
|
@ -384,7 +384,7 @@ main menu, and physics files. Here is a listing of all chunks used within them:
|
|||
| `PLAT` | No test data (platform static data) |
|
||||
| `medi` | Media (liquids) |
|
||||
| `ambi` | Array of Ambient Sounds |
|
||||
| `bonk` | Not analyzed (random sounds) |
|
||||
| `bonk` | Array of Random Sounds |
|
||||
| `term` | Array of Terminals |
|
||||
| `iidx` | Not analyzed (map indices) |
|
||||
| `ShPa` | Not analyzed (shapes) |
|
||||
|
@ -771,6 +771,27 @@ Ambient Sound is 16 bytes.
|
|||
|
||||
- `Volume` is the volume of this sound, in range 0-256.
|
||||
|
||||
### Random Sound ###
|
||||
|
||||
Random Sound is 32 bytes.
|
||||
|
||||
| Name | Type | Offset |
|
||||
| ---- | ---- | ------ |
|
||||
| `Flags` | `u16` | `0` |
|
||||
| `Index` | `u16` | `2` |
|
||||
| `Volume` | `u16` | `4` |
|
||||
| `DeltaVolume` | `u16` | `6` |
|
||||
| `Period` | `u16` | `8` |
|
||||
| `DeltaPeriod` | `u16` | `10` |
|
||||
| `Angle` | `angle` | `12` |
|
||||
| `DeltaAngle` | `angle` | `14` |
|
||||
| `Pitch` | `fixed` | `16` |
|
||||
| `DeltaPitch` | `fixed` | `20` |
|
||||
| `Phase` | `u16` | `24` |
|
||||
|
||||
- `Flags` is a Random Sound Flags bit field.
|
||||
- `Phase` must be `65535`.
|
||||
|
||||
### Static Map Info ###
|
||||
|
||||
Static Map Info is 88 bytes.
|
||||
|
@ -1722,4 +1743,10 @@ gravity.
|
|||
| `NoMediaObstruct` | `5` |
|
||||
| `Ambient` | `6` |
|
||||
|
||||
### Random Sound Flags ###
|
||||
|
||||
| Name | Bit |
|
||||
| ---- | --- |
|
||||
| `IgnoreDirection` | `0` |
|
||||
|
||||
<!-- EOF -->
|
||||
|
|
|
@ -56,6 +56,7 @@ fn dump_chunk(opt: &Options, cid: Ident, cnk: &[u8], eid: u16) -> ResultS<()>
|
|||
b"LITE" => make_yaml(opt, &rd_array(cnk, map::read_lite)?)?,
|
||||
b"OBJS" => make_yaml(opt, &rd_array(cnk, map::read_objs)?)?,
|
||||
b"ambi" => make_yaml(opt, &rd_array(cnk, map::read_ambi)?)?,
|
||||
b"bonk" => make_yaml(opt, &rd_array(cnk, map::read_bonk)?)?,
|
||||
b"term" => make_yaml(opt, &rd_array(cnk, trm::read_term)?)?,
|
||||
_ => (),
|
||||
}
|
||||
|
|
|
@ -229,6 +229,32 @@ pub fn read_ambi(b: &[u8]) -> ResultS<(SoundAmbi, usize)>
|
|||
Ok((SoundAmbi{index, volume}, 16))
|
||||
}
|
||||
|
||||
pub fn read_bonk(b: &[u8]) -> ResultS<(SoundRand, usize)>
|
||||
{
|
||||
read_data! {
|
||||
32, BE in b =>
|
||||
flags = u16[0];
|
||||
index = u16[2];
|
||||
vol_nrm = u16[4];
|
||||
vol_dta = u16[6];
|
||||
prd_nrm = u16[8];
|
||||
prd_dta = u16[10];
|
||||
yaw_nrm = u16[12];
|
||||
yaw_dta = u16[14];
|
||||
pit_nrm = u32[16];
|
||||
pit_dta = u32[20];
|
||||
}
|
||||
|
||||
let no_dir = flags != 0;
|
||||
let yaw_nrm = Angle::from_bits(yaw_nrm);
|
||||
let yaw_dta = Angle::from_bits(yaw_dta);
|
||||
let pit_nrm = Fixed::from_bits(pit_nrm);
|
||||
let pit_dta = Fixed::from_bits(pit_dta);
|
||||
|
||||
Ok((SoundRand{no_dir, index, vol_nrm, vol_dta, prd_nrm, prd_dta, yaw_nrm,
|
||||
yaw_dta, pit_nrm, pit_dta}, 32))
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Serialize)]
|
||||
pub struct Point
|
||||
{
|
||||
|
@ -339,6 +365,21 @@ pub struct SoundAmbi
|
|||
pub volume: u16,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct SoundRand
|
||||
{
|
||||
pub no_dir: bool,
|
||||
pub index: u16,
|
||||
pub vol_nrm: u16,
|
||||
pub vol_dta: u16,
|
||||
pub prd_nrm: u16,
|
||||
pub prd_dta: u16,
|
||||
pub yaw_nrm: Angle,
|
||||
pub yaw_dta: Angle,
|
||||
pub pit_nrm: Fixed,
|
||||
pub pit_dta: Fixed,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize)]
|
||||
pub struct Minf
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue