diff options
| author | Gregor Kleen <pngwjpgh@users.noreply.github.com> | 2016-12-02 11:21:53 +0100 |
|---|---|---|
| committer | Gregor Kleen <pngwjpgh@users.noreply.github.com> | 2016-12-02 11:21:53 +0100 |
| commit | 099ab6a43c807c53e1427ed04573f6004c7f9e8b (patch) | |
| tree | 1af60e7596cd12e3ffe717c51c0a643105b3903e | |
| parent | 0b76dff6b75cc9ccf2a9b96ff12efce23e5c9ec0 (diff) | |
| download | 2017-01-16_17:13:37-099ab6a43c807c53e1427ed04573f6004c7f9e8b.tar 2017-01-16_17:13:37-099ab6a43c807c53e1427ed04573f6004c7f9e8b.tar.gz 2017-01-16_17:13:37-099ab6a43c807c53e1427ed04573f6004c7f9e8b.tar.bz2 2017-01-16_17:13:37-099ab6a43c807c53e1427ed04573f6004c7f9e8b.tar.xz 2017-01-16_17:13:37-099ab6a43c807c53e1427ed04573f6004c7f9e8b.zip | |
Silicoids
| -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) |
