plasma_prp/material/
state.rs1use std::io::Read;
8
9use anyhow::Result;
10
11use crate::resource::prp::PlasmaRead;
12
13#[derive(Debug, Clone, Copy, Default)]
15pub struct MatState {
16 pub blend_flags: u32,
17 pub clamp_flags: u32,
18 pub shade_flags: u32,
19 pub z_flags: u32,
20 pub misc_flags: u32,
21}
22
23impl MatState {
24 pub fn read(reader: &mut impl Read) -> Result<Self> {
25 Ok(Self {
26 blend_flags: reader.read_u32()?,
27 clamp_flags: reader.read_u32()?,
28 shade_flags: reader.read_u32()?,
29 z_flags: reader.read_u32()?,
30 misc_flags: reader.read_u32()?,
31 })
32 }
33}
34
35#[allow(dead_code)]
37pub mod blend {
38 pub const TEST: u32 = 0x1;
39 pub const ALPHA: u32 = 0x2;
40 pub const MULT: u32 = 0x4;
41 pub const ADD: u32 = 0x8;
42 pub const ADD_COLOR_TIMES_ALPHA: u32 = 0x10;
43 pub const ANTI_ALIAS: u32 = 0x20;
44 pub const DETAIL: u32 = 0x40;
45 pub const NO_COLOR: u32 = 0x80;
46 pub const MADD: u32 = 0x100;
47 pub const DOT3: u32 = 0x200;
48 pub const ADD_SIGNED: u32 = 0x400;
49 pub const ADD_SIGNED_2X: u32 = 0x800;
50 pub const MASK: u32 = 0xFFE;
51 pub const INVERT_ALPHA: u32 = 0x1000;
52 pub const INVERT_COLOR: u32 = 0x2000;
53 pub const ALPHA_MULT: u32 = 0x4000;
54 pub const ALPHA_ADD: u32 = 0x8000;
55 pub const NO_VTX_ALPHA: u32 = 0x10000;
56 pub const NO_TEX_COLOR: u32 = 0x20000;
57 pub const NO_TEX_ALPHA: u32 = 0x40000;
58 pub const INVERT_VTX_ALPHA: u32 = 0x80000;
59 pub const ALPHA_ALWAYS: u32 = 0x100000;
60 pub const INVERT_FINAL_COLOR: u32 = 0x200000;
61 pub const INVERT_FINAL_ALPHA: u32 = 0x400000;
62 pub const ENV_BUMP_NEXT: u32 = 0x800000;
63 pub const SUBTRACT: u32 = 0x1000000;
64 pub const REV_SUBTRACT: u32 = 0x2000000;
65 pub const ALPHA_TEST_HIGH: u32 = 0x4000000;
66 pub const ALPHA_PREMULTIPLIED: u32 = 0x8000000;
67}
68
69#[allow(dead_code)]
71pub mod clamp {
72 pub const TEXTURE_U: u32 = 0x1;
73 pub const TEXTURE_V: u32 = 0x2;
74 pub const TEXTURE: u32 = 0x3;
75}
76
77#[allow(dead_code)]
79pub mod shade {
80 pub const SOFT_SHADOW: u32 = 0x1;
81 pub const NO_PROJECTORS: u32 = 0x2;
82 pub const ENVIRON_MAP: u32 = 0x4;
83 pub const VERTEX_SHADE: u32 = 0x20;
84 pub const NO_SHADE: u32 = 0x40;
85 pub const SPECULAR: u32 = 0x80;
86 pub const WHITE: u32 = 0x200;
87 pub const SPECULAR_ALPHA: u32 = 0x400;
88 pub const SPECULAR_COLOR: u32 = 0x800;
89 pub const SPECULAR_HIGHLIGHT: u32 = 0x1000;
90 pub const VERT_COL_SHADE: u32 = 0x2000;
91 pub const INHERIT: u32 = 0x4000;
92 pub const IGNORE_VTX_ILLUM: u32 = 0x8000;
93 pub const EMISSIVE: u32 = 0x10000;
94 pub const REALLY_NO_FOG: u32 = 0x20000;
95}
96
97#[allow(dead_code)]
99pub mod z_flags {
100 pub const INC_LAYER: u32 = 0x1;
101 pub const CLEAR_Z: u32 = 0x4;
102 pub const NO_Z_READ: u32 = 0x8;
103 pub const NO_Z_WRITE: u32 = 0x10;
104 pub const Z_MASK: u32 = 0x1C;
105 pub const LOD_BIAS: u32 = 0x20;
106}
107
108#[allow(dead_code)]
110pub mod misc {
111 pub const WIRE_FRAME: u32 = 0x1;
112 pub const DRAW_MESH_OUTLINES: u32 = 0x2;
113 pub const TWO_SIDED: u32 = 0x4;
114 pub const DRAW_AS_SPLATS: u32 = 0x8;
115 pub const ADJUST_PLANE: u32 = 0x10;
116 pub const ADJUST_CYLINDER: u32 = 0x20;
117 pub const ADJUST_SPHERE: u32 = 0x40;
118 pub const ADJUST: u32 = 0x70;
119 pub const TROUBLED_LONER: u32 = 0x80;
120 pub const BIND_SKIP: u32 = 0x100;
121 pub const BIND_MASK: u32 = 0x200;
122 pub const BIND_NEXT: u32 = 0x400;
123 pub const LIGHT_MAP: u32 = 0x800;
124 pub const USE_REFLECTION_XFM: u32 = 0x1000;
125 pub const PERSP_PROJECTION: u32 = 0x2000;
126 pub const ORTHO_PROJECTION: u32 = 0x4000;
127 pub const PROJECTION: u32 = 0x6000;
128 pub const RESTART_PASS_HERE: u32 = 0x8000;
129 pub const BUMP_LAYER: u32 = 0x10000;
130 pub const BUMP_DU: u32 = 0x20000;
131 pub const BUMP_DV: u32 = 0x40000;
132 pub const BUMP_DW: u32 = 0x80000;
133 pub const BUMP_CHANS: u32 = 0xE0000;
134 pub const NO_SHADOW_ALPHA: u32 = 0x100000;
135 pub const USE_REFRACTION_XFM: u32 = 0x200000;
136 pub const CAM2_SCREEN: u32 = 0x400000;
137}