mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
Merge branch 'master' into corporate-comms
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user