What a carcols id actually is
carcols.meta defines every mod kit, siren profile and light setting a pack ships, each under a plain <id>. carvariations.meta then binds a vehicle to one of each: a kit by name, a siren and a light by that number. The engine keeps one definition per number in each of the three pools, so two entries sharing an id are not two kits — only one of them is ever loaded, and a duplicate on a stock GTA id silently overwrites the base game's own vehicles.
Every pool also has a ceiling the engine simply cannot store past — 254 for a siren on a stock server, 255 for a light, 65535 for a mod kit — and specific values inside that range the engine reads as its own "none" sentinel rather than a real id. An id past either line is not a style problem: the vehicle loads with no working kit, siren or light at all, and nothing in the console says why.
Why renaming the kit is the wrong fix
A mod kit is bound by its kitName, a string, so a kit's id can be changed in exactly one place — carcols.meta — with zero follow-on edits, because nothing else in the pack ever names that number. A tool that renames the kit itself to resolve a collision has to find and rewrite every reference to the old name too, and a kit named without the numeric prefix stock GTA uses (a kit called police_modkit, say) is exactly the case a name-matching rewrite misses: the kit is renamed, no reference is updated, and the vehicle gets no mods at all in LSC. This tool never renames a kit, which is what keeps that class of failure out of reach entirely.
Why a refusal is sometimes the safe answer
A siren or light has no name to hide behind, so moving one means finding every carvariations.meta reference to the old number and updating it in the same pass. When a resource's carvariations.meta cannot be parsed as XML, this tool cannot prove it found every reference in it — and a move it cannot prove is a move it does not make. The same applies when two definitions share one id and both have to move at once while a live reference still points at that shared number: nothing says which vehicle meant which definition, so neither moves. Every refusal is shown with its reason, in the same panel style as the moves that do go ahead, because the id this tool would not touch is the one a reader most needs to see.
The siren bone limit, and SSLA
The base engine drives sirens off bones siren1 through siren20. A profile listing more than twenty has extras with no bone to attach to on a server that has not changed anything — they simply never light up. The Siren Setting Limit Adjuster raises that ceiling to 32 and also widens the safe id range itself, so this tool asks whether your server runs it before it decides what counts as over the limit or out of range; the answer changes both checks at once, and the report says which assumption it used.
What this tool does not check
It reads exactly two files per resource: carcols.meta and carvariations.meta. It has nothing to say about a missing spawn code, a broken handlingId, or a stream-asset name collision — those are Spawn Code Finder and Asset Clash Finder's half of the job, on the same drop. And it is a static read of the files as supplied: it never starts a server, so it can tell you an id is safe to move and never that the vehicle actually spawns with working mods.
Frequently asked questions
What is a carcols.meta id, and why does it need to be unique?
A mod kit, siren profile and light setting are each a plain number that carvariations.meta and the game engine reference by value, not by name. The engine indexes each pool by that number, so two kits (or two siren profiles, or two light settings) claiming the same id are not two entries — only one of them is ever read, and which one depends on load order.
Why is 0 or 255 a problem even though it is a valid-looking number?
Stock GTA already owns id 0 for mod kits and several low ids for its own vehicles, and the engine reads specific high values — 255 for a light, 255 and 65535 for a mod kit — as its own "none" sentinel rather than as a real id. A custom entry that lands on one of those numbers either overwrites a base-game vehicle's mods or behaves as though it had none at all, silently.
Does this tool rename my mod kit?
No. It only ever changes the numeric <id>, never kitName. carvariations.meta binds a kit by name, so a kit's id can move without touching any other file — which is also why a renamed kit never loses a reference the way a tool that rewrites kitName can.
What does it mean when a move is refused?
This tool never renumbers a siren or light id unless it can prove it found every carvariations.meta reference to the old number. If any resource in the scan has a carvariations.meta that could not be parsed as XML, or two definitions sharing one id both have to move while a live reference still points at that id, the move is refused and explained rather than guessed at — refusals are listed as prominently as the moves that do go ahead.
My siren id is referenced from a different resource. Is that handled?
Yes, and it is the case worth asking about. A siren or light id is a global number with no name to hide behind, so the carvariations.meta that references it is often not the one sitting next to the carcols.meta that defines it. The scan searches every resource you dropped for references, and each cascade edit is written into the resource it actually belongs to. A reference pointing at a number nothing in the scan defines is reported as a dangling siren or light id rather than passed over.
Does this check whether my siren profile has too many sirens?
Yes. The base engine only drives sirens siren1 through siren20; a profile with more than that has extras with nothing to attach to on a stock server. The Siren Setting Limit Adjuster raises that to 32, so this tool asks whether your server runs it before deciding what "too many" means.
Does this upload my files anywhere?
No. The whole scan and every edit run in your browser tab: there is no request in the page and no server behind it. Only carcols.meta and carvariations.meta are opened; every other file is counted by name and size and never read. The only thing that leaves the tab is a zip you choose to save, and it holds only the files an accepted move actually changed.
What does the downloaded zip contain?
Only the carcols.meta / carvariations.meta files an accepted move changed, each paired with a .bak of the exact original text (skipped if that .bak already exists, so re-running this tool never overwrites the one copy of the true original), plus a Markdown report and a JSON manifest listing every id moved, from what to what, and why.
