Skip to content

Commit 3c2d45c

Browse files
Maleclypsethaelina
andauthored
Devourer evolution (#84918)
* Hekatonkhier * Hekatonkheire Co-authored-by: thaelina <[email protected]>
1 parent bb8f3d6 commit 3c2d45c

File tree

9 files changed

+541
-2
lines changed

9 files changed

+541
-2
lines changed

data/json/effects.json

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@
375375
"apply_message": "You're staggered off-balance.",
376376
"max_duration": "5 s",
377377
"base_mods": { "speed_mod": [ -20 ] },
378-
"removes_effects": [ "grabbing", "grabbing_2", "grabbing_3" ],
378+
"removes_effects": [ "grabbing", "grabbing_2", "grabbing_3", "grabbing_4", "grabbing_5" ],
379379
"rating": "bad",
380380
"show_in_info": true
381381
},
@@ -4002,7 +4002,29 @@
40024002
"type": "effect_type",
40034003
"id": "grabbing_3",
40044004
"name": [ "Grabbing" ],
4005-
"desc": [ "Grabbing another creature and holding them in place with a second appendage." ],
4005+
"desc": [ "Grabbing another creature and holding them in place with a third appendage." ],
4006+
"max_intensity": 1,
4007+
"show_in_info": true,
4008+
"//": "-dodge (can't really miss something holding you)",
4009+
"base_mods": { "dodge_mod": [ -8 ] },
4010+
"flags": [ "GRAB_FILTER" ]
4011+
},
4012+
{
4013+
"type": "effect_type",
4014+
"id": "grabbing_4",
4015+
"name": [ "Grabbing" ],
4016+
"desc": [ "Grabbing another creature and holding them in place with a fourth appendage." ],
4017+
"max_intensity": 1,
4018+
"show_in_info": true,
4019+
"//": "-dodge (can't really miss something holding you)",
4020+
"base_mods": { "dodge_mod": [ -8 ] },
4021+
"flags": [ "GRAB_FILTER" ]
4022+
},
4023+
{
4024+
"type": "effect_type",
4025+
"id": "grabbing_5",
4026+
"name": [ "Grabbing" ],
4027+
"desc": [ "Grabbing another creature and holding them in place with a fifth appendage." ],
40064028
"max_intensity": 1,
40074029
"show_in_info": true,
40084030
"//": "-dodge (can't really miss something holding you)",

data/json/jmath.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{
3+
"type": "jmath_function",
4+
"id": "scaling_factor",
5+
"num_args": 1,
6+
"return": "( ( _0 + 10) / 20 )"
7+
}
8+
]

data/json/monster_special_attacks/monster_attacks.json

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,103 @@
111111
"no_dmg_msg_u": "%1$s grabs your %2$s with its other hand!",
112112
"no_dmg_msg_npc": "%1$s grabs <npcname>'s %2$s with its other hand!"
113113
},
114+
{
115+
"type": "monster_attack",
116+
"attack_type": "melee",
117+
"id": "grab_4",
118+
"cooldown": 0,
119+
"damage_max_instance": [ { "damage_type": "bash", "amount": 0 } ],
120+
"grab": true,
121+
"grab_data": { "grab_effect": "grabbed" },
122+
"condition": { "and": [ { "u_has_flag": "GRAB_FILTER" }, { "npc_has_flag": "GRAB" }, { "not": { "u_has_effect": "grabbing_4" } } ] },
123+
"//": "We can't count grab filters, so grabbing 3 works as a soft cooldown",
124+
"self_effects_onhit": [ { "id": "grabbing_4", "duration": 150, "permanent": false } ],
125+
"hit_dmg_u": "%1$s grabs your %2$s with its other hand!",
126+
"hit_dmg_npc": "%1$s grabs <npcname>'s %2$s with its other hand!",
127+
"miss_msg_u": "%s tries to grab you, but you dodge!",
128+
"miss_msg_npc": "%s tries to grab <npcname>, but they dodge!",
129+
"no_dmg_msg_u": "%1$s grabs your %2$s with its other hand!",
130+
"no_dmg_msg_npc": "%1$s grabs <npcname>'s %2$s with its other hand!"
131+
},
132+
{
133+
"type": "monster_attack",
134+
"attack_type": "melee",
135+
"id": "grab_5",
136+
"cooldown": 0,
137+
"damage_max_instance": [ { "damage_type": "bash", "amount": 0 } ],
138+
"grab": true,
139+
"grab_data": { "grab_effect": "grabbed" },
140+
"condition": { "and": [ { "u_has_flag": "GRAB_FILTER" }, { "npc_has_flag": "GRAB" }, { "not": { "u_has_effect": "grabbing_5" } } ] },
141+
"//": "We can't count grab filters, so grabbing 3 works as a soft cooldown",
142+
"self_effects_onhit": [ { "id": "grabbing_5", "duration": 150, "permanent": false } ],
143+
"hit_dmg_u": "%1$s grabs your %2$s with its other hand!",
144+
"hit_dmg_npc": "%1$s grabs <npcname>'s %2$s with its other hand!",
145+
"miss_msg_u": "%s tries to grab you, but you dodge!",
146+
"miss_msg_npc": "%s tries to grab <npcname>, but they dodge!",
147+
"no_dmg_msg_u": "%1$s grabs your %2$s with its other hand!",
148+
"no_dmg_msg_npc": "%1$s grabs <npcname>'s %2$s with its other hand!"
149+
},
150+
{
151+
"type": "monster_attack",
152+
"id": "hekatonkheire_rend",
153+
"attack_type": "eoc",
154+
"cooldown": 1,
155+
"range": 1,
156+
"eoc": [ "EOC_HEKATONKHEIRES_RENDING_GRAB_INIT" ]
157+
},
158+
{
159+
"type": "effect_on_condition",
160+
"id": "EOC_HEKATONKHEIRES_RENDING_GRAB_INIT",
161+
"effect": [
162+
{ "math": [ "u_grappled = 0" ] },
163+
{
164+
"run_eocs": [
165+
"EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE",
166+
"EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE2",
167+
"EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE3",
168+
"EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE4",
169+
"EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE5",
170+
"EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLEDAMAGE_CAST"
171+
]
172+
}
173+
]
174+
},
175+
{
176+
"type": "effect_on_condition",
177+
"id": "EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE",
178+
"condition": { "u_has_effect": "grabbing" },
179+
"effect": [ { "math": [ "u_grappled += 1" ] }, { "run_eocs": "EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE2" } ]
180+
},
181+
{
182+
"type": "effect_on_condition",
183+
"id": "EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE2",
184+
"condition": { "u_has_effect": "grabbing_2" },
185+
"effect": [ { "math": [ "u_grappled += 1" ] } ]
186+
},
187+
{
188+
"type": "effect_on_condition",
189+
"id": "EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE3",
190+
"condition": { "u_has_effect": "grabbing_3" },
191+
"effect": [ { "math": [ "u_grappled += 1" ] } ]
192+
},
193+
{
194+
"type": "effect_on_condition",
195+
"id": "EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE4",
196+
"condition": { "u_has_effect": "grabbing_4" },
197+
"effect": [ { "math": [ "u_grappled += 1" ] } ]
198+
},
199+
{
200+
"type": "effect_on_condition",
201+
"id": "EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLE5",
202+
"condition": { "u_has_effect": "grabbing_5" },
203+
"effect": [ { "math": [ "u_grappled += 1" ] } ]
204+
},
205+
{
206+
"type": "effect_on_condition",
207+
"id": "EOC_HEKATONKHEIRES_RENDING_GRAB_CHECK_GRAPPLEDAMAGE_CAST",
208+
"condition": { "math": [ "u_grappled > 1" ] },
209+
"effect": [ { "u_cast_spell": { "id": "HEKATONKHEIRE_REND_AND_TEAR" } } ]
210+
},
114211
{
115212
"type": "monster_attack",
116213
"attack_type": "melee",
@@ -335,6 +432,23 @@
335432
"miss_msg_u": "%s's head extends to bite you, but you dodge and the head sails past!",
336433
"miss_msg_npc": "%s's head extends to bite <npcname>, but they dodge and the head sails past!"
337434
},
435+
{
436+
"type": "monster_attack",
437+
"attack_type": "bite",
438+
"id": "stretch_bite_clone",
439+
"cooldown": 10,
440+
"move_cost": 300,
441+
"//": "No stun on miss/obstacle unlike in the hardcoded attack, raised movecost to compensate",
442+
"range": 3,
443+
"damage_max_instance": [ { "damage_type": "stab", "amount": 9 } ],
444+
"min_mul": 0.3,
445+
"hit_dmg_u": "%1$s's head shoots out, and its teeth sink into your %2$s!",
446+
"hit_dmg_npc": "%1$s's head shoots out, and its teeth sink into <npcname>!",
447+
"no_dmg_msg_u": "%1$s's head hits your %2$s, but glances off your armor.",
448+
"no_dmg_msg_npc": "%1$s's head hits <npcname>, but glances off their armor.",
449+
"miss_msg_u": "%s's head extends to bite you, but you dodge and the head sails past!",
450+
"miss_msg_npc": "%s's head extends to bite <npcname>, but they dodge and the head sails past!"
451+
},
338452
{
339453
"type": "monster_attack",
340454
"attack_type": "melee",
@@ -483,6 +597,40 @@
483597
"dodgeable": true,
484598
"blockable": true
485599
},
600+
{
601+
"type": "monster_attack",
602+
"attack_type": "melee",
603+
"id": "multi_scratch",
604+
"attack_amount": [ 1, 5 ],
605+
"cooldown": 20,
606+
"move_cost": 150,
607+
"damage_max_instance": [ { "damage_type": "cut", "amount": 8 } ],
608+
"hit_dmg_u": "%1$s claws at your %2$s!",
609+
"hit_dmg_npc": "%1$s claws at <npcname>!",
610+
"miss_msg_u": "%1$s claws at you, but you dodge!",
611+
"miss_msg_npc": "%1$s tries to claw at <npcname>, but they dodge!",
612+
"no_dmg_msg_u": "%1$s claws at your %2$s, but fails to penetrate armor.",
613+
"no_dmg_msg_npc": "%1$s tries to claw at <npcname>, but fails to penetrate armor.",
614+
"dodgeable": true,
615+
"blockable": true
616+
},
617+
{
618+
"type": "monster_attack",
619+
"attack_type": "melee",
620+
"id": "multi_scratch_clone",
621+
"attack_amount": [ 1, 3 ],
622+
"cooldown": 20,
623+
"move_cost": 150,
624+
"damage_max_instance": [ { "damage_type": "cut", "amount": 5 } ],
625+
"hit_dmg_u": "%1$s claws at your %2$s!",
626+
"hit_dmg_npc": "%1$s claws at <npcname>!",
627+
"miss_msg_u": "%1$s claws at you, but you dodge!",
628+
"miss_msg_npc": "%1$s tries to claw at <npcname>, but they dodge!",
629+
"no_dmg_msg_u": "%1$s claws at your %2$s, but fails to penetrate armor.",
630+
"no_dmg_msg_npc": "%1$s tries to claw at <npcname>, but fails to penetrate armor.",
631+
"dodgeable": true,
632+
"blockable": true
633+
},
486634
{
487635
"type": "monster_attack",
488636
"attack_type": "melee",

data/json/monster_special_attacks/spells.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,27 @@
485485
"max_duration": 2000,
486486
"extra_effects": [ { "id": "hit_and_run", "hit_self": true } ]
487487
},
488+
{
489+
"type": "SPELL",
490+
"id": "HEKATONKHEIRE_REND_AND_TEAR",
491+
"name": { "str": "Rend and Tear", "//~": "NO_I18N" },
492+
"description": { "str": "Begins drawing and quartering the victim.", "//~": "NO_I18N" },
493+
"base_casting_time": 0,
494+
"effect": "attack",
495+
"shape": "blast",
496+
"valid_targets": [ "hostile" ],
497+
"flags": [ "LOUD", "SPLIT_DAMAGE", "RANDOM_DAMAGE" ],
498+
"damage_type": "cut",
499+
"max_level": 1,
500+
"min_damage": { "math": [ "2 * scaling_factor(u_grappled * 4)" ] },
501+
"max_damage": { "math": [ "2 * scaling_factor(u_grappled * 6)" ] },
502+
"min_range": 1,
503+
"max_range": 1,
504+
"range_increment": 1,
505+
"min_aoe": 1,
506+
"max_aoe": 1,
507+
"aoe_increment": 1
508+
},
488509
{
489510
"type": "SPELL",
490511
"id": "hit_and_run",

data/json/monstergroups/zombie_upgrades.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,17 @@
2929
{ "monster": "mon_zombie_pupa_decoy", "weight": 10 }
3030
]
3131
},
32+
{
33+
"type": "monstergroup",
34+
"id": "GROUP_ZOMBIE_DEVOURER_UPGRADE",
35+
"default": "mon_devourer",
36+
"//": "devourer zombie upgrades",
37+
"monsters": [
38+
{ "monster": "mon_devourer", "weight": 500 },
39+
{ "monster": "mon_devourer_hekatonkheire", "weight": 5 },
40+
{ "monster": "mon_devourer_daitya", "weight": 5 }
41+
]
42+
},
3243
{
3344
"type": "monstergroup",
3445
"id": "GROUP_ZOMBIE_CRAWLER_UPGRADE",

0 commit comments

Comments
 (0)