diff options
-rw-r--r-- | src/Sequence/Contact/Archetypes.hs | 226 | ||||
-rw-r--r-- | src/Sequence/Formula.hs | 7 |
2 files changed, 117 insertions, 116 deletions
diff --git a/src/Sequence/Contact/Archetypes.hs b/src/Sequence/Contact/Archetypes.hs index 1bf2b7e..8bb44d4 100644 --- a/src/Sequence/Contact/Archetypes.hs +++ b/src/Sequence/Contact/Archetypes.hs | |||
@@ -15,7 +15,7 @@ import Sequence.Formula | |||
15 | import Sequence.Types | 15 | import Sequence.Types |
16 | import Sequence.Utils | 16 | import Sequence.Utils |
17 | 17 | ||
18 | import Data.Map (Map) | 18 | import Data.Map (Map, (!)) |
19 | import qualified Data.Map as Map | 19 | import qualified Data.Map as Map |
20 | 20 | ||
21 | import Data.Set (Set) | 21 | import Data.Set (Set) |
@@ -150,44 +150,44 @@ human = Humanoid | |||
150 | , (91, 100, "Linkes Bein") | 150 | , (91, 100, "Linkes Bein") |
151 | ] | 151 | ] |
152 | , _sArmor = const def | 152 | , _sArmor = const def |
153 | , _sCripple = fromJust . flip Map.lookup [ ("Kopf", def | 153 | , _sCripple = (!) [ ("Kopf", def |
154 | & set seVal (sDamage' "Kopf" . to return) | 154 | & set seVal (sDamage' "Kopf" . to return) |
155 | & set seBar (vitBar 0.5) | 155 | & set seBar (vitBar 0.5) |
156 | & set seReBar (vitBar 0.2) | 156 | & set seReBar (vitBar 0.2) |
157 | & set seEffect (cTable [ (1, 10, death "Kopf") | 157 | & set seEffect (cTable [ (1, 10, death "Kopf") |
158 | , (11, 25, effect "Blind") | 158 | , (11, 25, effect "Blind") |
159 | , (26, 35, effect "Blind, Rechts") | 159 | , (26, 35, effect "Blind, Rechts") |
160 | , (36, 45, effect "Blind, Links") | 160 | , (36, 45, effect "Blind, Links") |
161 | , (46, 75, effect "Taub") | 161 | , (46, 75, effect "Taub") |
162 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) | 162 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) |
163 | ]) | 163 | ]) |
164 | ) | 164 | ) |
165 | , ("Torso", def | 165 | , ("Torso", def |
166 | & set seVal (sDamage' "Torso" . to return) | 166 | & set seVal (sDamage' "Torso" . to return) |
167 | & set seBar (vitBar 0.75) | 167 | & set seBar (vitBar 0.75) |
168 | & set seReBar (vitBar 0.2) | 168 | & set seReBar (vitBar 0.2) |
169 | & set seEffect (cTable [ (1, 5, death "Torso") | 169 | & set seEffect (cTable [ (1, 5, death "Torso") |
170 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) | 170 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) |
171 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") | 171 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") |
172 | , (46, 75, Effect "Bewusstlos" unconscious) | 172 | , (46, 75, Effect "Bewusstlos" unconscious) |
173 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) | 173 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) |
174 | ]) | 174 | ]) |
175 | ) | 175 | ) |
176 | , ("Rechter Arm", arm "Rechter Arm") | 176 | , ("Rechter Arm", arm "Rechter Arm") |
177 | , ("Linker Arm", arm "Linker Arm") | 177 | , ("Linker Arm", arm "Linker Arm") |
178 | , ("Unterleib", def | 178 | , ("Unterleib", def |
179 | & set seVal (sDamage' "Unterleib" . to return) | 179 | & set seVal (sDamage' "Unterleib" . to return) |
180 | & set seBar (vitBar 0.2) | 180 | & set seBar (vitBar 0.2) |
181 | & set seReBar (vitBar 0.2) | 181 | & set seReBar (vitBar 0.2) |
182 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") | 182 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") |
183 | , (6, 25, Effect "Kastration" . previews ctx $ over sFatigue (+ 15)) | 183 | , (6, 25, Effect "Kastration" . previews ctx $ over sFatigue (+ 15)) |
184 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") | 184 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") |
185 | , (51, 100, Effect "Bewusstlos" unconscious) | 185 | , (51, 100, Effect "Bewusstlos" unconscious) |
186 | ]) | 186 | ]) |
187 | ) | 187 | ) |
188 | , ("Rechtes Bein", bein "Rechtes Bein") | 188 | , ("Rechtes Bein", bein "Rechtes Bein") |
189 | , ("Linkes Bein", bein "Linkes Bein") | 189 | , ("Linkes Bein", bein "Linkes Bein") |
190 | ] | 190 | ] |
191 | 191 | ||
192 | , _sDamage = const 0 | 192 | , _sDamage = const 0 |
193 | , _sFatigue = 0 | 193 | , _sFatigue = 0 |
@@ -269,45 +269,45 @@ dog = Quadruped | |||
269 | , (91, 100, "Linker Hinterlauf") | 269 | , (91, 100, "Linker Hinterlauf") |
270 | ] | 270 | ] |
271 | , _sArmor = const def | 271 | , _sArmor = const def |
272 | , _sCripple = fromJust . flip Map.lookup [ ("Kopf", def | 272 | , _sCripple = (!) [ ("Kopf", def |
273 | & set seVal (sDamage' "Kopf" . to return) | 273 | & set seVal (sDamage' "Kopf" . to return) |
274 | & set seBar (vitBar 0.5) | 274 | & set seBar (vitBar 0.5) |
275 | & set seReBar (vitBar 0.2) | 275 | & set seReBar (vitBar 0.2) |
276 | & set seEffect (cTable [ (1, 10, death "Kopf") | 276 | & set seEffect (cTable [ (1, 10, death "Kopf") |
277 | , (11, 25, effect "Blind") | 277 | , (11, 25, effect "Blind") |
278 | , (26, 35, effect "Blind, Rechts") | 278 | , (26, 35, effect "Blind, Rechts") |
279 | , (36, 45, effect "Blind, Links") | 279 | , (36, 45, effect "Blind, Links") |
280 | , (46, 75, effect "Geruchssinn ist verloren") | 280 | , (46, 75, effect "Geruchssinn ist verloren") |
281 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) | 281 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) |
282 | ]) | 282 | ]) |
283 | ) | 283 | ) |
284 | , ("Torso", def | 284 | , ("Torso", def |
285 | & set seVal (sDamage' "Torso" . to return) | 285 | & set seVal (sDamage' "Torso" . to return) |
286 | & set seBar (vitBar 0.75) | 286 | & set seBar (vitBar 0.75) |
287 | & set seReBar (vitBar 0.2) | 287 | & set seReBar (vitBar 0.2) |
288 | & set seEffect ( cTable [ (1, 5, death "Torso") | 288 | & set seEffect ( cTable [ (1, 5, death "Torso") |
289 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) | 289 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) |
290 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") | 290 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") |
291 | , (46, 75, Effect "Bewusstlos" unconscious) | 291 | , (46, 75, Effect "Bewusstlos" unconscious) |
292 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) | 292 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) |
293 | ]) | 293 | ]) |
294 | ) | 294 | ) |
295 | , ("Hinterteil", def | 295 | , ("Hinterteil", def |
296 | & set seVal (sDamage' "Hinterteil" . to return) | 296 | & set seVal (sDamage' "Hinterteil" . to return) |
297 | & set seBar (vitBar 0.2) | 297 | & set seBar (vitBar 0.2) |
298 | & set seReBar (vitBar 0.2) | 298 | & set seReBar (vitBar 0.2) |
299 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") | 299 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") |
300 | , (6, 25, Effect "Kastration" . previews ctx $ over sFatigue (+ 10)) | 300 | , (6, 25, Effect "Kastration" . previews ctx $ over sFatigue (+ 10)) |
301 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") | 301 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") |
302 | , (51, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) | 302 | , (51, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) |
303 | ]) | 303 | ]) |
304 | ) | 304 | ) |
305 | , (\x -> (x, lauf x)) "Rechter Vorderlauf" | 305 | , (\x -> (x, lauf x)) "Rechter Vorderlauf" |
306 | , (\x -> (x, lauf x)) "Linker Vorderlauf" | 306 | , (\x -> (x, lauf x)) "Linker Vorderlauf" |
307 | , (\x -> (x, lauf x)) "Rechter Hinterlauf" | 307 | , (\x -> (x, lauf x)) "Rechter Hinterlauf" |
308 | , (\x -> (x, lauf x)) "Linker Hinterlauf" | 308 | , (\x -> (x, lauf x)) "Linker Hinterlauf" |
309 | ] | 309 | ] |
310 | 310 | ||
311 | , _sDamage = const 0 | 311 | , _sDamage = const 0 |
312 | , _sFatigue = 0 | 312 | , _sFatigue = 0 |
313 | 313 | ||
@@ -360,41 +360,41 @@ dolphin = Dolphin | |||
360 | , ("Schwanz", 0.25) | 360 | , ("Schwanz", 0.25) |
361 | ] | 361 | ] |
362 | , _sArmor = const def | 362 | , _sArmor = const def |
363 | , _sCripple = fromJust . flip Map.lookup [ ("Kopf", def | 363 | , _sCripple = (!) [ ("Kopf", def |
364 | & set seVal (sDamage' "Kopf" . to return) | 364 | & set seVal (sDamage' "Kopf" . to return) |
365 | & set seBar (vitBar 0.6) | 365 | & set seBar (vitBar 0.6) |
366 | & set seReBar (vitBar 0.2) | 366 | & set seReBar (vitBar 0.2) |
367 | & set seEffect ( cTable [ (1, 10, death "Kopf") | 367 | & set seEffect ( cTable [ (1, 10, death "Kopf") |
368 | , (11, 25, effect "Blind") | 368 | , (11, 25, effect "Blind") |
369 | , (26, 35, effect "Blind, Rechts") | 369 | , (26, 35, effect "Blind, Rechts") |
370 | , (36, 45, effect "Blind, Links") | 370 | , (36, 45, effect "Blind, Links") |
371 | , (46, 75, effect "Verlust des Biosonar") | 371 | , (46, 75, effect "Verlust des Biosonar") |
372 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) | 372 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) |
373 | ]) | 373 | ]) |
374 | ) | 374 | ) |
375 | , ("Rumpf", def | 375 | , ("Rumpf", def |
376 | & set seVal (sDamage' "Rumpf" . to return) | 376 | & set seVal (sDamage' "Rumpf" . to return) |
377 | & set seBar (vitBar 0.8) | 377 | & set seBar (vitBar 0.8) |
378 | & set seReBar (vitBar 0.2) | 378 | & set seReBar (vitBar 0.2) |
379 | & set seEffect ( cTable [ (1, 5, death "Rumpf") | 379 | & set seEffect ( cTable [ (1, 5, death "Rumpf") |
380 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 7) . over (sDamage' "Rumpf") (+ 20)) | 380 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 7) . over (sDamage' "Rumpf") (+ 20)) |
381 | , (26, 45, effect "Blutung (2 Schaden (Au) Minuten)") | 381 | , (26, 45, effect "Blutung (2 Schaden (Au) Minuten)") |
382 | , (46, 75, Effect "Bewusstlos" unconscious) | 382 | , (46, 75, Effect "Bewusstlos" unconscious) |
383 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) | 383 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) |
384 | ]) | 384 | ]) |
385 | ) | 385 | ) |
386 | , ("Schwanz", def | 386 | , ("Schwanz", def |
387 | & set seVal (sDamage' "Schwanz" . to return) | 387 | & set seVal (sDamage' "Schwanz" . to return) |
388 | & set seBar (vitBar 0.4) | 388 | & set seBar (vitBar 0.4) |
389 | & set seReBar (vitBar 0.2) | 389 | & set seReBar (vitBar 0.2) |
390 | & set seEffect ( cTable [ (1, 10, amputate "Schwanz") | 390 | & set seEffect ( cTable [ (1, 10, amputate "Schwanz") |
391 | , (11, 25, effect "Halbierte Bewegung") | 391 | , (11, 25, effect "Halbierte Bewegung") |
392 | , (26, 45, Effect "Schmerz" . previews ctx $ over sFatigue (+ 15)) | 392 | , (26, 45, Effect "Schmerz" . previews ctx $ over sFatigue (+ 15)) |
393 | , (46, 100, effect "Fleischwunde") | 393 | , (46, 100, effect "Fleischwunde") |
394 | ]) | 394 | ]) |
395 | ) | 395 | ) |
396 | ] | 396 | ] |
397 | 397 | ||
398 | , _sDamage = const 0 | 398 | , _sDamage = const 0 |
399 | , _sFatigue = 0 | 399 | , _sFatigue = 0 |
400 | 400 | ||
diff --git a/src/Sequence/Formula.hs b/src/Sequence/Formula.hs index be5032a..a3675c6 100644 --- a/src/Sequence/Formula.hs +++ b/src/Sequence/Formula.hs | |||
@@ -103,9 +103,10 @@ quot' = liftM2 quot | |||
103 | askQuestion :: (MonadIO m, sInput :<: lInput) => [String] -> (lInput, Maybe (Formula sInput)) -> Question sInput -> m (lInput, Maybe (Formula sInput)) | 103 | askQuestion :: (MonadIO m, sInput :<: lInput) => [String] -> (lInput, Maybe (Formula sInput)) -> Question sInput -> m (lInput, Maybe (Formula sInput)) |
104 | askQuestion promptPref input q@(Question{..}) = flip (if keepResult then set $ _1 . ctx' . answer else set _2 . Just) input . maybe (throwError q) return <$> askQ (wPromptPref $ promptPref ++ prompt) (join . fmap readMaybe) | 104 | askQuestion promptPref input q@(Question{..}) = flip (if keepResult then set $ _1 . ctx' . answer else set _2 . Just) input . maybe (throwError q) return <$> askQ (wPromptPref $ promptPref ++ prompt) (join . fmap readMaybe) |
105 | where | 105 | where |
106 | wPromptPref [] = " »" | 106 | wPromptPref [] = " " ++ sep |
107 | wPromptPref [x] = x ++ " »" | 107 | wPromptPref [x] = x ++ " " ++ sep |
108 | wPromptPref (x:xs) = x ++ " » " ++ wPromptPref xs | 108 | wPromptPref (x:xs) = x ++ " " ++ sep ++ " " ++ wPromptPref xs |
109 | sep = "»" | ||
109 | 110 | ||
110 | evalFormula :: (MonadIO m, sInput :<: lInput) => [String] -> lInput -> FormulaM sInput a -> m (lInput, a) | 111 | evalFormula :: (MonadIO m, sInput :<: lInput) => [String] -> lInput -> FormulaM sInput a -> m (lInput, a) |
111 | evalFormula promptPref input = evalFormula' [] promptPref (input, Nothing) | 112 | evalFormula promptPref input = evalFormula' [] promptPref (input, Nothing) |