Skip to content

Commit

Permalink
[MoM] Add two psionic amalgamations (#79701)
Browse files Browse the repository at this point in the history
* add Whispering Amalgamation

* Spelling

* Add Guardian amalgamation

* Why does nothing work right?

* Various cleanup (monsters still ignoring basic functionality)

* Increase Whispering Amalgamation Mindsight

* Add monsters to GROUP_AMALGAMATION_SMALL

* Fix whispering amalgamation

* Try to fix guardian's inertial barrier application

* Switch guardian power to EoC for easier control

* 30 -> 20

* Add missing shape

* Initial power runs an EoC, it does not need extra effects

* Fix guardian amalgamations
  • Loading branch information
Standing-Storm authored Feb 19, 2025
1 parent 9c2acad commit 0021a43
Show file tree
Hide file tree
Showing 6 changed files with 262 additions and 1 deletion.
46 changes: 46 additions & 0 deletions data/mods/MindOverMatter/effects/effects_monster.json
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@
"desc": [ "A barrier of telekinetic force is protecting you." ],
"show_in_info": true,
"flags": [ "TELEKIN_SHIELD" ],
"removes_effects": [ "effect_monster_inertial_barrier" ],
"enchantments": [
{
"incoming_damage_mod": [
Expand All @@ -287,6 +288,39 @@
"show_in_info": true,
"max_intensity": 20
},
{
"type": "effect_type",
"id": "effect_whispering_amalgamation_whispers",
"name": [ "Maddening Whispers" ],
"desc": [ "Your mind is filled with whispers just below the threshold of understanding, making it almost impossible to think." ],
"apply_message": "A chorus of whispers just below the threshold of understanding fills your mind.",
"remove_message": "The whispers finally fall silent",
"show_in_info": true,
"max_duration": "5 seconds",
"//": "It is deliberate that even if you kill the whispering amalgamation, the whispers can last a few seconds afterwards. Who, or what, is actually doing the whispering?",
"enchantments": [
{
"skills": [
{
"value": "metaphysics",
"add": {
"math": [
"-3 + u_has_proficiency('prof_concentration_basic') + u_has_proficiency('prof_concentration_intermediate') + u_has_proficiency('prof_concentration_master')"
]
}
}
]
},
{ "values": [ { "value": "PERCEPTION", "add": -2 } ] }
],
"limb_score_mods": [
{ "limb_score": "vision", "modifier": 0.75 },
{ "limb_score": "night_vis", "modifier": 0.75 },
{ "limb_score": "reaction", "modifier": 0.8 }
],
"immune_flags": [ "TEEPSHIELD" ],
"flags": [ "EFFECT_LIMB_SCORE_MOD" ]
},
{
"type": "effect_type",
"id": "effect_teleport_reactive_displacement_monster",
Expand Down Expand Up @@ -434,5 +468,17 @@
{ "str": "You are in constant communication with your allies, looking out for each other in combat.", "//~": "NO_I18N" }
],
"base_mods": { "bash_mod": [ 1.5 ], "cut_mod": [ 1.5 ], "dodge_mod": [ 1.5 ], "hit_mod": [ 1.5 ] }
},
{
"type": "effect_type",
"id": "effect_amalgamation_telekinetic_shielder_counter",
"//": "Hidden counter, used to prevent the guardian amalgamation from shielding too many targets at once.",
"name": [ "" ],
"desc": [ "" ],
"max_intensity": 5,
"int_add_val": 1,
"int_decay_step": -1,
"int_decay_tick": 60,
"int_decay_remove": true
}
]
2 changes: 1 addition & 1 deletion data/mods/MindOverMatter/jmath.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
"id": "concentration_trait_bonuses",
"num_args": 0,
"//": "Effects with an intelligence penalty have not been included below to avoid double counting",
"return": "(u_has_trait('CONCENTRATION_GOOD')) + (u_has_trait('CONCENTRATION_BAD') ? -1 : 0) + (u_has_trait('INT_ALPHA')) + (u_has_trait('NOMAD2') ? -1 : 0) + (u_has_trait('NOMAD3') ? -1 : 0) + (u_has_trait('CONCENTRATION_DEBUG') ? 50 : 0) + (u_has_proficiency('prof_concentration_basic')) + (u_has_proficiency('prof_concentration_intermediate')) + (u_has_proficiency('prof_concentration_master') * 2) + (u_effect_intensity('effect_disease_psionic_drain') > 4 ? -1 : 0) + (u_effect_intensity('effect_disease_psionic_drain') > 10 ? -1 : 0) + (u_effect_intensity('hallu') > 0 ? -1 : 0) + (u_effect_intensity('winded') > 0 ? -2 : 0) + (u_effect_intensity('nausea') > 0 ? -1 : 0) + (u_effect_intensity('nausea') > 3 ? -1 : 0) + (u_effect_intensity('cold') > 1 ? -1 : 0) + (u_effect_intensity('hot') > 1 ? -1 : 0) + (u_effect_intensity('asthma') > 0 ? -3 : 0) + (u_effect_intensity('datura') > 0 ? -3 : 0) + (u_effect_intensity('dazed') > 0 ? -2 : 0) + (u_effect_intensity('psi_dazed') > 0 ? -2 : 0) + (u_effect_intensity('psi_dazed_zap') > 0 ? -1 : 0) + (u_effect_intensity('downed') > 0 ? -2 : 0) + (u_effect_intensity('boomered') > 0 ? -1 : 0) + (u_effect_intensity('conjunctivitis') > 0 ? -1 : 0) + (u_effect_intensity('teargas') > 0 ? -3 : 0) + (u_effect_intensity('smoke_eyes') > 0 ? -1 : 0) + (u_effect_intensity('smoke_lungs') > 0 ? -2 : 0)"
"return": "(u_has_trait('CONCENTRATION_GOOD')) + (u_has_trait('CONCENTRATION_BAD') ? -1 : 0) + (u_has_trait('INT_ALPHA')) + (u_has_trait('NOMAD2') ? -1 : 0) + (u_has_trait('NOMAD3') ? -1 : 0) + (u_has_trait('CONCENTRATION_DEBUG') ? 50 : 0) + (u_has_proficiency('prof_concentration_basic')) + (u_has_proficiency('prof_concentration_intermediate')) + (u_has_proficiency('prof_concentration_master') * 2) + (u_effect_intensity('effect_disease_psionic_drain') > 4 ? -1 : 0) + (u_effect_intensity('effect_disease_psionic_drain') > 10 ? -1 : 0) + (u_effect_intensity('hallu') > 0 ? -1 : 0) + (u_effect_intensity('winded') > 0 ? -2 : 0) + (u_effect_intensity('nausea') > 0 ? -1 : 0) + (u_effect_intensity('nausea') > 3 ? -1 : 0) + (u_effect_intensity('cold') > 1 ? -1 : 0) + (u_effect_intensity('hot') > 1 ? -1 : 0) + (u_effect_intensity('asthma') > 0 ? -3 : 0) + (u_effect_intensity('datura') > 0 ? -3 : 0) + (u_effect_intensity('dazed') > 0 ? -2 : 0) + (u_effect_intensity('psi_dazed') > 0 ? -2 : 0) + (u_effect_intensity('psi_dazed_zap') > 0 ? -1 : 0) + (u_effect_intensity('downed') > 0 ? -2 : 0) + (u_effect_intensity('boomered') > 0 ? -1 : 0) + (u_effect_intensity('conjunctivitis') > 0 ? -1 : 0) + (u_effect_intensity('teargas') > 0 ? -3 : 0) + (u_effect_intensity('smoke_eyes') > 0 ? -1 : 0) + (u_effect_intensity('smoke_lungs') > 0 ? -2 : 0) + (u_effect_intensity('effect_whispering_amalgamation_whispers') > 0 ? -2 : 0)"
},
{
"type": "jmath_function",
Expand Down
32 changes: 32 additions & 0 deletions data/mods/MindOverMatter/monstergroups/monstergroups_edited.json
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,38 @@
{ "monster": "mon_zombie_scientist_phavian", "weight": 5, "pack_size": [ 1, 2 ] }
]
},
{
"type": "monstergroup",
"id": "GROUP_MEATLAB",
"//": "Add additional base spawns so psionic amalgamations are rarer",
"monsters": [
{ "monster": "mon_null", "weight": 9 },
{ "monster": "mon_amalgamation_swarmer", "weight": 5, "pack_size": [ 1, 2 ] },
{ "monster": "mon_meat_cocoon_tiny", "weight": 5, "pack_size": [ 1, 2 ] },
{ "monster": "mon_meat_cocoon_small", "weight": 2 },
{ "monster": "mon_amalgamation_spotter", "weight": 2 },
{ "monster": "mon_amalgamation_corroder", "weight": 2 },
{ "monster": "mon_amalgamation_jumper", "pack_size": [ 1, 2 ], "weight": 1 },
{ "monster": "mon_amalgamation_soldier", "weight": 1, "starts": "7 days" },
{ "monster": "mon_amalgamation_zapper", "weight": 1, "starts": "14 days" },
{ "monster": "mon_jabberwock", "weight": 1, "starts": "7 days" },
{ "monster": "mon_amalgamation_telepathic_distractor", "weight": 1, "starts": "28 days" },
{ "monster": "mon_amalgamation_telekinetic_shielder", "weight": 1, "starts": "28 days" }
]
},
{
"id": "GROUP_AMALGAMATION_SMALL",
"type": "monstergroup",
"//": "Add additional base spawns so psionic amalgamations are rarer",
"monsters": [
{ "monster": "mon_amalgamation_swarmer", "weight": 6, "pack_size": [ 1, 2 ] },
{ "monster": "mon_amalgamation_spotter", "weight": 2, "starts": "7 days" },
{ "monster": "mon_amalgamation_corroder", "weight": 4, "starts": "28 days" },
{ "monster": "mon_amalgamation_corroder", "weight": 6, "starts": "56 days" },
{ "monster": "mon_amalgamation_telepathic_distractor", "weight": 1, "starts": "28 days" },
{ "monster": "mon_amalgamation_telekinetic_shielder", "weight": 1, "starts": "28 days" }
]
},
{
"type": "monstergroup",
"id": "GROUP_NETHER_REALITY_TEAR_FIELD",
Expand Down
88 changes: 88 additions & 0 deletions data/mods/MindOverMatter/monsters/amalgamations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
[
{
"type": "MONSTER",
"id": "mon_amalgamation_telekinetic_shielder",
"copy-from": "mon_amalgamation_abstract_small",
"symbol": "ä",
"name": { "str": "guardian amalgamation" },
"description": "A four-legged creature with a crab-like shell, with two eyes on stubby stalks and a small mouth filled with sharp fangs. Three additional limbs with bulbous growths on their ends wave around, seemingly randomly except when they point briefly at one of the walking dead.",
"speed": 100,
"special_attacks": [
{
"type": "bite",
"cooldown": 3,
"move_cost": 150,
"damage_max_instance": [ { "damage_type": "cut", "amount": 15, "armor_penetration": 5 } ],
"hitsize_min": 4,
"min_mul": 0.5,
"max_mul": 1.2,
"infection_chance": 10,
"attack_upper": false
},
{
"id": "smash",
"attack_upper": false,
"throw_strength": 40,
"cooldown": { "math": [ "5 + rand(10)" ] },
"condition": {
"and": [
{ "not": { "u_has_flag": "NO_PSIONICS" } },
{ "math": [ "u_effect_intensity('effect_amalgamation_telekinetic_shielder_counter') == 0" ] }
]
}
},
{
"id": "psi_amalgamation_telekinetic_shielder_shield_other",
"type": "spell",
"spell_data": { "id": "amalgamation_telekinetic_shielder_shield_other_spell" },
"cooldown": { "math": [ "10 + rand(20)" ] },
"condition": {
"and": [
{ "not": { "u_has_flag": "NO_PSIONICS" } },
{ "math": [ "u_effect_intensity('effect_amalgamation_telekinetic_shielder_counter') < 4" ] }
]
},
"monster_message": "%1$s waves its three appendages in the air."
}
],
"tracking_distance": 8,
"extend": { "flags": [ "KEEP_DISTANCE" ] }
},
{
"type": "MONSTER",
"id": "mon_amalgamation_telepathic_distractor",
"copy-from": "mon_amalgamation_abstract_small",
"symbol": "ä",
"name": { "str": "whispering amalgamation" },
"description": "A smooth, round body skittering around on seven jointed legs, this abomination does not seem to have any sensory organs at all. When you look at it, you hear faint whispers in the back of your mind.",
"special_attacks": [
{
"id": "psi_whispering_amalgamation_telepathic_whispering",
"type": "spell",
"spell_data": { "id": "whispering_amalgamation_telepathic_whispering_spell" },
"cooldown": 2,
"condition": { "not": { "u_has_flag": "NO_PSIONICS" } },
"monster_message": ""
},
{
"id": "psi_whispering_amalgamation_apply_mindsight",
"type": "spell",
"spell_data": { "id": "whispering_amalgamation_apply_mindsight", "hit_self": true },
"cooldown": 1,
"allow_no_target": true,
"condition": {
"and": [
{ "not": { "u_has_flag": "NO_PSIONICS" } },
{
"or": [ { "not": { "u_has_effect": "eff_mind_seeing_bonus_30" } }, { "not": { "u_has_effect": "eff_mind_seeing_bonus_10" } } ]
}
]
},
"monster_message": ""
}
],
"vision_day": 5,
"tracking_distance": 8,
"extend": { "flags": [ "MIND_SEEING", "KEEP_DISTANCE" ] }
}
]
81 changes: 81 additions & 0 deletions data/mods/MindOverMatter/monsters/monster_eoc_spells.json
Original file line number Diff line number Diff line change
Expand Up @@ -486,5 +486,86 @@
"max_radius": 3
}
]
},
{
"type": "SPELL",
"id": "whispering_amalgamation_apply_mindsight",
"name": { "str": "Eater apply mindsight", "//~": "NO_I18N" },
"description": "Add the effect to give the whispering_amalgamation mindsight.",
"flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_PROJECTILE", "NO_EXPLOSION_SFX", "MUST_HAVE_CLASS_TO_LEARN" ],
"valid_targets": [ "self" ],
"max_level": 1,
"effect": "effect_on_condition",
"effect_str": "EOC_WHISPERING_AMALGAMATION_MINDSIGHT",
"shape": "blast",
"min_range": 0,
"max_range": 0,
"min_duration": 900000,
"max_duration": 900000
},
{
"type": "effect_on_condition",
"id": "EOC_WHISPERING_AMALGAMATION_MINDSIGHT",
"effect": [
{ "u_add_effect": "eff_mind_seeing_bonus_30", "duration": 9000 },
{ "u_add_effect": "eff_mind_seeing_bonus_10", "duration": 9000 }
]
},
{
"type": "SPELL",
"id": "amalgamation_telekinetic_shielder_shield_other_spell",
"name": { "str": "Inertial Barrier Guardian Amalgamation Shield Detector", "//~": "NO_I18N" },
"description": { "str": "Preps for using Inertial Barrier when a hostile target is detected.", "//~": "NO_I18N" },
"flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_PROJECTILE", "MUST_HAVE_CLASS_TO_LEARN" ],
"valid_targets": [ "hostile" ],
"max_level": 1,
"effect": "effect_on_condition",
"effect_str": "EOC_AMALGAMATION_TELEKINETIC_SHIELDER_APPLICATION",
"shape": "blast",
"min_damage": 0,
"max_damage": 0,
"min_range": 20,
"max_range": 20
},
{
"type": "effect_on_condition",
"id": "EOC_AMALGAMATION_TELEKINETIC_SHIELDER_APPLICATION",
"condition": { "math": [ "u_mon_species_nearby('ZOMBIE', 'FERAL', 'radius': 25, 'attitude': 'both') > 0" ] },
"//": "Until monsters can actually use spells on allies, the buff has to check from the target's location.",
"effect": [
{ "u_cast_spell": { "id": "amalgamation_telekinetic_shielder_shield_other_spell_self_casting", "hit_self": true } },
{ "npc_add_effect": "effect_amalgamation_telekinetic_shielder_counter", "duration": 60 }
]
},
{
"id": "amalgamation_telekinetic_shielder_shield_other_spell_self_casting",
"type": "SPELL",
"name": { "str": "Inertial Barrier Guardian Amalgamation Random Self Spell", "//~": "NO_I18N" },
"description": { "str": "I don't know why this spell is necessary, but it is.", "//~": "NO_I18N" },
"valid_targets": [ "self" ],
"flags": [ "NO_EXPLOSION_SFX", "SILENT" ],
"effect": "noise",
"min_damage": 0,
"max_damage": 0,
"shape": "blast",
"extra_effects": [ { "id": "amalgamation_telekinetic_shielder_shield_other_spell_apply_shield" } ]
},
{
"type": "SPELL",
"id": "amalgamation_telekinetic_shielder_shield_other_spell_apply_shield",
"name": { "str": "Inertial Barrier Guardian Amalgamation Shield Applicator", "//~": "NO_I18N" },
"description": { "str": "The actual power that applies Inertial Barrier to an ally.", "//~": "NO_I18N" },
"flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_PROJECTILE", "RANDOM_TARGET", "RANDOM_DURATION" ],
"valid_targets": [ "hostile" ],
"max_level": 1,
"effect": "attack",
"effect_str": "effect_monster_inertial_barrier",
"shape": "blast",
"min_range": 25,
"max_range": 25,
"min_duration": 4500,
"max_duration": 7500,
"targeted_monster_species": [ "ZOMBIE", "FERAL" ],
"ignored_monster_species": [ "PSI_NULL" ]
}
]
14 changes: 14 additions & 0 deletions data/mods/MindOverMatter/monsters/monsters_spells.json
Original file line number Diff line number Diff line change
Expand Up @@ -1042,6 +1042,20 @@
"min_damage": 1,
"max_damage": 4
},
{
"id": "whispering_amalgamation_telepathic_whispering_spell",
"type": "SPELL",
"name": { "str": "[Ψ]Telepathic Amalgamation Whispering", "//~": "NO_I18N" },
"description": { "str": "Amalgamation whispers into your mind, distracting you.", "//~": "NO_I18N" },
"valid_targets": [ "hostile" ],
"flags": [ "SILENT", "NO_PROJECTILE" ],
"effect": "attack",
"effect_str": "effect_whispering_amalgamation_whispers",
"shape": "blast",
"min_range": 30,
"min_duration": 300,
"max_duration": 300
},
{
"id": "telepathic_shrieking_monster",
"type": "SPELL",
Expand Down

0 comments on commit 0021a43

Please sign in to comment.