Vehicles
All 36 vehicles, their stats, faction variants and fitting rules.
For players (plain language). In Taurion you never walk around on foot — your character (your pilot) is always sitting inside a vehicle, and the vehicle is what gives you all your stats: how much loot you can carry, how fast you move, how tough you are in a fight, and whether you can mine ore or prospect for new deposits. Each of the three factions has its own 12-vehicle line with its own flavour names — for example the Red starter is the Raider, the Green starter is the Scarab, and the Blue starter is the Barracuda. You get one free starter vehicle the moment you create a character; every other vehicle is built from a blueprint using refined materials and a small amount of in-game currency (vCHI — the game's spendable token, also called CHI). Bigger vehicles cost far more and take far longer to build, but carry more, hit harder and survive longer. Stronger gear ("fitments" — the weapons and modules you bolt onto a vehicle) is covered in the items doc. The tables below list every vehicle with both its in-game display name and its internal code.
Jargon, once. GSP = Game State Processor, the server program that runs the game's rules. Fitment = a mountable equipment item (weapon or module). vCHI = the spendable in-game currency (CHI). Blueprint = the recipe item needed to build a vehicle. Block = one step of game time (roughly, one blockchain block).
Source of truth. Every number, slot count, resource cost and rule in this document comes directly from the Game State Processor (GSP) config protos and C++ source. Display names are the ones shown in the official client; the item codes are what appears on-chain and in the GSP API. Where a value is invented or interpreted, it is flagged explicitly.
In Taurion a "character" is a pilot/avatar that is always inside a vehicle. The
vehicle the character occupies determines all of its on-map stats: cargo, speed,
HP/regen, combat, mining and prospecting capability, and how many fitments
(equipment) it can carry. A character cannot exist without a vehicle — when one
is spawned it is immediately placed into the faction starter vehicle
(src/spawn.cpp:124-145).
There are three faction vehicle lines, each with 12 vehicle types (36
total). The internal code prefix encodes the faction; the GSP infers faction
purely from the name prefix (proto/roconfig.cpp:259-265,
:371-383):
| Prefix | Faction string | Faction (display) | Lore name |
|---|---|---|---|
rv |
r |
Red | Jodon |
gv |
g |
Green | Ephrati |
bv |
b |
Blue | Reubo |
1. How vehicle stats are read and applied#
A vehicle type is one entry in the fungible_items map whose ItemData carries
a VehicleData message (proto/config.proto:114-146).
The wrapper ItemData fields that matter for vehicles
(proto/config.proto:222-277):
| Field | Meaning |
|---|---|
space |
Cargo space the vehicle item itself occupies when stored in a building inventory (all vehicles = 10). |
complexity |
Base fitment-complexity budget of the vehicle and the per-unit construction time/cost multiplier. |
with_blueprint |
If true, an associated blueprint item exists and the vehicle can be constructed. Starters have this unset. |
construction_resources |
Map of refined-material item → quantity required to build one vehicle. |
faction |
Not stored in the proto text; inferred at runtime from the rv/gv/bv prefix. |
VehicleData fields (proto/config.proto:114-146):
| Field | Unit / meaning |
|---|---|
cargo_space |
Base cargo capacity, in item-space units. Raw ores and refined materials each occupy space: 1 per unit (materials.pb.text:6-7), so cargo_space: 3600000 = 3,600,000 ore/material units. |
speed |
Base movement speed in milli-tiles per block (config.proto:121). Divide by 1000 for tiles/block. |
regen_data.max_hp.armour / .shield |
Max armour and shield HP (combat.proto:199-217). |
regen_data.regeneration_mhp.shield / .armour |
Regeneration in milli-HP per block (combat.proto:224-233). Shield regenerates; armour only regenerates if a fitment grants armour regen (no vehicle has base armour regen). |
mining_rate.min / .max |
Resource units mined per block, chosen uniformly in [min,max] (character.proto:38-46). max: 0 means the vehicle cannot mine. |
prospecting_blocks |
Number of blocks to prospect one region. Lower is better/faster. 0/unset = cannot prospect. |
size |
STARTER/LIGHT/MEDIUM/HEAVY/VERY_HEAVY (config.proto:35-42). Gates which size-locked fitments can be mounted. |
equipment_slots["high"/"mid"/"low"] |
Number of fitment slots of each type (config.proto:138-144). |
combat_data.target_size |
"Size" of the vehicle as a target for hit/miss math; smaller = harder to hit (combat.proto:265-272). Vehicles ship with no base attacks — all weapons come from fitments. |
Stat derivation at runtime#
When a vehicle is entered or fitments change, DeriveCharacterStats
(src/fitments.cpp:296-311) does:
InitCharacterStatscopies the baseVehicleDataonto the character: cargo, speed, combat data, regen/max-HP, mining rate, prospecting blocks (fitments.cpp:131-156). A vehicle has no refining ability by default (fitments.cpp:154-155).ApplyFitmentssums all fitment stat modifiers (non-compounding) and applies them once (fitments.cpp:162-292): adds attacks/self-destructs/low-HP-boosts, modifies cargo, speed, prospecting (floored at 1 block), mining min/max, max armour/shield, shield/armour regen, attack range/damage, received damage, hit chance, and may add a mobile refinery.- Current HP is reset to max (
fitments.cpp:310).
Slot-key strings are exactly
"high","mid","low"(config.proto:138-144). A vehicle withvalue: 0for a slot type, or no entry at all, has zero slots of that type.
2. Fitment / equipment capacity rules#
The complete fitment catalog (all 104 fitment item types, their codes, complexity, faction/size/slot constraints, construction recipes and effects) is in the items doc (Items & Materials §4A). The combat semantics of weapon/support fitments are in the combat doc (Combat §10). This section covers only the capacity rules that gate which fitments a given vehicle can mount.
CheckVehicleFitments (src/fitments.cpp:34-122)
validates a proposed loadout:
- Complexity budget. Sum of fitment
complexitymust be<=the vehicle's available complexity. Available = basecomplexitymodified by any fitment that itself modifies complexity (fitments.cpp:88-97). For a stock vehicle the budget equals thecomplexityvalue in the tables below. - Slot counts. Fitments are counted per slot type (
high/mid/low); a type that the vehicle lacks, or over-subscribing a type, fails (fitments.cpp:99-119). - Size lock. A fitment with
vehicle_sizeset only mounts on a vehicle of that exact size (fitments.cpp:61-70). - Faction lock. If both fitment and vehicle declare a faction, they must
match (
fitments.cpp:76-84). On mainnet all vehicles are faction-bound, so a faction-specific fitment only fits its own faction's vehicles.
Note on
complexitydual use. The samecomplexityvalue is the fitment budget and the construction time/cost multiplier (see §4). A Looter (complexity: 10) costs10 × construction_costvCHI and takes10 × construction_blocksblocks to build, and can hold up to 10 complexity of fitments.
2.1 What competes for each slot type (fitment families by slot)#
A vehicle's equipment_slots budget is split across three slot types, and each
fitment family is hard-bound to one slot type (fitment.slot,
fitments.pb.text). This is why the faction slot-skew (§3.4) is meaningful: a Red
vehicle's extra high slots only buy high-slot gear, etc. The table groups all
29 fitment families by the slot they consume. Full per-family stats, complexity,
size/faction locks and recipes are in the items doc
(Items & Materials §4A); combat math in
(Combat §10). Faction-locked families are flagged
(r/g/b).
| Slot | Fitment families competing for it | Character |
|---|---|---|
| high | beam (Tachyon Beam), gun (Rail Gun), bomb (Energy Bomb), missile (Missile Launcher), laser·r (Plasma Cannon), selfdestruct·r (Vostock), retarder (Temporal Disrupter), longretard (Wide Temporal Disrupter), syphon (Syphon), syphonaoe (Syphon Field), pick (Tritanian Drill, lf-only), scanner (Graviton Spectrometer, lf-only) |
Offence: weapons, drains, slows, plus mining/prospecting tools. Red favours these. |
| mid | shield (Shield Enhancer), replenisher (Shield Replenisher), allyreplenish (Shield Projector), rangered (Spatial Blur), rangeext (Target Enhancer), hitext (Tracking Enhancer), turbo (Energy Enhancement), hitred·b (Tracking Disrupter), mentecon·b (Targeting System Disruptor, vhf-only) |
Defence/support/tracking/control. Blue favours these. |
| low | expander (Cargo Expander), dmgred (Armour Hardener), dmgext (Target Analyser), multiplier (Qubit Multiplier), armourregen (Armour Repair), plating·g (Tritanian Plating), lowhpboost·g (Zerkozis), refinery (Mobile Refinery, vhf-only) |
Utility/passive boosts: cargo, armour, damage/range bumps, mobile refining. Green favours these. |
Slot/lock interactions for the support & control families (the ones easy to miss because they are not "weapons"):
- Mid-slot support:
allyreplenish(Shield Projector) is a friendly AoE that buffs allies' shield regen;rangered(Spatial Blur) andhitred(Tracking Disrupter) are enemy-debuff AoEs;hitext(Tracking Enhancer) buffs the owner's own hit chance.hitredandmenteconare Blue-only (faction: "b") and not size-locked.mentecon(Targeting System Disruptor) exists only asvhf mentecon, complexity 500.- Low-slot armour:
dmgred(Armour Hardener, −5% received damage) andarmourregen(Armour Repair, the sole source of armour regen) are size-locked, faction-neutral.plating/lowhpboostare Green-only.- High-slot drains:
syphon/syphonaoe(Syphon / Syphon Field) drain shield only and return it to the attacker; they are size-neutral, so any tier mounts on any vehicle with a free high slot.
3. Vehicle stat tables#
Each table column maps to a proto field as defined in §1. HP is shown as
armour / shield; Regen is shield-regen in milli-HP/block (no vehicle has
base armour regen). Slots is high / mid / low. Speed is the raw
milli-tiles/block value (÷1000 = tiles/block). Mine is mining_rate.max
(min is always 0). Prosp is prospecting_blocks (— = cannot prospect).
Cmplx is complexity.
3.1 Red / Jodon line (rv)#
Source: vehicles_starter.pb.text:1-24, vehicles_others.pb.text:1-364.
Display names are the ones shown in the game UI.
| Code | Name | Size | Cargo | Speed | HP (a/s) | Regen | Slots (h/m/l) | Mine (max) | Prosp | Cmplx | Target |
|---|---|---|---|---|---|---|---|---|---|---|---|
rv st |
Raider | STARTER | 1,000,000 | 4500 | 20 / 30 | 1000 | 1 / 0 / 0 | 2,000,000 | 10 | 2 | 20 |
rv s |
Looter | LIGHT | 3,600,000 | 4500 | 20 / 50 | 2000 | 1 / 1 / 2 | 4,000,000 | 9 | 10 | 20 |
rv m |
Pillager | MEDIUM | 11,500,000 | 3500 | 100 / 200 | 5000 | 3 / 1 / 2 | 6,000,000 | 8 | 100 | 30 |
rv l |
Marauder | HEAVY | 27,600,000 | 2500 | 500 / 1000 | 20000 | 4 / 2 / 4 | 8,000,000 | 7 | 500 | 50 |
rv sc |
Finder | LIGHT | 0 | 5500 | 20 / 10 | 1000 | 0 / 1 / 2 | 0 | 5 | 30 | 20 |
rv mt |
Blood Carrier | MEDIUM | 125,000,000 | 3500 | 500 / 200 | 4000 | 1 / 1 / 2 | 2,000,000 | 8 | 100 | 30 |
rv lt |
Bone Carrier | HEAVY | 350,000,000 | 2500 | 1000 / 300 | 6000 | 1 / 2 / 3 | 4,000,000 | 7 | 500 | 50 |
rv vlt |
Skull Carrier | VERY_HEAVY | 2,600,000,000 | 2000 | 2000 / 500 | 10000 | 2 / 2 / 2 | 6,000,000 | 6 | 3000 | 90 |
rv sa |
Devourer | LIGHT | 5,600,000 | 4500 | 50 / 250 | 5000 | 3 / 1 / 2 | 8,000,000 | 5 | 100 | 20 |
rv ma |
Exterminator | MEDIUM | 25,000,000 | 3500 | 200 / 500 | 15000 | 5 / 2 / 2 | 10,000,000 | 5 | 300 | 30 |
rv la |
Devastator | HEAVY | 105,000,000 | 3000 | 750 / 2500 | 30000 | 6 / 4 / 4 | 12,000,000 | 4 | 1000 | 50 |
rv vla |
Annihilator | VERY_HEAVY | 285,000,000 | 2500 | 2000 / 5000 | 35000 | 8 / 6 / 6 | 14,000,000 | 3 | 4000 | 90 |
3.2 Green / Ephrati line (gv)#
Source: vehicles_starter.pb.text:51-74, vehicles_others.pb.text:731-1094.
Display names are the ones shown in the game UI.
| Code | Name | Size | Cargo | Speed | HP (a/s) | Regen | Slots (h/m/l) | Mine (max) | Prosp | Cmplx | Target |
|---|---|---|---|---|---|---|---|---|---|---|---|
gv st |
Scarab | STARTER | 1,000,000 | 4500 | 20 / 30 | 1000 | 1 / 0 / 0 | 2,000,000 | 10 | 2 | 20 |
gv s |
Mantis | LIGHT | 3,600,000 | 4500 | 20 / 50 | 2000 | 1 / 1 / 2 | 4,000,000 | 9 | 10 | 20 |
gv m |
Centipede | MEDIUM | 11,500,000 | 3500 | 100 / 200 | 5000 | 2 / 1 / 3 | 6,000,000 | 8 | 100 | 30 |
gv l |
Millipede | HEAVY | 27,600,000 | 2500 | 500 / 1000 | 20000 | 2 / 3 / 5 | 8,000,000 | 7 | 500 | 50 |
gv sc |
Flea | LIGHT | 0 | 5500 | 20 / 10 | 1000 | 0 / 1 / 2 | 0 | 5 | 30 | 20 |
gv mt |
Horse | MEDIUM | 125,000,000 | 3500 | 500 / 200 | 4000 | 0 / 1 / 3 | 2,000,000 | 8 | 100 | 30 |
gv lt |
Ox | HEAVY | 350,000,000 | 2500 | 1000 / 300 | 6000 | 0 / 3 / 3 | 4,000,000 | 7 | 500 | 50 |
gv vlt |
Elephant | VERY_HEAVY | 2,600,000,000 | 2000 | 2000 / 500 | 10000 | 1 / 2 / 5 | 6,000,000 | 6 | 3000 | 90 |
gv sa |
Bee | LIGHT | 5,600,000 | 4500 | 50 / 250 | 5000 | 2 / 2 / 2 | 8,000,000 | 5 | 100 | 20 |
gv ma |
Wasp | MEDIUM | 25,000,000 | 3500 | 200 / 500 | 15000 | 3 / 2 / 4 | 10,000,000 | 5 | 300 | 30 |
gv la |
Hornet | HEAVY | 105,000,000 | 3000 | 750 / 2500 | 30000 | 5 / 3 / 6 | 12,000,000 | 4 | 1000 | 50 |
gv vla |
Widow | VERY_HEAVY | 285,000,000 | 2500 | 2000 / 5000 | 35000 | 6 / 5 / 8 | 14,000,000 | 3 | 4000 | 90 |
3.3 Blue / Reubo line (bv)#
Source: vehicles_starter.pb.text:26-49, vehicles_others.pb.text:366-729.
Display names are the ones shown in the game UI.
| Code | Name | Size | Cargo | Speed | HP (a/s) | Regen | Slots (h/m/l) | Mine (max) | Prosp | Cmplx | Target |
|---|---|---|---|---|---|---|---|---|---|---|---|
bv st |
Barracuda | STARTER | 1,000,000 | 4500 | 20 / 30 | 1000 | 1 / 0 / 0 | 2,000,000 | 10 | 2 | 20 |
bv s |
Urchin | LIGHT | 3,600,000 | 4500 | 20 / 50 | 2000 | 1 / 2 / 1 | 4,000,000 | 9 | 10 | 20 |
bv m |
Crocodile | MEDIUM | 11,500,000 | 3500 | 100 / 200 | 5000 | 2 / 3 / 1 | 6,000,000 | 8 | 100 | 30 |
bv l |
Moray | HEAVY | 27,600,000 | 2500 | 500 / 1000 | 20000 | 3 / 4 / 3 | 8,000,000 | 7 | 500 | 50 |
bv sc |
Octo | LIGHT | 0 | 5500 | 20 / 10 | 1000 | 0 / 2 / 1 | 0 | 5 | 30 | 20 |
bv mt |
Cobra | MEDIUM | 125,000,000 | 3500 | 500 / 200 | 4000 | 1 / 2 / 1 | 2,000,000 | 8 | 100 | 30 |
bv lt |
Trident | HEAVY | 350,000,000 | 2500 | 1000 / 300 | 6000 | 1 / 3 / 2 | 4,000,000 | 7 | 500 | 50 |
bv vlt |
Hydra | VERY_HEAVY | 2,600,000,000 | 2000 | 2000 / 500 | 10000 | 1 / 5 / 2 | 6,000,000 | 6 | 3000 | 90 |
bv sa |
Gorgon | LIGHT | 5,600,000 | 4500 | 50 / 250 | 5000 | 2 / 3 / 1 | 8,000,000 | 5 | 100 | 20 |
bv ma |
Siren | MEDIUM | 25,000,000 | 3500 | 200 / 500 | 15000 | 4 / 4 / 1 | 10,000,000 | 5 | 300 | 30 |
bv la |
Poseidon | HEAVY | 105,000,000 | 3000 | 750 / 2500 | 30000 | 5 / 6 / 3 | 12,000,000 | 4 | 1000 | 50 |
bv vla |
Leviathan | VERY_HEAVY | 285,000,000 | 2500 | 2000 / 5000 | 35000 | 7 / 8 / 4 | 14,000,000 | 3 | 4000 | 90 |
3.4 Cross-faction observations (load-bearing for design)#
- All three lines share identical base stats for every column except
equipment_slots. The only mechanical difference between factions is the slot distribution (and the resulting fitment archetype each faction favours):- Red (Jodon) skews high (offensive weapon) slots.
- Blue (Reubo) skews mid slots.
- Green (Ephrati) skews low (utility/support) slots.
- Verify with any matching pair, e.g.
rv l(Marauder) = 4/2/4,bv l(Moray) = 3/4/3,gv l(Millipede) = 2/3/5 (vehicles_others.pb.text:86-88, 451-453, 816-818).
- Role families (suffix conventions, same across factions):
st= starter (sizeSTARTER, only obtainable by spawning).s/m/l= baseline general-purpose light/medium/heavy.sc= scout (RedFinder/ GreenFlea/ BlueOcto): fastest (speed 5500), zero cargo, cannot mine, best prospecting tier among LIGHT (5 blocks), low HP. Pure recon.mt/lt/vlt= transports (e.g. RedBlood Carrier/Bone Carrier/Skull Carrier, GreenHorse/Ox/Elephant, BlueCobra/Trident/Hydra): massive cargo (up to 2.6 billion forvlt), high armour but low shield/regen, weak mining, sparse weapon slots. Logistics haulers.sa/ma/la/vla= attack/assault (e.g. RedDevourer/Exterminator/Devastator/Annihilator, GreenBee/Wasp/Hornet/Widow, BlueGorgon/Siren/Poseidon/Leviathan): most weapon slots, highest shield + shield regen, best mining rates, but the fastest-decaying prospecting capability (down to 3 blocks atvla).
- Starters are the only
STARTER-size vehicles, the only ones with no blueprint, the only ones whose cargo is1,000,000and complexity2.
4. How a player obtains each vehicle#
4.1 Starter vehicles (rv st, gv st, bv st)#
Obtained only by spawning a new character. A character cannot be created
without one. SpawnCharacter (src/spawn.cpp:116-152):
- Faction → starter vehicle mapping is hardcoded: RED→
rv st(Raider), GREEN→gv st(Scarab), BLUE→bv st(Barracuda) (spawn.cpp:126-142). - The new character is also given one free
lf gun(Light Rail Gun) fitment in its single high slot (spawn.cpp:143). - The character spawns inside its faction's spawn building
(
spawn.cpp:147-151; spawn building IDs inparams.pb.text:33-47: r→6, g→4, b→5).
Creating a character costs character_cost (10 vCHI on mainnet,
params.pb.text:3), with a per-account character_limit of 20
(params.pb.text:4). Starter vehicles cannot be constructed (they have no
with_blueprint), and they are not sold or dropped — one per character spawn.
4.2 All other vehicles — construction from a blueprint#
Every non-starter vehicle has with_blueprint: true and a
construction_resources map, so it is built via the construction service
inside a building that offers vehicle_construction.
Blueprint item codes are auto-derived by appending a suffix to the vehicle
code (proto/roconfig.cpp:248-251, 314-344):
| Suffix | Example | Meaning |
|---|---|---|
bpo |
rv s bpo |
Blueprint Original — reusable unlimited times, can be copied. Consumed 0 per build (one original stays; see below). |
bpc |
rv s bpc |
Blueprint Copy — single-use, cannot itself be copied. Consumed 1 per vehicle built. |
Each blueprint occupies space: 1 (roconfig.cpp:256-257).
Construction move (service type "bld") — JSON schema
(src/services.cpp:1147-1167, 1226-1228):
{
"b": 100,
"t": "bld",
"i": "rv s bpo",
"n": 1
}
Field semantics:
| Key | Type | Meaning |
|---|---|---|
b |
int | Building ID where the service runs (must offer vehicle_construction). |
t |
string | "bld" for construction. |
i |
string | The blueprint item code (...bpo or ...bpc), not the vehicle code. |
n |
int (>0) | Number of vehicles to construct. |
The object must have exactly 4 keys or it is rejected
(services.cpp:1153-1155; see services_tests.cpp:1235-1262 for rejected
malformed examples). This service move is itself wrapped in a top-level account
move; the GSP routes by the "t" value.
Construction rules (src/services.cpp:763-960):
- Building support. The building's
offered_services.vehicle_constructionmust be true for vehicle outputs (services.cpp:833-843). Buildings that offer it: the three ancient hubs (ancient1,ancient2,ancient3), every faction Vehicle Bay*_vb(b_vb/g_vb/r_vb), Central Foundry*_cf(b_cf/g_cf/r_cf), Starter Station*_ss(b_ss/g_ss/r_ss), every*_ccbuilding (b_cc/g_cc/r_cc), and several constructed building tiers (r_c1/r_c5/r_c9/g_c3/g_c7/b_c4/b_c8); building names are catalogued in the buildings doc (Buildings). Grepvehicle_construction: trueunderproto/roconfig/buildings/for the full set (22 production building configs offer it as of this writing, plus test-only configs). (Foundations — buildings still under construction — cannot host any service:services.cpp:1200-1205.) - Faction lock. The output vehicle's faction (from prefix) must equal the
account's faction or the move is invalid (
services.cpp:854-867). - Resources. The required
construction_resources × nof each refined material must be present in the account's inventory in that building (services.cpp:869-883). They are debited on execution (services.cpp:925-929). - Blueprint consumption. Building from an original (
bpo) requires only 1 original present and consumes it... actually it debits 1 original total regardless ofnand the original is not destroyed in the normal sense — the code path debits the blueprint by 1 and the ongoing operation re-disperses it (services.cpp:885-898, 931-934, 939-951). Building from copies (bpc) requires and consumesncopies (services.cpp:887-890, 933-934). In short: originals are reusable, copies are one-shot. - Cost (vCHI, burnt as base cost).
base = construction_cost × complexity × n(services.cpp:790-796). On mainnetconstruction_cost = 1vCHI/complexity (params.pb.text:15); on testnet/regtest it is100(test_params.pb.text:10). - Time. The ongoing operation completes after
construction_blocks × complexityblocks per item (services.cpp:943, 955-960). Mainnetconstruction_blocks = 1(params.pb.text:16); testnet/regtest= 10(test_params.pb.text:11). When buildingnfrom an original, the first is dispersed after one item's time and the rest are scheduled subsequently (services.cpp:939-951). - Service fee. On top of the burnt base cost, if the building is owned by
another player a service fee is paid to the owner:
fee = ceil(base × service_fee_percent / 100)(services.cpp:1011-1015). The fee is 0 in ancient buildings and 0 when you use your own building (services.cpp:999-1007).
4.3 Where blueprints come from#
A construction blueprint original (...bpo) is obtained primarily by
reverse-engineering an artefact (the rve service). The artefact config
lists which blueprint originals each artefact tier can yield
(proto/roconfig/items/artefacts.pb.text):
| Artefact (display) | Code | Reveng cost | Yields (vehicle BPOs, abridged) |
|---|---|---|---|
| Ancient Artefact (common) | art c |
1 vCHI | small/scout/assault tier: rv s bpo, rv sc bpo, rv sa bpo, plus bv/gv equivalents (artefacts.pb.text:7-18) |
| Ancient Artefact (uncommon) | art uc |
1 vCHI | medium tier: rv m bpo, rv mt bpo, rv ma bpo, + bv/gv (artefacts.pb.text:49-57) |
| Ancient Artefact (rare) | art r |
1 vCHI | heavy tier: rv l bpo, rv lt bpo, rv la bpo, + bv/gv (artefacts.pb.text:86-94) |
| Ancient Artefact (ultra-rare) | art ur |
1 vCHI | very-heavy tier: rv vlt bpo, rv vla bpo, + bv/gv (note: no s/m-size) (artefacts.pb.text:123-128) |
Reverse-engineering is probabilistic: success chance is 1/N where the base N
is 10 on mainnet/testnet/Polygon (1 on regtest/ganache) and grows by ×4/3 for
each blueprint of that type the player already holds, with N capped at
1,000,000,000 — i.e. the worst-case success chance is 1/1,000,000,000
(minChance = 1'000'000'000, src/params.cpp:51-92). Originals can then be
copied into single-use copies via the cp service at
bp_copy_cost × complexity vCHI over bp_copy_blocks × complexity blocks
(mainnet both = 1; testnet 100/10 — params.pb.text:13-14,
test_params.pb.text:8-9, services.cpp:742-749).
"Medium Transport (Taurion)" prospecting prize. The prospecting prize list includes a
Medium Transportprize (params.pb.text:104). This is delivered as a generic prize item (prizesuffix,roconfig.cpp:346-360), not a direct grant of amtvehicle; treat it as flavour/partner reward rather than a construction path.
4.4 Swapping vehicles (the v move)#
Once a player owns multiple vehicle items, the active character can switch which
vehicle it occupies inside a building via the character-update v field
(src/moveprocessor.cpp:981-1038, 1593-1610).
{
"c": {
"id": 1,
"v": "rv m"
}
}
(here "rv m" is the Pillager — the v field always takes the internal vehicle
code, never the display name.)
Rules: the character must be at full armour and shield HP
(moveprocessor.cpp:992-998, 963-977), inside a non-foundation building
(moveprocessor.cpp:1000-1019), the target must be a valid vehicle item
(moveprocessor.cpp:1021-1026), and the player must own ≥1 of that vehicle in
that building's account inventory (moveprocessor.cpp:1028-1035). On swap the
old vehicle is returned to inventory (+1) and the new one removed (−1)
(moveprocessor.cpp:1607-1610); stats are then re-derived. The v value must be
a string; objects/numbers are rejected (moveprocessor_tests.cpp:1506-1542).
4.5 Changing fitments (the fit move)#
{
"c": {
"id": 1,
"v": "rv s",
"fit": ["lf gun", "lf shield", "lf pick", "lf expander"]
}
}
fit is an array of fitment codes (moveprocessor.cpp:1040-1092,
example moveprocessor_tests.cpp:1488-1494). Same gating as vehicle swap (full
HP, in a real building, not a foundation) plus the
CheckVehicleFitments constraints in §2. v and fit can be combined in one
character update; the vehicle change is applied first, then fitments are
validated against the new vehicle. Empty array "fit": [] strips all fitments.
5. What the client sees (game-state JSON)#
Per-character output relevant to vehicles
(src/gamestatejson.cpp:259-292,
:88-166, :205-207):
| JSON key | Source | Notes |
|---|---|---|
vehicle |
proto.vehicle() |
The vehicle item code (e.g. "rv s" = Looter). The game UI maps it to the player-facing name. |
fitments |
proto.fitments[] |
Array of mounted fitment codes. |
speed |
proto.speed() |
Effective milli-tiles/block (after fitments). |
cargospace.total / .used / .free |
derived | Total = effective cargo_space; free = total − used. |
combat.hp.current.armour / .shield |
current HP (fractional via mhp/1000). | |
combat.hp.max |
regen.max_hp |
Effective max after fitments. |
mining |
present only if has_mining() |
Effective mining rate. |
prospectingblocks |
present only if has_prospecting_blocks() |
Effective prospecting tier. |
Display names for any of these codes are supplied by the game UI.
6. Mainnet vs testnet/regtest differences#
These affect the economics of obtaining vehicles, not their stats:
| Parameter | Mainnet | Testnet / regtest | Source |
|---|---|---|---|
construction_cost (vCHI per complexity) |
1 | 100 | params.pb.text:15 / test_params.pb.text:10 |
construction_blocks (blocks per complexity) |
1 | 10 | params.pb.text:16 / test_params.pb.text:11 |
bp_copy_cost (vCHI per complexity) |
1 | 100 | params.pb.text:13 / test_params.pb.text:8 |
bp_copy_blocks (blocks per complexity) |
1 | 10 | params.pb.text:14 / test_params.pb.text:9 |
Reveng base chance 1/N |
N=10 | N=1 (regtest only) | params.cpp:60-69 |
character_cost |
10 vCHI | (same; not overridden) | params.pb.text:3 |
Vehicle stats, slots, sizes and construction-resource recipes are identical
across chains — the proto text files are not overridden per chain for
fungible_items.
7. Worked construction example (mainnet)#
Building one Pillager (rv m) — MEDIUM Red transport-class general vehicle:
- Blueprint required:
rv m bpo(original, reusable) orrv m bpc(copy, one-shot). Source the original by reverse-engineering an uncommon artefact (art uc,artefacts.pb.text:49). - Resources (
vehicles_others.pb.text:39-41): 260,000mat a(Agarite), 100,000mat b(Borolium), 40,000mat c(Chronogen). - vCHI base cost:
construction_cost(1) × complexity(100) × n(1) = 100 vCHIburnt. - Time:
construction_blocks(1) × complexity(100) = 100 blocks. - Service fee: 0 if built in an ancient building or your own; otherwise
ceil(100 × service_fee_percent / 100)vCHI to the building owner. - Result: a
rv mvehicle item (cargo 11.5M, speed 3500, 100/200 HP, slots 3/1/2). Enter it via thevmove inside the building.
Open questions#
- Original-blueprint dispersal nuance.
ExecuteSpecificdebits the original blueprint by 1 (services.cpp:931-932) and the ongoing operation later re-adds it when items are dispersed (item_construction.original_typeis set,services.cpp:949-951). The exact re-credit happens in the ongoings handler (ongoings.cpp), which was not read for this doc; the net effect ("originals are reusable") is confirmed by design intent in the comments (config.proto:75-81,services.cpp:939-942) but the precise block-by-block inventory timing for multi-item original builds is not fully traced here. service_fee_percentrange/default. The fee is read from each building's owner-set config (services.cpp:1011-1015); the allowed min/max and default value for that per-building setting live in the building update logic (moveprocessor.cpp:259-278) and were not catalogued in this vehicle doc.- Armour regeneration. No vehicle has base armour regen
(
regeneration_mhponly ever setsshield). Armour regen is purely a fitment effect (fitments.cpp:265); the fitments that grant it are the Armour Repair family (lf/mf/hf/vhf armourregen,armour_regen.absolute= +2000/+4000/+8000/+14000 milli-HP/block), catalogued in the items doc (Items & Materials §4A).