diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index af561b97ec..2554b44d8b 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -980,6 +980,14 @@
H.brainmob.mind.transfer_to(src)
qdel(H)
+ // Vorestation Addition - reapply markings/appearance from prefs for player mobs
+ if(client) //just to be sure
+ client.prefs.copy_to(src)
+ if(dna)
+ dna.ResetUIFrom(src)
+ sync_organ_dna()
+ // end vorestation addition
+
for (var/ID in virus2)
var/datum/disease2/disease/V = virus2[ID]
V.cure(src)
diff --git a/code/modules/mob/living/carbon/human/life_vr.dm b/code/modules/mob/living/carbon/human/life_vr.dm
index d573e5568c..cd52e9eb72 100644
--- a/code/modules/mob/living/carbon/human/life_vr.dm
+++ b/code/modules/mob/living/carbon/human/life_vr.dm
@@ -1,10 +1,10 @@
/mob/living/carbon/human/proc/weightgain()
if (nutrition > 0 && stat != 2)
if (nutrition > MIN_NUTRITION_TO_GAIN && weight < MAX_MOB_WEIGHT && weight_gain)
- weight += metabolism*(0.01*weight_gain)
+ weight += species.metabolism*(0.01*weight_gain)
else if (nutrition <= MAX_NUTRITION_TO_LOSE && stat != 2 && weight > MIN_MOB_WEIGHT && weight_loss)
- weight -= metabolism*(0.01*weight_loss) // starvation weight loss
+ weight -= species.metabolism*(0.01*weight_loss) // starvation weight loss
/mob/living/carbon/human/proc/handle_hud_list_vr()
@@ -50,3 +50,24 @@
//Process regular life stuff
nif.life()
+
+//Overriding carbon move proc that forces default hunger factor
+/mob/living/carbon/Move(NewLoc, direct)
+ . = ..()
+ if(.)
+ if(src.nutrition && src.stat != 2)
+ if(ishuman(src))
+ var/mob/living/carbon/human/M = src
+ if(M.stat != 2 && M.nutrition > 0)
+ M.nutrition -= M.species.hunger_factor/10
+ if(M.m_intent == "run")
+ M.nutrition -= M.species.hunger_factor/10
+ else
+ src.nutrition -= DEFAULT_HUNGER_FACTOR/10
+ if(src.m_intent == "run")
+ src.nutrition -= DEFAULT_HUNGER_FACTOR/10
+ if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
+ src.bodytemperature += 2
+ // Moving around increases germ_level faster
+ if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
+ germ_level++
diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm
index eddfe36129..ab39cc56d5 100644
--- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm
@@ -3,6 +3,7 @@
//var/vore_numbing = 0
var/gets_food_nutrition = 1 // If this is set to 0, the person can't get nutrrition from food.
var/can_drain_prey = 0 //Determines if the person can use the succubus drain or not.
+ var/metabolism = 0.0015
/datum/species/custom
name = "Custom Species"
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
index c4d1f1e228..3ad27f7e7c 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
@@ -25,6 +25,13 @@
C << "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds."
C.does_not_breathe = 1 //effectively makes them spaceworthy while regenning
+ for(var/obj/item/organ/E in C.bad_external_organs)
+ var/obj/item/organ/external/affected = E
+ for(var/datum/wound/W in affected.wounds) // Fix internal bleeds at the start of the rejuv process.
+ if(istype(W, /datum/wound/internal_bleeding))
+ affected.wounds -= W
+ affected.update_damages()
+
spawn(time SECONDS)
if(C) //Runtime prevention.
C << "Consciousness begins to stir as your new body awakens, ready to hatch.."
@@ -62,6 +69,56 @@
else
return //Something went wrong
+/mob/living/carbon/human/proc/purge_impurities() //a lesser regeneration that just purges toxin/infections without healing. Does NOT clear reagents.
+ set name = "Purge Impurities"
+ set category = "Abilities"
+
+ if(world.time < last_special)
+ return
+
+ last_special = world.time + 50 //To prevent button spam.
+
+ var/mob/living/carbon/human/C = src
+
+ if(C.reviving == 1) //If they're already unable to
+ C << "Your body is currently still recovering from the last time you healed."
+ return
+
+ C.reviving = 1 // apply cooldown, this also locks out their main regen.
+ C << "You start to purge your body of poisons and intruders..."
+
+ var/grossness = min(20, toxloss)
+
+ for(var/i = 0, i<10,i++) // tick some tox down. This'll clear 20 toxloss in total.
+ if(C)
+ C.adjustToxLoss(-2)
+ sleep(10)
+
+ for(var/obj/item/organ/external/E in C.organs) //half the germ_level of everything. If they're anything short of outright necrotic they'll be fine.
+ var/obj/item/organ/external/G = E
+ if(G.germ_level)
+ grossness += G.germ_level/100
+ G.germ_level = min(0, (G.germ_level/2) - 100)
+
+ for(var/obj/item/organ/internal/I in C.internal_organs)
+ var/obj/item/organ/internal/G = I
+ if(G.germ_level)
+ grossness += G.germ_level/100
+ G.germ_level = min(0, (G.germ_level/2) - 100)
+
+ //and now comes the fun part because they're gross
+ for (var/i = 0, i<10,i++)
+ if (prob(min(100, grossness)))
+ C << "You feel nauseous..."
+ spawn(30)
+ C.vomit()
+ sleep(50)
+ grossness = (grossness/2)
+
+ C << "You have finished purging your body of impurities."
+
+ spawn(300 SECONDS) //5 minute wait until you can purge or regenerate again.
+ C.reviving = 0
/mob/living/carbon/human/proc/hasnutriment()
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
index fefa6ee203..79a0a13138 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
@@ -22,7 +22,8 @@
icobase_tail = 1
inherent_verbs = list(
/mob/living/carbon/human/proc/begin_reconstitute_form,
- /mob/living/carbon/human/proc/sonar_ping)
+ /mob/living/carbon/human/proc/sonar_ping,
+ /mob/living/carbon/human/proc/purge_impurities)
min_age = 18
max_age = 80
@@ -53,7 +54,7 @@
//handle feral triggers
- if(H.nutrition <= 200||H.traumatic_shock > 36) // Stress factors are in play
+ if(H.nutrition <= 200||H.traumatic_shock > min(60, H.nutrition/10)) // Stress factors are in play
// If they're hungry, give nag messages.
if (!istype(H.loc, /mob)) // if they're in a mob, skip the hunger stuff so it doesn't mess with drain/absorption modes.
if(H.nutrition < 200 && H.nutrition > 150)
@@ -73,7 +74,7 @@
H.feral = min(150-H.nutrition, H.feral+1) //Feralness increases while this hungry, capped at 50-150 depending on hunger.
// If they're hurt, chance of snapping. Not if they're straight-up KO'd though.
- if (H.stat == CONSCIOUS && H.traumatic_shock >=36) //30 brute/burn, or 18 halloss.
+ if (H.stat == CONSCIOUS && H.traumatic_shock >=min(60, H.nutrition/10)) //at 360 nutrition, this is 30 brute/burn, or 18 halloss. Capped at 50 brute/30 halloss - if they take THAT much, no amount of satiation will help them. Also they're fat.
if (2.5*H.halloss >= H.traumatic_shock) //If the majority of their shock is due to halloss, greater chance of snapping.
if(prob(min(10,(0.2 * H.traumatic_shock))))
if(H.feral == 0)
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
index 94139578c7..196ac323f4 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
@@ -2,21 +2,21 @@
name = "Fast Metabolism"
desc = "You process ingested and injected reagents faster, but get hungry faster."
cost = 0
- var_changes = list("metabolic_rate" = 1.2, "hunger_factor" = 0.2) //Teshari level
+ var_changes = list("metabolic_rate" = 1.2, "hunger_factor" = 0.2, "metabolism" = 0.005) //Teshari level
excludes = list(/datum/trait/metabolism_down, /datum/trait/metabolism_apex)
/datum/trait/metabolism_down
name = "Slow Metabolism"
desc = "You process ingested and injected reagents slower, but get hungry slower."
cost = 0
- var_changes = list("metabolic_rate" = 0.8, "hunger_factor" = 0.04)
+ var_changes = list("metabolic_rate" = 0.8, "hunger_factor" = 0.04, "metabolism" = 0.001)
excludes = list(/datum/trait/metabolism_up, /datum/trait/metabolism_apex)
/datum/trait/metabolism_apex
name = "Apex Metabolism"
desc = "Finally a proper excuse for your predatory actions. Also makes you process reagents faster but that's totally irrelevant. May cause excessive immersions with large/taur characters. Not recommended for efficient law-abiding workers or eco-aware NIF users."
cost = 0
- var_changes = list("metabolic_rate" = 2, "hunger_factor" = 0.5) //Big boy level
+ var_changes = list("metabolic_rate" = 2, "hunger_factor" = 0.5, "metabolism" = 0.010) //Big boy level
excludes = list(/datum/trait/metabolism_up, /datum/trait/metabolism_down)
/*
/datum/trait/vore_numbing
diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm
index a81a104d67..03c11019af 100644
--- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm
@@ -218,6 +218,16 @@
/obj/item/clothing/accessory/storage/black_vest/fluff/kilano
)
+// JackNoir413: Mor Xaina
+/obj/item/weapon/storage/box/fluff/morxaina
+ name = "Fashionable clothes set"
+ desc = "Set of custom-made, expensive attire elements."
+ has_items = list(
+ /obj/item/clothing/shoes/fluff/morthighs,
+ /obj/item/clothing/gloves/fluff/morsleeves,
+ /obj/item/clothing/under/fluff/morunder)
+
+
/*
Swimsuits, for general use, to avoid arriving to work with your swimsuit.
*/
diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
index c79b72afa3..7faae9d2cd 100644
--- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
@@ -1400,6 +1400,30 @@ Departamental Swimsuits, for general use
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "alfonso_visor"
icon_override = 'icons/vore/custom_onmob_vr.dmi'
+
+//JackNoir413: Mor Xaina
+/obj/item/clothing/under/fluff/morunder
+ desc = "Fashionable grey top, combined with black shorts. Fancy!"
+ icon = 'icons/vore/custom_clothes_vr.dmi'
+ icon_state = "morunder"
+ icon_override = 'icons/vore/custom_clothes_vr.dmi'
+ item_state = "morunder_mob"
+
+//JackNoir413: Mor Xaina
+/obj/item/clothing/gloves/fluff/morsleeves
+ desc = "Cute long armwarmers. Sadly, they don't cover fingers."
+ icon = 'icons/vore/custom_clothes_vr.dmi'
+ icon_state = "morsleeves"
+ icon_override = 'icons/vore/custom_clothes_vr.dmi'
+ item_state = "morsleeves_mob"
+
+//JackNoir413: Mor Xaina
+/obj/item/clothing/shoes/fluff/morthighs
+ desc = "Striped, soft thigh-high socks with no fingers. Must be hard to wash them..."
+ icon = 'icons/vore/custom_clothes_vr.dmi'
+ icon_state = "morthighs"
+ icon_override = 'icons/vore/custom_clothes_vr.dmi'
+ item_state = "morthighs_mob"
//Jackets For General Use. Sprited by Joji.
/obj/item/clothing/suit/storage/fluff/jacket //Not the toggle version since it uses custom toggle code to update the on-mob icon.
diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm
index 3b0cce0782..6521ecfde3 100644
--- a/code/modules/vore/fluffstuff/custom_items_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_items_vr.dm
@@ -194,20 +194,6 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie
to_helmet = /obj/item/clothing/head/helmet/space/void/engineering/hazmat/fluff/screehelm
to_suit = /obj/item/clothing/suit/space/void/engineering/hazmat/fluff/screespess
-/obj/item/clothing/glasses/omnihud/eng/meson/fluff/scree
- name = "OCR headset"
- desc = "A meson-scanning headset with retinal projector and ultrasonic earpiece. This one is set up to read text to the wearer."
- description_info = "The device appears to be configured as an aid to reading, with an OCR system that highlights text for the wearer and \
- reads it out through the earpiece, while rendering the meson scan data as high-frequency sound. It's like a HUD for bats."
-
- mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
- if(..())
- if(H.ckey != "scree")
- H << "This thing isn't set up for your visual spectrum OR your audio range."
- return 0
- else
- return 1
-
//General Use
/obj/item/weapon/flag
name = "Nanotrasen Banner"
diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm
index 8c2ccda0d3..8e4bf21b12 100644
--- a/code/modules/vore/resizing/resize_vr.dm
+++ b/code/modules/vore/resizing/resize_vr.dm
@@ -181,14 +181,17 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
else
src << "You quickly push [tmob] to the ground with your foot!"
tmob << "[src] pushes you down to the ground with their foot!"
+ log_and_message_admins("has pushed [tmob] to the ground by stepping on them.") //Both humans and mobs, since stepping on mobs can be abused.
+ admin_attack_log(src, tmob, "Pinned [tmob.name] under foot.", "Was pinned under foot by [src.name].", "Pinned [tmob.name] under foot.")
return 1
if(src.m_intent == "walk") //Most likely intentionally stepping on them.
var/size_damage_multiplier = (src.size_multiplier - tmob.size_multiplier)
var/damage = (rand(15,30)* size_damage_multiplier) //Since stunned is broken, let's do this. Rand 15-30 multiplied by 1 min or 1.75 max. 15 holo to 52.5 holo, depending on RNG and size differnece.
tmob.apply_damage(damage, HALLOSS)
tmob.resting = 1
-
var/mob/living/carbon/human/H = src
+ log_and_message_admins("has stomped on, [tmob] pinning them to the ground and dealing [damage] HALLOSS.") //Both humans and mobs, since stepping on mobs can be abused.
+ admin_attack_log(src, tmob, "Pinned [tmob.name] under foot for [damage] HALLOSS.", "Was pinned under foot by [src.name] for [damage] HALLOSS.", "Pinned [tmob.name] under foot for [damage] HALLOSS.")
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
src << "You push down on [tmob] with your tail, pinning them down under you!"
tmob << "[src] pushes down on you with their tail, pinning you down below them!"
@@ -215,6 +218,8 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
M.drip(0.1)
for(var/obj/item/organ/I in M.organs)
tmob.take_overall_damage(calculated_damage, 0) //Due to the fact that this deals damage across random body parts, this should heal quite fast.
+ log_and_message_admins("has trampled [M] for [calculated_damage * 10] damage.") //Only crushing humans get logged.
+ admin_attack_log(src, M, "trampled [tmob.name] under foot for [damage * 10] damage.", "Was crushed under foot by [H.name] for [damage * 10] damage.", "Crushed [M.name] for [damage * 10] damage.")
else
src << "You carelessly step down onto [tmob], crushing them!!"
tmob << "[src] steps carelessly on your body, crushing you!"
@@ -223,6 +228,8 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
for(var/obj/item/organ/I in M.organs)
tmob.take_overall_damage(calculated_damage, 0) // 5 damage min, 26.25 damage max, depending on size & RNG. If they're only stepped on once, the damage will heal over time.
M.drip(0.1)
+ log_and_message_admins("has trampled [M] for [calculated_damage * 10] damage.")
+ admin_attack_log(src, M, "Crushed [tmob.name] under foot for [damage * 10] damage.", "Was crushed under foot by [H.name] for [damage * 10] damage.", "Crushed [M.name] for [damage * 10] damage.")
return 1
if(src.m_intent == "walk") //Oh my.
@@ -236,6 +243,8 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
for(var/obj/item/organ/I in M.organs)
tmob.take_overall_damage(damage, 0) //17.5 damage min, 91.875 damage max. If they're only stepped on once, the damage will heal over time.
M.drip(3) //The least of your problems, honestly.
+ log_and_message_admins("has harshly crushed [M] for [damage * 10] damage.")
+ admin_attack_log(src, M, "Crushed [M.name] under foot for [damage * 10] damage.", "Was crushed under foot by [H.name] for [damage * 10] damage.", "Crushed [M.name] for [damage * 10] damage.")
else
src << "You methodically place your foot down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!"
tmob << "[src] methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!"
@@ -244,17 +253,10 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
for(var/obj/item/organ/I in M.organs)
tmob.take_overall_damage(damage, 0)
M.drip(3)
+ log_and_message_admins("has harshly crushed [M] for [damage * 10] damage.")
+ admin_attack_log(src, M, "Crushed [M.name] under foot for [damage * 10] damage.", "Was crushed under foot by [H.name] for [damage * 10] damage.", "Crushed [M.name] for [damage * 10] damage.")
return 1
- var/mob/living/carbon/human/H = src
- if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
- src << "You steamroller over [tmob] with your heavy tail!"
- tmob << "[src] ploughs you down mercilessly with their heavy tail!"
- else
- src << "You bring your foot down heavily upon [tmob]!"
- tmob << "[src] steps carelessly on your body!"
- return 1
-
if(src.a_intent == I_GRAB && src.canmove && !src.buckled)
if((src.get_effective_size() - tmob.get_effective_size()) >= 0.50)
now_pushing = 0
diff --git a/config/custom_items.txt b/config/custom_items.txt
index 09cd41d6a4..a646f982e1 100644
--- a/config/custom_items.txt
+++ b/config/custom_items.txt
@@ -280,6 +280,12 @@ item_path: /obj/item/weapon/storage/backpack/messenger/sec/fluff/ivymoomoo
# ######## J CKEYS
+{
+ckey: jacknoir413
+character_name: Mor Xaina
+item_path: /obj/item/clothing/under/fluff/morxaina
+}
+
{
ckey: jacobdragon
character_name: Earthen Breath
@@ -602,12 +608,6 @@ character_name: Scree
item_path: /obj/item/clothing/head/fluff/pompom
}
-{
-ckey: scree
-character_name: Scree
-item_path: /obj/item/clothing/glasses/omnihud/eng/meson/fluff/scree
-}
-
{
ckey: seiga
character_name: Alfonso Oak Telanor
diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi
index 2442e69f2e..802588e317 100644
Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ