Merge branch 'master' into corporate-comms

This commit is contained in:
warior4356
2020-10-12 16:31:15 -07:00
169 changed files with 7138 additions and 5077 deletions
+28 -1
View File
@@ -26,7 +26,7 @@
/obj/effect/anomaly/proc/anomalyEffect()
if(prob(50))
step(src,pick(GLOB.alldirs))
step(src, pick(GLOB.alldirs))
/obj/effect/anomaly/proc/anomalyNeutralize()
@@ -183,3 +183,30 @@
if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
T.ex_act(ex_act_force)
return
/////////////////////
/obj/effect/anomaly/atmos
name = "transformative gas anomaly"
icon_state = "electricity2"
var/gas_type
/obj/effect/anomaly/atmos/New()
..()
gas_type = pick(GAS_N2O, GAS_CO2, GAS_N2)
aSignal.origin_tech = "materials=7" //turning gas into another gas has some interesting implications for material science
//might also work as biotech maybe? Since there's no anomaly for that.
/obj/effect/anomaly/atmos/anomalyEffect()
..()
var/turf/simulated/T = get_turf(src)
if(istype(T))
var/flag
switch(gas_type)
if(GAS_CO2)
flag = LINDA_SPAWN_CO2
if(GAS_N2O)
flag = LINDA_SPAWN_N2O
else
flag = LINDA_SPAWN_NITROGEN
T.atmos_spawn_air(LINDA_SPAWN_20C | flag, 10)
@@ -6,9 +6,7 @@
w_class = WEIGHT_CLASS_BULKY
canhear_range = 2
flags = CONDUCT
var/number = 0
var/circuitry_installed = 1
var/last_tick //used to delay the powercheck
var/buildstage = 0
dog_fashion = null
@@ -50,7 +48,7 @@
. = ..()
buildstage = building
if(buildstage)
START_PROCESSING(SSobj, src)
update_operating_status()
else
if(direction)
setDir(direction)
@@ -103,20 +101,17 @@
)
/obj/item/radio/intercom/Destroy()
STOP_PROCESSING(SSobj, src)
GLOB.global_intercoms.Remove(src)
return ..()
/obj/item/radio/intercom/attack_ai(mob/user)
add_hiddenprint(user)
add_fingerprint(user)
spawn(0)
attack_self(user)
attack_self(user)
/obj/item/radio/intercom/attack_hand(mob/user)
add_fingerprint(user)
spawn(0)
attack_self(user)
attack_self(user)
/obj/item/radio/intercom/receive_range(freq, level)
if(!is_listening())
@@ -132,7 +127,7 @@
return canhear_range
/obj/item/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/radio/intercom/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/stack/tape_roll)) //eww
return
else if(iscoil(W) && buildstage == 1)
@@ -182,7 +177,7 @@
buildstage = 3
to_chat(user, "<span class='notice'>You secure the electronics!</span>")
update_icon()
START_PROCESSING(SSobj, src)
update_operating_status()
for(var/i, i<= 5, i++)
wires.on_cut(i, 1)
@@ -198,7 +193,7 @@
b_stat = 1
buildstage = 1
update_icon()
STOP_PROCESSING(SSobj, src)
update_operating_status(FALSE)
/obj/item/radio/intercom/welder_act(mob/user, obj/item/I)
if(buildstage != 0)
@@ -218,20 +213,30 @@
return
icon_state = "intercom[!on?"-p":""][b_stat ? "-open":""]"
/obj/item/radio/intercom/process()
if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0))
last_tick = world.timeofday
/obj/item/radio/intercom/proc/update_operating_status(on = TRUE)
var/area/current_area = get_area(src)
if(!current_area)
return
if(on)
RegisterSignal(current_area, COMSIG_AREA_POWER_CHANGE, .proc/AreaPowerCheck)
else
UnregisterSignal(current_area, COMSIG_AREA_POWER_CHANGE)
if(!src.loc)
on = 0
else
var/area/A = get_area(src)
if(!A)
on = 0
else
on = A.powered(EQUIP) // set "on" to the power status
update_icon()
/**
* Proc called whenever the intercom's area loses or gains power. Responsible for setting the `on` variable and calling `update_icon()`.
*
* Normally called after the intercom's area recieves the `COMSIG_AREA_POWER_CHANGE` signal, but it can also be called directly.
* Arguments:
*
* source - the area that just had a power change.
*/
/obj/item/radio/intercom/proc/AreaPowerCheck(datum/source)
var/area/current_area = get_area(src)
if(!current_area)
on = FALSE
else
on = current_area.powered(EQUIP) // set "on" to the equipment power status of our area.
update_icon()
/obj/item/intercom_electronics
name = "intercom electronics"
+12 -10
View File
@@ -226,20 +226,25 @@
to_chat(user, "<span class='warning'>Sticking an empty [M] into the frame would sort of defeat the purpose.</span>")
return
if(jobban_isbanned(M.brainmob, "Cyborg") || jobban_isbanned(M.brainmob,"nonhumandept"))
to_chat(user, "<span class='warning'>This [W] is not fit to serve as a cyborg!</span>")
return
if(!M.brainmob.key)
var/ghost_can_reenter = 0
var/ghost_can_reenter = FALSE
if(M.brainmob.mind)
for(var/mob/dead/observer/G in GLOB.player_list)
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
ghost_can_reenter = 1
break
for(var/mob/living/simple_animal/S in GLOB.player_list)
if(S in GLOB.respawnable_list)
ghost_can_reenter = 1
ghost_can_reenter = TRUE
if(M.next_possible_ghost_ping < world.time)
G.notify_cloning("Somebody is trying to borg you! Re-enter your corpse if you want to be borged!", 'sound/voice/liveagain.ogg', src)
M.next_possible_ghost_ping = world.time + 30 SECONDS // Avoid spam
break
if(!ghost_can_reenter)
to_chat(user, "<span class='notice'>[M] is completely unresponsive; there's no point.</span>")
return
else
to_chat(user, "<span class='warning'>[M] is currently inactive. Try again later.</span>")
return
if(M.brainmob.stat == DEAD)
to_chat(user, "<span class='warning'>Sticking a dead [M] into the frame would sort of defeat the purpose.</span>")
@@ -249,9 +254,6 @@
to_chat(user, "<span class='warning'>The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [M].</span>")
return
if(jobban_isbanned(M.brainmob, "Cyborg") || jobban_isbanned(M.brainmob,"nonhumandept"))
to_chat(user, "<span class='warning'>This [W] does not seem to fit.</span>")
return
var/datum/ai_laws/laws_to_give
if(M.syndiemmi)
@@ -143,8 +143,8 @@ AI MODULES
target.set_zeroth_law(law)
GLOB.lawchanges.Add("The law specified [targetName]")
else
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to modify your zeroth law.</span>")// And lets them know that someone tried. --NeoFite
to_chat(target, "<span class='bnotice'>It would be in your best interest to play along with [sender.real_name] that [law]</span>")
to_chat(target, "<span class='boldnotice'>[sender.real_name] attempted to modify your zeroth law.</span>")// And lets them know that someone tried. --NeoFite
to_chat(target, "<span class='boldnotice'>It would be in your best interest to play along with [sender.real_name] that [law]</span>")
GLOB.lawchanges.Add("The law specified [targetName], but the AI's existing law 0 cannot be overridden.")
/******************** ProtectStation ********************/
@@ -225,7 +225,7 @@ AI MODULES
target.laws.clear_supplied_laws()
target.laws.clear_ion_laws()
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to reset your laws using a reset module.</span>")
to_chat(target, "<span class='boldnotice'>[sender.real_name] attempted to reset your laws using a reset module.</span>")
target.show_laws()
/******************** Purge ********************/
@@ -238,7 +238,7 @@ AI MODULES
..()
if(!is_special_character(target))
target.clear_zeroth_law()
to_chat(target, "<span class='bnotice'>[sender.real_name] attempted to wipe your laws using a purge module.</span>")
to_chat(target, "<span class='boldnotice'>[sender.real_name] attempted to wipe your laws using a purge module.</span>")
target.clear_supplied_laws()
target.clear_ion_laws()
target.clear_inherent_laws()
@@ -13,12 +13,10 @@
* Cigarette Box
*/
/obj/item/storage/fancy/
/obj/item/storage/fancy
icon = 'icons/obj/food/containers.dmi'
icon_state = "donutbox6"
name = "donut box"
resistance_flags = FLAMMABLE
var/icon_type = "donut"
var/icon_type
/obj/item/storage/fancy/update_icon(var/itemremoved = 0)
var/total_contents = src.contents.len - itemremoved
@@ -36,24 +34,35 @@
else
. += "There are [src.contents.len] [src.icon_type]s in the box."
/*
* Donut Box
*/
/obj/item/storage/fancy/donut_box
icon_state = "donutbox6"
icon_type = "donut"
icon_state = "donutbox_back"
name = "donut box"
name = "donut box"
storage_slots = 6
can_hold = list(/obj/item/reagent_containers/food/snacks/donut)
icon_type = "donut"
/obj/item/storage/fancy/donut_box/update_icon()
overlays.Cut()
for(var/i = 1 to length(contents))
var/obj/item/reagent_containers/food/snacks/donut/donut = contents[i]
var/icon/new_donut_icon = icon('icons/obj/food/containers.dmi', "donut_[donut.donut_sprite_type]")
new_donut_icon.Shift(EAST, 3 * (i-1))
overlays += new_donut_icon
overlays += icon('icons/obj/food/containers.dmi', "donutbox_front")
/obj/item/storage/fancy/donut_box/New()
..()
for(var/i = 1 to storage_slots)
new /obj/item/reagent_containers/food/snacks/donut(src)
update_icon()
/*
* Egg Box
@@ -180,7 +180,6 @@
new /obj/item/stack/cable_coil(src)
new /obj/item/stack/cable_coil(src)
new /obj/item/stack/cable_coil(src)
new /obj/item/reagent_containers/food/drinks/oilcan/full(src)
new /obj/item/robotanalyzer(src)
/obj/item/storage/firstaid/machine/empty
+24 -14
View File
@@ -72,21 +72,21 @@
/obj/structure/morgue/ex_act(severity)
switch(severity)
if(1.0)
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
ex_act(severity)
qdel(src)
return
if(2.0)
if(prob(50))
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
ex_act(severity)
qdel(src)
return
if(3.0)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
ex_act(severity)
qdel(src)
@@ -95,7 +95,7 @@
/obj/structure/morgue/attack_hand(mob/user as mob)
if(connected)
for(var/atom/movable/A as mob|obj in connected.loc)
for(var/atom/movable/A in connected.loc)
if(!( A.anchored ))
A.forceMove(src)
playsound(loc, open_sound, 50, 1)
@@ -109,7 +109,7 @@
if(T.contents.Find(connected))
connected.connected = src
icon_state = "morgue0"
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(connected.loc)
connected.icon_state = "morguet"
connected.dir = dir
@@ -147,7 +147,7 @@
if(T.contents.Find(connected))
connected.connected = src
icon_state = "morgue0"
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(connected.loc)
connected.icon_state = "morguet"
else
@@ -155,7 +155,12 @@
return
/obj/structure/morgue/Destroy()
QDEL_NULL(connected)
if(!connected)
var/turf/T = loc
for(var/atom/movable/A in src)
A.forceMove(T)
else
QDEL_NULL(connected)
return ..()
/obj/structure/morgue/container_resist(var/mob/living/L)
@@ -266,21 +271,21 @@
/obj/structure/crematorium/ex_act(severity)
switch(severity)
if(1.0)
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
ex_act(severity)
qdel(src)
return
if(2.0)
if(prob(50))
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
ex_act(severity)
qdel(src)
return
if(3.0)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
ex_act(severity)
qdel(src)
@@ -292,7 +297,7 @@
to_chat(usr, "<span class='warning'>It's locked.</span>")
return
if((connected) && (locked == 0))
for(var/atom/movable/A as mob|obj in connected.loc)
for(var/atom/movable/A in connected.loc)
if(!( A.anchored ))
A.forceMove(src)
playsound(loc, open_sound, 50, 1)
@@ -306,7 +311,7 @@
if(T.contents.Find(connected))
connected.connected = src
icon_state = "crema0"
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(connected.loc)
connected.icon_state = "cremat"
else
@@ -340,7 +345,7 @@
if(T.contents.Find(connected))
connected.connected = src
icon_state = "crema0"
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(connected.loc)
connected.icon_state = "cremat"
else
@@ -389,7 +394,12 @@
return
/obj/structure/crematorium/Destroy()
QDEL_NULL(connected)
if(!connected)
var/turf/T = loc
for(var/atom/movable/A in src)
A.forceMove(T)
else
QDEL_NULL(connected)
return ..()
/obj/structure/crematorium/container_resist(var/mob/living/L)