diff --git a/maraiah/bin.rs b/maraiah/bin.rs index 2fa6b9f..76cb495 100644 --- a/maraiah/bin.rs +++ b/maraiah/bin.rs @@ -180,7 +180,7 @@ macro_rules! rd_impl { /// argument. The function's result has the `?` operator applied to it, /// unless `OPTS` is `no_try`. /// - `OPT`, if not one of the things listed above, may be `enum TYPE` to apply -/// `TryFrom`, or `flag TYPE` to apply a bitfield made by `bitflags!`. +/// `TryFrom`, or `flag TYPE` to apply a bitfield made by `c_bitfield!`. /// - `INDEX` is either an integer literal which must be representable as /// `usize`, or a range with the syntax `INDEX; SIZE` denoting the beginning /// and size of the range. diff --git a/maraiah/cbitfield.rs b/maraiah/cbitfield.rs new file mode 100644 index 0000000..6abe235 --- /dev/null +++ b/maraiah/cbitfield.rs @@ -0,0 +1,28 @@ +#![doc(hidden)] + +#[macro_export] +macro_rules! c_bitfield +{ + ( + $(#[$outer:meta])* + pub struct $t:ident: $ti:ty { + $( + $(#[$inner:ident $($args:tt)*])* + $f:ident = $v:expr + ),+ + $(,)? + } + ) => { + bitflags! { + $(#[$outer])* + pub struct $t: $ti { + $( + $(#[$inner $($args)*])* + const $f = 1 << $v; + )+ + } + } + } +} + +// EOF diff --git a/maraiah/cenum.rs b/maraiah/cenum.rs index f3426a6..57e0d37 100644 --- a/maraiah/cenum.rs +++ b/maraiah/cenum.rs @@ -3,8 +3,8 @@ /// Creates an enumeration and function for converting a representation into the /// enumeration type. /// -/// The syntax is similar to the `bitflags` macro, but each value has the syntax -/// `value = enumeration`. `enum` is used instead of `struct`. +/// The syntax is similar to the `c_bitfield` macro, but each value has the +/// syntax `value = enumeration`. `enum` is used instead of `struct`. /// /// This will generate an `enum $t` as well as implement `TryFrom` on it which /// will return `Result<$t, ReprError>`. @@ -35,16 +35,22 @@ macro_rules! c_enum { ( $(#[$outer:meta])* - $vi:vis enum $t:ident: $ti:ident - { - $($(#[$vouter:meta])* $en:ident = $va:expr),+ $(,)? + $vi:vis enum $t:ident: $ti:ident { + $( + $(#[$inner:meta])* + $en:ident = $va:expr + ),+ + $(,)? } ) => { $(#[$outer])* #[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] #[repr($ti)] $vi enum $t { - $($(#[$vouter])* $en = $va,)+ + $( + $(#[$inner])* + $en = $va, + )+ } #[allow(unused_qualifications)] diff --git a/maraiah/lib.rs b/maraiah/lib.rs index 431320d..0f426ff 100644 --- a/maraiah/lib.rs +++ b/maraiah/lib.rs @@ -63,16 +63,14 @@ #![deny(clippy::use_self)] #![deny(clippy::used_underscore_binding)] -#[macro_use] -mod doc; -#[macro_use] -pub mod ffi; -#[macro_use] -pub mod err; -#[macro_use] -mod cenum; -#[macro_use] -pub mod bin; +#[macro_use] extern crate bitflags; + +#[macro_use] mod cbitfield; +#[macro_use] mod cenum; +#[macro_use] mod doc; +#[macro_use] pub mod err; +#[macro_use] pub mod ffi; +#[macro_use] pub mod bin; pub mod bit; pub mod cksum; diff --git a/maraiah/map/bonk.rs b/maraiah/map/bonk.rs index ec21efa..209f8e8 100644 --- a/maraiah/map/bonk.rs +++ b/maraiah/map/bonk.rs @@ -1,7 +1,6 @@ //! `SoundRand` type. use crate::{err::*, fixed::{Angle, Fixed}}; -use bitflags::bitflags; /// Reads a `bonk` chunk. pub fn read(b: &[u8]) -> ResultS<(SoundRand, usize)> @@ -41,12 +40,12 @@ pub struct SoundRand { pub pit_dta: Fixed, } -bitflags! { +c_bitfield! { /// Flags for `SoundRand`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct SoundRandFlags: u16 { - const NO_DIRECTION = 1; - const _2 = 2; + NO_DIRECTION = 0, + _2 = 1, } } diff --git a/maraiah/map/damg.rs b/maraiah/map/damg.rs index 83cbbac..f485b7a 100644 --- a/maraiah/map/damg.rs +++ b/maraiah/map/damg.rs @@ -1,7 +1,6 @@ //! `Damage` type. use crate::{err::*, fixed::Fixed}; -use bitflags::bitflags; /// Reads a `Damage` object. pub fn read(b: &[u8]) -> ResultS @@ -30,42 +29,42 @@ pub struct Damage { pub scale: Fixed, } -bitflags! { +c_bitfield! { /// The composite type of damage taken by something. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct DamageTypeFlags: u32 { - const EXPLOSION = 1; - const ELECTRICAL_STAFF = 1 << 1; - const PROJECTILE = 1 << 2; - const ABSORBED = 1 << 3; - const FLAME = 1 << 4; - const HOUND_CLAWS = 1 << 5; - const ALIEN_PROJECTILE = 1 << 6; - const HULK_SLAP = 1 << 7; - const COMPILER_BOLT = 1 << 8; - const FUSION_BOLT = 1 << 9; - const HUNTER_BOLT = 1 << 10; - const FIST = 1 << 11; - const TELEPORTER = 1 << 12; - const DEFENDER = 1 << 13; - const YETI_CLAWS = 1 << 14; - const YETI_PROJECTILE = 1 << 15; - const CRUSHING = 1 << 16; - const LAVA = 1 << 17; - const SUFFOCATION = 1 << 18; - const GOO = 1 << 19; - const ENERGY_DRAIN = 1 << 20; - const OXYGEN_DRAIN = 1 << 21; - const HUMMER_BOLT = 1 << 22; - const SHOTGUN_PROJECTILE = 1 << 23; + EXPLOSION = 0, + ELECTRICAL_STAFF = 1, + PROJECTILE = 2, + ABSORBED = 3, + FLAME = 4, + HOUND_CLAWS = 5, + ALIEN_PROJECTILE = 6, + HULK_SLAP = 7, + COMPILER_BOLT = 8, + FUSION_BOLT = 9, + HUNTER_BOLT = 10, + FIST = 11, + TELEPORTER = 12, + DEFENDER = 13, + YETI_CLAWS = 14, + YETI_PROJECTILE = 15, + CRUSHING = 16, + LAVA = 17, + SUFFOCATION = 18, + GOO = 19, + ENERGY_DRAIN = 20, + OXYGEN_DRAIN = 21, + HUMMER_BOLT = 22, + SHOTGUN_PROJECTILE = 23, } } -bitflags! { +c_bitfield! { /// Flags for `Damage`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct DamageFlags: u16 { - const ALIEN = 1; + ALIEN = 0, } } diff --git a/maraiah/map/epnt.rs b/maraiah/map/epnt.rs index 6b6414f..0d44b5f 100644 --- a/maraiah/map/epnt.rs +++ b/maraiah/map/epnt.rs @@ -2,7 +2,6 @@ use super::pnts; use crate::{err::*, fixed::Unit}; -use bitflags::bitflags; /// Reads an `EPNT` chunk. pub fn read(b: &[u8]) -> ResultS<(Endpoint, usize)> @@ -37,13 +36,13 @@ pub struct Endpoint { pub support: u16, } -bitflags! { +c_bitfield! { /// Flags for `Endpoint`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct EndpointFlags: u16 { - const SOLID = 1; - const SAME_HEIGHT = 1 << 1; - const TRANSPARENT = 1 << 2; + SOLID = 0, + SAME_HEIGHT = 1, + TRANSPARENT = 2, } } diff --git a/maraiah/map/fxpx.rs b/maraiah/map/fxpx.rs index 48e1b36..e0f7e0b 100644 --- a/maraiah/map/fxpx.rs +++ b/maraiah/map/fxpx.rs @@ -1,7 +1,6 @@ //! `Effect` type. use crate::{bin::OptU16, err::*, fixed::Fixed}; -use bitflags::bitflags; /// Reads a `FXpx` chunk. pub fn read(b: &[u8]) -> ResultS<(Effect, usize)> @@ -32,15 +31,15 @@ pub struct Effect { pub delay_snd: OptU16, } -bitflags! { +c_bitfield! { /// Flags for an effect. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct EffectFlags: u16 { - const END_ON_LOOP = 1; - const END_ON_XFER_LOOP = 1 << 1; - const SOUND_ONLY = 1 << 2; - const MAKE_TWIN_VISIBLE = 1 << 3; - const MEDIA_EFFECT = 1 << 4; + END_ON_LOOP = 0, + END_ON_XFER_LOOP = 1, + SOUND_ONLY = 2, + MAKE_TWIN_VISIBLE = 3, + MEDIA_EFFECT = 4, } } diff --git a/maraiah/map/lins.rs b/maraiah/map/lins.rs index 5fb2c59..9547217 100644 --- a/maraiah/map/lins.rs +++ b/maraiah/map/lins.rs @@ -1,7 +1,6 @@ //! `Line` type. use crate::{bin::OptU16, err::*}; -use bitflags::bitflags; /// Reads a `LINS` chunk. pub fn read(b: &[u8]) -> ResultS<(Line, usize)> @@ -34,16 +33,16 @@ pub struct Line { pub poly_bk: OptU16, } -bitflags! { +c_bitfield! { /// Flags for `Line`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct LineFlags: u16 { - const TRANS_SIDE = 1 << 9; - const ELEV_VAR = 1 << 10; - const ELEVATION = 1 << 11; - const LANDSCAPE = 1 << 12; - const TRANSPARENT = 1 << 13; - const SOLID = 1 << 14; + TRANS_SIDE = 9, + ELEV_VAR = 10, + ELEVATION = 11, + LANDSCAPE = 12, + TRANSPARENT = 13, + SOLID = 14, } } diff --git a/maraiah/map/lite.rs b/maraiah/map/lite.rs index 668eae7..db98254 100644 --- a/maraiah/map/lite.rs +++ b/maraiah/map/lite.rs @@ -2,7 +2,6 @@ use super::{ltfn, TICKS_PER_SECOND}; use crate::{err::*, fixed::Fixed}; -use bitflags::bitflags; /// Reads a `LITE` chunk. pub fn read(b: &[u8]) -> ResultS<(Light, usize)> @@ -86,13 +85,13 @@ pub struct Light { pub tag: u16, } -bitflags! { +c_bitfield! { /// Flags for `Light`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct LightFlags: u16 { - const INIT_ACTIVE = 1; - const SLAVE_VALUE = 1 << 1; - const STATELESS = 1 << 2; + INIT_ACTIVE = 0, + SLAVE_VALUE = 1, + STATELESS = 2, } } diff --git a/maraiah/map/medi.rs b/maraiah/map/medi.rs index 16cedc4..4db8347 100644 --- a/maraiah/map/medi.rs +++ b/maraiah/map/medi.rs @@ -5,7 +5,6 @@ use crate::{bin::OptU16, err::*, fixed::{Angle, Fixed, Unit}, xfer::TransferMode}; -use bitflags::bitflags; /// Reads a `medi` chunk. pub fn read(b: &[u8]) -> ResultS<(Media, usize)> @@ -61,11 +60,11 @@ c_enum! { } } -bitflags! { +c_bitfield! { /// Flags for `Media`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct MediaFlags: u8 { - const OBSTRUCT = 1; + OBSTRUCT = 0, } } diff --git a/maraiah/map/minf.rs b/maraiah/map/minf.rs index 79cae23..4b92a00 100644 --- a/maraiah/map/minf.rs +++ b/maraiah/map/minf.rs @@ -1,7 +1,6 @@ //! `Info` type. use crate::{err::*, text::*}; -use bitflags::bitflags; /// Reads a `Minf` chunk. pub fn read(b: &[u8]) -> ResultS @@ -81,51 +80,51 @@ pub struct Info { pub level_name: String, } -bitflags! { +c_bitfield! { /// Static environment flags. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct EnvironmentFlags: u16 { - const VACUUM = 1; - const MAGNETIC = 1 << 1; - const REBELLION = 1 << 2; - const LOW_GRAV = 1 << 3; - const M1_GLUE = 1 << 4; - const LAVA_FLOOR = 1 << 5; - const REBELLION2 = 1 << 6; - const MUSIC = 1 << 7; - const TERM_PAUSE = 1 << 8; - const M1_MONSTER = 1 << 9; - const M1_WEPS = 1 << 10; + VACUUM = 0, + MAGNETIC = 1, + REBELLION = 2, + LOW_GRAV = 3, + M1_GLUE = 4, + LAVA_FLOOR = 5, + REBELLION2 = 6, + MUSIC = 7, + TERM_PAUSE = 8, + M1_MONSTER = 9, + M1_WEPS = 10, } } -bitflags! { +c_bitfield! { /// Static entry point flags. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct EntryFlags: u32 { - const SOLO = 1; - const CO_OP = 1 << 1; - const CARNAGE = 1 << 2; - const KTMWTB = 1 << 3; - const KOTH = 1 << 4; - const DEFENSE = 1 << 5; - const RUGBY = 1 << 6; - const CTF = 1 << 7; + SOLO = 0, + CO_OP = 1, + CARNAGE = 2, + KTMWTB = 3, + KOTH = 4, + DEFENSE = 5, + RUGBY = 6, + CTF = 7, } } -bitflags! { +c_bitfield! { /// Static mission flags. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct MissionFlags: u16 { - const EXTERMINATION = 1; - const EXPLORATION = 1 << 1; - const RETRIEVAL = 1 << 2; - const REPAIR = 1 << 3; - const RESCUE = 1 << 4; - const M1_EXPLORATION = 1 << 5; - const M1_RESCUE = 1 << 6; - const M1_REPAIR = 1 << 7; + EXTERMINATION = 0, + EXPLORATION = 1, + RETRIEVAL = 2, + REPAIR = 3, + RESCUE = 4, + M1_EXPLORATION = 5, + M1_RESCUE = 6, + M1_REPAIR = 7, } } diff --git a/maraiah/map/mnpx.rs b/maraiah/map/mnpx.rs index 267b10b..c16e196 100644 --- a/maraiah/map/mnpx.rs +++ b/maraiah/map/mnpx.rs @@ -1,7 +1,6 @@ //! `Monster` type. use crate::{bin::OptU16, err::*, fixed::{Fixed, Unit}}; -use bitflags::bitflags; use super::{attk, damg}; @@ -140,61 +139,61 @@ pub struct Monster { pub atk_range: attk::Attack, } -bitflags! { +c_bitfield! { /// Flags for a monster. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct MonsterFlags: u32 { - const IGNORE_LOS = 1; - const FLYING = 1 << 1; - const ALIEN = 1 << 2; - const MAJOR = 1 << 3; - const MINOR = 1 << 4; - const NO_OMIT = 1 << 5; - const FLOATS = 1 << 6; - const NO_ATTACK = 1 << 7; - const SNIPE = 1 << 8; - const INVISIBLE = 1 << 9; - const SUBTLY_INVISIBLE = 1 << 10; - const KAMIKAZE = 1 << 11; - const BERSERKER = 1 << 12; - const ENLARGED = 1 << 13; - const DELAYED_DEATH = 1 << 14; - const FIRE_SYMMETRICAL = 1 << 15; - const NUCLEAR_DEATH = 1 << 16; - const NO_FIRE_BACKWARDS = 1 << 17; - const CAN_DIE_IN_FLAMES = 1 << 18; - const WAIT_FOR_GOOD_SHOT = 1 << 19; - const TINY = 1 << 20; - const FAST_ATTACK = 1 << 21; - const LIKES_WATER = 1 << 22; - const LIKES_SEWAGE = 1 << 23; - const LIKES_LAVA = 1 << 24; - const LIKES_GOO = 1 << 25; - const TELE_UNDER_MEDIA = 1 << 26; - const USE_RANDOM_WEAPON = 1 << 27; + IGNORE_LOS = 0, + FLYING = 1, + ALIEN = 2, + MAJOR = 3, + MINOR = 4, + NO_OMIT = 5, + FLOATS = 6, + NO_ATTACK = 7, + SNIPE = 8, + INVISIBLE = 9, + SUBTLY_INVISIBLE = 10, + KAMIKAZE = 11, + BERSERKER = 12, + ENLARGED = 13, + DELAYED_DEATH = 14, + FIRE_SYMMETRICAL = 15, + NUCLEAR_DEATH = 16, + NO_FIRE_BACKWARDS = 17, + CAN_DIE_IN_FLAMES = 18, + WAIT_FOR_GOOD_SHOT = 19, + TINY = 20, + FAST_ATTACK = 21, + LIKES_WATER = 22, + LIKES_SEWAGE = 23, + LIKES_LAVA = 24, + LIKES_GOO = 25, + TELE_UNDER_MEDIA = 26, + USE_RANDOM_WEAPON = 27, } } -bitflags! { +c_bitfield! { /// The composite type of a monster. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct MonsterClass: u32 { - const PLAYER = 1; - const CIVILIAN = 1 << 1; - const MADD = 1 << 2; - const POSSESSED_HUMMER = 1 << 3; - const DEFENDER = 1 << 4; - const FIGHTER = 1 << 5; - const TROOPER = 1 << 6; - const HUNTER = 1 << 7; - const ENFORCER = 1 << 8; - const JUGGERNAUT = 1 << 9; - const HUMMER = 1 << 10; - const COMPILER = 1 << 11; - const CYBORG = 1 << 12; - const ASSIMILATED = 1 << 13; - const TICK = 1 << 14; - const YETI = 1 << 15; + PLAYER = 0, + CIVILIAN = 1, + MADD = 2, + POSSESSED_HUMMER = 3, + DEFENDER = 4, + FIGHTER = 5, + TROOPER = 6, + HUNTER = 7, + ENFORCER = 8, + JUGGERNAUT = 9, + HUMMER = 10, + COMPILER = 11, + CYBORG = 12, + ASSIMILATED = 13, + TICK = 14, + YETI = 15, } } diff --git a/maraiah/map/objs.rs b/maraiah/map/objs.rs index 6018c47..21a33ed 100644 --- a/maraiah/map/objs.rs +++ b/maraiah/map/objs.rs @@ -1,7 +1,6 @@ //! `Object` type. use crate::{err::*, fixed::{Angle, Unit}}; -use bitflags::bitflags; /// Reads an `OBJS` chunk. pub fn read(b: &[u8]) -> ResultS<(Object, usize)> @@ -42,16 +41,16 @@ pub struct Object { pub bias: u16, } -bitflags! { +c_bitfield! { /// Flags for `Object`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct ObjectFlags: u16 { - const INVISIBLE = 1; - const CEILING = 1 << 1; - const BLIND = 1 << 2; - const DEAF = 1 << 3; - const FLOATING = 1 << 4; - const NET_ONLY = 1 << 5; + INVISIBLE = 0, + CEILING = 1, + BLIND = 2, + DEAF = 3, + FLOATING = 4, + NET_ONLY = 5, } } diff --git a/maraiah/map/plac.rs b/maraiah/map/plac.rs index b071ef7..95c759b 100644 --- a/maraiah/map/plac.rs +++ b/maraiah/map/plac.rs @@ -1,7 +1,6 @@ //! `ObjectFreq` type. use crate::err::*; -use bitflags::bitflags; /// Reads a `plac` chunk. pub fn read(b: &[u8]) -> ResultS<(ObjectFreq, usize)> @@ -32,15 +31,15 @@ pub struct ObjectFreq { pub chance: u16, } -bitflags! { +c_bitfield! { /// Flags for `ObjectFreq`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct ObjectFreqFlags: u16 { - const RANDOM_LOCATION = 1; - const _3 = 1 << 3; - const _4 = 1 << 4; - const _5 = 1 << 5; - const _6 = 1 << 6; + RANDOM_LOCATION = 0, + _3 = 3, + _4 = 4, + _5 = 5, + _6 = 6, } } diff --git a/maraiah/map/plat.rs b/maraiah/map/plat.rs index ae3a4b2..b276778 100644 --- a/maraiah/map/plat.rs +++ b/maraiah/map/plat.rs @@ -1,7 +1,6 @@ //! `Platform` type. use crate::{err::*, fixed::Unit}; -use bitflags::bitflags; /// Reads a `plat` chunk. pub fn read(b: &[u8]) -> ResultS<(Platform, usize)> @@ -36,37 +35,37 @@ pub struct Platform { pub tag: u16, } -bitflags! { +c_bitfield! { /// Flags for `Platform`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct PlatformFlags: u32 { - const INIT_ACTIVE = 1; - const INIT_EXTENDED = 1 << 1; - const STOP_AT_EACH_LEVEL = 1 << 2; - const STOP_AT_INIT_LEVEL = 1 << 3; - const START_ADJ_ON_STOP = 1 << 4; - const EXTENDS_FLOOR_TO_CEIL = 1 << 5; - const COMES_FROM_FLOOR = 1 << 6; - const COMES_FROM_CEIL = 1 << 7; - const CAUSES_DAMAGE = 1 << 8; - const NO_ACTIVATE_PARENT = 1 << 9; - const ACTIVATES_ONCE = 1 << 10; - const ACTIVATES_LIGHT = 1 << 11; - const DEACTIVATES_LIGHT = 1 << 12; - const PLAYER_CONTROLS = 1 << 13; - const MONSTER_CONTROLS = 1 << 14; - const REVERSE_ON_OBSTRUCT = 1 << 15; - const NO_EXT_DEACTIVATION = 1 << 16; - const USE_POLYGON_HEIGHTS = 1 << 17; - const DELAYED_ACTIVATION = 1 << 18; - const START_ADJ_ON_START = 1 << 19; - const STOP_ADJ_ON_START = 1 << 20; - const STOP_ADJ_ON_STOP = 1 << 21; - const SLOW = 1 << 22; - const START_AT_EACH_LEVEL = 1 << 23; - const LOCKED = 1 << 24; - const SECRET = 1 << 25; - const DOOR = 1 << 26; + INIT_ACTIVE = 0, + INIT_EXTENDED = 1, + STOP_AT_EACH_LEVEL = 2, + STOP_AT_INIT_LEVEL = 3, + START_ADJ_ON_STOP = 4, + EXTENDS_FLOOR_TO_CEIL = 5, + COMES_FROM_FLOOR = 6, + COMES_FROM_CEIL = 7, + CAUSES_DAMAGE = 8, + NO_ACTIVATE_PARENT = 9, + ACTIVATES_ONCE = 10, + ACTIVATES_LIGHT = 11, + DEACTIVATES_LIGHT = 12, + PLAYER_CONTROLS = 13, + MONSTER_CONTROLS = 14, + REVERSE_ON_OBSTRUCT = 15, + NO_EXT_DEACTIVATION = 16, + USE_POLYGON_HEIGHTS = 17, + DELAYED_ACTIVATION = 18, + START_ADJ_ON_START = 19, + STOP_ADJ_ON_START = 20, + STOP_ADJ_ON_STOP = 21, + SLOW = 22, + START_AT_EACH_LEVEL = 23, + LOCKED = 24, + SECRET = 25, + DOOR = 26, } } diff --git a/maraiah/map/poly.rs b/maraiah/map/poly.rs index f543dd3..5516ad4 100644 --- a/maraiah/map/poly.rs +++ b/maraiah/map/poly.rs @@ -2,7 +2,6 @@ use super::pnts; use crate::{bin::OptU16, err::*, fixed::Unit, xfer::TransferMode}; -use bitflags::bitflags; /// Reads a polygon for either M1 or M2. pub fn read_poly_inter(b: &[u8]) -> ResultS @@ -180,11 +179,11 @@ pub enum PolygonType { GlueSuper, } -bitflags! { +c_bitfield! { /// Flags for `Polygon`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct PolygonFlags: u16 { - const DETACHED = 1 << 14; + DETACHED = 14, } } diff --git a/maraiah/map/prpx.rs b/maraiah/map/prpx.rs index 1b1a607..9a9108d 100644 --- a/maraiah/map/prpx.rs +++ b/maraiah/map/prpx.rs @@ -1,7 +1,6 @@ //! `Projectile` type. use crate::{bin::OptU16, err::*, fixed::{Fixed, Unit}}; -use bitflags::bitflags; use super::damg; @@ -58,32 +57,32 @@ pub struct Projectile { pub snd_bounce: OptU16, } -bitflags! { +c_bitfield! { /// Flags for a projectile. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct ProjectileFlags: u32 { - const GUIDED = 1; - const STOP_ON_LOOP = 1 << 1; - const PERSISTENT = 1 << 2; - const ALIEN = 1 << 3; - const GRAVITY = 1 << 4; - const NO_HORZ_ERROR = 1 << 5; - const NO_VERT_ERROR = 1 << 6; - const TOGGLE_PANELS = 1 << 7; - const POS_VERT_ERROR = 1 << 8; - const MELEE = 1 << 9; - const RIPPER = 1 << 10; - const PASS_TRANS_RANDOM = 1 << 11; - const PASS_TRANS_MORE = 1 << 12; - const DOUBLE_GRAVITY = 1 << 13; - const REBOUND_FLOOR = 1 << 14; - const THROUGH_MEDIA = 1 << 15; - const BECOME_ITEM = 1 << 16; - const BLOODY = 1 << 17; - const WANDER_HORZ = 1 << 18; - const WANDER_VERT = 1 << 19; - const USE_LOW_GRAV = 1 << 20; - const PASS_MEDIA = 1 << 21; + GUIDED = 0, + STOP_ON_LOOP = 1, + PERSISTENT = 2, + ALIEN = 3, + GRAVITY = 4, + NO_HORZ_ERROR = 5, + NO_VERT_ERROR = 6, + TOGGLE_PANELS = 7, + POS_VERT_ERROR = 8, + MELEE = 9, + RIPPER = 10, + PASS_TRANS_RANDOM = 11, + PASS_TRANS_MORE = 12, + DOUBLE_GRAVITY = 13, + REBOUND_FLOOR = 14, + THROUGH_MEDIA = 15, + BECOME_ITEM = 16, + BLOODY = 17, + WANDER_HORZ = 18, + WANDER_VERT = 19, + USE_LOW_GRAV = 20, + PASS_MEDIA = 21, } } diff --git a/maraiah/map/sids.rs b/maraiah/map/sids.rs index cc66c05..86316de 100644 --- a/maraiah/map/sids.rs +++ b/maraiah/map/sids.rs @@ -2,7 +2,6 @@ use super::stex; use crate::{bin::OptU16, err::*, fixed::Fixed, xfer::TransferMode}; -use bitflags::bitflags; /// Reads a `SIDS` chunk. pub fn read(b: &[u8]) -> ResultS<(Side, usize)> @@ -55,18 +54,18 @@ pub struct Side { pub shade: Fixed, } -bitflags! { +c_bitfield! { /// Flags for `Side`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct SideFlags: u8 { - const STATUS = 1; - const PANEL = 1 << 1; - const REPAIR = 1 << 2; - const ITEM_USE = 1 << 3; - const LIGHTED = 1 << 4; - const CAN_DESTROY = 1 << 5; - const HIT_ONLY = 1 << 6; - const ITEM_OPT = 1 << 7; + STATUS = 0, + PANEL = 1, + REPAIR = 2, + ITEM_USE = 3, + LIGHTED = 4, + CAN_DESTROY = 5, + HIT_ONLY = 6, + ITEM_OPT = 7, } } diff --git a/maraiah/map/trmg.rs b/maraiah/map/trmg.rs index 1486a40..f960453 100644 --- a/maraiah/map/trmg.rs +++ b/maraiah/map/trmg.rs @@ -1,7 +1,6 @@ //! `Group` type. use crate::err::*; -use bitflags::bitflags; /// Reads an `InterGroup`. pub fn read(b: &[u8]) -> ResultS<(InterGroup, usize)> @@ -89,14 +88,14 @@ pub enum GroupType { Tag(u16), } -bitflags! { +c_bitfield! { /// Flags for `Group`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct GroupFlags: u16 { /// Draws the picture on the right. - const DRAW_ON_RIGHT = 1; + DRAW_ON_RIGHT = 0, /// Draws the picture in the center. - const DRAW_CENTER = 1 << 1; + DRAW_CENTER = 1, } } diff --git a/maraiah/map/wppx.rs b/maraiah/map/wppx.rs index b62dfe1..c296547 100644 --- a/maraiah/map/wppx.rs +++ b/maraiah/map/wppx.rs @@ -1,7 +1,6 @@ //! `Weapon` type. use crate::{bin::OptU16, err::*, fixed::Fixed}; -use bitflags::bitflags; use super::trig; @@ -76,21 +75,21 @@ pub struct Weapon { pub wid_idle: Fixed, } -bitflags! { +c_bitfield! { /// Flags for a weapon. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct WeaponFlags: u16 { - const AUTOMATIC = 1; - const REMOVE_AFTER_USE = 1 << 1; - const INSTANT_CASING = 1 << 2; - const OVERLOADS = 1 << 3; - const RANDOM_AMMO = 1 << 4; - const TEMPORARY_POWER = 1 << 5; - const RELOAD_ONE_HAND = 1 << 6; - const FIRE_OUT_OF_PHASE = 1 << 7; - const FIRE_UNDER_MEDIA = 1 << 8; - const TRIGGER_SAME_AMMO = 1 << 9; - const SECONDARY_FLIP = 1 << 10; + AUTOMATIC = 0, + REMOVE_AFTER_USE = 1, + INSTANT_CASING = 2, + OVERLOADS = 3, + RANDOM_AMMO = 4, + TEMPORARY_POWER = 5, + RELOAD_ONE_HAND = 6, + FIRE_OUT_OF_PHASE = 7, + FIRE_UNDER_MEDIA = 8, + TRIGGER_SAME_AMMO = 9, + SECONDARY_FLIP = 10, } } diff --git a/maraiah/shp/bmap.rs b/maraiah/shp/bmap.rs index 73f065b..9223358 100644 --- a/maraiah/shp/bmap.rs +++ b/maraiah/shp/bmap.rs @@ -2,7 +2,6 @@ use crate::{err::*, image::Image}; use super::clut; -use bitflags::bitflags; /// Reads a `Bitmap`. pub fn read(b: &[u8]) -> ResultS @@ -130,10 +129,10 @@ pub struct ImageShp<'a, 'b> { clut: &'b [clut::ColorShp], } -bitflags! { - struct BmpFlags: u16 { - const TRANSPARENT = 1 << 14; - const COLUMN_MAJOR = 1 << 15; +c_bitfield! { + pub struct BmpFlags: u16 { + TRANSPARENT = 14, + COLUMN_MAJOR = 15, } } diff --git a/maraiah/shp/fram.rs b/maraiah/shp/fram.rs index f299322..b3ab059 100644 --- a/maraiah/shp/fram.rs +++ b/maraiah/shp/fram.rs @@ -1,7 +1,6 @@ //! Shapes file frame type. use crate::{err::*, fixed::*}; -use bitflags::bitflags; /// Reads a `Frame`. pub fn read(b: &[u8]) -> ResultS @@ -55,16 +54,16 @@ pub struct Frame { pub wrl_y: Unit, } -bitflags! { +c_bitfield! { /// Flags for `Frame`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct FrameFlags: u16 { /// The player's torso will obscure the player's legs. - const OBSCURE = 1 << 13; + OBSCURE = 13, /// The bitmap will be flipped on the vertical axis. - const FLIP_Y = 1 << 14; + FLIP_Y = 14, /// The bitmap will be flipped on the horizontal axis. - const FLIP_X = 1 << 15; + FLIP_X = 15, } } diff --git a/maraiah/snd/defs.rs b/maraiah/snd/defs.rs index 5db50e8..194eb9c 100644 --- a/maraiah/snd/defs.rs +++ b/maraiah/snd/defs.rs @@ -1,7 +1,6 @@ //! Sounds format definition type. use crate::{bin::{u32b, usize_from_u32}, err::*, fixed::*, sound::Sound16}; -use bitflags::bitflags; /// Reads a sound definition. pub fn read(b: &[u8]) -> ResultS, u16, SoundDef)>> @@ -63,24 +62,24 @@ pub struct SoundDef { pub sounds: Vec, } -bitflags! { +c_bitfield! { /// Flags for `SoundDef`. #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct SoundFlags: u16 { /// The sound will not restart when trying to play over itself. - const NO_RESTART = 1; + NO_RESTART = 0, /// The sound will not switch channels when trying to play over itself. - const NO_CHANNEL_SWITCH = 1 << 1; + NO_CHANNEL_SWITCH = 1, /// The pitch variance will be halved. - const LESS_PITCH_CHANGE = 1 << 2; + LESS_PITCH_CHANGE = 2, /// The pitch variance will be nullified. - const NO_PITCH_CHANGE = 1 << 3; + NO_PITCH_CHANGE = 3, /// The sound will play even when completely obstructed by walls. - const NO_OBSTRUCTION = 1 << 4; + NO_OBSTRUCTION = 4, /// The sound will play even when completely obstructed by media. - const NO_MEDIA_OBSTRUCT = 1 << 5; + NO_MEDIA_OBSTRUCT = 5, /// The sound will have special stereo effects. - const AMBIENT = 1 << 6; + AMBIENT = 6, } }