Parameters

Every number the engine turns on, and what it does. Read straight out of the engine at build time, so this page describes the cells you are actually watching rather than the ones somebody wrote about. — back to the cabinet

Movement

massthrust turn/sATP/sdrag
flagellum 12400 0.167 0.810
cilia 161800 1 1.680
pseudopod 8600 1000 0.448

The body

mass_cap 100 Mass cap, not allocation. See the A2 [v0.3] amendment: must-spend would give every cell r = 5.0, make the 1.15 engulf ratio unreachable, and kill phagocytosis outright.
radius_ref 5 radius = radius_ref * sqrt(mass / mass_cap).

What the organelles weigh

phago_mass 20 Declining the attack slot. Zero on all three counts, and here rather than hard-coded so it can be given a price if a weaponless cell turns out to be too cheap a way to buy mitochondria.
toxin_mass 14 not yet documented
pilus_mass 10 not yet documented
membrane_mass 25 not yet documented
efflux_mass 6 not yet documented
encyst_mass 10 not yet documented

Metabolism

mito_mass 7 not yet documented
mito_max 8 not yet documented
mito_output 3 ATP per second per mitochondrion, before saturation and the oxygen-debt throttle.
metabolic_waste_k 3 How much substrate is wasted running the engine hard. Substrate per ATP is 1 + waste_k * throttle^3. Idling is efficient; flat out costs 1 + waste_k times as much fuel for the same ATP. This is the Krebs cycle observation: the last bit of yield is disproportionately expensive, because pushing the electron transport chain harder leaks more than it delivers. It makes the throttle a live decision every tick rather than a build-time ceiling — you can have the power, if you are truly willing to pay for it. The consequence is the interesting part: a big engine is not more powerful, it is more efficient at a given output. Producing 10 ATP/s costs a mito=8 cell 12.2 substrate/s and a mito=4 cell 27.4. Headroom is what mass buys, and mass is not free.
glycolysis_rate 5 Glycolysis: substrate to ATP without mitochondria, at a poor yield. Two ATP per glucose against about thirty for full oxidative phosphorylation, so the yield is deliberately dreadful and the rate is not. When substrate is what is being competed for, rate beats yield -- the Warburg effect.
glycolysis_cost 6 Substrate burnt per ATP fermented. Respiration pays 1.0 to 4.0 depending on throttle; this is the price of not owning an engine.
ros_per_atp 4/100 0.04 Reactive oxygen species: membrane lost per ATP respired. The electron transport chain leaks; glycolysis has no chain and pays nothing. Fermentation is wasteful and clean, respiration efficient and corrosive.
ros_clear_k 1/2 0.5 Fraction of the pool scavenged per second. First order, not a flat rate: scavenging scales with how much there is to scavenge, as any real enzyme does. That matters mechanically as well as physically. A flat drain gives no equilibrium -- production above it accumulates for ever, the pool runs away, and the burn escalates without bound until the cell dies. Measured, that pinned the meter at full for almost the whole match. First order settles instead: the pool rests at production / this, which is higher for a cell respiring harder and lower for one pacing itself. The reading stays informative and the mechanic stays monotonic.
ros_ferment_clear 1/20 0.05 Extra scavenging per ATP per second fermented. Glycolysis has no chain to leak from, so it does not add to the pool -- and the reductant it leaves behind is what clears it. Fermenting is therefore the way out of a burn, paid for in substrate at glycolysis_cost.
ros_tolerance 1/4 0.25 How much the pool holds before any of it reaches the membrane. This is the whole point of the pool: a cell may open the throttle for a few seconds and pay nothing at all.
ros_cap 1 Full scale for a ROS meter. Display only -- the pool itself is not clamped, because a clamped pool stops responding to how hard a cell is respiring once it saturates. Deliberately exactly four times ros_tolerance, so a bar drawn full-scale has its damage threshold a quarter of the way along and the front end needs no second constant to place it. Four rather than two because a cell at rest settles above tolerance already: at two, the bar sat pinned.
ros_bite 6/5 1.2 Membrane lost per second per unit of pool above ros_tolerance.
mito_half_max 4 Mitochondria count at which output reaches half its asymptote. Production saturates: capacity = output * n / (1 + n / half_max). A cell cannot stack engines indefinitely — oxygen has to diffuse to them — and without this the Nth mitochondrion is worth exactly as much as the first, which makes "buy more" a strictly dominant strategy. A very large value reproduces linear output.
start_atp 40 not yet documented
start_substrate 250 not yet documented
oxygen_tau 2 Oxygen-debt window, in seconds. Design section A7 says 2 s; the napkin harness implemented no window at all, only a ratchet. See review finding 6.
oxygen_k 6/10 0.6 Throttle sharpness: output = capacity * exp(-k * debt). A7 says ~0.6.

The dish

food_level 14 Food in every square of the dish, laid down flat at the start. Set by what a cell can actually eat, not by the dish total. The bloom field it replaced held about the same food overall but concentrated it, and feeding scales with the density underfoot -- so matching the old total (2.25) starved everyone and engulfment all but vanished, at 0.014 of endings. Matching the old rich-patch density instead is the top of a measured curve -- engulfment peaks here at 0.052 and falls again by 20, where the dish stops running out and matches drift to the clock. Starvation stays the commonest ending: the slide is six times richer and still gets stripped inside thirty seconds.
food_patchiness 6/10 0.6 How uneven the dish is. 0 is flat; 1 puts the richest ground at twice the mean and the leanest at nothing. Texture is what makes steer=food a decision and gives a cordon something to deny. Symmetry is what stops it being a lottery -- see food_patches.
food_patches 7 How many patches. Placed in mirrored pairs, so both cells meet the same board however the opening angle falls.
forage_range 30 How far a cell looks when deciding where to feed. Bounded so foraging costs a local sweep rather than the whole grid, and so a cell cannot see the entire dish at once for free.
forage_interval 1/4 0.25 Seconds between re-evaluating where the food is. A cell heading for a patch does not reconsider sixty times a second, and sweeping the grid that often was costing more than the rest of the simulation put together. Chemotaxis has memory; so does this.
poison_decay 40/100 0.4 Fraction of standing poison lost per second. Food does not regrow.
poison_spread 9/10 0.9 Fraction of a square's poison that spreads to its four neighbours each second. Without this, poison only ever shrank: decay scales every square down by the same factor, so the outer ring of a cloud drops out of sight first and a cordon appears to retreat toward its own centre. A chemical in liquid does the opposite -- it widens as it weakens. Spreading also gives toxin an identity beyond damage: a cordon laid early covers more ground later, so the area it denies grows while the harm it does falls.
poison_per_atp 3/20 0.15 Poison laid per ATP committed.
poison_ring_inner 1 The poison ring, in multiples of the emitter's radius. Inner at 1.0 keeps the emitter's own centre out of its cloud while it stands still; outer at 2.0 makes the band about one radius thick, so anything that closes to contact has to cross it.
poison_ring_outer 3 Outer edge of the ring, in radii. Two cells touch at the sum of their radii, so anything at or below 2.0 ends exactly where an attacker stands and never reaches it. At 3.0 the ring covers contact and a phagocyte reaching from 2, and stops short of a pilus reaching from 5 -- so the longest weapon is the one that can open a toxin cell without entering its screen.
poison_bite 6/10 0.6 ATP per second drained by standing in one unit of poison.
attack_grip 0 Extra drag on a cell while something is draining it. The gap this fills: nothing in the sim impedes a target under attack. The only drag modifier is poison, so a pilus does not tether and a phagocyte does not hold -- contact is incidental and breaks immediately. Measured, cells drain for about 5% of frames, and a policy fully committed to hunting loses to a pure grazer at every price predation can be sold for. It is not that eating is unprofitable; it is that you cannot hold anyone still long enough to eat them. Scaled by how hard the attack is biting, so a grip is something you earn by landing an attack rather than a status you apply. Ships at zero until measured.
poison_drag 4/10 0.4 Extra drag per unit of poison. Wading is slow, which is what makes a cordon a cordon rather than a line on a map.

Soft bodies

stretch_from_contact 28/100 0.28 How far contact elongates a cell perpendicular to the squeeze.
stretch_relax 4 How fast shape relaxes back toward round, per second.
stretch_max 135/100 1.35 Hard bound on elongation, in either direction.
contact_breadth_gain 45/100 0.45 How much presenting a broad face increases the drain between two cells. Two pressed cells touch along an area, not a point. Turning your long side to an opponent gives more contact and more transfer both ways, so a grapple is a commitment rather than a free hold.
contact_restitution 0 How much a collision bounces. Zero is a pure smush: the cells stop closing and stay pressed together rather than springing apart. Membranes are inviolable — two cells can deform against each other but never occupy the same space. Separation is shared in inverse proportion to mass, so a heavy cell shoves a light one aside and barely moves itself. That gives size a use beyond the drain ratio: you can physically deny ground.

Ways to die

lysis_threshold 4 Incoming drain per unit of radius that ruptures a membrane. A rate death rather than a stock death: enough at once and you burst however full your reserve was. This is what stops a large ATP pool from making a cell safe against everything, which is why hoarding has won every measurement so far.
apoptosis_time 15/10 1.5 Seconds a pilus must be held before it triggers shutdown in its target. Kills outright, ignoring the reserve. Gives the pilus a threat rather than a slow tax, and a countdown the target can hear.
apoptosis_decay 2 not yet documented

Feeding

feed_rate 20 Substrate per second drained while feeding. At 20/s a 40-unit patch takes the specified ~2 s.
feed_speed_factor 3/10 0.3 Fraction of top speed available while feeding.

The environment

dish 100 not yet documented
wall_restitution 1/2 0.5 Restitution on the hard walls of A15.
centre_pull 3 Inward acceleration at the rim, ramping linearly from zero at the centre. The slide is a shallow bowl: a cell that stops is carried toward the middle, so camping costs thrust continuously, and it costs it in the currency a cell cannot spend twice. It also separates the movement organelles by drag, a property they already have and which otherwise does almost nothing. Zero switches it off. Capped by the weakest legal build's thrust, which is 4.0. Above that the bowl stops being a cost and becomes a wall: at 5.0 a tenth of legal builds can no longer hold the rim at full effort, and at 8.0 more than a third cannot. That does not tax camping, it shrinks the dish, and it shrinks it most for the heavy slow builds that were already struggling. Three is the most that leaves every build able to buy its position. It shipped at 1.5 for a reason that turned out to be nothing: the commitment "cycle" appeared to break above that, but the link doing the breaking was turtle-versus-miser, which is a coin flip and was simply landing the other way. Both edges that are actually measurable hold to pull 12 and beyond. See commitment_cycle.rs.
flow_amp 3/10 0.3 Flow field acceleration amplitude. "Gentle — biasing, never deciding."
flow_wavelength 50 Spatial wavelength of the flow field, in units.
flow_period 20 Seconds per temporal cycle of the flow field.

Genome mass

genome_free_nodes 10 Nodes that cost nothing.
genome_mass_per_node 0 Mass per node past the free allowance.
genome_atp_per_node 1/10 0.1 ATP per second per billable node. Thinking is a running cost, not a size. Body and policy draw on the same budget from opposite ends: a light cell owes little upkeep and can afford to think hard, a heavy one has to think cheaply.
genome_max_nodes 40 not yet documented

The interaction law

phago_strength 18 ATP per second taken at surface contact, before size and resistance.
toxin_strength 3 not yet documented
pilus_strength 6 not yet documented
phago_reach 2 How far past surface contact the drain reaches, in units. This single number carries each attack's identity: phagocytosis must touch, toxin works at range, the pilus sits between them.
toxin_reach 10 not yet documented
points_kill_fast 3 Round points. Deliberately the smallest integers that produce the ordering the design wants: every kill beats every timeout, faster kills beat slower ones, and stagnating is the only way to go backwards. They are a rating and never a balance -- ADR 0003. Nothing converts them to anything, which is why they can be this small without being unfair. Integers, because a rating that needs fixed-point is a rating nobody can check by hand.
points_kill_mid 2 not yet documented
points_kill_slow 1 not yet documented
points_timeout_win 0 not yet documented
points_timeout_loss -1 not yet documented
points_draw 0 not yet documented
points_double_loss -1 not yet documented
points_fast_ticks 600 The two band edges, in ticks.
points_mid_ticks 1200 not yet documented
no_attack_poison 0 Poison laid into the field per ATP, by attack organelle. Only the toxin vesicle has any: before this existed, attack=none could lay poison exactly as well as a toxin cell and bank the 14 mass, which made the organelle a tax on the honest.
phago_poison 0 not yet documented
toxin_poison 1 not yet documented
pilus_poison 0 not yet documented
pilus_reach 5 not yet documented
integrity_per_radius 3/2 1.5 Fraction of what you take that you keep. Theft rather than damage. Membrane integrity per unit of radius: the size of the pool an attack eats into. The change this belongs to. ATP used to be energy, score and hit points at once, and that is why combat never mattered: draining a cell is undone by grazing, so an attack was a tax the dish refunded. Integrity is a separate stock that only combat touches and only ATP restores, which makes damage a debt rather than a dip. Scaled by radius because a bigger cell is more membrane. Set from a measured curve rather than picked. Kill rate against depth, per unit radius: 6.0 gives 0.142, 3.0 gives 0.157, 1.5 gives 0.202, 0.8 gives 0.249, 0.4 gives 0.296. Deeper than about 3 and the pool is never spent -- lysis was 0.012 of endings, so the mechanic existed without doing anything. Shallower than about 1 and a phagocyte kills in a quarter of a second of contact, which is a coin flip on who touches whom first rather than a fight. 1.5 is where cyclic triples peak (0.094) while lysis is a tenth of all endings, and it is the first constant in this project to move the kill rate at all: six earlier sweeps -- attack strength, predation gain, grip, reach, poison bite, poison drag -- moved it by nothing, because they all tuned a contest whose outcome was decided by the resource you gave up grazing to enter it.
repair_per_atp 1/2 0.5 Integrity restored per ATP spent repairing.
repair_max_rate 3 Ceiling on how fast a cell can pour ATP into repair. Without a cap, a cell with a full tank shrugs off any wound instantly and the pool stops being a pool. With one, repairing is a rate you have to sustain -- and you can only sustain it where there is food to burn, which is what finally makes the dish positional: driven onto stripped ground, your wounds stay.
engulf_cost 4 ATP to attempt an engulfment, and how much larger the attacker must be. Cheap to do, hard to earn. Engulfment used to be a label: run out of ATP while something bigger touched you and the replay called it eating. It is now a deliberate act with a price and a precondition, which gives phagocytosis a win condition of its own rather than a way of describing somebody else's starvation. The precondition is what makes a build out of it. A phagocyte wants mass, and against something its own size it cannot simply swallow -- it has to wear the thing down first, because a damaged cell is a smaller cell. Every mechanic in the engine feeds that chain: attacks thin a membrane, an empty cell collapses, a collapsed cell eats itself to survive, and eating itself is what finally brings it inside the ratio.
engulf_ratio 115/100 1.15 not yet documented
turgor 3/10 0.3 How much of a cell's size is turgor it loses as its membrane goes. Nought means damage never shrinks you and engulfment can only be set up by starving somebody; one means a spent membrane leaves nothing at all.
autophagy_rate 3/2 1.5 Integrity per second a collapsed cell eats to stay alive, and the ATP it gets back per unit. Running out of ATP used to kill a cell outright, which is a strange death for something with an intact membrane and a waste of the most dramatic moment available: a helpless opponent nobody is required to finish. Now an empty cell collapses -- it cannot thrust, attack or mend -- and starts consuming itself. Autophagy is one mechanic doing the work of two. Eating your own membrane for energy is both the last-ditch recovery and the reason the membrane degrades while you are down, so a collapsed cell is on a clock of its own making. Get back up and you are thinner for it; do not, and there is nothing left to open.
autophagy_yield 2 not yet documented
collapse_recover_atp 6 ATP a collapsed cell must claw back before it can act again.
poison_membrane_share 1 How much of a poison bite lands on the membrane rather than on ATP. Zero is a purely metabolic poison that starves you; one is a corrosive that dissolves you. The seam for two distinct toxin organelles later.
size_weight 1 How much the size difference matters, in [0, 1]. The size term is 1 + weight * (r_attacker / r_target - 1), so zero removes size from the interaction entirely and one is the raw ratio. Exists so the question "is mass still buying wins?" can be measured rather than argued about — every previous attempt to answer it by reasoning got it wrong.

The commitment law

charge_attack_scale 5 Stored charge that doubles outgoing drain.
charge_defence_scale 4 Stored charge that halves what still gets through your defence.
charge_leak 1/5 0.2 Fraction of stored charge lost per second. Commitment is spent whether or not you needed it. Holding a loaded rock costs you continuously, so there is no banking it indefinitely.
charge_radius_gain 25/10000 0.003 Radius added per unit of stored charge. The telltale. Stored commitment has to sit somewhere, so a loaded cell is fractionally swollen — which makes it slower and a larger target, and is visible to anyone watching velocity, because size and velocity are already public under A8. Nothing new is exposed and no flag is set; it falls out of the same radius the rest of the physics already uses. Deliberately not documented for players at launch. Extant and exploitable, per Ian.
drain_upkeep_fraction 1/5 0.2 ATP spent per unit of ATP drained. Proportional, so pressing an attack you cannot land is free and pressing one hard is not.

The resistance law

membrane_reduction 1/2 0.5 Fraction of incoming drain removed. Paid for in mass.
efflux_reduction 4/5 0.8 Paid for in ATP, and only while the pumps are running.
encyst_reduction 19/20 0.95 Paid for in time: you cannot act at all.
efflux_cost 5 not yet documented
efflux_spinup 1/2 0.5 Seconds to reach full protection. Running the pumps late is worse than not running them, which is what makes efflux a prediction problem.
encyst_transition 3/2 1.5 Seconds to enter, and to leave. Unprotected throughout both.
encyst_upkeep 1/10 0.1 not yet documented

Pseudopod shape

shape_min 7/10 0.7 not yet documented
shape_max 13/10 1.3 not yet documented
shape_rate 15/100 0.15 Shape units per second. 0.15/s covers the +-30% range in ~2 s.

Chemoreception

chemo_substrate_cost 8 not yet documented
chemo_cooldown 3/2 1.5 not yet documented
chemo_exact_range 12 Within this range the reading is an exact bucket.
chemo_size_bias 2/5 0.4 How much of a sensing range comes from size rather than being flat. At 0 the ranges are the old constants and size means nothing. At 1 they scale linearly with radius, which is too harsh: the lightest legal build would resolve an exact reading only 0.8 units outside contact, by which point incoming has already told it everything. 0.4 keeps both ends useful while still making size a signature.
chemo_coarse_range 30 Within this range the reading is weak/strong only. Beyond it, nothing.
chemo_starving_below 25 not yet documented
chemo_low_below 75 not yet documented
chemo_healthy_below 150 not yet documented
basal_cost_per_mass 7/100 0.07 Basal metabolic cost, in ATP per second per unit of mass. Absent from the design as written, and its absence is why nothing is scarce: a cell spends 4-7% of its available energy over a whole match, and any build with four mitochondria out-produces the maximum possible incoming damage. Charging for existing does three things at once — mass stops being free, production stops being surplus, and feeding becomes necessary rather than optional. Zero reproduces the design as written.

Scoring a timeout

score_harvest_weight 1 Weight on substrate taken from the dish. Scoring on territory rather than on reserves is the lever against hoarding: ATP + substrate is conserved under conversion (review finding 2, correctly fixed) but still pays a cell for sitting still.
score_reserve_weight 1/100 0.01 Weight on ATP + substrate remaining. Set low to make reserves a tiebreak rather than the whole score.

The match

match_ticks 1800 not yet documented