Merge Conflict Resolved

This commit is contained in:
MINIMAN10000
2018-04-17 11:24:50 -07:00
48 changed files with 648 additions and 364 deletions
@@ -42,6 +42,12 @@
id_tag = num2text(uid)
icon = null
/obj/machinery/atmospherics/binary/dp_vent_pump/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/binary/dp_vent_pump/initialize()
..()
if(frequency)
@@ -21,6 +21,12 @@
if(frequency)
set_frequency(frequency)
/obj/machinery/atmospherics/binary/passive_gate/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/binary/passive_gate/update_icon()
icon_state = "[on ? "on" : "off"]"
@@ -28,6 +28,12 @@ Thus, the two variables affect pump operation are set in New():
var/id = null
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/binary/pump/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/binary/pump/highcap
name = "High capacity gas pump"
desc = "A high capacity pump"
@@ -44,10 +44,10 @@
update_icon()
investigate_log("was closed by [usr ? key_name(usr) : "a remote signal"]", "atmos")
return
/obj/machinery/atmospherics/binary/valve/attack_ai(mob/user)
return
/obj/machinery/atmospherics/binary/valve/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
return attack_hand(user)
@@ -60,7 +60,7 @@
close()
else
open()
/obj/machinery/atmospherics/binary/valve/digital // can be controlled by AI
name = "digital valve"
desc = "A digitally controlled valve."
@@ -71,6 +71,12 @@
var/datum/radio_frequency/radio_connection
settagwhitelist = list("id_tag")
/obj/machinery/atmospherics/binary/valve/digital/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/binary/valve/digital/attack_ai(mob/user)
return attack_hand(user)
@@ -28,6 +28,12 @@ Thus, the two variables affect pump operation are set in New():
var/id = null
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/binary/volume_pump/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/binary/volume_pump/on
on = 1
icon_state = "map_on"
@@ -22,6 +22,13 @@ Filter types:
var/frequency = 0
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/trinary/filter/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/trinary/filter/flipped
icon_state = "mmap"
flipped = 1
@@ -7,7 +7,7 @@
name = "manual switching valve"
desc = "A pipe valve"
can_unwrench = 1
var/state = TVALVE_STATE_STRAIGHT
@@ -15,16 +15,16 @@
/obj/machinery/atmospherics/trinary/tvalve/bypass
icon_state = "map_tvalve1"
state = TVALVE_STATE_SIDE
/obj/machinery/atmospherics/trinary/tvalve/flipped
icon_state = "map_tvalvem0"
flipped = 1
/obj/machinery/atmospherics/trinary/tvalve/flipped/bypass
icon_state = "map_tvalvem1"
flipped = 1
state = TVALVE_STATE_SIDE
/obj/machinery/atmospherics/trinary/tvalve/update_icon(animation)
var/flipstate = ""
if(flipped)
@@ -40,7 +40,7 @@
var/turf/T = get_turf(src)
if(!istype(T))
return
add_underlay(T, node1, turn(dir, -180))
if(flipped)
@@ -49,7 +49,7 @@
add_underlay(T, node2, turn(dir, -90))
add_underlay(T, node3, dir)
/obj/machinery/atmospherics/trinary/tvalve/proc/switch_side()
if(state == TVALVE_STATE_STRAIGHT)
go_to_side()
@@ -57,7 +57,7 @@
go_straight()
/obj/machinery/atmospherics/trinary/tvalve/proc/go_to_side()
if(state == TVALVE_STATE_SIDE)
if(state == TVALVE_STATE_SIDE)
return 0
state = TVALVE_STATE_SIDE
@@ -74,7 +74,7 @@
/obj/machinery/atmospherics/trinary/tvalve/proc/go_straight()
if(state == TVALVE_STATE_STRAIGHT)
return 0
state = TVALVE_STATE_STRAIGHT
update_icon()
@@ -82,13 +82,13 @@
parent2.update = 0
parent3.update = 0
parent1.reconcile_air()
investigate_log("was set to straight by [usr ? key_name(usr) : "a remote signal"]", "atmos")
return 1
/obj/machinery/atmospherics/trinary/tvalve/attack_ai(mob/user)
return
/obj/machinery/atmospherics/trinary/tvalve/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
return attack_hand(user)
@@ -108,14 +108,20 @@
var/id = null
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/trinary/tvalve/digital/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/trinary/tvalve/digital/bypass
icon_state = "map_tvalve1"
state = TVALVE_STATE_SIDE
/obj/machinery/atmospherics/trinary/tvalve/digital/flipped
icon_state = "map_tvalvem0"
flipped = 1
/obj/machinery/atmospherics/trinary/tvalve/digital/flipped/bypass
icon_state = "map_tvalvem1"
flipped = 1
@@ -31,6 +31,12 @@
if(id && !id_tag)//I'm not dealing with any more merge conflicts
id_tag = id
/obj/machinery/atmospherics/unary/outlet_injector/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/unary/outlet_injector/update_icon()
if(!powered())
icon_state = "off"
@@ -433,4 +433,7 @@
if(initial_loc)
initial_loc.air_vent_info -= id_tag
initial_loc.air_vent_names -= id_tag
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
@@ -53,6 +53,9 @@
if(initial_loc && frequency == 1439)
initial_loc.air_scrub_info -= id_tag
initial_loc.air_scrub_names -= id_tag
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
+1
View File
@@ -8,6 +8,7 @@
#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste.
#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm.
//if TESTING is enabled, qdel will call this object's find_references() verb.
#define QDEL_HINT_IFFAIL_FINDREFERENCE 6 //Above but only if gc fails.
//defines for the gc_destroyed var
#define GC_QUEUE_PREQUEUE 1
+32 -2
View File
@@ -25,6 +25,10 @@ SUBSYSTEM_DEF(garbage)
//Queue
var/list/queues
#ifdef TESTING
var/list/reference_find_on_fail = list()
#endif
/datum/controller/subsystem/garbage/PreInit()
queues = new(GC_QUEUE_COUNT)
@@ -154,6 +158,9 @@ SUBSYSTEM_DEF(garbage)
++gcedlasttick
++totalgcs
pass_counts[level]++
#ifdef TESTING
reference_find_on_fail -= refID //It's deleted we don't care anymore.
#endif
if(MC_TICK_CHECK)
break
continue
@@ -162,8 +169,14 @@ SUBSYSTEM_DEF(garbage)
fail_counts[level]++
switch(level)
if(GC_QUEUE_CHECK)
#ifdef TESTING
if(reference_find_on_fail[refID])
D.find_references()
#ifdef GC_FAILURE_HARD_LOOKUP
D.find_references()
else
D.find_references()
#endif
reference_find_on_fail -= refID
#endif
var/type = D.type
var/datum/qdel_item/I = items[type]
@@ -263,6 +276,11 @@ SUBSYSTEM_DEF(garbage)
/datum/qdel_item/New(mytype)
name = "[mytype]"
#ifdef TESTING
/proc/qdel_and_find_ref_if_fail(datum/D, force = FALSE)
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
qdel(D, force)
#endif
// Should be treated as a replacement for the 'del' keyword.
// Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
@@ -319,6 +337,11 @@ SUBSYSTEM_DEF(garbage)
#ifdef TESTING
D.find_references()
#endif
if(QDEL_HINT_IFFAIL_FINDREFERENCE)
SSgarbage.PreQueue(D)
#ifdef TESTING
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
#endif
else
#ifdef TESTING
if(!I.no_hint)
@@ -388,10 +411,17 @@ SUBSYSTEM_DEF(garbage)
set name = "qdel() then Find References"
set src in world
qdel(src)
qdel(src, TRUE) //Force.
if(!running_find_references)
find_references(TRUE)
/datum/verb/qdel_then_if_fail_find_references()
set category = "Debug"
set name = "qdel() then Find References if GC failure"
set src in world
qdel_and_find_ref_if_fail(src, TRUE)
/datum/proc/DoSearchVar(X, Xname, recursive_limit = 64)
if(usr && usr.client && !usr.client.running_find_references)
return
+136 -131
View File
@@ -468,137 +468,142 @@ var/record_id_num = 1001
var/icon/clothes_s = null
switch(H.mind.assigned_role)
if("Head of Personnel")
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Nanotrasen Representative")
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
if("Blueshield")
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "blueshield"), ICON_OVERLAY)
if("Magistrate")
clothes_s = new /icon('icons/mob/uniform.dmi', "really_black_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "judge"), ICON_OVERLAY)
if("Bartender")
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Botanist")
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Chef")
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Janitor")
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Librarian")
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Quartermaster")
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Cargo Technician")
clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Shaft Miner")
clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Lawyer")
clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Chaplain")
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Research Director")
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
if("Scientist")
clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
if("Chemist")
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
if("Chief Medical Officer")
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
if("Medical Doctor")
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
if("Geneticist")
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
if("Virologist")
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
if("Psychiatrist")
clothes_s = new /icon('icons/mob/uniform.dmi', "psych_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_UNDERLAY)
if("Paramedic")
clothes_s = new /icon('icons/mob/uniform.dmi', "paramedic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Captain")
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Head of Security")
clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Warden")
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Detective")
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
if("Security Pod Pilot")
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bomber"), ICON_OVERLAY)
if("Brig Physician")
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY)
if("Security Officer")
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Chief Engineer")
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Station Engineer")
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Life Support Specialist")
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Mechanic")
clothes_s = new /icon('icons/mob/uniform.dmi', "mechanic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Roboticist")
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
else if(H.mind.assigned_role in get_all_centcom_jobs())
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
else
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if(H.mind)
switch(H.mind.assigned_role)
if("Head of Personnel")
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Nanotrasen Representative")
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
if("Blueshield")
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "blueshield"), ICON_OVERLAY)
if("Magistrate")
clothes_s = new /icon('icons/mob/uniform.dmi', "really_black_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "judge"), ICON_OVERLAY)
if("Bartender")
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Botanist")
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Chef")
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Janitor")
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Librarian")
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Quartermaster")
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Cargo Technician")
clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Shaft Miner")
clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Lawyer")
clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Chaplain")
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Research Director")
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
if("Scientist")
clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
if("Chemist")
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
if("Chief Medical Officer")
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
if("Medical Doctor")
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
if("Geneticist")
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
if("Virologist")
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
if("Psychiatrist")
clothes_s = new /icon('icons/mob/uniform.dmi', "psych_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_UNDERLAY)
if("Paramedic")
clothes_s = new /icon('icons/mob/uniform.dmi', "paramedic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Captain")
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("Head of Security")
clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Warden")
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Detective")
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
if("Security Pod Pilot")
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bomber"), ICON_OVERLAY)
if("Brig Physician")
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY)
if("Security Officer")
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Chief Engineer")
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Station Engineer")
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Life Support Specialist")
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Mechanic")
clothes_s = new /icon('icons/mob/uniform.dmi', "mechanic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Roboticist")
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
else if(H.mind.assigned_role in get_all_centcom_jobs())
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
else
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
else
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
preview_icon.Blend(face_s, ICON_OVERLAY) // Why do we do this twice
if(clothes_s)
+9
View File
@@ -22,6 +22,8 @@
var/pda = null
var/internals_slot = null //ID of slot containing a gas tank
var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format
var/list/implants = null
var/list/cybernetic_implants = null
/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -89,6 +91,13 @@
var/number = backpack_contents[path]
for(var/i = 0, i < number, i++)
equip_item(H, path, slot_in_backpack)
if(implants)
for(var/path in implants)
var/obj/item/weapon/implant/I = new path(H)
I.implant(H)
for(var/path in cybernetic_implants)
var/obj/item/organ/internal/O = new path(H)
O.insert(H)
post_equip(H, visualsOnly)
+132 -144
View File
@@ -1,6 +1,13 @@
// Used for 'select equipment'
// code/modules/admin/verbs/debug.dm 566
/datum/outfit/admin/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(!visualsOnly)
H.mind.assigned_role = name
H.job = name
/proc/apply_to_card(obj/item/weapon/card/id/I, mob/living/carbon/human/H, list/access = list(), rank, special_icon)
if(!istype(I) || !istype(H))
return 0
@@ -95,6 +102,7 @@
mask = /obj/item/clothing/mask/gas/syndicate
l_ear = /obj/item/device/radio/headset/syndicate/alt
glasses = /obj/item/clothing/glasses/night
shoes = /obj/item/clothing/shoes/magboots/syndie
l_pocket = /obj/item/weapon/pinpointer/advpinpointer
l_hand = /obj/item/weapon/tank/jetpack/oxygen/harness
@@ -107,6 +115,7 @@
/obj/item/weapon/grenade/plastic/c4 = 1,
/obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1,
/obj/item/device/flashlight = 1,
/obj/item/clothing/shoes/combat = 1
)
/datum/outfit/admin/syndicate/operative/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -131,15 +140,21 @@
/datum/outfit/admin/syndicate/officer
name = "Syndicate Officer"
head = /obj/item/clothing/head/beret
mask = /obj/item/clothing/mask/cigarette/cigar/havana
belt = /obj/item/weapon/gun/projectile/automatic/pistol/deagle/camo
l_ear = /obj/item/device/radio/headset/syndicate/alt
l_pocket = /obj/item/weapon/pinpointer/advpinpointer
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/reagent_containers/food/pill/initropidril = 1,
/obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1,
/obj/item/ammo_box/magazine/m50 = 2)
/obj/item/ammo_box/magazine/m50 = 2,
/obj/item/clothing/shoes/magboots/syndie/advance = 1,
/obj/item/weapon/lighter/zippo/gonzofist = 1
)
id_icon = "commander"
id_access = "Syndicate Operative Leader"
@@ -152,22 +167,11 @@
var/obj/item/weapon/implant/uplink/U = new /obj/item/weapon/implant/uplink(H)
U.implant(H)
U.hidden_uplink.uses = 500//a measly 1000 TC along with the uplink in the pocket
U.hidden_uplink.uses = 500
var/obj/item/weapon/implant/dust/D = new(H)
D.implant(H)
/datum/outfit/admin/syndicate/bomber
name = "Syndicate Bomber"
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/card/emag = 1,
/obj/item/device/radio/beacon/syndicate/bomb = 2,
/obj/item/device/syndicatedetonator = 1,
/obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1
)
/datum/outfit/admin/nt_vip
name = "VIP Guest"
@@ -193,114 +197,6 @@
if(istype(I))
apply_to_card(I, H, get_centcom_access("VIP Guest"), "VIP Guest")
/datum/outfit/admin/nt_navy_officer
name = "NT Navy Officer"
uniform = /obj/item/clothing/under/rank/centcom/officer
back = /obj/item/weapon/storage/backpack/satchel
belt = /obj/item/weapon/gun/energy/pulse/pistol
gloves = /obj/item/clothing/gloves/color/white
shoes = /obj/item/clothing/shoes/centcom
head = /obj/item/clothing/head/beret/centcom/officer
l_ear = /obj/item/device/radio/headset/centcom
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
id = /obj/item/weapon/card/id/centcom
pda = /obj/item/device/pda/centcom
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/weapon/implanter/dust = 1,
/obj/item/weapon/implanter/death_alarm = 1
)
/datum/outfit/admin/nt_navy_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/weapon/card/id/I = H.wear_id
if(istype(I))
apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Officer"), "Nanotrasen Navy Officer")
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
L.implant(H)
/datum/outfit/admin/nt_special_ops_officer
name = "NT Special Ops Officer"
uniform = /obj/item/clothing/under/syndicate/combat
suit = /obj/item/clothing/suit/space/deathsquad/officer
back = /obj/item/weapon/storage/backpack/security
belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat
head = /obj/item/clothing/head/helmet/space/deathsquad/beret
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
l_ear = /obj/item/device/radio/headset/centcom
glasses = /obj/item/clothing/glasses/thermal/cyber
id = /obj/item/weapon/card/id/centcom
r_pocket = /obj/item/weapon/storage/box/matches
pda = /obj/item/device/pda/centcom
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/weapon/tank/emergency_oxygen/double/full = 1,
/obj/item/weapon/implanter/dust = 1,
/obj/item/weapon/implanter/death_alarm = 1,
/obj/item/weapon/twohanded/dualsaber/red = 1,
/obj/item/weapon/pinpointer/advpinpointer = 1,
/obj/item/weapon/reagent_containers/hypospray/combat/nanites = 1,
/obj/item/weapon/storage/box/zipties = 1,
/obj/item/clothing/shoes/magboots/advance = 1,
/obj/item/weapon/implanter/mindshield = 1,
)
/datum/outfit/admin/nt_special_ops_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/weapon/card/id/I = H.wear_id
if(istype(I))
apply_to_card(I, H, get_centcom_access("Special Operations Officer"), "Special Operations Officer")
/datum/outfit/admin/nt_special_ops_formal
name = "NT Special Ops Formal"
uniform = /obj/item/clothing/under/rank/centcom/captain
back = /obj/item/weapon/storage/backpack/satchel
belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat
head = /obj/item/clothing/head/helmet/space/deathsquad/beret
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
l_ear = /obj/item/device/radio/headset/centcom
glasses = /obj/item/clothing/glasses/thermal/cyber
id = /obj/item/weapon/card/id/centcom
r_pocket = /obj/item/weapon/storage/box/matches
pda = /obj/item/device/pda/centcom
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/weapon/melee/classic_baton/telescopic = 1,
/obj/item/weapon/implanter/dust = 1,
/obj/item/weapon/implanter/death_alarm = 1
)
/datum/outfit/admin/nt_special_ops_formal/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/device/pda/PDA = H.wear_pda
if(istype(PDA))
PDA.owner = H.real_name
PDA.ownjob = "Special Operations Officer"
PDA.icon_state = "pda-syndi"
PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
PDA.desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition designed for military field work."
var/obj/item/weapon/card/id/I = H.wear_id
if(istype(I))
apply_to_card(I, H, get_centcom_access("Special Operations Officer"), "Special Operations Officer")
/datum/outfit/admin/nt_navy_captain
name = "NT Navy Captain"
@@ -316,10 +212,13 @@
id = /obj/item/weapon/card/id/centcom
pda = /obj/item/device/pda/centcom
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/weapon/implanter/dust = 1,
/obj/item/weapon/storage/box/centcomofficer = 1,
/obj/item/weapon/implanter/death_alarm = 1
)
implants = list(
/obj/item/weapon/implant/mindshield,
/obj/item/weapon/implant/dust
)
/datum/outfit/admin/nt_navy_captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
@@ -330,9 +229,6 @@
if(istype(I))
apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Captain"), "Nanotrasen Navy Captain")
var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
L.implant(H)
/datum/outfit/admin/nt_diplomat
name = "NT Diplomat"
@@ -347,9 +243,12 @@
pda = /obj/item/device/pda/centcom
backpack_contents = list(
/obj/item/weapon/storage/box/survival = 1,
/obj/item/weapon/implanter/dust = 1,
/obj/item/weapon/implanter/death_alarm = 1,
)
implants = list(
/obj/item/weapon/implant/mindshield,
/obj/item/weapon/implant/dust
)
/datum/outfit/admin/nt_diplomat/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
@@ -360,6 +259,57 @@
if(istype(I))
apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Representative"), "Nanotrasen Diplomat")
/datum/outfit/admin/nt_undercover
name = "NT Undercover Operative"
// Disguised NT special forces, sent to quietly eliminate mutinous people in high positions (e.g: captain)
uniform = /obj/item/clothing/under/chameleon
back = /obj/item/weapon/storage/backpack
belt = /obj/item/weapon/storage/belt/utility/full/multitool
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/syndigaloshes
l_ear = /obj/item/device/radio/headset/heads/captain
id = /obj/item/weapon/card/id/syndicate
pda = /obj/item/device/pda
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/gun/projectile/automatic/proto = 1, // NT saber SMG
/obj/item/weapon/suppressor = 1, // silencer for SMG
/obj/item/ammo_box/magazine/smgm9mm = 3, // SMG ammo
/obj/item/weapon/door_remote/omni = 1,
/obj/item/weapon/implanter/mindshield = 1, // not implanted by default, as that would make them suspicious
/obj/item/weapon/implanter/storage = 1 // do not auto-implant this, that causes a bug
)
implants = list(
/obj/item/weapon/implant/dust
)
cybernetic_implants = list(
/obj/item/organ/internal/cyberimp/eyes/hud/security,
/obj/item/organ/internal/cyberimp/eyes/xray,
/obj/item/organ/internal/cyberimp/brain/anti_drop,
/obj/item/organ/internal/cyberimp/brain/anti_stun,
/obj/item/organ/internal/cyberimp/chest/nutriment/plus
)
/datum/outfit/admin/nt_undercover/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/weapon/card/id/I = H.wear_id
if(istype(I))
apply_to_card(I, H, get_all_accesses(), "Civilian")
I.icon_state = "deathsquad"
var/obj/item/device/radio/R = H.l_ear
if(istype(R))
R.name = "radio headset"
R.icon_state = "headset"
/datum/outfit/admin/death_commando
name = "NT Death Commando"
@@ -485,12 +435,10 @@
backpack_contents = list(
/obj/item/weapon/storage/box/survival = 1,
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing = 1,
/obj/item/weapon/storage/box/syndie_kit/caneshotgun = 1,
/obj/item/toy/crayon/mime = 1,
/obj/item/weapon/gun/projectile/automatic/pistol = 1,
/obj/item/weapon/suppressor = 1,
/obj/item/weapon/storage/box/syndie_kit/caneshotgun = 1,
/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath = 2,
/obj/item/weapon/pen/sleepy = 1,
/obj/item/device/radio/uplink = 1,
/obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1,
/obj/item/device/flashlight = 1
)
@@ -701,7 +649,9 @@
backpack_contents = list(
/obj/item/weapon/storage/box/survival = 1,
/obj/item/weapon/kitchen/knife/combat = 1,
/obj/item/ammo_box/magazine/m556 = 3)
/obj/item/ammo_box/magazine/m556 = 3,
/obj/item/clothing/shoes/magboots = 1
)
/datum/outfit/admin/solgov/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -725,7 +675,9 @@
/obj/item/weapon/storage/box/survival = 1,
/obj/item/weapon/kitchen/knife/combat = 1,
/obj/item/weapon/melee/classic_baton/telescopic = 1,
/obj/item/ammo_box/magazine/m50 = 2)
/obj/item/ammo_box/magazine/m50 = 2,
/obj/item/clothing/shoes/magboots/advance = 1
)
/datum/outfit/admin/chrono
name = "Chrono Legionnaire"
@@ -734,7 +686,7 @@
suit = /obj/item/clothing/suit/space/chronos
back = /obj/item/weapon/chrono_eraser
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat
shoes = /obj/item/clothing/shoes/magboots/advance
head = /obj/item/clothing/head/helmet/space/chronos
mask = /obj/item/clothing/mask/gas/syndicate
glasses = /obj/item/clothing/glasses/night
@@ -756,7 +708,7 @@
uniform = /obj/item/clothing/under/color/grey
suit = /obj/item/clothing/suit/space
back = /obj/item/weapon/tank/jetpack/oxygen
shoes = /obj/item/clothing/shoes/black
shoes = /obj/item/clothing/shoes/magboots
head = /obj/item/clothing/head/helmet/space
mask = /obj/item/clothing/mask/breath
l_ear = /obj/item/device/radio/headset
@@ -779,6 +731,7 @@
/datum/outfit/admin/hardsuit
back = /obj/item/weapon/tank/jetpack/oxygen
mask = /obj/item/clothing/mask/breath
shoes = /obj/item/clothing/shoes/magboots
id = /obj/item/weapon/card/id
/datum/outfit/admin/hardsuit/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -804,6 +757,7 @@
name = "CE Hardsuit"
suit = /obj/item/clothing/suit/space/hardsuit/elite
head = /obj/item/clothing/head/helmet/space/hardsuit/elite
shoes = /obj/item/clothing/shoes/magboots/advance
/datum/outfit/admin/hardsuit/mining
name = "Mining Hardsuit"
@@ -814,11 +768,13 @@
name = "Syndi Hardsuit"
suit = /obj/item/clothing/suit/space/hardsuit/syndi
head = /obj/item/clothing/head/helmet/space/hardsuit/syndi
shoes = /obj/item/clothing/shoes/magboots/syndie
/datum/outfit/admin/hardsuit/wizard
name = "Wizard Hardsuit"
suit = /obj/item/clothing/suit/space/hardsuit/wizard
head = /obj/item/clothing/head/helmet/space/hardsuit/wizard
shoes = /obj/item/clothing/shoes/magboots
/datum/outfit/admin/hardsuit/medical
name = "Medical Hardsuit"
@@ -996,15 +952,15 @@
/obj/item/weapon/storage/box/survival = 1,
/obj/item/device/flashlight = 1
)
implants = list(
/obj/item/weapon/implant/dust
)
/datum/outfit/admin/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(H)
D.implant(H)
var/obj/item/device/pda/PDA = H.wear_pda
if(istype(PDA))
PDA.owner = H.real_name
@@ -1034,7 +990,10 @@
/obj/item/weapon/suppressor = 1,
/obj/item/weapon/card/emag = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/implanter/storage = 1
/obj/item/weapon/implanter/storage = 1 // do not auto-implant this, that causes a bug
)
implants = list(
/obj/item/weapon/implant/dust
)
/datum/outfit/admin/spy/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -1046,9 +1005,6 @@
if(istype(G))
G.name = "black gloves"
var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(H)
D.implant(H)
var/obj/item/device/pda/PDA = H.wear_pda
if(istype(PDA))
PDA.owner = H.real_name
@@ -1089,6 +1045,7 @@
if(istype(I))
apply_to_card(I, H, get_all_accesses(), "Dark Lord", "syndie")
/datum/outfit/admin/wizard
uniform = /obj/item/clothing/under/color/lightpurple
suit = /obj/item/clothing/suit/wizrobe
@@ -1130,6 +1087,36 @@
shoes = /obj/item/clothing/shoes/sandal/marisa
head = /obj/item/clothing/head/wizard/marisa
/datum/outfit/admin/wizard/arch
name = "Arch Wizard"
suit = /obj/item/clothing/suit/wizrobe/magusred
head = /obj/item/clothing/head/wizard/magus
belt = /obj/item/weapon/storage/belt/wands/full
l_hand = null
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/clothing/suit/space/hardsuit/wizard = 1,
/obj/item/clothing/head/helmet/space/hardsuit/wizard = 1,
/obj/item/clothing/shoes/magboots = 1,
/obj/item/weapon/kitchen/knife/ritual = 1,
/obj/item/clothing/suit/wizrobe/red = 1,
/obj/item/clothing/head/wizard/red = 1
)
/datum/outfit/admin/wizard/arch/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/weapon/spellbook/B = H.r_hand
if(istype(B))
B.owner = H // force-bind it so it can never be stolen, no matter what.
B.name = "Archwizard Spellbook"
B.uses = 50
var/obj/item/weapon/card/id/I = H.wear_id
if(istype(I))
apply_to_card(I, H, get_all_accesses(), "Arch Wizard")
/datum/outfit/admin/dark_priest
name = "Dark Priest"
@@ -1147,6 +1134,9 @@
/obj/item/weapon/storage/box/survival = 1,
/obj/item/device/flashlight = 1,
)
implants = list(
/obj/item/weapon/implant/dust
)
/datum/outfit/admin/dark_priest/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
@@ -1163,5 +1153,3 @@
var/obj/item/device/radio/headset/R = H.l_ear
if(istype(R))
R.flags |= NODROP
var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(H)
D.implant(H)
@@ -349,6 +349,7 @@
to_chat(user, "<span class='warning'>You have successfully Enthralled [H]. <i>If they refuse to do as you say just adminhelp.</i></span>")
add_logs(user, H, "vampire-thralled")
/obj/effect/proc_holder/spell/vampire/self/cloak
name = "Cloak of Darkness"
desc = "Toggles whether you are currently cloaking yourself in darkness."
+26 -18
View File
@@ -28,16 +28,13 @@
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
id = /obj/item/weapon/card/id/centcom
pda = /obj/item/device/pda/centcom
backpack_contents = list(
/obj/item/weapon/gun/energy/pulse/pistol = 1,
/obj/item/weapon/implanter/dust = 1,
/obj/item/weapon/implanter/death_alarm = 1
belt = /obj/item/weapon/gun/energy/pulse/pistol
implants = list(
/obj/item/weapon/implant/mindshield,
/obj/item/weapon/implant/dust
)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/satchel
box = /obj/item/weapon/storage/box/centcomofficer
// CC Officials who lead ERTs, Death Squads, etc.
@@ -61,22 +58,33 @@
/datum/outfit/job/ntspecops
name = "Special Operations Officer"
jobtype = /datum/job/ntspecops
uniform = /obj/item/clothing/under/syndicate/combat
uniform = /obj/item/clothing/under/rank/centcom_commander
suit = /obj/item/clothing/suit/space/deathsquad/officer
back = /obj/item/weapon/storage/backpack/security
belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat
head = /obj/item/clothing/head/beret/centcom/officer/navy
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
head = /obj/item/clothing/head/helmet/space/deathsquad/beret
l_ear = /obj/item/device/radio/headset/centcom
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
id = /obj/item/weapon/card/id/centcom
pda = /obj/item/device/pda/centcom
r_pocket = /obj/item/weapon/storage/box/matches
box = /obj/item/weapon/storage/box/centcomofficer
backpack = /obj/item/weapon/storage/backpack/satchel
backpack_contents = list(
/obj/item/weapon/implanter/dust = 1,
/obj/item/weapon/gun/energy/pulse/pistol/m1911 = 1,
/obj/item/weapon/implanter/death_alarm = 1
/obj/item/clothing/shoes/magboots/advance = 1,
/obj/item/weapon/twohanded/dualsaber/red = 1,
/obj/item/weapon/storage/box/zipties = 1
)
implants = list(/obj/item/weapon/implant/mindshield)
backpack = /obj/item/weapon/storage/backpack/satchel
implants = list(
/obj/item/weapon/implant/mindshield,
/obj/item/weapon/implant/dust
)
cybernetic_implants = list(
/obj/item/organ/internal/cyberimp/eyes/xray,
/obj/item/organ/internal/cyberimp/brain/anti_drop,
/obj/item/organ/internal/cyberimp/brain/anti_stun,
/obj/item/organ/internal/cyberimp/chest/nutriment/plus
)
-7
View File
@@ -142,8 +142,6 @@
shoes = /obj/item/clothing/shoes/black
pda = /obj/item/device/pda
var/list/implants = null
var/backpack = /obj/item/weapon/storage/backpack
var/satchel = /obj/item/weapon/storage/backpack/satchel_norm
var/dufflebag = /obj/item/weapon/storage/backpack/duffel
@@ -210,11 +208,6 @@
imprint_pda(H)
if(implants)
for(var/implant_type in implants)
var/obj/item/weapon/implant/I = new implant_type(H)
I.implant(H)
if(gear_leftovers.len)
for(var/datum/gear/G in gear_leftovers)
var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.gear[G.display_name]))
+23 -11
View File
@@ -1,6 +1,4 @@
/obj/machinery/bodyscanner
var/mob/living/carbon/occupant
var/locked
name = "body scanner"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "bodyscanner-open"
@@ -11,6 +9,16 @@
active_power_usage = 2500
light_color = "#00FF00"
var/obj/machinery/body_scanconsole/console = null
var/mob/living/carbon/occupant = null
var/locked
/obj/machinery/bodyscanner/Destroy()
go_out()
if(console)
console.connected = null
console = null
return ..()
/obj/machinery/bodyscanner/power_change()
..()
@@ -207,9 +215,6 @@
return
/obj/machinery/body_scanconsole
var/obj/machinery/bodyscanner/connected
var/delete
var/temphtml
name = "Body Scanner Console"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "bodyscannerconsole"
@@ -218,6 +223,9 @@
dir = 8
idle_power_usage = 250
active_power_usage = 500
var/obj/machinery/bodyscanner/connected = null
var/delete
var/temphtml
var/printing = null
var/printing_text = null
var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/mindshield, /obj/item/weapon/implant/tracking, /obj/item/weapon/implant/health)
@@ -243,6 +251,12 @@
RefreshParts()
findscanner()
/obj/machinery/body_scanconsole/Destroy()
if(connected)
connected.console = null
connected = null
return ..()
/obj/machinery/body_scanconsole/ex_act(severity)
switch(severity)
if(1.0)
@@ -269,15 +283,13 @@
return
/obj/machinery/body_scanconsole/proc/findscanner()
var/obj/machinery/bodyscanner/bodyscannernew = null
// Loop through every direction
for(dir in list(NORTH,EAST,SOUTH,WEST))
// Try to find a scanner in that direction
var/temp = locate(/obj/machinery/bodyscanner, get_step(src, dir))
if(!isnull(temp))
bodyscannernew = temp
src.connected = bodyscannernew
return
if(temp)
connected = temp
connected.console = src
break
/obj/machinery/body_scanconsole/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob, params)
+1
View File
@@ -212,6 +212,7 @@
air_alarms -= src
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
air_alarm_repository.update_cache(src)
QDEL_NULL(wires)
if(alarm_area && alarm_area.master_air_alarm == src)
+8 -1
View File
@@ -135,7 +135,8 @@ obj/machinery/air_sensor
Destroy()
SSair.atmos_machinery -= src
if(radio_controller)
radio_controller.remove_object(src,frequency)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
@@ -156,6 +157,12 @@ obj/machinery/air_sensor
var/list/sensor_information = list()
var/datum/radio_frequency/radio_connection
Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
attack_hand(mob/user)
if(..(user))
return
+4 -3
View File
@@ -48,13 +48,14 @@
/obj/machinery/driver_button/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/driver_button/attack_ai(mob/user as mob)
return attack_hand(user)
/obj/machinery/driver_button/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
return attack_hand(user)
@@ -167,7 +168,7 @@
/obj/machinery/ignition_switch/attack_ai(mob/user)
return attack_hand(user)
/obj/machinery/ignition_switch/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
return attack_hand(user)
+4 -1
View File
@@ -140,6 +140,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/Destroy()
QDEL_NULL(electronics)
QDEL_NULL(wires)
QDEL_NULL(note)
if(main_power_timer)
deltimer(main_power_timer)
main_power_timer = null
@@ -149,7 +150,9 @@ About the new airlock wires panel:
if(electrified_timer)
deltimer(electrified_timer)
electrified_timer = null
qdel(note)
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/door/airlock/handle_atom_del(atom/A)
@@ -216,6 +216,12 @@
if(radio_controller)
set_frequency(frequency)
/obj/machinery/airlock_sensor/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/airlock_sensor/airlock_interior
command = "cycle_interior"
@@ -279,6 +285,12 @@
if(radio_controller)
set_frequency(frequency)
/obj/machinery/access_button/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/access_button/airlock_interior
frequency = 1379
command = "cycle_interior"
@@ -58,6 +58,12 @@
..()
set_frequency(frequency)
/obj/machinery/embedded_controller/radio/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/embedded_controller/radio/update_icon()
if(on && program)
if(program.memory["processing"])
+3 -2
View File
@@ -56,7 +56,8 @@
/obj/machinery/light_switch/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/light_switch/proc/updateicon()
@@ -75,7 +76,7 @@
/obj/machinery/light_switch/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/light_switch/attack_hand(mob/user)
on = !on
updateicon()
+6
View File
@@ -236,6 +236,12 @@
filter_path() // renders rpath
Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
process()
if(magnets.len == 0 && autolink)
for(var/obj/machinery/magnetic_module/M in world)
+1
View File
@@ -9,6 +9,7 @@
name = "control wand"
desc = "Remotely controls airlocks."
w_class = WEIGHT_CLASS_TINY
flags = NOBLUDGEON
var/mode = WAND_OPEN
var/region_access = 1 //See access.dm
var/obj/item/weapon/card/id/ID
@@ -77,6 +77,7 @@ var/global/list/default_medbay_channels = list(
radio_controller.remove_object(src, frequency)
for(var/ch_name in channels)
radio_controller.remove_object(src, radiochannels[ch_name])
radio_connection = null
global_radios -= src
follow_target = null
return ..()
+4 -1
View File
@@ -13,6 +13,7 @@
var/list/recipes = list() // /datum/stack_recipe
var/singular_name
var/amount = 1
var/to_transfer = 0
var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount
var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
@@ -231,6 +232,9 @@
/obj/item/stack/proc/get_max_amount()
return max_amount
/obj/item/stack/proc/get_amount_transferred()
return to_transfer
/obj/item/stack/proc/split(mob/user, amt)
var/obj/item/stack/F = new type(loc, amt)
F.copy_evidences(src)
@@ -257,7 +261,6 @@
if(S.amount >= max_amount)
return 1
var/to_transfer
if(user.is_in_inactive_hand(src))
var/desired = input("How much would you like to transfer from this stack?", "How much?", 1) as null|num
if(!desired)
@@ -829,6 +829,26 @@
return
return ..()
/obj/item/weapon/storage/box/centcomofficer
name = "officer kit"
/obj/item/weapon/storage/box/centcomofficer/New()
..()
contents = list()
new /obj/item/clothing/mask/breath(src)
new /obj/item/weapon/tank/emergency_oxygen/double/full(src)
new /obj/item/device/flashlight/seclite(src)
new /obj/item/weapon/kitchen/knife/combat(src)
new /obj/item/device/radio/centcom(src)
new /obj/item/weapon/door_remote/omni(src)
new /obj/item/weapon/implanter/death_alarm(src)
new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src)
new /obj/item/weapon/pinpointer/advpinpointer(src)
#undef NODESIGN
#undef NANOTRASEN
#undef SYNDI
@@ -96,6 +96,14 @@
..()
air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
/obj/item/weapon/tank/jetpack/void/grey
name = "Void Jetpack (Oxygen)"
icon_state = "jetpack-void-grey"
/obj/item/weapon/tank/jetpack/void/gold
name = "Retro Jetpack (Oxygen)"
icon_state = "jetpack-void-gold"
/obj/item/weapon/tank/jetpack/oxygen
name = "Jetpack (Oxygen)"
@@ -9,8 +9,7 @@
..()
new /obj/item/weapon/tank/jetpack/void(src)
new /obj/item/clothing/mask/breath(src)
new /obj/item/clothing/head/helmet/space/nasavoid(src)
new /obj/item/clothing/suit/space/nasavoid(src)
new /obj/effect/nasavoidsuitspawner(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/stock_parts/cell(src)
new /obj/item/device/multitool(src)
+2 -1
View File
@@ -29,7 +29,8 @@
/obj/item/device/assembly/signaler/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/item/device/assembly/signaler/describe()
+106 -7
View File
@@ -1,14 +1,113 @@
//NASA Voidsuit
//Voidsuits
/obj/item/clothing/head/helmet/space/nasavoid
name = "NASA Void Helmet"
desc = "A high tech, NASA Centcom branch designed, dark red space suit helmet. Used for AI satellite maintenance."
icon_state = "void"
desc = "A high tech, NASA Centcom branch designed space suit helmet. Used for AI satellite maintenance."
icon_state = "void-red"
item_state = "void"
flags_inv = HIDEMASK|HIDEEARS
/obj/item/clothing/suit/space/nasavoid
name = "NASA Voidsuit"
icon_state = "void"
name = "NASA Void Suit"
icon_state = "void-red"
item_state = "void"
desc = "A high tech, NASA Centcom branch designed, dark red Space suit. Used for AI satellite maintenance."
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/multitool)
desc = "A high tech, NASA Centcom branch designed space suit. Used for AI satellite maintenance."
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/multitool)
//Colors!!!
/obj/item/clothing/head/helmet/space/nasavoid/green
icon_state = "void-green"
/obj/item/clothing/suit/space/nasavoid/green
icon_state = "void-green"
/obj/item/clothing/head/helmet/space/nasavoid/ntblue
icon_state = "void-ntblue"
/obj/item/clothing/suit/space/nasavoid/ntblue
icon_state = "void-ntblue"
/obj/item/clothing/head/helmet/space/nasavoid/purple
icon_state = "void-purple"
/obj/item/clothing/suit/space/nasavoid/purple
icon_state = "void-purple"
/obj/item/clothing/head/helmet/space/nasavoid/yellow
icon_state = "void-yellow"
/obj/item/clothing/suit/space/nasavoid/yellow
icon_state = "void-yellow"
/obj/item/clothing/head/helmet/space/nasavoid/ltblue
icon_state = "void-light_blue"
/obj/item/clothing/suit/space/nasavoid/ltblue
icon_state = "void-light_blue"
//Captian's Suit, like the other captian's suit, but looks better, at the cost of armor
/obj/item/clothing/head/helmet/space/nasavoid/captain
name = "Fancy Retro Void Helmet"
icon_state = "void-captian"
desc = "A high tech, NASA Centcom branch designed space suit helmet. Used for AI satellite maintenance. This one is fit for a captain."
/obj/item/clothing/suit/space/nasavoid/captain
name = "Fancy NASA Void Suit"
icon_state = "void-captian"
desc = "A high tech, NASA Centcom branch designed space suit. Used for AI satellite maintenance. This one is fit for a captain."
//Syndi's suit, on par with a blood red softsuit
/obj/item/clothing/head/helmet/space/nasavoid/syndi
name = "Blood Red Retro Void Helmet"
icon_state = "void-syndi"
desc = "A high tech, NASA Centcom branch designed space suit helmet. This one looks rather suspicious."
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
/obj/item/clothing/suit/space/nasavoid/syndi
name = "Blood Red NASA Void Suit"
icon_state = "void-syndi"
desc = "A high tech, NASA Centcom branch designed space suit. This one looks rather suspicious."
w_class = WEIGHT_CLASS_NORMAL
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
//random spawner
/obj/effect/nasavoidsuitspawner
name = "NASA Void Suit Spawner"
icon = 'icons/obj/clothing/suits.dmi'
icon_state = "void-red"
desc = "You shouldn't see this, a spawner for NASA Void Suits."
var/suits = list("red", "green", "ntblue", "purple", "yellow", "ltblue")
/obj/effect/nasavoidsuitspawner/New()
var/obj/item/clothing/head/helmet/space/nasavoid/H
var/obj/item/clothing/suit/space/nasavoid/S
switch(pick(suits))
if("red")
H = new /obj/item/clothing/head/helmet/space/nasavoid
S = new /obj/item/clothing/suit/space/nasavoid
if("green")
H = new /obj/item/clothing/head/helmet/space/nasavoid/green
S = new /obj/item/clothing/suit/space/nasavoid/green
if("ntblue")
H = new /obj/item/clothing/head/helmet/space/nasavoid/ntblue
S = new /obj/item/clothing/suit/space/nasavoid/ntblue
if("purple")
H = new /obj/item/clothing/head/helmet/space/nasavoid/purple
S = new /obj/item/clothing/suit/space/nasavoid/purple
if("yellow")
H = new /obj/item/clothing/head/helmet/space/nasavoid/yellow
S = new /obj/item/clothing/suit/space/nasavoid/yellow
if("ltblue")
H = new /obj/item/clothing/head/helmet/space/nasavoid/ltblue
S = new /obj/item/clothing/suit/space/nasavoid/ltblue
var/turf/T = get_turf(src)
if(H)
H.forceMove(T)
if(S)
S.forceMove(T)
qdel(src)
@@ -32,6 +32,7 @@
********************/
/obj/machinery/kitchen_machine/New()
..()
create_reagents(100)
reagents.set_reacting(FALSE)
if(!available_recipes)
+2 -1
View File
@@ -62,7 +62,8 @@
/obj/machinery/logic_gate/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/machinery/logic_gate/process()
+1
View File
@@ -168,6 +168,7 @@
/obj/item/radio/integrated/signal/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
return ..()
/obj/item/radio/integrated/signal/initialize()
+3 -17
View File
@@ -599,35 +599,21 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list(
..()
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
// Cable merging is handled by parent proc
if(C.amount >= MAXCOIL)
to_chat(user, "The coil is too long, you cannot add any more cable to it.")
to_chat(user, "The coil is as long as it will get.")
return
if( (C.amount + src.amount <= MAXCOIL) )
to_chat(user, "You join the cable coils together.")
C.give(src.amount) // give it cable
src.use(src.amount) // make sure this one cleans up right
return
else
var/amt = MAXCOIL - C.amount
to_chat(user, "You transfer [amt] length\s of cable from one coil to the other.")
C.give(amt)
src.use(amt)
to_chat(user, "You transfer [get_amount_transferred()] length\s of cable from one coil to the other.")
return
if(istype(W, /obj/item/toy/crayon))
var/obj/item/toy/crayon/C = W
cable_color(C.colourName)
//add cables to the stack
/obj/item/stack/cable_coil/proc/give(var/extra)
if(amount + extra > MAXCOIL)
amount = MAXCOIL
else
amount += extra
update_icon()
///////////////////////////////////////////////
// Cable laying procedures
//////////////////////////////////////////////
@@ -117,6 +117,9 @@
update_icon()
/obj/machinery/power/emitter/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
msg_admin_attack("Emitter deleted at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z])","singulo")