mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-23 16:42:13 +00:00
Clothes now have a flash protection and tint level. If one is wearing multiple items with these modifiers they do stack. Glasses also have a number of additional additions such as sight flags, see_invis level, and so forth. Flash protection comes in 4 levels: Reduced, none, moderate, major. Reduced protection, for example, means the user takes increased damaged from welding. Moderate protection safeguards mobs from flashes, flash grenades, projectors, etc. Major protection protects from the above as well as welding. Tint also comes in 4 levels: None, moderate, heavy, blind Moderate tint will apply the nearsighted overlay. Major tint will apply the welding overlay. Blind will apply the blindness overlay. The end result is an attempt of less type checking. Any set of glasses may now also contain HUD glasses. This should make a future rewrite of HUD glasses easier (could have the HUD functionality be a datum rather than separate item).
81 lines
2.5 KiB
Plaintext
81 lines
2.5 KiB
Plaintext
/* Using the HUD procs is simple. Call these procs in the life.dm of the intended mob.
|
|
Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hud(mob) so
|
|
the HUD updates properly! */
|
|
|
|
//Medical HUD outputs. Called by the Life() proc of the mob using it, usually.
|
|
proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
|
|
if(!can_process_hud(M))
|
|
return
|
|
|
|
var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, med_hud_users)
|
|
for(var/mob/living/carbon/human/patient in P.Mob.in_view(P.Turf))
|
|
if(P.Mob.see_invisible < patient.invisibility)
|
|
continue
|
|
|
|
if(local_scanner)
|
|
P.Client.images += patient.hud_list[HEALTH_HUD]
|
|
P.Client.images += patient.hud_list[STATUS_HUD]
|
|
else
|
|
var/sensor_level = getsensorlevel(patient)
|
|
if(sensor_level >= SUIT_SENSOR_VITAL)
|
|
P.Client.images += patient.hud_list[HEALTH_HUD]
|
|
if(sensor_level >= SUIT_SENSOR_BINARY)
|
|
P.Client.images += patient.hud_list[LIFE_HUD]
|
|
|
|
//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features.
|
|
proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt)
|
|
if(!can_process_hud(M))
|
|
return
|
|
var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, sec_hud_users)
|
|
for(var/mob/living/carbon/human/perp in P.Mob.in_view(P.Turf))
|
|
if(P.Mob.see_invisible < perp.invisibility)
|
|
continue
|
|
|
|
P.Client.images += perp.hud_list[ID_HUD]
|
|
if(advanced_mode)
|
|
P.Client.images += perp.hud_list[WANTED_HUD]
|
|
P.Client.images += perp.hud_list[IMPTRACK_HUD]
|
|
P.Client.images += perp.hud_list[IMPLOYAL_HUD]
|
|
P.Client.images += perp.hud_list[IMPCHEM_HUD]
|
|
|
|
datum/arranged_hud_process
|
|
var/client/Client
|
|
var/mob/Mob
|
|
var/turf/Turf
|
|
|
|
proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list)
|
|
hud_list |= M
|
|
var/datum/arranged_hud_process/P = new
|
|
P.Client = M.client
|
|
P.Mob = Alt ? Alt : M
|
|
P.Turf = get_turf(P.Mob)
|
|
return P
|
|
|
|
proc/can_process_hud(var/mob/M)
|
|
if(!M)
|
|
return 0
|
|
if(!M.client)
|
|
return 0
|
|
if(M.stat != CONSCIOUS)
|
|
return 0
|
|
return 1
|
|
|
|
//Deletes the current HUD images so they can be refreshed with new ones.
|
|
mob/proc/handle_hud_glasses() //Used in the life.dm of mobs that can use HUDs.
|
|
if(client)
|
|
for(var/image/hud in client.images)
|
|
if(copytext(hud.icon_state,1,4) == "hud")
|
|
client.images -= hud
|
|
med_hud_users -= src
|
|
sec_hud_users -= src
|
|
|
|
mob/proc/in_view(var/turf/T)
|
|
return view(T)
|
|
|
|
/mob/eye/in_view(var/turf/T)
|
|
var/list/viewed = new
|
|
for(var/mob/living/carbon/human/H in mob_list)
|
|
if(get_dist(H, T) <= 7)
|
|
viewed += H
|
|
return viewed
|