summaryrefslogtreecommitdiff
path: root/src/Sequence/Contact/Archetypes.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Sequence/Contact/Archetypes.hs')
-rw-r--r--src/Sequence/Contact/Archetypes.hs61
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
78cTable :: Ord v => [(Integer, Integer, v)] -> Table v
79cTable = Map.fromList . map (\(from, to, value) -> (value, (abs (to - from) + 1) % 100))
80
81death :: Hitzone -> Effect 78death :: Hitzone -> Effect
82death zone = Effect "Tod" . runMaybeT $ do 79death 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
90unconsciousR :: Formula Stats -> FormulaM Stats (Maybe Stats) 87unconsciousR :: Formula Stats -> FormulaMT MaybeT Stats Stats
91unconsciousR roundsF = do 88unconsciousR 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
95unconscious :: FormulaM Stats (Maybe Stats) 92unconscious :: FormulaMT MaybeT Stats Stats
96unconscious = previews ctx $ set sSequence Nothing 93unconscious = MaybeT . previews ctx $ set sSequence Nothing
97 94
98amputate :: Hitzone -> Effect 95amputate :: Hitzone -> Effect
99amputate zone = Effect (CI.mk $ review hitzone zone ++ " ist verloren") . runMaybeT $ do 96amputate 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
393dolphin = Dolphin 390dolphin = 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"]