Series
Silent Hill
16 games, 1999–2026.
Games
Interactive: timeline (needs JavaScript)
The series by yearMechanics
A marked cell changed from the game before. “Uses” means the game has the mechanic, with no variant recorded yet.
Every claim, by mechanic and game
| Concept | Silent Hill 1999 |
|---|
| Ammunition | |
| Healing item | - In the US build, using a healing item from the inventory (
Inventory_PlayerItemScroll) adds 40 health for a Health Drink, 80 for a First Aid Kit, and 100 for an Ampoule, then clamps Harry's health to 0–100 and spends one item. An Ampoule also sets healthSaturation to 300 (a set, not an add). Player_LogicUpdate lowers healthSaturation by g_DeltaTime on each update and, while any remains, raises Harry's health by the same amount, capped at 100. So an Ampoule fills health and then keeps restoring it, up to 300 more in all (computed), with the store draining even while health is full. Code
|
| Light detection | - In the US build, the flashlight swaps which environment preset's flags are live, and enemy code reads those flags.
Gfx_EffectsUpdate moves flashlightIntensity toward 1 while the flashlight is on and toward 0 while it's off, by 4 × g_DeltaTime per update, and func_8003F838 copies the live flags (field_154) from the flashlight-off preset (field_1C[0]) while the intensity is under 0.5 and from the flashlight-on preset (field_1C[1]) from 0.5 up. WorldEnv_MapPresetSet gives a map whose header's unnamed field_16 is 2 the preset pair 6 and 3, or 7 and 4 in low-visibility interiors (off, then on). Presets 6 and 7 set SpecialEnvEventFlags_DarkEnvironment and SpecialEnvEventFlags_FlashlightAllowed; presets 3 and 4 set FlashlightAllowed without DarkEnvironment. A map whose field_16 is 1 gets preset 1 or 2 for both, which set neither flag, and Gfx_MapEnvStepUpdate marks the flashlight unavailable whenever the two presets are the same. So in those dark maps, the flags read as dark with the flashlight off and as lit with it on; map events can load other pairs. Code - In the US build,
LarvalStalker_ControlUpdate sets the larval stalker's target position to Harry's whenever his distance on the ground plane is under 2 × base + step, with base and step picked by the live light flags (silent-hill/flashlight-presets): 2.5 and 8 when neither DarkEnvironment nor FlashlightAllowed is set, 3.5 and 10 when only FlashlightAllowed is, and 0.5 and 1.5 otherwise. Computed, that's 13 world units in fog presets; in the dark map presets, 17 units with the flashlight on and 2.5 with it off. This check reads no facing and no line of sight. Code - In the US build, a walking creeper (
Creeper_ControlWalkForward) retargets Harry's position when func_8006FD90 passes, with arguments picked by the live light flags (silent-hill/flashlight-presets). func_8006FD90 scales a range by how directly the creeper faces Harry, f = 1 − |angle off its heading|/180° (1 straight ahead, 0 behind), raised to the power count + 1; it fails beyond base + step × that, and otherwise a ray test toward Harry (Ray_CharaTraceQuery) decides. With only FlashlightAllowed set, the creeper calls it with count 0, base 12, and step 8: 12 units behind to 20 ahead. With FlashlightAllowed and DarkEnvironment, count 2, base 0.8, step 0.4: 0.8 to 1.2 units. With neither flag, count 1, base 4, step 12: 4 to 16 units (all computed). A separate check (func_80070360 with 0.5) or an alert flag also retargets it. Code
|
| Proximity warning | - In the US build (SLUS-00707),
Game_NpcUpdate picks the enemies the pocket radio reacts to by distance alone, with no line-of-sight test. An enemy (a character id up to Chara_MonsterCybil, the code's last common enemy) counts while its health is above 0, its CharaFlag_NoRadioStatic flag is clear (Split Head's init sets it; other setters weren't read), and its squared distance from Harry on the ground plane, x and z with height ignored, is under 32² world units (a unit is Q12 1.0). In maps flagged MapFlag_Interior with one or two active chunks, which the code calls low-visibility interiors, the enemy must also share Harry's 40-unit chunk cell on both axes. The code keeps the three nearest, and the radio's two static channels (g_RadioNoise[2]) each follow one of the nearest two, only while ItemToggleFlag_RadioOn is set. Each channel is panned toward its enemy, and its volume falls with distance: the attenuation is the distance converted by Q12_TO_Q4 (sixteenths of a unit, by the decompilers' reading, which their comment "TODO: Is it Q4 here?" doubts), halved outside low-visibility interiors, capped at 255, and Sd_SfxAttributesUpdate takes that share out of 255 from the volume. Computed under that reading, the static falls silent at about 16 units in a low-visibility interior and about 32 units elsewhere. Code
|