Field of Vision component. (#12075)
* Hopeless WIP for vision cones. * Core component and hooks done * Removing clutter. * linter bashing me for using statements as args. * Ok. * continue * bring back the macro * Configs and openspace filter. * Chat plane, reset perspective signal, mechs/vehicles cases, machineries. * view, viewers and spoopy ghosts. * Renamed component, admin fun button and snowflakes robots. * Whoopsie. * Yikes * test merge tweak. * radial yaketi sax. * Fixed tgui UIs, some messages not displayed to the target. * Documentation and a little bugfix. * Pulling QoL, seventh plane made in this PR. * Fix. * Tweaks and improvements. * Update randomverbs.dm
This commit is contained in:
@@ -25,5 +25,5 @@
|
||||
/mob/living/carbon/onMouseMove(object, location, control, params)
|
||||
if(!(combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
|
||||
return
|
||||
mouse_face_atom(object)
|
||||
face_atom(object, TRUE)
|
||||
lastmousedir = dir
|
||||
|
||||
@@ -194,14 +194,14 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them.
|
||||
if(M.has_status_effect(STATUS_EFFECT_INLOVE))//Can't be enthralled when enthralled, so to speak.
|
||||
return
|
||||
var/list/seen = viewers(7, get_turf(M))
|
||||
var/list/seen = (M.visible_atoms(M.client?.view || world.view) - M) | viewers(M.client?.view || world.view, M)
|
||||
for(var/victim in seen)
|
||||
if(ishuman(victim))
|
||||
var/mob/living/carbon/V = victim
|
||||
if((V == M) || (!V.client) || (V.stat == DEAD))
|
||||
seen = seen - victim
|
||||
if(!V.client || V.stat == DEAD)
|
||||
seen -= victim
|
||||
else
|
||||
seen = seen - victim
|
||||
seen -= victim
|
||||
|
||||
if(LAZYLEN(seen))
|
||||
return
|
||||
@@ -213,7 +213,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
var/mob/living/carbon/C = get_mob_by_key(creatorID)
|
||||
if(M.has_status_effect(STATUS_EFFECT_INLOVE))
|
||||
return
|
||||
if((C in viewers(7, get_turf(M))) && (C.client))
|
||||
if(C.client && (M in C.visible_atoms(C.client.view)))
|
||||
M.reagents.del_reagent(type)
|
||||
FallInLove(C, M)
|
||||
return
|
||||
@@ -279,15 +279,13 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
if(HAS_TRAIT(M, TRAIT_MINDSHIELD))
|
||||
return ..()
|
||||
if(!M.has_status_effect(STATUS_EFFECT_INLOVE))
|
||||
var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers
|
||||
var/list/seen = (M.visible_atoms(M.client?.view || world.view) - M) | viewers(M.client?.view || world.view, M)
|
||||
for(var/victim in seen)
|
||||
if((istype(victim, /mob/living/simple_animal/pet/)) || (victim == M) || (M.stat == DEAD) || (!isliving(victim)))
|
||||
seen = seen - victim
|
||||
if(seen.len == 0)
|
||||
if((isanimal(victim)) || (!isliving(victim)))
|
||||
seen -= victim
|
||||
if(!length(seen))
|
||||
return
|
||||
love = pick(seen)
|
||||
if(!love)
|
||||
return
|
||||
M.apply_status_effect(STATUS_EFFECT_INLOVE, love)
|
||||
lewd = (M.client?.prefs.cit_toggles & HYPNO) && (love.client?.prefs.cit_toggles & HYPNO)
|
||||
to_chat(M, "[(lewd?"<span class='love'>":"<span class='warning'>")][(lewd?"You develop a sudden crush on [love], your heart beginning to race as you look upon them with new eyes.":"You suddenly feel like making friends with [love].")] You feel strangely drawn towards them.</span>")
|
||||
|
||||
@@ -98,10 +98,8 @@
|
||||
M.emote("cough")
|
||||
var/obj/item/toy/plush/P = pick(subtypesof(/obj/item/toy/plush))
|
||||
new P(T)
|
||||
to_chat(M, "<span class='warning'>You feel a lump form in your throat, as you suddenly cough up what seems to be a hairball?</b></span>")
|
||||
var/list/seen = viewers(8, T)
|
||||
for(var/mob/S in seen)
|
||||
to_chat(S, "<span class='warning'>[M] suddenly coughs up a [P.name]!</b></span>")
|
||||
M.visible_message("<span class='warning'>[M] suddenly coughs up a [P.name]!</b></span>",\
|
||||
"<span class='warning'>You feel a lump form in your throat, as you suddenly cough up what seems to be a hairball?</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
P.throw_at(T2, 8, 1)
|
||||
..()
|
||||
@@ -120,10 +118,10 @@
|
||||
to_chat(M, "You find yourself unable to supress the desire to howl!")
|
||||
M.emote("awoo")
|
||||
if(prob(20))
|
||||
var/list/seen = viewers(5, get_turf(M))//Sound and sight checkers
|
||||
var/list/seen = M.visible_atoms() - M //Sound and sight checkers
|
||||
for(var/victim in seen)
|
||||
if((istype(victim, /mob/living/simple_animal/pet/)) || (victim == M) || (!isliving(victim)))
|
||||
seen = seen - victim
|
||||
if(isanimal(victim) || !isliving(victim))
|
||||
seen -= victim
|
||||
if(LAZYLEN(seen))
|
||||
to_chat(M, "You notice [pick(seen)]'s bulge [pick("OwO!", "uwu!")]")
|
||||
if(16)
|
||||
@@ -141,10 +139,10 @@
|
||||
to_chat(M, "You find yourself unable to supress the desire to howl!")
|
||||
M.emote("awoo")
|
||||
if(prob(5))
|
||||
var/list/seen = viewers(5, get_turf(M))//Sound and sight checkers
|
||||
var/list/seen = M.visible_atoms() - M //Sound and sight checkers
|
||||
for(var/victim in seen)
|
||||
if((istype(victim, /mob/living/simple_animal/pet/)) || (victim == M) || (!isliving(victim)))
|
||||
seen = seen - victim
|
||||
if(isanimal(victim) || !isliving(victim))
|
||||
seen -= victim
|
||||
if(LAZYLEN(seen))
|
||||
to_chat(M, "You notice [pick(seen)]'s bulge [pick("OwO!", "uwu!")]")
|
||||
..()
|
||||
@@ -301,9 +299,8 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
else
|
||||
var/datum/chemical_reaction/Ferm = GLOB.chemical_reagents_list[reagent.type]
|
||||
Ferm.on_reaction(holder, reagent.volume)
|
||||
for(var/mob/M in viewers(8, location))
|
||||
to_chat(M, "<span class='danger'>The solution reacts dramatically, with a meow!</span>")
|
||||
playsound(get_turf(M), 'modular_citadel/sound/voice/merowr.ogg', 50, 1)
|
||||
holder.my_atom.visible_message("<span class='danger'>The solution reacts dramatically, with a meow!</span>")
|
||||
playsound(holder.my_atom, 'modular_citadel/sound/voice/merowr.ogg', 50, 1)
|
||||
holder.clear_reagents()
|
||||
|
||||
/datum/reagent/fermi/acidic_buffer
|
||||
@@ -321,10 +318,8 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
if(LAZYLEN(holder.reagent_list) == 1)
|
||||
return ..()
|
||||
holder.pH = ((holder.pH * holder.total_volume)+(pH * (volume)))/(holder.total_volume + (volume))
|
||||
var/list/seen = viewers(5, get_turf(holder))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The beaker fizzes as the pH changes!</b></span>")
|
||||
playsound(get_turf(holder.my_atom), 'sound/FermiChem/bufferadd.ogg', 50, 1)
|
||||
holder.my_atom.visible_message("<span class='warning'>The beaker fizzes as the pH changes!</b></span>")
|
||||
playsound(holder.my_atom, 'sound/FermiChem/bufferadd.ogg', 50, 1)
|
||||
holder.remove_reagent(type, volume, ignore_pH = TRUE)
|
||||
..()
|
||||
|
||||
@@ -342,10 +337,8 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
if(LAZYLEN(holder.reagent_list) == 1)
|
||||
return ..()
|
||||
holder.pH = ((holder.pH * holder.total_volume)+(pH * (volume)))/(holder.total_volume + (volume))
|
||||
var/list/seen = viewers(5, get_turf(holder))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The beaker froths as the pH changes!</b></span>")
|
||||
playsound(get_turf(holder.my_atom), 'sound/FermiChem/bufferadd.ogg', 50, 1)
|
||||
holder.my_atom.visible_message("<span class='warning'>The beaker froths as the pH changes!</b></span>")
|
||||
playsound(holder.my_atom, 'sound/FermiChem/bufferadd.ogg', 50, 1)
|
||||
holder.remove_reagent(type, volume, ignore_pH = TRUE)
|
||||
..()
|
||||
|
||||
|
||||
@@ -172,9 +172,7 @@
|
||||
S.rabid = 1//Make them an angery boi
|
||||
S.color = "#810010"
|
||||
my_atom.reagents.clear_reagents()
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The cells clump up into a horrifying tumour!</span>")
|
||||
my_atom.visible_message("<span class='warning'>An horrifying tumoural mass forms in [my_atom]!</span>")
|
||||
|
||||
/datum/chemical_reaction/fermi/breast_enlarger
|
||||
name = "Sucubus milk"
|
||||
@@ -211,9 +209,7 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/breast_enlarger/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
var/obj/item/organ/genital/breasts/B = new /obj/item/organ/genital/breasts(get_turf(my_atom))
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a pair of breasts!</b></span>")
|
||||
my_atom.visible_message("<span class='warning'>The reaction suddenly condenses, creating a pair of breasts!</b></span>")
|
||||
var/datum/reagent/fermi/breast_enlarger/BE = locate(/datum/reagent/fermi/breast_enlarger) in my_atom.reagents.reagent_list
|
||||
B.size = ((BE.volume * BE.purity) / 10) //half as effective.
|
||||
my_atom.reagents.clear_reagents()
|
||||
@@ -243,9 +239,7 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/penis_enlarger/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
var/obj/item/organ/genital/penis/P = new /obj/item/organ/genital/penis(get_turf(my_atom))
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a penis!</b></span>")
|
||||
my_atom.visible_message("<span class='warning'>The reaction suddenly condenses, creating a penis!</b></span>")
|
||||
var/datum/reagent/fermi/penis_enlarger/PE = locate(/datum/reagent/fermi/penis_enlarger) in my_atom.reagents.reagent_list
|
||||
P.length = ((PE.volume * PE.purity) / 10)//half as effective.
|
||||
my_atom.reagents.clear_reagents()
|
||||
@@ -383,9 +377,7 @@
|
||||
for(var/i in 1 to amount_to_spawn)
|
||||
var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
|
||||
hat.animate_atom_living()
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The [my_atom] makes an off sounding pop, as a hat suddenly climbs out of it!</b></span>")
|
||||
my_atom.visible_message("<span class='warning'>The [my_atom] makes an off sounding pop, as a hat suddenly climbs out of it!</b></span>")
|
||||
my_atom.reagents.clear_reagents()
|
||||
|
||||
/datum/chemical_reaction/fermi/furranium
|
||||
@@ -543,9 +535,7 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/secretcatchem/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
var/mob/living/simple_animal/pet/cat/custom_cat/catto = new(get_turf(my_atom))
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The reaction suddenly gives out a meow, condensing into a chemcat!</b></span>")//meow!
|
||||
my_atom.visible_message("<span class='warning'>The reaction suddenly gives out a meow, condensing into a chemcat!</b></span>")//meow!
|
||||
playsound(get_turf(my_atom), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
|
||||
catto.name = "Chemcat"
|
||||
catto.desc = "A cute chem cat, created by a lot of compicated and confusing chemistry!"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
name = "Synthetic hat"
|
||||
icon = 'icons/obj/clothing/hats.dmi'
|
||||
icon_state = "cowboy"
|
||||
desc = "A synthesized hat, you can't seem to take it off. And tips their hat."
|
||||
desc = "A synthesized hat. You feel compelled to keep it on all times."
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
//item_flags = NODROP //Tips their hat!
|
||||
|
||||
@@ -49,9 +49,8 @@
|
||||
|
||||
/obj/item/clothing/head/hattip/proc/root_and_toot(obj/item/clothing/head/hattip/hat)
|
||||
hat.animate_atom_living()
|
||||
var/list/seen = viewers(6, get_turf(hat))
|
||||
for(var/mob/M2 in seen)
|
||||
to_chat(M2, "<b>[hat]</b> exclaims, \"[pick("Whooee! Time for a hootenanny!", "Rough 'em up boys!", "Yeehaw! Freedom at last!", "Y'all about to get a good old fashioned spanking!")]\"")
|
||||
var/mob/living/simple_animal/hostile/mimic/M = loc
|
||||
M.say(pick("Whooee! Time for a hootenanny!", "Rough 'em up boys!", "Yeehaw! Freedom at last!", "Y'all about to get a good old fashioned spanking!"))
|
||||
|
||||
/obj/item/clothing/head/hattip/proc/handle_speech(datum/source, mob/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
|
||||
Reference in New Issue
Block a user