Sanity loss is a group of damage-over-time statuses that tick on your Sanity instead of your HP. Enemies inflict it with suction attacks and some pools inflict it too. You can also inflict it on yourself on purpose with the Elixir of Hallucination, to push a hero toward the Lunatic state. It works like Bleed and the other DoTs, with a few sanity-specific exceptions. See Status effects for the general rules and Sanity for what low sanity does.
Variants#
| ID | Name (designer label) | Sanity per second | Duration | Total | Build-up | Debuff flag | Family | Source |
|---|---|---|---|---|---|---|---|---|
| 10040 | Sanity Loss (减SAN) | 2 | 5 s | 10 | +55% per hit (2 hits), drains 3%/s | No | 100 | Sunflower enemy (向日葵, model 20031): suction attacks (SkillData 1318, 1319); Smoke-Pot Man (烟壶人, model 20035): suction attacks (SkillData 1404, 1405); trap pools 10005 and 10006 (TrapData rows 5-6, which also apply Poison) |
| 10041 | Foul Water (污水) | 3 | 7 s | 21 | instant | Yes | 115 | Nothing in the data applies it (unused) |
| 10074 | Sanity Loss, item (减SAN) | 5 | 5 s | 25 | instant | No | 306 | Elixir of Hallucination (Consumables 20021 and 72115) |
The English text of the Elixir of Hallucination says it makes you lose sanity "immediately". In the data it is a 5-second drain of 5 per second.
How the drain is calculated#
The sanity statuses use the generic status formula. Their multipliers are zero (Param2 = 0, Param3 = 0, Param5 = 0), so the drain is simply the flat Param4 value per second, rounded up. That means:
- No resistance applies. No defence or resistance stat reduces sanity loss. Norwood's Lunatic resistance penalty and similar effects have nothing to act on.
- Difficulty does not soften it. The Casual-difficulty multiplier and the beginner-item multiplier only reduce HP damage-over-time. Sanity ticks are never scaled.
- It ticks once per second from the moment the status becomes active.
Hidden mechanics#
- Elixirs cancel each other. The Elixir of Hallucination (10074) shares family 306 with Elixir of Sanity (10009, +1/s for 15 s) and Vertebra Nail (10100, +5/s for 3 s). Using any of them replaces the others. Drinking a sanity restorer stops a Hallucination drain at once, and the reverse is also true.
- Debuff Immunity does not help against suction. The enemy Sanity Loss (10040) and the Hallucination drain are not flagged as debuffs. Slightly Sweet Roots neither removes nor blocks them. Only the unused Foul Water is a debuff.
- Invincibility does not stop the ticks.
Status104contains a check that zeroes the tick for an invincible victim, but it sits inGetValueByPropertyId, which nothing in the game calls. The ticks are applied throughGetPropertyValue, which has no such check, so a sanity (or HP) drain keeps ticking during invincibility such as Norwood's counter (10082). See Status effects and Shields and protection#Other protection. - Talents make the Hallucination stronger. The Elixir of Hallucination (20021) is on the item lists of both item talents in every hero's tree. Improved Effect (+10/20/30%) raises the drain to 6/6/7 per second (rounded up; Elena's +15/30% gives 6/7). Prolonged Duration stretches it to 5.5/6/6.5 s at +10/20/30% (Norwood and Jerold reach +20%, Elena has +15%, 5.75 s; levels per hero in Buffs). The maze copy (72115) is not on either list.
- Benita's drug tolerance halves it. While Benita is in the Abnormal state (or Lunatic) and has an active Drug Resistance status (10044-10046, which needs 100 stacks), every item status flagged
DrugFast, including Hallucination and the sanity elixirs, works at 50% strength. See Benita and Status effects. - Sanity does not drain in some places. All sanity loss, these statuses included, is ignored in Arcade mode (except boss fights), in dream stages, after the host has died, and while attacks are globally stopped.
- The maze buffs only touch the maze's own drain. The Purifying Saint's "slower sanity loss" buff (10096, -50%; Buffs#Maze statue buffs) and the no-sanity-loss mark (10097) act on the Dark Mist maze's passive sanity drain. They do not reduce these statuses (inferred: the 50% reduction is applied only in the maze drain code). See Deep into the Dark Mist.
- Build-up for pools. Pools and other continuous sources add their build-up per second rather than per hit. Standing in a sanity pool fills the 55% gauge over time instead of in two hits (inferred from the
isPeriodscaling of build-up).
Sources#
logic/status/statusbase.lua:226-232(a stack status is active at 100 stacks),:338-342;logic/player/animalbase.lua:5353-5359(IsHaveStatusByIdcounts only active statuses).- Status-group pass:
es_statusdata.lua10040 (Param42,StackAddPer55,StackSubPer3, 5 s), 10041 (3/s, 7 s, debuff, family 115), 10074 (5/s, 5 s,DrugFast1); item-talent levelsHeroTalent14302/17302/17304 (StoneLevel);statusbase.lua:340-341(tolerance check isIsHeroSanNotNormal). - StatusData rows with StatusId 10040, 10041, 10074, 10009, 10100 (
es_statusdata.lua): Param1 8 (Sanity), Param4, Time, StackAddPer, StackSubPer, IsDebuffer, StatusType, DrugFast. - SkillData rows 1318, 1319 (HeroId 20031), 1404, 1405 (HeroId 20035); TrapData rows 5-6 (
StatusId210040); ItemData rows 328 (20021) and 366 (72115). - HeroTalent rows 22 and 24 (and the same talents for every hero):
Conditionitem lists forItemStatusTimeAdd(type 42) andItemStatusValueAdd(type 48). luascript/logic/status/statusbase.lua:209-224, 284-350: duration talent, value formula, Benita's 50% tolerance cut (Hero10003_Define.SanItemValueSubRate= 500,hero10003_define.lua:78).luascript/logic/status/status104.lua:11-56: per-second ticks, Casual scaling for HP only; the invincibility check at lines 11-31 is inGetValueByPropertyId, which has no callers (grep over luascript), while ticks useGetPropertyValue(lines 35-56) viaanimalbase.lua:5425-5497.luascript/logic/playervalue/animalbase_value.lua:976-1004: sanity changes ignored in Arcade, dreams, after death and during stops.luascript/controller/controllerstorymode.lua:2222-2238: maze drain slowed by 10096.luascript/logic/player/animalbase.lua:5266-5272(per-second build-up for continuous sources; debuff immunity check),5486-5497(ticks applied).