Object | Dimensions |
---|---|

1 foot | 16 units |

Maximum Climbable Step | 24 units or 45.573* degree slope |

Small Vent | 64×64 |

Small Hallway | 192 wide |

Large Hallway | 384 wide |

Very Large Hallway | 896 wide |

Standard heavy door | 32×128×160 |

Vault door | 16×160×160 |

*The exact maximum slope angle is arccos(0.7).

Creatures | Dimensions |
---|---|

Marine | 32×32×72* |

Colonist | 26×26×72 |

Drone (all variants) | 40×40×69 |

Ranger | 40×40×69 |

Buzzer | 20×20×20* |

Boomer | 60×60×110 |

Parasite | 24×24×12 |

Shieldbug | 80×80×72 |

Mortarbug | 46×46×69 |

Harvester | 46×46×69 |

Xenomite | 24×24×12 |

Grub | 24×24×12 |

Mender | 32×32×64 |

Queen | 240×240×160 |

Antlion (both) | 32×32×64 |

Antlion Guard (both) | 60×60×110 |

Headcrab (all variants) | 24×24×12 |

Headcrab Zombie (all variants) | 26×26×72 |

Combine Soldier (all variants) | 26×26×72 |

Combine Hunter | 44x44x100 |

Combine Strider, Dropship, Gunship | 76x76x76* |

Combine Scanner, Claw Scanner | 20x20x20* |

*Marine hulls are biased 2 units south (regardless of camera orientation).

*Flying creature hulls are vertically centered. All other hulls start at the origin and go up. Striders are considered to be flying creatures.

With `asw_controls 1`

, the camera has a fixed angle when moving the mouse. Unless explicitly disabled in `asw_gamerules`

, players can rotate the camera's yaw axis in 90 degree increments. For other values of `asw_controls`

, the player has full control of the camera angle.

The player can also change the center point of their view on the X and Y axes by moving their mouse. The default values for maximum camera shifting offsets are 300 left/right, 200 forward, and 380 back.

<script> const inputs = {}; ["calculator", "result1", "result2", "pitch", "dist", "fov", "aspect_w", "aspect_h", "test_z"].forEach(name => { const el = document.getElementById(name); inputs[name] = el; if (el.nodeName === "INPUT") { el.addEventListener("input", recalculate, false); } }); function recalculate() { if (!inputs.calculator.reportValidity()) { return; } const pitch = Math.PI - inputs.pitch.valueAsNumber * Math.PI / 180; const camOffsetY = -inputs.dist.valueAsNumber * Math.cos(pitch); // camera -> feet const camOffsetZ = -inputs.dist.valueAsNumber * Math.sin(pitch); // camera -> feet const aspect = inputs.aspect_w.valueAsNumber / inputs.aspect_h.valueAsNumber; const halfFOVY = inputs.fov.valueAsNumber * Math.PI / 360; const halfFOVX = Math.atan(aspect * Math.tan(halfFOVY)); const angleTop = pitch + halfFOVY; // +z sin, +y cos const angleBottom = pitch - halfFOVY; // +z sin, +y cos const testZ = inputs.test_z.valueAsNumber + camOffsetZ; // camera -> floor const floorTopY = testZ / Math.tan(angleTop) - camOffsetY; const floorBottomY = testZ / Math.tan(angleBottom) - camOffsetY; const floorTopX = -testZ * Math.sin(halfFOVX) / Math.sin(angleTop); const floorBottomX = -testZ * Math.sin(halfFOVX) / Math.sin(angleBottom); if (floorTopY <= floorBottomY) { inputs.result1.textContent = "The player cannot see a floor that is " + inputs.test_z.valueAsNumber.toFixed(1) + " units above their feet."; inputs.result2.textContent = ""; } else { inputs.result1.textContent = "The player can see a floor that is " + inputs.test_z.valueAsNumber.toFixed(1) + " units above their feet from " + floorTopY.toFixed(1) + " units in front of them to " + (-floorBottomY).toFixed(1) + " units behind them."; inputs.result2.textContent = "At the far end, the player can see " + floorTopX.toFixed(1) + " units to the left and right on the floor, and at the near end, the player can see " + floorBottomX.toFixed(1) + " units to the left and right on the floor."; } } recalculate();