diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 04030093..628e7cd1 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -38,6 +38,8 @@
var/list/unattached_flesh
var/flesh_number = 0
+ var/size = 1
+
/obj/machinery/clonepod/Initialize()
. = ..()
@@ -61,7 +63,7 @@
QDEL_LIST(unattached_flesh)
. = ..()
-/obj/machinery/clonepod/RefreshParts()
+/obj/machinery/clonepod/RefreshParts()
speed_coeff = 0
efficiency = 0
for(var/obj/item/stock_parts/scanning_module/S in component_parts)
@@ -126,34 +128,40 @@
return examine(user)
//Start growing a human clone in the pod!
-/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks)
+/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, experimental = FALSE)
if(panel_open)
return FALSE
if(mess || attempting)
return FALSE
- clonemind = locate(mindref) in SSticker.minds
- if(!istype(clonemind)) //not a mind
- return FALSE
- if(!QDELETED(clonemind.current))
- if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body
+
+ //runtime error protection
+ if(mindref)
+ clonemind = locate(mindref) in SSticker.minds
+
+ //only exit out of cloning with no mind if cloning is not experimental.
+ if(!experimental)
+ if(!istype(clonemind)) //not a mind
return FALSE
- if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding.
+ if(!QDELETED(clonemind.current))
+ if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body
+ return FALSE
+ if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding.
+ return FALSE
+ if(clonemind.active) //somebody is using that mind
+ if( ckey(clonemind.key)!=ckey )
+ return FALSE
+ else
+ // get_ghost() will fail if they're unable to reenter their body
+ var/mob/dead/observer/G = clonemind.get_ghost()
+ if(!G)
+ return FALSE
+ if(G.suiciding) // The ghost came from a body that is suiciding.
+ return FALSE
+ if(clonemind.damnation_type) //Can't clone the damned.
+ INVOKE_ASYNC(src, .proc/horrifyingsound)
+ mess = TRUE
+ update_icon()
return FALSE
- if(clonemind.active) //somebody is using that mind
- if( ckey(clonemind.key)!=ckey )
- return FALSE
- else
- // get_ghost() will fail if they're unable to reenter their body
- var/mob/dead/observer/G = clonemind.get_ghost()
- if(!G)
- return FALSE
- if(G.suiciding) // The ghost came from a body that is suiciding.
- return FALSE
- if(clonemind.damnation_type) //Can't clone the damned.
- INVOKE_ASYNC(src, .proc/horrifyingsound)
- mess = TRUE
- update_icon()
- return FALSE
attempting = TRUE //One at a time!!
countdown.start()
@@ -180,7 +188,14 @@
ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT)
H.Unconscious(80)
- clonemind.transfer_to(H)
+ //only transfer consciousness if the clone isn't experimental
+ if(experimental)
+ var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone?", null, null, null, 100, H)
+ if(LAZYLEN(candidates))
+ var/mob/dead/observer/C = pick(candidates)
+ H.key = C.key
+ else
+ clonemind.transfer_to(H)
if(grab_ghost_when == CLONER_FRESH_CLONE)
H.grab_ghost()
@@ -203,6 +218,12 @@
H.suiciding = FALSE
attempting = FALSE
+ //sizecode stuff, check size of scanned individual to then pass in later. someone should turn size into a dna trait tbh
+ if(istype(clonemind))
+ var/mob/living/current = clonemind.current //gets body of current mind
+ if(!isnull(current))
+ size = current.size_multiplier * 100
+
return TRUE
//Grow clones to maturity then kick them out. FREELOADERS
@@ -381,7 +402,7 @@
//Do the resize on ejection. The clone pod seems to do a lot of matrix transforms the way size code does, so we will handle our resize after.
mob_occupant.previous_size = 1 //Set the previous size to default so the resize properly set health and speed.
- mob_occupant.custom_body_size = mob_occupant.client.prefs.body_size
+ mob_occupant.custom_body_size = size //mob_occupant.client.prefs.body_size
mob_occupant.resize(mob_occupant.custom_body_size * 0.01)
occupant = null
diff --git a/code/game/machinery/exp_cloner.dm b/code/game/machinery/exp_cloner.dm
index db60a1a4..c5b40a46 100644
--- a/code/game/machinery/exp_cloner.dm
+++ b/code/game/machinery/exp_cloner.dm
@@ -8,7 +8,8 @@
circuit = /obj/item/circuitboard/machine/clonepod/experimental
internal_radio = FALSE
-//Start growing a human clone in the pod!
+//Start growing a human clone in the pod! Depreciated and replaced with parent object's growclone method.
+/*
/obj/machinery/clonepod/experimental/growclone(ckey, clonename, ui, se, datum/species/mrace, list/features, factions)
if(panel_open)
return FALSE
@@ -71,7 +72,7 @@
H.suiciding = FALSE
attempting = FALSE
return TRUE
-
+*/
//Prototype cloning console, much more rudimental and lacks modern functions such as saving records, autocloning, or safety checks.
/obj/machinery/computer/prototype_cloning
@@ -293,7 +294,26 @@
temp = "Cloning cycle already in progress."
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else
- pod.growclone(null, mob_occupant.real_name, dna.uni_identity, dna.mutation_index, clone_species, dna.features, mob_occupant.faction)
+
+ //put here for ease of use / ability to change, rather than in the method call to growclone
+ var/name = mob_occupant.real_name
+ var/mind = null
+ var/UI = dna.uni_identity
+ var/SE = dna.mutation_index
+ var/features = dna.features
+ var/factions = mob_occupant.faction
+ var/list/quirks = list()
+
+ if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning.
+ mind = "[REF(mob_occupant.mind)]"
+
+ for(var/V in mob_occupant.roundstart_quirks)
+ var/datum/quirk/T = V
+ quirks[T.type] = T.clone_data()
+
+ //grows the clone, format;
+ // ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, experimental = FALSE
+ pod.growclone(null, name, UI, SE, mind, clone_species, features, factions, quirks, TRUE)
temp = "[mob_occupant.real_name] => Cloning data sent to pod."
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 2f98a4b4..ef1c0cf4 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -28,6 +28,46 @@
allowed = list (/obj/item/gun/energy/laser/redtag)
resistance_flags = NONE
+/*
+ * Posshim's Corpus atire
+ */
+/obj/item/clothing/suit/hooded/corpus/
+ name = "Standard Voidsuit"
+ desc = "Standard issue voidsuit in the name of Grofit!"
+ icon_state = "corpus"
+ item_state = "armor"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|FEET|HANDS
+ hoodtype = /obj/item/clothing/head/hooded/corpus
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT //"Hide shoes" but digi shoes dont get hidden, too bad!
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ mutantrace_variation = NO_MUTANTRACE_VARIATION //There is no need for a digi variant, it's a costume
+
+/obj/item/clothing/suit/hooded/corpus/s //sec
+ name = "Enforcer Voidsuit"
+ desc = "Delux issue grofit voidsuit. Let the middle class know You're in charge."
+ icon_state = "corpuss"
+ hoodtype = /obj/item/clothing/head/hooded/corpus/s //Enjoy this nice red outfit Kinaris! There is NO NEED for a pink one! xoxo -VivI Fanteriso
+
+/obj/item/clothing/suit/hooded/corpus/c //command
+ name = "Commander Voidsuit"
+ desc = "Premium issue correctional worker attire. Grease the gears of production."
+ icon_state = "corpusc"
+ hoodtype = /obj/item/clothing/head/hooded/corpus/c
+
+/obj/item/clothing/head/hooded/corpus
+ name = "Voidsuit helmet"
+ desc = "galvanized reinforced helm to protect against the elements"
+ icon_state = "corpus"
+ body_parts_covered = HEAD
+ flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK|HIDESNOUT|HIDENECK //hide your ugly face with this one simple trick!
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/head/hooded/corpus/s //sec
+ icon_state = "corpuss"
+
+/obj/item/clothing/head/hooded/corpus/c //command
+ icon_state = "corpusc"
+
/*
* Costume
*/
diff --git a/code/modules/food_and_drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm
index 318d1edc..055999f7 100644
--- a/code/modules/food_and_drinks/food/snacks_salad.dm
+++ b/code/modules/food_and_drinks/food/snacks_salad.dm
@@ -124,4 +124,4 @@
trash = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
bonus_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 4)
tastes = list("fruity cactus" = 5, "ash" = 1, "tough meat" = 3, "your eternal damnation" = 1)
- foodtype = FRUIT | MEAT | VEGETABLES //MUSHROOM = VEGETABLE -VladinXXV 2021
+ foodtype = FRUIT | MEAT | VEGETABLES //MUSHROOM = VEGETABLE -VivI Fanteriso: 2021. Totally didnt steal this comment form vladin.
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index 2363e6a3..67e1d769 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -438,6 +438,15 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
value = 0
grind_results = list(/datum/reagent/consumable/sodiumchloride = 4)
+/obj/item/coin/vivitoken
+ name = ".... token?"
+ icon_state = "coin_vivi_wizard"
+ cmineral = "vivi"
+ desc = "This shouldnt be here....."
+ sideslist = list("wizard", "engie")
+ value = 0
+ grind_results = list(/datum/reagent/medicine/copium = 10)
+
/obj/item/coin/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CC = W
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index 3941974c..e53d8a47 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -8,6 +8,8 @@
vend_reply = "Thank you for using AutoDrobe!"
products = list(/obj/item/clothing/suit/chickensuit = 1,
/obj/item/clothing/head/chicken = 1,
+ /obj/item/clothing/suit/hooded/corpus = 1,
+ /obj/item/clothing/suit/hooded/corpus/c = 1,
/obj/item/clothing/under/gladiator = 1,
/obj/item/clothing/head/helmet/gladiator = 1,
/obj/item/clothing/under/gimmick/rank/captain/suit = 1,
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 96d9ec1d..0d1e1f3d 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -18,7 +18,8 @@
/obj/item/clothing/mask/bandana/red = 5,
/obj/item/clothing/under/rank/security/skirt = 5,
/obj/item/clothing/under/rank/security/grey = 5,
- /obj/item/clothing/under/pants/khaki = 5)
+ /obj/item/clothing/under/pants/khaki = 5,
+ /obj/item/clothing/suit/hooded/corpus/s = 5)
premium = list(/obj/item/clothing/under/rank/security/navyblue = 5,
/obj/item/clothing/suit/security/officer = 5,
/obj/item/clothing/head/beret/sec/navyofficer = 5,
diff --git a/hyperstation/code/obj/plushes.dm b/hyperstation/code/obj/plushes.dm
index d744793d..58de2e35 100644
--- a/hyperstation/code/obj/plushes.dm
+++ b/hyperstation/code/obj/plushes.dm
@@ -64,19 +64,6 @@
light_range = 1.4
attack_verb = list("bapped", "slapped", "bonked")
-//Vladplush containment starts here
-/obj/item/toy/plush/nukeplushie/vladin
- name = "elite operative plushie"
- desc = "A stuffed toy that resembles an elite syndicate nuclear operative. He has a little wedding band!"
- gender = MALE //he's a boy, there is no doubt here
- young = TRUE //he's not actually young, but i refuse to have a plush that is not loyal to his partner. this is the only way i could figure out.
- icon = 'hyperstation/icons/obj/plushes.dmi'
- icon_state = "vladin"
- item_state = "vladin"
- attack_verb = list("nuked", "detonated", "CQC'd", "robusted")
- squeak_override = list('sound/effects/hit_punch.ogg' = 1, 'sound/effects/hit_kick.ogg' = 1, 'sound/weapons/cqchit1.ogg' = 1, 'sound/weapons/cqchit2.ogg' = 1)
-//I can't figure out how to make him loyal to a specific type of plush. If anyone figures that out, there will be more. Until then, this is the end of the vladplush.
-
//Enzo_Leon patron stuff
/obj/item/toy/plush/mammal/enzo_leon
name = "rat plushie"
@@ -87,4 +74,4 @@
item_state = "enzor"
attack_verb = list("tail bapped", "whomped", "squeaked")
squeak_override = list('sound/effects/mousesqueek.ogg'= 1)
-//End
\ No newline at end of file
+//End
diff --git a/hyperstation/icons/obj/plushes.dmi b/hyperstation/icons/obj/plushes.dmi
index e0496bfb..0438ab7d 100644
Binary files a/hyperstation/icons/obj/plushes.dmi and b/hyperstation/icons/obj/plushes.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index de97e09f..b21c68bc 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index d93dda66..2f8f0e51 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 028962e3..33db51e1 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 003ff83f..95d36176 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/economy.dmi b/icons/obj/economy.dmi
index fef7637b..c281432d 100644
Binary files a/icons/obj/economy.dmi and b/icons/obj/economy.dmi differ