From 073af351761ba9b1ecc6f04614bda04f5e862f87 Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Wed, 8 Mar 2023 15:10:07 +0100 Subject: [PATCH 1/8] Fleshtaker mimicry mob A simple concept of a mob taking over other mindless mobs to strengthen and protect itself Work in progress, --- .../mob/living/simple_mob/subtypes/fleshtaker | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker new file mode 100644 index 0000000000..6bf4c0ee02 --- /dev/null +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker @@ -0,0 +1,57 @@ +/* +Concept: Mind controlling parasite. Hostile to all mobs. +On attack if our target is a simple mob, and has no mind. +We simply engulf them, evicerating their body and stealing their form as well as some of their stats. +However we dont gain special attacks and verbs, for example, if we evicerate a dragon we dont get a breath attack suddnely. +Only physical attributes are copied. +*/ +/mob/living/simple_mob/fleshtaker + name = "" + desc = "" + pixel_x = -15 + //Lets write down our base stats so we can revert easily + var/list/base_values = list( "name" = "Fleshtaker", + "desc" = "A strange creature", + "icon" = 'icons/mob/synxmanyvoices.dmi', + "icon_living" = "939_living", + "icon_dead" = "939_dead", + "pixel_x" = -15, + ) + + ai_holder_type = /datum/ai_holder/simple_mob/melee/pack_mob //A pack of these would be absolutely terrifying. + var/flesh_mimic = FALSE //are we currently posing as something else? + +/mob/living/simple_mob/fleshtaker/New() + ..() + base_values["pixel_y"] = pixel_y //record our default y pixel offset for later reversion + revert_mimic() + +/mob/living/simple_mob/fleshtaker/proc + //copy stats from our engulfed target + /flesh_mimic(var/mob/living/simple_mob/target) + name = target.name + desc = target.desc + icon = target.icon + icon_living = target.icon_living + icon_dead = target.icon_dead + pixel_x = target.pixel_x + pixel_x = target.pixel_y + //steal base stats + //possibly steal vorgans + //initial spawn set, or when losing our host, reset + /revert_mimic() + name = base_values["name"] + desc = base_values["desc"] + icon = base_values["icon"] + icon_living = base_values["icon_living"] + icon_dead = base_values["icon_dead"] + pixel_x = base_values["pixel_x"] + pixel_y = base_values["pixel_y"] + +/mob/living/simple_mob/fleshtaker/apply_melee_effects(var/atom/A) + if(istype(A,/mob/living/simple_mob) && !flesh_mimic) + var/mob/living/simple_mob/M = A + if(!M.mind) + src.flesh_mimic(M) + M.gib() + ..() From bc516a407e125cf76ee6aec28bdcb5231e688acc Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Wed, 8 Mar 2023 22:36:29 +0100 Subject: [PATCH 2/8] fix filename and restructure for mapping ease --- .../subtypes/{fleshtaker => fleshtaker.dm} | 63 ++++++++++--------- vorestation.dme | 1 + 2 files changed, 34 insertions(+), 30 deletions(-) rename modular_chomp/code/modules/mob/living/simple_mob/subtypes/{fleshtaker => fleshtaker.dm} (52%) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm similarity index 52% rename from modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker rename to modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm index 6bf4c0ee02..3ccffe22dd 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm @@ -1,52 +1,55 @@ /* Concept: Mind controlling parasite. Hostile to all mobs. On attack if our target is a simple mob, and has no mind. -We simply engulf them, evicerating their body and stealing their form as well as some of their stats. +We simply engulf them, evicerating their body and stealing their form as well as some of their stats. However we dont gain special attacks and verbs, for example, if we evicerate a dragon we dont get a breath attack suddnely. Only physical attributes are copied. */ /mob/living/simple_mob/fleshtaker - name = "" - desc = "" + name = "Fleshtaker" + desc = "A strange creature" + icon = 'icons/mob/synxmanyvoices.dmi' + icon_living = "939_living" + icon_dead = "939_dead" pixel_x = -15 //Lets write down our base stats so we can revert easily - var/list/base_values = list( "name" = "Fleshtaker", - "desc" = "A strange creature", - "icon" = 'icons/mob/synxmanyvoices.dmi', - "icon_living" = "939_living", - "icon_dead" = "939_dead", - "pixel_x" = -15, - ) - + var/list/base_values = list() + ai_holder_type = /datum/ai_holder/simple_mob/melee/pack_mob //A pack of these would be absolutely terrifying. var/flesh_mimic = FALSE //are we currently posing as something else? /mob/living/simple_mob/fleshtaker/New() ..() + base_values["name"] = name + base_values["desc"] = desc + base_values["icon"] = icon + base_values["icon_living"] = icon_living + base_values["icon_dead"] = icon_dead + base_values["pixel_x"] = pixel_x base_values["pixel_y"] = pixel_y //record our default y pixel offset for later reversion revert_mimic() -/mob/living/simple_mob/fleshtaker/proc + //copy stats from our engulfed target - /flesh_mimic(var/mob/living/simple_mob/target) - name = target.name - desc = target.desc - icon = target.icon - icon_living = target.icon_living - icon_dead = target.icon_dead - pixel_x = target.pixel_x - pixel_x = target.pixel_y - //steal base stats - //possibly steal vorgans +/mob/living/simple_mob/fleshtaker/proc/flesh_mimic(var/mob/living/simple_mob/target) + name = target.name + desc = target.desc + icon = target.icon + icon_living = target.icon_living + icon_dead = target.icon_dead + pixel_x = target.pixel_x + pixel_x = target.pixel_y + //steal base stats + //possibly steal vorgans //initial spawn set, or when losing our host, reset - /revert_mimic() - name = base_values["name"] - desc = base_values["desc"] - icon = base_values["icon"] - icon_living = base_values["icon_living"] - icon_dead = base_values["icon_dead"] - pixel_x = base_values["pixel_x"] - pixel_y = base_values["pixel_y"] +/mob/living/simple_mob/fleshtaker/proc/revert_mimic() + name = base_values["name"] + desc = base_values["desc"] + icon = base_values["icon"] + icon_living = base_values["icon_living"] + icon_dead = base_values["icon_dead"] + pixel_x = base_values["pixel_x"] + pixel_y = base_values["pixel_y"] /mob/living/simple_mob/fleshtaker/apply_melee_effects(var/atom/A) if(istype(A,/mob/living/simple_mob) && !flesh_mimic) diff --git a/vorestation.dme b/vorestation.dme index 97b66225be..a54518d09b 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4607,6 +4607,7 @@ #include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob_abilities.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\teppi.dm" +#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\fleshtaker.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph_abilities.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\animal\space\alien.dm" From c28d87a1e7cb266010c8587891bd8db86ce15e55 Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Wed, 8 Mar 2023 22:46:15 +0100 Subject: [PATCH 3/8] Damage and Health theft --- .../mob/living/simple_mob/subtypes/fleshtaker.dm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm index 3ccffe22dd..17537cc908 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm @@ -27,7 +27,9 @@ Only physical attributes are copied. base_values["icon_dead"] = icon_dead base_values["pixel_x"] = pixel_x base_values["pixel_y"] = pixel_y //record our default y pixel offset for later reversion - revert_mimic() + base_values["melee_damage_lower"] = melee_damage_lower + base_values["melee_damage_upper"] = melee_damage_upper + base_values["maxHealth"] = maxHealth //copy stats from our engulfed target @@ -39,9 +41,14 @@ Only physical attributes are copied. icon_dead = target.icon_dead pixel_x = target.pixel_x pixel_x = target.pixel_y + melee_damage_lower = target.melee_damage_lower + melee_damage_upper = target.melee_damage_upper + maxHealth = target.maxHealth + health = maxHealth //steal base stats //possibly steal vorgans - //initial spawn set, or when losing our host, reset + +//reset to original values /mob/living/simple_mob/fleshtaker/proc/revert_mimic() name = base_values["name"] desc = base_values["desc"] @@ -50,6 +57,10 @@ Only physical attributes are copied. icon_dead = base_values["icon_dead"] pixel_x = base_values["pixel_x"] pixel_y = base_values["pixel_y"] + melee_damage_lower = base_values["melee_damage_lower"] + melee_damage_upper = base_values["melee_damage_upper"] + maxHealth = base_values["maxHealth"] + health = maxHealth /mob/living/simple_mob/fleshtaker/apply_melee_effects(var/atom/A) if(istype(A,/mob/living/simple_mob) && !flesh_mimic) From 32394ec3c1fd00180ca36b6d5cac7226d175f2ce Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Wed, 8 Mar 2023 23:05:29 +0100 Subject: [PATCH 4/8] faction addition --- .../code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm index 17537cc908..a4089d3efe 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm @@ -6,6 +6,7 @@ However we dont gain special attacks and verbs, for example, if we evicerate a d Only physical attributes are copied. */ /mob/living/simple_mob/fleshtaker + faction = "Fleshtaker" name = "Fleshtaker" desc = "A strange creature" icon = 'icons/mob/synxmanyvoices.dmi' From 99188fda9379014f5a572cfdd7aeb128d3139f1c Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Wed, 8 Mar 2023 23:08:02 +0100 Subject: [PATCH 5/8] update icon on revert and theft --- .../code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm index a4089d3efe..56a97538e2 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm @@ -48,6 +48,7 @@ Only physical attributes are copied. health = maxHealth //steal base stats //possibly steal vorgans + update_icon() //reset to original values /mob/living/simple_mob/fleshtaker/proc/revert_mimic() @@ -62,11 +63,12 @@ Only physical attributes are copied. melee_damage_upper = base_values["melee_damage_upper"] maxHealth = base_values["maxHealth"] health = maxHealth + update_icon() /mob/living/simple_mob/fleshtaker/apply_melee_effects(var/atom/A) if(istype(A,/mob/living/simple_mob) && !flesh_mimic) var/mob/living/simple_mob/M = A if(!M.mind) - src.flesh_mimic(M) + flesh_mimic(M) M.gib() ..() From 50ec79f9cc54225f0028ab5c3ca614916b7c792a Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Fri, 10 Mar 2023 00:29:40 +0100 Subject: [PATCH 6/8] Fixing some Icon issuees --- .../code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm index 56a97538e2..0d854f5a8e 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm @@ -31,6 +31,7 @@ Only physical attributes are copied. base_values["melee_damage_lower"] = melee_damage_lower base_values["melee_damage_upper"] = melee_damage_upper base_values["maxHealth"] = maxHealth + icon_state = icon_living //copy stats from our engulfed target @@ -46,6 +47,7 @@ Only physical attributes are copied. melee_damage_upper = target.melee_damage_upper maxHealth = target.maxHealth health = maxHealth + icon_state = target.icon_state //steal base stats //possibly steal vorgans update_icon() @@ -63,6 +65,7 @@ Only physical attributes are copied. melee_damage_upper = base_values["melee_damage_upper"] maxHealth = base_values["maxHealth"] health = maxHealth + icon_state = icon_living update_icon() /mob/living/simple_mob/fleshtaker/apply_melee_effects(var/atom/A) From bd21e7327010059dfc2ef38ef5e311111907eb20 Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Fri, 10 Mar 2023 00:37:26 +0100 Subject: [PATCH 7/8] armor theft --- .../code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm index 0d854f5a8e..3830bb4a77 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm @@ -31,6 +31,7 @@ Only physical attributes are copied. base_values["melee_damage_lower"] = melee_damage_lower base_values["melee_damage_upper"] = melee_damage_upper base_values["maxHealth"] = maxHealth + base_values["armor"] = armor icon_state = icon_living @@ -48,6 +49,7 @@ Only physical attributes are copied. maxHealth = target.maxHealth health = maxHealth icon_state = target.icon_state + armor = target.armor //steal base stats //possibly steal vorgans update_icon() @@ -66,6 +68,7 @@ Only physical attributes are copied. maxHealth = base_values["maxHealth"] health = maxHealth icon_state = icon_living + armor = base_values["armor"] update_icon() /mob/living/simple_mob/fleshtaker/apply_melee_effects(var/atom/A) From cb088f570411b516a3467159afc0bd9bea4250de Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Fri, 10 Mar 2023 01:22:26 +0100 Subject: [PATCH 8/8] forgot to toggle the flesh_mimic flag --- .../code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm index 3830bb4a77..b55fc832eb 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/fleshtaker.dm @@ -37,6 +37,7 @@ Only physical attributes are copied. //copy stats from our engulfed target /mob/living/simple_mob/fleshtaker/proc/flesh_mimic(var/mob/living/simple_mob/target) + flesh_mimic = TRUE name = target.name desc = target.desc icon = target.icon @@ -56,6 +57,7 @@ Only physical attributes are copied. //reset to original values /mob/living/simple_mob/fleshtaker/proc/revert_mimic() + flesh_mimic = FALSE name = base_values["name"] desc = base_values["desc"] icon = base_values["icon"]