Merge branch 'master' into SUCCUBUS_DRAIN

This commit is contained in:
Cameron653
2017-10-15 17:46:52 -04:00
committed by GitHub
12 changed files with 148 additions and 38 deletions
@@ -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)
@@ -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++
@@ -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"
@@ -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 << "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>"
@@ -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 << "<span class='notice'>You start to purge your body of poisons and intruders...</span>"
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 << "<span class='warning'>You feel nauseous...</span>"
spawn(30)
C.vomit()
sleep(50)
grossness = (grossness/2)
C << "<span class='notice'>You have finished purging your body of impurities.</span>"
spawn(300 SECONDS) //5 minute wait until you can purge or regenerate again.
C.reviving = 0
/mob/living/carbon/human/proc/hasnutriment()
@@ -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)
@@ -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
@@ -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.
*/
@@ -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.
@@ -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 << "<span class='warning'>This thing isn't set up for your visual spectrum OR your audio range.</span>"
return 0
else
return 1
//General Use
/obj/item/weapon/flag
name = "Nanotrasen Banner"
+12 -10
View File
@@ -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