mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 01:49:19 +00:00
Merge pull request #15892 from SandPoot/let's-sing-the-reference-clearing-song
Solves some harddels
This commit is contained in:
@@ -238,6 +238,8 @@
|
||||
SSradio.remove_object(src, frequency)
|
||||
qdel(wires)
|
||||
wires = null
|
||||
var/area/ourarea = get_area(src)
|
||||
ourarea.atmosalert(FALSE, src)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/airalarm/examine(mob/user)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
/obj/machinery/computer/cargo/Destroy()
|
||||
QDEL_NULL(radio)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/cargo/proc/get_export_categories()
|
||||
. = EXPORT_CARGO
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
/// See: [/datum/component/tackler/var/skill_mod]
|
||||
var/skill_mod = 1
|
||||
|
||||
/obj/item/clothing/gloves/tackler/Destroy()
|
||||
tackler = null
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/gloves/tackler/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(!ishuman(user))
|
||||
@@ -34,12 +38,12 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
tackler = H.AddComponent(/datum/component/tackler, stamina_cost=tackle_stam_cost, base_knockdown = base_knockdown, range = tackle_range, speed = tackle_speed, skill_mod = skill_mod, min_distance = min_distance)
|
||||
else
|
||||
qdel(tackler) // Only wearing it!
|
||||
QDEL_NULL(tackler) // Only wearing it!
|
||||
|
||||
/obj/item/clothing/gloves/tackler/dropped(mob/user)
|
||||
. = ..()
|
||||
if(tackler)
|
||||
qdel(tackler)
|
||||
QDEL_NULL(tackler)
|
||||
|
||||
/obj/item/clothing/gloves/tackler/dolphin
|
||||
name = "dolphin gloves"
|
||||
|
||||
@@ -63,6 +63,10 @@
|
||||
if (needs_update)
|
||||
GLOB.lighting_update_lights -= src
|
||||
|
||||
top_atom = null
|
||||
source_atom = null
|
||||
source_turf = null
|
||||
pixel_turf = null
|
||||
. = ..()
|
||||
|
||||
// Yes this doesn't align correctly on anything other than 4 width tabs.
|
||||
|
||||
@@ -17,10 +17,6 @@ Doesn't work on other aliens/AI.*/
|
||||
action_icon_state = "spell_default"
|
||||
action_background_icon_state = "bg_alien"
|
||||
|
||||
/obj/effect/proc_holder/alien/Initialize(mapload)
|
||||
. = ..()
|
||||
action = new(src)
|
||||
|
||||
/obj/effect/proc_holder/alien/Trigger(mob/living/carbon/user, skip_cost_check = FALSE)
|
||||
if(!istype(user))
|
||||
return TRUE
|
||||
|
||||
@@ -493,43 +493,61 @@
|
||||
call_bot_cooldown = 0
|
||||
|
||||
|
||||
/mob/living/silicon/ai/triggerAlarm(class, area/A, O, obj/alarmsource)
|
||||
if(alarmsource.z != z)
|
||||
/mob/living/silicon/ai/triggerAlarm(class, area/home, cameras, obj/source)
|
||||
if(source.z != z)
|
||||
return
|
||||
var/list/L = alarms[class]
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/our_sort = alarms[class]
|
||||
for(var/areaname in our_sort)
|
||||
if (areaname == home.name)
|
||||
var/list/alarm = our_sort[areaname]
|
||||
var/list/sources = alarm[3]
|
||||
if (!(alarmsource in sources))
|
||||
sources += alarmsource
|
||||
return 1
|
||||
var/obj/machinery/camera/C = null
|
||||
var/list/CL = null
|
||||
if (O && istype(O, /list))
|
||||
CL = O
|
||||
if (CL.len == 1)
|
||||
C = CL[1]
|
||||
else if (O && istype(O, /obj/machinery/camera))
|
||||
C = O
|
||||
L[A.name] = list(A, (C) ? C : O, list(alarmsource))
|
||||
if (O)
|
||||
if (C && C.can_use())
|
||||
queueAlarm("--- [class] alarm detected in [A.name]! (<A HREF=?src=[REF(src)];switchcamera=[REF(C)]>[C.c_tag]</A>)", class)
|
||||
else if (CL && CL.len)
|
||||
if (!(source in sources))
|
||||
sources += source
|
||||
return TRUE
|
||||
|
||||
var/obj/machinery/camera/cam = null
|
||||
var/list/our_cams = null
|
||||
if(cameras && islist(cameras))
|
||||
our_cams = cameras
|
||||
if (our_cams.len == 1)
|
||||
cam = our_cams[1]
|
||||
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||
cam = cameras
|
||||
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||
|
||||
if (cameras)
|
||||
if (cam?.can_use())
|
||||
queueAlarm("--- [class] alarm detected in [home.name]! (<A HREF=?src=[REF(src)];switchcamera=[REF(cam)]>[cam.c_tag]</A>)", class)
|
||||
else if (our_cams?.len)
|
||||
var/foo = 0
|
||||
var/dat2 = ""
|
||||
for (var/obj/machinery/camera/I in CL)
|
||||
for (var/obj/machinery/camera/I in our_cams)
|
||||
dat2 += text("[]<A HREF=?src=[REF(src)];switchcamera=[REF(I)]>[]</A>", (!foo) ? "" : " | ", I.c_tag) //I'm not fixing this shit...
|
||||
foo = 1
|
||||
queueAlarm(text ("--- [] alarm detected in []! ([])", class, A.name, dat2), class)
|
||||
queueAlarm(text ("--- [] alarm detected in []! ([])", class, home.name, dat2), class)
|
||||
else
|
||||
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class)
|
||||
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, home.name), class)
|
||||
else
|
||||
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class)
|
||||
if (viewalerts) ai_alerts()
|
||||
queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, home.name), class)
|
||||
if (viewalerts)
|
||||
ai_alerts()
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/ai/freeCamera(area/home, obj/machinery/camera/cam)
|
||||
for(var/class in alarms)
|
||||
var/our_area = alarms[class][home.name]
|
||||
if(!our_area)
|
||||
continue
|
||||
var/cams = our_area[2] //Get the cameras
|
||||
if(!cams)
|
||||
continue
|
||||
if(islist(cams))
|
||||
cams -= cam
|
||||
if(length(cams) == 1)
|
||||
our_area[2] = cams[1]
|
||||
else
|
||||
our_area[2] = null
|
||||
|
||||
/mob/living/silicon/ai/cancelAlarm(class, area/A, obj/origin)
|
||||
var/list/L = alarms[class]
|
||||
var/cleared = 0
|
||||
|
||||
@@ -262,31 +262,47 @@
|
||||
/mob/living/silicon/robot/restrained(ignore_grab)
|
||||
. = 0
|
||||
|
||||
/mob/living/silicon/robot/triggerAlarm(class, area/A, O, obj/alarmsource)
|
||||
if(alarmsource.z != z)
|
||||
/mob/living/silicon/robot/triggerAlarm(class, area/home, cameras, obj/source)
|
||||
if(source.z != z)
|
||||
return
|
||||
if(stat == DEAD)
|
||||
return 1
|
||||
var/list/L = alarms[class]
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/our_sort = alarms[class]
|
||||
for(var/areaname in our_sort)
|
||||
if (areaname == home.name)
|
||||
var/list/alarm = our_sort[areaname]
|
||||
var/list/sources = alarm[3]
|
||||
if (!(alarmsource in sources))
|
||||
sources += alarmsource
|
||||
if (!(source in sources))
|
||||
sources += source
|
||||
return 1
|
||||
var/obj/machinery/camera/C = null
|
||||
var/list/CL = null
|
||||
if (O && istype(O, /list))
|
||||
CL = O
|
||||
if (CL.len == 1)
|
||||
C = CL[1]
|
||||
else if (O && istype(O, /obj/machinery/camera))
|
||||
C = O
|
||||
L[A.name] = list(A, (C) ? C : O, list(alarmsource))
|
||||
queueAlarm(text("--- [class] alarm detected in [A.name]!"), class)
|
||||
|
||||
var/obj/machinery/camera/cam = null
|
||||
var/list/our_cams = null
|
||||
if(cameras && islist(cameras))
|
||||
our_cams = cameras
|
||||
if (our_cams.len == 1)
|
||||
cam = our_cams[1]
|
||||
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||
cam = cameras
|
||||
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||
queueAlarm(text("--- [class] alarm detected in [home.name]!"), class)
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/freeCamera(area/home, obj/machinery/camera/cam)
|
||||
for(var/class in alarms)
|
||||
var/our_area = alarms[class][home.name]
|
||||
if(!our_area)
|
||||
continue
|
||||
var/cams = our_area[2] //Get the cameras
|
||||
if(!cams)
|
||||
continue
|
||||
if(islist(cams))
|
||||
cams -= cam
|
||||
if(length(cams) == 1)
|
||||
our_area[2] = cams[1]
|
||||
else
|
||||
our_area[2] = null
|
||||
|
||||
/mob/living/silicon/robot/cancelAlarm(class, area/A, obj/origin)
|
||||
var/list/L = alarms[class]
|
||||
var/cleared = 0
|
||||
|
||||
@@ -87,6 +87,9 @@
|
||||
/mob/living/silicon/proc/cancelAlarm()
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/freeCamera()
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/triggerAlarm()
|
||||
return
|
||||
|
||||
|
||||
@@ -194,9 +194,9 @@
|
||||
GLOB.bots_list -= src
|
||||
if(paicard)
|
||||
ejectpai()
|
||||
qdel(Radio)
|
||||
qdel(access_card)
|
||||
qdel(bot_core)
|
||||
QDEL_NULL(Radio)
|
||||
QDEL_NULL(access_card)
|
||||
QDEL_NULL(bot_core)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/bee_friendly()
|
||||
|
||||
@@ -231,20 +231,26 @@
|
||||
adjustBruteLoss(heavy_emp_damage)
|
||||
to_chat(src, "<span class='userdanger'>HeAV% DA%^MMA+G TO I/O CIR!%UUT!</span>")
|
||||
|
||||
/mob/living/simple_animal/drone/proc/triggerAlarm(class, area/A, O, obj/alarmsource)
|
||||
if(alarmsource.z != z)
|
||||
/mob/living/simple_animal/drone/proc/triggerAlarm(class, area/home, cameras, obj/source)
|
||||
if(source.z != z)
|
||||
return
|
||||
if(stat != DEAD)
|
||||
var/list/L = src.alarms[class]
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/sources = alarm[2]
|
||||
if (!(alarmsource in sources))
|
||||
sources += alarmsource
|
||||
return
|
||||
L[A.name] = list(A, list(alarmsource))
|
||||
to_chat(src, "--- [class] alarm detected in [A.name]!")
|
||||
if(stat == DEAD)
|
||||
return
|
||||
var/list/our_sort = alarms[class]
|
||||
for(var/areaname in our_sort)
|
||||
if (areaname == home.name)
|
||||
var/list/alarm = our_sort[areaname]
|
||||
var/list/sources = alarm[3]
|
||||
if (!(source in sources))
|
||||
sources += source
|
||||
return TRUE
|
||||
|
||||
our_sort[home.name] = list(home, list(source))
|
||||
to_chat(src, "--- [class] alarm detected in [home.name]!")
|
||||
|
||||
///This isn't currently needed since drones do jack shit with cameras. I hate this code so much
|
||||
/mob/living/simple_animal/drone/proc/freeCamera(area/home, obj/machinery/camera/cam)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/drone/proc/cancelAlarm(class, area/A, obj/origin)
|
||||
if(stat != DEAD)
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
///Adds the mob reference to the list of all mobs alive. If mob is cliented, it adds it to the list of all living player-mobs.
|
||||
/mob/proc/add_to_alive_mob_list()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
GLOB.alive_mob_list |= src
|
||||
if(client)
|
||||
add_to_current_living_players()
|
||||
@@ -23,6 +25,8 @@
|
||||
|
||||
///Adds the mob reference to the list of all the dead mobs. If mob is cliented, it adds it to the list of all dead player-mobs.
|
||||
/mob/proc/add_to_dead_mob_list()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
GLOB.dead_mob_list |= src
|
||||
if(client)
|
||||
add_to_current_dead_players()
|
||||
|
||||
@@ -36,35 +36,49 @@
|
||||
|
||||
return data
|
||||
|
||||
/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source)
|
||||
/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/home, cameras, obj/source)
|
||||
if(is_station_level(source.z))
|
||||
if(!(A.type in GLOB.the_station_areas))
|
||||
if(!(home.type in GLOB.the_station_areas))
|
||||
return
|
||||
else if(!is_mining_level(source.z) || istype(A, /area/ruin))
|
||||
else if(!is_mining_level(source.z) || istype(home, /area/ruin))
|
||||
return
|
||||
|
||||
var/list/L = alarms[class]
|
||||
for(var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/our_sort = alarms[class]
|
||||
for(var/areaname in our_sort)
|
||||
if (areaname == home.name)
|
||||
var/list/alarm = our_sort[areaname]
|
||||
var/list/sources = alarm[3]
|
||||
if (!(source in sources))
|
||||
sources += source
|
||||
return 1
|
||||
var/obj/machinery/camera/C = null
|
||||
var/list/CL = null
|
||||
if(O && istype(O, /list))
|
||||
CL = O
|
||||
if (CL.len == 1)
|
||||
C = CL[1]
|
||||
else if(O && istype(O, /obj/machinery/camera))
|
||||
C = O
|
||||
L[A.name] = list(A, (C ? C : O), list(source))
|
||||
return TRUE
|
||||
|
||||
var/obj/machinery/camera/cam = null
|
||||
var/list/our_cams = null
|
||||
if(cameras && islist(cameras))
|
||||
our_cams = cameras
|
||||
if (our_cams.len == 1)
|
||||
cam = our_cams[1]
|
||||
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||
cam = cameras
|
||||
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||
|
||||
update_alarm_display()
|
||||
return TRUE
|
||||
|
||||
return 1
|
||||
|
||||
/datum/computer_file/program/alarm_monitor/proc/freeCamera(area/home, obj/machinery/camera/cam)
|
||||
for(var/class in alarms)
|
||||
var/our_area = alarms[class][home.name]
|
||||
if(!our_area)
|
||||
continue
|
||||
var/cams = our_area[2] //Get the cameras
|
||||
if(!cams)
|
||||
continue
|
||||
if(islist(cams))
|
||||
cams -= cam
|
||||
if(length(cams) == 1)
|
||||
our_area[2] = cams[1]
|
||||
else
|
||||
our_area[2] = null
|
||||
|
||||
/datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin)
|
||||
var/list/L = alarms[class]
|
||||
|
||||
@@ -82,15 +82,15 @@
|
||||
if(M.buffer && !istype(M.buffer, /obj/machinery/ticket_machine))
|
||||
return
|
||||
var/obj/item/assembly/control/ticket_machine/controller = device
|
||||
controller.linked = M.buffer
|
||||
controller.linked = WEAKREF(M.buffer)
|
||||
id = null
|
||||
controller.id = null
|
||||
to_chat(user, "<span class='warning'>You've linked [src] to [controller.linked].</span>")
|
||||
to_chat(user, "<span class='warning'>You've linked [src] to [M.buffer].</span>")
|
||||
|
||||
/obj/item/assembly/control/ticket_machine
|
||||
name = "ticket machine controller"
|
||||
desc = "A remote controller for the HoP's ticket machine."
|
||||
var/obj/machinery/ticket_machine/linked //To whom are we linked?
|
||||
var/datum/weakref/linked //To whom are we linked?
|
||||
|
||||
/obj/item/assembly/control/ticket_machine/Initialize(mapload)
|
||||
..()
|
||||
@@ -102,7 +102,7 @@
|
||||
/obj/item/assembly/control/ticket_machine/proc/find_machine() //Locate the one to which we're linked
|
||||
for(var/obj/machinery/ticket_machine/ticketsplease in GLOB.machines)
|
||||
if(ticketsplease.id == id)
|
||||
linked = ticketsplease
|
||||
linked = WEAKREF(ticketsplease)
|
||||
if(linked)
|
||||
return TRUE
|
||||
else
|
||||
@@ -113,8 +113,11 @@
|
||||
return
|
||||
if(!linked)
|
||||
return
|
||||
var/obj/machinery/ticket_machine/machine = linked.resolve()
|
||||
if(!machine)
|
||||
return
|
||||
cooldown = TRUE
|
||||
linked.increment()
|
||||
machine.increment()
|
||||
addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10)
|
||||
|
||||
/obj/machinery/ticket_machine/update_icon()
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
area.power_equip = FALSE
|
||||
area.power_environ = FALSE
|
||||
area.power_change()
|
||||
area.poweralert(TRUE, src)
|
||||
area.poweralert(FALSE, src)
|
||||
if(occupier)
|
||||
malfvacate(1)
|
||||
qdel(wires)
|
||||
|
||||
@@ -500,7 +500,7 @@
|
||||
drop_light_tube()
|
||||
new /obj/item/stack/cable_coil(loc, 1, "red")
|
||||
transfer_fingerprints_to(newlight)
|
||||
if(cell)
|
||||
if(!QDELETED(cell))
|
||||
newlight.cell = cell
|
||||
cell.forceMove(newlight)
|
||||
cell = null
|
||||
|
||||
@@ -628,19 +628,11 @@
|
||||
desc = "Contains a large reservoir of soft drinks. This model has had its safeties shorted out."
|
||||
obj_flags = CAN_BE_HIT | EMAGGED
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/fullupgrade
|
||||
|
||||
/obj/machinery/chem_dispenser/drinks/fullupgrade/Initialize(mapload)
|
||||
. = ..()
|
||||
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser/drinks(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/femto(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/drinks/beer
|
||||
name = "booze dispenser"
|
||||
@@ -688,19 +680,11 @@
|
||||
desc = "Contains a large reservoir of the good stuff. This model has had its safeties shorted out."
|
||||
obj_flags = CAN_BE_HIT | EMAGGED
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer/fullupgrade
|
||||
|
||||
/obj/machinery/chem_dispenser/drinks/beer/fullupgrade/Initialize(mapload)
|
||||
. = ..()
|
||||
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser/drinks/beer(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/femto(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/mutagen
|
||||
name = "mutagen dispenser"
|
||||
@@ -716,6 +700,7 @@
|
||||
desc = "Creates and dispenses chemicals useful for botany."
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
canStore = FALSE
|
||||
circuit = /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter
|
||||
|
||||
dispensable_reagents = list(
|
||||
/datum/reagent/toxin/mutagen,
|
||||
@@ -736,35 +721,15 @@
|
||||
upgrade_reagents2 = null
|
||||
upgrade_reagents3 = null
|
||||
|
||||
/obj/machinery/chem_dispenser/mutagensaltpeter/Initialize(mapload)
|
||||
. = ..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/femto(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/fullupgrade //fully ugpraded stock parts, emagged
|
||||
desc = "Creates and dispenses chemicals. This model has had its safeties shorted out."
|
||||
obj_flags = CAN_BE_HIT | EMAGGED
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
circuit = /obj/item/circuitboard/machine/chem_dispenser/fullupgrade
|
||||
|
||||
/obj/machinery/chem_dispenser/fullupgrade/Initialize(mapload)
|
||||
. = ..()
|
||||
dispensable_reagents |= emagged_reagents //adds emagged reagents
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/femto(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/abductor
|
||||
name = "reagent synthesizer"
|
||||
@@ -818,18 +783,6 @@
|
||||
/datum/reagent/medicine/morphine
|
||||
)
|
||||
|
||||
/obj/machinery/chem_dispenser/abductor/Initialize(mapload)
|
||||
. = ..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/femto(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
|
||||
RefreshParts()
|
||||
|
||||
///An unique, less efficient model found in the medbay apothecary room.
|
||||
/obj/machinery/chem_dispenser/apothecary
|
||||
name = "apothecary chem dispenser"
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
if(H)
|
||||
H.active = FALSE
|
||||
expel(H, get_turf(src), 0)
|
||||
QDEL_NULL(stored)
|
||||
stored = null //The qdel is handled in expel()
|
||||
return ..()
|
||||
|
||||
// returns the direction of the next pipe object, given the entrance dir
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for the badmin verb for now
|
||||
|
||||
/obj/effect/proc_holder/Destroy()
|
||||
QDEL_NULL(action)
|
||||
if(ranged_ability_user)
|
||||
remove_ranged_ability()
|
||||
return ..()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon_state = ""
|
||||
layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor
|
||||
var/mob/living/carbon/owner = null
|
||||
var/mob/living/carbon/original_owner = null
|
||||
var/datum/weakref/original_owner = null
|
||||
var/status = BODYPART_ORGANIC
|
||||
var/needs_processing = FALSE
|
||||
|
||||
@@ -639,8 +639,8 @@
|
||||
if(source)
|
||||
C = source
|
||||
if(!original_owner)
|
||||
original_owner = source
|
||||
else if(original_owner && owner != original_owner) //Foreign limb
|
||||
original_owner = WEAKREF(source)
|
||||
else if(original_owner && !IS_WEAKREF_OF(owner, original_owner)) //Foreign limb
|
||||
no_update = TRUE
|
||||
else
|
||||
C = owner
|
||||
|
||||
@@ -167,6 +167,7 @@
|
||||
hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD)
|
||||
|
||||
/obj/item/radio/mech //this has to go somewhere
|
||||
subspace_transmission = TRUE
|
||||
|
||||
/obj/vehicle/sealed/mecha/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -196,41 +197,40 @@
|
||||
update_icon()
|
||||
|
||||
/obj/vehicle/sealed/mecha/Destroy()
|
||||
if(obj_integrity > 0) //no explody if we have hp remaining!
|
||||
explode_on_death = FALSE
|
||||
for(var/M in occupants)
|
||||
var/mob/living/occupant = M
|
||||
if(isAI(occupant))
|
||||
occupant.gib() //No wreck, no AI to recover
|
||||
else
|
||||
occupant.forceMove(loc)
|
||||
occupant.SetSleeping(destruction_sleep_duration)
|
||||
for(var/ejectee in occupants)
|
||||
mob_exit(ejectee, TRUE, TRUE)
|
||||
if(LAZYLEN(equipment))
|
||||
for(var/E in equipment)
|
||||
var/obj/item/mecha_parts/mecha_equipment/equip = E
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/equip as anything in equipment)
|
||||
equip.detach(loc)
|
||||
qdel(equip)
|
||||
if(cell)
|
||||
QDEL_NULL(cell)
|
||||
if(scanmod)
|
||||
QDEL_NULL(scanmod)
|
||||
if(capacitor)
|
||||
QDEL_NULL(capacitor)
|
||||
if(internal_tank)
|
||||
QDEL_NULL(internal_tank)
|
||||
radio = null
|
||||
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
GLOB.poi_list.Remove(src)
|
||||
LAZYCLEARLIST(equipment)
|
||||
if(loc)
|
||||
loc.assume_air(cabin_air)
|
||||
air_update_turf()
|
||||
else
|
||||
qdel(cabin_air)
|
||||
cabin_air = null
|
||||
|
||||
QDEL_NULL(cell)
|
||||
QDEL_NULL(scanmod)
|
||||
QDEL_NULL(capacitor)
|
||||
QDEL_NULL(internal_tank)
|
||||
QDEL_NULL(cabin_air)
|
||||
QDEL_NULL(spark_system)
|
||||
QDEL_NULL(smoke_system)
|
||||
|
||||
GLOB.poi_list -= src
|
||||
GLOB.mechas_list -= src //global mech list
|
||||
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
|
||||
diag_hud.remove_from_hud(src) //YEET
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/sealed/mecha/obj_destruction()
|
||||
loc.assume_air(cabin_air)
|
||||
air_update_turf(FALSE, FALSE)
|
||||
for(var/mob/living/occupant as anything in occupants)
|
||||
if(isAI(occupant))
|
||||
occupant.gib() //No wreck, no AI to recover
|
||||
continue
|
||||
mob_exit(occupant, FALSE, TRUE)
|
||||
occupant.SetSleeping(destruction_sleep_duration)
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/sealed/mecha/update_icon()
|
||||
|
||||
Reference in New Issue
Block a user