atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0

Commit 61fe020d61e0

tarball

atagen <boss@atagen.co>2026-10-14 09:22 UTC

3 files changed+26-4
game: let lotion shed a point of friction each stroke

Lotion only soothed the burn condition, so its friction count climbed like any lube's and players reasonably expected the soothing lube to ease it.
Modified file: src/game/balance/friction.rs+1 additions
@@ -8,6 +8,7 @@ pub const FRICTION_GRIP: i32 = 1;
88 pub const FRICTION_HOLD: i32 = 2;
99 pub const FRICTION_MEDITATE: i32 = 2;
1010 pub const FRICTION_ICE: i32 = 3;
11+pub const FRICTION_LOTION: i32 = 1;
1112 pub const FRICTION_FLOOR: i32 = 1;
1213 pub const FRICTION_BURN_AT: i32 = 6;
1314 pub const FRICTION_BURN: u32 = 10;
Modified file: src/game/progress.rs+7 additions−4 deletions
@@ -3,9 +3,9 @@ use super::{
33 balance::{
44 BRANCH_TURN, CAT_TAKES_TOWEL, CHANGING_ROOM_CHILL, EQ_WOBBLE, EXTENDER_GAIN,
55 FORESKIN_GLIDE, FRICTION_BURN, FRICTION_BURN_AT, FRICTION_COLD, FRICTION_DRY,
6- FRICTION_GRIP, FRICTION_MAX, FRICTION_SPIT, GIRTH_THICK, HOT_EQ, OBSERVED, PRIAPISM_EQ,
7- PRIAPISM_TURNS, PULLED_MUSCLE, PULLED_MUSCLE_INTENSITY, RING_PRIAPISM, RING_TIGHT_PRIAPISM,
8- STROKE_EQ, STROKE_EQ_COST, SUSPICION_LIMIT, VIGOUR,
6+ FRICTION_GRIP, FRICTION_LOTION, FRICTION_MAX, FRICTION_SPIT, GIRTH_THICK, HOT_EQ, OBSERVED,
7+ PRIAPISM_EQ, PRIAPISM_TURNS, PULLED_MUSCLE, PULLED_MUSCLE_INTENSITY, RING_PRIAPISM,
8+ RING_TIGHT_PRIAPISM, STROKE_EQ, STROKE_EQ_COST, SUSPICION_LIMIT, VIGOUR,
99 },
1010 };
1111 use crate::problem::Problem;
@@ -35,8 +35,11 @@ impl Run {
3535 if cold {
3636 friction += FRICTION_COLD;
3737 }
38+ if lube == Some(Lube::Lotion) {
39+ friction -= FRICTION_LOTION;
40+ }
3841 self.body.jelq_grip = Some(self.body.grip);
39- self.body.friction = (self.body.friction + friction).min(FRICTION_MAX);
42+ self.body.friction = (self.body.friction + friction).clamp(0, FRICTION_MAX);
4043 if lube == Some(Lube::Lotion) {
4144 if std::mem::take(&mut self.body.conditions.friction_burn) {
4245 self.notices.push(Notice::BurnSoothed);
Modified file: src/tests/body.rs+18 additions
@@ -442,6 +442,24 @@ async fn stretching_reports_the_foreskin_it_grew() {
442442 }
443443
444444 #[tokio::test]
445+async fn lotion_sheds_friction_at_a_gentle_pace() {
446+ let app = seeded_with(Floor::Bedroom, |run| {
447+ run.body.eq = 55;
448+ run.body.friction = 4;
449+ run.items.lubes.lotion = 1;
450+ });
451+ let stroke = send(
452+ &app,
453+ "JELQ",
454+ "/runs/cafebabe?technique=wet&intensity=5",
455+ &[("content-type", "application/lotion")],
456+ "",
457+ )
458+ .await;
459+ assert_eq!(header(&stroke, "x-friction"), "3/10");
460+}
461+
462+#[tokio::test]
445463 async fn lotion_soothes_a_friction_burn() {
446464 let app = seeded_with(Floor::ChangingRoom, |run| {
447465 run.body.eq = 60;