mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-30 07:27:57 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into findnreplace
# Conflicts: # code/game/machinery/recharger.dm # code/game/objects/items/devices/autopsy.dm # code/game/objects/items/devices/modkit.dm # code/game/objects/structures/lattice.dm
This commit is contained in:
@@ -66,12 +66,8 @@
|
||||
if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V))
|
||||
chemtraces += V
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/verb/print_data()
|
||||
set name = "Print Data"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
/obj/item/weapon/autopsy_scanner/attack_self(mob/user)
|
||||
if(!wdata.len && !chemtraces.len)
|
||||
return
|
||||
|
||||
var/scan_data = ""
|
||||
@@ -142,18 +138,17 @@
|
||||
for(var/chemID in chemtraces)
|
||||
scan_data += chemID
|
||||
scan_data += "<br>"
|
||||
|
||||
usr.visible_message("<span class='warning'>[src] rattles and prints out a sheet of paper.</span>")
|
||||
user.visible_message("<span class='warning'>[src] rattles and prints out a sheet of paper.</span>")
|
||||
|
||||
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
|
||||
sleep(10)
|
||||
|
||||
var/obj/item/weapon/paper/P = new(usr.loc)
|
||||
var/obj/item/weapon/paper/P = new(user.loc)
|
||||
P.name = "Autopsy Data ([target_name])"
|
||||
P.info = "<tt>[scan_data]</tt>"
|
||||
P.overlays += "paper_words"
|
||||
|
||||
usr.put_in_hands(P)
|
||||
user.put_in_hands(P)
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M, mob/living/carbon/user)
|
||||
if(!istype(M))
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
if(M.stat == CONSCIOUS)
|
||||
M.mind_initialize() //give them a mind datum if they don't have one.
|
||||
var/resisted
|
||||
if(!isloyal(M))
|
||||
if(!ismindshielded(M))
|
||||
if(user.mind in ticker.mode.head_revolutionaries)
|
||||
if(ticker.mode.add_revolutionary(M.mind))
|
||||
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
song.instrumentExt = "ogg"
|
||||
|
||||
/obj/item/device/guitar/Destroy()
|
||||
qdel(song)
|
||||
song = null
|
||||
QDEL_NULL(song)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/guitar/attack_self(mob/user as mob)
|
||||
|
||||
@@ -35,9 +35,7 @@
|
||||
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
|
||||
|
||||
/obj/item/device/laser_pointer/Destroy()
|
||||
if(diode)
|
||||
qdel(diode)
|
||||
diode = null
|
||||
QDEL_NULL(diode)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/laser_pointer/upgraded/New()
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
#define MODKIT_HELMET 1
|
||||
#define MODKIT_SUIT 2
|
||||
#define MODKIT_FULL 3
|
||||
|
||||
/obj/item/device/modkit
|
||||
name = "hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user."
|
||||
icon_state = "modkit"
|
||||
var/parts = MODKIT_FULL
|
||||
var/target_species = "Human"
|
||||
|
||||
var/list/permitted_types = list(
|
||||
/obj/item/clothing/head/helmet/space/hardsuit,
|
||||
/obj/item/clothing/suit/space/hardsuit
|
||||
)
|
||||
|
||||
/obj/item/device/modkit/afterattack(obj/item/O, mob/user as mob, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!target_species)
|
||||
return //it shouldn't be null, okay?
|
||||
|
||||
if(!parts)
|
||||
to_chat(user, "<span class='warning'>This kit has no parts for this modification left.</span>")
|
||||
user.unEquip(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/allowed = 0
|
||||
for(var/permitted_type in permitted_types)
|
||||
if(istype(O, permitted_type))
|
||||
allowed = 1
|
||||
|
||||
var/obj/item/clothing/I = O
|
||||
if(!istype(I) || !allowed)
|
||||
to_chat(user, "<span class='notice'>[src] is unable to modify that.</span>")
|
||||
return
|
||||
|
||||
var/excluding = ("exclude" in I.species_restricted)
|
||||
var/in_list = (target_species in I.species_restricted)
|
||||
if(excluding ^ in_list)
|
||||
to_chat(user, "<span class='notice'>[I] is already modified.</span>")
|
||||
return
|
||||
|
||||
if(!isturf(O.loc))
|
||||
to_chat(user, "<span class='warning'>[O] must be safely placed on the ground for modification.</span>")
|
||||
return
|
||||
|
||||
playsound(user.loc, O.usesound, 100, 1)
|
||||
|
||||
user.visible_message("<span class='warning'>[user] opens \the [src] and modifies \the [O].</span>","<span class='warning'>You open \the [src] and modify \the [O].</span>")
|
||||
|
||||
I.refit_for_species(target_species)
|
||||
|
||||
if(istype(I, /obj/item/clothing/head/helmet))
|
||||
parts &= ~MODKIT_HELMET
|
||||
if(istype(I, /obj/item/clothing/suit))
|
||||
parts &= ~MODKIT_SUIT
|
||||
|
||||
if(!parts)
|
||||
user.unEquip(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/modkit/examine(mob/user)
|
||||
..(user)
|
||||
to_chat(user, "It looks as though it modifies hardsuits to fit [target_species] users.")
|
||||
|
||||
/obj/item/device/modkit/tajaran
|
||||
name = "Tajaran hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran."
|
||||
target_species = "Tajaran"
|
||||
|
||||
/obj/item/device/modkit/unathi
|
||||
name = "Unathi hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Unathi."
|
||||
target_species = "Unathi"
|
||||
|
||||
/obj/item/device/modkit/skrell
|
||||
name = "Skrell hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Skrell."
|
||||
target_species = "Skrell"
|
||||
|
||||
/obj/item/device/modkit/vox
|
||||
name = "Vox hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Vox."
|
||||
target_species = "Vox"
|
||||
@@ -32,6 +32,9 @@
|
||||
|
||||
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
|
||||
|
||||
/obj/item/device/multitool/Destroy()
|
||||
buffer = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/multitool/ai_detect
|
||||
var/track_cooldown = 0
|
||||
@@ -56,7 +59,7 @@
|
||||
multitool_detect()
|
||||
icon_state = "[initial(icon_state)][detect_state]"
|
||||
track_cooldown = world.time + track_delay
|
||||
|
||||
|
||||
/obj/item/device/multitool/ai_detect/proc/multitool_detect()
|
||||
var/turf/our_turf = get_turf(src)
|
||||
for(var/mob/living/silicon/ai/AI in ai_list)
|
||||
@@ -76,7 +79,7 @@
|
||||
if(get_dist(our_turf, detect_turf) < rangewarning)
|
||||
detect_state = PROXIMITY_NEAR
|
||||
break
|
||||
|
||||
|
||||
/obj/item/device/multitool/ai_detect/admin
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item?
|
||||
track_delay = 5
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/looking_for_personality = 0
|
||||
var/mob/living/silicon/pai/pai
|
||||
var/list/faction = list("neutral") // The factions the pAI will inherit from the card
|
||||
|
||||
|
||||
/obj/item/device/paicard/syndicate
|
||||
name = "syndicate personal AI device"
|
||||
faction = list("syndicate")
|
||||
@@ -33,9 +33,7 @@
|
||||
pai.ghostize()
|
||||
qdel(pai)
|
||||
pai = null
|
||||
if(radio)
|
||||
qdel(radio)
|
||||
radio = null
|
||||
QDEL_NULL(radio)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/paicard/attack_self(mob/user)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
materials = list(MAT_METAL=750)
|
||||
origin_tech = "powerstorage=3;syndicate=5"
|
||||
var/drain_rate = 1600000 // amount of power to drain per tick
|
||||
var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts.
|
||||
var/apc_drain_rate = 50 // Max. amount drained from single APC. In Watts.
|
||||
var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts.
|
||||
var/power_drained = 0 // Amount of power drained.
|
||||
var/max_power = 1e10 // Detonation point.
|
||||
@@ -27,6 +27,8 @@
|
||||
/obj/item/device/powersink/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
processing_power_items.Remove(src)
|
||||
PN = null
|
||||
attached = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
|
||||
@@ -110,10 +112,10 @@
|
||||
if(istype(T.master, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = T.master
|
||||
if(A.operating && A.cell)
|
||||
var/cur_charge = A.cell.charge / CELLRATE
|
||||
var/drain_val = min(apc_drain_rate, cur_charge)
|
||||
A.cell.use(drain_val * CELLRATE)
|
||||
drained += drain_val
|
||||
A.cell.charge = max(0, A.cell.charge - apc_drain_rate)
|
||||
drained += apc_drain_rate
|
||||
if(A.charging == 2) // If the cell was full
|
||||
A.charging = 1 // It's no longer full
|
||||
power_drained += drained
|
||||
return 1
|
||||
|
||||
|
||||
@@ -32,12 +32,8 @@
|
||||
recalculateChannels(1)
|
||||
|
||||
/obj/item/device/radio/headset/Destroy()
|
||||
if(keyslot1)
|
||||
qdel(keyslot1)
|
||||
if(keyslot2)
|
||||
qdel(keyslot2)
|
||||
keyslot1 = null
|
||||
keyslot2 = null
|
||||
QDEL_NULL(keyslot1)
|
||||
QDEL_NULL(keyslot2)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/headset/list_channels(var/mob/user)
|
||||
@@ -63,7 +59,7 @@
|
||||
return RADIO_CONNECTION_FAIL
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/device/radio/headset/is_listening()
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
@@ -71,7 +67,7 @@
|
||||
return ..()
|
||||
else if(isanimal(loc) || isAI(loc))
|
||||
return ..()
|
||||
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/item/device/radio/headset/alt
|
||||
|
||||
@@ -30,7 +30,6 @@ var/global/list/default_medbay_channels = list(
|
||||
var/frequency = PUB_FREQ //common chat
|
||||
var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies
|
||||
var/canhear_range = 3 // the range which mobs can hear this radio from
|
||||
var/obj/item/device/radio/patch_link = null
|
||||
var/datum/wires/radio/wires = null
|
||||
var/b_stat = 0
|
||||
var/broadcasting = 0
|
||||
@@ -54,14 +53,14 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
var/list/internal_channels
|
||||
|
||||
/obj/item/device/radio
|
||||
var/datum/radio_frequency/radio_connection
|
||||
var/list/datum/radio_frequency/secure_radio_connections = new
|
||||
|
||||
proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
/obj/item/device/radio/proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
|
||||
/obj/item/device/radio/New()
|
||||
@@ -74,14 +73,13 @@ var/global/list/default_medbay_channels = list(
|
||||
global_radios |= src
|
||||
|
||||
/obj/item/device/radio/Destroy()
|
||||
qdel(wires)
|
||||
wires = null
|
||||
QDEL_NULL(wires)
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
for(var/ch_name in channels)
|
||||
radio_controller.remove_object(src, radiochannels[ch_name])
|
||||
patch_link = null
|
||||
global_radios -= src
|
||||
follow_target = null
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -271,7 +269,7 @@ var/global/list/default_medbay_channels = list(
|
||||
/mob/living/automatedannouncer/Destroy()
|
||||
if(lifetime_timer)
|
||||
deltimer(lifetime_timer)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/automatedannouncer/proc/autocleanup()
|
||||
log_runtime(EXCEPTION("An announcer somehow managed to outlive the radio! Deleting!"), src, list("Message: '[message]'"))
|
||||
|
||||
@@ -12,8 +12,7 @@
|
||||
crew_monitor = new(src)
|
||||
|
||||
/obj/item/device/sensor_device/Destroy()
|
||||
qdel(crew_monitor)
|
||||
crew_monitor = null
|
||||
QDEL_NULL(crew_monitor)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/sensor_device/attack_self(mob/user as mob)
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/taperecorder/Destroy()
|
||||
if(mytape)
|
||||
qdel(mytape)
|
||||
mytape = null
|
||||
QDEL_NULL(mytape)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/taperecorder/examine(mob/user)
|
||||
|
||||
@@ -13,15 +13,9 @@
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
|
||||
/obj/item/device/transfer_valve/Destroy()
|
||||
if(tank_one)
|
||||
qdel(tank_one)
|
||||
tank_one = null
|
||||
if(tank_two)
|
||||
qdel(tank_two)
|
||||
tank_two = null
|
||||
if(attached_device)
|
||||
qdel(attached_device)
|
||||
attached_device = null
|
||||
QDEL_NULL(tank_one)
|
||||
QDEL_NULL(tank_two)
|
||||
QDEL_NULL(attached_device)
|
||||
attacher = null
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
song.instrumentExt = "ogg"
|
||||
|
||||
/obj/item/device/violin/Destroy()
|
||||
qdel(song)
|
||||
song = null
|
||||
QDEL_NULL(song)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/violin/initialize()
|
||||
|
||||
Reference in New Issue
Block a user