1use super::*;
2use crate::GridAtlas;
3
4impl From<GridCornerRMVX> for GridCompleteAtlas {
5 fn from(rpg: GridCornerRMVX) -> Self {
6 rpg.as_complete()
7 }
8}
9
10impl GridCornerRMVX {
11 pub fn as_complete(&self) -> GridCompleteAtlas {
21 const C: u32 = 24;
22 const L: u32 = 8;
23 let (w, h) = self.get_cell_size();
24 let mut output = RgbaImage::new(w * C, h * L);
25 for i in 0..C {
26 for j in 0..L {
27 let (x, y) = rpg4x6_to_complete(i, j);
28 let view = self.image.view(x * w, y * h, w, h);
29 output.copy_from(&*view, i * w, j * h).ok();
30 }
31 }
32 unsafe { GridCompleteAtlas::new(output) }
34 }
35}
36
37fn rpg4x6_to_complete(x: u32, y: u32) -> (u32, u32) {
38 match (x, y) {
39 (0, 0) => (0, 2),
41 (0, 1) => (0, 3),
42 (0, 2) => (0, 4),
43 (0, 3) => (0, 3),
44 (0, 4) => (0, 4),
45 (0, 5) => (0, 5),
46 (0, 6) => (0, 2),
47 (0, 7) => (0, 5),
48 (1, 0) => (3, 2),
50 (1, 1) => (3, 3),
51 (1, 2) => (3, 4),
52 (1, 3) => (3, 3),
53 (1, 4) => (3, 4),
54 (1, 5) => (3, 5),
55 (1, 6) => (3, 2),
56 (1, 7) => (3, 5),
57 (2, 0) => (0, 2),
59 (2, 1) => (0, 3),
60 (2, 2) => (0, 4),
61 (2, 3) => (0, 3),
62 (2, 4) => (0, 4),
63 (2, 5) => (0, 5),
64 (2, 6) => (0, 2),
65 (2, 7) => (0, 5),
66 (3, 0) => (1, 2),
68 (3, 1) => (3, 1),
69 (3, 2) => (3, 0),
70 (3, 3) => (3, 1),
71 (3, 4) => (3, 0),
72 (3, 5) => (1, 5),
73 (3, 6) => (1, 2),
74 (3, 7) => (1, 5),
75 (4, 0) => (2, 2),
77 (4, 1) => (2, 1),
78 (4, 2) => (2, 0),
79 (4, 3) => (2, 1),
80 (4, 4) => (2, 0),
81 (4, 5) => (2, 5),
82 (4, 6) => (2, 2),
83 (4, 7) => (2, 5),
84 (5, 0) => (1, 2),
86 (5, 1) => (3, 1),
87 (5, 2) => (3, 0),
88 (5, 3) => (3, 1),
89 (5, 4) => (3, 0),
90 (5, 5) => (1, 5),
91 (5, 6) => (1, 2),
92 (5, 7) => (1, 5),
93 (6, 0) => (2, 2),
95 (6, 1) => (2, 1),
96 (6, 2) => (2, 0),
97 (6, 3) => (2, 1),
98 (6, 4) => (2, 0),
99 (6, 5) => (2, 5),
100 (6, 6) => (2, 2),
101 (6, 7) => (2, 5),
102 (7, 0) => (3, 2),
104 (7, 1) => (3, 3),
105 (7, 2) => (3, 4),
106 (7, 3) => (3, 3),
107 (7, 4) => (3, 4),
108 (7, 5) => (3, 5),
109 (7, 6) => (3, 2),
110 (7, 7) => (3, 5),
111 (8, 0) => (2, 4),
113 (8, 1) => (2, 1),
114 (8, 2) => (0, 4),
115 (8, 3) => (0, 3),
116 (8, 4) => (0, 4),
117 (8, 5) => (0, 3),
118 (8, 6) => (2, 0),
119 (8, 7) => (2, 3),
120 (9, 0) => (3, 0),
122 (9, 1) => (3, 1),
123 (9, 2) => (3, 0),
124 (9, 3) => (1, 3),
125 (9, 4) => (1, 4),
126 (9, 5) => (3, 1),
127 (9, 6) => (3, 0),
128 (9, 7) => (3, 1),
129 (10, 0) => (2, 2),
131 (10, 1) => (2, 1),
132 (10, 2) => (2, 0),
133 (10, 3) => (2, 3),
134 (10, 4) => (2, 4),
135 (10, 5) => (2, 1),
136 (10, 6) => (2, 0),
137 (10, 7) => (2, 5),
138 (11, 0) => (1, 2),
140 (11, 1) => (1, 3),
141 (11, 2) => (1, 4),
142 (11, 3) => (1, 3),
143 (11, 4) => (1, 4),
144 (11, 5) => (1, 3),
145 (11, 6) => (1, 4),
146 (11, 7) => (1, 5),
147 (12, 0) => (2, 2),
149 (12, 1) => (2, 3),
150 (12, 2) => (2, 4),
151 (12, 3) => (2, 3),
152 (12, 4) => (2, 4),
153 (12, 5) => (2, 3),
154 (12, 6) => (2, 4),
155 (12, 7) => (2, 5),
156 (13, 0) => (1, 2),
158 (13, 1) => (3, 1),
159 (13, 2) => (3, 0),
160 (13, 3) => (1, 3),
161 (13, 4) => (1, 4),
162 (13, 5) => (3, 1),
163 (13, 6) => (3, 0),
164 (13, 7) => (1, 5),
165 (14, 0) => (2, 0),
167 (14, 1) => (2, 1),
168 (14, 2) => (2, 0),
169 (14, 3) => (2, 3),
170 (14, 4) => (2, 4),
171 (14, 5) => (2, 1),
172 (14, 6) => (2, 0),
173 (14, 7) => (2, 1),
174 (15, 0) => (1, 4),
176 (15, 1) => (3, 1),
177 (15, 2) => (3, 4),
178 (15, 3) => (3, 3),
179 (15, 4) => (3, 4),
180 (15, 5) => (3, 3),
181 (15, 6) => (3, 0),
182 (15, 7) => (1, 3),
183 (16, 0) => (0, 2),
185 (16, 1) => (0, 3),
186 (16, 2) => (0, 4),
187 (16, 3) => (0, 3),
188 (16, 4) => (2, 0),
189 (16, 5) => (2, 1),
190 (16, 6) => (0, 4),
191 (16, 7) => (0, 5),
192 (17, 0) => (1, 2),
194 (17, 1) => (1, 3),
195 (17, 2) => (1, 4),
196 (17, 3) => (1, 3),
197 (17, 4) => (1, 4),
198 (17, 5) => (1, 3),
199 (17, 6) => (1, 4),
200 (17, 7) => (1, 5),
201 (18, 0) => (2, 0),
203 (18, 1) => (2, 3),
204 (18, 2) => (2, 0),
205 (18, 3) => (2, 3),
206 (18, 4) => (2, 4),
207 (18, 5) => (2, 3),
208 (18, 6) => (2, 4),
209 (18, 7) => (2, 5),
210 (19, 0) => (3, 0),
212 (19, 1) => (1, 3),
213 (19, 2) => (1, 4),
214 (19, 3) => (3, 1),
215 (19, 4) => (1, 4),
216 (19, 5) => (1, 3),
217 (19, 6) => (1, 4),
218 (19, 7) => (1, 5),
219 (20, 0) => (2, 2),
221 (20, 1) => (2, 3),
222 (20, 2) => (0, 0),
223 (20, 3) => (0, 1),
224 (20, 4) => (2, 4),
225 (20, 5) => (2, 1),
226 (20, 6) => (2, 4),
227 (20, 7) => (2, 1),
228 (21, 0) => (1, 2),
230 (21, 1) => (1, 3),
231 (21, 2) => (1, 0),
232 (21, 3) => (1, 1),
233 (21, 4) => (3, 0),
234 (21, 5) => (1, 3),
235 (21, 6) => (1, 4),
236 (21, 7) => (3, 1),
237 (22, 0) => (2, 2),
239 (22, 1) => (2, 3),
240 (22, 2) => (2, 4),
241 (22, 3) => (2, 3),
242 (22, 4) => (2, 4),
243 (22, 5) => (2, 3),
244 (22, 6) => (2, 4),
245 (22, 7) => (2, 5),
246 (23, 0) => (3, 2),
248 (23, 1) => (3, 3),
249 (23, 2) => (3, 0),
250 (23, 3) => (3, 1),
251 (23, 4) => (3, 4),
252 (23, 5) => (3, 3),
253 (23, 6) => (3, 4),
254 (23, 7) => (3, 5),
255 _ => unreachable!(),
256 }
257}
258
259#[allow(unused)]
278fn rpg4x6_to_wang(raw: &RgbaImage, mask: u8) -> ImageResult<RgbaImage> {
279 let width = raw.width() / 4;
280 let height = raw.height() / 6;
281 let xs = match mask {
282 0b0000 => [(0, 0), (1, 0), (0, 1), (1, 1)],
283 0b0001 => [(3, 5), (1, 0), (0, 1), (1, 1)],
284 0b0010 => [(0, 0), (0, 5), (0, 1), (1, 1)],
285 0b0011 => [(1, 5), (2, 5), (0, 1), (1, 1)],
286 0b0100 => [(0, 0), (1, 0), (3, 2), (1, 1)],
287 0b0101 => [(3, 3), (1, 0), (3, 4), (1, 1)],
288 0b0110 => [(0, 0), (0, 5), (3, 2), (1, 1)],
289 0b0111 => [(3, 1), (2, 5), (3, 4), (1, 1)],
290 0b1000 => [(0, 0), (1, 0), (0, 1), (0, 2)],
291 0b1001 => [(3, 5), (1, 0), (0, 1), (0, 2)],
292 0b1010 => [(0, 0), (0, 3), (0, 1), (0, 4)],
293 0b1011 => [(1, 5), (2, 1), (0, 1), (0, 4)],
294 0b1100 => [(0, 0), (1, 0), (1, 2), (2, 2)],
295 0b1101 => [(3, 3), (1, 0), (3, 0), (2, 2)],
296 0b1110 => [(0, 0), (0, 3), (1, 2), (2, 0)],
297 0b1111 => [(1, 3), (2, 3), (1, 4), (2, 4)],
298 _ => unreachable!(),
299 };
300 let mut out = RgbaImage::new(width * 2, height * 2);
301 for (i, (x, y)) in xs.iter().enumerate() {
302 let view = raw.view(*x * width, *y * height, width, height);
303 let x = (i as u32 % 2) * width;
304 let y = (i as u32 / 2) * height;
305 out.copy_from(&view.to_image(), x, y)?;
306 }
307 Ok(out)
308}