A<8O_vmt)ij
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
diff --git a/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/crafting_recipes.dm b/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/crafting_recipes.dm
index bcb1b8eea8b0..f169df1807ad 100644
--- a/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/crafting_recipes.dm
+++ b/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/crafting_recipes.dm
@@ -24,7 +24,7 @@
name = "Implanting Flesh Device"
time = 50
reqs = list(/obj/item/stack/human_flesh = 10, /obj/item/knife/vamp = 1, /obj/item/reagent_containers/blood = 1)
- result = /obj/item/autosurgeon // DARKPACK TODO - Tzimisce autosurgeon
+ result = /obj/item/autosurgeon/vicissitude
category = CAT_TZIMISCE
/datum/crafting_recipe/tzi_floor
@@ -39,7 +39,7 @@
name = "Flesh Wall"
time = 50
reqs = list(/obj/item/stack/human_flesh = 2)
- result = /turf/closed/wall/mineral/iron // DARKPACK TODO - Tzimisce walls
+ result = /obj/structure/fleshwall
category = CAT_TZIMISCE
crafting_flags = CRAFT_CHECK_DENSITY
diff --git a/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/objects.dm b/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/objects.dm
deleted file mode 100644
index b6f8f00b4e64..000000000000
--- a/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/objects.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-/obj/item/ground_heir
- name = "bag of ground"
- desc = "Boghatyrskaya sila taitsa zdies'..."
- icon_state = "dirt"
- icon = 'modular_darkpack/modules/deprecated/icons/icons.dmi'
- ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
- w_class = WEIGHT_CLASS_SMALL
-
-// Why is this NOT a floor type.
-/obj/effect/decal/gut_floor
- name = "gut floor"
- icon = 'modular_darkpack/modules/walls/icons/floors.dmi'
- icon_state = "tzimisce_floor"
-
-/obj/effect/decal/gut_floor/Initialize(mapload)
- . = ..()
- if(isopenturf(get_turf(src)))
- var/turf/open/T = get_turf(src)
- if(T)
- T.slowdown = 1
-
-/obj/effect/decal/gut_floor/Destroy()
- . = ..()
- var/turf/open/T = get_turf(src)
- if(T)
- T.slowdown = initial(T.slowdown)
-
-/obj/structure/chair/old/tzimisce
- icon = 'modular_darkpack/modules/deprecated/icons/props.dmi'
- icon_state = "tzimisce_stool"
-
-/obj/item/guts
- name = "guts"
- desc = "Just blood and guts..."
- icon_state = "guts"
- icon = 'modular_darkpack/modules/deprecated/icons/items.dmi'
- ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
- w_class = WEIGHT_CLASS_SMALL
-
-/obj/item/spine
- name = "spine"
- desc = "If only I had control..."
- icon_state = "spine"
- icon = 'modular_darkpack/modules/deprecated/icons/items.dmi'
- ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
- w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/creatures.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/creatures.dm
similarity index 100%
rename from modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/creatures.dm
rename to modular_darkpack/modules/powers/code/discipline/vicissitude/creatures.dm
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/flesh_items.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/flesh_items.dm
new file mode 100644
index 000000000000..39358374dbf4
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/flesh_items.dm
@@ -0,0 +1,109 @@
+/datum/material/vicissitude_flesh
+ name = "flesh"
+ desc = "What remains of a person, when you really get down to it."
+ color = "#d8965b"
+ categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE)
+ sheet_type = /obj/item/stack/sheet/meat
+ value_per_unit = 0.05
+ beauty_modifier = -0.3
+ strength_modifier = 0.7
+ item_sound_override = 'sound/effects/meatslap.ogg'
+ turf_sound_override = FOOTSTEP_MEAT
+
+/obj/item/stack/human_flesh
+ name = "human flesh"
+ desc = "What the fuck..."
+ singular_name = "human flesh"
+ icon = 'modular_darkpack/modules/deprecated/icons/obj/stack_objects.dmi'
+ icon_state = "human"
+ ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
+ mats_per_unit = list(/datum/material/vicissitude_flesh = SHEET_MATERIAL_AMOUNT)
+ merge_type = /obj/item/stack/human_flesh
+ max_amount = 50
+
+/obj/item/stack/human_flesh/fifty
+ amount = 50
+
+/obj/item/stack/human_flesh/twenty
+ amount = 20
+
+/obj/item/stack/human_flesh/ten
+ amount = 10
+
+/obj/item/stack/human_flesh/five
+ amount = 5
+
+/obj/item/autosurgeon/organ/vicissitude
+ name = "little brother"
+ desc = "A talented fleshcrafted creature that can insert an implant or organ into its master without the hassle of extensive surgery. \
+ Its mouth is eagerly awaiting implants or organs. However, it's quite greedy, so a screwdriver must be used to pry away accidentally added items."
+ icon = 'modular_darkpack/modules/powers/icons/flesh_items.dmi'
+
+/obj/structure/fleshwall
+ name = "flesh wall"
+ desc = "Wall from FLESH."
+ icon = 'modular_darkpack/modules/powers/icons/flesh_items.dmi'
+ icon_state = "fleshwall"
+ plane = GAME_PLANE
+ layer = ABOVE_MOB_LAYER
+ anchored = TRUE
+ density = TRUE
+ max_integrity = 100
+
+/obj/structure/tzijelly
+ name = "jelly thing"
+ desc = "an important part of the meat matrix."
+ icon = 'modular_darkpack/modules/powers/icons/flesh_items.dmi'
+ icon_state = "tzijelly"
+ plane = GAME_PLANE
+ layer = ABOVE_MOB_LAYER
+ anchored = TRUE
+ density = TRUE
+ max_integrity = 100
+
+/obj/item/ground_heir
+ name = "bag of ground"
+ desc = "Boghatyrskaya sila taitsa zdies'..."
+ icon_state = "dirt"
+ icon = 'modular_darkpack/modules/deprecated/icons/icons.dmi'
+ ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
+ w_class = WEIGHT_CLASS_SMALL
+
+// Why is this NOT a floor type.
+/obj/effect/decal/gut_floor
+ name = "gut floor"
+ icon = 'modular_darkpack/modules/walls/icons/floors.dmi'
+ icon_state = "tzimisce_floor"
+
+/obj/effect/decal/gut_floor/Initialize(mapload)
+ . = ..()
+ if(isopenturf(get_turf(src)))
+ var/turf/open/T = get_turf(src)
+ if(T)
+ T.slowdown = 1
+
+/obj/effect/decal/gut_floor/Destroy()
+ . = ..()
+ var/turf/open/T = get_turf(src)
+ if(T)
+ T.slowdown = initial(T.slowdown)
+
+/obj/structure/chair/old/tzimisce
+ icon = 'modular_darkpack/modules/deprecated/icons/props.dmi'
+ icon_state = "tzimisce_stool"
+
+/obj/item/guts
+ name = "guts"
+ desc = "Just blood and guts..."
+ icon_state = "guts"
+ icon = 'modular_darkpack/modules/powers/icons/flesh_items.dmi'
+ ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/spine
+ name = "spine"
+ desc = "If only I had control..."
+ icon_state = "spine"
+ icon = 'modular_darkpack/modules/powers/icons/flesh_items.dmi'
+ ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
+ w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/fleshwalls.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/fleshwalls.dm
deleted file mode 100644
index 23112b415532..000000000000
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/fleshwalls.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/obj/structure/fleshwall
- name = "flesh wall"
- desc = "Wall from FLESH."
- icon = 'modular_darkpack/modules/deprecated/icons/icons.dmi'
- icon_state = "fleshwall"
- plane = GAME_PLANE
- layer = ABOVE_MOB_LAYER
- anchored = TRUE
- density = TRUE
- max_integrity = 100
-
-/obj/structure/tzijelly
- name = "jelly thing"
- desc = "an important part of the meat matrix."
- icon = 'modular_darkpack/modules/deprecated/icons/icons.dmi'
- icon_state = "tzijelly"
- plane = GAME_PLANE
- layer = ABOVE_MOB_LAYER
- anchored = TRUE
- density = TRUE
- max_integrity = 100
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/human_flesh.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/human_flesh.dm
deleted file mode 100644
index f023ec1e8299..000000000000
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/human_flesh.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/obj/item/stack/human_flesh
- name = "human flesh"
- desc = "What the fuck..."
- singular_name = "human flesh"
- icon = 'modular_darkpack/modules/deprecated/icons/obj/stack_objects.dmi'
- icon_state = "human"
- ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
- mats_per_unit = list(/datum/material/pizza = SHEET_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/human_flesh
- max_amount = 50
-
-/obj/item/stack/human_flesh/fifty
- amount = 50
-
-/obj/item/stack/human_flesh/twenty
- amount = 20
-
-/obj/item/stack/human_flesh/ten
- amount = 10
-
-/obj/item/stack/human_flesh/five
- amount = 5
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index 5edc00f74918..2e7720b79b2d 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -17,25 +17,6 @@
var/obj/item/organ/cyberimp/arm/toolkit/surgery/surgery_implant = new()
surgery_implant.Insert(owner)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_wall)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_stool)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_floor)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_eyes)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_implant)
-
-// Level 3
-/datum/discipline_power/vicissitude/bonecrafting/post_gain()
- . = ..()
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_trench)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_biter)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_fister)
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_tanker)
-
-// Level 4
-/datum/discipline_power/vicissitude/horrid_form/post_gain()
- . = ..()
- owner.mind?.teach_crafting_recipe(/datum/crafting_recipe/tzi_heart)
-
////////////////////////////////////////////////////////////////////////////////////////////
/datum/discipline_power/vicissitude
diff --git a/modular_darkpack/modules/powers/icons/flesh_items.dmi b/modular_darkpack/modules/powers/icons/flesh_items.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..7618d09d5454ca3508a69829612b48540f3cf624
GIT binary patch
literal 7200
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
literal 0
HcmV?d00001
diff --git a/tgstation.dme b/tgstation.dme
index e7d5355ea7d5..b78dd974c8c5 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -7089,9 +7089,7 @@
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\baali\holy_weakness.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\kiasyd\kiasyd.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\crafting_recipes.dm"
-#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\creatures.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\needs_home_soil.dm"
-#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\objects.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\tzimisce.dm"
#include "modular_darkpack\modules\languages\code\languages\arabic.dm"
#include "modular_darkpack\modules\languages\code\languages\armenian.dm"
@@ -7234,8 +7232,8 @@
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\path_of_blood.dm"
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\status_effects\blood_of_potency_effect.dm"
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\status_effects\blood_rage_status.dm"
-#include "modular_darkpack\modules\powers\code\discipline\vicissitude\fleshwalls.dm"
-#include "modular_darkpack\modules\powers\code\discipline\vicissitude\human_flesh.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\creatures.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\flesh_items.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\malleable_visage.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\shapeshift_forms.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\vicissitude.dm"
From 6c70335defdf09f7f78dc8ecb783e465308dbe5d Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Wed, 26 Nov 2025 12:41:58 +0200
Subject: [PATCH 011/104] RAHHH
---
.../code/discipline/vicissitude}/crafting_recipes.dm | 0
.../code/discipline/vicissitude/{ => objects}/creatures.dm | 0
.../discipline/vicissitude/{ => objects}/flesh_items.dm | 2 +-
tgstation.dme | 6 +++---
4 files changed, 4 insertions(+), 4 deletions(-)
rename modular_darkpack/modules/{kindred_species/code/vampire_clan/clans/tzimisce => powers/code/discipline/vicissitude}/crafting_recipes.dm (100%)
rename modular_darkpack/modules/powers/code/discipline/vicissitude/{ => objects}/creatures.dm (100%)
rename modular_darkpack/modules/powers/code/discipline/vicissitude/{ => objects}/flesh_items.dm (98%)
diff --git a/modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/crafting_recipes.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/crafting_recipes.dm
similarity index 100%
rename from modular_darkpack/modules/kindred_species/code/vampire_clan/clans/tzimisce/crafting_recipes.dm
rename to modular_darkpack/modules/powers/code/discipline/vicissitude/crafting_recipes.dm
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/creatures.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/objects/creatures.dm
similarity index 100%
rename from modular_darkpack/modules/powers/code/discipline/vicissitude/creatures.dm
rename to modular_darkpack/modules/powers/code/discipline/vicissitude/objects/creatures.dm
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/flesh_items.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/objects/flesh_items.dm
similarity index 98%
rename from modular_darkpack/modules/powers/code/discipline/vicissitude/flesh_items.dm
rename to modular_darkpack/modules/powers/code/discipline/vicissitude/objects/flesh_items.dm
index 39358374dbf4..be354aac2b5e 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/flesh_items.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/objects/flesh_items.dm
@@ -33,7 +33,7 @@
/obj/item/stack/human_flesh/five
amount = 5
-/obj/item/autosurgeon/organ/vicissitude
+/obj/item/autosurgeon/vicissitude
name = "little brother"
desc = "A talented fleshcrafted creature that can insert an implant or organ into its master without the hassle of extensive surgery. \
Its mouth is eagerly awaiting implants or organs. However, it's quite greedy, so a screwdriver must be used to pry away accidentally added items."
diff --git a/tgstation.dme b/tgstation.dme
index b78dd974c8c5..ee8e9b7d64bc 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -7088,7 +7088,6 @@
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\baali\baali.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\baali\holy_weakness.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\kiasyd\kiasyd.dm"
-#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\crafting_recipes.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\needs_home_soil.dm"
#include "modular_darkpack\modules\kindred_species\code\vampire_clan\clans\tzimisce\tzimisce.dm"
#include "modular_darkpack\modules\languages\code\languages\arabic.dm"
@@ -7232,11 +7231,12 @@
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\path_of_blood.dm"
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\status_effects\blood_of_potency_effect.dm"
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\status_effects\blood_rage_status.dm"
-#include "modular_darkpack\modules\powers\code\discipline\vicissitude\creatures.dm"
-#include "modular_darkpack\modules\powers\code\discipline\vicissitude\flesh_items.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\crafting_recipes.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\malleable_visage.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\shapeshift_forms.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\vicissitude.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\objects\creatures.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\objects\flesh_items.dm"
#include "modular_darkpack\modules\radios\code\police_radio.dm"
#include "modular_darkpack\modules\radios\code\radio.dm"
#include "modular_darkpack\modules\radios\code\radio_globals.dm"
From b6984ae99c180adfe3e70f1ec8fb8b43f3ecd81a Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Thu, 27 Nov 2025 20:33:02 +0200
Subject: [PATCH 012/104] Update vicissitude.dm
---
.../modules/powers/code/discipline/vicissitude/vicissitude.dm | 2 --
1 file changed, 2 deletions(-)
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index 2e7720b79b2d..847b8235a54a 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -27,8 +27,6 @@
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
/datum/discipline_power/vicissitude/fleshcrafting
name = "Fleshcrafting"
desc = "Mold your victim's flesh and soft tissue to your desire."
From 3ea731e9ca844f9f6e6c3464612de271e2b3f5cc Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Thu, 27 Nov 2025 20:52:09 +0200
Subject: [PATCH 013/104] Update vicissitude.dm
---
.../discipline/vicissitude/vicissitude.dm | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index 847b8235a54a..f5896301f202 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -27,6 +27,27 @@
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/datum/discipline_power/vicissitude/malleable_visage
+ name = "Malleable Visage"
+ desc = "Basic Shapeshifting."
+
+ level = 1
+ check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
+ target_type = TARGET_SELF
+ cooldown_length = 1 TURNS
+ vitae_cost = 1
+ range = 1
+ toggled = FALSE
+
+/datum/discipline_power/vicissitude/malleable_visage/activate(atom/target)
+ . = ..()
+ if(!ishuman(target))
+ return FALSE
+ display_radial_menu(target)
+ return TRUE
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
/datum/discipline_power/vicissitude/fleshcrafting
name = "Fleshcrafting"
desc = "Mold your victim's flesh and soft tissue to your desire."
From 509590536d7bdfd07d5e2cbed9d555bf588ccc6f Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Thu, 27 Nov 2025 21:22:35 +0200
Subject: [PATCH 014/104] Update vicissitude.dm
---
.../powers/code/discipline/vicissitude/vicissitude.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index f5896301f202..3234d5ad0aff 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -62,7 +62,7 @@
hostile = TRUE
violates_masquerade = TRUE
- cooldown_length =1 TURNS
+ cooldown_length = 1 TURNS
grouped_powers = list(/datum/discipline_power/vicissitude/bonecrafting)
/datum/discipline_power/vicissitude/fleshcrafting/activate(mob/living/target)
@@ -102,8 +102,8 @@
violates_masquerade = TRUE
- duration_length = 20 SECONDS
- cooldown_length = 20 SECONDS
+ duration_length = 1 TURNS
+ cooldown_length = 1 TURNS
/datum/discipline_power/vicissitude/horrid_form/activate()
. = ..()
From 2148527dae25e4ca142ba1158d5cfb60d74952b2 Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Thu, 27 Nov 2025 23:00:33 +0200
Subject: [PATCH 015/104] awawa
---
.../{malleable_visage.dm => shapeshifting.dm} | 56 ++++++------
.../discipline/vicissitude/vicissitude.dm | 83 +++++++++---------
.../powers/icons/shapeshifting_radial.dmi | Bin 606 -> 1777 bytes
tgstation.dme | 2 +-
4 files changed, 73 insertions(+), 68 deletions(-)
rename modular_darkpack/modules/powers/code/discipline/vicissitude/{malleable_visage.dm => shapeshifting.dm} (75%)
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/malleable_visage.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/shapeshifting.dm
similarity index 75%
rename from modular_darkpack/modules/powers/code/discipline/vicissitude/malleable_visage.dm
rename to modular_darkpack/modules/powers/code/discipline/vicissitude/shapeshifting.dm
index 9f6099cf7fda..8b89632ba0fe 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/malleable_visage.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/shapeshifting.dm
@@ -8,35 +8,25 @@
#define CHANGE_APPEARANCE "Change Appearance"
#define CHOICE_OPTIONS list(CHANGE_HAIR, CHANGE_BEARD, CHANGE_SEX, CHANGE_EYES, CHANGE_NAME, CHANGE_RACE, CHANGE_HEIGHT, CHANGE_APPEARANCE)
-/datum/discipline_power/vicissitude/malleable_visage
- name = "Malleable Visage"
- desc = "Basic Shapeshifting."
-
- level = 1
- check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
- target_type = TARGET_HUMAN | TARGET_SELF
- cooldown_length = 1 TURNS
- vitae_cost = 1
- range = 1
- toggled = FALSE
+/datum/action/cooldown/mob_cooldown/shapeshift
+ owner_has_control = FALSE
var/list/choices = CHOICE_OPTIONS
+ var/range = 1
-/datum/discipline_power/vicissitude/malleable_visage/post_gain()
+/datum/action/cooldown/mob_cooldown/shapeshift/New(Target, original)
. = ..()
update_choices()
-/datum/discipline_power/vicissitude/malleable_visage/proc/update_choices()
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/update_choices()
for(var/i in choices)
choices[i] = icon('modular_darkpack/modules/powers/icons/shapeshifting_radial.dmi', i)
-/datum/discipline_power/vicissitude/malleable_visage/activate(atom/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/Activate(atom/target)
. = ..()
- if(!ishuman(target))
- return FALSE
display_radial_menu(target)
return TRUE
-/datum/discipline_power/vicissitude/malleable_visage/proc/display_radial_menu(mob/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/display_radial_menu(mob/target)
var/chosen_option = show_radial_menu(owner, target, choices, target, radius = 36, tooltips = TRUE)
if(!chosen_option)
return TRUE
@@ -63,7 +53,7 @@
return FALSE
return display_radial_menu(target)
-/datum/discipline_power/vicissitude/malleable_visage/proc/change_sex(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_sex(mob/living/carbon/human/target)
var/chosen_sex = tgui_input_list(owner, "Choose a gender.", "Confirmation", list("Male", "Female", "Plural", "Neuter"))
if(!chosen_sex)
return FALSE
@@ -81,6 +71,8 @@
if("Neuter")
target.gender = NEUTER
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(owner, span_notice("You finish altering the gender of [target]."))
var/chosen_physique = tgui_input_list(owner, "Alter physique as well?", "Confirmation", list("Masculine", "Feminine"))
if(!chosen_physique)
@@ -95,9 +87,10 @@
target.update_mutations_overlay() //(hulk male/female)
target.update_clothing(ITEM_SLOT_ICLOTHING) // update gender shaped clothing
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
- to_chat(owner, span_notice("You finish altering the gender of [target]."))
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(owner, span_notice("You finish altering the physique of [target]."))
-/datum/discipline_power/vicissitude/malleable_visage/proc/change_eyes(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_eyes(mob/living/carbon/human/target)
var/new_eye_color = input(owner, "Choose a eye color", "Eye Color", target.eye_color_left) as color|null
if(!new_eye_color)
return TRUE
@@ -109,9 +102,10 @@
target.dna.update_ui_block(/datum/dna_block/identity/eye_colors)
target.update_body()
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
to_chat(owner, span_notice("You finish altering the eye color of [target]."))
-/datum/discipline_power/vicissitude/malleable_visage/proc/change_beard(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_beard(mob/living/carbon/human/target)
var/new_style = tgui_input_list(owner, "Select a facial hairstyle", "Grooming", SSaccessories.facial_hairstyles_list)
if(!new_style)
return FALSE
@@ -121,6 +115,7 @@
return FALSE
target.set_facial_hairstyle(new_style, update = TRUE)
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
to_chat(owner, span_notice("You finish altering the facial style of [target]."))
var/new_face_color = input(owner, "Choose a facial hair color", "Hair Color", target.facial_hair_color) as color|null
@@ -133,10 +128,11 @@
target.set_facial_haircolor(sanitize_hexcolor(new_face_color))
target.dna.update_ui_block(/datum/dna_block/identity/facial_color)
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
to_chat(owner, span_notice("You finish altering the facial hair color of [target]."))
return TRUE
-/datum/discipline_power/vicissitude/malleable_visage/proc/change_hair(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_hair(mob/living/carbon/human/target)
var/new_style = tgui_input_list(owner, "Select a hairstyle", "Grooming", SSaccessories.hairstyles_list)
if(!new_style)
return FALSE
@@ -146,6 +142,7 @@
return FALSE
target.set_hairstyle(new_style, update = TRUE)
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
to_chat(owner, span_notice("You finish altering the hair style of [target]."))
var/new_hair_color = input(owner, "Choose a hair color", "Hair Color", target.hair_color) as color|null
@@ -158,10 +155,11 @@
target.set_haircolor(sanitize_hexcolor(new_hair_color))
target.dna.update_ui_block(/datum/dna_block/identity/hair_color)
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
to_chat(owner, span_notice("You finish altering the hair color of [target]."))
return TRUE
-/datum/discipline_power/vicissitude/malleable_visage/proc/change_name(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_name(mob/living/carbon/human/target)
var/newname = sanitize_name(tgui_input_text(owner, "Who are we again?", "Name change", target.name, MAX_NAME_LEN))
if(!newname || newname == target.name)
return FALSE
@@ -176,9 +174,11 @@
if(target.mind)
target.mind.name = newname
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(owner, span_notice("You finish altering the name of [target]."))
return TRUE
-/datum/discipline_power/vicissitude/malleable_visage/proc/change_race(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_race(mob/living/carbon/human/target)
var/list/skin_tones = list()
for(var/skin_tone as anything in GLOB.skin_tone_names)
var/skin_tone_name = GLOB.skin_tone_names[skin_tone]
@@ -197,9 +197,11 @@
target.update_body(is_creating = TRUE)
target.update_mutations_overlay()
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(owner, span_notice("You finish altering the race of [target]."))
return TRUE
-/datum/discipline_power/vicissitude/malleable_visage/proc/change_height(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_height(mob/living/carbon/human/target)
var/list/heights = list(
"Taller" = HUMAN_HEIGHT_TALLER,
"Tall" = HUMAN_HEIGHT_TALL,
@@ -218,9 +220,11 @@
return FALSE
target.set_mob_height(new_height)
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(owner, span_notice("You finish altering the height of [target]."))
return TRUE
-/datum/discipline_power/vicissitude/malleable_visage/proc/show_saved_profiles(mob/living/carbon/human/target)
+/datum/action/cooldown/mob_cooldown/shapeshift/proc/show_saved_profiles(mob/living/carbon/human/target)
var/chosen_option // = show_radial_menu(owner, target, saved_profiles, target, radius = 36, tooltips = TRUE)
if(!chosen_option)
return TRUE
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index 3234d5ad0aff..b9ae16de3921 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -1,3 +1,9 @@
+// Level 1: Shapeshift Self
+// Level 2: Shapeshift Other
+// Level 3: Damage others and self.
+// Level 4: Shapeshift into a Horrid Form
+// Level 5: Slimegirl tzimisce
+
/datum/discipline/vicissitude
name = "Vicissitude"
desc = "It is widely known as Tzimisce art of flesh and bone shaping. Violates Masquerade."
@@ -5,45 +11,41 @@
clan_restricted = TRUE
power_type = /datum/discipline_power/vicissitude
-// Level 1
/datum/discipline/vicissitude/post_gain()
. = ..()
owner.faction |= VAMPIRE_CLAN_TZIMISCE
ADD_TRAIT(owner, TRAIT_VICISSITUDE_KNOWLEDGE, DISCIPLINE_TRAIT)
-// Level 2
-/datum/discipline_power/vicissitude/fleshcrafting/post_gain()
- . = ..()
- var/obj/item/organ/cyberimp/arm/toolkit/surgery/surgery_implant = new()
- surgery_implant.Insert(owner)
-
////////////////////////////////////////////////////////////////////////////////////////////
/datum/discipline_power/vicissitude
name = "Vicissitude power name"
desc = "Vicissitude power description"
- activate_sound = 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg'
+ var/datum/action/cooldown/mob_cooldown/shapeshift/shapeshift_ability
+
+/datum/discipline_power/vicissitude/post_gain()
+ if(!shapeshift_ability)
+ shapeshift_ability = new(owner)
+ shapeshift_ability.Grant(owner)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/datum/discipline_power/vicissitude/malleable_visage
name = "Malleable Visage"
- desc = "Basic Shapeshifting."
+ desc = "Shapeshift yourself."
level = 1
check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
- target_type = TARGET_SELF
+ target_type = NONE
cooldown_length = 1 TURNS
vitae_cost = 1
- range = 1
toggled = FALSE
+ aggravating = TRUE
/datum/discipline_power/vicissitude/malleable_visage/activate(atom/target)
. = ..()
- if(!ishuman(target))
- return FALSE
- display_radial_menu(target)
+ shapeshift_ability.Activate(owner)
return TRUE
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -53,39 +55,38 @@
desc = "Mold your victim's flesh and soft tissue to your desire."
level = 2
- check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_FREE_HAND
- target_type = TARGET_MOB
+ check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
+ target_type = TARGET_SELF | TARGET_HUMAN
+ vitae_cost = 1
range = 1
-
- effect_sound = 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg'
+ toggled = FALSE
aggravating = TRUE
- hostile = TRUE
- violates_masquerade = TRUE
-
cooldown_length = 1 TURNS
- grouped_powers = list(/datum/discipline_power/vicissitude/bonecrafting)
-/datum/discipline_power/vicissitude/fleshcrafting/activate(mob/living/target)
+/datum/discipline_power/vicissitude/fleshcrafting/activate(atom/target)
+ . = ..()
+ shapeshift_ability.Activate(target)
+ return TRUE
+
+/datum/discipline_power/vicissitude/fleshcrafting/post_gain()
. = ..()
+ var/obj/item/organ/cyberimp/arm/toolkit/surgery/surgery_implant = new()
+ surgery_implant.Insert(owner)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/datum/discipline_power/vicissitude/bonecrafting
name = "Bonecrafting"
- desc = "Mold your victim's flesh and soft tissue to your desire."
+ desc = "Force a body to have an upgrade, or injure it."
level = 3
- check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_FREE_HAND
- target_type = TARGET_MOB
+ check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
+ target_type = TARGET_SELF | TARGET_HUMAN
+ vitae_cost = 1
range = 1
-
- effect_sound = 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg'
+ toggled = FALSE
aggravating = TRUE
- hostile = TRUE
- violates_masquerade = TRUE
-
cooldown_length = 1 TURNS
- grouped_powers = list(/datum/discipline_power/vicissitude/fleshcrafting)
/datum/discipline_power/vicissitude/bonecrafting/activate(mob/living/target)
. = ..()
@@ -94,15 +95,16 @@
/datum/discipline_power/vicissitude/horrid_form
name = "Horrid Form"
- desc = "Shift your flesh and bone into that of a hideous monster."
+ desc = "Force a body to become something truly monstrous."
level = 4
- check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_FREE_HAND
- vitae_cost = 2
-
violates_masquerade = TRUE
-
+ check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
+ target_type = TARGET_SELF | TARGET_HUMAN
duration_length = 1 TURNS
+ vitae_cost = 2
+ toggled = FALSE
+ aggravating = TRUE
cooldown_length = 1 TURNS
/datum/discipline_power/vicissitude/horrid_form/activate()
@@ -116,13 +118,12 @@
/datum/discipline_power/vicissitude/bloodform
name = "Bloodform"
- desc = "Liquefy into a shifting mass of sentient Vitae."
+ desc = "Liquify into a shifting mass of sentient Vitae."
level = 5
- check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_IMMOBILE | DISC_CHECK_FREE_HAND
-
+ check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
+ target_type = TARGET_SELF
violates_masquerade = TRUE
-
cooldown_length = 1 TURNS
/datum/discipline_power/vicissitude/bloodform/activate()
diff --git a/modular_darkpack/modules/powers/icons/shapeshifting_radial.dmi b/modular_darkpack/modules/powers/icons/shapeshifting_radial.dmi
index 644726610f935e03248e1459c114e1a6e0c2ebb0..ca760f338c1af98af89105e64d96fc5369e28aa3 100644
GIT binary patch
delta 1639
zcma)-{WsGK9LK*~mUUE!4n<6lql8qR#>OaaV#=kqNLDHA%JWw2>!C!+Lx|Xnvx&i$`Qt+fe{87h|kz*1J!4^@^L1pwA=baAxzB-3W;w#hzD
zn%#361-p!l9B{$4$JsCaZP2%1#@k;9-ac565k->2?d7BX8ry3fEsi%NJ2^MF)F8B1
zEfuu23as;@mSaX7vZC*vyCQL#&*j}ukDiNs3kHW#=kuP2&vEbDDy+<-g#{Fw(b3UB
zT^nIdW&6i86~EM9(%-_&+T*q_?Iv=n>&_jI-bidtF0oCJWn^O5&LW^K%1zGDbK-+f?e`fLneKBb*g
zOkTG@MWNeNb6zRP6rcU1{2#cyWu24a^h_}j2Zj9XhiN+lC^HNRRK?Knn11XP6e)-&>#fFb!METTp1yx2G!O6bj(W7w>=p`h(hMv+5c2cI
z+kNrE67loW$R7UeXNbITS78~);7F$O6(_zGr4WzawsbiZg$}tf$RnRQCLk~d!oWyvDP7?gY
z^2QT;OK&308)~iV(Q)RD$`LMvGpIvC9xSHnUNC=j{CaU0phgfd#!^ar%FXJPv&%&B
zU}Kd9`weZVHU7gXcDXBs;Yk}wA2~Wk=k1SXozIWwBsJ5580-
z;d>fl-bhDUV>f<-YKVdm@~m6eDd3)GTf?Ip5fUyyJ-Ap;6JGr7!jCE3feu
z`dop&(8eZV&!o14bD&0XlNn|!@?uQ&!g3Jnh56CK;6iCoq^pl6pCcrwaMrcQzpL}&
z-oQ5(8Nt|Hap3-W$myt{dK?`%zw?h6)-oh)J@7)ufhx2=bQP21ZXcJr$97VXajN=B-dm$k`
z?{-Q4x|rK=}4v`%3d^hsNi4;Y&1*FvHdYz2pNrR#2@
z>55QmY{0#Hm=KGu;7BLY#CED?z7Du%s-%LZt{{K^XsQJ)T5s*@Mj<4J>%7$Qdh7t~
ztBfft7S0QQC<@xP=25}AH3L$)AzVLSodN#M^NUG^jIPfUdau@%1I?)U
zN-&;P&%O>Pb|iZ5o;jhk>A^4slLKWJ;Iz#oyR+L7`zCIMsW(~-Asr&!L$J?9GtCp(
zBBGLdloyt|;uA{poQBl)rEF=tKGcX?T^ZbOkHq>r9}zZ(J`44;opkH?_hx(vA?cUZ
Ulp6<0R$mF=;^gL7>EM^}4`PQWT>t<8
delta 459
zcmV;+0W|*c4c-Kh7&`<50000GwrUFi000$GOjJd{z`z$58~^|SV1}R*6B8U99>BoB
zYw8yB00001bW%=J06^y0W&i*Hm60Whe+ZXqWd&D17jQ5G0N@&E1{bxD9{>OWR!Kxb
zR9J=WmrZKJFc5{^knSUNfiOCO^sIfsIY7bq{#WUY^%Kd0#&pvx<^>C8NZuE1=6R+`
zrTRyGn569uF*ufZ|{NS0url?Fn2=J86pA(%ZPDgkC7Y*CJ_5F`+qJ1~KS
zKnDWmLa-bW$2)KbnXpwALLUc*xKOE7s&~`4FTBwH?!GSwu8ijwgcJs{Ej$PIuLNEd
zATRW2BH;wVo+qR*kZs{Sfj1DC(}ZDPP^tc+A727hnrupY$^ZZW07*qo1w^hwV1g;{
B!NC9k
diff --git a/tgstation.dme b/tgstation.dme
index ee8e9b7d64bc..ddcb0c340530 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -7232,8 +7232,8 @@
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\status_effects\blood_of_potency_effect.dm"
#include "modular_darkpack\modules\powers\code\discipline\thaumaturgy\status_effects\blood_rage_status.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\crafting_recipes.dm"
-#include "modular_darkpack\modules\powers\code\discipline\vicissitude\malleable_visage.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\shapeshift_forms.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\shapeshifting.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\vicissitude.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\objects\creatures.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\objects\flesh_items.dm"
From eab196bf6f32ad99c13274180864450630cb3aca Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Thu, 27 Nov 2025 23:25:02 +0200
Subject: [PATCH 016/104] Update vicissitude.dm
---
.../modules/powers/code/discipline/vicissitude/vicissitude.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index b9ae16de3921..5cd59b19b415 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -77,7 +77,7 @@
/datum/discipline_power/vicissitude/bonecrafting
name = "Bonecrafting"
- desc = "Force a body to have an upgrade, or injure it."
+ desc = "Forcefully injure a body."
level = 3
check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
From bdb82f0b626d5501ecd8cf75bf87875de2de9516 Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Fri, 28 Nov 2025 00:03:52 +0200
Subject: [PATCH 017/104] surgeries :3
---
code/modules/mob/living/carbon/examine.dm | 2 +-
.../discipline/vicissitude/shapeshifting.dm | 6 +-
.../surgeries/appearance_change.dm | 38 +++++++++++
.../surgeries/eye_colour_change.dm | 36 +++++++++++
.../surgeries/hair_colour_change.dm | 44 +++++++++++++
.../vicissitude/surgeries/height_change.dm | 51 +++++++++++++++
.../vicissitude/surgeries/sex_change.dm | 63 +++++++++++++++++++
.../surgeries/skin_colour_change.dm | 43 +++++++++++++
tgstation.dme | 6 ++
9 files changed, 286 insertions(+), 3 deletions(-)
create mode 100644 modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm
create mode 100644 modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm
create mode 100644 modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm
create mode 100644 modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm
create mode 100644 modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm
create mode 100644 modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index 976a07ab5a08..6392031ee937 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -260,7 +260,7 @@
// DARKPACK EDIT ADD START
if(iskindred(src) && !(obscured_slots & HIDEFACE))
- switch(clan.alt_sprite)
+ switch(clan?.alt_sprite)
if("nosferatu")
. += span_warning("[p_they(TRUE)] look[p_s()] utterly deformed and inhuman!
")
if("gargoyle")
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/shapeshifting.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/shapeshifting.dm
index 8b89632ba0fe..542d724bd43e 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/shapeshifting.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/shapeshifting.dm
@@ -89,6 +89,7 @@
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
to_chat(owner, span_notice("You finish altering the physique of [target]."))
+ return TRUE
/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_eyes(mob/living/carbon/human/target)
var/new_eye_color = input(owner, "Choose a eye color", "Eye Color", target.eye_color_left) as color|null
@@ -104,6 +105,7 @@
SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION)
playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
to_chat(owner, span_notice("You finish altering the eye color of [target]."))
+ return TRUE
/datum/action/cooldown/mob_cooldown/shapeshift/proc/change_beard(mob/living/carbon/human/target)
var/new_style = tgui_input_list(owner, "Select a facial hairstyle", "Grooming", SSaccessories.facial_hairstyles_list)
@@ -227,10 +229,10 @@
/datum/action/cooldown/mob_cooldown/shapeshift/proc/show_saved_profiles(mob/living/carbon/human/target)
var/chosen_option // = show_radial_menu(owner, target, saved_profiles, target, radius = 36, tooltips = TRUE)
if(!chosen_option)
- return TRUE
+ return FALSE
if(!IN_GIVEN_RANGE(owner, target, range))
return FALSE
-
+ return TRUE
#undef CHANGE_HAIR
#undef CHANGE_BEARD
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm
new file mode 100644
index 000000000000..9dbc6a9a5ed3
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm
@@ -0,0 +1,38 @@
+/datum/surgery/fleshcraft/appearance_change
+ name = "Appearance Change"
+ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/reshape_appearance, /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_HEAD)
+ replaced_by = null
+
+/datum/surgery_step/reshape_appearance
+ name = "Reshape Face"
+ implements = list(TOOL_SCALPEL = 100, TOOL_KNIFE = 50, TOOL_WIRECUTTER = 35)
+ time = 64
+ repeatable = TRUE
+
+/datum/surgery_step/reshape_appearance/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(
+ user,
+ target,
+ span_notice("You begin to alter [target]'s appearance."),
+ span_notice("[user] begins to alter [target]'s appearance."),
+ span_notice("[user] begins to make an incision in [target]'s face!"),
+ )
+ display_pain(target, "You feel your face being split apart!")
+
+/datum/surgery_step/reshape_appearance/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+ var/newname = sanitize_name(tgui_input_text(user, "Choose a new name.", "Name change", target.name, MAX_NAME_LEN))
+ if(!newname || newname == target.name)
+ return FALSE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ target.real_name = newname
+ target.name = newname
+ if(target.dna)
+ target.dna.real_name = newname
+ if(target.mind)
+ target.mind.name = newname
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the name of [target]."))
+ return TRUE
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm
new file mode 100644
index 000000000000..b4aea4a45a15
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm
@@ -0,0 +1,36 @@
+/datum/surgery/fleshcraft/eye_colour_change
+ name = "Change Eye Colour"
+ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/modify_eyes, /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_PRECISE_EYES)
+ replaced_by = null
+
+//reshape_face
+/datum/surgery_step/modify_eyes
+ name = "Change Eye Colour"
+ accept_hand = TRUE
+ time = 20
+ repeatable = TRUE
+
+/datum/surgery_step/modify_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(
+ user,
+ target,
+ span_notice("You begin to reshape [target]'s eyes."),
+ span_notice("[user] begins to manipulate [target]'s head in truly horrific ways!"),
+ span_notice("[user] begins to manipulate [target]'s head in truly horrific ways!"),
+ )
+ display_pain(target, "You feel a burning feeling in the back of your eyes!")
+
+/datum/surgery_step/modify_eyes/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+ var/new_eye_color = input(user, "Choose a eye color", "Eye Color", target.eye_color_left) as color|null
+ if(!new_eye_color)
+ return TRUE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ target.set_eye_color(sanitize_hexcolor(new_eye_color))
+ target.dna.update_ui_block(/datum/dna_block/identity/eye_colors)
+ target.update_body()
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the eye color of [target]."))
+ return TRUE
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm
new file mode 100644
index 000000000000..420276c31f8f
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm
@@ -0,0 +1,44 @@
+/datum/surgery/fleshcraft/hair
+ name = "Change Hair Colour"
+ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/modify_hair, /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_HEAD)
+ replaced_by = null
+
+//reshape_face
+/datum/surgery_step/modify_hair
+ name = "Change Hair Colour"
+ accept_hand = TRUE
+ time = 20
+
+/datum/surgery_step/modify_hair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(
+ user,
+ target,
+ span_notice("You begin to reshape [target]'s hair."),
+ span_notice("[user] begins to manipulate [target]'s head in truly horrific ways!"),
+ span_notice("[user] begins to manipulate [target]'s head in truly horrific ways!"),
+ )
+ display_pain(target, "You feel your hair being pulled in excruciating pain!")
+
+/datum/surgery_step/modify_hair/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+ var/new_style = tgui_input_list(user, "Select a hairstyle", "Grooming", SSaccessories.hairstyles_list)
+ if(!new_style)
+ return FALSE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ target.set_hairstyle(new_style, update = TRUE)
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the hair style of [target]."))
+
+ var/new_hair_color = input(user, "Choose a hair color", "Hair Color", target.hair_color) as color|null
+ if(!new_hair_color)
+ return FALSE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ target.set_haircolor(sanitize_hexcolor(new_hair_color))
+ target.dna.update_ui_block(/datum/dna_block/identity/hair_color)
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the hair color of [target]."))
+ return TRUE
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm
new file mode 100644
index 000000000000..6aaf46ec2427
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm
@@ -0,0 +1,51 @@
+/datum/surgery/fleshcraft/height_change
+ name = "Height Change"
+ possible_locs = list(BODY_ZONE_CHEST)
+ steps = list(
+ /datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/saw,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/change_spine,
+ /datum/surgery_step/close
+ )
+
+ replaced_by = null
+
+/datum/surgery_step/change_spine
+ name = "Manipulate Spine"
+ accept_hand = TRUE
+ time = 100
+ repeatable = TRUE
+
+/datum/surgery_step/change_spine/preop(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(
+ user,
+ target,
+ span_notice("You begin to manipulate [target]'s spine like taffy."),
+ span_notice("[user] begins to manipulate [target]'s spine like taffy!"),
+ span_notice("[user] begins to manipulate [target]'s spine like taffy!"),
+ )
+ display_pain(target, "You feel like your spine is carving its way through your back!")
+
+/datum/surgery_step/change_spine/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+ var/list/heights = list(
+ "Taller" = HUMAN_HEIGHT_TALLER,
+ "Tall" = HUMAN_HEIGHT_TALL,
+ "Average" = HUMAN_HEIGHT_MEDIUM,
+ "Short" = HUMAN_HEIGHT_SHORT,
+ "Shorter" = HUMAN_HEIGHT_SHORTEST,
+ )
+
+ var/new_height = tgui_input_list(user, "Choose a height", "Height change", heights)
+ new_height = heights[new_height]
+ if(!new_height)
+ return FALSE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ target.set_mob_height(new_height)
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the height of [target]."))
+ return TRUE
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm
new file mode 100644
index 000000000000..3e073a809e9b
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm
@@ -0,0 +1,63 @@
+/datum/surgery/fleshcraft/sex_change
+ name = "Sex Change"
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/sex_change,
+ /datum/surgery_step/close)
+
+ replaced_by = null
+
+/datum/surgery_step/sex_change
+ name = "Sex Change"
+ accept_hand = TRUE
+ time = 180
+ repeatable = TRUE
+
+/datum/surgery_step/sex_change/preop(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(
+ user,
+ target,
+ span_notice("You begin to reshape [target]..."),
+ span_notice("[user] begins to manipulate [target]'s flesh in truly horrific ways!"),
+ span_notice("[user] begins to manipulate [target]'s flesh in truly horrific ways!"),
+ )
+ display_pain(target, "You feel like your flesh is moving!")
+
+/datum/surgery_step/sex_change/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+ display_results(user, target, span_notice("You finish changing [target]'s sex!"),
+ span_notice("[user] changes [target] into something... new."),
+ span_notice("[user] finishes."))
+ var/chosen_sex = tgui_input_list(user, "Choose a gender.", "Confirmation", list("Male", "Female", "Plural", "Neuter"))
+ if(!chosen_sex)
+ return FALSE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ switch(chosen_sex)
+ if("Male")
+ target.gender = MALE
+ if("Female")
+ target.gender = FEMALE
+ if("Plural")
+ target.gender = PLURAL
+ if("Neuter")
+ target.gender = NEUTER
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the gender of [target]."))
+
+ var/chosen_physique = tgui_input_list(user, "Alter physique as well?", "Confirmation", list("Masculine", "Feminine"))
+ if(!chosen_physique)
+ return FALSE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ target.physique = (chosen_physique == "Masculine") ? MALE : FEMALE
+ target.dna.update_ui_block(/datum/dna_block/identity/gender)
+ target.update_body(is_creating = TRUE) // or else physique won't change properly
+ target.update_mutations_overlay() //(hulk male/female)
+ target.update_clothing(ITEM_SLOT_ICLOTHING) // update gender shaped clothing
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the physique of [target]."))
+ return TRUE
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm
new file mode 100644
index 000000000000..6445df266a63
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm
@@ -0,0 +1,43 @@
+/datum/surgery/fleshcraft/skin_colour_change
+ name = "Change Skin Colour"
+ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/modify_skin, /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_CHEST)
+ replaced_by = null
+
+//Modify Skin Tone
+/datum/surgery_step/modify_skin
+ name = "Change Skin Colour"
+ accept_hand = TRUE
+ time = 64
+ repeatable = TRUE
+
+/datum/surgery_step/modify_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(
+ user,
+ target,
+ span_notice("You begin to alter [target]'s skin..."),
+ span_notice("[user] begins to alter [target]'s skin."),
+ span_notice("[user] begins to press against [target]'s skin."),
+ )
+ display_pain(target, "Your skin stings like hell!")
+
+/datum/surgery_step/modify_skin/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+ var/list/skin_tones = list()
+ for(var/skin_tone as anything in GLOB.skin_tone_names)
+ var/skin_tone_name = GLOB.skin_tone_names[skin_tone]
+ skin_tones[skin_tone_name] = skin_tone
+
+ var/new_s_tone = tgui_input_list(user, "Choose a skin tone", "Race change", skin_tones)
+ new_s_tone = skin_tones[new_s_tone]
+ if(!new_s_tone)
+ return FALSE
+ if(!IN_GIVEN_RANGE(user, target, 1))
+ return FALSE
+ target.skin_tone = new_s_tone
+ target.dna.update_ui_block(/datum/dna_block/identity/skin_tone)
+ target.update_body(is_creating = TRUE)
+ target.update_mutations_overlay()
+ SEND_SIGNAL(user, COMSIG_MASQUERADE_VIOLATION)
+ playsound(target, 'modular_darkpack/modules/deprecated/sounds/vicissitude.ogg', 50, TRUE)
+ to_chat(user, span_notice("You finish altering the race of [target]."))
+ return TRUE
diff --git a/tgstation.dme b/tgstation.dme
index ddcb0c340530..15617d15a58e 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -7237,6 +7237,12 @@
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\vicissitude.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\objects\creatures.dm"
#include "modular_darkpack\modules\powers\code\discipline\vicissitude\objects\flesh_items.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\surgeries\appearance_change.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\surgeries\eye_colour_change.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\surgeries\hair_colour_change.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\surgeries\height_change.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\surgeries\sex_change.dm"
+#include "modular_darkpack\modules\powers\code\discipline\vicissitude\surgeries\skin_colour_change.dm"
#include "modular_darkpack\modules\radios\code\police_radio.dm"
#include "modular_darkpack\modules\radios\code\radio.dm"
#include "modular_darkpack\modules\radios\code\radio_globals.dm"
From 28884334c342a72eb56075bd3ac088d158a0163d Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Fri, 28 Nov 2025 00:09:53 +0200
Subject: [PATCH 018/104] bugfix for surgeries
---
.../code/discipline/vicissitude/surgeries/appearance_change.dm | 1 +
.../code/discipline/vicissitude/surgeries/eye_colour_change.dm | 1 +
.../code/discipline/vicissitude/surgeries/hair_colour_change.dm | 1 +
.../code/discipline/vicissitude/surgeries/height_change.dm | 1 +
.../powers/code/discipline/vicissitude/surgeries/sex_change.dm | 1 +
.../code/discipline/vicissitude/surgeries/skin_colour_change.dm | 1 +
.../modules/powers/code/discipline/vicissitude/vicissitude.dm | 1 +
7 files changed, 7 insertions(+)
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm
index 9dbc6a9a5ed3..63ddb917a1b9 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/appearance_change.dm
@@ -3,6 +3,7 @@
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/reshape_appearance, /datum/surgery_step/close)
possible_locs = list(BODY_ZONE_HEAD)
replaced_by = null
+ requires_tech = TRUE
/datum/surgery_step/reshape_appearance
name = "Reshape Face"
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm
index b4aea4a45a15..c84a282bd8ca 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/eye_colour_change.dm
@@ -3,6 +3,7 @@
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/modify_eyes, /datum/surgery_step/close)
possible_locs = list(BODY_ZONE_PRECISE_EYES)
replaced_by = null
+ requires_tech = TRUE
//reshape_face
/datum/surgery_step/modify_eyes
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm
index 420276c31f8f..11760ed39d1d 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/hair_colour_change.dm
@@ -3,6 +3,7 @@
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/modify_hair, /datum/surgery_step/close)
possible_locs = list(BODY_ZONE_HEAD)
replaced_by = null
+ requires_tech = TRUE
//reshape_face
/datum/surgery_step/modify_hair
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm
index 6aaf46ec2427..b23980727884 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/height_change.dm
@@ -12,6 +12,7 @@
)
replaced_by = null
+ requires_tech = TRUE
/datum/surgery_step/change_spine
name = "Manipulate Spine"
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm
index 3e073a809e9b..ca3896d566f0 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/sex_change.dm
@@ -8,6 +8,7 @@
/datum/surgery_step/close)
replaced_by = null
+ requires_tech = TRUE
/datum/surgery_step/sex_change
name = "Sex Change"
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm
index 6445df266a63..2e1fe3b70e42 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/surgeries/skin_colour_change.dm
@@ -3,6 +3,7 @@
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/modify_skin, /datum/surgery_step/close)
possible_locs = list(BODY_ZONE_CHEST)
replaced_by = null
+ requires_tech = TRUE
//Modify Skin Tone
/datum/surgery_step/modify_skin
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index 5cd59b19b415..a6c374d56c00 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -72,6 +72,7 @@
. = ..()
var/obj/item/organ/cyberimp/arm/toolkit/surgery/surgery_implant = new()
surgery_implant.Insert(owner)
+ ADD_TRAIT(owner, TRAIT_SURGEON, DISCIPLINE_TRAIT)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
From 6612dfeba6da2adef6ce979a78899bab0f920117 Mon Sep 17 00:00:00 2001
From: XeonMations <62395746+XeonMations@users.noreply.github.com>
Date: Fri, 28 Nov 2025 16:17:03 +0200
Subject: [PATCH 019/104] moar bugfixes
---
.../vicissitude/objects/surgery_tools.dm | 103 ++++++++++++++++++
.../discipline/vicissitude/vicissitude.dm | 4 +-
.../icons/fleshcrafting_surgery_tools.dmi | Bin 0 -> 4509 bytes
.../modules/powers/icons/lefthand.dmi | Bin 0 -> 1292 bytes
.../modules/powers/icons/righthand.dmi | Bin 0 -> 1260 bytes
tgstation.dme | 1 +
6 files changed, 106 insertions(+), 2 deletions(-)
create mode 100644 modular_darkpack/modules/powers/code/discipline/vicissitude/objects/surgery_tools.dm
create mode 100644 modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi
create mode 100644 modular_darkpack/modules/powers/icons/lefthand.dmi
create mode 100644 modular_darkpack/modules/powers/icons/righthand.dmi
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/objects/surgery_tools.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/objects/surgery_tools.dm
new file mode 100644
index 000000000000..70005088512c
--- /dev/null
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/objects/surgery_tools.dm
@@ -0,0 +1,103 @@
+/obj/item/organ/cyberimp/arm/toolkit/surgery/vicissitude
+ icon_state = "toolkit_implant_vic"
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+ organ_flags = ORGAN_ORGANIC
+ contents = newlist(/obj/item/retractor/augment/vicissitude, /obj/item/hemostat/augment/vicissitude, /obj/item/cautery/augment/vicissitude, /obj/item/surgicaldrill/augment/vicissitude, /obj/item/scalpel/augment/vicissitude, /obj/item/circular_saw/augment/vicissitude, /obj/item/surgical_drapes/vicissitude, /obj/item/bonesetter/augment/vicissitude, /obj/item/blood_filter/augment/vicissitude, /obj/item/healthanalyzer/vicissitude, /obj/item/shockpaddles/cyborg/vicissitude)
+
+/obj/item/retractor/augment/vicissitude
+ name = "retracting appendage"
+ desc = "A pair of prehensile pincers."
+ icon_state = "retractor_vic"
+ inhand_icon_state = "clamps_vic"
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/hemostat/augment/vicissitude
+ name = "hemostatic pincers"
+ desc = "A pair of thin appendages that were once fingers, secreting a hemostatic fluid from the tips."
+ icon_state = "hemostat_vic"
+ inhand_icon_state = "clamps_vic"
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/cautery/augment/vicissitude
+ name = "chemical cautery"
+ desc = "A specialized organ drooling a chemical package that releases an extreme amount of heat, very quickly."
+ icon_state = "cautery_vic"
+ inhand_icon_state = "cautery_vic"
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/surgicaldrill/augment/vicissitude
+ name = "surgical fang"
+ desc = "A spiral fang that bores into the flesh with reckless glee."
+ icon_state = "drill_vic"
+ hitsound = 'sound/effects/wounds/blood2.ogg'
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/scalpel/augment/vicissitude
+ name = "scalpel claw"
+ desc = "An altered nail, adjusted to make fine incisions."
+ icon_state = "scalpel_vic"
+ inhand_icon_state = "scalpel_vic"
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/circular_saw/augment/vicissitude
+ name = "circular jaw"
+ desc = "A spinning disc of teeth, screaming, as it bites through the flesh."
+ icon_state = "saw_vic"
+ inhand_icon_state = "saw_vic"
+ hitsound = 'sound/effects/wounds/blood2.ogg'
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/surgical_drapes/vicissitude
+ name = "skin drape"
+ desc = "A stretch of skin, sweating out antibiotics and disinfectants, to provide a sterile-ish environment to work in."
+ icon_state = "surgical_drapes_vic"
+ inhand_icon_state = "drapes_vic"
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/bonesetter/augment/vicissitude
+ name = "bonesetting appendage"
+ desc = "A pair of organic clamps for setting bones."
+ icon_state = "bone setter_vic"
+ inhand_icon_state = "clamps_vic"
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/blood_filter/augment/vicissitude
+ name = "filtering organ"
+ desc = "A specialised set of organs capable of filtering blood non-harmfully."
+ icon_state = "bone-gel_vic"
+ inhand_icon_state = "clamps_vic"
+ lefthand_file = 'modular_darkpack/modules/powers/icons/righthand.dmi'
+ righthand_file = 'modular_darkpack/modules/powers/icons/lefthand.dmi'
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+
+/obj/item/healthanalyzer/vicissitude
+ name = "synaptic tendrils"
+ desc = "A set of sensory tendrils that swiftly assess the health conditions of a patient"
+ icon = 'icons/obj/medical/organs/organs.dmi'
+ icon_state = "hivenode"
+ advanced = TRUE
+
+/obj/item/shockpaddles/cyborg/vicissitude
+ name = "electrocyte stack"
+ desc = "A stack of electrocyte cells - they take too long to recharge for combat uses, but are able to produce powerful shocks."
+ icon = 'modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi'
+ icon_state = "shockpaddles0"
+ inhand_icon_state = "syndiepaddles0"
+ base_icon_state = "shockpaddles"
+ req_defib = FALSE
diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
index a6c374d56c00..aa276864cf0c 100644
--- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
+++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm
@@ -52,7 +52,7 @@
/datum/discipline_power/vicissitude/fleshcrafting
name = "Fleshcrafting"
- desc = "Mold your victim's flesh and soft tissue to your desire."
+ desc = "Shapeshift others."
level = 2
check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND
@@ -70,7 +70,7 @@
/datum/discipline_power/vicissitude/fleshcrafting/post_gain()
. = ..()
- var/obj/item/organ/cyberimp/arm/toolkit/surgery/surgery_implant = new()
+ var/obj/item/organ/cyberimp/arm/toolkit/surgery/vicissitude/surgery_implant = new()
surgery_implant.Insert(owner)
ADD_TRAIT(owner, TRAIT_SURGEON, DISCIPLINE_TRAIT)
diff --git a/modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi b/modular_darkpack/modules/powers/icons/fleshcrafting_surgery_tools.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..3ae6883acad98424c603c81134dff47e7b2ea504
GIT binary patch
literal 4509
zcmV;O5n}F%P)V=-0C=30lEI1sK@3FC(_hi(*+tjAdRZLAgZ{#h?T*vIp6MZp%Kp9W3f>mt
zt%|&Yq{!TVx4Zq(Zx4HSMHVWf-}tYOrE6{!HC40zbWK9)lRk|oC{{VsQu3L!qhZQ0
zYImhDb4?_cI$gQu#4zAfzcLaaPnbka
zr&>f88734{=BJG41+_L}<`=!OX-OrVCx|hlEZ?G6|Iu^b9=CsQbq9p2wcaw-a*F@}
z5Q<4eK~#90?VW3kRn-;8_sCEOfwY4_ff+l(&{zSJrUVs>MWu`
zKib-)#wNA(W77|%X?%R3X`7H@rD`;S5+8sB(}bcm9bP(vBT~l(5R}L5`RzOZJL{gg
zuXFA>_raV$xtx2?oqP5^`@h!OYd_XH9aDO8F2lsdMa`~2hUOv@fC-LF046vR5r7RH
zH)W1Qn_=At3q5BY^*Vu&zvt*XZt3hVxb?Yh9f{N~L!z(>`qbc?{@C-GY5rK%0w5`p
zmheS&{*SW;GU8hlA|K_1e2C|T!opig3-FDhIsT-iL=e%L*0%>N`BsT7Zxy=$2?CHX
zAOu`2BfoXA_Oj)kw-tj^3ML=i*1O0bEpHXOfM6_`MyzzmP$p;+yYy|?;Gzx%dNe@;5?cX~u=MH{#s=I&1>P!e+p8RjEUhWpo
zne8M5v{gADDh)vX%3H2>pPT(zhr-$}T%S>9`