Porytiles
Loading...
Searching...
No Matches
cli_option_registration.cpp
Go to the documentation of this file.
2
3#include <string>
4
5// NOTE: DO NOT EDIT THIS FILE DIRECTLY. It is AUTO-GENERATED from config_schema.yaml.
6// To add new config values or make other changes, edit config_schema.yaml and regenerate via:
7//
8// uv run scripts/generate_config.py
9
10namespace porytiles {
11
12void register_config_options(CLI::App &app, CliOptionStorage &storage)
13{
14 auto *config_group = app.add_option_group("Config Options", "Override configuration values");
15 config_group->footer(""); // Clear inherited footer to prevent duplication in help output
16
17 // Number Of Tiles In Primary (std::size_t, captured as string, parsed by CliOptionProvider)
18 config_group->add_option(
19 "--num-tiles-in-primary",
21 "Number Of Tiles In Primary - The NUM_TILES_IN_PRIMARY setting from include/fieldmap.h.");
22
23 // Number Of Tiles Total (std::size_t, captured as string, parsed by CliOptionProvider)
24 config_group->add_option(
25 "--num-tiles-total",
26 storage.num_tiles_total,
27 "Number Of Tiles Total - The NUM_TILES_TOTAL setting from include/fieldmap.h.");
28
29 // Number Of Metatiles In Primary (std::size_t, captured as string, parsed by CliOptionProvider)
30 config_group->add_option(
31 "--num-metatiles-in-primary",
33 "Number Of Metatiles In Primary - The NUM_METATILES_IN_PRIMARY setting from include/fieldmap.h.");
34
35 // Number Of Metatiles Total (std::size_t, captured as string, parsed by CliOptionProvider)
36 config_group->add_option(
37 "--num-metatiles-total",
38 storage.num_metatiles_total,
39 "Number Of Metatiles Total - The NUM_METATILES_TOTAL setting from include/fieldmap.h.");
40
41 // Number Of Palettes In Primary (std::size_t, captured as string, parsed by CliOptionProvider)
42 config_group->add_option(
43 "--num-pals-in-primary",
45 "Number Of Palettes In Primary - The NUM_PALS_IN_PRIMARY setting from include/fieldmap.h.");
46
47 // Number Of Palettes Total (std::size_t, captured as string, parsed by CliOptionProvider)
48 config_group->add_option(
49 "--num-pals-total",
50 storage.num_palettes_total,
51 "Number Of Palettes Total - The NUM_PALS_TOTAL setting from include/fieldmap.h.");
52
53 // Max Map Data Size (std::size_t, captured as string, parsed by CliOptionProvider)
54 config_group->add_option(
55 "--max-map-data-size",
56 storage.max_map_data_size,
57 "Max Map Data Size - The MAX_MAP_DATA_SIZE setting from include/fieldmap.h.");
58
59 // Number Of Tiles Per Metatile (std::size_t, captured as string, parsed by CliOptionProvider)
60 config_group->add_option(
61 "--num-tiles-per-metatile",
63 "Number Of Tiles Per Metatile - The NUM_TILES_PER_METATILE setting from include/fieldmap.h.");
64
65 // Extrinsic Transparency (Rgba32, captured as string, parsed by CliOptionProvider)
66 config_group
67 ->add_option(
68 "--extrinsic-transparency",
70 "Extrinsic Transparency - The RGB color to treat as transparent during compilation. (format: R,G,B or "
71 "R,G,B,A, values 0-255)")
72 ->type_name("R,G,B[,A]");
73
74 // Ignore Triple Layer Content (bool with --flag/--no-flag, captured as "true"/"false" string)
75 config_group->add_flag(
76 "--ignore-triple-layer-content,!--no-ignore-triple-layer-content",
77 [&storage](std::int64_t count) {
78 if (count > 0) {
79 storage.ignore_triple_layer_content = "true";
80 }
81 else if (count < 0) {
82 storage.ignore_triple_layer_content = "false";
83 }
84 // count == 0 means neither flag was provided, leave optional empty
85 },
86 "Ignore Triple Layer Content - Demote the triple-layer-content-in-dual-mode error to a warning. When on, a "
87 "metatile with content on all three layers compiles in dual mode by dropping one layer group instead of "
88 "failing. The dropped layer follows the metatile's effective layer type: a 'layer_type' role pin if you set "
89 "one, otherwise the bottom layer.");
90
91 // Tiles Edit Mode (enum ArtifactEditMode, captured as string, parsed by CliOptionProvider)
92 config_group
93 ->add_option(
94 "--tiles-edit-mode",
95 storage.tiles_edit_mode,
96 "Tiles Edit Mode - The allowed edit mode for the tiles.png artifact.")
97 ->type_name("{locked|patch|optimize}");
98
99 // Palettes Edit Mode (enum ArtifactEditMode, captured as string, parsed by CliOptionProvider)
100 config_group
101 ->add_option(
102 "--pals-edit-mode",
103 storage.palettes_edit_mode,
104 "Palettes Edit Mode - The allowed edit mode for the palettes/ artifacts.")
105 ->type_name("{locked|patch|optimize}");
106
107 // Palette Hints Enabled (bool with --flag/--no-flag, captured as "true"/"false" string)
108 config_group->add_flag(
109 "--pal-hints-enabled,!--no-pal-hints-enabled",
110 [&storage](std::int64_t count) {
111 if (count > 0) {
112 storage.palette_hints_enabled = "true";
113 }
114 else if (count < 0) {
115 storage.palette_hints_enabled = "false";
116 }
117 // count == 0 means neither flag was provided, leave optional empty
118 },
119 "Palette Hints Enabled - Enable configured palette hints.");
120
121 // Packing Strategy (enum PackingStrategyType, captured as string, parsed by CliOptionProvider)
122 config_group
123 ->add_option(
124 "--packing-strategy",
125 storage.packing_strategy,
126 "Packing Strategy - The palette packing algorithm to use during compilation.")
127 ->type_name("{best-fusion|backtracking|overload-and-remove}");
128
129 // Tile Sharing Packing (enum TileSharingPacking, captured as string, parsed by CliOptionProvider)
130 config_group
131 ->add_option(
132 "--tile-sharing-packing",
133 storage.tile_sharing_packing,
134 "Tile Sharing Packing - Controls whether palette packing considers tile sharing.")
135 ->type_name("{off|biased|optimal}");
136
137 // Tile Sharing Alignment (enum TileSharingAlignment, captured as string, parsed by CliOptionProvider)
138 config_group
139 ->add_option(
140 "--tile-sharing-alignment",
142 "Tile Sharing Alignment - Controls palette slot alignment strategy for tile sharing.")
143 ->type_name("{off|greedy|optimal}");
144
145 // Tiles Palette Mode (enum TilesPaletteMode, captured as string, parsed by CliOptionProvider)
146 config_group
147 ->add_option(
148 "--tiles-pal-mode",
149 storage.tiles_palette_mode,
150 "Tiles Palette Mode - The color mode to use when saving the tiles.png artifact.")
151 ->type_name("{true-color|greyscale}");
152
153 // Global Animation Palette Resolution Strategy (enum AnimPaletteResolutionStrategy, captured as string, parsed by
154 // CliOptionProvider)
155 config_group
156 ->add_option(
157 "--anim-pal-resolution-strategy",
159 "Global Animation Palette Resolution Strategy - The global strategy for determining which palette to use "
160 "when decompiling animation tiles.")
161 ->type_name(
162 "{scan-local-metatiles|palette-00|palette-01|palette-02|palette-03|palette-04|palette-05|palette-06|"
163 "palette-07|palette-08|palette-09|palette-10|palette-11|palette-12|palette-13|palette-14|palette-15|"
164 "internal-png-palette|scan-all-tilesets}");
165
166 // Global Animation Key Frame Resolution Strategy (enum AnimKeyFrameResolutionStrategy, captured as string, parsed
167 // by CliOptionProvider)
168 config_group
169 ->add_option(
170 "--anim-key-frame-resolution-strategy",
172 "Global Animation Key Frame Resolution Strategy - The strategy to use when decompilation encounters "
173 "duplicate key frame subtiles.")
174 ->type_name("{error|warning|mangle}");
175
176 // Global Animation Multi-Palette Subtile Resolution Strategy (enum AnimMultiPaletteSubtileResolutionStrategy,
177 // captured as string, parsed by CliOptionProvider)
178 config_group
179 ->add_option(
180 "--anim-multi-pal-subtile-resolution-strategy",
182 "Global Animation Multi-Palette Subtile Resolution Strategy - The strategy for handling animation subtiles "
183 "referenced with multiple palettes.")
184 ->type_name("{error|warning|split}");
185
186 // Global Frame Linking (enum FrameLinking, captured as string, parsed by CliOptionProvider)
187 config_group
188 ->add_option(
189 "--frame-linking",
190 storage.global_frame_linking,
191 "Global Frame Linking - The global default frame linking mode for animations.")
192 ->type_name("{automatic|manual|hybrid}");
193
194 // Cross-Tileset Animation Linking (bool with --flag/--no-flag, captured as "true"/"false" string)
195 config_group->add_flag(
196 "--cross-tileset-anim-linking,!--no-cross-tileset-anim-linking",
197 [&storage](std::int64_t count) {
198 if (count > 0) {
199 storage.cross_tileset_anim_linking = "true";
200 }
201 else if (count < 0) {
202 storage.cross_tileset_anim_linking = "false";
203 }
204 // count == 0 means neither flag was provided, leave optional empty
205 },
206 "Cross-Tileset Animation Linking - Enable automatic matching of secondary tiles against primary animation key "
207 "frames.");
208
209 // Verify Checksums (bool with --flag/--no-flag, captured as "true"/"false" string)
210 config_group->add_flag(
211 "--verify-checksums,!--no-verify-checksums",
212 [&storage](std::int64_t count) {
213 if (count > 0) {
214 storage.verify_checksums = "true";
215 }
216 else if (count < 0) {
217 storage.verify_checksums = "false";
218 }
219 // count == 0 means neither flag was provided, leave optional empty
220 },
221 "Verify Checksums - Enable or disable artifact checksum verification.");
222
223 // Primary Pairing Mode (enum PrimaryPairingMode, captured as string, parsed by CliOptionProvider)
224 config_group
225 ->add_option(
226 "--primary-pairing-mode",
227 storage.primary_pairing_mode,
228 "Primary Pairing Mode - How a secondary tileset resolves its partner primary for compilation.")
229 ->type_name("{off|manual|automatic}");
230
231 // Primary Pairing Partners (std::vector<std::string>, multi-value)
232 config_group->add_option(
233 "--primary-pairing-partners",
235 "Primary Pairing Partners - Tileset names to use as partner primaries in manual pairing mode.");
236
237 // Diagnostic Warnings Exclude (std::vector<std::string>, multi-value)
238 config_group->add_option(
239 "--diagnostic-warnings-exclude",
241 "Diagnostic Warnings Exclude - Regex patterns for warning tags to exclude (overrides includes).");
242
243 // Diagnostic Warnings Include (std::vector<std::string>, multi-value)
244 config_group->add_option(
245 "--diagnostic-warnings-include",
247 "Diagnostic Warnings Include - Regex patterns for warning tags to show. Warnings are hidden unless a pattern "
248 "matches their tag.");
249
250 // Diagnostic Remarks Exclude (std::vector<std::string>, multi-value)
251 config_group->add_option(
252 "--diagnostic-remarks-exclude",
254 "Diagnostic Remarks Exclude - Regex patterns for remark tags to exclude (overrides includes).");
255
256 // Diagnostic Remarks Include (std::vector<std::string>, multi-value)
257 config_group->add_option(
258 "--diagnostic-remarks-include",
260 "Diagnostic Remarks Include - Regex patterns for remark tags to show. Remarks are hidden unless a pattern "
261 "matches their tag.");
262
263 // Tileset Paths Primary Source (std::string)
264 config_group->add_option(
265 "--tileset-paths-primary-src",
267 "Tileset Paths Primary Source - The directory for primary tileset Porytiles component assets.");
268
269 // Tileset Paths Primary Bin (std::string)
270 config_group->add_option(
271 "--tileset-paths-primary-bin",
273 "Tileset Paths Primary Bin - The directory for primary tileset Porymap component assets.");
274
275 // Tileset Paths Secondary Source (std::string)
276 config_group->add_option(
277 "--tileset-paths-secondary-src",
279 "Tileset Paths Secondary Source - The directory for secondary tileset Porytiles component assets.");
280
281 // Tileset Paths Secondary Bin (std::string)
282 config_group->add_option(
283 "--tileset-paths-secondary-bin",
285 "Tileset Paths Secondary Bin - The directory for secondary tileset Porymap component assets.");
286
287 // Metatile Attribute Size (optional std::size_t, captured as string, parsed by CliOptionProvider)
288 config_group->add_option(
289 "--metatile-attribute-size",
291 "Metatile Attribute Size - Pins the size in bytes of each metatile attribute entry (1, 2, or 4). When unset, "
292 "Porytiles derives the size from the resolved attribute field masks, which struct Tileset's declared element "
293 "width must corroborate exactly. Must be set explicitly on projects that declare more than one mask layout "
294 "(pokeemerald-expansion), one value per build flavor, and on projects whose masks and struct Tileset "
295 "declaration disagree or whose declaration is unusable. Project-global.");
296
297 // Metatile Attribute Declaration Size (optional std::size_t, captured as string, parsed by CliOptionProvider)
298 config_group->add_option(
299 "--metatile-attribute-declaration-size",
301 "Metatile Attribute Declaration Size - The declared element width in bytes (1, 2, or 4) for generated "
302 "gMetatileAttributes_* C declarations (const uN / INCBIN_UN). Normally inferred from struct Tileset's "
303 "metatileAttributes member in include/global.fieldmap.h. Required when that declaration is missing, "
304 "unreadable, or not a pointer to u8, u16, or u32, since nothing else in a project implies this width. "
305 "Project-global.");
306
307 // Tileset Animations Wire Anim Code (bool with --flag/--no-flag, captured as "true"/"false" string)
308 config_group->add_flag(
309 "--tileset-animations-wire-anim-code,!--no-tileset-animations-wire-anim-code",
310 [&storage](std::int64_t count) {
311 if (count > 0) {
312 storage.tileset_animations_wire_anim_code = "true";
313 }
314 else if (count < 0) {
315 storage.tileset_animations_wire_anim_code = "false";
316 }
317 // count == 0 means neither flag was provided, leave optional empty
318 },
319 "Tileset Animations Wire Anim Code - Enable or disable automatic animation code wiring.");
320}
321
322} // namespace porytiles
void register_config_options(CLI::App &app, CliOptionStorage &storage)
Registers all config options with a CLI11 App.
Storage struct for CLI option values.
std::optional< std::string > tiles_palette_mode
std::vector< std::string > diagnostic_remarks_include
std::optional< std::string > num_metatiles_in_primary
std::optional< std::string > tileset_paths_primary_bin
std::optional< std::string > packing_strategy
std::optional< std::string > cross_tileset_anim_linking
std::optional< std::string > palettes_edit_mode
std::optional< std::string > tiles_edit_mode
std::optional< std::string > num_tiles_total
std::optional< std::string > metatile_attribute_declaration_size
std::optional< std::string > tileset_paths_secondary_bin
std::optional< std::string > tileset_animations_wire_anim_code
std::optional< std::string > num_tiles_per_metatile
std::optional< std::string > max_map_data_size
std::optional< std::string > metatile_attribute_size
std::optional< std::string > global_anim_palette_resolution_strategy
std::optional< std::string > tileset_paths_primary_src
std::optional< std::string > tileset_paths_secondary_src
std::optional< std::string > global_anim_multi_palette_subtile_resolution_strategy
std::optional< std::string > tile_sharing_packing
std::optional< std::string > num_tiles_in_primary
std::optional< std::string > num_palettes_in_primary
std::optional< std::string > num_palettes_total
std::vector< std::string > diagnostic_warnings_include
std::optional< std::string > global_frame_linking
std::optional< std::string > global_anim_key_frame_resolution_strategy
std::vector< std::string > diagnostic_remarks_exclude
std::optional< std::string > ignore_triple_layer_content
std::optional< std::string > palette_hints_enabled
std::optional< std::string > num_metatiles_total
std::optional< std::string > extrinsic_transparency
std::vector< std::string > diagnostic_warnings_exclude
std::optional< std::string > tile_sharing_alignment
std::optional< std::string > primary_pairing_mode
std::optional< std::string > verify_checksums
std::vector< std::string > primary_pairing_partners