atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
624fe9c09c8eefdb9679b36259b76f6439318edc
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git
src/game/items.rsRust178 lines6.2 KB
1
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
2
pub enum Item {
3
    WarmTowel,
4
    IcePack,
5
    Ruler,
6
    DoorLock,
7
    DndSign,
8
    Blinds,
9
    Pump,
10
    PumpPro,
11
    Extender,
12
    Ring,
13
    Supplement,
14
    Cage,
15
    CageKey,
16
    Spreadsheet,
17
    TeapotSpout,
18
    BabyOil,
19
    CoconutOil,
20
    Lotion,
21
    Vaseline,
22
    EnergyDrink,
23
}
24
25
pub const SHOP: [Item; 14] = [
26
    Item::Pump,
27
    Item::PumpPro,
28
    Item::Extender,
29
    Item::Ring,
30
    Item::Supplement,
31
    Item::DndSign,
32
    Item::Blinds,
33
    Item::Ruler,
34
    Item::IcePack,
35
    Item::CageKey,
36
    Item::BabyOil,
37
    Item::CoconutOil,
38
    Item::Lotion,
39
    Item::Vaseline,
40
];
41
42
impl Item {
43
    pub(super) const ALL: [Self; 20] = [
44
        Self::WarmTowel,
45
        Self::IcePack,
46
        Self::Ruler,
47
        Self::DoorLock,
48
        Self::DndSign,
49
        Self::Blinds,
50
        Self::Pump,
51
        Self::PumpPro,
52
        Self::Extender,
53
        Self::Ring,
54
        Self::Supplement,
55
        Self::Cage,
56
        Self::CageKey,
57
        Self::Spreadsheet,
58
        Self::TeapotSpout,
59
        Self::BabyOil,
60
        Self::CoconutOil,
61
        Self::Lotion,
62
        Self::Vaseline,
63
        Self::EnergyDrink,
64
    ];
65
66
    pub fn slug(self) -> &'static str {
67
        match self {
68
            Self::WarmTowel => "warm-towel",
69
            Self::IcePack => "ice-pack",
70
            Self::Ruler => "ruler",
71
            Self::DoorLock => "door-lock",
72
            Self::DndSign => "do-not-disturb-sign",
73
            Self::Blinds => "window-blinds",
74
            Self::Pump => "pump",
75
            Self::PumpPro => "pump-pro",
76
            Self::Extender => "extender",
77
            Self::Ring => "cock-ring",
78
            Self::Supplement => "supplement",
79
            Self::Cage => "chastity-cage",
80
            Self::CageKey => "cage-key",
81
            Self::Spreadsheet => "spreadsheet",
82
            Self::TeapotSpout => "teapot-spout",
83
            Self::BabyOil => "baby-oil",
84
            Self::CoconutOil => "coconut-oil",
85
            Self::Lotion => "lotion",
86
            Self::Vaseline => "vaseline",
87
            Self::EnergyDrink => "energy-drink",
88
        }
89
    }
90
91
    pub fn parse(slug: &str) -> Option<Self> {
92
        Self::ALL.into_iter().find(|item| item.slug() == slug)
93
    }
94
95
    pub fn description(self) -> &'static str {
96
        match self {
97
            Self::WarmTowel => {
98
                "Reusable. Satisfies the warm-up precondition. Use technique=warmup."
99
            }
100
            Self::IcePack => "Cools things sharply. Use technique=ice.",
101
            Self::Ruler => "Measures honestly. The length resource now carries a Content-Length.",
102
            Self::DoorLock => "Keeps your brother out once.",
103
            Self::DndSign => "Works on housekeeping. Mum does not read signs.",
104
            Self::Blinds => "The neighbour has a good camera. The blinds are better.",
105
            Self::Pump => "A pump.",
106
            Self::PumpPro => "Use technique=pump. Gains are temporary.",
107
            Self::Extender => "Passive gains each turn. Takes up room. Can be removed with DELETE.",
108
            Self::Ring => {
109
                "Girth gains doubled. Rupture risk raised. Responses are compressed if you accept gzip. Can be removed with DELETE."
110
            }
111
            Self::Supplement => "Use technique=supplement.",
112
            Self::Cage => "Locked.",
113
            Self::CageKey => "Pump-Bro does not ask.",
114
            Self::Spreadsheet => "Charts your progress. Every line is flat.",
115
            Self::TeapotSpout => "Does nothing. Cannot be dropped.",
116
            Self::BabyOil => "Smooth. +1. One unit per jelq.",
117
            Self::CoconutOil => "+3. Solid until it matters. Suspicious at Nan's.",
118
            Self::Lotion => {
119
                "Handy. +0, and it soaks in fast, so each jelq costs an extra stamina. Soothes a friction burn."
120
            }
121
            Self::Vaseline => "+2. Raises suspicion everywhere.",
122
            Self::EnergyDrink => "technique=energy. +3 stamina. Tastes like a battery.",
123
        }
124
    }
125
126
    pub fn pitch(self) -> &'static str {
127
        match self {
128
            Self::PumpPro => "A pump, but professional.",
129
            Self::Extender => "Passive gains every turn. Takes up room.",
130
            Self::Ring => "Doubles girth gains. Pump-Bro does not discuss the risks.",
131
            Self::Supplement => "Clinically formulated. Ships from overseas.",
132
            Self::DndSign => "Housekeeping respects it.",
133
            Self::Blinds => "The neighbour has a good camera.",
134
            Self::Ruler => "Pump-Bro does not recommend it.",
135
            Self::IcePack => "Cold.",
136
            _ => self.description(),
137
        }
138
    }
139
140
    pub fn receipt(self) -> &'static str {
141
        match self {
142
            Self::PumpPro => "The box says professional. The pump inside is the same pump.",
143
            Self::Extender => "It is fitted. It will be noticed when you sit down.",
144
            Self::Ring => "It is snug. Pump-Bro still does not discuss the risks.",
145
            Self::DndSign => "The sign is on the handle. Housekeeping can read.",
146
            Self::Blinds => "The blinds are down. Across the street, a lens is lowered.",
147
            Self::Ruler => "Pump-Bro looks away while you use it.",
148
            Self::IcePack => {
149
                "It came out of the chest freezer behind the counter. It is very cold."
150
            }
151
            Self::CageKey => "The cage is open. Pump-Bro does not ask, and neither should you.",
152
            Self::BabyOil => "Pump-Bro buys it in bulk. He does not have a baby.",
153
            Self::CoconutOil => "It is solid. It will not stay that way.",
154
            Self::Lotion => "Unscented, allegedly.",
155
            Self::Vaseline => "Everyone at the counter saw.",
156
            _ => "",
157
        }
158
    }
159
160
    pub fn price(self) -> Option<u32> {
161
        match self {
162
            Self::Pump => Some(10),
163
            Self::PumpPro | Self::Extender | Self::CageKey => Some(15),
164
            Self::Ring | Self::Ruler => Some(8),
165
            Self::IcePack => Some(7),
166
            Self::CoconutOil => Some(6),
167
            Self::Supplement | Self::Blinds => Some(5),
168
            Self::BabyOil | Self::Vaseline => Some(4),
169
            Self::DndSign | Self::Lotion => Some(3),
170
            Self::WarmTowel
171
            | Self::DoorLock
172
            | Self::Cage
173
            | Self::Spreadsheet
174
            | Self::TeapotSpout
175
            | Self::EnergyDrink => None,
176
        }
177
    }
178
}