atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
d3c4718d061e97b506a18e6347494ef6e93b2965
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
0a0bfee8329eatagen2026-10-11 05:11 UTC25
pub const SHOP: [Item; 15] = [
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::DoorLock,
782069860236atagen2026-10-10 12:44 UTC32
    Item::DndSign,
782069860236atagen2026-10-10 12:44 UTC33
    Item::Blinds,
782069860236atagen2026-10-10 12:44 UTC34
    Item::Ruler,
782069860236atagen2026-10-10 12:44 UTC35
    Item::IcePack,
782069860236atagen2026-10-10 12:44 UTC36
    Item::CageKey,
0a0bfee8329eatagen2026-10-11 05:11 UTC37
    Item::BabyOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC38
    Item::CoconutOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC39
    Item::Lotion,
0a0bfee8329eatagen2026-10-11 05:11 UTC40
    Item::Vaseline,
782069860236atagen2026-10-10 12:44 UTC41
];
782069860236atagen2026-10-10 12:44 UTC42
782069860236atagen2026-10-10 12:44 UTC43
impl Item {
8b8e83329a1datagen2026-10-12 12:01 UTC44
    pub(super) const ALL: [Self; 20] = [
782069860236atagen2026-10-10 12:44 UTC45
        Self::WarmTowel,
782069860236atagen2026-10-10 12:44 UTC46
        Self::IcePack,
782069860236atagen2026-10-10 12:44 UTC47
        Self::Ruler,
782069860236atagen2026-10-10 12:44 UTC48
        Self::DoorLock,
782069860236atagen2026-10-10 12:44 UTC49
        Self::DndSign,
782069860236atagen2026-10-10 12:44 UTC50
        Self::Blinds,
782069860236atagen2026-10-10 12:44 UTC51
        Self::Pump,
782069860236atagen2026-10-10 12:44 UTC52
        Self::PumpPro,
782069860236atagen2026-10-10 12:44 UTC53
        Self::Extender,
782069860236atagen2026-10-10 12:44 UTC54
        Self::Ring,
782069860236atagen2026-10-10 12:44 UTC55
        Self::Supplement,
782069860236atagen2026-10-10 12:44 UTC56
        Self::Cage,
782069860236atagen2026-10-10 12:44 UTC57
        Self::CageKey,
782069860236atagen2026-10-10 12:44 UTC58
        Self::Spreadsheet,
782069860236atagen2026-10-10 12:44 UTC59
        Self::TeapotSpout,
0a0bfee8329eatagen2026-10-11 05:11 UTC60
        Self::BabyOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC61
        Self::CoconutOil,
0a0bfee8329eatagen2026-10-11 05:11 UTC62
        Self::Lotion,
0a0bfee8329eatagen2026-10-11 05:11 UTC63
        Self::Vaseline,
0a0bfee8329eatagen2026-10-11 05:11 UTC64
        Self::EnergyDrink,
782069860236atagen2026-10-10 12:44 UTC65
    ];
782069860236atagen2026-10-10 12:44 UTC66
782069860236atagen2026-10-10 12:44 UTC67
    pub fn slug(self) -> &'static str {
782069860236atagen2026-10-10 12:44 UTC68
        match self {
782069860236atagen2026-10-10 12:44 UTC69
            Self::WarmTowel => "warm-towel",
782069860236atagen2026-10-10 12:44 UTC70
            Self::IcePack => "ice-pack",
782069860236atagen2026-10-10 12:44 UTC71
            Self::Ruler => "ruler",
782069860236atagen2026-10-10 12:44 UTC72
            Self::DoorLock => "door-lock",
782069860236atagen2026-10-10 12:44 UTC73
            Self::DndSign => "do-not-disturb-sign",
782069860236atagen2026-10-10 12:44 UTC74
            Self::Blinds => "window-blinds",
782069860236atagen2026-10-10 12:44 UTC75
            Self::Pump => "pump",
782069860236atagen2026-10-10 12:44 UTC76
            Self::PumpPro => "pump-pro",
782069860236atagen2026-10-10 12:44 UTC77
            Self::Extender => "extender",
782069860236atagen2026-10-10 12:44 UTC78
            Self::Ring => "cock-ring",
782069860236atagen2026-10-10 12:44 UTC79
            Self::Supplement => "supplement",
782069860236atagen2026-10-10 12:44 UTC80
            Self::Cage => "chastity-cage",
782069860236atagen2026-10-10 12:44 UTC81
            Self::CageKey => "cage-key",
782069860236atagen2026-10-10 12:44 UTC82
            Self::Spreadsheet => "spreadsheet",
782069860236atagen2026-10-10 12:44 UTC83
            Self::TeapotSpout => "teapot-spout",
0a0bfee8329eatagen2026-10-11 05:11 UTC84
            Self::BabyOil => "baby-oil",
0a0bfee8329eatagen2026-10-11 05:11 UTC85
            Self::CoconutOil => "coconut-oil",
0a0bfee8329eatagen2026-10-11 05:11 UTC86
            Self::Lotion => "lotion",
0a0bfee8329eatagen2026-10-11 05:11 UTC87
            Self::Vaseline => "vaseline",
0a0bfee8329eatagen2026-10-11 05:11 UTC88
            Self::EnergyDrink => "energy-drink",
782069860236atagen2026-10-10 12:44 UTC89
        }
782069860236atagen2026-10-10 12:44 UTC90
    }
782069860236atagen2026-10-10 12:44 UTC91
782069860236atagen2026-10-10 12:44 UTC92
    pub fn parse(slug: &str) -> Option<Self> {
782069860236atagen2026-10-10 12:44 UTC93
        Self::ALL.into_iter().find(|item| item.slug() == slug)
782069860236atagen2026-10-10 12:44 UTC94
    }
782069860236atagen2026-10-10 12:44 UTC95
782069860236atagen2026-10-10 12:44 UTC96
    pub fn description(self) -> &'static str {
782069860236atagen2026-10-10 12:44 UTC97
        match self {
782069860236atagen2026-10-10 12:44 UTC98
            Self::WarmTowel => {
782069860236atagen2026-10-10 12:44 UTC99
                "Reusable. Satisfies the warm-up precondition. Use technique=warmup."
782069860236atagen2026-10-10 12:44 UTC100
            }
782069860236atagen2026-10-10 12:44 UTC101
            Self::IcePack => "Lowers EQ by 40. Use technique=ice.",
782069860236atagen2026-10-10 12:44 UTC102
            Self::Ruler => "Measures honestly. The length resource now carries a Content-Length.",
7d3fb63208bfatagen2026-10-11 04:38 UTC103
            Self::DoorLock => "Keeps your brother out once.",
9683736a2c5eatagen2026-10-10 13:15 UTC104
            Self::DndSign => "Works on housekeeping. Mum does not read signs.",
782069860236atagen2026-10-10 12:44 UTC105
            Self::Blinds => "The neighbour has a good camera. The blinds are better.",
782069860236atagen2026-10-10 12:44 UTC106
            Self::Pump => "A pump.",
782069860236atagen2026-10-10 12:44 UTC107
            Self::PumpPro => "Use technique=pump. Gains are temporary.",
782069860236atagen2026-10-10 12:44 UTC108
            Self::Extender => "Passive gains each turn. Takes up room. Can be removed with DELETE.",
782069860236atagen2026-10-10 12:44 UTC109
            Self::Ring => {
782069860236atagen2026-10-10 12:44 UTC110
                "Girth gains doubled. Rupture risk raised. Responses are compressed if you accept gzip. Can be removed with DELETE."
782069860236atagen2026-10-10 12:44 UTC111
            }
782069860236atagen2026-10-10 12:44 UTC112
            Self::Supplement => "Use technique=supplement.",
782069860236atagen2026-10-10 12:44 UTC113
            Self::Cage => "Locked.",
782069860236atagen2026-10-10 12:44 UTC114
            Self::CageKey => "Pump-Bro does not ask.",
782069860236atagen2026-10-10 12:44 UTC115
            Self::Spreadsheet => "Charts your progress. Every line is flat.",
782069860236atagen2026-10-10 12:44 UTC116
            Self::TeapotSpout => "Does nothing. Cannot be dropped.",
0a0bfee8329eatagen2026-10-11 05:11 UTC117
            Self::BabyOil => "Smooth. +1. One unit per jelq.",
0a0bfee8329eatagen2026-10-11 05:11 UTC118
            Self::CoconutOil => "+3. Solid until it matters. Suspicious at Nan's.",
2d9074e0b4deatagen2026-10-13 12:35 UTC119
            Self::Lotion => {
e2727527c151atagen2026-10-13 12:38 UTC120
                "Handy. +0, and it soaks in fast, so each jelq costs an extra stamina. Soothes a friction burn."
2d9074e0b4deatagen2026-10-13 12:35 UTC121
            }
0a0bfee8329eatagen2026-10-11 05:11 UTC122
            Self::Vaseline => "+2. Raises suspicion everywhere.",
0a0bfee8329eatagen2026-10-11 05:11 UTC123
            Self::EnergyDrink => "technique=energy. +3 stamina. Tastes like a battery.",
782069860236atagen2026-10-10 12:44 UTC124
        }
782069860236atagen2026-10-10 12:44 UTC125
    }
782069860236atagen2026-10-10 12:44 UTC126
782069860236atagen2026-10-10 12:44 UTC127
    pub fn pitch(self) -> &'static str {
782069860236atagen2026-10-10 12:44 UTC128
        match self {
782069860236atagen2026-10-10 12:44 UTC129
            Self::PumpPro => "A pump, but professional.",
782069860236atagen2026-10-10 12:44 UTC130
            Self::Extender => "Passive gains every turn. Takes up room.",
782069860236atagen2026-10-10 12:44 UTC131
            Self::Ring => "Doubles girth gains. Pump-Bro does not discuss the risks.",
782069860236atagen2026-10-10 12:44 UTC132
            Self::Supplement => "Clinically formulated. Ships from overseas.",
782069860236atagen2026-10-10 12:44 UTC133
            Self::DndSign => "Housekeeping respects it.",
782069860236atagen2026-10-10 12:44 UTC134
            Self::Blinds => "The neighbour has a good camera.",
782069860236atagen2026-10-10 12:44 UTC135
            Self::Ruler => "Pump-Bro does not recommend it.",
782069860236atagen2026-10-10 12:44 UTC136
            Self::IcePack => "Cold.",
782069860236atagen2026-10-10 12:44 UTC137
            _ => self.description(),
782069860236atagen2026-10-10 12:44 UTC138
        }
782069860236atagen2026-10-10 12:44 UTC139
    }
782069860236atagen2026-10-10 12:44 UTC140
782069860236atagen2026-10-10 12:44 UTC141
    pub fn price(self) -> Option<u32> {
782069860236atagen2026-10-10 12:44 UTC142
        match self {
782069860236atagen2026-10-10 12:44 UTC143
            Self::Pump => Some(10),
782069860236atagen2026-10-10 12:44 UTC144
            Self::PumpPro | Self::Extender | Self::CageKey => Some(15),
782069860236atagen2026-10-10 12:44 UTC145
            Self::Ring => Some(8),
782069860236atagen2026-10-10 12:44 UTC146
            Self::Supplement | Self::DoorLock | Self::DndSign | Self::Blinds | Self::Ruler => {
782069860236atagen2026-10-10 12:44 UTC147
                Some(5)
782069860236atagen2026-10-10 12:44 UTC148
            }
0a0bfee8329eatagen2026-10-11 05:11 UTC149
            Self::BabyOil | Self::CoconutOil | Self::Lotion | Self::Vaseline => Some(4),
782069860236atagen2026-10-10 12:44 UTC150
            Self::IcePack => Some(3),
0a0bfee8329eatagen2026-10-11 05:11 UTC151
            Self::WarmTowel
0a0bfee8329eatagen2026-10-11 05:11 UTC152
            | Self::Cage
0a0bfee8329eatagen2026-10-11 05:11 UTC153
            | Self::Spreadsheet
0a0bfee8329eatagen2026-10-11 05:11 UTC154
            | Self::TeapotSpout
0a0bfee8329eatagen2026-10-11 05:11 UTC155
            | Self::EnergyDrink => None,
782069860236atagen2026-10-10 12:44 UTC156
        }
782069860236atagen2026-10-10 12:44 UTC157
    }
782069860236atagen2026-10-10 12:44 UTC158
}