mindustry logic execution, map- and schematic- parsing and rendering
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
//! grass
use crate::block::make_register;
use crate::block::simple::make_simple;
use crate::data::renderer::*;
use tinyrand::{Rand, RandRange, Seeded, StdRand};
use tinyrand_std::clock_seed::ClockSeed;

macro_rules! register_env {
    ($($field:literal: $size:literal @ $variations:literal;)+) => {
        make_register!(
            $($field => EnvironmentBlock::new($size, true, &[]);)*
        );

        make_simple!(EnvironmentBlock, |_, _, name, _| {
            let mut rand = StdRand::seed(ClockSeed::default().next_u64());
            match name {
                $($field => {
                    #[allow(clippy::reversed_empty_ranges)]
                    if $variations == 1 { Some(ImageHolder::Borrow(load("environment", $field).unwrap())) }
                    else if $variations == 0 { return None }
                    else { Some(ImageHolder::Borrow(load("environment", &format!("{}{}", $field, rand.next_range(1usize..$variations))).unwrap())) }
                   },)*
                _ => { unreachable!() }
            }
          });
    };
}

register_env! {
    "build1": 1@0;
    "build2": 1@0;
    "build3": 1@0;
    "arkycite-floor": 1@1;
    "arkyic-stone": 1@3;
    "arkyic-vent": 3@2;
    "arkyic-wall-large": 2@1;
    "arkyic-wall": 1@3;
    "basalt": 1@3;
    "beryllic-stone-wall-large": 2@1;
    "beryllic-stone-wall": 1@2;
    "beryllic-stone": 1@4;
    "bluemat": 1@3;
    "carbon-stone": 1@4;
    "carbon-vent": 3@2;
    "carbon-wall-large": 2@1;
    "carbon-wall": 1@2;
    "char": 1@3;
    "cliff": 1@7;
    "core-zone": 1@1;
    "crater-stone": 1@6;
    "crystal-floor": 1@4;
    "crystalline-stone-wall-large": 2@1;
    "crystalline-stone-wall": 1@4;
    "crystalline-stone": 1@5;
    "crystalline-vent": 3@2;
    "dacite-wall-large": 2@1;
    "dacite-wall": 1@2;
    "dacite": 1@3;
    "dark-metal-large": 2@1;
    "dark-metal": 1@2;
    "dark-panel-1": 1@1;
    "dark-panel-2": 1@1;
    "dark-panel-3": 1@1;
    "dark-panel-4": 1@1;
    "dark-panel-5": 1@1;
    "dark-panel-6": 1@1;
    "metal-floor": 1@1;
    "metal-floor-2": 1@1;
    "metal-floor-3": 1@1;
    "metal-floor-4": 1@1;
    "metal-floor-5": 1@1;
    "metal-floor-damaged": 1@3;
    "darksand-tainted-water": 1@1;
    "darksand-water": 1@1;
    "darksand": 1@3;
    "deep-tainted-water": 1@1;
    "deep-water": 1@1;
    "dense-red-stone": 1@4;
    "dirt-wall-large": 2@1;
    "dirt-wall": 1@2;
    "dirt": 1@3;
    "dune-wall-large": 2@1;
    "dune-wall": 1@2;
    "ferric-craters": 1@3; // ferris section
    "ferric-stone-wall-large": 2@1;
    "ferric-stone-wall": 1@2;
    "ferric-stone": 1@4;
    "graphite-wall-large": 2@1;
    "graphite-wall": 1@3;
    "grass": 1@3;
    "hotrock": 1@3;
    "ice-snow": 1@3;
    "ice-wall-large": 2@1;
    "ice-wall": 1@2;
    "ice": 1@3;
    "magmarock": 1@3;
    "molten-slag": 1@1;
    "moss": 1@3;
    "mud": 1@3;
    "ore-beryllium": 1@3;
    "ore-coal": 1@3;
    "ore-copper": 1@3;
    "ore-crystal-thorium": 1@3;
    "ore-lead": 1@3;
    "ore-scrap": 1@3;
    "ore-thorium": 1@3;
    "ore-titanium": 1@3;
    "ore-tungsten": 1@3;
    "ore-wall-beryllium": 1@3;
    "ore-wall-thorium": 1@3;
    "ore-wall-tungsten": 1@3;
    "pebbles": 1@3;
    "pine": 1@1;
    "pooled-cryofluid": 1@1;
    "red-diamond-wall": 1@3;
    "red-ice-wall-large": 2@1;
    "red-ice": 1@3;
    "red-stone-vent": 3@2;
    "red-stone-wall-large": 2@1;
    "red-stone-wall": 1@3;
    "red-stone": 1@4;
    "redmat": 1@3;
    "regolith-wall-large": 2@1;
    "regolith": 1@3;
    "rhyolite-crater": 1@3;
    "rhyolite-vent": 3@2;
    "rhyolite-wall-large": 2@1;
    "rhyolite-wall": 1@2;
    "rhyolite": 1@3;
    "rough-rhyolite": 1@3;
    "salt-wall-large": 2@1;
    "salt-wall": 1@2;
    "salt": 1@1;
    "sand-floor": 1@3;
    "sand-wall-large": 2@1;
    "sand-wall": 1@2;
    "sand-water": 1@1;
    "shale-wall-large": 2@1;
    "shale-wall": 1@2;
    "shale": 1@3;
    "shallow-water": 1@1;
    "shrubs-large": 2@1;
    "shrubs": 1@2;
    "snow-pine": 1@1;
    "snow-wall-large": 2@1;
    "snow-wall": 1@2;
    "snow": 1@3;
    "space": 1@1;
    "spawn": 1@1;
    "spore-moss": 1@3;
    "spore-pine": 1@1;
    "spore-wall-large": 2@1;
    "spore-wall": 1@2;
    "stone-wall-large": 2@1;
    "stone-wall": 1@2;
    "stone": 1@3;
    "tainted-water": 1@1;
    "tar": 1@1;
    "yellow-stone-plates": 1@3;
    "yellow-stone-vent": 3@2;
    "yellow-stone-wall-large": 2@1;
    "yellow-stone-wall": 1@2;
    "yellow-stone": 1@3;
    // props
    "snow-boulder": 1@2;
    "shale-boulder": 1@2;
    "arkyic-boulder": 1@3;
    "basalt-boulder": 1@2;
    "beryllic-boulder": 1@2;
    "boulder": 1@2;
    "carbon-boulder": 1@2;
    "crystalline-boulder": 1@2;
    "dacite-boulder": 1@2;
    "ferric-boulder": 1@2;
    "red-ice-boulder": 1@3;
    "red-stone-boulder": 1@4;
    "rhyolite-boulder": 1@3;
    "sand-boulder": 1@2;
    "yellow-sand-boulder": 1@2;
    // these are tall but uh
    "crystal-blocks": 1@3;
    "crytal-cluster": 1@3;
    "crystal-orbs": 1@3;
}