Reference

Every constant the game is tuned by, section by section, exactly as written in the source. This is the appendix: the numbers a player actually needs are on the topic pages, in stat blocks read out of the compiled build. What is here is the whole list, values shown as they are written -- so a constant defined in terms of another shows that relationship rather than hiding it behind a number.

Abilities

What every button in the game can be made to do. An item names one of these for its click and one for its hold; nothing else decides what a mouse button does.

AbilityWhat the button doesAimed
punchpunch-
grabgrab what is ahead, let go to throw it-
swingswipe-
bashcharge a heavy bash-
castcharge the spell, let go to castaims
drinkdrink it-
throwaim, let go to throw itaims
drawdraw, let go to shootaims
hookaim, let go to fire the claw; where it bites, it reels you inaims
ropetie the rope ahead, then throw the free end-
eateat it-
guardraise the shield-

Movement and the body

ConstantValue
RIDE_HEIGHT0.95fBody origin over the ground: the feet are drawn here, and local_predict's floor is here.
WALKER_RADIUS0.4fThe torso capsule's radius: the disc the prediction pushes out of the arena.
CAPSULE_LO-0.10fThe walker capsule's lower sphere center (radius 0.4): its bottom clears the ground by 0.45.
CAPSULE_HI0.55f
WALKER_DENSITY1380.0fThe short capsule at this density masses what the full-height one did: a ~820 kg wizard, the figure every carry, throw, and bonk was tuned against.
STEP_HEIGHT0.45fGround this far above the feet is a step to ride up onto; higher is a wall.
RIDE_SNAP0.30fGround this far below the feet still holds the walker down (slopes, the deck's sag).
RIDE_PROBE0.20fThe ray fan's spread about the origin, so a gap between logs is never the ground.
RIDE_KP300.0fThe spring on the ride height, as an acceleration per meter of error...
RIDE_KD25.0f...and per m/s of vertical speed.
SHOVE_RANGE3.5f
SHOVE_SPEED8.0f
INVERT_Y0
HAND_RADIUS0.17f
HAND_KP520.0fThe mittens' spring, as an acceleration per meter...
HAND_KD46.0f...and per m/s relative to the torso: about critically damped, so a turn of the look does not swing them out and back.
HAND_MAX_ERR1.4fClamp spring stretch so a trapped hand can't build silly force.
HAND_LEASH2.5fPast this the hand is lost (tunneled, flung); snap it back home.
ConstantValue
CLIMB_COS0.342fcos 70: a normal this far from up, or past level (an overhang), is a wall to climb; nearer up is ground, or a slope to walk.
CLIMB_REACH0.85fTorso center to a wall the probes can find (the capsule touches at WALKER_RADIUS).
CLIMB_HOLD0.55fWhere the torso is held off the wall along its normal.
CLIMB_HOLD_K12.0fThe hold, as a velocity per meter of error.
CLIMB_PROBE_UP0.35fThe chest probe, above the torso center...
CLIMB_PROBE_DOWN0.45f...and the hip probe, below it: the hold outlives the chest at the top edge.
CLIMB_INTO0.75fCos of how squarely a wish (or a flight) must meet a wall to grab it.
CLIMB_SPEED2.2fAlong the wall: slow and deliberate.
CLIMB_ACCEL30.0f
CLIMB_JUMP_OFF5.0fOff the wall: out along its normal...
CLIMB_JUMP_UP4.5f...and up.
CLIMB_HOP5.5fA jump into or along the wall: a burst that way...
CLIMB_HOP_TIME0.35f...coasting this long before the steer takes back over.
CLIMB_HOP_COST0.12fStamina a hop spends.
CLIMB_REGRAB0.4fSeconds after letting go before a wall can be grabbed again.
CLIMB_MANTLE_UP4.8fOver the top: the lift...
CLIMB_MANTLE_FWD2.5f...and the step onto it.
STAMINA_CLIMB_DRAIN0.14fPer second of moving on the wall, up or down...
STAMINA_CLIMB_SIDE_K0.5f...and across, at this fraction.
STAMINA_CLING_REGEN0.20fPer second of clinging still.
STAMINA_SPRINT_DRAIN0.05fPer second of sprinting.
STAMINA_JUMP_COST0.05fA jump...
STAMINA_SPRINT_JUMP_COST0.15f...and one out of a sprint.
STAMINA_REGEN0.20fPer second off the wall, after...
STAMINA_REST1.0f...this long without exertion...
STAMINA_EMPTY_REST2.0f...or this long after it ran out...
STAMINA_GROUND_REST0.2f...and this long on the ground.
STAMINA_WINDED0.25fEmptied, nothing strenuous until it is back to this (or to whatever the afflictions leave of the bar).
STAMINA_MEAL0.25fThe bonus a potion puts under the bar.
ConstantValue
DODGE_TIME0.55fHow long a roll runs, and how long the wizard is untouchable.
DODGE_SPEED20.0fThe burst it settles onto at once...
DODGE_SPEED_END3.0f...easing to this by the end, as the square of what is left.
DODGE_KICK9.0fThe kick off the mark, on top of that burst...
DODGE_KICK_TIME0.13f...falling away over this, as the square of what is left of it.
DODGE_COST0.15fStamina a roll spends, at the press (a sprint jump's price, on PEAK's bar): the button is not free to mash.
DODGE_COOLDOWN0.2fSeconds after a roll ends before another can start.
DODGE_ANSWER0.25fA predicted roll the server has not confirmed by now was refused (local.c): let it go.
ConstantValue
MAX_ROPES6Ropes hanging in the world at once.
ROPE_PER_PLAYER2Ropes one wizard may have hanging; the next replaces their oldest.
ROPE_LINKS10Capsule links per rope at most; the drop under the anchor sizes each hang.
ROPE_LINK_HALF0.45fHalf a link, so a full rope runs ROPE_LENGTH...
ROPE_LENGTH(ROPE_LINKS * 2.0f * ROPE_LINK_HALF)...nine meters.
ROPE_LINK_RADIUS0.04f
ROPE_LINK_DENSITY600.0fA couple of kilos a link: heavy enough to hang taut, light enough to whip.
ROPE_PULL_K0.6fHow much of the climber's weight the link under the hand feels.
ROPE_FLING5.0fThe thrown coil's send-off, run down the line.
ROPE_MIN_HANG1.5fA hang asked for over a shorter drop finds no purchase (rope_hang's floor for anything but a tie)...
ROPE_TIE_MIN_DROP0.4f...but a deliberate tie deploys anywhere short of the floor itself: the slack rests on it.
ROPE_TIE_RANGE3.5fHow far ahead the rope item can tie its anchor.
ROPE_GRAB_REACH1.1fTorso center to the chain's line a hand can catch.
ROPE_HOLD0.5fWhere the torso hangs off the chain.
ROPE_CLIMB_SPEED2.0fAlong the rope, a touch under the wall's.
ROPE_TOP_STOP0.4fHow close to the anchor the climb reaches.
ROPE_INTO0.6fCos of how squarely a wish (or a flight) must push at a rope to catch it.
SND_ROPE12.0fA claw biting home, a rope tied or hung.
ConstantValue
MAX_HOOKS4Pooled claw shots.
HOOK_RANGE10.0fAll the chain there is: the claw dies at its end, and the reticle's line.
HOOK_SPEED30.0fThe claw's flight.
HOOK_LIFE(HOOK_RANGE / HOOK_SPEED)Seconds of flight the chain allows.
HOOK_RADIUS0.09fThe claw's collision sphere.
HOOK_DAMAGE4.0fA claw is a tool, not a weapon: a scratch...
HOOK_KNOCK3.0f...and a nudge.
HOOK_COOLDOWN0.8fBetween shots.
HOOK_PULL_SPEED15.0fThe reel: meters a second toward the bite.
HOOK_ARRIVE0.9fWithin this of the bite the reel is done.
HOOK_STANDOFF0.45fThe reel aims this far short of the surface, so it lands a body beside the wall and not inside it.
HOOK_PULL_MAX_T1.5fA reel outlives no packet loss: past this it lets go whatever happened.
HOOK_STALL_T0.30fSeconds of not closing on the bite (a lip in the way) before the reel gives up.
HOOK_RETRACT_T0.20fSeconds the claw takes to fly home along the chain (client cosmetic).
SPRINT_SPEED_K1.55fThe sprint, as a multiple of the walk.
CROUCH_SPEED_K0.45fThe crouch (ctrl held, or the pad's L3), as a multiple of the walk; it wins over the sprint.
ConstantValue
SEAT_REACH2.4fTorso center to the log's center: close enough to sit down on.
SEAT_FRONT0.10fHow far toward the fire the sit point sits off the log's middle: over the timber, nudged fireward so the folded legs clear it. The torso capsule (WALKER_RADIUS) overlaps the log at this range and is meant to -- a seated body occupies its seat, and the pin is absolute, so nothing pushes back.
SEAT_STAND_WISH0.35fA wish this long stands you up: a nudge of the stick is not a decision, a walk is.

Hands and blows

ConstantValue
HAND_HOLD_T0.15fAbout nine frames at 60 Hz: a click is well under it, and a hold's charge begins that soon after the press.
GRAVITY_YWORLD_GRAVITY_YWhat the prediction integrates by (config.h).
PUNCH_TIME0.34f
PUNCH_HIT_T0.10fImpulse fires when the keyframes have the mittens thrust out.
PUNCH_DAMAGE20.0fWhat a mitten does to whatever it lands on -- every enemy, and a crate -- through character_blow; another wizard is only shoved.
WAVE_TIME1.3f
BONK_MIN_SPEED3.5fClosing speed between two players that counts as a bonk.
BONK_PUSH5.5f
BONK_UP3.0f
BONK_COOLDOWN0.6f
STAGGER_TIME0.5f
STAGGER_ACCEL_K0.15fStaggered players barely fight the knockback.
ConstantValue
RAGDOLL_TIME2.2f
DEATH_TIME3.0fA lethal blow tumbles for this instead: the body rolls and settles where it fell, in view, before whoever owns it takes it away.
RAGDOLL_KICK5.0fThe ball's extra launch along its travel, on top of the real collision.
RAGDOLL_UP4.0fLift the ball hands out with that kick.
RAGDOLL_LIFT2.4fThe least lift any ragdolling blow hands out, so the tumble leaves the ground.
RAGDOLL_SPIN7.0frad/s of tumble handed to the unlocked capsule.
KNOCK_UP1.5fLift handed out with a staggering blow.
STOIC_KICK_K0.06fWhat a blow's kick is worth against a character with poise (Character.stoic): the boss barely moves.
ConstantValue
GRAB_RANGE2.2fTorso center to the grab point.
CARRY_MASS1100.0fGrip strength, in kg of fully controlled load.
HOVER_KP70.0fTether spring on the load, as an acceleration toward the hover point.
HOVER_KD13.0f
HOVER_MAX_ERR1.2fClamp the tether stretch so a wedged load can't build silly force.
HOVER_ANG_DAMP5.0fAngular damping while levitated: props settle instead of spinning.
HOVER_BOB0.05fIdle float of the hover point, in meters.
TETHER_BREAK3.6fTorso to load: past this the tether snaps and the load drops.
THROW_SPEED13.0fLaunch speed for a load at or under CARRY_MASS.
THROW_UP0.3fAdded to the aim so a level throw arcs.
GRABBED_ACCEL_K0.06fCarried players can squirm, not walk.
GRAB_DROP_GRACE0.35fSeconds a released load stays filtered from its carrier.
ConstantValue
SWORD_HALF0.65f
SWORD_RADIUS0.06f
SWORD_DENSITY7800.0fSteel: ~110 kg, so a dropped one skids rather than bounces.
SWORD_PICKUP_RANGE4.0fTorso center to a point on the sword: close enough to pick up.
SWORD_FOCUS_R0.45fThe crosshair's ray passing within this of a point on the sword: the client's focus (nothing blocks the ray -- it is tested against the pickups alone).
SWORD_FOCUS_R_LOOSE1.1fThe server's check on a request: the client aimed a moment ago, and its intent may have moved on...
SWORD_PICKUP_SLACK1.4f...and its torso trails the client's prediction by about a stride at a run.
SWING_TIME0.32fThe whole swing: a few frames of cock, the slash, the recovery. Quick -- a swipe answers the tap, it does not wind up to it.
SWING_HIT_T0.09fWhen in the swing the blow lands: a handful of ticks after the press, as the blade crosses dead ahead.
SWING_REACH2.6fTorso center to a victim's center.
SWING_HEIGHT1.6fA victim's center this far above or below the torso is out of the sweep.
SWING_ARC_COS0.35fCos of the half-arc the blow covers ahead (~70 degrees each way).
SWING_ARC1.4fRadians the blade sweeps, for the tie-offs.
SWORD_DAMAGE30.0f
SWORD_KNOCK4.0fm/s handed to the struck character along the swing.
SWORD_HIT_COOLDOWN0.35f
SWORD_SHOVE_SPEED6.0fProps in the arc are batted along at this, heavy ones (past CARRY_MASS) less.
STAFF_DAMAGE12.0fWhat a swipe of the staff lands: a quarterstaff's knock, not a blade's. Every staff swings for it; a gear staff's Damage affix comes on top.
DAGGER_DAMAGE16.0fThe rogue's sidearm -- one of a pair, a quick cut from either fist.
CUDGEL_DAMAGE20.0fThe cleric's: an honest iron-shod knock, short of a blade's cut.
WRENCH_DAMAGE14.0fThe artificer's: a tool first, an argument-settler second.
SICKLE_DAMAGE18.0fThe cultist's harvest blade.
BASH_CHARGE_FULL0.8fSeconds a hold charges a bash for its full strength; a longer hold gains nothing (the swing begins on the release).
BASH_DAMAGE_K2.5fA full bash lands this many times the swipe's damage (a shorter charge less, down to the swipe's)...
BASH_KNOCK_K2.0f...and this many times its knockback; a full one floors the victim.
BASH_TIME0.45fThe whole bash swing, from the raised blade: the chop, the follow-through, the recovery. The charge was the wind-up; the release is quick.
BASH_HIT_T0.12fWhen in the bash the blow lands.
ConstantValue
SHIELD_ARC_COS0.5fCos of the half-arc a raised shield covers ahead (sixty degrees each way): a blow from farther round lands.
SHIELD_STAMINA_K0.025fOf the 0..1 bar, per point of damage turned: a skeleton's swing costs 0.3, a sword's swipe 0.75.
SHIELD_KNOCK_K0.35fWhat is left of a blocked blow's kick: a block still gives a little ground.
SHIELD_BREAK_STUN1.0fSeconds a guard break staggers the wizard for (and keeps the shield down).
SHIELD_R0.38fThe disc's radius (the look).
SHIELD_FLASH_T0.25fSeconds the rim flashes after a block (client).
SHIELD_SFX_CARRY22.0fHow far a block's clang carries (sfx.c).

Status effects and going down

ConstantValue
EFFECT_BAR100.0fThe bar, in points: the health's scale (MAX_HEALTH) too.
EFFECT_BAR_MAX200.0fHow far past it the afflictions can pile (the dashed outline).
EFFECT_TICK2.5fThe smallest amount that shows.
EFFECT_SLOW_K0.45fThe walk while drowsy, as a multiple of the walk.
EFFECT_HUNGER_RATE0.05fPoints per second, on its own (a tick every fifty seconds).
EFFECT_MEAL25.0fHunger a potion takes off.
EFFECT_WEIGHT_LOAD12.0fPoints a load of CARRY_MASS on the tether weighs.
EFFECT_POISON_DECAY0.4fPoints per second, after...
EFFECT_POISON_REST30.0f...this long without more poison.
EFFECT_COLD_RATE2.0fPoints per second over the chasm (the wind).
EFFECT_COLD_DECAY1.5fPoints per second on your own, after...
EFFECT_COLD_REST3.0f...this long out of the cold...
EFFECT_HUDDLE_RANGE3.2f...and as much again per other wizard this close.
EFFECT_HEAT_BLAST20.0fA fireball's blast, at its center...
EFFECT_HEAT_SUN0.5f...and the dunes' sun, points per second.
EFFECT_HEAT_DECAY1.3fPoints per second, after...
EFFECT_HEAT_REST8.0f...this long without more heat.
EFFECT_THORN5.0fPoints per spike, and per thorn F pulls out.
EFFECT_THORNS_FALL30.0fSeconds until the thorns fall out on their own.
EFFECT_VENOM7.5fA spider's bite: this much poison, and as much drowsy.
EFFECT_DROWSY_DECAY1.5fPoints per second, after...
EFFECT_DROWSY_REST10.0f...this long without more.
EFFECT_CURSE_BALL10.0fThe ball's curse, per hit.
EFFECT_CURE2.5fPoints of each curable affliction a heal circle's pulse takes off.
EFFECT_SPORES_RATE1.0fPoints per second in the vault.
EFFECT_SPORES_DECAY0.5fPoints per second, after...
EFFECT_SPORES_REST45.0f...this long out of it.
EFFECT_WRAP20.0fThe web a spit lands on you, and the snare a floor web is.
EFFECT_TEAR2.5fWhat a jump press tears off either.
EFFECT_WEB_TEAR6.0fPoints per second the web tears on its own (five seconds)...
EFFECT_SNARE_TEAR10.0f...and the snare (three)...
EFFECT_SNARE_POISON5.0f...which poisons this much a second while it holds.
EFFECT_PETRIFY_TOUCH2.5fA skeleton's hit: one tick, since it never lifts.
EFFECT_ARROW_STUCK7.5fAn arrow stuck in you...
EFFECT_ARROW_PULL12.5f...and the injury pulling it out costs.
EFFECT_BLESS_TIME3.0fInfinite stamina lingers this long after leaving a heal circle.
EFFECT_NUMB_AFTER2.0fThe bar stays hidden this long after a tumble.
EFFECT_SHIELD_TIME5.0fInvincible this long after a spawn.
ConstantValue
DOWN_POOL_TIME45.0fThe first downing's bleed-out, in seconds...
DOWN_POOL_STEP12.0f...how much shorter each one after it is...
DOWN_POOL_MIN12.0f...and how short it can get.
DOWN_CRAWL_K0.3fThe crawl, as a multiple of the walk (effect_speed_k, both ends).
DOWN_REVIVE_RANGE2.6fRescuer to body: near enough to reach.
DOWN_REVIVE_TIME4.0fSeconds of holding to fill the bar...
DOWN_REVIVE_DECAY2.0f...and to drain a full one with nobody on it.
DOWN_GIVEUP_TIME1.0fSeconds of holding the use button on your own body before you give up waiting and die where you lie.
DOWN_FATIGUE(EFFECT_BAR * 0.5f)What a revive leaves on the bar: half of it, so half the damage puts them down again...
DOWN_FATIGUE_TIME60.0f...and how many seconds it takes to wear off on its own (a heal lifts it early).
DOWN_HELP_Y1.5fHow far over the body the word floats.
DOWN_PULSE_RATE5.0fRadians per second the outline and the word flash at.
DOWN_OUTLINE0.06fHow far the red silhouette is swelled past the body it marks.
DOWN_HURT_K0.35fSeconds off the bleed-out per point of damage landed on somebody already down.
DOWN_HURT_FLASH0.7fSeconds the red silhouette runs over a body a blow just landed on -- the only thing that shows it at all.
DOWN_HURT_SLACK0.5fSlack on that watch: quantization and packet jitter a client forgives before it calls a falling clock a blow.
DOWN_DEAD_TIME3.0fSeconds the corpse ragdolls with YOU DIED on its owner's screen before the respawn takes it.
DOWN_DIED_SIZE64.0fHow big YOU DIED sits across the screen.
DOWN_WORD_SIZE52.0fHow big DOWN sits across your own screen while you are on the floor.
DOWN_NOTE_TIME4.5fSeconds "P3 is down!" stays on everybody else's.
DOWN_GIVE_DY26.0fThe give-up line under the two words on your own screen...
DOWN_GIVE_BAR_DY24.0f...the bar filling under that line while the button is held...
DOWN_GIVE_BAR_W180.0f...and how wide and how thick it is.
DOWN_GIVE_BAR_H7.0f

Spells

ConstantValue
FIREBALL_RADIUS0.22fThe bolt's collision sphere.
FIREBALL_DENSITY40.0f~1.8 kg: it stops on what it hits instead of shoving it.
FIREBALL_SPEED22.0f
FIREBALL_LIFE3.0fSeconds of flight before it fizzles into a burst anyway.
FIREBALL_BLAST_RADIUS3.2fTorso centers within this take the blow.
FIREBALL_DAMAGE45.0fAt the center...
FIREBALL_DAMAGE_MIN12.0f...fading to this at the rim.
FIREBALL_KNOCK7.0fm/s away from the burst at the center, half that at the rim.
FIREBALL_LIFT3.5f
FIREBALL_RAGDOLL_R1.6fInside this the blow ragdolls; beyond, it staggers.
FIREBALL_HIT_COOLDOWN0.4f
FIREBALL_IMPULSE2600.0fb3World_Explode impulse per unit area on props (a crate takes off at a few m/s).
FIREBALL_BURST_TIME0.25fSeconds the burst state streams, so every client sees it at least once.
CAST_CHARGE_FULL0.75fSeconds the button is held for a full-speed bolt; a longer hold gains nothing (the cast begins on the release).
FIREBALL_SPEED_MIN11.0fThe bolt's speed for a tap; the charge runs it up to FIREBALL_SPEED.
CAST_TIME0.55fThe whole cast: the hand comes up, the bolt leaves, the hand settles.
CAST_RELEASE_T0.18fWhen in the cast the bolt leaves the hand.
CAST_COOLDOWN0.9fFrom one cast to the next.
ConstantValue
MISSILE_DAMAGE9.0fOne magic missile's bite: unerring, never a blast.
MISSILE_KNOCK2.0f
MISSILE_GAP0.12fSeconds between a volley's bolts.
MISSILE_HIT_COOLDOWN0.1fUnder the gap, so every missile of one volley lands.
MISSILE_MIN2A tap's volley...
MISSILE_MAX4...and a full charge's.
FROST_DAMAGE10.0f
FROST_CHILL18.0fPoints of cold on a struck wizard (effect.c).
SICKNESS_DAMAGE8.0f
SICKNESS_POISON20.0fPoints of poison on a struck wizard.
LIGHTNING_DAMAGE14.0fOn whoever the bolt struck, and on everyone the arc reaches...
LIGHTNING_CHAIN_R4.0f...this close to the strike.
ConstantValue
MAX_HEAL_ZONES4
HEAL_CAST_RANGE26.0fHow far out an aim may mark the ground.
HEAL_TARGET_R1.1fHow near a character the ray passes to count as aimed at them.
HEAL_ZONE_RADIUS2.6fThe circle on the ground.
HEAL_ZONE_CEILING3.0fHow high over it the circle reaches (and HEAL_ZONE_FLOOR below, for the pit's edge).
HEAL_ZONE_FLOOR1.2f
HEAL_ZONE_TIME8.0fSeconds a circle lasts.
ConstantValue
MAX_SUMMON_CIRCLES2
SUMMON_ZONE_RADIUS2.2f
SUMMON_GATHER_TIME7.0fAct one: the circle burns and takes nothing -- pile your combination in.
SUMMON_FINALE_TIME1.5fAct three: consumed, the circle implodes and manifests as it goes out.
SUMMON_ZONE_TIME(SUMMON_GATHER_TIME + SUMMON_FINALE_TIME)A circle's whole fixed life; the snap's left normalizes by it.
SUMMON_ZONE_CEILING2.2fThe swallow reaches this high over the ground...
SUMMON_ZONE_FLOOR1.2f...and this far below (the chasm's lip rule, like heal).
SUMMON_WIZARD_DWELL1.1fContinuous seconds a wizard must stand inside before the circle takes them: crossing is safe, lingering is a donation.
SUMMON_VALUE_WIZARD12Appraisals. A friend is worth the most. Obviously.
SUMMON_VALUE_LISTENER20...except the unkillable thing, whose one death this is. Baiting it onto a circle and holding it there (LISTENER_SACRIFICE_DWELL) outbids everything.
SUMMON_VALUE_SPIDER8
SUMMON_VALUE_PLANT7
SUMMON_VALUE_SKELETON6
SUMMON_VALUE_THORNBACK9The wood's five: a beetle's plate is worth something to whatever is on the other side...
SUMMON_VALUE_BOAR7...a boar is meat...
SUMMON_VALUE_WOLF6
SUMMON_VALUE_WISP5...and a wisp is barely there at all, which the circle notices.
SUMMON_VALUE_OOZE3Per blob, so a big one eaten whole is worth more than a small one -- and splitting one over a circle is a way to feed it.
SUMMON_VALUE_CAMEL10The desert's: a camel is a lot of meat and all of it water...
SUMMON_VALUE_SCORPION5...and a scorpion is mostly shell. The worm never rests on a circle and the vulture never lands: neither is on the menu.
SUMMON_VALUE_SWORD3
SUMMON_VALUE_PROP1
LISTENER_SACRIFICE_DWELL2.0fSeconds the beast must linger on a circle before it is taken: the bait is the play.
SUMMON_MIGHTY_HP2.2fA high-value manifest may come out angry: health and blow scale.
SUMMON_MIGHTY_POWER1.6f
HEAL_ZONE_RATE10.0fHealth per second to everyone standing in it...
HEAL_PULSE0.5f...handed out in pulses this far apart.
HEAL_STEP0.35fThe march along the aim looking for the ground, in meters.

The bow

ConstantValue
ARROW_STACK99How many arrows one quiver slot holds.
ARROW_START30The Normal quiver a ranger starts with.
ARROW_RADIUS0.075fThe arrowhead's collision sphere.
ARROW_DENSITY60.0f~0.1 kg on the bigger head: it stops on what it hits.
ARROW_SPEED102.0fAt full draw...
ARROW_SPEED_MIN36.0f...and for a tap; the draw's charge runs between them.
ARROW_LIFE3.0fSeconds of flight before it vanishes anyway.
ARROW_DAMAGE25.0fA NORMAL quiver's arrow. The rest of the types (bow.c):
ARROW_DAMAGE_BASIC4.0fThe quiverless arrow: free and endless, and it stings rather than wounds.
ARROW_DAMAGE_HEAVY60.0fA heavy arrow hits like a dropped anvil...
ARROW_KNOCK_HEAVY16.0f...and throws its victim with it.
ARROW_DAMAGE_FIRE15.0fA fire arrow's point is the FIRE: the hit itself is modest...
BURN_TIME4.0f...but the victim burns this long (character.c; a wizard takes heat, effect.c)...
BURN_STEP0.5f...a bite every this often...
BURN_DPS6.0f...at this per second.
ARROW_DAMAGE_BOMB20.0fThe bomb arrow's own touch; the BLAST is the payload:
BOMB_BLAST_RADIUS3.5fEverything this close to the burst...
BOMB_BLAST_DAMAGE35.0f...takes up to this, fading with the distance...
BOMB_BLAST_MIN12.0f...to this at the rim.
BOMB_KNOCK9.0fm/s the blast hands whoever it catches.
BOMB_IMPULSE60.0fThe prop shove per area, a fireball-style explosion.
ARROW_DAMAGE_THUNDER18.0fThe thunder arrow's own touch; the CHAIN is the payload:
THUNDER_RADIUS5.0fEvery enemy this close to the strike...
THUNDER_DAMAGE16.0f...is shocked for this, however many they are.
ARROW_KNOCK8.0fm/s handed to the struck character along the flight: a fireball's center, a skeleton reels back a stride.
ARROW_HIT_COOLDOWN0.3f
ARROW_PUNCH120.0fImpulse (kg m/s) an arrow lands on what it sticks in: the target swings hard, a crate is shoved off its pile.
ARROW_BURST_TIME0.8fSeconds a landed arrow stays stuck (the state streams) before its slot is parked.
BOW_DRAW_FULL0.375fSeconds of draw for full speed -- a quick draw, well under half a second; a longer hold gains nothing.
BOW_SETTLE_TIME0.175fThe mitten's recovery after the release.
BOW_COOLDOWN0.2fFrom the release to the next draw: never longer than the draw itself, so a second shot is never a wait.

Potions and food

ConstantValue
POTION_HEAL50.0fHealth restored by drinking; a thrown one splashes for half.
POTION_RADIUS0.12fThe flask's collision sphere.
POTION_DENSITY70.0f~0.5 kg: it breaks on what it hits instead of shoving it.
POTION_THROW_SPEED15.0f
POTION_THROW_UP0.30fAdded to the aim so a level throw lobs.
POTION_SPIN7.0frad/s of end-over-end tumble on a thrown flask.
POTION_LIFE4.0fSeconds of flight before it shatters in the air anyway.
POTION_SPLASH_RADIUS2.0fTorso centers within this of the shatter are splashed.
POTION_BURST_TIME0.25fSeconds the shatter state streams, so every client sees it at least once.
DRINK_TIME0.9fThe whole drink: the flask comes up, tips, and the hand settles.
DRINK_HEAL_T0.55fWhen in the drink the health lands and the flask is gone.
POTION_THROW_TIME0.5fThe whole throw: the wind-up, the lob, the follow-through.
POTION_RELEASE_T0.22fWhen in the throw the flask leaves the hand.
POTION_AIM_KEY0.12fWhere in the throw's keyframes the wind-up is (anim.c): the aim holds it, the throw runs on from it at the release.
HEAL_FLASH_TIME0.8fThe green vignette on a health rise.
ConstantValue
MUSHROOM_HEAL30.0fHealth restored by eating one: most of a potion's drink...
MUSHROOM_POISON20.0f...paid for in points of poison on the lifebar (EFFECT_POISON's own decay wears it off).
MUSHROOM_TRIP_TIME12.0fSeconds the trip runs per mushroom; another eaten mid-trip starts the clock over.
MUSHROOM_TRIP_EASE2.0fSeconds the trip takes to come on and to let go (client side: the shader's ramp).
MUSHROOM_WILD_N560Mushrooms the forest grows on open ground (forest_view's old cosmetic count: the wood looks the same, every one pickable now).
MUSHROOM_WILD_MAX576The placement arrays' cap, and the streamed standing bitmask's size (72 bytes of bits).
MUSHROOM_CAMP_RING6The first few grow in a ring just outside the camp's clearing: foraging never starts with a trek.
MUSHROOM_PICK_RANGE3.2fTorso to mushroom: close enough to pick it.
MUSHROOM_PICK_SLACK1.2fThe server's slack on that reach: its torso trails the client's prediction.
MUSHROOM_FOCUS_R0.55fHow near the crosshair's ray must pass to put one in focus.
MUSHROOM_SWAY_K0.55fThe trip's lean on the walk: this much of a full wish drifted in, so your own stick still wins -- barely.
MUSHROOM_SWAY_STEP0.7fSeconds between the lean picking a new direction to wander toward (jittered a little)...
MUSHROOM_SWAY_EASE2.5f...and how fast it eases there, per second: a stagger, not a twitch.
MUSHROOM_MUSIC_PITCH0.72fThe tape's speed at the trip's deepest (music.c drags the track there and back by the trip level).

Enemies

ConstantValue
SKELETON_HEALTH60.0f
SKELETON_DENSITY485.0f~290 kg on the walker capsule: a wizard can carry and throw one.
SKELETON_WANDER_RADIUS5.0fWander goals stay this close to the spawn.
SKELETON_WANDER_SPEED1.1f
SKELETON_CHASE_SPEED2.8fWell under a running wizard: you can always outrun them.
SKELETON_ACCEL40.0f
SKELETON_TURN_RATE7.0frad/s toward the facing target.
SKELETON_DETECT_RANGE9.0fA living wizard this close, in line of sight, is noticed.
SKELETON_LOSE_RANGE14.0fA chased wizard this far away is given up on.
SKELETON_ALERT_TIME1.0fSeconds of "?" and looking around before the chase.
SKELETON_ATTACK_RANGE1.7fTorso-to-torso distance that starts a swing.
SKELETON_ATTACK_TIME1.0fWhole swing: wind-up, the blow, recovery.
SKELETON_ATTACK_HIT_T0.42fWhen in the swing the blow lands.
SKELETON_ATTACK_REACH2.4fThe blow connects within this, in front of the skeleton.
SKELETON_ATTACK_HEIGHT1.2f...and within this much torso height difference: a wizard up a wall (or on a ledge overhead) is out of a swing's reach, and the skeleton waits below instead.
SKELETON_DAMAGE12.0f
SKELETON_KNOCK4.0fm/s handed to the struck wizard.
SKELETON_HIT_COOLDOWN0.25fRate limit on punches, slams, and a skeleton's own blows, so one contact cannot land twice.
SKELETON_SLAM_SPEED7.0fApproach speed that hurts a skeleton on any other impact (thrown crates, walls).
SKELETON_SLAM_K3.0fDamage per m/s of slam.
ConstantValue
SPIDER_HEALTH40.0f
SPIDER_RADIUS0.32f
SPIDER_DENSITY290.0f~40 kg on the sphere: light, but an arrow's knock does not send it across the room.
SPIDER_HOLD0.42fCenter off the surface along its normal.
SPIDER_HOLD_K14.0fThe hold, as a velocity per meter of error.
SPIDER_REACH1.0fHow far along -normal the surface may be and still be held.
SPIDER_AHEAD0.30fPast the radius, how far ahead the crawl looks for the next surface (an inside corner).
SPIDER_CRAWL_SPEED2.6fAlong the surface, on the way home.
SPIDER_CHASE_SPEED4.6fOn the floor after a wizard: slower than a run, faster than a webbed one.
SPIDER_ACCEL30.0f
SPIDER_DROP_SPEED7.0fDown the strand.
SPIDER_DETECT_RANGE8.0fA living wizard this close, in line of sight from the lair, is prey.
SPIDER_LOSE_RANGE15.0fPrey this far away is given up on.
SPIDER_SPIT_RANGE9.0fPrey within this (and past SPIDER_SPIT_NEAR) gets a web spat at its feet...
SPIDER_SPIT_NEAR1.6f...closer than this the spider bites instead.
SPIDER_SPIT_TIME0.55fThe spit: the rear comes up, the glob leaves at SPIDER_SPIT_T, the settle.
SPIDER_SPIT_T0.25f
SPIDER_SPIT_COOLDOWN3.5fBetween spits at one target.
SPIDER_BITE_RANGE1.35fCenter to center: the lunge.
SPIDER_BITE_TIME0.9fThe whole bite: the rear-up, the lunge, the recovery.
SPIDER_BITE_T0.25fWhen in the bite the fangs land.
SPIDER_BITE_REACH1.9fThe fangs connect within this, ahead of the spider.
SPIDER_DAMAGE8.0f
SPIDER_KNOCK3.0fm/s handed to the bitten wizard.
SPIDER_HIT_COOLDOWN0.3fRate limit on blows to a spider, and its own bites.
SPIDER_HUNT_TIME10.0fSeconds off the lair before it heads home regardless.
SPIDER_REST_TIME6.0fSeconds on the lair before it hunts again.
SPIDER_SLAM_SPEED6.0fApproach speed that hurts a spider on any impact (thrown crates, the ball, a wall).
SPIDER_SLAM_K3.0fDamage per m/s of slam.
ConstantValue
BAT_HEALTH14.0f
BAT_RADIUS0.26f
BAT_DENSITY150.0fA couple of kilos of animal on the sphere.
BAT_PERCH_DROP0.35fThe body hangs this far under the perch anchor.
BAT_WAKE_RANGE7.0fA living wizard this close, in line of sight from the roost, is prey.
BAT_LOSE_RANGE16.0fPrey this far away is given up on (never by a burning bat).
BAT_WAKE_TIME0.7fThe unfurl off the perch before the first circle.
BAT_FLY_SPEED5.5fThe hunt's flutter...
BAT_SWOOP_SPEED10.0f...and the dart.
BAT_ACCEL28.0f
BAT_ORBIT_R3.2fThe circle around the prey...
BAT_ORBIT_H1.6f...flown this far over their center...
BAT_ORBIT_RATE1.6f...advancing this many radians a second.
BAT_POISE_MIN1.2fThe circling patience before it dares a dart, rolled between...
BAT_POISE_MAX3.0f...these.
BAT_SWOOP_RANGE6.0fPrey inside this may be darted at.
BAT_SWOOP_TIME1.4fA dart that has not connected by now peels off anyway.
BAT_BITE_REACH1.1fCenter to center: the rake connects within this.
BAT_DAMAGE6.0f
BAT_KNOCK4.0fm/s handed to the raked wizard.
BAT_HIT_COOLDOWN0.4fRate limit on blows to a bat, and its own rakes.
BAT_RETREAT_TIME1.1fThe climb away after a dart, hit or miss.
BAT_FIRE_R1.2fThis close to a standing flame's head catches (the firepit and braziers burn wider).
BAT_BOLT_R2.0fA fireball's brush: a bolt or its trail passing this close lights the bat without a hit.
BAT_IGNITE_HEAT18.0fHeat a fire bat's touch puts on a wizard (effect.c)...
BAT_IGNITE_COOL1.0f...at most once per this many seconds.
BAT_LIT_SPEED_K1.15fA burning bat flies a little hotter.
SND_BAT_SCREECH14.0fThe dive's announcement, and the shriek of catching fire.
ConstantValue
MAX_PLANTS8
PLANT_HEALTH60.0f
PLANT_SENSE6.0fIt feels footfalls through the soil this far, crouched or not.
PLANT_REACH2.8fThe bite's flat reach: a stride PAST a swipe's (SWING_REACH), so no one pokes it down for free -- killing it means trading through the telegraph.
PLANT_DAMAGE26.0f
PLANT_KNOCK14.0f
PLANT_STRIKE_HIT_T0.8fThe rear-back before the snap: the honest telegraph. LONGER than a sword's windup on purpose -- standing in and cutting is a real trade (your blow lands, then its bite), and stepping out is free.
PLANT_STRIKE_TIME1.15f
PLANT_GULP_TIME1.5fA landed bite buys the party this long a swallow.
PLANT_RISE_TIME0.5f
PLANT_FLINCH_TIME0.4f
PLANT_DOZE_PATIENCE4.0fPrey out of sense this long: back to sleep.
PLANT_NOBODY1e9fprey_dist with nobody near.
ConstantValue
MAX_LISTENERS1
LISTENER_HEAR_MIN0.5fArrivals quieter than this never register.
LISTENER_WAKE_LOUD5.0fWhat it takes to stir it from the lurk.
LISTENER_FRENZY_LOUD13.0fLoud AND close: the rush.
LISTENER_LISTEN_TIME2.4fPatience per listen; silence this long loses it.
LISTENER_MEMORY18.0fSeconds a heard position stays worth stalking to: it must outlast a cross-dungeon trek, or no hunt ever completes.
LISTENER_CREEP_SPEED2.8f
LISTENER_FRENZY_SPEED6.8f
LISTENER_ACCEL30.0fVelocity steering, like a skeleton's.
LISTENER_STRIKE_RANGE1.7fFlat reach for the lunge to begin...
LISTENER_STRIKE_HIT_T0.35f...the claw lands this far into it...
LISTENER_STRIKE_TIME0.95f...and the whole swing.
LISTENER_DAMAGE34.0f
LISTENER_KNOCK22.0fA claw LAUNCHES you: the hit is the separation the escape is made of.
LISTENER_DEAF2.5fIts own strike deafens it: the window to crawl away silent, or run loud.
LISTENER_STRIKE_FRESH1.2fIt lunges at NOISE in reach, never at bodies: silence this old is invisible to it.
LISTENER_HEALTH120.0fIt has blood after all: four sword hits, taken while it claws back. Silence is still the smarter door.
ConstantValue
BOSS_HEALTH900.0f
BOSS_RADIUS1.05fThe capsule: about two and a half wizards across.
BOSS_CAP_LO-0.55fIts lower sphere center...
BOSS_CAP_HI1.45f...and its upper: it stands about 4 m tall.
BOSS_DENSITY900.0f
BOSS_RIDE2.05fBody origin over the ground, the way RIDE_HEIGHT holds a wizard.
BOSS_TURN_RATE2.2frad/s while it is not committed to a swing.
BOSS_TURN_SLOW0.5frad/s inside a windup: a rolled-past boss cannot track you.
BOSS_WALK_SPEED4.2f
BOSS_CHARGE_SPEED13.0f
BOSS_ACCEL26.0f
BOSS_WAKE_RANGE26.0fA living wizard this close, inside the boss room, wakes it.
BOSS_SWEEP_RANGE6.5fWhere it starts a horizontal sweep...
BOSS_SLAM_RANGE9.5f...and the overhead slam it closes with from further out.
BOSS_CHARGE_RANGE22.0fPast the slam, it runs you down.
BOSS_WINDUP_T0.85fThe tell, before every attack (BOSS_WINDUP is the state it is: wire.h).
BOSS_SWEEP_TIME0.55fThe swing itself...
BOSS_SWEEP_HIT0.18f...and when in it the arc lands.
BOSS_SWEEP_ARC0.95fHalf the sweep's arc, in radians: a wide cleave in front.
BOSS_SWEEP_REACH7.5f
BOSS_SWEEP_DAMAGE34.0f
BOSS_SLAM_TIME0.7f
BOSS_SLAM_HIT0.24f
BOSS_SLAM_RADIUS6.0fThe shockwave, from where the blade lands...
BOSS_SLAM_DAMAGE42.0f...and what standing in it costs.
BOSS_CHARGE_TIME1.6fHow long a run lasts before it must recover.
BOSS_CHARGE_DAMAGE26.0f
BOSS_CHARGE_REACH2.6fCenter to center: what the shoulder catches.
BOSS_RECOVER_T1.5fRooted, after every attack: the window to punish. Long enough to land a charged bash in.
BOSS_STALK_MIN0.9f...and it must walk at you at least this long before it commits again, so the window is a window and not a blink.
BOSS_RAGE_HEALTH0.35fBelow this fraction it stops resting between swings.
BOSS_RAGE_K1.35f...and everything it does runs this much faster.
BOSS_KNOCK6.5fm/s handed to whoever it lands on: a shove across the room's width, not out of the fight.
BOSS_HIT_COOLDOWN0.6f
BOSS_DAMAGE_TAKEN1.0fScale on every blow it takes: the one dial for the fight's length.
ConstantValue
MAX_WEBS8
WEB_RADIUS1.15f
WEB_CEILING1.6fHow high over a patch a torso counts as standing on it...
WEB_FLOOR0.5f...and how far under (a step down onto it).
WEB_TIME20.0fSeconds a patch lies there uncaught.
WEBSHOT_RADIUS0.16fThe glob's collision sphere.
WEBSHOT_DENSITY40.0f~0.7 kg: it breaks on what it hits instead of shoving it.
WEBSHOT_SPEED14.0fThe spit, flat; the lob adds the rise for the fall over the distance.
WEBSHOT_LIFE3.0f
WEBSHOT_BURST_TIME0.25fSeconds the burst state streams, so every client sees it.
ConstantValue
MAX_BREAKABLES48Pieces standing at once: the pool the furniture roll fills first, plain props past it.
BREAKABLE_CRATE_HEALTH10.0f
BREAKABLE_BARREL_HEALTH40.0f

The world

ConstantValue
MAX_PLATES4
MAX_SPIKEBALLS3
MAX_PITS2
MAX_PLATFORMS2
PRESS_HALF0.9fA plate fills a corridor: 1.8 m of a 2 m clear width.
PRESS_STAND_Y1.7fA torso no higher than this over the plate is standing on it.
SPIKEBALL_RADIUS0.6f
SPIKEBALL_REST_H1.1fThe ball's center over the floor, hanging straight down: chest height.
SPIKEBALL_LATCH0.87fRadians off the vertical the latch holds it at: fifty degrees, the ball's bottom well over a head.
SPIKEBALL_DAMP0.3fAmplitude decay per second (about fourteen seconds of swinging from the latch).
SPIKEBALL_STILL0.02fRadians of amplitude that count as hanging still.
SPIKEBALL_REST_TIME3.0f
SPIKEBALL_WINCH_TIME3.0f
SPIKEBALL_HIT_SPEED3.0fSlower than this it is an obstacle, not a blow.
SPIKEBALL_DAMAGE35.0f
SPIKEBALL_KNOCK8.0fm/s along the ball's travel...
SPIKEBALL_LIFT4.0f...and up, ragdolling.
SPIKEBALL_COOLDOWN0.8f
SPIKEPIT_DEPTH3.0fFloor top to pit floor top: a fall, and a climb back out.
SPIKEPIT_SPIKE_H1.0fThe bed's spikes (cosmetic; the bite is by height).
SPIKEPIT_BITE1.3fA torso lower than this over the pit floor is on the spikes; the platform lifts a wizard off them inside a quarter second.
SPIKEPIT_DAMAGE45.0f
SPIKEPIT_LIFT3.0fThe hop off each bite.
SPIKEPIT_COOLDOWN2.5fBetween bites on one character: time to grab the wall.
SPIKEPIT_ENDDUNGEON_WALLHalf the thickness of a pit's end walls: a corridor wall's, like its sides, since a wide pit's outer lanes may end against stone where the hall past it runs narrower (dungeon_traps.c), and that stone is one wall from the pit's floor to the ceiling.
PLATFORM_SPEED1.5fm/s, either way: a pit's depth in two seconds.
ConstantValue
MAX_LEVERS4
MAX_SPIKES4
MAX_LINKS8Lever-to-fixture links the level may hold.
LEVER_REACH2.2fTorso center to the lever's base.
DOOR_HALF_W1.1f
DOOR_HALF_H1.4f
DOOR_THICK0.12fHalf the slab's thickness.
DOOR_RISE2.4fHow far up an open door stands: a wizard walks under with room to spare.
DOOR_SPEED2.0fm/s, either way.
SPIKE_HALF0.9f
SPIKE_ARM_TIME0.4fThe click before the shot: time to step off.
SPIKE_OUT_TIME0.5f
SPIKE_RESET_TIME1.2f
SPIKE_HEIGHT0.6fThe spikes' reach above the grate (cosmetic; the blow is by position).
SPIKE_DAMAGE20.0f
SPIKE_LIFT5.0fm/s upward: off the spikes.
SPIKE_COOLDOWN0.5fThe fastest they can land on one character. The biting window is longer than this, so standing through a whole shot takes more than one blow -- raise it to a second and a bit to go back to one.
SPIKE_BITE0.5fHow far out they have to be to draw blood: halfway. What is over them while they are is hurt, rising or sinking -- what the eye sees is what bites.
ConstantValue
FOREST_EXTENT144.0fHalf the field: 288 meters of wood, ringed by cliffs no hand can climb.
FOREST_RIVERS2One running north-south, one east-west: every way out crosses water.
FOREST_RIVER_HALF3.0fHalf a channel's width...
FOREST_RIVER_DEPTH2.0f...and how far down to its bed. The banks are earth, so they climb (climb.c).
FOREST_STEP2.0fOne terrace of earth: a hill's ring, a shelf's rise, a waterfall's drop. Well over STEP_HEIGHT (a cliff is a climb, never a stair), and even with a river bank, so every face in the wood climbs the same.
FOREST_MAX_LEVEL3The highest ground stands this many terraces up.
FOREST_MAX_FALLS4Waterfall lines over both rivers, at the most (two drops each).
FOREST_PATH_HALF1.7fHalf the width of a dirt track.
FOREST_CAMP_R6.5fThe clearing the camp stands in.
FOREST_SPAWN_R3.2fThe spawn ring around the firepit.
FOREST_BRANCHES4Paths out of the camp; the second and fourth fork on the way.
FOREST_SITES6...so this many places to arrive at, two of them gates.
FOREST_MAX_PATHS10Segments over all of them.
FOREST_MAX_TREES6000The wood, at the most: the statics list is the real ceiling.
FOREST_TREE_HP3Chops to fell a trunk (any swing is a chop: forest_chop_segment).
FOREST_REPLANT_REACH2.2fA stump within this of the wizard takes the interact: the planting.
SND_CHOP14.0fAn axe biting wood carries...
SND_TREEFALL30.0f...and a tree coming down carries a good deal farther.
FOREST_MAX_BRIDGES32
FOREST_MAX_BEDS640
FOREST_MAX_FIRES8The campfire, and a brazier on every cairn.
FOREST_DECK_Y0.15fA bridge deck's middle: it stands ON the ground, never into it...
FOREST_DECK_HALF_Y0.15f...so its top is one step up (under STEP_HEIGHT).
FOREST_DECK_HALF_W1.30fHalf the deck's width.
FOREST_DECK_BANK1.60fHow far onto each bank it runs past the water.
FOREST_GATE_BACK3.40fHow far behind its pad a gate's arch stands.
ConstantValue
GATE_RADIUS2.2fThe pad, flat on the ground.
GATE_HEIGHT3.2fHow far up the column reaches: what you must stand inside.
GATE_DWELL3.0fSeconds inside it before the party goes down.
GATE_DECAY1.5fHow fast the charge runs back down outside it.
ConstantValue
PORTAL_RADIUS2.0fThe boss pad, flat on the floor.
PORTAL_HOME_RADIUS1.1fThe entrance pad: under the smallest spawn ring (1.4 m -- the minimum room half extent less the ring's inset, dungeon.c), so a party lands around the light and never in it.
PORTAL_HEIGHT3.4fHow far up the column reaches: what you must stand inside.
PORTAL_DWELL3.0fSeconds inside it before the trip.
PORTAL_DECAY1.5fHow fast the charge runs back down outside it.
PORTAL_CHEST_BACK4.5fHow far behind the chest the boss pad stands.
ConstantValue
CHEST_HALF_X0.55f
CHEST_HALF_Y0.30f
CHEST_HALF_Z0.36f
CHEST_DENSITY900.0f~510 kg: a wizard can carry one, slowly.
CHEST_REACH2.4fTorso center to chest center: close enough to work the lid.
CHEST_LEAVE3.2fPast this the server closes the looker's view.
CHEST_BOSS(MAX_CHESTS - 1)The last chest is the boss's hoard: no body until the boss falls (chest.c)...
CHEST_BOSS_SCALE1.6f...and it is this much bigger than an ordinary one, body and look alike.
ConstantValue
DROP_HALF0.18fThe body's half side.
DROP_DENSITY300.0f~14 kg: it lands and stays put.
DROP_PICKUP_RANGE4.5fTorso center to the drop: close enough to pick up.
DROP_FOCUS_R0.55fThe crosshair's ray passing within this of it: the client's focus.
DROP_FOCUS_R_LOOSE1.2fThe server's check on a request, with the client's intent a moment old...
DROP_PICKUP_SLACK1.4f...and its torso a stride behind the prediction.
DROP_LIFE240.0fSeconds a drop lies there before it is swept.
DROP_TOSS2.5fm/s a dropped item leaves the hand at, ahead and a little up.
DROP_AHEAD0.9fWhere it leaves from: this far ahead of the torso.

The arena's own fixtures

ConstantValue
ARENA_EXTENT22.0f
ARENA_WALL_HALF_H4.0fWalls are centered at this height.
PILLAR_SPACING10.0f
PILLAR_HALF0.7f
PILLAR_HALF_H3.0f
ConstantValue
PIT_X0.0f
PIT_Z16.0f
PIT_HALF_X5.0fHalf the span, along the bridge.
PIT_HALF_Z4.0fHalf the chasm's width, across it.
PIT_FLOOR_Y-16.0fThe bottom, where the debris lands.
PIT_SPIKE_HEIGHT1.2fThe bed of spikes on the floor: how far they stand up...
PIT_SPIKE_BITE2.2f...and how far over the floor a body is still on them, whatever it landed on.
LOG_RADIUS0.18f
LOG_HALF1.30fHalf a log's length; logs lie across the deck, along z.
LOG_DENSITY700.0fWood: ~200 kg a log, a quarter of a wizard.
RAIL_Z(LOG_HALF - 0.20f)The two ropes run this far out from the deck's center line.
BRIDGE_SAG0.55fHow far the deck's middle hangs below its ends at rest.
DECK_END_Y(-LOG_RADIUS + 0.02f)End log centers: their tops sit flush with the rim.
STAKE_OUT0.9fStakes stand this far outside the rim, at the four corners.
STAKE_RADIUS0.13f
STAKE_HALF0.55fThe stake capsule's half-length.
STAKE_TOP_Y1.15fWhere the rope is tied off.
ROPE_RADIUS0.045f
ROPE_CUT_DIST0.24fA moving blade this close to a tie-off severs it.
ROPE_BURN_RADIUS1.8fA fireball bursting this close to a tie-off burns through it.
ROPE_ENDS4The tie-offs: west / east end, south / north side.
ConstantValue
BEAM_HALF13.5f
PIVOT_Y11.95fUnderside of the beam, where the chain hangs from.
LINK_HALF0.47fCenter to joint anchor; links are capsules along their local y.
LINK_RADIUS0.14f
LINK_DENSITY6.0fChunky links keep the ball:link mass ratio solver-friendly.
BALL_RADIUS0.9f
BALL_DENSITY2.0f
TIE_DROP1.5fHow far below the pivot the ball hangs while tied up.
PLATE_X0.0f
PLATE_Z7.5f
PLATE_HALF1.3f
PLATE_HEIGHT0.12f
BALL_HIT_MIN_SPEEDWORLD_HIT_EVENT_SPEEDThe hit-event threshold (config.h) is also what counts as a ball hit.
BALL_DAMAGE_K4.0fDamage per m/s of approach speed.
BALL_DAMAGE_MAX70.0f
BALL_HIT_COOLDOWN0.5f
MAX_HEALTH100.0f
HURT_FLASH_TIME1.0f
ConstantValue
TRAP_WALL_X(-ARENA_EXTENT + 0.5f)The west wall's inner face: where the hole is cut.
TRAP_Z5.0fThe lane, clear of the pillars, the target, and the chasm.
TRAP_MUZZLE_Y1.3fWhere the arrow leaves the hole: chest height once it reaches the plate.
TRAP_RANGE7.0fHole to plate: a shot crosses it inside the length of one roll.
TRAP_PLATE_HALF1.1fThe plate's square, half a side.
TRAP_STAND_Y1.7fA torso no higher than this over the floor is standing on it.
TRAP_HOUSING_HALF1.15fThe stone block the hole is cut through, half a side...
TRAP_HOUSING_OUT0.3f...and how far it stands proud of the wall.
TRAP_HOLE_HALF0.3fThe opening in its face.
TRAP_RESET1.5fAfter a shot, before the plate arms again: stand on it and it fires on this beat.
TRAP_ARROW_SPEED46.0fWell under a full draw's: still flat enough over the gap, slow enough to watch cross it.
ConstantValue
TARGET_X-13.0f
TARGET_Z-5.0f
TARGET_BEAM_Y2.6fThe beam's center; its underside is where the chains hang from.
TARGET_BEAM_HALF1.2fHalf the beam's length (along z); the posts stand at its ends.
TARGET_BEAM_R0.08fThe beam's half thickness.
TARGET_RADIUS0.55f
TARGET_THICK0.04fThe disc's half thickness.
TARGET_DENSITY300.0f~23 kg: an arrow swings it, a fireball throws it.
TARGET_LINK_HALF0.075fCenter to joint anchor; links are capsules along their local y.
TARGET_LINK_RADIUS0.03f
TARGET_LINK_DENSITY2000.0f
TARGET_HANG0.35fThe chains hang this far either side of the disc's center, and meet its rim there.
TARGET_RINGS5Rings of the face, the bullseye counted: score 0 is the middle.
ConstantValue
ROCK_X15.0f
ROCK_Z-8.0f
ConstantValue
MAX_TORCHES64
MAX_LIGHTS32The lit shader's point light array: the nearest torches, then the fireballs and their bursts.
TORCH_LIT24How many torches may light a frame; the rest of the array is the fireballs'.
TORCH_NEAR26.0fPast this a torch neither lights, spawns particles, nor draws its flame.

Sound

Everything audible in the game reports itself onto one sound field, and anything with ears asks that field what it heard. In the dungeon both the distance and the bearing run along the carved cells, so sound goes where a walker could go and an ear turns toward the doorway a noise came through -- never through stone.

The SND_* constants below are how far each kind of act carries, in meters. The listener hunts by exactly this table, and so do your own ears: what players hear and what monsters hear is the same physics.

ConstantValue
PLAYER_CATEGORY0x2ull
ENEMY_CATEGORY0x4ull
FIREBALL_CATEGORY0x8ull
POTION_CATEGORYFIREBALL_CATEGORYThrown flasks share the bolts' category: every mask that ignores one ignores the other.

Voice chat

ConstantValue
VOICE_RATE48000
VOICE_FRAME96020 ms.
VOICE_BITRATE24000
VOICE_MAX_PACKET400Bytes of Opus per frame, worst case.
VOICE_FULL3.0fA speaker this close is at full volume.
VOICE_RANGE40.0fA speaker this far is silent.
VOICE_FADE5.0fThe last meters before VOICE_RANGE ease out instead of cutting.
VOICE_RELAY_MARGIN2.0fThe server keeps relaying a little past the range so the fade completes.
VOICE_PAN_NEAR2.0fSpeakers closer than this pull toward the center of the stereo image.
VOICE_JITTER(3 * VOICE_FRAME)60 ms buffered before a speaker starts playing.
VOICE_MAX_BUFFER(12 * VOICE_FRAME)240 ms: past this the listener skips ahead.
VOICE_RINGVOICE_RATEOne second of decoded audio per speaker.
VOICE_PLC_MAX4Lost frames concealed by the decoder; a longer gap is a fresh start.
VOICE_RESYNC_TIME1.5fSilence this long resets a speaker's sequence and buffer.
VOICE_GATE_RMS0.02fOpen mic: transmit while the frame's RMS is above this...
VOICE_GATE_HANG0.4f...and for this long after it drops below.
VOICE_ECHO_GAIN0.7f--voice-echo: your own voice, in the middle of your head.
VOICE_HUD_HOLD0.3fSeconds a speaker stays listed after their last frame.

Everything else

Whatever the headings above did not name -- the pool sizes, the collision categories, and any block added to tunables.h since this page was last given a heading of its own. Nothing can fall off the end of the appendix without showing up here.

The bit the climb's probes cast against

ConstantValue
CLIMB_CATEGORY0x10ull
MAX_PROPS96The crates and balls of the piles: a third of this is built.
MAX_STATICS8192The forest's wood is the many now (~6000 trunks on a generous seed at the 288 m extent), then the dungeon's floors, walls, ceilings, and staircases on the 32-cell grid; the arena uses a handful.
CHAIN_LINKS10
CHAIN_BODIES(CHAIN_LINKS + 1)Links pivot-to-tip, then the ball.
SWORD_COUNT2
MAX_ENEMIES8Skeletons: one locked capsule each.
MAX_FIREBALLS16Pooled fireball bolts.
MAX_POTIONS8Pooled thrown flasks.
MAX_CHESTS3Loot chests: one closed, one locked, and the boss's (chest.c).
BRIDGE_LOGS24The log bridge's deck.
MAX_ARROWS16Pooled arrows.
TARGET_LINKS4Links in each of the practice target's two chains...
TARGET_BODIES(2 * TARGET_LINKS + 1)...then the disc.
MAX_DOORS2Metal doors (door.c): the level places up to this many.
MAX_SPIDERS3Spiders (spider.c): one per lair the level places, a locked sphere each.
MAX_BATS4Bats (bat.c): one per perch the map hangs, a locked gravity-free sphere each.
MAX_WEBSHOTS6Pooled web globs (web.c): what a spider spits.
MAX_DROPS16Pooled drops (drop.c): the items lying on the floor.
MAX_PILES8
CHAIN_GROUP(-(MAX_PLAYERS + 1))Collision group: the chain never collides with itself.
TARGET_GROUP(-(MAX_PLAYERS + 2))The target's chains and disc never collide with each other.
ARROW_CATEGORYFIREBALL_CATEGORYArrows share the bolts' category too: nothing that ignores a bolt stops an arrow.
WALK_SPEED7.0f
GROUND_ACCEL60.0f
AIR_ACCEL15.0f
JUMP_SPEED8.5f
WIZ_HOP_MAX1.15fThe auto-hop's ceiling over the feet: a ledge with its top under this is stepped onto without the jump key; taller is a wall, and the climb's.
WIZ_HOP_REACH0.75fHow far ahead the ledge probes look.

The staves

ConstantValue
BOLT_DAMAGE14.0fThe arcane bolt: the bottom rung of the imbuements, and the one spell no book teaches. Unerring, no element, no blast.
STAFF_SPELL_K0.6fWhat a staff's cast lands, as a share of the same spell out of a book, before its Spell Power.
THUNDERWAVE_RADIUS4.0fThe shove burst around the caster.
THUNDERWAVE_DAMAGE12.0f
THUNDERWAVE_KNOCK11.0fm/s away from the caster: the point of the spell.
THUNDERWAVE_LIFT5.0f
THUNDERWAVE_IMPULSE1500.0fb3World_Explode on the props around the caster.
FLAME_RANGE5.5fBurning hands: the cone's reach...
FLAME_CONE_COS0.8f...and its width (cos of the half-angle, ~37 degrees).
FLAME_DAMAGE16.0f
FLAME_HEAT20.0fPoints of heat on a struck wizard; a struck skeleton burns for BURN_TIME instead.
SLEEP_RADIUS2.6fEveryone this close to the mark drops where they stand...
SLEEP_DAMAGE1.0f...for a scratch (character_blow needs a wound to land the tumble)...
SLEEP_DROWSY30.0f...and a wizard wakes up slow (effect.c).
MAX_DAGGER_ZONES4Clouds of daggers up at once; a cast past that recycles the oldest.
DAGGER_ZONE_RADIUS1.8fThe cloud on the ground; a heal circle's vertical band.
DAGGER_ZONE_TIME6.0fSeconds a cloud spins.
DAGGER_PULSE0.4fA cut this often to everyone standing in it, caster included...
DAGGER_ZONE_DAMAGE4.0f...each this deep. (DAGGER_DAMAGE is the rogue's blade, above.)

The sound field

ConstantValue
SND_VOICE40.0fA talking wizard (the relay's word): the dinner bell -- it carries a room or two down the halls.
SND_FOOTSTEP7.0fA walking footfall...
SND_SPRINT_STEP15.0f...and a sprinting one.
SND_ROLL12.0fThe dodge's tumble.
SND_BLOW20.0fAny landed hit (character_blow), plus a little per point of damage.
SND_BLOCK18.0fA shield turning a blow (shield.c): iron on wood, nearly as loud as the hit it stopped.
SND_BLAST55.0fA fireball going off.
SND_THUNDERWAVE45.0fThe shove burst around a caster.
SND_FLAME25.0fBurning hands' roar.
SND_BLINK15.0fA misty step's pop, at both ends of the blink.
SND_DAGGERS15.0fA cloud of daggers spinning up.
SND_SPLASH16.0fA thrown flask shattering.
SND_INTERACT12.0fA lever thrown, a chest lid, a door grinding.
SND_SUMMON40.0fThe circle's consume and manifest.
SND_CHOMP18.0fA chomp plant's snap through empty air...
SND_CHOMP_HIT30.0f...and one that caught somebody: the dinner bell, for anything hunting by ear.
SND_EAT8.0fA wizard munching a mushroom: quiet, but not silent to a thing that hunts by ear.
SND_BREAK22.0fA crate or a barrel going to pieces (breakable.c): the hit already rang out through character_blow; this is the wood.

The boar

ConstantValue
MAX_BOARS3
BOAR_HEALTH90.0f
BOAR_RADIUS0.55f
BOAR_DENSITY700.0fHeavy: a charging boar is not shoved off its line by the wizard it is running at.
BOAR_RIDE0.85fBody origin over the ground: a low animal, where RIDE_HEIGHT stands a wizard.
BOAR_NOTICE_RANGE14.0fA living wizard this close, in line of sight, is worth pawing at.
BOAR_LOSE_RANGE22.0f
BOAR_GRAZE_SPEED1.6fThe amble between legs...
BOAR_CHARGE_SPEED14.0f...and the run, which beats a sprint: outrunning it is not on the menu.
BOAR_ACCEL40.0f
BOAR_TURN_RATE2.4frad/s while it is not committed...
BOAR_CHARGE_TURN0.30f...and inside the charge: a correction, not a chase. A sidestep beats it.
BOAR_PAW_TIME1.0fHead down, hoof scraping: the one warning, and long enough to act on.
BOAR_CHARGE_TIME1.9fA charge that hits nothing runs itself out over this.
BOAR_SKID_TIME0.8fThe turn-around after a charge that ended in the open.
BOAR_DAZE_TIME3.2fA charge that ended in stone: the punish window.
BOAR_GORE_DAMAGE30.0f
BOAR_GORE_KNOCK18.0fThe tusks LAUNCH: a gored wizard leaves the lane, which is the mercy in it.
BOAR_HIT_COOLDOWN0.5fRate limit on blows to a boar, and on its own goring.
BOAR_SLAM_SPEED6.0fMeeting anything that is not a character this fast ends the charge...
BOAR_SLAM_SELF12.0f...and costs the boar this much of its own health.
SND_BOAR_SNORT22.0fThe paw's warning onto the sound field...
SND_BOAR_SLAM30.0f...and the crash of a charge into stone.

The wolves

ConstantValue
MAX_WOLVES4
WOLF_HEALTH45.0f
WOLF_RADIUS0.35f
WOLF_RIDE0.62fBody origin over the ground: it runs on all fours, where RIDE_HEIGHT stands a wizard.
WOLF_DENSITY260.0f
WOLF_NOTICE_RANGE16.0f
WOLF_LOSE_RANGE26.0f
WOLF_PROWL_SPEED2.2f
WOLF_STALK_SPEED5.4fHolding the ring...
WOLF_LUNGE_SPEED9.5f...and the one that came in.
WOLF_ACCEL34.0f
WOLF_TURN_RATE5.0f
WOLF_RING_R5.0fThe bearing it holds around its prey at first...
WOLF_RING_TIGHT2.6f...closing to this...
WOLF_NERVE_TIME7.0f...over this long of unbroken circling.
WOLF_RING_DRIFT0.5frad/s the whole ring turns: they PACE, and which one is behind you keeps changing.
WOLF_TOKEN_TIME2.6fThe longest one wolf may hold the pack's turn to lunge.
WOLF_LUNGE_TIME1.3fA lunge that connects with nothing peels off anyway.
WOLF_PEEL_TIME1.0fThe retreat back to the ring after one.
WOLF_BITE_REACH1.9f
WOLF_BITE_DAMAGE14.0f
WOLF_BITE_KNOCK6.0f
WOLF_BACK_K2.0fA bite on a wizard's BACK (their own look yaw, which the server has) is worth this many of one to the face: they hunt what is not looking.
WOLF_BACK_COS0.0f"Behind" is anything past a right angle from where the wizard is looking.
WOLF_HIT_COOLDOWN0.35f
WOLF_HOWL_TIME1.6fThe rally: it stands still and sings, which is also the window to kill it.
WOLF_HOWL_RANGE45.0fEvery wolf inside this joins the hunt where it stands.
WOLF_HOWL_REST12.0f...and no wolf howls again for this long.
WOLF_ROOM_RING20.0fA SCENARIO room's layout only: the pack pushed out to the four quarters at this radius, well past a wolf's own sight of the middle, so a pilot can walk up on ONE of them and watch what a lone wolf does. The wood rings them tight around a post instead (wolf.c).
SND_WOLF_HOWL60.0fThe loudest thing in the wood: the pack hears it, and so does everything else.
SND_WOLF_BITE20.0f

The wisp

ConstantValue
MAX_WISPS3
WISP_HEALTH26.0fThin: one arrow, or a couple of swipes if you can reach it at all.
WISP_RADIUS0.30f
WISP_DENSITY40.0f
WISP_HOVER_Y2.2fHow high over the ground it likes to sit.
WISP_WAKE_RANGE15.0f
WISP_LOSE_RANGE24.0f
WISP_BEAM_RANGE12.0fThe beam reaches this far and no further.
WISP_STAND_OFF8.0fThe distance it tries to hold while it drains.
WISP_SPACE4.0fA wizard inside this makes it bolt.
WISP_FLY_SPEED4.6f
WISP_BOLT_SPEED8.0fBolting is fast -- but slower than a sprint, so it CAN be run down.
WISP_ACCEL22.0f
WISP_MARK_TIME0.9fThe brightening before the beam: the tell.
WISP_BOLT_TIME1.4f
WISP_DRAIN_STEP0.5fA drain bite lands this often while the beam holds...
WISP_DRAIN_DAMAGE2.0f...for this much health, which is a trickle: a wisp does not kill you, it makes everything else able to...
WISP_DRAIN_COLD1.0f...this many points of cold on the lifebar (effect.c) -- slow enough that a beam alone takes the better part of a minute to fill the bar, which is time to walk out of it...
WISP_DRAIN_STAMINA0.07f...and this much of the stamina bar (climb.c), which is the number that decides fights: stand in a beam and you lose the sprint and the roll first.
SND_WISP_CHIME12.0fQuiet: it is not trying to be heard.

The oozes

ConstantValue
MAX_OOZES14The pool: OOZE_SEEDS seeds at OOZE_SIZE_MAX split all the way down into exactly this many.
OOZE_SIZE_MAX2A seed's size; each split is one size down, and size 0 dies for good.
OOZE_SEEDS2The pool's SHAPE: this many slots at the top size, twice that at the size below, and so on -- so every slot's radius is fixed at the build and a split raises a body that was already the right size instead of resizing one. OOZE_SEEDS * (2^(OOZE_SIZE_MAX+1) - 1) must be MAX_OOZES (ooze.c asserts it).
OOZE_HEALTH22.0fAt size 0; a size up is OOZE_SIZE_K times the health...
OOZE_SIZE_K2.2f...and the cube root of that again in radius, so a big one reads as big.
OOZE_RADIUS0.34fAt size 0.
OOZE_DENSITY500.0f
OOZE_WAKE_RANGE12.0f
OOZE_LOSE_RANGE20.0f
OOZE_GATHER_TIME0.7fThe squash before a hop: where the hop is going is readable in it.
OOZE_SETTLE_TIME0.4fThe quiver after a landing, before it may gather again.
OOZE_HOP_SPEED6.0fFlat, at size 0 (a size up is OOZE_HOP_SIZE_K of it)...
OOZE_HOP_LIFT5.0f...with this much of an arc.
OOZE_HOP_SIZE_K0.8fEach size up hops this much of the speed below it: big is slow.
OOZE_HOP_REACH5.0fA hop covers at most this much ground.
OOZE_TOUCH_DAMAGE7.0fBeing touched by one, at size 0 (it scales with the size)...
OOZE_TOUCH_POISON8.0f...and the acid that comes with it (effect.c).
OOZE_TOUCH_KNOCK3.0f
OOZE_HIT_COOLDOWN0.5f
OOZE_SPLIT_SPEED4.0fThe two halves are thrown apart at this, so they never land inside each other.
SND_OOZE_HOP10.0f
SND_OOZE_SPLIT24.0f

The thornback

ConstantValue
MAX_THORNBACKS3
THORN_HEALTH110.0f
THORN_RADIUS0.55f
THORN_DENSITY800.0f
THORN_RIDE0.72fBody origin over the ground: it is a beetle, and it is low.
THORN_SHELL_COS0.30fThe plate's arc: a bit past a right angle either side of the facing.
THORN_NOTICE_RANGE13.0f
THORN_LOSE_RANGE20.0f
THORN_TRUNDLE_SPEED1.4f
THORN_ADVANCE_SPEED2.6fSlow on purpose: nothing ever forces you to fight its front.
THORN_ACCEL20.0f
THORN_TURN_RATE0.9frad/s. At two meters a walking wizard goes round it twice as fast.
THORN_RAM_RANGE2.4f
THORN_RAM_HIT_T0.55fThe shove's windup...
THORN_RAM_TIME2.2f...and the whole of it, recovery included: it cannot turn inside one, so the recovery IS the invitation to walk round it.
THORN_RAM_DAMAGE16.0f
THORN_RAM_KNOCK12.0f
THORN_LASH_TIME0.7fThe riposte a turned blow buys it...
THORN_LASH_HIT_T0.25f
THORN_LASH_RANGE2.8f
THORN_LASH_DAMAGE8.0f
THORN_LASH_THORNS12.0f...and the spines it leaves in you (effect.c: F pulls them out).
THORN_FLINCH_TIME0.6fWhat a blow that got PAST the plate buys you.
THORN_HIT_COOLDOWN0.3f
SND_THORN_RAM20.0f
SND_THORN_SHELL16.0fA blow turned by plate: as loud as the hit it stopped, and as useless.
DUNGEON_GRID32Cells per side, in x and z: a 128 m footprint, four times the floor area the 16-cell grid had.
DUNGEON_LEVELS2Floors, stacked; level 0 is the deepest.
DUNGEON_CELL4.0fA cell, in meters.
DUNGEON_LEVEL_H8.5fFloor to floor: DUNGEON_HEAD of headroom over the floor's own thickness. Two kit wall courses; the ramp pitch (8.5 over 12 m, ~35 degrees) still rides under the 0.7-normal wall limit (test_walk pins it).
DUNGEON_STAIR_RUN3Cells of steps in one staircase: the run rises DUNGEON_LEVEL_H over this many cells, so a taller level needs a longer run to keep the ramp's face reading as ground.
DUNGEON_HALL_W3Cells ACROSS a corridor and a staircase: the spine A* digs and the lanes dug beside it (dungeon.c, s_widen), so a hall is three kit tiles wide -- ten meters clear between its walls, where one cell left two -- and a flight is cut and built over the same lanes. A pit spans the whole width (dungeon_traps.c). A room keeps one doorway, so a hall narrows to its spine for the cell before a door. An even width leans its extra lane to the positive side of the spine.
DUNGEON_LANE_LO(-((DUNGEON_HALL_W - 1) / 2))The lanes across a spine, as cell offsets: from this many below it...
DUNGEON_LANE_HI(DUNGEON_HALL_W - 1 + DUNGEON_LANE_LO)...to this many above.
DUNGEON_SLAB0.25fHalf the thickness of a floor (a level's floor is the one below's ceiling).
DUNGEON_WALL0.5fHalf the thickness of a wall; a wall stands INSIDE its own cell, against the boundary. The kit wall is a meter thick.
DUNGEON_HEAD(DUNGEON_LEVEL_H - 2.0f * DUNGEON_SLAB)Headroom inside a level: floor top to ceiling = two 4 m kit wall tiles.
DUNGEON_RAMP_T0.4fThe staircase ramp slab's thickness: under it, riser boxes seal the wedge. At most 2*DUNGEON_SLAB * cos(pitch), or the ramp's buried foot pokes through the ceiling of the room below.
DUNGEON_MIN_ROOMS20
DUNGEON_MAX_ROOMS28The room table's size; DUNGEON_MIN_ROOMS..this are placed.
DUNGEON_ROOM_MIN2A room, in cells, on a side...
DUNGEON_ROOM_MAX4...and the entrance is one of these.
DUNGEON_BOSS_SIDE5The boss room is square and bigger than any other.
DUNGEON_EXTRA_EDGE0.14fHow often a graph edge outside the spanning tree is kept too: the loops.

The camp's log seats

ConstantValue
FOREST_SEATS4Logs around the firepit, one per side.
FOREST_SEAT_R2.60fTheir centers out from the fire: clear of the banked stone, inside the spawn ring.
FOREST_SEAT_LEN1.90fA log end to end...
FOREST_SEAT_RAD0.21f...and its radius, so the top sits at 0.42 m: a low bench, and under STEP_HEIGHT.

The waystones

ConstantValue
WAYPOINT_RADIUS1.5fThe pad test both ends run: standing within this of the stone across.
WAYPOINT_HEIGHT2.5f...and this far up over its ground (a hop on the plinth does not leave it).
WAYPOINT_PLINTH1.1fHalf the plinth's side: the square step the monolith stands on.
WAYPOINT_STEP0.35fThe plinth's height over the ground: under STEP_HEIGHT, so a wizard walks up onto it.
WAYPOINT_STONE_HALF0.28fHalf the monolith's side...
WAYPOINT_STONE_H2.8f...and its height off the plinth.

The dune field

ConstantValue
DUNE_HALF92Half the field in meters: 184 m of sand across.
DUNE_EXTENT((float)DUNE_HALF)The same as a float; past it, open sky.
DUNE_SCALE(DUNE_EXTENT / 46.0f)The field against the 46 m half it was tuned at: what every distance below is multiplied by.
DUNE_AREA_X((DUNE_HALF * DUNE_HALF) / (46 * 46))...and its area against that one's: what every count below is multiplied by (4 at 92 m).

The oasis

ConstantValue
OASIS_R9.5fThe basin: the sand bowls down over this radius...
OASIS_DEPTH2.2f...to a flat floor this far under sea level (the pond's shore)...
OASIS_FLAT_K0.22f...flat out to this fraction of the radius squared (the shore and the pond inside it).
OASIS_POND_R4.2fThe pond fills the middle of the floor out to this...
OASIS_POND_DEPTH1.4f...cut this much deeper again at its middle (the bed)...
OASIS_WATER_Y(-2.5f)...with the surface here: a hand under the shore, so the water is walked into, never fallen into.
OASIS_GRASS_R7.6fGrass grows out to here from the pond's middle.
OASIS_DIST_MIN(20.0f * DUNE_SCALE)The basin's middle stands this far north of the spawn at least...
OASIS_DIST_MAX(24.0f * DUNE_SCALE)...and this far at most, off the spawn bowl and the waystone (walker.c, waypoint.c).
OASIS_SIDE(8.0f * DUNE_SCALE)...and this far east or west of it at most.
OASIS_PALMS10
OASIS_BEDS3Dry riverbeds running in from the rim.
OASIS_BED_POINTS5A bed is a polyline of this many points, rim to shore.
OASIS_BED_HALF_W2.6fHalf a bed's floor...
OASIS_BED_BANK2.4f...and the bank it climbs back to the dunes over.
OASIS_BED_Y00.9fThe floor at the rim end, descending to the basin floor at the shore.
OASIS_TRAIL_Z11.5fThe trail to the water starts here, just north of the waystone (waypoint.c's DUNES_WAYPOINT_Z), and runs straight to the basin...
OASIS_TRAIL_HALF3.0f...this wide either side: nothing is placed across it.
OASIS_BED_START(39.0f * DUNE_SCALE)Where a bed begins: at the storm's edge (the walls stand past it)...
OASIS_BED_END0.72f...and where it ends: this far out from the basin's middle, as a fraction of OASIS_R -- on the slope, short of the shore.

The sandstorm

ConstantValue
STORM_FOG_R0(30.0f * DUNE_SCALE)
STORM_FOG_R1(43.0f * DUNE_SCALE)
STORM_WALL(40.5f * DUNE_SCALE)The hidden walls: past the placements' extent (terrain_extent), inside the field's taper.
STORM_WALL_H40.0fTall: no jump, climb, or hookshot clears one.
STORM_EYE_DENSITY0.14fThe fog density the eye sees at the wall, on top of the haze: standing in the storm you see a few meters.

The desert's scatter

ConstantValue
MAX_TUMBLEWEEDS16A kind's capacity (entity.h's budget), so a literal rather than the area's: half the scatter's rate on the 92 m half, and enough to keep one in sight.
TUMBLEWEED_RADIUS0.55f
TUMBLEWEED_DENSITY25.0fLight: a kick sends it flying, and the wind moves it at all.
TUMBLEWEED_WIND9.0fm/s^2 downwind, on every tumbleweed on the ground...
TUMBLEWEED_GUST0.35f...and this fraction of it again, gusting.
TUMBLEWEED_SPEED_CAP7.0fAs fast as one rolls, whatever the wind says.
TUMBLEWEED_WRAP(38.0f * DUNE_SCALE)Past this (|x| or |z|) it is put back at the upwind edge, and counted.
CACTUS_THORNS8.0fPoints of thorns a prick puts on the lifebar...
CACTUS_DAMAGE4.0f...and the sting itself.
CACTUS_KNOCK3.0fThe shove back off the spines.
CACTUS_COOLDOWN0.9fSeconds before the same wizard can be pricked again.
DESERT_CACTI(26 * DUNE_AREA_X)Rolled per build, less what will not fit: the counts keep the field's density whatever its size.
DESERT_BONES(9 * DUNE_AREA_X)
DESERT_DEAD_TREES(7 * DUNE_AREA_X)
DESERT_ROCKS(18 * DUNE_AREA_X)

The scorpion

ConstantValue
MAX_SCORPIONS5
SCORP_HEALTH34.0f
SCORP_RADIUS0.42f
SCORP_DENSITY500.0f
SCORP_RIDE0.55fBody origin over the ground. Buried is a look (the hump): the body never sinks, since a capsule inside the sand is a capsule the physics throws out again.
SCORP_TRIGGER_RANGE2.6fA living wizard this close to a buried one wakes it...
SCORP_LOSE_RANGE14.0f...and one this far away is let go.
SCORP_ERUPT_TIME0.55fThe burst up out of the sand: the tell.
SCORP_STING_HIT_T0.30fThe sting lands this far into its swing...
SCORP_STING_TIME0.65f...which is this long in all.
SCORP_STING_REACH1.7f
SCORP_STING_DAMAGE12.0f
SCORP_STING_KNOCK5.0f
SCORP_STING_POISON16.0fThe venom, in points of the lifebar (effect.c).
SCORP_CHASE_SPEED5.5fFaster than a walk, slower than a sprint: it is left behind on purpose.
SCORP_CHASE_TIME4.5fHow long it scuttles after somebody before it gives up and digs.
SCORP_BURROW_TIME1.1fThe dig back in.
SCORP_ACCEL40.0f
SCORP_TURN_RATE6.0f
SCORP_HIT_COOLDOWN0.4f
SND_SCORP_ERUPT14.0fThe sand bursting: quiet, and the only warning.

The sandworm

ConstantValue
MAX_SANDWORMS1
WORM_HEALTH240.0f
WORM_RADIUS1.15f
WORM_DENSITY1500.0f
WORM_SUBMERGED_Y(-1.6f)The body's middle under the sand while it swims...
WORM_RISEN_Y3.4f...and over it at the top of the breach.
WORM_EAR0.5fCarry left at the ear (sound.c: the carry less the trip) a noise needs to count: a walking footfall (SND_FOOTSTEP) reaches it from a few meters, a sprinting one (SND_SPRINT_STEP) from twice that, a blow or a blast from across the field.
WORM_MEMORY6.0fSeconds it keeps swimming toward the last noise it heard.
WORM_SWIM_SPEED3.6fUnder the sand, toward a noise...
WORM_CRUISE_SPEED1.4f...and its idle wander.
WORM_ACCEL14.0f
WORM_STRIKE_R2.2fClose enough under a noise to rise.
WORM_RISE_TIME1.3fThe mound swelling: the tell, and long.
WORM_BREACH_TIME0.9fUp out of the sand...
WORM_SLAM_TIME0.5f...and down again on whatever stood there.
WORM_SLAM_R4.0fEverything within this of the landing takes the slam.
WORM_SLAM_DAMAGE34.0f
WORM_SLAM_KNOCK14.0f
WORM_DIVE_TIME1.2f
WORM_REST_TIME5.0fUnder the sand after a breach before it hunts again.
WORM_HIT_COOLDOWN0.5f
SND_WORM_ROAR45.0fThe breach: everything hears it.

The vulture

ConstantValue
MAX_VULTURES3
VULTURE_HEALTH30.0f
VULTURE_RADIUS0.42f
VULTURE_DENSITY60.0f
VULTURE_SOAR_H9.0fHow high it circles over the ground...
VULTURE_SOAR_R7.0f...and how wide its circle is...
VULTURE_SOAR_RATE0.55f...and how fast it goes round it (rad/s).
VULTURE_NOTICE_RANGE30.0fA wizard this close is somebody to circle over.
VULTURE_LOSE_RANGE45.0f
VULTURE_WOUND_K0.45fHealth under this fraction of full is a wound worth stooping at.
VULTURE_FLY_SPEED6.5f
VULTURE_STOOP_SPEED15.0fThe dive: faster than anything else in the air.
VULTURE_ACCEL30.0f
VULTURE_STOOP_TIME1.6fA dive that has not connected by now pulls up anyway.
VULTURE_CLIMB_TIME1.4f
VULTURE_POISE_MIN2.0fThe patience between stoops, rolled per stoop...
VULTURE_POISE_MAX4.5f
VULTURE_RAKE_REACH1.6f
VULTURE_RAKE_DAMAGE10.0f
VULTURE_RAKE_KNOCK4.0f
VULTURE_HIT_COOLDOWN0.4f
SND_VULTURE_CRY26.0fThe stoop's scream.

The camel

ConstantValue
MAX_CAMELS3
CAMEL_HEALTH120.0f
CAMEL_RADIUS0.55f
CAMEL_CAP_HALF0.45f
CAMEL_DENSITY900.0f
CAMEL_RIDE1.35fBody origin over the ground: tall, on long legs.
CAMEL_GRAZE_SPEED1.3f
CAMEL_TROT_SPEED6.0f
CAMEL_ACCEL26.0f
CAMEL_TURN_RATE3.0f
CAMEL_STARTLE_RANGE3.0fA SPRINTING wizard this close startles it as a blow would.
CAMEL_BRAY_TIME0.7fThe tell: the head up, the bray.
CAMEL_KICK_TIME0.8fThe kick's whole swing...
CAMEL_KICK_HIT_T0.35f...and when in it the hooves land.
CAMEL_KICK_REACH2.4fBehind it, within this, in the rear's arc.
CAMEL_KICK_COS0.35fThe arc: a bit wider than a right angle across its rear.
CAMEL_KICK_DAMAGE22.0f
CAMEL_KICK_KNOCK20.0fAcross the sand: the mercy in it is that you are no longer next to the camel.
CAMEL_TROT_TIME3.5fHow long it trots away after a kick.
CAMEL_CALM_TIME6.0fUnstruck this long, it forgets and grazes.
CAMEL_HIT_COOLDOWN0.5f
SND_CAMEL_BRAY24.0f