diff options
-rw-r--r-- | src/Sequence/Contact/Archetypes.hs | 166 | ||||
-rw-r--r-- | src/Sequence/Contact/Tests.hs | 3 | ||||
-rw-r--r-- | src/Sequence/Contact/Types/Internal.hs | 41 | ||||
-rw-r--r-- | src/Sequence/Utils.hs | 3 |
4 files changed, 213 insertions, 0 deletions
diff --git a/src/Sequence/Contact/Archetypes.hs b/src/Sequence/Contact/Archetypes.hs index 85de197..e54c50f 100644 --- a/src/Sequence/Contact/Archetypes.hs +++ b/src/Sequence/Contact/Archetypes.hs | |||
@@ -25,6 +25,7 @@ import Data.Default | |||
25 | import Data.Maybe | 25 | import Data.Maybe |
26 | import Data.Ratio | 26 | import Data.Ratio |
27 | import Data.ExtendedReal | 27 | import Data.ExtendedReal |
28 | import Data.Monoid | ||
28 | 29 | ||
29 | import Data.List | 30 | import Data.List |
30 | 31 | ||
@@ -60,6 +61,10 @@ archetypes = [ ("Requisite", prop) | |||
60 | , ("Zeta-Anführer", zetaLeader) | 61 | , ("Zeta-Anführer", zetaLeader) |
61 | , ("Zeta-Beobachter", zetaObserver) | 62 | , ("Zeta-Beobachter", zetaObserver) |
62 | 63 | ||
64 | , ("Silkoiden-Larve", silicoidLarva) | ||
65 | , ("Silkoid", rSilicoid) | ||
66 | , ("Mega-Silikoid", megaSilicoid) | ||
67 | |||
63 | , ("ATV", atv) | 68 | , ("ATV", atv) |
64 | , ("FAV", fav) | 69 | , ("FAV", fav) |
65 | , ("AUV", auv) | 70 | , ("AUV", auv) |
@@ -459,6 +464,94 @@ dolphin = Dolphin | |||
459 | 464 | ||
460 | , _sEquipment = [] | 465 | , _sEquipment = [] |
461 | } | 466 | } |
467 | |||
468 | silicoid = Silicoid | ||
469 | { _sAStrength = vStrength | ||
470 | , _sAEndurance = vEndurance | ||
471 | , _sAMass = vMass | ||
472 | , _sAReflexes = vReflexes | ||
473 | , _sAMobility = vMobility | ||
474 | , _sADexterity = vDexterity | ||
475 | , _sAIntelligence = vIntelligence | ||
476 | , _sACharisma = vCharisma | ||
477 | , _sAPerception = vPerception | ||
478 | , _sAWillpower = vWillpower | ||
479 | |||
480 | , _sSRamming = 30 + vReflexes * 2 + vPerception | ||
481 | , _sSMauling = 20 + vReflexes + vMobility `quot'` 2 | ||
482 | , _sSExcreting = 10 + vMass * 2 | ||
483 | |||
484 | , _sMaxVitality = vEndurance * 2 + vMass * 2 + vWillpower + 10 | ||
485 | , _sSeqVal = vReflexes * 2 + vMobility + vPerception + 2 * d 10 | ||
486 | , _sPainTolerance = vMass `quot'` 2 + vWillpower | ||
487 | , _sFatigueTolerance = vWillpower `quot'` 2 + vEndurance | ||
488 | |||
489 | , _sSeqEpsilon = False | ||
490 | |||
491 | , _sHitzones = [ ("Auge", 0.05) | ||
492 | , ("Thorax", 0.45) | ||
493 | , ("Rechtes Vorderes Bein", 0.07) | ||
494 | , ("Linkes Vorderes Bein", 0.07) | ||
495 | , ("Rechtes Mittleres Bein", 0.06) | ||
496 | , ("Linkes Mittleres Bein", 0.06) | ||
497 | , ("Rechtes Hinteres Bein", 0.05) | ||
498 | , ("Linkes Hinteres Bein", 0.05) | ||
499 | , ("Schwanz", 0.14) | ||
500 | ] | ||
501 | , _sArmor = const def | ||
502 | , _sCripple = (!) $ [ ("Auge", def | ||
503 | & set seVal (sDamage' "Auge" . to return) | ||
504 | & set seBar (vitBar 0.2) | ||
505 | & set seReBar (vitBar 0.2) | ||
506 | & set seEffect ( cTable [ (1, 25, effect "Explosion") | ||
507 | , (26, 75, effect "Permanent desorientiert (nur rammen in zufällige Richtungen)") | ||
508 | , (76, 100, effect "Detonation in 3w10 AP") | ||
509 | ]) | ||
510 | ) | ||
511 | , ("Thorax", def | ||
512 | & set seVal (sDamage' "Thorax" . to return) | ||
513 | & set seBar (vitBar 0.65) | ||
514 | & set seReBar (vitBar 0.2) | ||
515 | & set seEffect ( cTable [ (1, 10, effect "Explosion") | ||
516 | , (11, 25, effect "Halbe Bewegung") | ||
517 | , (26, 65, effect "10 Schaden, Sprühattacke auf nächsten Charakter (Blut)") | ||
518 | , (66, 100, effect "3w10 Erschöpfung") | ||
519 | ]) | ||
520 | ) | ||
521 | , ("Schwanz", def | ||
522 | & set seVal (sDamage' "Schwanz" . to return) | ||
523 | & set seBar (vitBar 0.2) | ||
524 | & set seReBar (vitBar 0.2) | ||
525 | & set seEffect ( cTable [ (1, 25, effect "10 Schaden, Schwanzdrüse unbrauchbar") | ||
526 | , (26, 60, effect "3 Schaden, Sprühattacke auf nächsten Charakter (Blut)") | ||
527 | , (61, 100, effect "Amok und Detonation nach 1w10+6 AP") | ||
528 | ]) | ||
529 | ) | ||
530 | ] <> Map.fromList [(name, bein name) | side <- ["Rechtes", "Linkes"], length <- ["Vorderes", "Mittleres", "Hinteres"], let name = Hitzone . CI.mk $ side ++ " " ++ length ++ " Bein"] | ||
531 | |||
532 | , _sDamage = const 0 | ||
533 | , _sFatigue = 0 | ||
534 | |||
535 | , _sSequence = Nothing | ||
536 | , _sTimer = Nothing | ||
537 | |||
538 | , _sPainShock = def | ||
539 | , _sFatigueShock = def | ||
540 | |||
541 | , _sExtraSkills = [] | ||
542 | , _sModifiers = damageMods | ||
543 | |||
544 | , _sEquipment = [] | ||
545 | } | ||
546 | where | ||
547 | bein name = def | ||
548 | & set seVal (sDamage' name . to return) | ||
549 | & set seBar (vitBar 0.3) | ||
550 | & set seReBar (vitBar 0.2) | ||
551 | & set seEffect ( cTable [ (1, 15, effect "Bein wird abgetrennt und fliegt 2w10 Meter und explodiert für Masse/10 explosiv in 2m Radius (+1 AP alle Bewegung)") | ||
552 | , (16, 75, effect "Bein ist nutzlos (+1AP alle Bewegung)") | ||
553 | , (76, 100, effect "Kreatur fängt an zu brennen, 12 Schaden am Ende jeder Runde + Amok") | ||
554 | ]) | ||
462 | 555 | ||
463 | childOfMu = human | 556 | childOfMu = human |
464 | & sAStrength +~ 2 | 557 | & sAStrength +~ 2 |
@@ -675,3 +768,76 @@ zetaObserver = human | |||
675 | where | 768 | where |
676 | armor' Toxic = return PosInf | 769 | armor' Toxic = return PosInf |
677 | armor' _ = return 15 | 770 | armor' _ = return 15 |
771 | |||
772 | silicoidLarva = silicoid | ||
773 | & sAStrength .~ 3 | ||
774 | & sAEndurance .~ 6 | ||
775 | & sAMass .~ 1 | ||
776 | & sAReflexes .~ 10 | ||
777 | & sAMobility .~ 15 | ||
778 | & sADexterity .~ 0 | ||
779 | & sAIntelligence .~ 0 | ||
780 | & sACharisma .~ 0 | ||
781 | & sAPerception .~ 5 | ||
782 | & sAWillpower .~ 20 | ||
783 | & sHitzones .~ [("Volumen", 1)] | ||
784 | & sCripple .~ const def | ||
785 | & sArmor .~ const armor' | ||
786 | & sSMauling +~ 10 | ||
787 | & sSExcreting +~ 32 | ||
788 | where | ||
789 | armor' Ballistic = return 5 | ||
790 | armor' Piercing = return 6 | ||
791 | armor' Blunt = return 6 | ||
792 | armor' Heat = return 24 | ||
793 | armor' Cold = return 8 | ||
794 | armor' Toxic = return 20 | ||
795 | armor' Explosive = return 5 | ||
796 | |||
797 | rSilicoid = silicoid | ||
798 | & sAStrength .~ 10 | ||
799 | & sAEndurance .~ 8 | ||
800 | & sAMass .~ 5 | ||
801 | & sAReflexes .~ 10 | ||
802 | & sAMobility .~ 15 | ||
803 | & sADexterity .~ 0 | ||
804 | & sAIntelligence .~ 0 | ||
805 | & sACharisma .~ 0 | ||
806 | & sAPerception .~ 5 | ||
807 | & sAWillpower .~ 20 | ||
808 | & sArmor .~ const armor' | ||
809 | & sSMauling +~ 30 | ||
810 | & sSRamming +~ 7 | ||
811 | & sSExcreting +~ 37 | ||
812 | where | ||
813 | armor' Ballistic = return 10 | ||
814 | armor' Piercing = return 12 | ||
815 | armor' Blunt = return 12 | ||
816 | armor' Heat = return 26 | ||
817 | armor' Cold = return 12 | ||
818 | armor' Toxic = return 20 | ||
819 | armor' Explosive = return 10 | ||
820 | |||
821 | megaSilicoid = silicoid | ||
822 | & sAStrength .~ 30 | ||
823 | & sAEndurance .~ 12 | ||
824 | & sAMass .~ 25 | ||
825 | & sAReflexes .~ 8 | ||
826 | & sAMobility .~ 10 | ||
827 | & sADexterity .~ 0 | ||
828 | & sAIntelligence .~ 0 | ||
829 | & sACharisma .~ 0 | ||
830 | & sAPerception .~ 5 | ||
831 | & sAWillpower .~ 20 | ||
832 | & sArmor .~ const armor' | ||
833 | & sSMauling +~ 49 | ||
834 | & sSRamming +~ 13 | ||
835 | & sSExcreting +~ 8 | ||
836 | where | ||
837 | armor' Ballistic = return 20 | ||
838 | armor' Piercing = return 22 | ||
839 | armor' Blunt = return 22 | ||
840 | armor' Heat = return 28 | ||
841 | armor' Cold = return 14 | ||
842 | armor' Toxic = return 20 | ||
843 | armor' Explosive = return 12 | ||
diff --git a/src/Sequence/Contact/Tests.hs b/src/Sequence/Contact/Tests.hs index 81b8d3c..561f5ad 100644 --- a/src/Sequence/Contact/Tests.hs +++ b/src/Sequence/Contact/Tests.hs | |||
@@ -80,6 +80,9 @@ tests = do | |||
80 | , test "Rammen" $ sSRamming . skillTest | 80 | , test "Rammen" $ sSRamming . skillTest |
81 | , test "Zielerfassung" $ sSTargeting . skillTest | 81 | , test "Zielerfassung" $ sSTargeting . skillTest |
82 | , test "Verständnis" $ sSComprehension . skillTest | 82 | , test "Verständnis" $ sSComprehension . skillTest |
83 | |||
84 | , test "Zerfleischen" $ sSMauling . skillTest | ||
85 | , test "Ätzende Ausscheidung" $ sSExcreting . skillTest | ||
83 | ] | 86 | ] |
84 | 87 | ||
85 | views sExtraSkills (baseTests <>) | 88 | views sExtraSkills (baseTests <>) |
diff --git a/src/Sequence/Contact/Types/Internal.hs b/src/Sequence/Contact/Types/Internal.hs index 11116e9..40bb65f 100644 --- a/src/Sequence/Contact/Types/Internal.hs +++ b/src/Sequence/Contact/Types/Internal.hs | |||
@@ -272,3 +272,44 @@ data Stats = Prop | |||
272 | 272 | ||
273 | , _sEquipment :: Map (CI String) Dynamic | 273 | , _sEquipment :: Map (CI String) Dynamic |
274 | } | 274 | } |
275 | | Silicoid | ||
276 | { _sAStrength | ||
277 | , _sAEndurance | ||
278 | , _sAMass | ||
279 | , _sAReflexes | ||
280 | , _sAMobility | ||
281 | , _sADexterity | ||
282 | , _sAIntelligence | ||
283 | , _sACharisma | ||
284 | , _sAPerception | ||
285 | , _sAWillpower | ||
286 | |||
287 | , _sSRamming | ||
288 | , _sSMauling | ||
289 | , _sSExcreting | ||
290 | |||
291 | , _sMaxVitality | ||
292 | , _sSeqVal | ||
293 | , _sPainTolerance | ||
294 | , _sFatigueTolerance :: Formula Stats | ||
295 | |||
296 | , _sSeqEpsilon :: Bool | ||
297 | |||
298 | , _sHitzones :: Table Hitzone | ||
299 | , _sArmor :: Hitzone -> Armor | ||
300 | , _sCripple :: Hitzone -> ShockEffect | ||
301 | |||
302 | , _sDamage :: Hitzone -> Int | ||
303 | , _sFatigue :: Int | ||
304 | |||
305 | , _sSequence :: Maybe SeqVal | ||
306 | , _sTimer :: Maybe Timer | ||
307 | |||
308 | , _sPainShock :: ShockEffect | ||
309 | , _sFatigueShock :: ShockEffect | ||
310 | |||
311 | , _sExtraSkills :: Map (CI String) (FormulaM Stats Test) | ||
312 | , _sModifiers :: Set Modifier | ||
313 | |||
314 | , _sEquipment :: Map (CI String) Dynamic | ||
315 | } | ||
diff --git a/src/Sequence/Utils.hs b/src/Sequence/Utils.hs index bb29b86..eac71e9 100644 --- a/src/Sequence/Utils.hs +++ b/src/Sequence/Utils.hs | |||
@@ -231,6 +231,9 @@ statAccessors = [ ("Stärke", preview sAStrength) | |||
231 | , ("Rammen", preview sSRamming) | 231 | , ("Rammen", preview sSRamming) |
232 | , ("Zielerfassung", preview sSTargeting) | 232 | , ("Zielerfassung", preview sSTargeting) |
233 | , ("Verständnis", preview sSComprehension) | 233 | , ("Verständnis", preview sSComprehension) |
234 | |||
235 | , ("Zerfleischen", preview sSMauling) | ||
236 | , ("Ätzende Ausscheidung", preview sSExcreting) | ||
234 | 237 | ||
235 | , ("Maximale Vitalität", preview sMaxVitality) | 238 | , ("Maximale Vitalität", preview sMaxVitality) |
236 | , ("Sequenzwert", preview sSeqVal) | 239 | , ("Sequenzwert", preview sSeqVal) |