atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
fa21a42ca0856e336f8217a763a57c0af40afc6d
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git

Blame: src/game/items.rs

782069860236atagen2026-10-10 12:44 UTC1
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
782069860236atagen2026-10-10 12:44 UTC2
pub enum Item {
782069860236atagen2026-10-10 12:44 UTC3
    WarmTowel,
782069860236atagen2026-10-10 12:44 UTC4
    IcePack,
782069860236atagen2026-10-10 12:44 UTC5
    Ruler,
782069860236atagen2026-10-10 12:44 UTC6
    DoorLock,
782069860236atagen2026-10-10 12:44 UTC7
    DndSign,
782069860236atagen2026-10-10 12:44 UTC8
    Blinds,
782069860236atagen2026-10-10 12:44 UTC9
    Pump,
782069860236atagen2026-10-10 12:44 UTC10
    PumpPro,
782069860236atagen2026-10-10 12:44 UTC11
    Extender,
782069860236atagen2026-10-10 12:44 UTC12
    Ring,
782069860236atagen2026-10-10 12:44 UTC13
    Supplement,
782069860236atagen2026-10-10 12:44 UTC14
    Cage,
782069860236atagen2026-10-10 12:44 UTC15
    CageKey,
782069860236atagen2026-10-10 12:44 UTC16
    Spreadsheet,
782069860236atagen2026-10-10 12:44 UTC17
    TeapotSpout,
0a0bfee8329eatagen2026-10-11 05:11 UTC18
    BabyOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC19
    CoconutOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC20
    Lotion,
0a0bfee8329eatagen2026-10-11 05:11 UTC21
    Vaseline,
0a0bfee8329eatagen2026-10-11 05:11 UTC22
    EnergyDrink,
782069860236atagen2026-10-10 12:44 UTC23
}
782069860236atagen2026-10-10 12:44 UTC24
545ad65826ddatagen2026-10-14 11:19 UTC25
pub const SHOP: [Item; 14] = [
782069860236atagen2026-10-10 12:44 UTC26
    Item::Pump,
782069860236atagen2026-10-10 12:44 UTC27
    Item::PumpPro,
782069860236atagen2026-10-10 12:44 UTC28
    Item::Extender,
782069860236atagen2026-10-10 12:44 UTC29
    Item::Ring,
782069860236atagen2026-10-10 12:44 UTC30
    Item::Supplement,
782069860236atagen2026-10-10 12:44 UTC31
    Item::DndSign,
782069860236atagen2026-10-10 12:44 UTC32
    Item::Blinds,
782069860236atagen2026-10-10 12:44 UTC33
    Item::Ruler,
782069860236atagen2026-10-10 12:44 UTC34
    Item::IcePack,
782069860236atagen2026-10-10 12:44 UTC35
    Item::CageKey,
0a0bfee8329eatagen2026-10-11 05:11 UTC36
    Item::BabyOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC37
    Item::CoconutOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC38
    Item::Lotion,
0a0bfee8329eatagen2026-10-11 05:11 UTC39
    Item::Vaseline,
782069860236atagen2026-10-10 12:44 UTC40
];
782069860236atagen2026-10-10 12:44 UTC41
782069860236atagen2026-10-10 12:44 UTC42
impl Item {
8b8e83329a1datagen2026-10-12 12:01 UTC43
    pub(super) const ALL: [Self; 20] = [
782069860236atagen2026-10-10 12:44 UTC44
        Self::WarmTowel,
782069860236atagen2026-10-10 12:44 UTC45
        Self::IcePack,
782069860236atagen2026-10-10 12:44 UTC46
        Self::Ruler,
782069860236atagen2026-10-10 12:44 UTC47
        Self::DoorLock,
782069860236atagen2026-10-10 12:44 UTC48
        Self::DndSign,
782069860236atagen2026-10-10 12:44 UTC49
        Self::Blinds,
782069860236atagen2026-10-10 12:44 UTC50
        Self::Pump,
782069860236atagen2026-10-10 12:44 UTC51
        Self::PumpPro,
782069860236atagen2026-10-10 12:44 UTC52
        Self::Extender,
782069860236atagen2026-10-10 12:44 UTC53
        Self::Ring,
782069860236atagen2026-10-10 12:44 UTC54
        Self::Supplement,
782069860236atagen2026-10-10 12:44 UTC55
        Self::Cage,
782069860236atagen2026-10-10 12:44 UTC56
        Self::CageKey,
782069860236atagen2026-10-10 12:44 UTC57
        Self::Spreadsheet,
782069860236atagen2026-10-10 12:44 UTC58
        Self::TeapotSpout,
0a0bfee8329eatagen2026-10-11 05:11 UTC59
        Self::BabyOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC60
        Self::CoconutOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC61
        Self::Lotion,
0a0bfee8329eatagen2026-10-11 05:11 UTC62
        Self::Vaseline,
0a0bfee8329eatagen2026-10-11 05:11 UTC63
        Self::EnergyDrink,
782069860236atagen2026-10-10 12:44 UTC64
    ];
782069860236atagen2026-10-10 12:44 UTC65
782069860236atagen2026-10-10 12:44 UTC66
    pub fn slug(self) -> &'static str {
782069860236atagen2026-10-10 12:44 UTC67
        match self {
782069860236atagen2026-10-10 12:44 UTC68
            Self::WarmTowel => "warm-towel",
782069860236atagen2026-10-10 12:44 UTC69
            Self::IcePack => "ice-pack",
782069860236atagen2026-10-10 12:44 UTC70
            Self::Ruler => "ruler",
782069860236atagen2026-10-10 12:44 UTC71
            Self::DoorLock => "door-lock",
782069860236atagen2026-10-10 12:44 UTC72
            Self::DndSign => "do-not-disturb-sign",
782069860236atagen2026-10-10 12:44 UTC73
            Self::Blinds => "window-blinds",
782069860236atagen2026-10-10 12:44 UTC74
            Self::Pump => "pump",
782069860236atagen2026-10-10 12:44 UTC75
            Self::PumpPro => "pump-pro",
782069860236atagen2026-10-10 12:44 UTC76
            Self::Extender => "extender",
782069860236atagen2026-10-10 12:44 UTC77
            Self::Ring => "cock-ring",
782069860236atagen2026-10-10 12:44 UTC78
            Self::Supplement => "supplement",
782069860236atagen2026-10-10 12:44 UTC79
            Self::Cage => "chastity-cage",
782069860236atagen2026-10-10 12:44 UTC80
            Self::CageKey => "cage-key",
782069860236atagen2026-10-10 12:44 UTC81
            Self::Spreadsheet => "spreadsheet",
782069860236atagen2026-10-10 12:44 UTC82
            Self::TeapotSpout => "teapot-spout",
0a0bfee8329eatagen2026-10-11 05:11 UTC83
            Self::BabyOil => "baby-oil",
0a0bfee8329eatagen2026-10-11 05:11 UTC84
            Self::CoconutOil => "coconut-oil",
0a0bfee8329eatagen2026-10-11 05:11 UTC85
            Self::Lotion => "lotion",
0a0bfee8329eatagen2026-10-11 05:11 UTC86
            Self::Vaseline => "vaseline",
0a0bfee8329eatagen2026-10-11 05:11 UTC87
            Self::EnergyDrink => "energy-drink",
782069860236atagen2026-10-10 12:44 UTC88
        }
782069860236atagen2026-10-10 12:44 UTC89
    }
782069860236atagen2026-10-10 12:44 UTC90
782069860236atagen2026-10-10 12:44 UTC91
    pub fn parse(slug: &str) -> Option<Self> {
782069860236atagen2026-10-10 12:44 UTC92
        Self::ALL.into_iter().find(|item| item.slug() == slug)
782069860236atagen2026-10-10 12:44 UTC93
    }
782069860236atagen2026-10-10 12:44 UTC94
782069860236atagen2026-10-10 12:44 UTC95
    pub fn description(self) -> &'static str {
782069860236atagen2026-10-10 12:44 UTC96
        match self {
782069860236atagen2026-10-10 12:44 UTC97
            Self::WarmTowel => {
782069860236atagen2026-10-10 12:44 UTC98
                "Reusable. Satisfies the warm-up precondition. Use technique=warmup."
782069860236atagen2026-10-10 12:44 UTC99
            }
e028a4184d00atagen2026-10-14 10:49 UTC100
            Self::IcePack => "Cools things sharply. Use technique=ice.",
782069860236atagen2026-10-10 12:44 UTC101
            Self::Ruler => "Measures honestly. The length resource now carries a Content-Length.",
7d3fb63208bfatagen2026-10-11 04:38 UTC102
            Self::DoorLock => "Keeps your brother out once.",
9683736a2c5eatagen2026-10-10 13:15 UTC103
            Self::DndSign => "Works on housekeeping. Mum does not read signs.",
782069860236atagen2026-10-10 12:44 UTC104
            Self::Blinds => "The neighbour has a good camera. The blinds are better.",
782069860236atagen2026-10-10 12:44 UTC105
            Self::Pump => "A pump.",
782069860236atagen2026-10-10 12:44 UTC106
            Self::PumpPro => "Use technique=pump. Gains are temporary.",
782069860236atagen2026-10-10 12:44 UTC107
            Self::Extender => "Passive gains each turn. Takes up room. Can be removed with DELETE.",
782069860236atagen2026-10-10 12:44 UTC108
            Self::Ring => {
782069860236atagen2026-10-10 12:44 UTC109
                "Girth gains doubled. Rupture risk raised. Responses are compressed if you accept gzip. Can be removed with DELETE."
782069860236atagen2026-10-10 12:44 UTC110
            }
782069860236atagen2026-10-10 12:44 UTC111
            Self::Supplement => "Use technique=supplement.",
782069860236atagen2026-10-10 12:44 UTC112
            Self::Cage => "Locked.",
782069860236atagen2026-10-10 12:44 UTC113
            Self::CageKey => "Pump-Bro does not ask.",
782069860236atagen2026-10-10 12:44 UTC114
            Self::Spreadsheet => "Charts your progress. Every line is flat.",
782069860236atagen2026-10-10 12:44 UTC115
            Self::TeapotSpout => "Does nothing. Cannot be dropped.",
0a0bfee8329eatagen2026-10-11 05:11 UTC116
            Self::BabyOil => "Smooth. +1. One unit per jelq.",
0a0bfee8329eatagen2026-10-11 05:11 UTC117
            Self::CoconutOil => "+3. Solid until it matters. Suspicious at Nan's.",
2d9074e0b4deatagen2026-10-13 12:35 UTC118
            Self::Lotion => {
e2727527c151atagen2026-10-13 12:38 UTC119
                "Handy. +0, and it soaks in fast, so each jelq costs an extra stamina. Soothes a friction burn."
2d9074e0b4deatagen2026-10-13 12:35 UTC120
            }
0a0bfee8329eatagen2026-10-11 05:11 UTC121
            Self::Vaseline => "+2. Raises suspicion everywhere.",
0a0bfee8329eatagen2026-10-11 05:11 UTC122
            Self::EnergyDrink => "technique=energy. +3 stamina. Tastes like a battery.",
782069860236atagen2026-10-10 12:44 UTC123
        }
782069860236atagen2026-10-10 12:44 UTC124
    }
782069860236atagen2026-10-10 12:44 UTC125
782069860236atagen2026-10-10 12:44 UTC126
    pub fn pitch(self) -> &'static str {
782069860236atagen2026-10-10 12:44 UTC127
        match self {
782069860236atagen2026-10-10 12:44 UTC128
            Self::PumpPro => "A pump, but professional.",
782069860236atagen2026-10-10 12:44 UTC129
            Self::Extender => "Passive gains every turn. Takes up room.",
782069860236atagen2026-10-10 12:44 UTC130
            Self::Ring => "Doubles girth gains. Pump-Bro does not discuss the risks.",
782069860236atagen2026-10-10 12:44 UTC131
            Self::Supplement => "Clinically formulated. Ships from overseas.",
782069860236atagen2026-10-10 12:44 UTC132
            Self::DndSign => "Housekeeping respects it.",
782069860236atagen2026-10-10 12:44 UTC133
            Self::Blinds => "The neighbour has a good camera.",
782069860236atagen2026-10-10 12:44 UTC134
            Self::Ruler => "Pump-Bro does not recommend it.",
782069860236atagen2026-10-10 12:44 UTC135
            Self::IcePack => "Cold.",
782069860236atagen2026-10-10 12:44 UTC136
            _ => self.description(),
782069860236atagen2026-10-10 12:44 UTC137
        }
782069860236atagen2026-10-10 12:44 UTC138
    }
782069860236atagen2026-10-10 12:44 UTC139
72cdd1267600atagen2026-10-14 11:14 UTC140
    pub fn receipt(self) -> &'static str {
72cdd1267600atagen2026-10-14 11:14 UTC141
        match self {
72cdd1267600atagen2026-10-14 11:14 UTC142
            Self::PumpPro => "The box says professional. The pump inside is the same pump.",
72cdd1267600atagen2026-10-14 11:14 UTC143
            Self::Extender => "It is fitted. It will be noticed when you sit down.",
72cdd1267600atagen2026-10-14 11:14 UTC144
            Self::Ring => "It is snug. Pump-Bro still does not discuss the risks.",
72cdd1267600atagen2026-10-14 11:14 UTC145
            Self::DndSign => "The sign is on the handle. Housekeeping can read.",
72cdd1267600atagen2026-10-14 11:14 UTC146
            Self::Blinds => "The blinds are down. Across the street, a lens is lowered.",
72cdd1267600atagen2026-10-14 11:14 UTC147
            Self::Ruler => "Pump-Bro looks away while you use it.",
72cdd1267600atagen2026-10-14 11:14 UTC148
            Self::IcePack => {
72cdd1267600atagen2026-10-14 11:14 UTC149
                "It came out of the chest freezer behind the counter. It is very cold."
72cdd1267600atagen2026-10-14 11:14 UTC150
            }
72cdd1267600atagen2026-10-14 11:14 UTC151
            Self::CageKey => "The cage is open. Pump-Bro does not ask, and neither should you.",
72cdd1267600atagen2026-10-14 11:14 UTC152
            Self::BabyOil => "Pump-Bro buys it in bulk. He does not have a baby.",
72cdd1267600atagen2026-10-14 11:14 UTC153
            Self::CoconutOil => "It is solid. It will not stay that way.",
72cdd1267600atagen2026-10-14 11:14 UTC154
            Self::Lotion => "Unscented, allegedly.",
72cdd1267600atagen2026-10-14 11:14 UTC155
            Self::Vaseline => "Everyone at the counter saw.",
72cdd1267600atagen2026-10-14 11:14 UTC156
            _ => "",
72cdd1267600atagen2026-10-14 11:14 UTC157
        }
72cdd1267600atagen2026-10-14 11:14 UTC158
    }
72cdd1267600atagen2026-10-14 11:14 UTC159
782069860236atagen2026-10-10 12:44 UTC160
    pub fn price(self) -> Option<u32> {
782069860236atagen2026-10-10 12:44 UTC161
        match self {
782069860236atagen2026-10-10 12:44 UTC162
            Self::Pump => Some(10),
782069860236atagen2026-10-10 12:44 UTC163
            Self::PumpPro | Self::Extender | Self::CageKey => Some(15),
545ad65826ddatagen2026-10-14 11:19 UTC164
            Self::Ring | Self::Ruler => Some(8),
545ad65826ddatagen2026-10-14 11:19 UTC165
            Self::IcePack => Some(7),
545ad65826ddatagen2026-10-14 11:19 UTC166
            Self::CoconutOil => Some(6),
545ad65826ddatagen2026-10-14 11:19 UTC167
            Self::Supplement | Self::Blinds => Some(5),
545ad65826ddatagen2026-10-14 11:19 UTC168
            Self::BabyOil | Self::Vaseline => Some(4),
545ad65826ddatagen2026-10-14 11:19 UTC169
            Self::DndSign | Self::Lotion => Some(3),
0a0bfee8329eatagen2026-10-11 05:11 UTC170
            Self::WarmTowel
545ad65826ddatagen2026-10-14 11:19 UTC171
            | Self::DoorLock
0a0bfee8329eatagen2026-10-11 05:11 UTC172
            | Self::Cage
0a0bfee8329eatagen2026-10-11 05:11 UTC173
            | Self::Spreadsheet
0a0bfee8329eatagen2026-10-11 05:11 UTC174
            | Self::TeapotSpout
0a0bfee8329eatagen2026-10-11 05:11 UTC175
            | Self::EnergyDrink => None,
782069860236atagen2026-10-10 12:44 UTC176
        }
782069860236atagen2026-10-10 12:44 UTC177
    }
782069860236atagen2026-10-10 12:44 UTC178
}