atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0

Commit a043b8dc91b7

tarball

atagen <boss@atagen.co>2026-10-14 12:26 UTC

4 files changed+9-5
game: let meditation calm the house as well as the body

Suspicion only fell when Mum left, so a noisy floor had no answer short of her visit. Meditation is once a floor and taught late, which keeps 2 from being a free reset.
Modified file: src/game/balance/household.rs+1 additions
@@ -1,5 +1,6 @@
11 pub const SUSPICION_LIMIT: u8 = 5;
22 pub const PATIENCE: u8 = 3;
3+pub const MEDITATION_CALM: i32 = 2;
34 pub const VIRAL_ERRAND: u32 = 2;
45 /// Visits are (suspicion + 1) in N per turn.
56 pub const MUM_VISIT: u32 = 16;
Modified file: src/game/rest.rs+4 additions−3 deletions
@@ -1,8 +1,8 @@
11 use super::{
22 Notice, Outcome, Run, Story,
33 balance::{
4- DANGER_EQ, FRICTION_HOLD, FRICTION_MEDITATE, HOLD_EQ, LOW_STAMINA, MEDITATION_EQ,
5- REFLECTION, RUPTURE_HOLD,
4+ DANGER_EQ, FRICTION_HOLD, FRICTION_MEDITATE, HOLD_EQ, LOW_STAMINA, MEDITATION_CALM,
5+ MEDITATION_EQ, REFLECTION, RUPTURE_HOLD,
66 },
77 };
88 use crate::problem::Problem;
@@ -85,11 +85,12 @@ impl Run {
8585 self.step_away();
8686 self.reset_eq(self.body.eq - MEDITATION_EQ);
8787 self.shed(FRICTION_MEDITATE);
88+ self.add_suspicion(-MEDITATION_CALM);
8889 self.touch();
8990 Ok(Outcome::json(
9091 StatusCode::OK,
9192 json!({
92- "detail": "In through the nose, out through the mouth. EQ falls a little.",
93+ "detail": "In through the nose, out through the mouth. EQ falls a little, and the house goes quiet.",
9394 }),
9495 ))
9596 }
Modified file: src/game/techniques.rs+1 additions−1 deletions
@@ -110,7 +110,7 @@ impl Utility {
110110 Self::Pump => "Large gains, all temporary. Requires a pump.",
111111 Self::Supplement => "Consumes a supplement.",
112112 Self::Meditate => {
113- "Cools things a little, sheds 2 friction. Taught by the forum. Once per floor."
113+ "Cools things a little, sheds 2 friction and 2 suspicion. Taught by the forum. Once per floor."
114114 }
115115 Self::Energy => "+3 stamina. Consumes an energy drink. Tastes like a battery.",
116116 }
Modified file: src/tests/turns.rs+3 additions−1 deletions
@@ -3,13 +3,15 @@ use super::*;
33 #[tokio::test]
44 async fn meditation_is_free_but_only_once_per_floor() {
55 let held = harness(Floor::Bedroom, SEED, |run| {
6- run.online.meditation_taught = true
6+ run.online.meditation_taught = true;
7+ run.standing.suspicion = 3;
78 });
89 let app = &held.app;
910 let response = send(app, "JELQ", "/runs/cafebabe?technique=meditate", &[], "").await;
1011 assert_eq!(response.status(), StatusCode::OK);
1112 assert_eq!(header(&response, "x-eq"), "Cold");
1213 assert_eq!(held.eq(), 10);
14+ assert_eq!(header(&response, "x-suspicion"), "1/5");
1315 assert_eq!(header(&response, "x-stamina"), "10/10");
1416 let again = send(app, "JELQ", "/runs/cafebabe?technique=meditate", &[], "").await;
1517 assert_eq!(again.status(), StatusCode::CONFLICT);