an http based roguelike rpg about jelqing
Commit e2727527c151
tarball3 files changed+27-13
@@ -117,7 +117,7 @@ impl Item {
117117
Self::BabyOil => "Smooth. +1. One unit per jelq.",118118
Self::CoconutOil => "+3. Solid until it matters. Suspicious at Nan's.",119119
Self::Lotion => {120
- "Handy. +0, and it chafes, so each jelq costs an extra stamina. Soothes a friction burn."120
+ "Handy. +0, and it soaks in fast, so each jelq costs an extra stamina. Soothes a friction burn."121121
}122122
Self::Vaseline => "+2. Raises suspicion everywhere.",123123
Self::EnergyDrink => "technique=energy. +3 stamina. Tastes like a battery.",@@ -76,19 +76,20 @@ impl Run {
7676
self.touch();7777
self.step_away();7878
self.items.stores.ice_packs -= 1;79
- if self.body.conditions.priapism_turns > 0 {80
- return Ok(Outcome::json(81
- StatusCode::OK,82
- json!({ "detail": "The ice has no effect. The condition persists. The ice pack is gone." }),83
- ));84
- }85
- self.body.eq = (self.body.eq - ICE_EQ).max(0);86
- let detail = if self.body.conditions.friction_burn {87
- self.body.conditions.friction_burn = false;88
- "The friction burn is treated. EQ has been reduced. The ice pack is gone."89
- } else {90
- "EQ has been reduced. The ice pack is gone."79
+ let treated = std::mem::take(&mut self.body.conditions.friction_burn);80
+ let detail = match (self.body.conditions.priapism_turns > 0, treated) {81
+ (true, true) => {82
+ "The friction burn is treated. EQ has not moved. The condition persists. The ice pack is gone."83
+ }84
+ (true, false) => "The ice has no effect. The condition persists. The ice pack is gone.",85
+ (false, true) => {86
+ "The friction burn is treated. EQ has been reduced. The ice pack is gone."87
+ }88
+ (false, false) => "EQ has been reduced. The ice pack is gone.",9189
};90
+ if self.body.conditions.priapism_turns == 0 {91
+ self.body.eq = (self.body.eq - ICE_EQ).max(0);92
+ }9293
Ok(Outcome::json(StatusCode::OK, json!({ "detail": detail })))9394
}9495
@@ -342,3 +342,16 @@ async fn friction_at_the_limit_tears_the_foreskin() {
342342
assert_eq!(header(&gone, "x-foreskin"), "gone");343343
assert_eq!(json(gone).await["foreskin"], -0.05);344344
}345
+346
+#[tokio::test]347
+async fn ice_treats_a_burn_even_through_priapism() {348
+ let app = seeded_with(Floor::ChangingRoom, |run| {349
+ run.body.eq = 80;350
+ run.body.conditions.priapism_turns = 3;351
+ run.body.conditions.friction_burn = true;352
+ run.items.stores.ice_packs = 1;353
+ });354
+ let iced = send(&app, "JELQ", "/runs/cafebabe?technique=ice", &[], "").await;355
+ assert_eq!(header(&iced, "x-eq"), "80");356
+ assert!(warnings(&iced).iter().all(|w| !w.contains("friction burn")));357
+}