Reverts maps. Fixes conflict.

This commit is contained in:
warior4356
2018-10-31 19:13:22 -07:00
780 changed files with 15572 additions and 12408 deletions
+58 -84
View File
@@ -27,7 +27,6 @@
/datum/autopsy_data
var/weapon = null
var/pretend_weapon = null
var/damage = 0
var/hits = 0
var/time_inflicted = 0
@@ -35,44 +34,35 @@
/datum/autopsy_data/proc/copy()
var/datum/autopsy_data/W = new()
W.weapon = weapon
W.pretend_weapon = pretend_weapon
W.damage = damage
W.hits = hits
W.time_inflicted = time_inflicted
return W
/obj/item/autopsy_scanner/proc/add_data(obj/item/organ/external/O)
if(!O.autopsy_data.len && !O.trace_chemicals.len)
return
/obj/item/autopsy_scanner/proc/add_data(obj/item/organ/O)
if(O.autopsy_data.len)
for(var/V in O.autopsy_data)
var/datum/autopsy_data/W = O.autopsy_data[V]
for(var/V in O.autopsy_data)
var/datum/autopsy_data/W = O.autopsy_data[V]
var/datum/autopsy_data_scanner/D = wdata[V]
if(!D)
D = new()
D.weapon = W.weapon
wdata[V] = D
if(!W.pretend_weapon)
if(1)
W.pretend_weapon = W.weapon
else
W.pretend_weapon = pick("mechanical toolbox", "wirecutters", "revolver", "crowbar", "fire extinguisher", "tomato soup", "oxygen tank", "emergency oxygen tank", "laser", "bullet")
if(!D.organs_scanned[O.name])
if(D.organ_names == "")
D.organ_names = O.name
else
D.organ_names += ", [O.name]"
qdel(D.organs_scanned[O.name])
D.organs_scanned[O.name] = W.copy()
var/datum/autopsy_data_scanner/D = wdata[V]
if(!D)
D = new()
D.weapon = W.weapon
wdata[V] = D
if(!D.organs_scanned[O.name])
if(D.organ_names == "")
D.organ_names = O.name
else
D.organ_names += ", [O.name]"
qdel(D.organs_scanned[O.name])
D.organs_scanned[O.name] = W.copy()
for(var/V in O.trace_chemicals)
if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V))
chemtraces += V
if(O.trace_chemicals.len)
for(var/V in O.trace_chemicals)
if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V))
chemtraces += V
/obj/item/autopsy_scanner/attackby(obj/item/P, mob/user)
if(istype(P, /obj/item/pen))
@@ -90,71 +80,55 @@
user.put_in_hands(R)
/obj/item/autopsy_scanner/attack_self(mob/user)
if(!wdata.len && !chemtraces.len)
return
var/scan_data = ""
if(timeofdeath)
scan_data += "<b>Time of death:</b> [station_time_timestamp("hh:mm:ss", timeofdeath)]<br><br>"
else
scan_data += "<b>Time of death:</b> Unknown / Still alive<br><br>"
var/n = 1
for(var/wdata_idx in wdata)
var/datum/autopsy_data_scanner/D = wdata[wdata_idx]
var/total_hits = 0
var/total_score = 0
var/list/weapon_chances = list() // maps weapon names to a score
var/age = 0
if(wdata.len)
var/n = 1
for(var/wdata_idx in wdata)
var/datum/autopsy_data_scanner/D = wdata[wdata_idx]
var/total_hits = 0
var/total_score = 0
var/age = 0
for(var/wound_idx in D.organs_scanned)
var/datum/autopsy_data/W = D.organs_scanned[wound_idx]
total_hits += W.hits
var/wname = W.pretend_weapon
if(wname in weapon_chances)
weapon_chances[wname] += W.damage
else
weapon_chances[wname] = max(W.damage, 1)
total_score+=W.damage
for(var/wound_idx in D.organs_scanned)
var/datum/autopsy_data/W = D.organs_scanned[wound_idx]
total_hits += W.hits
total_score+=W.damage
var/wound_age = W.time_inflicted
age = max(age, wound_age)
var/wound_age = W.time_inflicted
age = max(age, wound_age)
var/damage_desc
var/damage_desc
// total score happens to be the total damage
switch(total_score)
if(1 to 5)
damage_desc = "<font color='green'>negligible</font>"
if(5 to 15)
damage_desc = "<font color='green'>light</font>"
if(15 to 30)
damage_desc = "<font color='orange'>moderate</font>"
if(30 to 1000)
damage_desc = "<font color='red'>severe</font>"
else
damage_desc = "Unknown"
var/damaging_weapon = (total_score != 0)
var/damaging_weapon = (total_score != 0)
scan_data += "<b>Weapon #[n]</b><br>"
if(damaging_weapon)
scan_data += "Severity: [damage_desc]<br>"
scan_data += "Hits by weapon: [total_hits]<br>"
scan_data += "Approximate time of wound infliction: [station_time_timestamp("hh:mm", age)]<br>"
scan_data += "Affected limbs: [D.organ_names]<br>"
scan_data += "Weapon: [D.weapon]<br>"
scan_data += "<br>"
// total score happens to be the total damage
switch(total_score)
if(0)
damage_desc = "Unknown"
if(1 to 5)
damage_desc = "<font color='green'>negligible</font>"
if(5 to 15)
damage_desc = "<font color='green'>light</font>"
if(15 to 30)
damage_desc = "<font color='orange'>moderate</font>"
if(30 to 1000)
damage_desc = "<font color='red'>severe</font>"
if(!total_score)
total_score = D.organs_scanned.len
scan_data += "<b>Weapon #[n]</b><br>"
if(damaging_weapon)
scan_data += "Severity: [damage_desc]<br>"
scan_data += "Hits by weapon: [total_hits]<br>"
scan_data += "Approximate time of wound infliction: [station_time_timestamp("hh:mm", age)]<br>"
scan_data += "Affected limbs: [D.organ_names]<br>"
scan_data += "Possible weapons:<br>"
for(var/weapon_name in weapon_chances)
scan_data += "\t[100*weapon_chances[weapon_name]/total_score]% [weapon_name]<br>"
scan_data += "<br>"
n++
n++
if(chemtraces.len)
scan_data += "<b>Trace Chemicals: </b><br>"
@@ -67,10 +67,7 @@
/obj/item/chameleon/proc/disrupt(var/delete_dummy = 1)
if(active_dummy)
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
do_sparks(5, 0, src)
eject_all()
if(delete_dummy)
qdel(active_dummy)
+2 -1
View File
@@ -35,7 +35,7 @@
return
if(H.mind)
span = H.mind.speech_span
if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice))
if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice) || istype(H.get_item_by_slot(slot_wear_mask), /obj/item/clothing/mask/gas/voice/clown))
span = "sans"
if(spamcheck)
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
@@ -47,6 +47,7 @@
message = sanitize(copytext(message, 1, MAX_MESSAGE_LEN))
if(!message)
return
message = user.handle_speech_problems(message)[1]
message = capitalize(message)
if((loc == user && !user.incapacitated()))
if(emagged)
+4 -4
View File
@@ -27,7 +27,7 @@
/obj/item/powersink/Destroy()
processing_objects.Remove(src)
processing_power_items.Remove(src)
GLOB.processing_power_items.Remove(src)
PN = null
attached = null
return ..()
@@ -54,7 +54,7 @@
else
if(mode == 2)
processing_objects.Remove(src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite
processing_power_items.Remove(src)
GLOB.processing_power_items.Remove(src)
anchored = 0
mode = 0
src.visible_message("<span class='notice'>[user] detaches [src] from the cable!</span>")
@@ -77,14 +77,14 @@
mode = 2
icon_state = "powersink1"
processing_objects.Add(src)
processing_power_items.Add(src)
GLOB.processing_power_items.Add(src)
if(2) //This switch option wasn't originally included. It exists now. --NeoFite
src.visible_message("<span class='notice'>[user] deactivates [src]!</span>")
mode = 1
set_light(0)
icon_state = "powersink0"
processing_objects.Remove(src)
processing_power_items.Remove(src)
GLOB.processing_power_items.Remove(src)
/obj/item/powersink/pwr_drain()
if(!attached)
@@ -11,11 +11,11 @@
/obj/item/radio/beacon/New()
..()
code = "[code] ([beacons.len + 1])"
beacons += src
code = "[code] ([GLOB.beacons.len + 1])"
GLOB.beacons += src
/obj/item/radio/beacon/Destroy()
beacons -= src
GLOB.beacons -= src
return ..()
/obj/item/radio/beacon/emag_act(user as mob)
@@ -46,9 +46,10 @@
return
/obj/item/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
proc/digest_delay()
/obj/item/radio/beacon/bacon/proc/digest_delay()
spawn(600)
qdel(src)
qdel(src)
// SINGULO BEACON SPAWNER
/obj/item/radio/beacon/syndicate
@@ -82,4 +83,4 @@
new /obj/machinery/syndicatebomb( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
qdel(src)
return
return
@@ -87,9 +87,7 @@
if(M)
M.moved_recently = 0
to_chat(M, "<span class='danger'>You feel a sharp shock!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, M)
s.start()
do_sparks(3, 1, M)
M.Weaken(5)
@@ -7,33 +7,44 @@
item_state = ""
w_class = WEIGHT_CLASS_TINY
origin_tech = "engineering=2;bluespace=1"
var/translate_binary = 0
var/translate_hive = 0
var/syndie = 0
var/translate_binary = FALSE
var/translate_hive = FALSE
var/syndie = FALSE
var/list/channels = list()
/obj/item/encryptionkey/New()
/obj/item/encryptionkey/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/encryptionkey/syndicate
icon_state = "cypherkey"
channels = list("Syndicate" = 1)
origin_tech = "syndicate=1;engineering=3;bluespace=2"
syndie = 1 //Signifies that it de-crypts Syndicate transmissions
syndie = TRUE //Signifies that it de-crypts Syndicate transmissions
var/change_voice = TRUE
var/fake_name = "Agent ALERT_A_CODER"
var/static/list/fakename_list
/obj/item/encryptionkey/syndicate/Initialize()
if(!LAZYLEN(fakename_list))
fakename_list = GLOB.html_colors.Copy()
. = ..()
if(change_voice)
fake_name = "Agent [pick_n_take(fakename_list)]"
/obj/item/encryptionkey/syndicate/nukeops
change_voice = FALSE
/obj/item/encryptionkey/syndteam
icon_state = "cypherkey"
channels = list("SyndTeam" = 1, "Syndicate" = 1)
origin_tech = "syndicate=4"
syndie = 1 //Signifies that it de-crypts Syndicate transmissions
syndie = TRUE //Signifies that it de-crypts Syndicate transmissions
/obj/item/encryptionkey/binary
name = "binary translator key"
desc = "An encryption key for a radio headset. To access the binary channel, use :b."
icon_state = "cypherkey"
translate_binary = 1
translate_binary = TRUE
origin_tech = "syndicate=3;engineering=4;bluespace=3"
/obj/item/encryptionkey/headset_sec
@@ -5,12 +5,12 @@
icon_state = "headset"
item_state = "headset"
materials = list(MAT_METAL=75)
subspace_transmission = 1
subspace_transmission = TRUE
canhear_range = 0 // can't hear headsets from very far away
slot_flags = SLOT_EARS
var/translate_binary = 0
var/translate_hive = 0
var/translate_binary = FALSE
var/translate_hive = FALSE
var/obj/item/encryptionkey/keyslot1 = null
var/obj/item/encryptionkey/keyslot2 = null
@@ -26,10 +26,14 @@
if(ks1type)
keyslot1 = new ks1type(src)
if(keyslot1.syndie)
syndiekey = keyslot1
if(ks2type)
keyslot2 = new ks2type(src)
if(keyslot2.syndie)
syndiekey = keyslot2
recalculateChannels(1)
recalculateChannels(TRUE)
/obj/item/radio/headset/Destroy()
QDEL_NULL(keyslot1)
@@ -49,11 +53,11 @@
/obj/item/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
if(channel == "special")
if(translate_binary)
var/datum/language/binary = all_languages["Robot Talk"]
var/datum/language/binary = GLOB.all_languages["Robot Talk"]
binary.broadcast(M, message)
return RADIO_CONNECTION_NON_SUBSPACE
if(translate_hive)
var/datum/language/hivemind = all_languages["Hivemind"]
var/datum/language/hivemind = GLOB.all_languages["Hivemind"]
hivemind.broadcast(M, message)
return RADIO_CONNECTION_NON_SUBSPACE
return RADIO_CONNECTION_FAIL
@@ -79,8 +83,7 @@
/obj/item/radio/headset/syndicate
origin_tech = "syndicate=3"
syndie = 1
ks1type = /obj/item/encryptionkey/syndicate
ks1type = /obj/item/encryptionkey/syndicate/nukeops
/obj/item/radio/headset/syndicate/alt //undisguised bowman with flash protection
name = "syndicate headset"
@@ -349,48 +352,48 @@
return
/obj/item/radio/headset/proc/recalculateChannels(var/setDescription = 0)
src.channels = list()
src.translate_binary = 0
src.translate_hive = 0
src.syndie = 0
/obj/item/radio/headset/proc/recalculateChannels(var/setDescription = FALSE)
channels = list()
translate_binary = FALSE
translate_hive = FALSE
syndiekey = null
if(keyslot1)
for(var/ch_name in keyslot1.channels)
if(ch_name in src.channels)
if(ch_name in channels)
continue
src.channels += ch_name
src.channels[ch_name] = keyslot1.channels[ch_name]
channels += ch_name
channels[ch_name] = keyslot1.channels[ch_name]
if(keyslot1.translate_binary)
src.translate_binary = 1
translate_binary = TRUE
if(keyslot1.translate_hive)
src.translate_hive = 1
translate_hive = TRUE
if(keyslot1.syndie)
src.syndie = 1
syndiekey = keyslot1
if(keyslot2)
for(var/ch_name in keyslot2.channels)
if(ch_name in src.channels)
if(ch_name in channels)
continue
src.channels += ch_name
src.channels[ch_name] = keyslot2.channels[ch_name]
channels += ch_name
channels[ch_name] = keyslot2.channels[ch_name]
if(keyslot2.translate_binary)
src.translate_binary = 1
translate_binary = TRUE
if(keyslot2.translate_hive)
src.translate_hive = 1
translate_hive = TRUE
if(keyslot2.syndie)
src.syndie = 1
syndiekey = keyslot2
for(var/ch_name in channels)
if(!radio_controller)
src.name = "broken radio headset"
name = "broken radio headset"
return
secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
@@ -414,5 +417,5 @@
/obj/item/radio/headset/proc/make_syndie() // Turns normal radios into Syndicate radios!
qdel(keyslot1)
keyslot1 = new /obj/item/encryptionkey/syndicate
syndie = 1
syndiekey = keyslot1
recalculateChannels()
@@ -57,7 +57,7 @@
dir=ndir
b_stat=1
on = 0
global_intercoms.Add(src)
GLOB.global_intercoms.Add(src)
update_icon()
/obj/item/radio/intercom/department/medbay/New()
@@ -75,8 +75,8 @@
name = "illicit intercom"
desc = "Talk through this. Evilly"
frequency = SYND_FREQ
subspace_transmission = 1
syndie = 1
subspace_transmission = TRUE
syndiekey = new /obj/item/encryptionkey/syndicate/nukeops
/obj/item/radio/intercom/syndicate/New()
..()
@@ -106,7 +106,7 @@
/obj/item/radio/intercom/Destroy()
processing_objects.Remove(src)
global_intercoms.Remove(src)
GLOB.global_intercoms.Remove(src)
return ..()
/obj/item/radio/intercom/attack_ai(mob/user as mob)
@@ -129,7 +129,7 @@
if(isnull(position) || !(position.z in level))
return -1
if(freq in ANTAG_FREQS)
if(!(src.syndie))
if(!(syndiekey))
return -1//Prevents broadcast of messages over devices lacking the encryption
return canhear_range
+26 -22
View File
@@ -36,7 +36,7 @@ var/global/list/default_medbay_channels = list(
var/listening = 1
var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
var/subspace_transmission = 0
var/syndie = 0//Holder to see if it's a syndicate encrpyed radio
var/obj/item/encryptionkey/syndicate/syndiekey = null //Holder for the syndicate encryption key if present
var/disable_timer = 0 //How many times this is disabled by EMPs
var/is_special = 0 //For electropacks mostly, skips Topic() checks
@@ -69,7 +69,7 @@ var/global/list/default_medbay_channels = list(
wires = new(src)
internal_channels = default_internal_channels.Copy()
global_radios |= src
GLOB.global_radios |= src
/obj/item/radio/Destroy()
QDEL_NULL(wires)
@@ -78,7 +78,7 @@ var/global/list/default_medbay_channels = list(
for(var/ch_name in channels)
radio_controller.remove_object(src, radiochannels[ch_name])
radio_connection = null
global_radios -= src
GLOB.global_radios -= src
follow_target = null
return ..()
@@ -131,7 +131,7 @@ var/global/list/default_medbay_channels = list(
data["chan_list"] = chanlist
data["chan_list_len"] = chanlist.len
if(syndie)
if(syndiekey)
data["useSyndMode"] = 1
return data
@@ -250,7 +250,7 @@ var/global/list/default_medbay_channels = list(
A.role = role
A.message = message
var/jammed = FALSE
for(var/obj/item/jammer/jammer in active_jammers)
for(var/obj/item/jammer/jammer in GLOB.active_jammers)
if(get_dist(get_turf(src), get_turf(jammer)) < jammer.range)
jammed = TRUE
break
@@ -342,7 +342,7 @@ var/global/list/default_medbay_channels = list(
var/turf/position = get_turf(src)
var/jammed = FALSE
for(var/obj/item/jammer/jammer in active_jammers)
for(var/obj/item/jammer/jammer in GLOB.active_jammers)
if(get_dist(position, get_turf(jammer)) < jammer.range)
jammed = TRUE
break
@@ -395,8 +395,12 @@ var/global/list/default_medbay_channels = list(
if(ishuman(M) && M.GetVoice() != real_name)
displayname = M.GetVoice()
jobname = "Unknown"
voicemask = 1
voicemask = TRUE
if(syndiekey && syndiekey.change_voice && connection.frequency == SYND_FREQ)
displayname = syndiekey.fake_name
jobname = "Unknown"
voicemask = TRUE
/* ###### Radio headsets can only broadcast through subspace ###### */
@@ -552,7 +556,7 @@ var/global/list/default_medbay_channels = list(
if(!position || !(position.z in level))
return -1
if(freq in ANTAG_FREQS)
if(!(syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys
if(!(syndiekey))//Checks to see if it's allowed on that frequency, based on the encryption keys
return -1
if(!freq) //recieved on main frequency
if(!listening)
@@ -652,7 +656,6 @@ var/global/list/default_medbay_channels = list(
subspace_transmission = 1
/obj/item/radio/borg/syndicate
syndie = 1
keyslot = new /obj/item/encryptionkey/syndicate
/obj/item/radio/borg/syndicate/CanUseTopic(mob/user, datum/topic_state/state)
@@ -669,6 +672,7 @@ var/global/list/default_medbay_channels = list(
/obj/item/radio/borg/syndicate/New()
..()
syndiekey = keyslot
set_frequency(SYND_FREQ)
/obj/item/radio/borg/deathsquad
@@ -726,32 +730,32 @@ var/global/list/default_medbay_channels = list(
return
/obj/item/radio/borg/proc/recalculateChannels()
src.channels = list()
src.syndie = 0
channels = list()
syndiekey = null
var/mob/living/silicon/robot/D = src.loc
var/mob/living/silicon/robot/D = loc
if(D.module)
for(var/ch_name in D.module.channels)
if(ch_name in src.channels)
if(ch_name in channels)
continue
src.channels += ch_name
src.channels[ch_name] += D.module.channels[ch_name]
channels += ch_name
channels[ch_name] += D.module.channels[ch_name]
if(keyslot)
for(var/ch_name in keyslot.channels)
if(ch_name in src.channels)
if(ch_name in channels)
continue
src.channels += ch_name
src.channels[ch_name] += keyslot.channels[ch_name]
channels += ch_name
channels[ch_name] += keyslot.channels[ch_name]
if(keyslot.syndie)
src.syndie = 1
syndiekey = keyslot
for(var/ch_name in src.channels)
for(var/ch_name in channels)
if(!radio_controller)
sleep(30) // Waiting for the radio_controller to be created.
if(!radio_controller)
src.name = "broken radio"
name = "broken radio"
return
secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
@@ -814,7 +818,7 @@ var/global/list/default_medbay_channels = list(
data["chan_list"] = chanlist
data["chan_list_len"] = chanlist.len
if(syndie)
if(syndiekey)
data["useSyndMode"] = 1
data["has_loudspeaker"] = 1
+3 -2
View File
@@ -228,7 +228,7 @@ REAGENT SCANNER
var/blood_percent = round((H.blood_volume / BLOOD_VOLUME_NORMAL)*100)
var/blood_type = H.b_type
if(blood_id != "blood")//special blood substance
var/datum/reagent/R = chemical_reagents_list[blood_id]
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id]
if(R)
blood_type = R.name
else
@@ -439,7 +439,8 @@ REAGENT SCANNER
icon_state = "spectrometer"
item_state = "analyzer"
w_class = WEIGHT_CLASS_SMALL
flags = CONDUCT | OPENCONTAINER
flags = CONDUCT
container_type = OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
@@ -158,13 +158,13 @@ effective or pretty fucking useless.
var/range = 12
/obj/item/jammer/Destroy()
active_jammers -= src
GLOB.active_jammers -= src
return ..()
/obj/item/jammer/attack_self(mob/user)
to_chat(user,"<span class='notice'>You [active ? "deactivate" : "activate"] the [src].</span>")
active = !active
if(active)
active_jammers |= src
GLOB.active_jammers |= src
else
active_jammers -= src
GLOB.active_jammers -= src