@@ -113,7 +113,7 @@
|
||||
"<span class='danger'>You start tenderly lifting [skewee] off of [src]...</span>")
|
||||
if(!do_after(user, 60, target = skewee))
|
||||
skewee.visible_message("<span class='warning'>[skewee] painfully slides back down [src].</span>")
|
||||
skewee.emote("moan")
|
||||
skewee.say("Oof, ouch owwie!!", forced = "fail brass skewer removal")
|
||||
return
|
||||
skewee.visible_message("<span class='danger'>[skewee] comes free of [src] with a squelching pop!</span>", \
|
||||
"<span class='boldannounce'>You come free of [src]!</span>")
|
||||
|
||||
@@ -382,7 +382,7 @@
|
||||
results = list("neurotoxin" = 2)
|
||||
required_reagents = list("gargleblaster" = 1, "morphine" = 1)
|
||||
//FermiChem vars: Easy to make, but hard to make potent
|
||||
OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions
|
||||
OptimalTempMin = 100 // Lower area of bell curve for determining heat based rate reactions
|
||||
OptimalTempMax = 950 // Upper end for above
|
||||
ExplodeTemp = 999 //Temperature at which reaction explodes
|
||||
OptimalpHMin = 4.6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
|
||||
|
||||
@@ -76,4 +76,4 @@
|
||||
throw_range = 3
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
cotton_type = /obj/item/stack/sheet/cotton/durathread
|
||||
cotton_name = "raw durathread"
|
||||
cotton_name = "raw durathread"
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
to_chat(owner, "<span class='notice'>[src] breaks down as it tries to activate.</span>")
|
||||
else
|
||||
owner.revive(full_heal = 1)
|
||||
owner.log_message("[owner] used an implanted [src] to heal themselves! Keep fighting, it's just a flesh wound!", LOG_ATTACK, color="green") //Logging for implanted legion core use
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/regenerative_core/on_life()
|
||||
@@ -85,6 +86,21 @@
|
||||
SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self"))
|
||||
H.revive(full_heal = 1)
|
||||
qdel(src)
|
||||
user.log_message("[user] used [src] to heal [H]! Wake the fuck up, Samurai!", LOG_ATTACK, color="green") //Logging for 'old' style legion core use, when clicking on a sprite of yourself or another.
|
||||
|
||||
/obj/item/organ/regenerative_core/attack_self(mob/user) //Knouli's first hack! Allows for the use of the core in hand rather than needing to click on the target, yourself, to selfheal. Its a rip of the proc just above - but skips on distance check and only uses 'user' rather than 'target'
|
||||
if(ishuman(user)) //Check if user is human, no need for distance check as it's self heal
|
||||
var/mob/living/carbon/human/H = user //Set H to user rather than target
|
||||
if(inert) //Inert cores are useless
|
||||
to_chat(user, "<span class='notice'>[src] has decayed and can no longer be used to heal.</span>")
|
||||
return
|
||||
else //Skip on check if the target to be healed is dead as, if you are dead, you're not going to be able to use it on yourself!
|
||||
to_chat(user, "<span class='notice'>You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments.</span>")
|
||||
SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self"))
|
||||
H.revive(full_heal = 1)
|
||||
qdel(src)
|
||||
H.log_message("[H] used [src] to heal themselves! Making use of Knouli's sexy and intelligent use-in-hand proc!", LOG_ATTACK, color="green") //Logging for 'new' style legion core use, when using the core in-hand.
|
||||
|
||||
|
||||
/obj/item/organ/regenerative_core/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
. = ..()
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
/datum/species/insect
|
||||
name = "Anthromorphic Insect"
|
||||
id = "insect"
|
||||
say_mod = "flutters"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(LIPS,NOEYES,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR)
|
||||
species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
|
||||
mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None",
|
||||
@@ -12,54 +11,36 @@
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
|
||||
liked_food = VEGETABLES | DAIRY
|
||||
disliked_food = FRUIT | GROSS
|
||||
toxic_food = MEAT | RAW
|
||||
mutanteyes = /obj/item/organ/eyes/insect
|
||||
liked_food = MEAT | FRUIT
|
||||
disliked_food = TOXIC
|
||||
should_draw_citadel = TRUE
|
||||
exotic_bloodtype = "BUG"
|
||||
|
||||
/datum/species/insect/on_species_gain(mob/living/carbon/C)
|
||||
/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/insect/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(!H.dna.features["insect_wings"])
|
||||
H.dna.features["insect_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["insect_wings"]) ? H.client.prefs.features["insect_wings"] : "None"]"
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/datum/species/insect/random_name(gender,unique,lastname)
|
||||
if(unique)
|
||||
return random_unique_moth_name()
|
||||
/datum/species/insect/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
var/randname = moth_name()
|
||||
/datum/species/insect/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
if(lastname)
|
||||
randname += " [lastname]"
|
||||
/datum/species/insect/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
return randname
|
||||
/datum/species/insect/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/insect/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
|
||||
..()
|
||||
if(H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
|
||||
to_chat(H, "<span class='danger'>Your precious wings burn to a crisp!</span>")
|
||||
if(H.dna.features["insect_wings"] != "None")
|
||||
H.dna.features["insect_wings"] = "Burnt Off"
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(chem.id == "pestkiller")
|
||||
H.adjustToxLoss(3)
|
||||
H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
|
||||
|
||||
/datum/species/insect/check_weakness(obj/item/weapon, mob/living/attacker)
|
||||
if(istype(weapon, /obj/item/melee/flyswatter))
|
||||
return 9 //flyswatters deal 10x damage to insects
|
||||
return 0
|
||||
|
||||
/datum/species/insect/space_move(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(H.loc && !isspaceturf(H.loc) && (H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None"))
|
||||
var/datum/gas_mixture/current = H.loc.return_air()
|
||||
if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
|
||||
return TRUE
|
||||
/datum/species/insect/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
@@ -57,3 +57,9 @@
|
||||
return
|
||||
to_chat(A, "[src] projects into your mind, <b><i> \"[message]\"</b></i>")
|
||||
log_game("FERMICHEM: [src] has astrally transmitted [message] into [A]")
|
||||
|
||||
//Delete the mob if there's no mind! Pay that mob no mind.
|
||||
/mob/living/simple_animal/astral/Life()
|
||||
if(!mind)
|
||||
qdel(src)
|
||||
. = ..()
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
var/obj/item/paicard/paicard // Inserted pai card.
|
||||
var/allow_pai = 1 // Are we even allowed to insert a pai card.
|
||||
var/bot_name
|
||||
var/oil_spill_type = /obj/effect/decal/cleanable/oil
|
||||
|
||||
var/list/player_access = list() //Additonal access the bots gets when player controlled
|
||||
var/emagged = FALSE
|
||||
@@ -216,9 +217,9 @@
|
||||
to_chat(user, "[src] is in pristine condition.")
|
||||
|
||||
/mob/living/simple_animal/bot/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
if(amount>0 && prob(10))
|
||||
new /obj/effect/decal/cleanable/oil(loc)
|
||||
. = ..()
|
||||
if(. && prob(10))
|
||||
new oil_spill_type(loc)
|
||||
|
||||
/mob/living/simple_animal/bot/updatehealth()
|
||||
..()
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
bot_core_type = /obj/machinery/bot_core/honkbot
|
||||
window_id = "autohonk"
|
||||
window_name = "Honkomatic Bike Horn Unit v1.0.7"
|
||||
oil_spill_type = /obj/effect/decal/cleanable/oil/slippery //slip and slide fun for the whole family
|
||||
data_hud_type = DATA_HUD_SECURITY_BASIC // show jobs
|
||||
path_image_color = "#FF69B4"
|
||||
|
||||
|
||||
@@ -310,6 +310,7 @@
|
||||
emote_see = list("looks at you eagerly for pets!", "wiggles enthusiastically.")
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
var/pseudo_death = FALSE
|
||||
var/mob/living/carbon/human/origin
|
||||
|
||||
/mob/living/simple_animal/pet/cat/custom_cat/death()
|
||||
if (pseudo_death == TRUE) //secret cat chem
|
||||
|
||||
@@ -217,6 +217,7 @@
|
||||
glass_icon_state = "glass_white"
|
||||
glass_name = "glass of milk"
|
||||
glass_desc = "White and nutritious goodness!"
|
||||
pH = 6.5
|
||||
|
||||
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
|
||||
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
|
||||
|
||||
@@ -504,7 +504,7 @@
|
||||
desc = "A a electrode attached to a small circuit box that will tell you the pH of a solution."
|
||||
id = "pHmeter"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_SILVER = 100, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_METAL = 1000, MAT_SILVER = 100, MAT_PLASTIC = 100)
|
||||
build_path = /obj/item/fermichem/pHmeter
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
@@ -749,30 +749,30 @@
|
||||
to_chat(world, "[user]'s power is [power_multiplier].")
|
||||
|
||||
//Mixables
|
||||
var/static/regex/enthral_words = regex("relax|obey|love|serve|docile|so easy|ara ara")
|
||||
var/static/regex/reward_words = regex("good boy|good girl|good pet|good job")
|
||||
var/static/regex/punish_words = regex("bad boy|bad girl|bad pet|bad job")
|
||||
var/static/regex/enthral_words = regex("relax|obey|love|serve|so easy|ara ara|old boy|pip pip|whatho|how about we discuss this|spot of tea")
|
||||
var/static/regex/reward_words = regex("good boy|good girl|good pet|good job|splendid|jolly good|jolly good show|bloody brilliant")
|
||||
var/static/regex/punish_words = regex("bad boy|bad girl|bad pet|bad job|spot of bother|gone and done it now|blast it|buggered it up")
|
||||
//phase 0
|
||||
var/static/regex/saymyname_words = regex("say my name|who am i|whoami")
|
||||
var/static/regex/wakeup_words = regex("revert|awaken|snap") //works
|
||||
var/static/regex/wakeup_words = regex("revert|awaken|snap|attention") //works
|
||||
//phase1
|
||||
var/static/regex/petstatus_words = regex("how are you|what is your status|are you okay")
|
||||
var/static/regex/silence_words = regex("shut up|silence|be silent|ssh|quiet|hush")
|
||||
var/static/regex/speak_words = regex("talk to me|speak")
|
||||
var/static/regex/antiresist_words = regex("unable to resist|give in")//useful if you think your target is resisting a lot
|
||||
var/static/regex/antiresist_words = regex("unable to resist|give in|stop being difficult")//useful if you think your target is resisting a lot
|
||||
var/static/regex/resist_words = regex("resist|snap out of it|fight")//useful if two enthrallers are fighting
|
||||
var/static/regex/forget_words = regex("forget|muddled|awake and forget")
|
||||
var/static/regex/forget_words = regex("forget|muddled|awake and forget|sneaky bollocks|gaslight")
|
||||
var/static/regex/attract_words = regex("come here|come to me|get over here|attract")
|
||||
//phase 2
|
||||
var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //wah, lewd
|
||||
var/static/regex/awoo_words = regex("howl|awoo|bark")
|
||||
var/static/regex/nya_words = regex("nya|meow|mewl")
|
||||
var/static/regex/sleep_words = regex("sleep|slumber|rest")
|
||||
var/static/regex/strip_words = regex("strip|derobe|nude")
|
||||
var/static/regex/strip_words = regex("strip|derobe|nude|at ease|suit off")
|
||||
var/static/regex/walk_words = regex("slow down|walk")
|
||||
var/static/regex/run_words = regex("run|speed up")
|
||||
var/static/regex/liedown_words = regex("lie down") //TO ADD
|
||||
var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown|kneel")
|
||||
var/static/regex/liedown_words = regex("lie down")
|
||||
var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown|kneel|army crawl")
|
||||
//phase 3
|
||||
var/static/regex/statecustom_words = regex("state triggers|state your triggers")
|
||||
var/static/regex/custom_words = regex("new trigger|listen to me")
|
||||
@@ -780,14 +780,14 @@
|
||||
var/static/regex/custom_echo = regex("obsess|fills your mind|loop")
|
||||
var/static/regex/instill_words = regex("feel|entice|overwhel")
|
||||
var/static/regex/recognise_words = regex("recognise me|did you miss me?")
|
||||
var/static/regex/objective_words = regex("new objective|obey this command|unable to resist|compulsed")
|
||||
var/static/regex/heal_words = regex("live|heal|survive|mend|life|pets never die")
|
||||
var/static/regex/objective_words = regex("new objective|obey this command|unable to resist|compulsed|word from hq")
|
||||
var/static/regex/heal_words = regex("live|heal|survive|mend|life|pets never die|heroes never die")
|
||||
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
|
||||
var/static/regex/hallucinate_words = regex("get high|hallucinate")
|
||||
var/static/regex/hallucinate_words = regex("get high|hallucinate|trip balls")
|
||||
var/static/regex/hot_words = regex("heat|hot|hell")
|
||||
var/static/regex/cold_words = regex("cold|cool down|chill|freeze")
|
||||
var/static/regex/getup_words = regex("get up")
|
||||
var/static/regex/pacify_words = regex("more and more docile|complaisant|friendly|pacifist")
|
||||
var/static/regex/getup_words = regex("get up|hop to it")
|
||||
var/static/regex/pacify_words = regex("docile|complaisant|friendly|pacifist")
|
||||
var/static/regex/charge_words = regex("charge|oorah|attack")
|
||||
|
||||
var/distancelist = list(2,2,1.5,1.3,1.15,1,0.8,0.6,0.5,0.25)
|
||||
@@ -1013,7 +1013,7 @@
|
||||
speaktrigger += "I'm really, really horny, "
|
||||
|
||||
//collar
|
||||
if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar))
|
||||
if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar) && H.client?.prefs.lewdchem)
|
||||
speaktrigger += "I love the collar you gave me, "
|
||||
//End
|
||||
if(H.client?.prefs.lewdchem)
|
||||
@@ -1089,7 +1089,7 @@
|
||||
if(C.client?.prefs.lewdchem)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='big warning'>You revert to yourself before being enthralled by your [E.enthrallGender], with no memory of what happened.</b></span>"), 5)
|
||||
else
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='big warning'>You revert to who you were before, with no memory of what happened with [E.master].</b></span>"), 5)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "<span class='big warning'>You revert to who you were before, with no memory of what happened with [E.master], nor their political affiliations.</b></span>"), 5)
|
||||
to_chat(user, "<span class='notice'><i>You put [C] into a sleeper state, ready to turn them back at the snap of your fingers.</i></span>")
|
||||
|
||||
//ATTRACT
|
||||
@@ -1249,6 +1249,9 @@
|
||||
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
|
||||
to_chat(user, "<span class='warning'>You need to be next to your pet to give them a new trigger!</b></span>")
|
||||
continue
|
||||
if(!H.client?.prefs.lewdchem)
|
||||
to_chat(user, "<span class='warning'>[H] seems incapable of being implanted with triggers.</b></span>")
|
||||
continue
|
||||
else
|
||||
user.emote("me", 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.")
|
||||
user.SetStun(1000)//Hands are handy, so you have to stay still
|
||||
@@ -1287,6 +1290,9 @@
|
||||
if (get_dist(user, H) > 1)//Requires user to be next to their pet.
|
||||
to_chat(user, "<span class='warning'>You need to be next to your pet to give them a new echophrase!</b></span>")
|
||||
continue
|
||||
if(!H.client?.prefs.lewdchem)
|
||||
to_chat(user, "<span class='warning'>[H] seems incapable of being implanted with an echoing phrase.</b></span>")
|
||||
continue
|
||||
else
|
||||
user.emote("me", 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.")
|
||||
user.SetStun(1000)//Hands are handy, so you have to stay still
|
||||
@@ -1342,8 +1348,8 @@
|
||||
for(var/V in listeners)
|
||||
var/mob/living/carbon/human/H = V
|
||||
var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(E.phase == 3 && H.client?.prefs.lewdchem)
|
||||
var/instill = stripped_input(user, "Instill an emotion in your [(user.client?.prefs.lewdchem?"Your pet":"listener")].", MAX_MESSAGE_LEN)
|
||||
if(E.phase >= 3 && H.client?.prefs.lewdchem)
|
||||
var/instill = stripped_input(user, "Instill an emotion in [H].", MAX_MESSAGE_LEN)
|
||||
to_chat(H, "<i>[instill]</i>")
|
||||
to_chat(user, "<span class='notice'><i>You sucessfully instill a feeling in [H]</i></span>")
|
||||
log_game("FERMICHEM: [H] has been instilled by [user] with [instill] via MKUltra.")
|
||||
|
||||
Reference in New Issue
Block a user