diff options
Diffstat (limited to 'src/Sequence/Contact/Archetypes.hs')
-rw-r--r-- | src/Sequence/Contact/Archetypes.hs | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/src/Sequence/Contact/Archetypes.hs b/src/Sequence/Contact/Archetypes.hs index b8bc1b0..566d72d 100644 --- a/src/Sequence/Contact/Archetypes.hs +++ b/src/Sequence/Contact/Archetypes.hs | |||
@@ -75,11 +75,8 @@ archetypes = [ ("Requisite", prop) | |||
75 | , ("AUV", auv) | 75 | , ("AUV", auv) |
76 | ] | 76 | ] |
77 | 77 | ||
78 | cTable :: Ord v => [(Integer, Integer, v)] -> Table v | ||
79 | cTable = Map.fromList . map (\(from, to, value) -> (value, (abs (to - from) + 1) % 100)) | ||
80 | |||
81 | death :: Hitzone -> Effect | 78 | death :: Hitzone -> Effect |
82 | death zone = Effect "Tod" . runMaybeT $ do | 79 | death zone = Effect "Tod" $ do |
83 | maxVitality <- (MaybeT . preview $ ctx . sMaxVitality) >>= lift | 80 | maxVitality <- (MaybeT . preview $ ctx . sMaxVitality) >>= lift |
84 | currentDmg <- MaybeT . preview $ ctx . sDamage' zone | 81 | currentDmg <- MaybeT . preview $ ctx . sDamage' zone |
85 | allDmg <- MaybeT . preview $ ctx . sTotalDamage | 82 | allDmg <- MaybeT . preview $ ctx . sTotalDamage |
@@ -87,16 +84,16 @@ death zone = Effect "Tod" . runMaybeT $ do | |||
87 | dmg' = if dmg >= 0 then dmg else 0 | 84 | dmg' = if dmg >= 0 then dmg else 0 |
88 | MaybeT . previews ctx $ set (sDamage' zone) dmg' | 85 | MaybeT . previews ctx $ set (sDamage' zone) dmg' |
89 | 86 | ||
90 | unconsciousR :: Formula Stats -> FormulaM Stats (Maybe Stats) | 87 | unconsciousR :: Formula Stats -> FormulaMT MaybeT Stats Stats |
91 | unconsciousR roundsF = do | 88 | unconsciousR roundsF = do |
92 | rounds <- roundsF | 89 | rounds <- lift roundsF |
93 | previews ctx $ over (sSequence . _Just . seqRound . _Wrapped) (+ rounds) | 90 | MaybeT . previews ctx $ over (sSequence . _Just . seqRound . _Wrapped) (+ rounds) |
94 | 91 | ||
95 | unconscious :: FormulaM Stats (Maybe Stats) | 92 | unconscious :: FormulaMT MaybeT Stats Stats |
96 | unconscious = previews ctx $ set sSequence Nothing | 93 | unconscious = MaybeT . previews ctx $ set sSequence Nothing |
97 | 94 | ||
98 | amputate :: Hitzone -> Effect | 95 | amputate :: Hitzone -> Effect |
99 | amputate zone = Effect (CI.mk $ review hitzone zone ++ " ist verloren") . runMaybeT $ do | 96 | amputate zone = Effect (CI.mk $ review hitzone zone ++ " ist verloren") $ do |
100 | hitzones <- MaybeT . preview $ ctx . sHitzones | 97 | hitzones <- MaybeT . preview $ ctx . sHitzones |
101 | (fromRational -> zoneProp) <- MaybeT . return $ Map.lookup zone hitzones | 98 | (fromRational -> zoneProp) <- MaybeT . return $ Map.lookup zone hitzones |
102 | MaybeT . previews ctx . execState $ do | 99 | MaybeT . previews ctx . execState $ do |
@@ -221,7 +218,7 @@ human = Humanoid | |||
221 | & set seBar (vitBar 0.75) | 218 | & set seBar (vitBar 0.75) |
222 | & set seReBar (vitBar 0.2) | 219 | & set seReBar (vitBar 0.2) |
223 | & set seEffect (cTable [ (1, 5, death "Torso") | 220 | & set seEffect (cTable [ (1, 5, death "Torso") |
224 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) | 221 | , (6, 25, Effect "Organschäden" . MaybeT . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) |
225 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") | 222 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") |
226 | , (46, 75, Effect "Bewusstlos" unconscious) | 223 | , (46, 75, Effect "Bewusstlos" unconscious) |
227 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) | 224 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) |
@@ -234,7 +231,7 @@ human = Humanoid | |||
234 | & set seBar (vitBar 0.2) | 231 | & set seBar (vitBar 0.2) |
235 | & set seReBar (vitBar 0.2) | 232 | & set seReBar (vitBar 0.2) |
236 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") | 233 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") |
237 | , (6, 25, Effect "Kastration" . previews ctx $ over sFatigue (+ 15)) | 234 | , (6, 25, Effect "Kastration" . MaybeT . previews ctx $ over sFatigue (+ 15)) |
238 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") | 235 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") |
239 | , (51, 100, Effect "Bewusstlos" unconscious) | 236 | , (51, 100, Effect "Bewusstlos" unconscious) |
240 | ]) | 237 | ]) |
@@ -255,14 +252,14 @@ human = Humanoid | |||
255 | , (6, 25, Effect "Koma" unconscious) | 252 | , (6, 25, Effect "Koma" unconscious) |
256 | , (26, 45, Effect "Bewusstlos" . unconsciousR $ d 10) | 253 | , (26, 45, Effect "Bewusstlos" . unconsciousR $ d 10) |
257 | , (46, 75, Effect "Bewusstlos" unconscious) | 254 | , (46, 75, Effect "Bewusstlos" unconscious) |
258 | , (76, 100, Effect "Verlangsamt" $ d 10 >>= (\loss -> previews ctx $ over (sSequence . _Just . seqVal . _Just) (+ (-loss)))) | 255 | , (76, 100, Effect "Verlangsamt" $ lift (d 10) >>= (\loss -> MaybeT . previews ctx $ over (sSequence . _Just . seqVal . _Just) (+ (-loss)))) |
259 | ]) | 256 | ]) |
260 | , _sFatigueShock = def | 257 | , _sFatigueShock = def |
261 | & set seReBar (vitBar 0.75) | 258 | & set seReBar (vitBar 0.75) |
262 | & set seEffect ( cTable [ (1, 25, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) | 259 | & set seEffect ( cTable [ (1, 25, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) |
263 | , (26, 50, Effect "Bewusstlos" . unconsciousR $ d 10) | 260 | , (26, 50, Effect "Bewusstlos" . unconsciousR $ d 10) |
264 | , (51, 75, Effect "Bewusstlos" unconscious) | 261 | , (51, 75, Effect "Bewusstlos" unconscious) |
265 | , (76, 100, Effect "Verlangsamt" $ 2 * d 10 >>= (\loss -> previews ctx $ over (sSequence . _Just . seqVal . _Just) (+ (-loss)))) | 262 | , (76, 100, Effect "Verlangsamt" $ lift (2 * d 10) >>= (\loss -> MaybeT . previews ctx $ over (sSequence . _Just . seqVal . _Just) (+ (-loss)))) |
266 | ]) | 263 | ]) |
267 | 264 | ||
268 | , _sExtraSkills = [] | 265 | , _sExtraSkills = [] |
@@ -278,7 +275,7 @@ human = Humanoid | |||
278 | & set seEffect (cTable [ (1, 10, amputate zone) | 275 | & set seEffect (cTable [ (1, 10, amputate zone) |
279 | , (11, 25, effect $ review hitzone zone ++ " ist gelähmt und unbrauchbar") | 276 | , (11, 25, effect $ review hitzone zone ++ " ist gelähmt und unbrauchbar") |
280 | , (26, 45, effect $ review hitzone zone ++ " hat eingeschränkte Funktion (-50%)") | 277 | , (26, 45, effect $ review hitzone zone ++ " hat eingeschränkte Funktion (-50%)") |
281 | , (46, 75, Effect "Schwerste Schmerzen" . previews ctx $ over sFatigue (+ 10)) | 278 | , (46, 75, Effect "Schwerste Schmerzen" . MaybeT . previews ctx $ over sFatigue (+ 10)) |
282 | , (76, 100, effect "Fleischwunde") | 279 | , (76, 100, effect "Fleischwunde") |
283 | ]) | 280 | ]) |
284 | bein zone = def | 281 | bein zone = def |
@@ -287,7 +284,7 @@ human = Humanoid | |||
287 | & set seReBar (vitBar 0.2) | 284 | & set seReBar (vitBar 0.2) |
288 | & set seEffect (cTable [ (1, 10, amputate zone) | 285 | & set seEffect (cTable [ (1, 10, amputate zone) |
289 | , (11, 45, effect $ review hitzone zone ++ " ist gelähmt und unbrauchbar (halbierte Bewegung)") | 286 | , (11, 45, effect $ review hitzone zone ++ " ist gelähmt und unbrauchbar (halbierte Bewegung)") |
290 | , (46, 75, Effect "Schwerste Schmerzen" . previews ctx $ over sFatigue (+ 10)) | 287 | , (46, 75, Effect "Schwerste Schmerzen" . MaybeT . previews ctx $ over sFatigue (+ 10)) |
291 | , (76, 100, effect "Fleischwunde") | 288 | , (76, 100, effect "Fleischwunde") |
292 | ]) | 289 | ]) |
293 | 290 | ||
@@ -343,7 +340,7 @@ dog = Quadruped | |||
343 | & set seBar (vitBar 0.75) | 340 | & set seBar (vitBar 0.75) |
344 | & set seReBar (vitBar 0.2) | 341 | & set seReBar (vitBar 0.2) |
345 | & set seEffect ( cTable [ (1, 5, death "Torso") | 342 | & set seEffect ( cTable [ (1, 5, death "Torso") |
346 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) | 343 | , (6, 25, Effect "Organschäden" . MaybeT . previews ctx $ over sFatigue (+ 25) . over (sDamage' "Torso") (+ 10)) |
347 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") | 344 | , (26, 45, effect "Innere Blutung (3 Schaden (Au) Minuten)") |
348 | , (46, 75, Effect "Bewusstlos" unconscious) | 345 | , (46, 75, Effect "Bewusstlos" unconscious) |
349 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) | 346 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) |
@@ -354,7 +351,7 @@ dog = Quadruped | |||
354 | & set seBar (vitBar 0.2) | 351 | & set seBar (vitBar 0.2) |
355 | & set seReBar (vitBar 0.2) | 352 | & set seReBar (vitBar 0.2) |
356 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") | 353 | & set seEffect ( cTable [ (1, 5, effect "Querschnittsgelähmt") |
357 | , (6, 25, Effect "Kastration" . previews ctx $ over sFatigue (+ 10)) | 354 | , (6, 25, Effect "Kastration" . MaybeT . previews ctx $ over sFatigue (+ 10)) |
358 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") | 355 | , (26, 50, effect "Innere Blutung (2 Schaden (Au) Minuten)") |
359 | , (51, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) | 356 | , (51, 100, Effect "Bewusstlos" . unconsciousR $ 2 * d 10) |
360 | ]) | 357 | ]) |
@@ -386,8 +383,8 @@ dog = Quadruped | |||
386 | & set seReBar (vitBar 0.2) | 383 | & set seReBar (vitBar 0.2) |
387 | & set seEffect ( cTable [ (1, 10, amputate zone) | 384 | & set seEffect ( cTable [ (1, 10, amputate zone) |
388 | , (11, 25, effect $ review hitzone zone ++ " ist gelähmt und unbrauchbar (halbierte Bewegung)") | 385 | , (11, 25, effect $ review hitzone zone ++ " ist gelähmt und unbrauchbar (halbierte Bewegung)") |
389 | , (26, 45, Effect "Schmerzen" . previews ctx $ over sFatigue (+ 15)) | 386 | , (26, 45, Effect "Schmerzen" . MaybeT . previews ctx $ over sFatigue (+ 15)) |
390 | , (46, 100, Effect "Fleischwunde" . previews ctx $ over sFatigue (+ 5)) | 387 | , (46, 100, Effect "Fleischwunde" . MaybeT . previews ctx $ over sFatigue (+ 5)) |
391 | ]) | 388 | ]) |
392 | 389 | ||
393 | dolphin = Dolphin | 390 | dolphin = Dolphin |
@@ -437,7 +434,7 @@ dolphin = Dolphin | |||
437 | & set seBar (vitBar 0.8) | 434 | & set seBar (vitBar 0.8) |
438 | & set seReBar (vitBar 0.2) | 435 | & set seReBar (vitBar 0.2) |
439 | & set seEffect ( cTable [ (1, 5, death "Rumpf") | 436 | & set seEffect ( cTable [ (1, 5, death "Rumpf") |
440 | , (6, 25, Effect "Organschäden" . previews ctx $ over sFatigue (+ 7) . over (sDamage' "Rumpf") (+ 20)) | 437 | , (6, 25, Effect "Organschäden" . MaybeT . previews ctx $ over sFatigue (+ 7) . over (sDamage' "Rumpf") (+ 20)) |
441 | , (26, 45, effect "Blutung (2 Schaden (Au) Minuten)") | 438 | , (26, 45, effect "Blutung (2 Schaden (Au) Minuten)") |
442 | , (46, 75, Effect "Bewusstlos" unconscious) | 439 | , (46, 75, Effect "Bewusstlos" unconscious) |
443 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) | 440 | , (76, 100, Effect "Bewusstlos" . unconsciousR $ d 10) |
@@ -449,7 +446,7 @@ dolphin = Dolphin | |||
449 | & set seReBar (vitBar 0.2) | 446 | & set seReBar (vitBar 0.2) |
450 | & set seEffect ( cTable [ (1, 10, amputate "Schwanz") | 447 | & set seEffect ( cTable [ (1, 10, amputate "Schwanz") |
451 | , (11, 25, effect "Halbierte Bewegung") | 448 | , (11, 25, effect "Halbierte Bewegung") |
452 | , (26, 45, Effect "Schmerz" . previews ctx $ over sFatigue (+ 15)) | 449 | , (26, 45, Effect "Schmerz" . MaybeT . previews ctx $ over sFatigue (+ 15)) |
453 | , (46, 100, effect "Fleischwunde") | 450 | , (46, 100, effect "Fleischwunde") |
454 | ]) | 451 | ]) |
455 | ) | 452 | ) |
@@ -508,28 +505,28 @@ silicoid = Silicoid | |||
508 | & set seVal (sDamage' "Auge" . to return) | 505 | & set seVal (sDamage' "Auge" . to return) |
509 | & set seBar (vitBar 0.2) | 506 | & set seBar (vitBar 0.2) |
510 | & set seReBar (vitBar 0.2) | 507 | & set seReBar (vitBar 0.2) |
511 | & set seEffect ( cTable [ (1, 25, effect "Explosion") | 508 | & set seEffect ( cTable [ (1, 25, "Explosion") |
512 | , (26, 75, effect "Permanent desorientiert (nur rammen in zufällige Richtungen)") | 509 | , (26, 75, "Permanent desorientiert (nur rammen in zufällige Richtungen)") |
513 | , (76, 100, effect "Detonation in 3w10 AP") | 510 | , (76, 100, "Detonation in 3w10 AP") |
514 | ]) | 511 | ]) |
515 | ) | 512 | ) |
516 | , ("Thorax", def | 513 | , ("Thorax", def |
517 | & set seVal (sDamage' "Thorax" . to return) | 514 | & set seVal (sDamage' "Thorax" . to return) |
518 | & set seBar (vitBar 0.65) | 515 | & set seBar (vitBar 0.65) |
519 | & set seReBar (vitBar 0.2) | 516 | & set seReBar (vitBar 0.2) |
520 | & set seEffect ( cTable [ (1, 10, effect "Explosion") | 517 | & set seEffect ( cTable [ (1, 10, "Explosion") |
521 | , (11, 25, effect "Halbe Bewegung") | 518 | , (11, 25, "Halbe Bewegung") |
522 | , (26, 65, effect "10 Schaden, Sprühattacke auf nächsten Charakter (Blut)") | 519 | , (26, 65, "10 Schaden, Sprühattacke auf nächsten Charakter (Blut)") |
523 | , (66, 100, effect "3w10 Erschöpfung") | 520 | , (66, 100, "3w10 Erschöpfung") |
524 | ]) | 521 | ]) |
525 | ) | 522 | ) |
526 | , ("Schwanz", def | 523 | , ("Schwanz", def |
527 | & set seVal (sDamage' "Schwanz" . to return) | 524 | & set seVal (sDamage' "Schwanz" . to return) |
528 | & set seBar (vitBar 0.2) | 525 | & set seBar (vitBar 0.2) |
529 | & set seReBar (vitBar 0.2) | 526 | & set seReBar (vitBar 0.2) |
530 | & set seEffect ( cTable [ (1, 25, effect "10 Schaden, Schwanzdrüse unbrauchbar") | 527 | & set seEffect ( cTable [ (1, 25, "10 Schaden, Schwanzdrüse unbrauchbar") |
531 | , (26, 60, effect "3 Schaden, Sprühattacke auf nächsten Charakter (Blut)") | 528 | , (26, 60, "3 Schaden, Sprühattacke auf nächsten Charakter (Blut)") |
532 | , (61, 100, effect "Amok und Detonation nach 1w10+6 AP") | 529 | , (61, 100, "Amok und Detonation nach 1w10+6 AP") |
533 | ]) | 530 | ]) |
534 | ) | 531 | ) |
535 | ] <> Map.fromList [(name, bein name) | side <- ["Rechtes", "Linkes"], length <- ["Vorderes", "Mittleres", "Hinteres"], let name = Hitzone . CI.mk $ side ++ " " ++ length ++ " Bein"] | 532 | ] <> Map.fromList [(name, bein name) | side <- ["Rechtes", "Linkes"], length <- ["Vorderes", "Mittleres", "Hinteres"], let name = Hitzone . CI.mk $ side ++ " " ++ length ++ " Bein"] |