Winding down to the final commits.

This commit is contained in:
Fermi
2019-05-25 01:04:00 +01:00
parent 05aaeb4d70
commit faf6585b69
13 changed files with 401 additions and 184 deletions
+48
View File
@@ -313,3 +313,51 @@
/obj/item/assembly/flash/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
activate()
return ..()
//ported from tg - check to make sure it can't appear where it's not supposed to.
/obj/item/assembly/flash/hypnotic
desc = "A modified flash device, programmed to emit a sequence of subliminal flashes that can send a vulnerable target into a hypnotic trance."
//flashing_overlay = "flash-hypno" doesn't seem to be in citcode yet.
light_color = LIGHT_COLOR_PINK
cooldown = 20
/obj/item/assembly/flash/hypnotic/burn_out()
return
/obj/item/assembly/flash/hypnotic/flash_carbon(mob/living/carbon/M, mob/user, power = 15, targeted = TRUE, generic_message = FALSE)
if(!istype(M))
return
if(user)
log_combat(user, M, "[targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"]", src)
else //caused by emp/remote signal
M.log_message("was [targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"]",LOG_ATTACK)
if(generic_message && M != user)
to_chat(M, "<span class='disarm'>[src] emits a soothing light...</span>")
if(targeted)
if(M.flash_act(1, 1))
var/hypnosis = FALSE
if(M.hypnosis_vulnerable())
hypnosis = TRUE
if(user)
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>", "<span class='danger'>You hypno-flash [M]!</span>")
if(!hypnosis)
to_chat(M, "<span class='notice'>The light makes you feel oddly relaxed...</span>")
M.confused += min(M.confused + 10, 20)
M.dizziness += min(M.dizziness + 10, 20)
M.drowsyness += min(M.drowsyness + 10, 20)
//M.apply_status_effect(STATUS_EFFECT_PACIFY, 100) for when we port apply_status_effect pacifist (maybe I'll do it)
else
M.apply_status_effect(/datum/status_effect/trance, 200, TRUE)
else if(user)
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>", "<span class='warning'>You fail to hypno-flash [M]!</span>")
else
to_chat(M, "<span class='danger'>[src] fails to blind you!</span>")
else if(M.flash_act())
to_chat(M, "<span class='notice'>Such a pretty light...</span>")
M.confused += min(M.confused + 4, 20)
M.dizziness += min(M.dizziness + 4, 20)
M.drowsyness += min(M.drowsyness + 4, 20)
//M.apply_status_effect(STATUS_EFFECT_PACIFY, 40) for when we port apply_status_effect pacifist (maybe I'll do it)
+15 -11
View File
@@ -566,6 +566,7 @@ im
//message_admins("updating targetVol from [targetVol]")
for(var/B in cached_required_reagents) //
multiplier = min(multiplier, round(get_reagent_amount(B) / cached_required_reagents[B]))
multiplier*=10
if (multiplier == 0)
STOP_PROCESSING(SSprocessing, src)
fermiIsReacting = FALSE
@@ -646,12 +647,12 @@ im
var/purity = 1
//var/tempVol = totalVol
//message_admins("Loop beginning")
message_admins("multiplier [multiplier], target vol:[targetVol], rate lim: [C.RateUpLim], reactedVol: [reactedVol]")
//Begin Parse
WARNING("Purity precalc: [overallPurity]")
update_holder_purity(C)//updates holder's purity
WARNING("Purity postcalc: [overallPurity]")
//WARNING("Purity precalc: [overallPurity]")
//update_holder_purity(C)//updates holder's purity
//WARNING("Purity postcalc: [overallPurity]")
//Check extremes first
if (cached_temp > C.ExplodeTemp)
@@ -709,8 +710,7 @@ im
deltaT = 0
//message_admins("calculating temperature factor, min: [C.OptimalTempMin], max: [C.OptimalTempMax], Exponential: [C.CurveSharpT], deltaT: [deltaT]")
stepChemAmmount = deltaT //used to have multipler, now it doesn't
stepChemAmmount = CLAMP((deltaT * C.RateUpLim), 0, (targetVol - reactedVol)) //used to have multipler, now it doesn't
if (stepChemAmmount > C.RateUpLim)
stepChemAmmount = C.RateUpLim
else if (stepChemAmmount <= 0.01)
@@ -728,7 +728,7 @@ im
//TODO: Check overall beaker purity with proc
//Then adjust purity of result AND yeild ammount with said purity.
stepChemAmmount *= overallPurity
stepChemAmmount *= reactant_purity(C)
// End.
/*
@@ -764,7 +764,7 @@ im
return (reactedVol)
/datum/reagents/proc/update_holder_purity(var/datum/chemical_reaction/fermi/C, holder)
/datum/reagents/proc/reactant_purity(var/datum/chemical_reaction/fermi/C, holder)
var/list/cached_reagents = reagent_list
var/i
var/cachedPurity
@@ -773,7 +773,7 @@ im
if (R in cached_reagents)
cachedPurity += R.purity
i++
overallPurity = cachedPurity/i
return cachedPurity/i
/datum/reagents/proc/isolate_reagent(reagent)
var/list/cached_reagents = reagent_list
@@ -881,12 +881,12 @@ im
if (pH <= 2)
var/datum/effect_system/smoke_spread/chem/s = new
var/turf/T = get_turf(my_atom)
var/datum/reagents/R = new/datum/re agents(3000)//I don't want to hold it back..!
var/datum/reagents/R = new/datum/reagents(3000)//I don't want to hold it back..!
R.add_reagent("fermiAcid", amount)
for (var/datum/reagent/reagentgas in reagent_list)
R.add_reagent(reagentgas, amount/5)
remove_reagent(reagentgas, amount/5)
s.set_up(R, CLAMP(amount/10, 0, 3), T)
s.set_up(R, CLAMP(amount/10, 0, 1), T)
s.start()
return FALSE
@@ -937,6 +937,10 @@ im
//if(R.FermiChem == TRUE)
// R.on_mob_add(my_atom)
R.on_merge(data, amount, my_atom, other_purity)
if(istype(D, /datum/reagent/fermi))//Is this a fermichem?
var/datum/reagent/fermi/Ferm = D //It's Fermi time!
if(Ferm.OnMobMergeCheck == TRUE) //// Ooooooh fermifermifermi
R.on_mob_add(my_atom, amount)
if(!no_react)
handle_reactions()
@@ -1930,6 +1930,7 @@
if(prob(20))
to_chat(M, "You find yourself unable to supress the desire to meow!")
M.emote("nya")
..()
//Kept for legacy, I think it will break everything if you enable it.
/datum/reagent/penis_enlargement
+63 -23
View File
@@ -717,21 +717,21 @@
if(user.mind)
//Chaplains are very good at indoctrinating
if(user.mind.assigned_role == "Chaplain")
power_multiplier *= 2
power_multiplier *= 1.2
//Command staff has authority
if(user.mind.assigned_role in GLOB.command_positions)
power_multiplier *= 1.4
power_multiplier *= 1.1
//Why are you speaking
if(user.mind.assigned_role == "Mime")
power_multiplier *= 0.5
//Cultists are closer to their gods and are better at indoctrinating
if(iscultist(user))
power_multiplier *= 2
power_multiplier *= 1.2
else if (is_servant_of_ratvar(user))
power_multiplier *= 2
power_multiplier *= 1.2
else if (is_devil(user))//The devil is supposed to be seductive, right?
power_multiplier *= 2
power_multiplier *= 1.2
//range = 0.5 - 4.2~
//most cases = 1-2
@@ -854,10 +854,16 @@
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'>[E.enthrallGender] has praised me!!</b></span>"), 5)
if(L.has_trait(TRAIT_NYMPHO))
L.adjustArousalLoss(2*power_multiplier)
/* TODO: ADD THIS IN WHEN MASO IS MERGED
if(L.has_trait(TRAIT_MASO))
E.enthrallTally -= power_multiplier
E.resistanceTally += power_multiplier
E.cooldown += 1
*/
else
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='nicegreen'><b><i>I've been praised for doing a good job!</b></i></span>"), 5)
E.resistanceTally -= power_multiplier
E.enthrallTally += 1
E.enthrallTally += power_multiplier
var/descmessage = "[(L.lewd?"I feel so happy! I'm a good pet who [E.enthrallGender] loves!":"I did a good job!")]"
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallpraise", /datum/mood_event/enthrallpraise, descmessage)
E.cooldown += 1
@@ -867,18 +873,25 @@
for(var/V in listeners)
var/mob/living/L = V
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
power_multiplier *= distancelist[get_dist(user, V)+1]
//power_multiplier *= distancelist[get_dist(user, V)+1]
//power_multiplier += (get_dist(V, user)**-2)*2 //2, 2, 0.5, 0.2, 0.125, 0.05, 0.04, 0.03, alternatively make a list and use the return as index values
var/descmessage = "[(L.lewd?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]"
if (L.lewd)
E.resistanceTally /= 1*power_multiplier
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='warning'>I've let [E.enthrallGender] down...</b></span>"), 5)
/* TODO: ADD THIS IN WHEN MASO IS MERGED
if(L.has_trait(TRAIT_MASO))
L.adjustArousalLoss(3*power_multiplier)
descmessage += " And yet, it feels good..!"
E.enthrallTally += power_multiplier
E.resistanceTally -= power_multiplier
E.cooldown += 1
*/
else
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='warning'>I've failed [E.master]...</b></span>"), 5)
var/descmessage = "[(L.lewd?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]"
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallscold", /datum/mood_event/enthrallscold, descmessage)
E.resistanceTally += 1
E.cooldown += 1
E.resistanceTally += power_multiplier
E.enthrallTally += power_multiplier
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallscold", /datum/mood_event/enthrallscold, descmessage)
E.cooldown += 1
//teir 0
@@ -891,7 +904,7 @@
if(C.lewd)
addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.enthrallGender]"), 5)
else
addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.master]"), 5)//The least lewdest I could think of
addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.master]"), 5)
//WAKE UP
else if((findtext(message, wakeup_words)))
@@ -938,7 +951,7 @@
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
E.status = "Antiresist"
E.statusStrength = (1 * power_multiplier * E.phase)
E.cooldown += 6//Too short?
E.cooldown += 15//Too short? yes, made 15
//RESIST
else if((findtext(message, resist_words)))
@@ -993,6 +1006,9 @@
E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
E.enthrallTally += power_multiplier
E.cooldown += 6
else
H.throw_at(get_step_towards(user,H), 3 * power_multiplier, 1 * power_multiplier)
//awoo
@@ -1022,7 +1038,7 @@
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)
C.Sleeping(40 * power_multiplier)
C.Sleeping(45 * power_multiplier)
E.cooldown += 10
//STRIP
@@ -1039,7 +1055,7 @@
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='warning'>Before you can even think about it, you quickly remove your clothes in response to [(H.lewd?"your [E.enthrallGender]'s command'":"[E.master]'s directive'")].</b></span>"), 5)
E.cooldown += 10
//WALK doesn't work?
//WALK doesn't work? it does, randomly, work now
else if((findtext(message, walk_words)))
for(var/V in listeners)
var/mob/living/L = V
@@ -1061,13 +1077,24 @@
L.toggle_move_intent()
E.cooldown += 1
//LIE DOWN
else if(findtext(message, liedown_words))
for(var/V in listeners)
var/mob/living/L = V
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)//Tier 2 only
L.lay_down()
E.cooldown += 10
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You suddenly lie down!'</b></span>"), 5)
//KNOCKDOWN
else if(findtext(message, knockdown_words))
for(var/V in listeners)
var/mob/living/L = V
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(3 to INFINITY)//Tier 2 only
if(2 to INFINITY)//Tier 2 only
L.Knockdown(30 * power_multiplier * E.phase)
E.cooldown += 8
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You suddenly drop to the ground!'</b></span>"), 5)
@@ -1080,7 +1107,7 @@
var/speaktrigger = ""
var/mob/living/carbon/C = V
var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
if (E.phase > 3)
if (E.phase > 2)
for (var/trigger in E.customTriggers)
speaktrigger += "[trigger], "
C.add_trait(TRAIT_DEAF, "Triggers") //So you don't trigger yourself!
@@ -1099,6 +1126,8 @@
return
else
user.emote(user, 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
H.SetStun(1000)
if (E.mental_capacity >= 10)
var/trigger = stripped_input(user, "Enter the trigger phrase", MAX_MESSAGE_LEN)
var/trigger2 = stripped_input(user, "Enter the effect.", MAX_MESSAGE_LEN)
@@ -1107,14 +1136,18 @@
if (trigger2 == "speak" || trigger2 == "echo")
var/trigger3 = stripped_input(user, "Enter the phrase spoken.", MAX_MESSAGE_LEN)
E.customTriggers[trigger] = list(trigger2, trigger3)
message_admins("[H] has been implanted by [user] with [trigger], triggering [trigger2], to send [trigger3].")
else
E.customTriggers[trigger] = trigger2
message_admins("[H] has been implanted by [user] with [trigger], triggering [trigger2].")
E.mental_capacity -= 10
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(H.lewd?"your [E.enthrallGender]":"[E.master]")] whispers you a new trigger.</span>"), 5)
else
to_chat(user, "<span class='warning'>Your pet looks at you confused, it seems they don't understand that effect!</b></span>")
else
to_chat(user, "<span class='warning'>Your pet looks at you with a vacant blase expression, you don't think you can program anything else into them</b></span>")
user.SetStun(0)
H.SetStun(0)
//CUSTOM OBJECTIVE
else if((findtext(message, objective_words)))
@@ -1127,6 +1160,8 @@
return
else
user.emote(user, 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.'")
user.SetStun(1000)//So you can't run away!
H.SetStun(1000)
if (E.mental_capacity >= 250 || message == "objective")
var/datum/objective/brainwashing/objective = stripped_input(user, "Add an objective to give your pet.", MAX_MESSAGE_LEN)
if(!LAZYLEN(objective))
@@ -1137,12 +1172,16 @@
objective = replacetext(lowertext(objective), "harm", "snuggle")
objective = replacetext(lowertext(objective), "decapitate", "headpat")
objective = replacetext(lowertext(objective), "strangle", "meow at")
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(H.lewd?"your [E.enthrallGender]":"[E.master]")] whispers you a new objective.</span>"), 5)
objective = replacetext(lowertext(objective), "suicide", "self-love")
message_admins("[H] has been implanted by [user] with the objective [objective].")
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='notice'>[(H.lewd?"Your [E.enthrallGender]":"[E.master]")] whispers you a new objective.</span>"), 5)
brainwash(H, objective)
E.mental_capacity -= 250
E.mental_capacity -= 200
//else if (E.mental_capacity >= 150)
else
to_chat(user, "<span class='warning'>Your pet looks at you with a vacant blasé expression, you don't think you can program anything else into them</b></span>")
user.SetStun(0)
H.SetStun(0)
//RECOGNISE
@@ -1168,7 +1207,7 @@
E.statusStrength = (5 * power_multiplier)
E.cooldown += 5
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You begin to lick your wounds.</b></span>"), 5)
L.Stun(40)
L.Stun(5 * power_multiplier)
//STUN
else if(findtext(message, stun_words))
@@ -1197,7 +1236,7 @@
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(3 to INFINITY)//Tier 3 only
L.adjust_bodytemperature(10 * power_multiplier)//This seems nuts, reduced it
L.adjust_bodytemperature(50 * power_multiplier)//This seems nuts, reduced it, but then it didn't do anything, so I reverted it.
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You feel your metabolism speed up!</b></span>"), 5)
//COLD
@@ -1207,7 +1246,7 @@
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(3 to INFINITY)//Tier 3 only
L.adjust_bodytemperature(-10 * power_multiplier)//This
L.adjust_bodytemperature(-50 * power_multiplier)//This
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You feel your metabolism slow down!</b></span>"), 5)
@@ -1243,6 +1282,7 @@
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(3 to INFINITY)//Tier 3 only
E.statusStrength = 2* power_multiplier
E.status = "charge"
E.cooldown += 10
+8 -1
View File
@@ -1504,7 +1504,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 15
restricted_roles = list("Clown")
/datum/uplink_item/device_tools/honkpins //Idealy so they can place it into their own guns without needing cargo
/datum/uplink_item/device_tools/honkpins //Idealy so they can place it into their own guns without needing cargo
name = "Hilarious firing pin"
desc = "A single firing pin made for Clown agents, this firing pin makes any gun honk when fired if not a true clown! \
This firing pin also helps you fire the gun correctly. May the HonkMother HONK you agent."
@@ -1552,6 +1552,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/storage/fancy/cigarettes/cigpack_syndicate
cost = 2
//ported from tg as is along with functions, feel free to edit/remove
/datum/uplink_item/device_tools/hypnotic_flash
name = "Hypnotic Flash"
desc = "A modified flash able to hypnotize targets. If the target is not in a mentally vulnerable state, it will only confuse and pacify them temporarily."
item = /obj/item/assembly/flash/hypnotic
cost = 7
/datum/uplink_item/badass/balloon
name = "Syndicate Balloon"
desc = "For showing that you are THE BOSS: A useless red balloon with the Syndicate logo on it. \