Merge upstream

This commit is contained in:
Cyberboss
2017-04-02 22:27:22 -04:00
165 changed files with 152811 additions and 8563 deletions
@@ -6,7 +6,7 @@
var/list/gibamounts = list() //amount to spawn for each gib decal type we'll spawn.
var/list/gibdirections = list() //of lists of possible directions to spread each gib decal type towards.
/obj/effect/gibspawner/New(location, list/viruses, datum/dna/MobDNA)
/obj/effect/gibspawner/Initialize(mapload, list/viruses, datum/dna/MobDNA)
..()
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
@@ -17,16 +17,16 @@
if(sparks)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, location)
s.set_up(2, 1, loc)
s.start()
for(var/i = 1, i<= gibtypes.len, i++)
if(gibamounts[i])
for(var/j = 1, j<= gibamounts[i], j++)
var/gibType = gibtypes[i]
gib = new gibType(location)
if(istype(location,/mob/living/carbon))
var/mob/living/carbon/digester = location
gib = new gibType(loc)
if(istype(loc,/mob/living/carbon))
var/mob/living/carbon/digester = loc
digester.stomach_contents += gib
if(viruses && viruses.len > 0)
@@ -53,7 +53,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(2,2,1)
/obj/effect/gibspawner/generic/New()
/obj/effect/gibspawner/generic/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 40, 1)
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
..()
@@ -62,7 +62,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/body,/obj/effect/decal/cleanable/blood/gibs/limb,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(1,1,1,1,1,1,1)
/obj/effect/gibspawner/human/New()
/obj/effect/gibspawner/human/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 50, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
..()
@@ -72,7 +72,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core,/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
/obj/effect/gibspawner/humanbodypartless/New()
/obj/effect/gibspawner/humanbodypartless/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 50, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, list())
..()
@@ -82,7 +82,7 @@
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up,/obj/effect/decal/cleanable/xenoblood/xgibs/down,/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core)
gibamounts = list(1,1,1,1,1,1,1)
/obj/effect/gibspawner/xeno/New()
/obj/effect/gibspawner/xeno/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
..()
@@ -93,7 +93,7 @@
gibamounts = list(1, 1, 1, 1, 1, 1)
/obj/effect/gibspawner/xenobodypartless/New()
/obj/effect/gibspawner/xenobodypartless/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, list())
..()
@@ -102,7 +102,7 @@
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body)
gibamounts = list(1, 1, 1, 1)
/obj/effect/gibspawner/larva/New()
/obj/effect/gibspawner/larva/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list(), alldirs)
..()
@@ -111,7 +111,7 @@
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva)
gibamounts = list(1, 1, 1)
/obj/effect/gibspawner/larvabodypartless/New()
/obj/effect/gibspawner/larvabodypartless/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list())
..()
@@ -121,7 +121,7 @@
gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up,/obj/effect/decal/cleanable/robot_debris/down,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris/limb)
gibamounts = list(1,1,1,1,1,1)
/obj/effect/gibspawner/robot/New()
/obj/effect/gibspawner/robot/Initialize()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
gibamounts[6] = pick(0,1,2)
..()
..()
+1 -1
View File
@@ -349,7 +349,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
return 1
return 0
/obj/item/proc/talk_into(mob/M, input, channel, spans)
/obj/item/proc/talk_into(mob/M, input, channel, spans, datum/language/language)
return ITALICS | REDUCE_RANGE
/obj/item/proc/dropped(mob/user)
+15 -13
View File
@@ -29,8 +29,6 @@
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
flags = CONDUCT | HEAR
slot_flags = SLOT_BELT
languages_spoken = HUMAN | ROBOT
languages_understood = HUMAN | ROBOT
throw_speed = 3
throw_range = 7
w_class = WEIGHT_CLASS_SMALL
@@ -190,11 +188,15 @@
recalculateChannels()
. = TRUE
/obj/item/device/radio/talk_into(atom/movable/M, message, channel, list/spans)
INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans)
/obj/item/device/radio/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language)
if(!spans)
spans = M.get_spans()
if(!language)
language = M.get_default_language()
INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans, language)
return ITALICS | REDUCE_RANGE
/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans)
/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language)
if(!on) return // the device has to be on
// Fix for permacell radios, but kinda eh about actually fixing them.
if(!M || !message) return
@@ -322,18 +324,18 @@
"server" = null,
"reject" = 0,
"level" = 0,
"languages" = languages_spoken,
"language" = language,
"spans" = spans,
"verb_say" = M.verb_say,
"verb_ask" = M.verb_ask,
"verb_exclaim" = M.verb_exclaim,
"verb_yell" = M.verb_yell
"verb_yell" = M.verb_yell,
)
signal.frequency = freqnum // Quick frequency set
Broadcast_Message(M, voicemask,
src, message, voice, jobname, real_name,
5, signal.data["compression"], list(position.z, 0), freq, spans,
verb_say, verb_ask, verb_exclaim, verb_yell)
verb_say, verb_ask, verb_exclaim, verb_yell, language)
return
/* ###### Radio headsets can only broadcast through subspace ###### */
@@ -367,7 +369,7 @@
"server" = null, // the last server to log this signal
"reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery
"level" = position.z, // The source's z level
"languages" = M.languages_spoken, //The languages M is talking in.
"language" = language,
"spans" = spans, //the span classes of this message.
"verb_say" = M.verb_say, //the verb used when talking normally
"verb_ask" = M.verb_ask, //the verb used when asking
@@ -417,7 +419,7 @@
"server" = null,
"reject" = 0,
"level" = position.z,
"languages" = languages_spoken,
"language" = language,
"spans" = spans,
"verb_say" = M.verb_say,
"verb_ask" = M.verb_ask,
@@ -440,14 +442,14 @@
Broadcast_Message(M, voicemask,
src, message, voice, jobname, real_name,
filter_type, signal.data["compression"], list(position.z), freq, spans,
verb_say, verb_ask, verb_exclaim, verb_yell)
verb_say, verb_ask, verb_exclaim, verb_yell, language)
/obj/item/device/radio/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans)
/obj/item/device/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans)
if(radio_freq)
return
if(broadcasting)
if(get_dist(src, speaker) <= canhear_range)
talk_into(speaker, raw_message, , spans)
talk_into(speaker, raw_message, , spans, language=message_language)
/*
/obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message)
@@ -6,8 +6,6 @@
w_class = WEIGHT_CLASS_SMALL
flags = HEAR
slot_flags = SLOT_BELT
languages_spoken = ALL //this is a translator, after all.
languages_understood = ALL //this is a translator, after all.
materials = list(MAT_METAL=60, MAT_GLASS=30)
force = 2
throwforce = 0
@@ -15,14 +13,16 @@
var/playing = 0
var/playsleepseconds = 0
var/obj/item/device/tape/mytape
var/starting_tape_type = /obj/item/device/tape/random
var/open_panel = 0
var/canprint = 1
/obj/item/device/taperecorder/New()
mytape = new /obj/item/device/tape/random(src)
update_icon()
/obj/item/device/taperecorder/Initialize(mapload)
..()
if(starting_tape_type)
mytape = new starting_tape_type(src)
update_icon()
/obj/item/device/taperecorder/examine(mob/user)
@@ -229,8 +229,8 @@
//empty tape recorders
/obj/item/device/taperecorder/empty/New()
return
/obj/item/device/taperecorder/empty
starting_tape_type = null
/obj/item/device/tape
@@ -287,4 +287,4 @@
//Random colour tapes
/obj/item/device/tape/random/New()
icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
..()
..()
+2 -2
View File
@@ -1306,9 +1306,9 @@
to_chat(user, "You name the dummy as \"[doll_name]\"")
name = "[initial(name)] - [doll_name]"
/obj/item/toy/dummy/talk_into(atom/movable/M, message, channel, list/spans)
/obj/item/toy/dummy/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language)
log_say("[key_name(M)] : through dummy : [message]")
say(message)
say(message, language)
return NOPASS
/obj/item/toy/dummy/GetVoice()
+11 -7
View File
@@ -135,7 +135,7 @@ update_label("John Doe", "Clowny")
origin_tech = "syndicate=1"
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
/obj/item/weapon/card/id/syndicate/New()
/obj/item/weapon/card/id/syndicate/Initialize()
..()
var/datum/action/item_action/chameleon/change/chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/weapon/card/id
@@ -191,7 +191,7 @@ update_label("John Doe", "Clowny")
registered_name = "Captain"
assignment = "Captain"
/obj/item/weapon/card/id/captains_spare/New()
/obj/item/weapon/card/id/captains_spare/Initialize()
var/datum/job/captain/J = new/datum/job/captain
access = J.get_access()
..()
@@ -203,7 +203,7 @@ update_label("John Doe", "Clowny")
registered_name = "Central Command"
assignment = "General"
/obj/item/weapon/card/id/centcom/New()
/obj/item/weapon/card/id/centcom/Initialize()
access = get_all_centcom_access()
..()
@@ -214,29 +214,33 @@ update_label("John Doe", "Clowny")
registered_name = "Emergency Response Team Commander"
assignment = "Emergency Response Team Commander"
/obj/item/weapon/card/id/ert/New()
/obj/item/weapon/card/id/ert/Initialize()
access = get_all_accesses()+get_ert_access("commander")-access_change_ids
..()
/obj/item/weapon/card/id/ert/Security
registered_name = "Security Response Officer"
assignment = "Security Response Officer"
/obj/item/weapon/card/id/ert/Security/New()
/obj/item/weapon/card/id/ert/Security/Initialize()
access = get_all_accesses()+get_ert_access("sec")-access_change_ids
..()
/obj/item/weapon/card/id/ert/Engineer
registered_name = "Engineer Response Officer"
assignment = "Engineer Response Officer"
/obj/item/weapon/card/id/ert/Engineer/New()
/obj/item/weapon/card/id/ert/Engineer/Initialize()
access = get_all_accesses()+get_ert_access("eng")-access_change_ids
..()
/obj/item/weapon/card/id/ert/Medical
registered_name = "Medical Response Officer"
assignment = "Medical Response Officer"
/obj/item/weapon/card/id/ert/Medical/New()
/obj/item/weapon/card/id/ert/Medical/Initialize()
access = get_all_accesses()+get_ert_access("med")-access_change_ids
..()
/obj/item/weapon/card/id/prisoner
name = "prisoner ID card"
+1 -1
View File
@@ -29,7 +29,7 @@
/obj/item/weapon/melee/baton/throw_impact(atom/hit_atom)
..()
//Only mob/living types have stun handling
if(status && prob(throw_hit_chance) && isliving(hit_atom))
if(status && prob(throw_hit_chance) && iscarbon(hit_atom))
baton_stun(hit_atom)
/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed.
-2
View File
@@ -1,6 +1,4 @@
/obj
languages_spoken = HUMAN
languages_understood = HUMAN
var/crit_fail = FALSE
animate_movement = 2
var/throwforce = 0
+15 -11
View File
@@ -17,15 +17,16 @@
if(mapload)
for(var/obj/item/I in loc.contents)
if(istype(I, gun_category))
I.loc = src
I.forceMove(src)
if(contents.len >= capacity)
break
update_icon()
/obj/structure/guncase/update_icon()
cut_overlays()
for(var/i = contents.len, i >= 1, i--)
add_overlay(image(icon = src.icon, icon_state = "[case_type]", pixel_x = 4 * (i -1) ))
if(case_type && LAZYLEN(contents))
for(var/i in 1 to contents.len)
add_overlay(image(icon = src.icon, icon_state = "[case_type]", pixel_x = 3 * (i - 1) ))
if(open)
add_overlay("[icon_state]_open")
else
@@ -34,14 +35,16 @@
/obj/structure/guncase/attackby(obj/item/I, mob/user, params)
if(iscyborg(user) || isalien(user))
return
if(istype(I, gun_category))
if(contents.len < capacity && open)
if(istype(I, gun_category) && open)
if(LAZYLEN(contents) < capacity)
if(!user.drop_item())
return
contents += I
I.forceMove(src)
to_chat(user, "<span class='notice'>You place [I] in [src].</span>")
update_icon()
return
else
to_chat(user, "<span class='warning'>[src] is full.</span>")
return
else if(user.a_intent != INTENT_HARM)
open = !open
@@ -62,9 +65,10 @@
var/dat = {"<div class='block'>
<h3>Stored Guns</h3>
<table align='center'>"}
for(var/i = contents.len, i >= 1, i--)
var/obj/item/I = contents[i]
dat += "<tr><A href='?src=\ref[src];retrieve=\ref[I]'>[I.name]</A><br>"
if(LAZYLEN(contents))
for(var/i in 1 to contents.len)
var/obj/item/I = contents[i]
dat += "<tr><A href='?src=\ref[src];retrieve=\ref[I]'>[I.name]</A><br>"
dat += "</table></div>"
var/datum/browser/popup = new(user, "gunlocker", "<div align='center'>[name]</div>", 350, 300)
@@ -76,7 +80,7 @@
var/obj/item/O = locate(href_list["retrieve"]) in contents
if(!O || !istype(O))
return
if(!usr.canUseTopic(src))
if(!usr.canUseTopic(src) || !open)
return
if(ishuman(usr))
if(!usr.put_in_hands(O))
+1 -4
View File
@@ -77,13 +77,10 @@
desc = "A catwalk for easier EVA maneuvering and cable placement."
icon = 'icons/obj/smooth_structures/catwalk.dmi'
icon_state = "catwalk"
number_of_rods = 2
smooth = SMOOTH_TRUE
canSmoothWith = null
/obj/structure/lattice/catwalk/Initialize(mapload)
..()
number_of_rods++
/obj/structure/lattice/catwalk/ratvar_act()
new /obj/structure/lattice/catwalk/clockwork(loc)