mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Merge upstream
This commit is contained in:
@@ -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)
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")]"
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
/obj
|
||||
languages_spoken = HUMAN
|
||||
languages_understood = HUMAN
|
||||
var/crit_fail = FALSE
|
||||
animate_movement = 2
|
||||
var/throwforce = 0
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user