summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregor Kleen <pngwjpgh@users.noreply.github.com>2016-12-02 11:21:53 +0100
committerGregor Kleen <pngwjpgh@users.noreply.github.com>2016-12-02 11:21:53 +0100
commit099ab6a43c807c53e1427ed04573f6004c7f9e8b (patch)
tree1af60e7596cd12e3ffe717c51c0a643105b3903e
parent0b76dff6b75cc9ccf2a9b96ff12efce23e5c9ec0 (diff)
download2017-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.hs166
-rw-r--r--src/Sequence/Contact/Tests.hs3
-rw-r--r--src/Sequence/Contact/Types/Internal.hs41
-rw-r--r--src/Sequence/Utils.hs3
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
25import Data.Maybe 25import Data.Maybe
26import Data.Ratio 26import Data.Ratio
27import Data.ExtendedReal 27import Data.ExtendedReal
28import Data.Monoid
28 29
29import Data.List 30import 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
468silicoid = 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
463childOfMu = human 556childOfMu = 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
772silicoidLarva = 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
797rSilicoid = 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
821megaSilicoid = 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)