Porytiles
Loading...
Searching...
No Matches
tileset_creator.cpp
Go to the documentation of this file.
2
3#include <cstddef>
4#include <memory>
5#include <vector>
6
15
16namespace porytiles {
17
18namespace {
19
20constexpr Rgba32 grass_bulk{112, 192, 160};
21constexpr Rgba32 grass_light{160, 224, 192};
22constexpr Rgba32 grass_dark{56, 192, 128};
23constexpr Rgba32 mud_bulk{111, 81, 22};
24constexpr Rgba32 mud_light{114, 97, 55};
25constexpr Rgba32 mud_dark{111, 64, 49};
26constexpr Rgba32 flower_petal{255, 197, 148};
27constexpr Rgba32 flower_core{205, 65, 82};
28constexpr Rgba32 flower_shadow{24, 164, 106};
29constexpr Rgba32 flower_outline_light{57, 139, 49};
30constexpr Rgba32 flower_outline_dark{57, 82, 0};
31constexpr Rgba32 flower_leaf{131, 197, 98};
32constexpr Rgba32 roof_shared_grey_light{148, 164, 180};
33constexpr Rgba32 roof_shared_grey_medium{123, 123, 131};
34constexpr Rgba32 roof_shared_grey_dark{90, 90, 115};
35constexpr Rgba32 roof_center_bulk{255, 205, 139};
36constexpr Rgba32 roof_mart_bulk{156, 213, 255};
37constexpr Rgba32 roof_alternate_bulk{234, 140, 243};
38constexpr Rgba32 roof_center_light{238, 148, 115};
39constexpr Rgba32 roof_mart_light{115, 189, 246};
40constexpr Rgba32 roof_alternate_light{222, 80, 231};
41constexpr Rgba32 roof_center_medium{222, 106, 98};
42constexpr Rgba32 roof_mart_medium{98, 164, 222};
43constexpr Rgba32 roof_alternate_medium{152, 32, 238};
44constexpr Rgba32 roof_center_dark{205, 82, 74};
45constexpr Rgba32 roof_mart_dark{74, 131, 197};
46constexpr Rgba32 roof_alternate_dark{95, 22, 243};
47
48constexpr std::array grass_layer{
49 // Row 0
50 std::array{
51 grass_bulk,
52 grass_bulk,
53 grass_bulk,
54 grass_dark,
55 grass_bulk,
56 grass_bulk,
57 grass_bulk,
58 grass_light,
59 grass_bulk,
60 grass_bulk,
61 grass_bulk,
62 grass_dark,
63 grass_bulk,
64 grass_bulk,
65 grass_bulk,
66 grass_bulk},
67
68 // Row 1
69 std::array{
70 grass_bulk,
71 grass_bulk,
72 grass_light,
73 grass_light,
74 grass_bulk,
75 grass_bulk,
76 grass_bulk,
77 grass_bulk,
78 grass_bulk,
79 grass_bulk,
80 grass_bulk,
81 grass_bulk,
82 grass_bulk,
83 grass_bulk,
84 grass_bulk,
85 grass_dark},
86
87 // Row 2
88 std::array{
89 grass_bulk,
90 grass_dark,
91 grass_light,
92 grass_light,
93 grass_bulk,
94 grass_bulk,
95 grass_bulk,
96 grass_bulk,
97 grass_bulk,
98 grass_bulk,
99 grass_bulk,
100 grass_bulk,
101 grass_bulk,
102 grass_bulk,
103 grass_bulk,
104 grass_bulk},
105
106 // Row 3
107 std::array{
108 grass_bulk,
109 grass_bulk,
110 grass_bulk,
111 grass_bulk,
112 grass_bulk,
113 grass_bulk,
114 grass_bulk,
115 grass_bulk,
116 grass_bulk,
117 grass_light,
118 grass_bulk,
119 grass_bulk,
120 grass_bulk,
121 grass_bulk,
122 grass_bulk,
123 grass_bulk},
124
125 // Row 4
126 std::array{
127 grass_bulk,
128 grass_bulk,
129 grass_bulk,
130 grass_bulk,
131 grass_bulk,
132 grass_bulk,
133 grass_bulk,
134 grass_bulk,
135 grass_bulk,
136 grass_bulk,
137 grass_bulk,
138 grass_bulk,
139 grass_light,
140 grass_light,
141 grass_bulk,
142 grass_bulk},
143
144 // Row 5
145 std::array{
146 grass_bulk,
147 grass_bulk,
148 grass_bulk,
149 grass_bulk,
150 grass_bulk,
151 grass_bulk,
152 grass_bulk,
153 grass_bulk,
154 grass_bulk,
155 grass_dark,
156 grass_bulk,
157 grass_bulk,
158 grass_light,
159 grass_light,
160 grass_bulk,
161 grass_bulk},
162
163 // Row 6
164 std::array{
165 grass_bulk,
166 grass_light,
167 grass_bulk,
168 grass_bulk,
169 grass_dark,
170 grass_bulk,
171 grass_bulk,
172 grass_bulk,
173 grass_bulk,
174 grass_bulk,
175 grass_bulk,
176 grass_bulk,
177 grass_bulk,
178 grass_bulk,
179 grass_bulk,
180 grass_dark},
181
182 // Row 7
183 std::array{
184 grass_bulk,
185 grass_bulk,
186 grass_bulk,
187 grass_bulk,
188 grass_bulk,
189 grass_bulk,
190 grass_bulk,
191 grass_bulk,
192 grass_bulk,
193 grass_bulk,
194 grass_bulk,
195 grass_bulk,
196 grass_bulk,
197 grass_bulk,
198 grass_bulk,
199 grass_bulk},
200
201 // Row 8
202 std::array{
203 grass_bulk,
204 grass_bulk,
205 grass_bulk,
206 grass_dark,
207 grass_bulk,
208 grass_bulk,
209 grass_bulk,
210 grass_bulk,
211 grass_bulk,
212 grass_bulk,
213 grass_bulk,
214 grass_dark,
215 grass_bulk,
216 grass_bulk,
217 grass_bulk,
218 grass_light},
219
220 // Row 9
221 std::array{
222 grass_bulk,
223 grass_bulk,
224 grass_bulk,
225 grass_bulk,
226 grass_bulk,
227 grass_bulk,
228 grass_bulk,
229 grass_dark,
230 grass_bulk,
231 grass_bulk,
232 grass_light,
233 grass_light,
234 grass_bulk,
235 grass_bulk,
236 grass_bulk,
237 grass_bulk},
238
239 // Row 10
240 std::array{
241 grass_bulk,
242 grass_bulk,
243 grass_bulk,
244 grass_bulk,
245 grass_bulk,
246 grass_bulk,
247 grass_bulk,
248 grass_bulk,
249 grass_bulk,
250 grass_dark,
251 grass_light,
252 grass_light,
253 grass_bulk,
254 grass_bulk,
255 grass_bulk,
256 grass_bulk},
257
258 // Row 11
259 std::array{
260 grass_bulk,
261 grass_light,
262 grass_bulk,
263 grass_bulk,
264 grass_bulk,
265 grass_bulk,
266 grass_bulk,
267 grass_bulk,
268 grass_bulk,
269 grass_bulk,
270 grass_bulk,
271 grass_bulk,
272 grass_bulk,
273 grass_bulk,
274 grass_bulk,
275 grass_bulk},
276
277 // Row 12
278 std::array{
279 grass_bulk,
280 grass_bulk,
281 grass_bulk,
282 grass_bulk,
283 grass_light,
284 grass_light,
285 grass_bulk,
286 grass_bulk,
287 grass_bulk,
288 grass_bulk,
289 grass_bulk,
290 grass_bulk,
291 grass_bulk,
292 grass_bulk,
293 grass_bulk,
294 grass_bulk},
295
296 // Row 13
297 std::array{
298 grass_bulk,
299 grass_dark,
300 grass_bulk,
301 grass_bulk,
302 grass_light,
303 grass_light,
304 grass_bulk,
305 grass_bulk,
306 grass_bulk,
307 grass_bulk,
308 grass_bulk,
309 grass_bulk,
310 grass_bulk,
311 grass_bulk,
312 grass_bulk,
313 grass_bulk},
314
315 // Row 14
316 std::array{
317 grass_bulk,
318 grass_bulk,
319 grass_bulk,
320 grass_bulk,
321 grass_bulk,
322 grass_bulk,
323 grass_bulk,
324 grass_dark,
325 grass_bulk,
326 grass_light,
327 grass_bulk,
328 grass_bulk,
329 grass_dark,
330 grass_bulk,
331 grass_bulk,
332 grass_bulk},
333
334 // Row 15
335 std::array{
336 grass_bulk,
337 grass_bulk,
338 grass_bulk,
339 grass_bulk,
340 grass_bulk,
341 grass_bulk,
342 grass_bulk,
343 grass_bulk,
344 grass_bulk,
345 grass_bulk,
346 grass_bulk,
347 grass_bulk,
348 grass_bulk,
349 grass_bulk,
350 grass_bulk,
351 grass_bulk}};
352
353constexpr std::array mud_layer{
354 // Row 0
355 std::array{
356 mud_bulk,
357 mud_bulk,
358 mud_bulk,
359 mud_dark,
360 mud_bulk,
361 mud_bulk,
362 mud_bulk,
363 mud_light,
364 mud_bulk,
365 mud_bulk,
366 mud_bulk,
367 mud_dark,
368 mud_bulk,
369 mud_bulk,
370 mud_bulk,
371 mud_bulk},
372
373 // Row 1
374 std::array{
375 mud_bulk,
376 mud_bulk,
377 mud_light,
378 mud_light,
379 mud_bulk,
380 mud_bulk,
381 mud_bulk,
382 mud_bulk,
383 mud_bulk,
384 mud_bulk,
385 mud_bulk,
386 mud_bulk,
387 mud_bulk,
388 mud_bulk,
389 mud_bulk,
390 mud_dark},
391
392 // Row 2
393 std::array{
394 mud_bulk,
395 mud_dark,
396 mud_light,
397 mud_light,
398 mud_bulk,
399 mud_bulk,
400 mud_bulk,
401 mud_bulk,
402 mud_bulk,
403 mud_bulk,
404 mud_bulk,
405 mud_bulk,
406 mud_bulk,
407 mud_bulk,
408 mud_bulk,
409 mud_bulk},
410
411 // Row 3
412 std::array{
413 mud_bulk,
414 mud_bulk,
415 mud_bulk,
416 mud_bulk,
417 mud_bulk,
418 mud_bulk,
419 mud_bulk,
420 mud_bulk,
421 mud_bulk,
422 mud_light,
423 mud_bulk,
424 mud_bulk,
425 mud_bulk,
426 mud_bulk,
427 mud_bulk,
428 mud_bulk},
429
430 // Row 4
431 std::array{
432 mud_bulk,
433 mud_bulk,
434 mud_bulk,
435 mud_bulk,
436 mud_bulk,
437 mud_bulk,
438 mud_bulk,
439 mud_bulk,
440 mud_bulk,
441 mud_bulk,
442 mud_bulk,
443 mud_bulk,
444 mud_light,
445 mud_light,
446 mud_bulk,
447 mud_bulk},
448
449 // Row 5
450 std::array{
451 mud_bulk,
452 mud_bulk,
453 mud_bulk,
454 mud_bulk,
455 mud_bulk,
456 mud_bulk,
457 mud_bulk,
458 mud_bulk,
459 mud_bulk,
460 mud_dark,
461 mud_bulk,
462 mud_bulk,
463 mud_light,
464 mud_light,
465 mud_bulk,
466 mud_bulk},
467
468 // Row 6
469 std::array{
470 mud_bulk,
471 mud_light,
472 mud_bulk,
473 mud_bulk,
474 mud_dark,
475 mud_bulk,
476 mud_bulk,
477 mud_bulk,
478 mud_bulk,
479 mud_bulk,
480 mud_bulk,
481 mud_bulk,
482 mud_bulk,
483 mud_bulk,
484 mud_bulk,
485 mud_dark},
486
487 // Row 7
488 std::array{
489 mud_bulk,
490 mud_bulk,
491 mud_bulk,
492 mud_bulk,
493 mud_bulk,
494 mud_bulk,
495 mud_bulk,
496 mud_bulk,
497 mud_bulk,
498 mud_bulk,
499 mud_bulk,
500 mud_bulk,
501 mud_bulk,
502 mud_bulk,
503 mud_bulk,
504 mud_bulk},
505
506 // Row 8
507 std::array{
508 mud_bulk,
509 mud_bulk,
510 mud_bulk,
511 mud_dark,
512 mud_bulk,
513 mud_bulk,
514 mud_bulk,
515 mud_bulk,
516 mud_bulk,
517 mud_bulk,
518 mud_bulk,
519 mud_dark,
520 mud_bulk,
521 mud_bulk,
522 mud_bulk,
523 mud_light},
524
525 // Row 9
526 std::array{
527 mud_bulk,
528 mud_bulk,
529 mud_bulk,
530 mud_bulk,
531 mud_bulk,
532 mud_bulk,
533 mud_bulk,
534 mud_dark,
535 mud_bulk,
536 mud_bulk,
537 mud_light,
538 mud_light,
539 mud_bulk,
540 mud_bulk,
541 mud_bulk,
542 mud_bulk},
543
544 // Row 10
545 std::array{
546 mud_bulk,
547 mud_bulk,
548 mud_bulk,
549 mud_bulk,
550 mud_bulk,
551 mud_bulk,
552 mud_bulk,
553 mud_bulk,
554 mud_bulk,
555 mud_dark,
556 mud_light,
557 mud_light,
558 mud_bulk,
559 mud_bulk,
560 mud_bulk,
561 mud_bulk},
562
563 // Row 11
564 std::array{
565 mud_bulk,
566 mud_light,
567 mud_bulk,
568 mud_bulk,
569 mud_bulk,
570 mud_bulk,
571 mud_bulk,
572 mud_bulk,
573 mud_bulk,
574 mud_bulk,
575 mud_bulk,
576 mud_bulk,
577 mud_bulk,
578 mud_bulk,
579 mud_bulk,
580 mud_bulk},
581
582 // Row 12
583 std::array{
584 mud_bulk,
585 mud_bulk,
586 mud_bulk,
587 mud_bulk,
588 mud_light,
589 mud_light,
590 mud_bulk,
591 mud_bulk,
592 mud_bulk,
593 mud_bulk,
594 mud_bulk,
595 mud_bulk,
596 mud_bulk,
597 mud_bulk,
598 mud_bulk,
599 mud_bulk},
600
601 // Row 13
602 std::array{
603 mud_bulk,
604 mud_dark,
605 mud_bulk,
606 mud_bulk,
607 mud_light,
608 mud_light,
609 mud_bulk,
610 mud_bulk,
611 mud_bulk,
612 mud_bulk,
613 mud_bulk,
614 mud_bulk,
615 mud_bulk,
616 mud_bulk,
617 mud_bulk,
618 mud_bulk},
619
620 // Row 14
621 std::array{
622 mud_bulk,
623 mud_bulk,
624 mud_bulk,
625 mud_bulk,
626 mud_bulk,
627 mud_bulk,
628 mud_bulk,
629 mud_dark,
630 mud_bulk,
631 mud_light,
632 mud_bulk,
633 mud_bulk,
634 mud_dark,
635 mud_bulk,
636 mud_bulk,
637 mud_bulk},
638
639 // Row 15
640 std::array{
641 mud_bulk,
642 mud_bulk,
643 mud_bulk,
644 mud_bulk,
645 mud_bulk,
646 mud_bulk,
647 mud_bulk,
648 mud_bulk,
649 mud_bulk,
650 mud_bulk,
651 mud_bulk,
652 mud_bulk,
653 mud_bulk,
654 mud_bulk,
655 mud_bulk,
656 mud_bulk}};
657
658constexpr std::array tall_grass_layer{
659 // Row 0
660 std::array{
661 grass_bulk,
662 grass_bulk,
663 grass_bulk,
664 grass_bulk,
665 grass_bulk,
666 grass_bulk,
667 grass_bulk,
668 grass_bulk,
669 grass_bulk,
670 grass_bulk,
671 grass_bulk,
672 grass_bulk,
673 flower_shadow,
674 flower_shadow,
675 grass_bulk,
676 grass_bulk},
677
678 // Row 1
679 std::array{
680 grass_bulk,
681 grass_bulk,
682 flower_shadow,
683 flower_shadow,
684 flower_outline_dark,
685 flower_shadow,
686 grass_bulk,
687 grass_bulk,
688 grass_bulk,
689 grass_bulk,
690 flower_shadow,
691 flower_shadow,
692 grass_light,
693 grass_light,
694 flower_shadow,
695 grass_bulk},
696
697 // Row 2
698 std::array{
699 grass_bulk,
700 grass_bulk,
701 flower_shadow,
702 grass_light,
703 grass_light,
704 grass_bulk,
705 flower_outline_dark,
706 grass_bulk,
707 grass_bulk,
708 flower_shadow,
709 grass_light,
710 grass_light,
711 grass_light,
712 flower_shadow,
713 grass_bulk,
714 grass_bulk},
715
716 // Row 3
717 std::array{
718 grass_bulk,
719 grass_bulk,
720 grass_bulk,
721 flower_outline_dark,
722 grass_bulk,
723 grass_bulk,
724 flower_shadow,
725 flower_outline_dark,
726 flower_outline_dark,
727 grass_bulk,
728 grass_bulk,
729 grass_light,
730 flower_outline_dark,
731 flower_shadow,
732 grass_bulk,
733 grass_bulk},
734
735 // Row 4
736 std::array{
737 grass_bulk,
738 flower_shadow,
739 flower_shadow,
740 flower_outline_dark,
741 flower_outline_dark,
742 flower_shadow,
743 flower_shadow,
744 flower_shadow,
745 flower_outline_dark,
746 flower_shadow,
747 flower_shadow,
748 flower_outline_dark,
749 flower_outline_dark,
750 flower_shadow,
751 flower_shadow,
752 grass_bulk},
753
754 // Row 5
755 std::array{
756 flower_shadow,
757 grass_light,
758 grass_light,
759 grass_bulk,
760 flower_shadow,
761 flower_outline_dark,
762 flower_shadow,
763 flower_outline_dark,
764 flower_shadow,
765 flower_shadow,
766 flower_outline_dark,
767 flower_shadow,
768 grass_light,
769 grass_light,
770 grass_light,
771 flower_outline_dark},
772
773 // Row 6
774 std::array{
775 flower_shadow,
776 flower_shadow,
777 grass_bulk,
778 grass_bulk,
779 grass_bulk,
780 flower_shadow,
781 flower_outline_dark,
782 flower_outline_dark,
783 flower_shadow,
784 flower_outline_dark,
785 grass_bulk,
786 grass_bulk,
787 grass_light,
788 grass_light,
789 flower_outline_dark,
790 grass_bulk},
791
792 // Row 7
793 std::array{
794 grass_bulk,
795 flower_outline_dark,
796 grass_bulk,
797 grass_bulk,
798 flower_shadow,
799 flower_shadow,
800 flower_outline_dark,
801 flower_outline_dark,
802 flower_shadow,
803 flower_outline_dark,
804 flower_shadow,
805 grass_bulk,
806 grass_light,
807 flower_shadow,
808 grass_bulk,
809 grass_bulk},
810
811 // Row 8
812 std::array{
813 grass_bulk,
814 flower_shadow,
815 flower_outline_dark,
816 flower_outline_dark,
817 flower_shadow,
818 flower_shadow,
819 flower_shadow,
820 flower_shadow,
821 flower_outline_dark,
822 flower_shadow,
823 flower_shadow,
824 flower_shadow,
825 flower_outline_dark,
826 flower_outline_dark,
827 flower_shadow,
828 grass_bulk},
829
830 // Row 9
831 std::array{
832 flower_shadow,
833 flower_outline_dark,
834 flower_outline_dark,
835 flower_outline_dark,
836 flower_outline_dark,
837 flower_outline_dark,
838 flower_shadow,
839 flower_outline_dark,
840 flower_outline_dark,
841 flower_shadow,
842 flower_outline_dark,
843 flower_outline_dark,
844 flower_outline_dark,
845 flower_outline_dark,
846 flower_shadow,
847 flower_shadow},
848
849 // Row 10
850 std::array{
851 flower_shadow,
852 flower_shadow,
853 flower_outline_dark,
854 grass_bulk,
855 flower_shadow,
856 flower_shadow,
857 flower_outline_dark,
858 flower_shadow,
859 flower_outline_dark,
860 flower_outline_dark,
861 flower_shadow,
862 flower_shadow,
863 grass_bulk,
864 grass_bulk,
865 flower_outline_dark,
866 grass_bulk},
867
868 // Row 11
869 std::array{
870 grass_bulk,
871 flower_outline_dark,
872 grass_light,
873 grass_bulk,
874 grass_bulk,
875 flower_shadow,
876 flower_outline_dark,
877 flower_shadow,
878 flower_shadow,
879 flower_outline_dark,
880 flower_shadow,
881 grass_bulk,
882 grass_bulk,
883 grass_bulk,
884 grass_bulk,
885 flower_outline_dark},
886
887 // Row 12
888 std::array{
889 grass_bulk,
890 flower_shadow,
891 grass_bulk,
892 grass_light,
893 flower_outline_dark,
894 flower_outline_dark,
895 flower_shadow,
896 grass_bulk,
897 grass_bulk,
898 flower_shadow,
899 flower_outline_dark,
900 flower_shadow,
901 flower_shadow,
902 flower_outline_dark,
903 flower_outline_dark,
904 flower_shadow},
905
906 // Row 13
907 std::array{
908 grass_bulk,
909 flower_outline_dark,
910 flower_outline_dark,
911 flower_outline_dark,
912 flower_outline_dark,
913 flower_outline_dark,
914 grass_bulk,
915 flower_shadow,
916 grass_bulk,
917 grass_bulk,
918 flower_outline_dark,
919 flower_outline_dark,
920 flower_outline_dark,
921 flower_outline_dark,
922 flower_shadow,
923 flower_shadow},
924
925 // Row 14
926 std::array{
927 grass_bulk,
928 grass_bulk,
929 flower_shadow,
930 flower_outline_dark,
931 flower_outline_dark,
932 flower_shadow,
933 flower_outline_dark,
934 flower_outline_dark,
935 grass_bulk,
936 flower_outline_dark,
937 flower_shadow,
938 flower_outline_dark,
939 flower_outline_dark,
940 flower_shadow,
941 flower_shadow,
942 grass_bulk},
943
944 // Row 15
945 std::array{
946 grass_bulk,
947 grass_bulk,
948 grass_bulk,
949 grass_bulk,
950 grass_bulk,
951 grass_bulk,
952 grass_bulk,
953 flower_outline_dark,
954 flower_outline_dark,
955 flower_shadow,
956 flower_shadow,
957 grass_bulk,
958 grass_bulk,
959 grass_bulk,
960 grass_bulk,
961 grass_bulk}};
962
963constexpr std::array roof_center_layer{
964 // Row 0
965 std::array{
982 },
983 // Row 1
984 std::array{
1001 },
1002 // Row 2
1003 std::array{
1010 roof_shared_grey_light,
1011 roof_shared_grey_medium,
1012 roof_shared_grey_medium,
1013 roof_shared_grey_light,
1020 },
1021 // Row 3
1022 std::array{
1027 roof_shared_grey_medium,
1028 roof_center_medium,
1029 roof_center_bulk,
1030 roof_center_bulk,
1031 roof_center_bulk,
1032 roof_center_bulk,
1033 roof_center_medium,
1034 roof_shared_grey_medium,
1039 },
1040 // Row 4
1041 std::array{
1045 roof_shared_grey_dark,
1046 roof_center_bulk,
1047 roof_center_bulk,
1048 roof_center_bulk,
1049 roof_center_bulk,
1050 roof_center_bulk,
1051 roof_center_bulk,
1052 roof_center_bulk,
1053 roof_center_bulk,
1054 roof_shared_grey_dark,
1058 },
1059 // Row 5
1060 std::array{
1063 roof_shared_grey_dark,
1064 roof_center_bulk,
1065 roof_center_bulk,
1066 roof_center_bulk,
1067 roof_center_bulk,
1068 roof_center_light,
1069 roof_center_light,
1070 roof_center_bulk,
1071 roof_center_bulk,
1072 roof_center_bulk,
1073 roof_center_bulk,
1074 roof_shared_grey_dark,
1077 },
1078 // Row 6
1079 std::array{
1081 roof_shared_grey_dark,
1082 roof_center_bulk,
1083 roof_center_bulk,
1084 roof_center_bulk,
1085 roof_center_light,
1086 roof_center_light,
1087 roof_center_light,
1088 roof_center_light,
1089 roof_center_light,
1090 roof_center_light,
1091 roof_center_bulk,
1092 roof_center_bulk,
1093 roof_center_bulk,
1094 roof_shared_grey_dark,
1096 },
1097 // Row 7
1098 std::array{
1099 roof_shared_grey_dark,
1100 roof_center_bulk,
1101 roof_center_bulk,
1102 roof_center_medium,
1103 roof_center_medium,
1104 roof_center_dark,
1105 roof_center_dark,
1106 roof_center_light,
1107 roof_center_light,
1108 roof_center_dark,
1109 roof_center_dark,
1110 roof_center_medium,
1111 roof_center_medium,
1112 roof_center_bulk,
1113 roof_center_bulk,
1114 roof_shared_grey_dark,
1115 },
1116 // Row 8
1117 std::array{
1118 roof_shared_grey_dark,
1119 roof_center_bulk,
1120 roof_center_bulk,
1121 roof_center_medium,
1122 roof_center_medium,
1123 roof_center_dark,
1124 roof_center_dark,
1125 roof_center_light,
1126 roof_center_light,
1127 roof_center_dark,
1128 roof_center_dark,
1129 roof_center_medium,
1130 roof_center_medium,
1131 roof_center_bulk,
1132 roof_center_bulk,
1133 roof_shared_grey_dark,
1134 },
1135 // Row 9
1136 std::array{
1138 roof_shared_grey_dark,
1139 roof_center_bulk,
1140 roof_center_bulk,
1141 roof_center_bulk,
1142 roof_center_light,
1143 roof_center_light,
1144 roof_center_light,
1145 roof_center_light,
1146 roof_center_light,
1147 roof_center_light,
1148 roof_center_bulk,
1149 roof_center_bulk,
1150 roof_center_bulk,
1151 roof_shared_grey_dark,
1153 },
1154 // Row 10
1155 std::array{
1158 roof_shared_grey_dark,
1159 roof_center_bulk,
1160 roof_center_bulk,
1161 roof_center_bulk,
1162 roof_center_bulk,
1163 roof_center_light,
1164 roof_center_light,
1165 roof_center_bulk,
1166 roof_center_bulk,
1167 roof_center_bulk,
1168 roof_center_bulk,
1169 roof_shared_grey_dark,
1172 },
1173 // Row 11
1174 std::array{
1178 roof_shared_grey_dark,
1179 roof_center_bulk,
1180 roof_center_bulk,
1181 roof_center_bulk,
1182 roof_center_bulk,
1183 roof_center_bulk,
1184 roof_center_bulk,
1185 roof_center_bulk,
1186 roof_center_bulk,
1187 roof_shared_grey_dark,
1191 },
1192 // Row 12
1193 std::array{
1198 roof_shared_grey_medium,
1199 roof_center_medium,
1200 roof_center_bulk,
1201 roof_center_bulk,
1202 roof_center_bulk,
1203 roof_center_bulk,
1204 roof_center_medium,
1205 roof_shared_grey_medium,
1210 },
1211 // Row 13
1212 std::array{
1219 roof_shared_grey_light,
1220 roof_shared_grey_medium,
1221 roof_shared_grey_medium,
1222 roof_shared_grey_light,
1229 },
1230 // Row 14
1231 std::array{
1248 },
1249 // Row 15
1250 std::array{
1267 },
1268};
1269
1270constexpr std::array roof_mart_layer{
1271 // Row 0
1272 std::array{
1289 },
1290 // Row 1
1291 std::array{
1308 },
1309 // Row 2
1310 std::array{
1317 roof_shared_grey_light,
1318 roof_shared_grey_medium,
1319 roof_shared_grey_medium,
1320 roof_shared_grey_light,
1327 },
1328 // Row 3
1329 std::array{
1334 roof_shared_grey_medium,
1335 roof_mart_medium,
1336 roof_mart_bulk,
1337 roof_mart_bulk,
1338 roof_mart_bulk,
1339 roof_mart_bulk,
1340 roof_mart_medium,
1341 roof_shared_grey_medium,
1346 },
1347 // Row 4
1348 std::array{
1352 roof_shared_grey_dark,
1353 roof_mart_bulk,
1354 roof_mart_bulk,
1355 roof_mart_bulk,
1356 roof_mart_bulk,
1357 roof_mart_bulk,
1358 roof_mart_bulk,
1359 roof_mart_bulk,
1360 roof_mart_bulk,
1361 roof_shared_grey_dark,
1365 },
1366 // Row 5
1367 std::array{
1370 roof_shared_grey_dark,
1371 roof_mart_bulk,
1372 roof_mart_bulk,
1373 roof_mart_bulk,
1374 roof_mart_bulk,
1375 roof_mart_light,
1376 roof_mart_light,
1377 roof_mart_bulk,
1378 roof_mart_bulk,
1379 roof_mart_bulk,
1380 roof_mart_bulk,
1381 roof_shared_grey_dark,
1384 },
1385 // Row 6
1386 std::array{
1388 roof_shared_grey_dark,
1389 roof_mart_bulk,
1390 roof_mart_bulk,
1391 roof_mart_bulk,
1392 roof_mart_light,
1393 roof_mart_light,
1394 roof_mart_light,
1395 roof_mart_light,
1396 roof_mart_light,
1397 roof_mart_light,
1398 roof_mart_bulk,
1399 roof_mart_bulk,
1400 roof_mart_bulk,
1401 roof_shared_grey_dark,
1403 },
1404 // Row 7
1405 std::array{
1406 roof_shared_grey_dark,
1407 roof_mart_bulk,
1408 roof_mart_bulk,
1409 roof_mart_medium,
1410 roof_mart_medium,
1411 roof_mart_dark,
1412 roof_mart_dark,
1413 roof_mart_light,
1414 roof_mart_light,
1415 roof_mart_dark,
1416 roof_mart_dark,
1417 roof_mart_medium,
1418 roof_mart_medium,
1419 roof_mart_bulk,
1420 roof_mart_bulk,
1421 roof_shared_grey_dark,
1422 },
1423 // Row 8
1424 std::array{
1425 roof_shared_grey_dark,
1426 roof_mart_bulk,
1427 roof_mart_bulk,
1428 roof_mart_medium,
1429 roof_mart_medium,
1430 roof_mart_dark,
1431 roof_mart_dark,
1432 roof_mart_light,
1433 roof_mart_light,
1434 roof_mart_dark,
1435 roof_mart_dark,
1436 roof_mart_medium,
1437 roof_mart_medium,
1438 roof_mart_bulk,
1439 roof_mart_bulk,
1440 roof_shared_grey_dark,
1441 },
1442 // Row 9
1443 std::array{
1445 roof_shared_grey_dark,
1446 roof_mart_bulk,
1447 roof_mart_bulk,
1448 roof_mart_bulk,
1449 roof_mart_light,
1450 roof_mart_light,
1451 roof_mart_light,
1452 roof_mart_light,
1453 roof_mart_light,
1454 roof_mart_light,
1455 roof_mart_bulk,
1456 roof_mart_bulk,
1457 roof_mart_bulk,
1458 roof_shared_grey_dark,
1460 },
1461 // Row 10
1462 std::array{
1465 roof_shared_grey_dark,
1466 roof_mart_bulk,
1467 roof_mart_bulk,
1468 roof_mart_bulk,
1469 roof_mart_bulk,
1470 roof_mart_light,
1471 roof_mart_light,
1472 roof_mart_bulk,
1473 roof_mart_bulk,
1474 roof_mart_bulk,
1475 roof_mart_bulk,
1476 roof_shared_grey_dark,
1479 },
1480 // Row 11
1481 std::array{
1485 roof_shared_grey_dark,
1486 roof_mart_bulk,
1487 roof_mart_bulk,
1488 roof_mart_bulk,
1489 roof_mart_bulk,
1490 roof_mart_bulk,
1491 roof_mart_bulk,
1492 roof_mart_bulk,
1493 roof_mart_bulk,
1494 roof_shared_grey_dark,
1498 },
1499 // Row 12
1500 std::array{
1505 roof_shared_grey_medium,
1506 roof_mart_medium,
1507 roof_mart_bulk,
1508 roof_mart_bulk,
1509 roof_mart_bulk,
1510 roof_mart_bulk,
1511 roof_mart_medium,
1512 roof_shared_grey_medium,
1517 },
1518 // Row 13
1519 std::array{
1526 roof_shared_grey_light,
1527 roof_shared_grey_medium,
1528 roof_shared_grey_medium,
1529 roof_shared_grey_light,
1536 },
1537 // Row 14
1538 std::array{
1555 },
1556 // Row 15
1557 std::array{
1574 },
1575};
1576
1577constexpr std::array roof_alternate_layer{
1578 // Row 0
1579 std::array{
1596 },
1597 // Row 1
1598 std::array{
1615 },
1616 // Row 2
1617 std::array{
1624 roof_shared_grey_light,
1625 roof_shared_grey_medium,
1626 roof_shared_grey_medium,
1627 roof_shared_grey_light,
1634 },
1635 // Row 3
1636 std::array{
1641 roof_shared_grey_medium,
1642 roof_alternate_medium,
1643 roof_alternate_bulk,
1644 roof_alternate_bulk,
1645 roof_alternate_bulk,
1646 roof_alternate_bulk,
1647 roof_alternate_medium,
1648 roof_shared_grey_medium,
1653 },
1654 // Row 4
1655 std::array{
1659 roof_shared_grey_dark,
1660 roof_alternate_bulk,
1661 roof_alternate_bulk,
1662 roof_alternate_bulk,
1663 roof_alternate_bulk,
1664 roof_alternate_bulk,
1665 roof_alternate_bulk,
1666 roof_alternate_bulk,
1667 roof_alternate_bulk,
1668 roof_shared_grey_dark,
1672 },
1673 // Row 5
1674 std::array{
1677 roof_shared_grey_dark,
1678 roof_alternate_bulk,
1679 roof_alternate_bulk,
1680 roof_alternate_bulk,
1681 roof_alternate_bulk,
1682 roof_alternate_light,
1683 roof_alternate_light,
1684 roof_alternate_bulk,
1685 roof_alternate_bulk,
1686 roof_alternate_bulk,
1687 roof_alternate_bulk,
1688 roof_shared_grey_dark,
1691 },
1692 // Row 6
1693 std::array{
1695 roof_shared_grey_dark,
1696 roof_alternate_bulk,
1697 roof_alternate_bulk,
1698 roof_alternate_bulk,
1699 roof_alternate_light,
1700 roof_alternate_light,
1701 roof_alternate_light,
1702 roof_alternate_light,
1703 roof_alternate_light,
1704 roof_alternate_light,
1705 roof_alternate_bulk,
1706 roof_alternate_bulk,
1707 roof_alternate_bulk,
1708 roof_shared_grey_dark,
1710 },
1711 // Row 7
1712 std::array{
1713 roof_shared_grey_dark,
1714 roof_alternate_bulk,
1715 roof_alternate_bulk,
1716 roof_alternate_medium,
1717 roof_alternate_medium,
1718 roof_alternate_dark,
1719 roof_alternate_dark,
1720 roof_alternate_light,
1721 roof_alternate_light,
1722 roof_alternate_dark,
1723 roof_alternate_dark,
1724 roof_alternate_medium,
1725 roof_alternate_medium,
1726 roof_alternate_bulk,
1727 roof_alternate_bulk,
1728 roof_shared_grey_dark,
1729 },
1730 // Row 8
1731 std::array{
1732 roof_shared_grey_dark,
1733 roof_alternate_bulk,
1734 roof_alternate_bulk,
1735 roof_alternate_medium,
1736 roof_alternate_medium,
1737 roof_alternate_dark,
1738 roof_alternate_dark,
1739 roof_alternate_light,
1740 roof_alternate_light,
1741 roof_alternate_dark,
1742 roof_alternate_dark,
1743 roof_alternate_medium,
1744 roof_alternate_medium,
1745 roof_alternate_bulk,
1746 roof_alternate_bulk,
1747 roof_shared_grey_dark,
1748 },
1749 // Row 9
1750 std::array{
1752 roof_shared_grey_dark,
1753 roof_alternate_bulk,
1754 roof_alternate_bulk,
1755 roof_alternate_bulk,
1756 roof_alternate_light,
1757 roof_alternate_light,
1758 roof_alternate_light,
1759 roof_alternate_light,
1760 roof_alternate_light,
1761 roof_alternate_light,
1762 roof_alternate_bulk,
1763 roof_alternate_bulk,
1764 roof_alternate_bulk,
1765 roof_shared_grey_dark,
1767 },
1768 // Row 10
1769 std::array{
1772 roof_shared_grey_dark,
1773 roof_alternate_bulk,
1774 roof_alternate_bulk,
1775 roof_alternate_bulk,
1776 roof_alternate_bulk,
1777 roof_alternate_light,
1778 roof_alternate_light,
1779 roof_alternate_bulk,
1780 roof_alternate_bulk,
1781 roof_alternate_bulk,
1782 roof_alternate_bulk,
1783 roof_shared_grey_dark,
1786 },
1787 // Row 11
1788 std::array{
1792 roof_shared_grey_dark,
1793 roof_alternate_bulk,
1794 roof_alternate_bulk,
1795 roof_alternate_bulk,
1796 roof_alternate_bulk,
1797 roof_alternate_bulk,
1798 roof_alternate_bulk,
1799 roof_alternate_bulk,
1800 roof_alternate_bulk,
1801 roof_shared_grey_dark,
1805 },
1806 // Row 12
1807 std::array{
1812 roof_shared_grey_medium,
1813 roof_alternate_medium,
1814 roof_alternate_bulk,
1815 roof_alternate_bulk,
1816 roof_alternate_bulk,
1817 roof_alternate_bulk,
1818 roof_alternate_medium,
1819 roof_shared_grey_medium,
1824 },
1825 // Row 13
1826 std::array{
1833 roof_shared_grey_light,
1834 roof_shared_grey_medium,
1835 roof_shared_grey_medium,
1836 roof_shared_grey_light,
1843 },
1844 // Row 14
1845 std::array{
1862 },
1863 // Row 15
1864 std::array{
1881 },
1882};
1883
1884constexpr std::array flower_frame_key{
1885 // Row 0
1886 std::array{
1902 rgba_magenta},
1903
1904 // Row 1
1905 std::array{
1921 rgba_magenta},
1922
1923 // Row 2
1924 std::array{
1930 flower_outline_light,
1931 flower_outline_light,
1932 flower_petal,
1933 flower_petal,
1934 flower_outline_light,
1940 rgba_magenta},
1941
1942 // Row 3
1943 std::array{
1948 flower_outline_light,
1949 flower_petal,
1950 flower_petal,
1951 flower_core,
1952 flower_core,
1953 flower_petal,
1954 flower_petal,
1955 flower_outline_light,
1959 rgba_magenta},
1960
1961 // Row 4
1962 std::array{
1965 flower_outline_light,
1966 flower_outline_dark,
1967 flower_outline_dark,
1968 flower_petal,
1969 flower_petal,
1970 flower_core,
1971 flower_core,
1972 flower_petal,
1973 flower_petal,
1974 flower_outline_dark,
1975 flower_outline_light,
1976 flower_outline_light,
1977 flower_outline_light,
1978 rgba_magenta},
1979
1980 // Row 5
1981 std::array{
1983 flower_outline_light,
1984 flower_leaf,
1985 flower_leaf,
1986 flower_leaf,
1987 flower_outline_dark,
1988 flower_outline_dark,
1989 flower_petal,
1990 flower_petal,
1991 flower_outline_dark,
1992 flower_outline_dark,
1993 flower_outline_light,
1994 flower_leaf,
1995 flower_leaf,
1996 flower_leaf,
1997 flower_outline_light},
1998
1999 // Row 6
2000 std::array{
2002 flower_outline_light,
2003 flower_leaf,
2004 flower_leaf,
2005 flower_outline_light,
2006 flower_outline_light,
2007 flower_outline_light,
2008 flower_outline_dark,
2009 flower_outline_dark,
2010 flower_outline_light,
2011 flower_petal,
2012 flower_petal,
2013 flower_outline_light,
2014 flower_leaf,
2015 flower_leaf,
2016 flower_outline_dark},
2017
2018 // Row 7
2019 std::array{
2022 flower_outline_light,
2023 flower_petal,
2024 flower_petal,
2025 flower_outline_dark,
2026 flower_outline_light,
2027 flower_outline_light,
2028 flower_petal,
2029 flower_petal,
2030 flower_core,
2031 flower_core,
2032 flower_petal,
2033 flower_petal,
2034 flower_outline_dark,
2035 flower_shadow},
2036
2037 // Row 8
2038 std::array{
2039 flower_shadow,
2040 flower_petal,
2041 flower_petal,
2042 flower_core,
2043 flower_core,
2044 flower_petal,
2045 flower_petal,
2046 flower_outline_dark,
2047 flower_petal,
2048 flower_petal,
2049 flower_core,
2050 flower_core,
2051 flower_petal,
2052 flower_petal,
2053 flower_outline_dark,
2054 flower_shadow},
2055
2056 // Row 9
2057 std::array{
2058 flower_shadow,
2059 flower_petal,
2060 flower_petal,
2061 flower_core,
2062 flower_core,
2063 flower_petal,
2064 flower_petal,
2065 flower_outline_dark,
2066 flower_outline_dark,
2067 flower_outline_dark,
2068 flower_petal,
2069 flower_petal,
2070 flower_outline_dark,
2071 flower_outline_dark,
2072 flower_shadow,
2073 rgba_magenta},
2074
2075 // Row 10
2076 std::array{
2078 flower_shadow,
2079 flower_outline_dark,
2080 flower_petal,
2081 flower_petal,
2082 flower_outline_dark,
2083 flower_outline_dark,
2084 flower_outline_light,
2085 flower_shadow,
2086 flower_outline_dark,
2087 flower_outline_dark,
2088 flower_outline_dark,
2089 flower_outline_dark,
2090 flower_outline_dark,
2091 flower_shadow,
2092 rgba_magenta},
2093
2094 // Row 11
2095 std::array{
2097 flower_outline_light,
2098 flower_outline_light,
2099 flower_outline_dark,
2100 flower_outline_dark,
2101 flower_outline_light,
2102 flower_outline_dark,
2103 flower_shadow,
2104 flower_leaf,
2105 flower_outline_dark,
2106 flower_outline_light,
2107 flower_outline_light,
2108 flower_outline_light,
2109 flower_leaf,
2110 flower_outline_light,
2111 rgba_magenta},
2112
2113 // Row 12
2114 std::array{
2116 flower_outline_dark,
2117 flower_leaf,
2118 flower_leaf,
2119 flower_outline_light,
2120 flower_outline_dark,
2121 flower_shadow,
2122 flower_outline_dark,
2123 flower_outline_dark,
2124 flower_shadow,
2125 flower_outline_dark,
2126 flower_outline_light,
2127 flower_leaf,
2128 flower_leaf,
2129 flower_outline_dark,
2130 rgba_magenta},
2131
2132 // Row 13
2133 std::array{
2134 flower_shadow,
2135 flower_outline_dark,
2136 flower_leaf,
2137 flower_outline_light,
2138 flower_outline_dark,
2139 flower_shadow,
2140 flower_shadow,
2141 flower_shadow,
2142 flower_shadow,
2143 flower_shadow,
2144 flower_shadow,
2145 flower_outline_dark,
2146 flower_leaf,
2147 flower_outline_light,
2148 flower_outline_dark,
2149 rgba_magenta},
2150
2151 // Row 14
2152 std::array{
2154 flower_shadow,
2155 flower_outline_dark,
2156 flower_outline_dark,
2157 flower_shadow,
2158 flower_shadow,
2162 flower_shadow,
2163 flower_shadow,
2164 flower_shadow,
2165 flower_outline_dark,
2166 flower_outline_dark,
2167 flower_shadow,
2168 rgba_magenta},
2169
2170 // Row 15
2171 std::array{
2174 flower_shadow,
2175 flower_shadow,
2184 flower_shadow,
2185 flower_shadow,
2187 rgba_magenta}};
2188
2189// Frame 0 matches key frame in this case
2190constexpr std::array<std::array<Rgba32, metatile::side_length_pix>, metatile::side_length_pix> flower_frame_center =
2191 flower_frame_key;
2192
2193constexpr std::array flower_frame_right{
2194 // Row 0
2195 std::array{
2211 rgba_magenta},
2212
2213 // Row 1
2214 std::array{
2230 rgba_magenta},
2231
2232 // Row 2
2233 std::array{
2240 flower_outline_light,
2241 flower_outline_light,
2242 flower_petal,
2243 flower_petal,
2244 flower_outline_light,
2249 rgba_magenta},
2250
2251 // Row 3
2252 std::array{
2258 flower_outline_light,
2259 flower_petal,
2260 flower_petal,
2261 flower_core,
2262 flower_core,
2263 flower_petal,
2264 flower_petal,
2265 flower_outline_light,
2268 rgba_magenta},
2269
2270 // Row 4
2271 std::array{
2274 flower_outline_light,
2275 flower_outline_dark,
2276 flower_outline_dark,
2277 flower_outline_dark,
2278 flower_petal,
2279 flower_petal,
2280 flower_core,
2281 flower_core,
2282 flower_petal,
2283 flower_petal,
2284 flower_outline_dark,
2285 flower_outline_light,
2286 flower_outline_light,
2287 rgba_magenta},
2288
2289 // Row 5
2290 std::array{
2292 flower_outline_light,
2293 flower_leaf,
2294 flower_leaf,
2295 flower_leaf,
2296 flower_outline_dark,
2297 flower_outline_dark,
2298 flower_outline_dark,
2299 flower_petal,
2300 flower_petal,
2301 flower_outline_dark,
2302 flower_outline_dark,
2303 flower_leaf,
2304 flower_leaf,
2305 flower_leaf,
2306 flower_outline_light},
2307
2308 // Row 6
2309 std::array{
2311 flower_outline_light,
2312 flower_leaf,
2313 flower_leaf,
2314 flower_outline_light,
2315 flower_outline_light,
2316 flower_outline_light,
2317 flower_outline_light,
2318 flower_outline_dark,
2319 flower_outline_dark,
2320 flower_outline_light,
2321 flower_petal,
2322 flower_petal,
2323 flower_leaf,
2324 flower_leaf,
2325 flower_outline_light},
2326
2327 // Row 7
2328 std::array{
2330 flower_shadow,
2331 flower_outline_light,
2332 flower_outline_light,
2333 flower_petal,
2334 flower_petal,
2335 flower_outline_dark,
2336 flower_outline_light,
2337 flower_outline_dark,
2338 flower_petal,
2339 flower_petal,
2340 flower_core,
2341 flower_core,
2342 flower_petal,
2343 flower_petal,
2344 flower_outline_dark},
2345
2346 // Row 8
2347 std::array{
2349 flower_shadow,
2350 flower_petal,
2351 flower_petal,
2352 flower_core,
2353 flower_core,
2354 flower_petal,
2355 flower_petal,
2356 flower_outline_dark,
2357 flower_petal,
2358 flower_petal,
2359 flower_core,
2360 flower_core,
2361 flower_petal,
2362 flower_petal,
2363 flower_outline_dark},
2364
2365 // Row 9
2366 std::array{
2368 flower_shadow,
2369 flower_petal,
2370 flower_petal,
2371 flower_core,
2372 flower_core,
2373 flower_petal,
2374 flower_petal,
2375 flower_outline_dark,
2376 flower_outline_dark,
2377 flower_outline_dark,
2378 flower_petal,
2379 flower_petal,
2380 flower_outline_dark,
2381 flower_outline_dark,
2382 flower_shadow},
2383
2384 // Row 10
2385 std::array{
2388 flower_shadow,
2389 flower_outline_dark,
2390 flower_petal,
2391 flower_petal,
2392 flower_outline_dark,
2393 flower_outline_dark,
2394 flower_shadow,
2395 flower_outline_dark,
2396 flower_outline_light,
2397 flower_outline_dark,
2398 flower_outline_dark,
2399 flower_outline_dark,
2400 flower_shadow,
2401 rgba_magenta},
2402
2403 // Row 11
2404 std::array{
2407 flower_outline_dark,
2408 flower_leaf,
2409 flower_outline_dark,
2410 flower_outline_dark,
2411 flower_outline_dark,
2412 flower_shadow,
2413 flower_leaf,
2414 flower_outline_dark,
2415 flower_outline_light,
2416 flower_outline_light,
2417 flower_outline_light,
2418 flower_leaf,
2419 flower_outline_light,
2420 rgba_magenta},
2421
2422 // Row 12
2423 std::array{
2425 flower_outline_light,
2426 flower_leaf,
2427 flower_leaf,
2428 flower_outline_light,
2429 flower_outline_dark,
2430 flower_shadow,
2431 flower_outline_dark,
2432 flower_outline_dark,
2433 flower_shadow,
2434 flower_outline_dark,
2435 flower_outline_light,
2436 flower_leaf,
2437 flower_leaf,
2438 flower_outline_dark,
2439 rgba_magenta},
2440
2441 // Row 13
2442 std::array{
2443 flower_shadow,
2444 flower_outline_dark,
2445 flower_leaf,
2446 flower_outline_light,
2447 flower_outline_dark,
2448 flower_shadow,
2449 flower_shadow,
2450 flower_shadow,
2451 flower_shadow,
2452 flower_shadow,
2453 flower_shadow,
2454 flower_outline_dark,
2455 flower_leaf,
2456 flower_outline_light,
2457 flower_outline_dark,
2458 rgba_magenta},
2459
2460 // Row 14
2461 std::array{
2463 flower_shadow,
2464 flower_outline_dark,
2465 flower_outline_dark,
2466 flower_shadow,
2467 flower_shadow,
2471 flower_shadow,
2472 flower_shadow,
2473 flower_shadow,
2474 flower_outline_dark,
2475 flower_outline_dark,
2476 flower_shadow,
2477 rgba_magenta},
2478
2479 // Row 15
2480 std::array{
2483 flower_shadow,
2484 flower_shadow,
2493 flower_shadow,
2494 flower_shadow,
2496 rgba_magenta}};
2497
2498constexpr std::array flower_frame_left{
2499 // Row 0
2500 std::array{
2516 rgba_magenta},
2517
2518 // Row 1
2519 std::array{
2535 rgba_magenta},
2536
2537 // Row 2
2538 std::array{
2543 flower_outline_light,
2544 flower_outline_light,
2545 flower_petal,
2546 flower_petal,
2547 flower_outline_light,
2554 rgba_magenta},
2555
2556 // Row 3
2557 std::array{
2561 flower_outline_light,
2562 flower_petal,
2563 flower_petal,
2564 flower_core,
2565 flower_core,
2566 flower_petal,
2567 flower_petal,
2568 flower_outline_light,
2573 rgba_magenta},
2574
2575 // Row 4
2576 std::array{
2579 flower_outline_light,
2580 flower_outline_dark,
2581 flower_petal,
2582 flower_petal,
2583 flower_core,
2584 flower_core,
2585 flower_petal,
2586 flower_petal,
2587 flower_outline_dark,
2589 flower_outline_light,
2590 flower_outline_light,
2591 flower_outline_light,
2592 rgba_magenta},
2593
2594 // Row 5
2595 std::array{
2597 flower_outline_light,
2598 flower_leaf,
2599 flower_leaf,
2600 flower_outline_dark,
2601 flower_outline_dark,
2602 flower_petal,
2603 flower_petal,
2604 flower_outline_dark,
2605 flower_outline_dark,
2606 flower_outline_light,
2607 flower_outline_dark,
2608 flower_leaf,
2609 flower_leaf,
2610 flower_leaf,
2611 flower_outline_light},
2612
2613 // Row 6
2614 std::array{
2616 flower_outline_light,
2617 flower_leaf,
2618 flower_leaf,
2619 flower_outline_light,
2620 flower_outline_light,
2621 flower_outline_light,
2622 flower_outline_dark,
2623 flower_outline_light,
2624 flower_petal,
2625 flower_petal,
2626 flower_outline_light,
2627 flower_outline_light,
2628 flower_outline_light,
2629 flower_leaf,
2630 flower_outline_dark},
2631
2632 // Row 7
2633 std::array{
2634 flower_outline_light,
2635 flower_outline_light,
2636 flower_petal,
2637 flower_petal,
2638 flower_outline_dark,
2639 flower_outline_light,
2640 flower_outline_light,
2641 flower_petal,
2642 flower_petal,
2643 flower_core,
2644 flower_core,
2645 flower_petal,
2646 flower_petal,
2647 flower_outline_light,
2648 flower_outline_dark,
2649 flower_shadow},
2650
2651 // Row 8
2652 std::array{
2653 flower_petal,
2654 flower_petal,
2655 flower_core,
2656 flower_core,
2657 flower_petal,
2658 flower_petal,
2659 flower_outline_dark,
2660 flower_petal,
2661 flower_petal,
2662 flower_core,
2663 flower_core,
2664 flower_petal,
2665 flower_petal,
2666 flower_outline_dark,
2667 flower_outline_dark,
2668 flower_shadow},
2669
2670 // Row 9
2671 std::array{
2672 flower_petal,
2673 flower_petal,
2674 flower_core,
2675 flower_core,
2676 flower_petal,
2677 flower_petal,
2678 flower_outline_dark,
2679 flower_outline_dark,
2680 flower_outline_dark,
2681 flower_petal,
2682 flower_petal,
2683 flower_outline_dark,
2684 flower_outline_dark,
2685 flower_shadow,
2686 flower_shadow,
2687 rgba_magenta},
2688
2689 // Row 10
2690 std::array{
2691 flower_shadow,
2692 flower_outline_dark,
2693 flower_petal,
2694 flower_petal,
2695 flower_outline_dark,
2696 flower_outline_dark,
2697 flower_outline_dark,
2698 flower_outline_dark,
2699 flower_shadow,
2700 flower_outline_dark,
2701 flower_outline_dark,
2702 flower_outline_dark,
2703 flower_outline_light,
2704 flower_outline_dark,
2705 flower_shadow,
2706 rgba_magenta},
2707
2708 // Row 11
2709 std::array{
2711 flower_outline_dark,
2712 flower_outline_light,
2713 flower_outline_dark,
2714 flower_outline_dark,
2715 flower_outline_light,
2716 flower_outline_dark,
2717 flower_shadow,
2718 flower_leaf,
2719 flower_outline_dark,
2720 flower_outline_light,
2721 flower_outline_light,
2722 flower_outline_light,
2723 flower_leaf,
2724 flower_outline_light,
2725 rgba_magenta},
2726
2727 // Row 12
2728 std::array{
2730 flower_outline_dark,
2731 flower_leaf,
2732 flower_leaf,
2733 flower_outline_light,
2734 flower_outline_dark,
2735 flower_shadow,
2736 flower_outline_dark,
2737 flower_outline_dark,
2738 flower_shadow,
2739 flower_outline_dark,
2740 flower_outline_light,
2741 flower_leaf,
2742 flower_leaf,
2743 flower_outline_dark,
2744 rgba_magenta},
2745
2746 // Row 13
2747 std::array{
2748 flower_shadow,
2749 flower_outline_dark,
2750 flower_leaf,
2751 flower_outline_light,
2752 flower_outline_dark,
2753 flower_shadow,
2754 flower_shadow,
2755 flower_shadow,
2756 flower_shadow,
2757 flower_shadow,
2758 flower_shadow,
2759 flower_outline_dark,
2760 flower_leaf,
2761 flower_outline_light,
2762 flower_outline_dark,
2763 rgba_magenta},
2764
2765 // Row 14
2766 std::array{
2768 flower_shadow,
2769 flower_outline_dark,
2770 flower_outline_dark,
2771 flower_shadow,
2772 flower_shadow,
2776 flower_shadow,
2777 flower_shadow,
2778 flower_shadow,
2779 flower_outline_dark,
2780 flower_outline_dark,
2781 flower_shadow,
2782 rgba_magenta},
2783
2784 // Row 15
2785 std::array{
2788 flower_shadow,
2789 flower_shadow,
2798 flower_shadow,
2799 flower_shadow,
2801 rgba_magenta}};
2802
2803void set_grass_at(Image<Rgba32> &img, std::size_t metatile_index)
2804{
2805 const std::size_t col_offset = metatile_index * metatile::side_length_pix;
2806 for (std::size_t row = 0; row < metatile::side_length_pix; ++row) {
2807 for (std::size_t col = 0; col < metatile::side_length_pix; ++col) {
2808 img.set(row, col_offset + col, grass_layer[row][col]);
2809 }
2810 }
2811}
2812
2813void set_mud_at(Image<Rgba32> &img, std::size_t metatile_index)
2814{
2815 const std::size_t col_offset = metatile_index * metatile::side_length_pix;
2816 for (std::size_t row = 0; row < metatile::side_length_pix; ++row) {
2817 for (std::size_t col = 0; col < metatile::side_length_pix; ++col) {
2818 img.set(row, col_offset + col, mud_layer[row][col]);
2819 }
2820 }
2821}
2822
2823void set_tall_grass_at(Image<Rgba32> &img, std::size_t metatile_index)
2824{
2825 const std::size_t col_offset = metatile_index * metatile::side_length_pix;
2826 for (std::size_t row = 0; row < metatile::side_length_pix; ++row) {
2827 for (std::size_t col = 0; col < metatile::side_length_pix; ++col) {
2828 img.set(row, col_offset + col, tall_grass_layer[row][col]);
2829 }
2830 }
2831}
2832
2833void set_roof_center_at(Image<Rgba32> &img, std::size_t metatile_index)
2834{
2835 const std::size_t col_offset = metatile_index * metatile::side_length_pix;
2836 for (std::size_t row = 0; row < metatile::side_length_pix; ++row) {
2837 for (std::size_t col = 0; col < metatile::side_length_pix; ++col) {
2838 img.set(row, col_offset + col, roof_center_layer[row][col]);
2839 }
2840 }
2841}
2842
2843void set_roof_mart_at(Image<Rgba32> &img, std::size_t metatile_index)
2844{
2845 const std::size_t col_offset = metatile_index * metatile::side_length_pix;
2846 for (std::size_t row = 0; row < metatile::side_length_pix; ++row) {
2847 for (std::size_t col = 0; col < metatile::side_length_pix; ++col) {
2848 img.set(row, col_offset + col, roof_mart_layer[row][col]);
2849 }
2850 }
2851}
2852
2853void set_roof_alternate_at(Image<Rgba32> &img, std::size_t metatile_index)
2854{
2855 const std::size_t col_offset = metatile_index * metatile::side_length_pix;
2856 for (std::size_t row = 0; row < metatile::side_length_pix; ++row) {
2857 for (std::size_t col = 0; col < metatile::side_length_pix; ++col) {
2858 img.set(row, col_offset + col, roof_alternate_layer[row][col]);
2859 }
2860 }
2861}
2862
2863void set_flower_key_frame_at(Image<Rgba32> &img, std::size_t metatile_index)
2864{
2865 const std::size_t col_offset = metatile_index * metatile::side_length_pix;
2866 for (std::size_t row = 0; row < metatile::side_length_pix; ++row) {
2867 for (std::size_t col = 0; col < metatile::side_length_pix; ++col) {
2868 img.set(row, col_offset + col, flower_frame_key[row][col]);
2869 }
2870 }
2871}
2872
2882[[nodiscard]] std::vector<PixelTile<Rgba32>> metatile_array_to_tiles(
2883 const std::array<std::array<Rgba32, metatile::side_length_pix>, metatile::side_length_pix> &metatile_pixels)
2884{
2885 std::vector<PixelTile<Rgba32>> tiles;
2886 tiles.reserve(4);
2887
2888 // Extract 4 tiles: 2 rows x 2 cols
2889 for (std::size_t tile_row = 0; tile_row < 2; ++tile_row) {
2890 for (std::size_t tile_col = 0; tile_col < 2; ++tile_col) {
2891 std::array<Rgba32, tile::size_pix> tile_pixels{};
2892
2893 for (std::size_t row = 0; row < tile::side_length_pix; ++row) {
2894 for (std::size_t col = 0; col < tile::side_length_pix; ++col) {
2895 const std::size_t src_row = tile_row * tile::side_length_pix + row;
2896 const std::size_t src_col = tile_col * tile::side_length_pix + col;
2897 tile_pixels[row * tile::side_length_pix + col] = metatile_pixels[src_row][src_col];
2898 }
2899 }
2900
2901 tiles.emplace_back(tile_pixels);
2902 }
2903 }
2904
2905 return tiles;
2906}
2907
2908} // anonymous namespace
2909
2910ChainableResult<std::unique_ptr<PorytilesTilesetComponent>>
2912{
2914 config_, extrinsic_transparency, tileset_name, std::unique_ptr<PorytilesTilesetComponent>);
2915
2916 auto component = std::make_unique<PorytilesTilesetComponent>();
2917
2918 Image<Rgba32> bottom{128, 16, extrinsic_transparency};
2919 Image<Rgba32> middle{128, 16, extrinsic_transparency};
2920 Image<Rgba32> top{128, 16, extrinsic_transparency};
2921
2922 set_grass_at(middle, 1);
2923 set_flower_key_frame_at(middle, 2);
2924 set_grass_at(bottom, 2);
2925 set_tall_grass_at(middle, 3);
2926 set_grass_at(bottom, 4);
2927 set_roof_center_at(middle, 4);
2928 set_grass_at(bottom, 5);
2929 set_roof_mart_at(middle, 5);
2930
2931 component->bottom(bottom);
2932 component->middle(middle);
2933 component->top(top);
2934
2935 /*
2936 * Set metatile attribute for the tall grass metatile. But only set the behavior if the user project had an
2937 * MB_TALL_GRASS behavior.
2938 */
2939 const auto behavior_result = behavior_map_->lookup("MB_TALL_GRASS");
2940 if (behavior_result.has_value()) {
2941 component->insert_attribute(3, MetatileAttribute{LayerType::normal, behavior_result.value()});
2942 }
2943
2944 // Set up flower animation frames using the conversion helper
2945 AnimFrame flower_key{"key", metatile_array_to_tiles(flower_frame_key)};
2946 AnimFrame flower_center{"center", metatile_array_to_tiles(flower_frame_center)};
2947 AnimFrame flower_right{"right", metatile_array_to_tiles(flower_frame_right)};
2948 AnimFrame flower_left{"left", metatile_array_to_tiles(flower_frame_left)};
2949
2950 AnimParams flower_params{};
2951 flower_params.frame_names(
2952 std::vector{DynamicCasedName{"center"}, DynamicCasedName{"right"}, DynamicCasedName{"left"}});
2953 flower_params.frame_order(
2954 std::vector{
2955 DynamicCasedName{"center"},
2956 DynamicCasedName{"right"},
2957 DynamicCasedName{"center"},
2958 DynamicCasedName{"left"}});
2959 flower_params.width_tiles(2);
2960 flower_params.height_tiles(2);
2961
2962 Animation<Rgba32> flower{"flower", flower_params};
2963 flower.key_frame(flower_key);
2964 flower.put_frame(flower_center.frame_name(), flower_center);
2965 flower.put_frame(flower_right.frame_name(), flower_right);
2966 flower.put_frame(flower_left.frame_name(), flower_left);
2967 component->add_anim(flower);
2968
2969 return component;
2970}
2971
2974{
2976 config_, extrinsic_transparency, tileset_name, std::unique_ptr<PorytilesTilesetComponent>);
2977
2978 auto component = std::make_unique<PorytilesTilesetComponent>();
2979
2980 Image<Rgba32> bottom{128, 16, extrinsic_transparency};
2981 Image<Rgba32> middle{128, 16, extrinsic_transparency};
2982 Image<Rgba32> top{128, 16, extrinsic_transparency};
2983
2984 set_mud_at(middle, 1);
2985 set_mud_at(bottom, 2);
2986 set_flower_key_frame_at(middle, 2);
2987 set_grass_at(bottom, 3);
2988 set_roof_alternate_at(middle, 3);
2989
2990 component->bottom(bottom);
2991 component->middle(middle);
2992 component->top(top);
2993
2994 return component;
2995}
2996
2997} // namespace porytiles
Represents a single frame of an animation, containing tiles and a frame name.
Configuration parameters for a single tileset animation.
const std::vector< DynamicCasedName > & frame_names() const
Returns the unique frame definitions.
A complete tileset animation with name, configuration, and frame data.
Definition animation.hpp:78
const AnimFrame< PixelType > & key_frame() const
Returns the key frame of this animation.
virtual ChainableResult< std::uint16_t > lookup(const std::string &behavior_name) const =0
Looks up the numeric value for a behavior constant name.
A result type that maintains a chainable sequence of errors for debugging and error reporting.
A smart string wrapper that preserves word structure for lossless case format conversion.
A template for two-dimensional images with arbitrarily typed pixel values.
Definition image.hpp:23
Represents the attributes of a single metatile.
ChainableResult< std::unique_ptr< PorytilesTilesetComponent > > create_sample_primary_porytiles_component(const std::string &tileset_name) const
Creates a new basic primary PorytilesTilesetComponent with some default assets.
ChainableResult< std::unique_ptr< PorytilesTilesetComponent > > create_sample_secondary_porytiles_component(const std::string &tileset_name) const
Creates a new basic secondary PorytilesTilesetComponent with some default assets.
constexpr std::size_t side_length_pix
Definition metatile.hpp:19
constexpr std::size_t side_length_pix
constexpr Rgba32 rgba_magenta
Definition rgba32.hpp:138
#define PT_UNWRAP_TILESET_CONFIG_PTR(ptr, config, tileset_name, return_type)
Unwraps a tileset-scoped config value via pointer access, returning early if the value is not availab...