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:
Ghom
2020-05-16 00:25:04 +02:00
committed by GitHub
parent b21fb97bda
commit 7c7147cb3e
122 changed files with 947 additions and 347 deletions
+2 -5
View File
@@ -535,7 +535,7 @@
add_reagent(P, cached_results[P]*multiplier, null, chem_temp)
var/list/seen = viewers(4, get_turf(my_atom))//Sound and sight checkers
var/list/seen = get_actual_viewers(4, get_turf(my_atom))//Sound and sight checkers
var/iconhtml = icon2html(cached_my_atom, seen)
if(cached_my_atom)
if(!ismob(cached_my_atom)) // No bubbling mobs
@@ -617,10 +617,7 @@
handle_reactions()
update_total()
//Reaction sounds and words
var/list/seen = viewers(5, get_turf(my_atom))
var/iconhtml = icon2html(my_atom, seen)
for(var/mob/M in seen)
to_chat(M, "<span class='notice'>[iconhtml] [C.mix_message]</span>")
my_atom.visible_message("<span class='notice'>[icon2html(my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] [C.mix_message]</span>")
/datum/reagents/proc/fermiReact(selected_reaction, cached_temp, cached_pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier)
var/datum/chemical_reaction/C = selected_reaction
@@ -765,7 +765,9 @@
/datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M)
if(M.hud_used)
if(current_cycle >= 20 && current_cycle%20 == 0)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"],
M.hud_used.plane_masters["[LIGHTING_PLANE]"], M.hud_used.plane_masters["[WALL_PLANE]"],
M.hud_used.plane_masters["[ABOVE_WALL_PLANE]"])
var/rotation = min(round(current_cycle/20), 89) // By this point the player is probably puking and quitting anyway
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1)
@@ -793,15 +795,17 @@
/*
if(M.hud_used)
if(current_cycle >= 5 && current_cycle % 3 == 0)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/matrix/skew = matrix()
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"],
M.hud_used.plane_masters["[LIGHTING_PLANE]"], M.hud_used.plane_masters["[WALL_PLANE]"],
M.hud_used.plane_masters["[ABOVE_WALL_PLANE]"]) var/matrix/skew = matrix()
var/intensity = 8
skew.set_skew(rand(-intensity,intensity), rand(-intensity,intensity))
var/matrix/newmatrix = skew
if(prob(33)) // 1/3rd of the time, let's make it stack with the previous matrix! Mwhahahaha!
var/obj/screen/plane_master/PM = M.hud_used.plane_masters["[GAME_PLANE]"]
newmatrix = skew * PM.transform
for(var/whole_screen in screens)
var/obj/screen/plane_master/PM = whole_screen
newmatrix = skew * PM.transform
for(var/whole_screen in screens)
animate(whole_screen, transform = newmatrix, time = 5, easing = QUAD_EASING, loop = -1)
@@ -440,9 +440,8 @@
mob_react = FALSE
/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "<span class='danger'>The solution spews out foam!</span>")
var/turf/location = get_turf(holder.my_atom)
location.visible_message("<span class='danger'>The solution spews out foam!</span>")
var/datum/effect_system/foam_spread/s = new()
s.set_up(multiplier*2, location, holder)
s.start()
@@ -457,11 +456,8 @@
mob_react = FALSE
/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "<span class='danger'>The solution spews out a metallic foam!</span>")
var/turf/location = get_turf(holder.my_atom)
location.visible_message("<span class='danger'>The solution spews out a metallic foam!</span>")
var/datum/effect_system/foam_spread/metal/s = new()
s.set_up(multiplier*5, location, holder, 1)
s.start()
@@ -488,9 +484,8 @@
mob_react = FALSE
/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "<span class='danger'>The solution spews out a metallic foam!</span>")
var/turf/location = get_turf(holder.my_atom)
location.visible_message("<span class='danger'>The solution spews out metallic foam!</span>")
var/datum/effect_system/foam_spread/metal/s = new()
s.set_up(multiplier*5, location, holder, 2)
s.start()
+6 -14
View File
@@ -160,11 +160,8 @@
/obj/item/reagent_containers/microwave_act(obj/machinery/microwave/M)
reagents.expose_temperature(1000)
if(container_flags & TEMP_WEAK)
var/list/seen = viewers(5, get_turf(src))
var/iconhtml = icon2html(src, seen)
for(var/mob/H in seen)
to_chat(H, "<span class='notice'>[iconhtml] \The [src]'s melts from the temperature!</span>")
playsound(get_turf(src), 'sound/FermiChem/heatmelt.ogg', 80, 1)
visible_message("<span class='notice'>[icon2html(src, viewers(DEFAULT_MESSAGE_RANGE, src))] [src]'s melts from the temperature!</span>")
playsound(src, 'sound/FermiChem/heatmelt.ogg', 80, 1)
qdel(src)
..()
@@ -184,7 +181,7 @@
if((reagents.pH < 1.5) || (reagents.pH > 12.5))
START_PROCESSING(SSobj, src)
else if((reagents.pH < -3) || (reagents.pH > 17))
visible_message("<span class='notice'>[icon2html(src, viewers(src))] \The [src] is damaged by the super pH and begins to deform!</span>")
visible_message("<span class='notice'>[icon2html(src, viewers(DEFAULT_MESSAGE_RANGE, src))] \The [src] is damaged by the super pH and begins to deform!</span>")
reagents.pH = clamp(reagents.pH, -3, 17)
container_HP -= 1
@@ -221,15 +218,11 @@
container_HP -= damage
var/list/seen = viewers(5, get_turf(src))
var/iconhtml = icon2html(src, seen)
var/damage_percent = ((container_HP / initial(container_HP)*100))
switch(damage_percent)
if(-INFINITY to 0)
for(var/mob/M in seen)
to_chat(M, "<span class='notice'>[iconhtml] \The [src]'s melts [cause]!</span>")
playsound(get_turf(src), 'sound/FermiChem/acidmelt.ogg', 80, 1)
visible_message("<span class='notice'>[icon2html(src, viewers(DEFAULT_MESSAGE_RANGE, src))] [src]'s melts [cause]!</span>")
playsound(src, 'sound/FermiChem/acidmelt.ogg', 80, 1)
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times beakers have melted")
STOP_PROCESSING(SSobj, src)
qdel(src)
@@ -246,5 +239,4 @@
update_icon()
if(prob(25))
for(var/mob/M in seen)
to_chat(M, "<span class='notice'>[iconhtml] \The [src]'s is damaged by [cause] and begins to deform!</span>")
visible_message("<span class='notice'>[icon2html(src, viewers(DEFAULT_MESSAGE_RANGE, src))] [src]'s is damaged by [cause] and begins to deform!</span>")
@@ -72,9 +72,8 @@
to_chat(user, "<span class='warning'>[target] is full.</span>")
return
to_chat(user, "<span class='notice'>You dissolve [src] in [target].</span>")
for(var/mob/O in viewers(2, user)) //viewers is necessary here because of the small radius
to_chat(O, "<span class='warning'>[user] slips something into [target]!</span>")
user.visible_message("<span class='warning'>[user] slips something into [target]!</span>",
"<span class='notice'>You dissolve [src] in [target].</span>", vision_distance = 2)
reagents.trans_to(target, reagents.total_volume)
qdel(src)
@@ -169,6 +169,7 @@
name = "pepper spray refiller"
desc = "Contains condensed capsaicin for use in law \"enforcement.\""
icon_state = "pepper"
plane = ABOVE_WALL_PLANE
anchored = TRUE
density = FALSE
reagent_id = /datum/reagent/consumable/condensedcapsaicin
@@ -182,6 +183,7 @@
name = "virus food dispenser"
desc = "A dispenser of low-potency virus mutagenic."
icon_state = "virus_food"
plane = ABOVE_WALL_PLANE
anchored = TRUE
density = FALSE
reagent_id = /datum/reagent/consumable/virus_food