A design brief for review. Every vanilla figure below is read from the Build 42 game files; every Alcoholic figure is the current tuning. Comments and counter-proposals welcome — the questions at the end are the ones I would most like answered.
The pitch
A negative trait built on the same bones as vanilla’s Smoker: a craving that grows while you go without, and lets go when you indulge.
Where it differs is that it pays you back. Smoker is pure cost — you take three points and you manage a habit. The Alcoholic takes four and gives you two real capabilities in exchange: a drink steadies your hands in a fight, and you carry your liquor better than anyone else.
The result is a trait you might take on purpose rather than for the points.
How it compares to Smoker
| Smoker (vanilla) | Alcoholic (planned) | |
|---|---|---|
| Point cost | −3 | −4 |
| Mutually exclusive with | Athletic | Athletic |
| Disabled in multiplayer | No | No |
| Craving channel | Nicotine withdrawal, added to stress as a read-time offset | Unhappiness and stress, held at a target |
| What relieves it | Smoking a cigarette | Any alcoholic drink |
| Upside for the player | None — it is pure cost | Panic relief and alcohol tolerance |
| Cross-trait interaction | None | Feeds and is fed by Smoker |
The structural point: vanilla computes getNicotineStress() as stress plus nicotine withdrawal, clamped. Withdrawal is a level, not an accumulator — it raises where your stress sits rather than piling on forever. The Alcoholic uses the same idea, so at full craving you are uncomfortable and still functional, which is where Smoker leaves you.
Feature one — the craving
| Value | |
|---|---|
| Sober hours before it bites | 8 in-game hours |
| Craving growth once dry | 6 points/hour, capped at 100 |
| Unhappiness at full craving | held at 55 of 100 |
| Stress at full craving | held at 0.60 of 1.0 |
| How fast it closes on target | 34% of the remaining gap per hour |
| Craving cleared per drink | 45 points |
At 6 points an hour, a full craving takes roughly 16 hours of sobriety to build. One drink removes 45, so a little over two drinks resets you completely — a hip flask is a day’s supply, not an afternoon’s.
Feature two — a drink steadies your aim
Each drink takes 18 points off panic, on a 0–100 scale.
Panic is one of the engine’s own character stats, and vanilla already turns it into accuracy loss and the moodle. So this is one number nudged, with the game supplying every consequence.
What that buys in play is the part worth arguing about: a bottle becomes a tactical item rather than upkeep. Cornered in a house with your aim falling apart, take a swig and steady up. Everyone else hauling spirits is hauling trade goods. You are carrying equipment.
Feature three — you can hold your drink
35% of the intoxication gain is waived.
Anyone can drink for the panic relief. The alcoholic can do it and still walk straight. Because the engine’s drunk penalties all key off the intoxication stat, handing a fraction of it back means every one of those penalties applies proportionally less — with no separate system to write.
This is what makes the panic relief usable rather than a trap. Without tolerance, drinking to steady your aim would cost you more accuracy to intoxication than it bought you.
Feature four — the Smoker cross
Take both traits and they talk to each other, deliberately asymmetrically:
| Direction | Effect |
|---|---|
| Drinking | Raises nicotine withdrawal — a drink makes you want a cigarette |
| Smoking | Pays off only while drunk, and then it is worth more than usual |
Symmetry would have the two traits paying each other back and netting to nothing. The asymmetry means indulging both is rewarded, and being drunk carries a cost you cannot simply smoke away.
It is cheap to build because nicotine withdrawal is already wired into stress by vanilla — the seam between the two traits is one number the game is already reading.
How it registers
The trait is created at runtime from Lua via addCharacterTraitDefinition, which is the supported route for a mod: it mints a new trait, sets the cost and the display name, and lands it in the engine’s own trait list. Verified working on a dedicated server.
The remaining step is a client: confirming it draws correctly in character creation and survives a save. Registering and rendering are separate things, and only the first is proven.
Planned, in order
- In-client verification — character creation, save and reload.
- Tolerance confirmation. The craving already writes to unhappiness and stress through the engine’s keyed stat API; tolerance uses the same call on intoxication. The code writes it, reads it back and reports which result it actually got.
- Moodle and UI text — the trait needs its own description in all four supported languages.
- Balance pass against a real playthrough, not a test harness.
- The Smoker cross, if it survives review below.
What I would like your input on
- Is −4 right, when Smoker is −3? The Alcoholic is strictly more capable — it has two upsides Smoker does not. Is one extra point enough, or should it be −6?
- Eight sober hours before it bites — a third of a day. Right rhythm, or should it be a full day?
- Unhappiness 55 and stress 0.60 at maximum. Uncomfortable and playable. Should it be allowed to genuinely threaten a run?
- 45 craving cleared per drink — two and a bit drinks for a full reset. Too generous?
- 18 points of panic relief is a real combat effect. Is it the best thing here, or does it quietly make the trait a net win for anyone who fights?
- 35% tolerance — enough to make drinking viable mid-fight, or so much that the drawback disappears?
- Does the Smoker cross belong in version one, or should it ship separately once the base trait is proven?
- Mutually exclusive with Athletic — inherited from Smoker. Does that still make sense for a drinker?
Every number above is a one-line change. The design decisions are the expensive ones.
