Merge pull request #613 from SkyMarshal/master

Map update, CE now knows wire colors, added some old BS12 stuff (AI upload sprite, warning stripes), complete mute can still be adminhelped, removed gooncode in hallucinations, fixed the poweroffline event, fixed Tajspeak, fixed the blob, fixed overdoses
This commit is contained in:
Albert Iordache
2012-03-03 23:55:37 -08:00
24 changed files with 6485 additions and 6303 deletions
+2
View File
@@ -1074,8 +1074,10 @@
#include "code\WorkInProgress\buildmode.dm"
#include "code\WorkInProgress\explosion_particles.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\examine.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\say.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm"
#include "code\WorkInProgress\mapload\dmm_suite.dm"
#include "code\WorkInProgress\mapload\reader.dm"
+48 -20
View File
@@ -83,7 +83,7 @@
return
// Mute disability
if (sdisabilities & 2)
if (disabilities & 64)
return
if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
@@ -116,22 +116,39 @@
var/channel_prefix = copytext(message, 1, 3)
var/list/keys = list(
":r" = "right ear",
":l" = "left ear",
":i" = "intercom",
":h" = "department",
":c" = "Command",
":n" = "Science",
":m" = "Medical",
":e" = "Engineering",
":s" = "Security",
":w" = "whisper",
":b" = "binary",
":a" = "alientalk",
":t" = "Syndicate",
":d" = "Mining",
":q" = "Cargo",
":g" = "changeling",
":r" = "right ear",
":l" = "left ear",
":i" = "intercom",
":h" = "department",
":c" = "Command",
":n" = "Science",
":m" = "Medical",
":e" = "Engineering",
":s" = "Security",
":w" = "whisper",
":b" = "binary",
":a" = "alientalk",
":t" = "Syndicate",
":d" = "Mining",
":q" = "Cargo",
":g" = "changeling",
":R" = "right hand",
":L" = "left hand",
":I" = "intercom",
":H" = "department",
":C" = "Command",
":N" = "Science",
":M" = "Medical",
":E" = "Engineering",
":S" = "Security",
":W" = "whisper",
":B" = "binary",
":A" = "alientalk",
":T" = "Syndicate",
":D" = "Mining",
":Q" = "Cargo",
":G" = "changeling",
//kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
@@ -165,15 +182,15 @@
//work out if we're speaking tajaran or not
var/is_speaking_taj = 0
if(copytext(message, 1, 4) == ":j ")
message = copytext(message, 4)
if(copytext(message, 1, 3) == ":j" || copytext(message, 1, 3) == ":J")
message = copytext(message, 3)
if(taj_talk_understand)
is_speaking_taj = 1
if( !message_mode && (disease_symptoms & DISEASE_WHISPER))
message_mode = "whisper"
if(src.stunned > 0 && (!(traumatic_shock > 61) && prob(50)))
if(src.stunned > 0 || (!(traumatic_shock > 61) && prob(50)))
message_mode = "" //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it
@@ -348,6 +365,10 @@
if (M.client && M.client.ghost_ears)
listening|=M
var/list/eavesdroppers = get_mobs_in_view(7, src)
for(var/mob/M in listening)
eavesdroppers.Remove(M)
for (var/obj/O in ((W | contents)-used_radios))
W |= O
@@ -515,3 +536,10 @@
sleep(11)
del(B)
*/
if (length(eavesdroppers))
for (var/mob/M in eavesdroppers)
M << "\blue [src] speaks into their radio..."
M << speech_bubble
spawn(30) del(speech_bubble)
@@ -22,7 +22,7 @@
var/mob/living/carbon/human/H = src
alt_name = " (as [H.get_visible_name()])"
// Mute disability
if (src.sdisabilities & 2)
if (src.disabilities & 64)
return
if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
+1 -1
View File
@@ -13,7 +13,7 @@
var/datum/reagents/reagents = null
//Detective Work, used for the duplicate data points kept in the scanners
var/atom/original_atom = null
var/atom/movable/original_atom = null
//var/chem_is_open_container = 0
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
+27
View File
@@ -34,6 +34,24 @@
var/blocked = 0 //Player cannot attack/heal while set
/obj/machinery/computer/aistatus
name = "AI Status Panel"
icon = 'mainframe.dmi'
icon_state = "left"
// brightnessred = 0
// brightnessgreen = 2
// brightnessblue = 0
/obj/machinery/computer/aistatus/attack_hand(mob/user as mob)
if(stat & NOPOWER)
user << "\red The status panel has no power!"
return
if(stat & BROKEN)
user << "\red The status panel is broken!"
return
user << "\red I don't understand any of this!"
return
/obj/machinery/computer/aiupload
name = "AI Upload"
desc = "Used to upload laws to the AI."
@@ -42,6 +60,10 @@
var/mob/living/silicon/ai/current = null
var/opened = 0
/obj/machinery/computer/aiupload/mainframe
name = "AI Mainframe Upload"
icon = 'mainframe.dmi'
icon_state = "aimainframe"
/obj/machinery/computer/borgupload
name = "Cyborg Upload"
@@ -50,6 +72,11 @@
circuit = "/obj/item/weapon/circuitboard/borgupload"
var/mob/living/silicon/robot/current = null
/obj/machinery/computer/borgupload/mainframe
name = "Borg Mainframe Upload"
icon = 'mainframe.dmi'
icon_state = "aimainframe"
/obj/machinery/computer/station_alert
name = "Station Alert Computer"
+10
View File
@@ -293,3 +293,13 @@
layer = 2
icon = 'tomatodecal.dmi'
random_icon_states = list("smashed_pie")
/obj/decal/warning_stripes
icon = 'decal_warning_stripes.dmi'
layer = 2
/obj/decal/warning_stripes/New()
..()
loc.overlays += src
del src
+12 -13
View File
@@ -1,18 +1,17 @@
/proc/mini_blob_event()
if(prob(33)) //33% chance of making a blob.
var/turf/T = pick(blobstart)
var/obj/effect/blob/bl = new /obj/effect/blob( T.loc, 30 )
spawn(0)
bl.Life()
bl.Life()
bl.Life()
bl.Life()
bl.blobdebug = 1
bl.Life()
blobevent = 1
spawn(0)
dotheblobbaby()
var/turf/T = pick(blobstart)
var/obj/effect/blob/bl = new /obj/effect/blob( T.loc, 30 )
spawn(0)
bl.Life()
bl.Life()
bl.Life()
bl.Life()
bl.blobdebug = 1
bl.Life()
blobevent = 1
spawn(0)
dotheblobbaby()
spawn(15000)
blobevent = 0
spawn(rand(30, 60)) //Delayed announcements to keep the crew on their toes.
+2 -3
View File
@@ -1,10 +1,9 @@
/datum/event/power_offline
var/list/protected_areas = list(/area/ai_monitored/storage/eva, /area/engine, /area/toxins/xenobiology, /area/turret_protected/ai)
Announce()
for(var/obj/machinery/power/apc/a in world)
if(!a.crit && a.z == 1)
if(a.area in protected_areas)
if(istype(a.area, /area/ai_monitored/storage/eva) || istype(a.area, /area/engine)\
|| istype(a.area, /area/toxins/xenobiology) || istype(a.area, /area/turret_protected/ai))
continue
a.eventoff = 1
a.update()
+18
View File
@@ -18,6 +18,24 @@
H.equip_if_possible(new /obj/item/clothing/head/helmet/hardhat/white(H), H.slot_head)
H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/full(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
var/list/wire_index = list(
"Orange" = 1,
"Dark red" = 2,
"White" = 3,
"Yellow" = 4,
"Red" = 5,
"Blue" = 6,
"Green" = 7,
"Grey" = 8,
"Black" = 9,
"Pink" = 10,
"Brown" = 11,
"Maroon" = 12)
H.mind.store_memory("<b>The door wires are as follows:</b>")
H.mind.store_memory("<b>Power:</b> [wire_index[airlockIndexToWireColor[2]]] and [wire_index[airlockIndexToWireColor[3]]]")
H.mind.store_memory("<b>Backup Power:</b> [wire_index[airlockIndexToWireColor[5]]] and [wire_index[airlockIndexToWireColor[6]]]")
H.mind.store_memory("<b>Door Bolts:</b> [wire_index[airlockIndexToWireColor[4]]]")
H << "\blue You have memorised the important wires for the vessel. Use them wisely."
return 1
+10 -3
View File
@@ -394,6 +394,12 @@
src.attack_hand(usr)
/obj/machinery/turretid/proc/updateTurrets()
if(control_area)
for (var/obj/machinery/turret/aTurret in get_area_all_atoms(control_area))
aTurret.setState(enabled, lethal)
update_icons()
/obj/machinery/turretid/proc/update_icons()
if (src.enabled)
if (src.lethal)
icon_state = "motion1"
@@ -401,10 +407,11 @@
icon_state = "motion3"
else
icon_state = "motion0"
if(control_area)
for (var/obj/machinery/turret/aTurret in get_area_all_atoms(control_area))
aTurret.setState(enabled, lethal)
for (var/obj/machinery/turretid/aTurret in get_area_all_atoms(control_area))
aTurret.icon_state = icon_state
aTurret.enabled = enabled
aTurret.lethal = lethal
+1 -1
View File
@@ -18,7 +18,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space))
M << 'explosionfar.ogg'
if (adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] (<a href=\"byond://?src=%admin_ref%;teleto=\ref[epicenter]\">Jump</a>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
tension_master.explosion()
@@ -58,6 +58,82 @@ AI MODULES
usr << "[src.current.name] selected for law changes."
/*Module Storage Unit/Closet! Solid, only modules fit in it.*/
/obj/structure/aiuploadcloset
name = "AI Mainframe Module Storage Unit"
icon = 'mainframe.dmi'
icon_state = "right-closed"
density = 1
var/open = 0 /*It's closed!*/
/obj/structure/aiuploadcloset/New()
..()
new /obj/item/weapon/aiModule/reset(src)
new /obj/item/weapon/aiModule/purge(src)
new /obj/item/weapon/aiModule/nanotrasen(src)
new /obj/item/weapon/aiModule/paladin(src)
new /obj/item/weapon/aiModule/asimov(src)
new /obj/item/weapon/aiModule/safeguard(src)
new /obj/item/weapon/aiModule/protectStation(src)
new /obj/item/weapon/aiModule/quarantine(src)
new /obj/item/weapon/aiModule/teleporterOffline(src)
new /obj/item/weapon/aiModule/oxygen(src)
new /obj/item/weapon/aiModule/oneHuman(src)
new /obj/item/weapon/aiModule/freeform(src)
for(var/obj/item/weapon/aiModule/M in src)
M.pixel_x = rand(-10, 10)
M.pixel_y = rand(-10, 10)
/obj/structure/aiuploadcloset/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/aiModule))
user.drop_item()
W.loc = get_turf(src)
else
return attack_hand(user)
/obj/structure/aiuploadcloset/attack_hand(mob/user as mob)
if(!open)
var/temp_count
for(var/obj/item/weapon/aiModule/M in src)
M.loc = src.loc
temp_count++
user << "\blue You open the module storage unit, [temp_count > 0 ? "and take out all the modules." : "\red but it's empty!"]"
open = 1
icon_state = "right-open"
else
var/temp_count
for(var/obj/item/weapon/aiModule/M in get_turf(src))
M.loc = src
temp_count++
user << "\blue [temp_count > 0 ? "You put all the modules back into the module storage unit, and then close it." : "You close the module storage unit."]"
open = 0
icon_state = "right-closed"
/obj/structure/aiuploadcloset/ex_act(severity)
switch(severity)
if (1)
for(var/obj/item/weapon/aiModule/M in src)
M.loc = src.loc
M.ex_act(severity)
del(src)
if (2)
if (prob(50))
for(var/obj/item/weapon/aiModule/M in src)
M.loc = src.loc
M.ex_act(severity)
del(src)
if (3)
if (prob(5))
for(var/obj/item/weapon/aiModule/M in src)
M.loc = src.loc
M.ex_act(severity)
del(src)
/obj/item/weapon/aiModule/proc/install(var/obj/machinery/computer/C)
if (istype(C, /obj/machinery/computer/aiupload))
var/obj/machinery/computer/aiupload/comp = C
+1 -1
View File
@@ -343,7 +343,7 @@ FINGERPRINT CARD
if (!istype(usr, /mob/living/silicon))
if (length(src.fingerprints))
if (src.amount > 1)
var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( (ismob(src.loc) ? src.loc.loc : src.loc) )
var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card(get_turf(src))
F.amount = --src.amount
src.amount = 1
src.icon_state = "fingerprint1"
+7 -6
View File
@@ -87,7 +87,7 @@
else
return get_step(start, EAST)
/atom/movable/proc/hit_check()
/atom/movable/proc/hit_check(var/turf/target)
if(src.throwing)
for(var/atom/A in get_turf(src))
if(A == src) continue
@@ -96,7 +96,7 @@
src.throw_impact(A)
src.throwing = 0
if(isobj(A))
if(A.density) // **TODO: Better behaviour for windows
if(A.density && !A.CanPass(src,target)) // **TODO: Better behaviour for windows
// which are dense, but shouldn't always stop movement
src.throw_impact(A)
src.throwing = 0
@@ -150,6 +150,7 @@
dy = SOUTH
var/dist_travelled = 0
var/dist_since_sleep = 0
var/turf/target_turf = get_turf(target)
if(dist_x > dist_y)
var/error = dist_x/2 - dist_y
while(((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf))
@@ -159,7 +160,7 @@
if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge
break
src.Move(step)
hit_check()
hit_check(target_turf)
error += dist_x
dist_travelled++
dist_since_sleep++
@@ -171,7 +172,7 @@
if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge
break
src.Move(step)
hit_check()
hit_check(target_turf)
error -= dist_y
dist_travelled++
dist_since_sleep++
@@ -187,7 +188,7 @@
if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge
break
src.Move(step)
hit_check()
hit_check(target_turf)
error += dist_y
dist_travelled++
dist_since_sleep++
@@ -199,7 +200,7 @@
if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge
break
src.Move(step)
hit_check()
hit_check(target_turf)
error -= dist_x
dist_travelled++
dist_since_sleep++
+1 -1
View File
@@ -476,7 +476,7 @@
M.client.muted_complete = !M.client.muted_complete
log_admin("[key_name(usr)] has [(M.client.muted_complete ? "completely muted" : "voiced (complete)")] [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] has [(M.client.muted_complete ? "completely muted" : "voiced (complete)")] [key_name_admin(M)].", 1)
M << "You have been [(M.client.muted_complete ? "completely muted" : "voiced (complete)")]. You are unable to speak or even adminhelp"
M << "You have been [(M.client.muted_complete ? "completely muted" : "voiced (complete)")]. You are unable to speak."
if (href_list["c_mode"])
if ((src.rank in list( "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
+2 -2
View File
@@ -7,8 +7,8 @@
if (!msg)
return
if (usr.client && usr.client.muted_complete)
return
// if (usr.client && usr.client.muted_complete)
// return
for (var/mob/M in world)
if (M.client && M.client.holder && (M.client.holder.level != -3))
+26 -26
View File
@@ -437,7 +437,7 @@ datum
M.slurring = 0
M.confused = 0
M.jitteriness = 0
if(50 to INFINITY)
if(100 to INFINITY)
M:adjustToxLoss(0.1)
..()
return
@@ -473,8 +473,8 @@ datum
if(prob(10)) step(M, pick(cardinal))
if(prob(7)) M:emote(pick("twitch","drool","moan","giggle"))
holder.remove_reagent(src.id, 0.2)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
if(data >= 100)
M:adjustToxLoss(0.1)
return
serotrotium
@@ -865,8 +865,8 @@ datum
M.mutations = 0
M.disabilities = 0
switch(data)
if(50 to INFINITY)
M:adjustToxLoss(min(((data-50)/10),3))
if(100 to INFINITY)
M:adjustToxLoss(0.2)
..()
return
@@ -1173,8 +1173,8 @@ datum
M.bodytemperature = max(310, M.bodytemperature-20)
else if(M.bodytemperature < 311)
M.bodytemperature = min(310, M.bodytemperature+20)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
if(data >= 100)
M:adjustToxLoss(0.2)
..()
return
@@ -1194,7 +1194,7 @@ datum
M.confused = max(M.confused, 20)
holder.remove_reagent(src.id, 0.2)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
M:adjustToxLoss(0.2)
..()
return
@@ -1230,8 +1230,8 @@ datum
if(!data) data = 1
data++
M:heal_organ_damage(0,2)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
if(data >= 100)
M:adjustToxLoss(0.1)
..()
return
@@ -1249,8 +1249,8 @@ datum
if(!data) data = 1
data++
M:heal_organ_damage(0,3)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
if(data >= 100)
M:adjustToxLoss(0.2)
..()
return
@@ -1270,8 +1270,8 @@ datum
M:adjustOxyLoss(-2)
if(holder.has_reagent("lexorin"))
holder.remove_reagent("lexorin", 2)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
if(data >= 100)
M:adjustToxLoss(0.2)
..()
return
@@ -1292,7 +1292,7 @@ datum
if(holder.has_reagent("lexorin"))
holder.remove_reagent("lexorin", 2)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
M:adjustToxLoss(0.2)
..()
return
@@ -1422,7 +1422,7 @@ datum
if(prob(50)) M:drowsyness = max(M:drowsyness, 3)
if(prob(10)) M:emote("drool")
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
M:adjustToxLoss(0.4)
..()
return
@@ -1437,7 +1437,7 @@ datum
if(!M) M = holder.my_atom
M:radiation = max(M:radiation-3,0)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
M:adjustToxLoss(0.2)
..()
return
@@ -1460,7 +1460,7 @@ datum
M.take_organ_damage(1, 0)
..()
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
M:adjustToxLoss(0.3)
return
alkysine
@@ -1491,8 +1491,8 @@ datum
M:eye_blurry = max(M:eye_blurry-5 , 0)
M:eye_blind = max(M:eye_blind-5 , 0)
M:disabilities &= ~1
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
if(data >= 100)
M:adjustToxLoss(0.2)
..()
return
@@ -1510,8 +1510,8 @@ datum
if(!data) data = 1
data++
M:heal_organ_damage(2,0)
if(data >= 50)
M:adjustToxLoss(0.1)
if(data >= 100)
M:adjustToxLoss(0.2)
..()
return
@@ -1529,7 +1529,7 @@ datum
if(prob(5)) M:emote(pick("twitch","blink_r","shiver"))
holder.remove_reagent(src.id, 0.2)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/5),3))
M:adjustToxLoss(0.2)
..()
return
@@ -1580,8 +1580,8 @@ datum
if(!data) data = 1
data++
holder.remove_reagent(src.id, 0.1)
if(data >= 50)
M:adjustToxLoss(min(((data-50)/10),3))
if(data >= 100)
M:adjustToxLoss(0.1)
return
carpotoxin
@@ -1646,7 +1646,7 @@ datum
if(!data) data = 1
data++
M:hallucination += 5
if(data >= 50)
if(data >= 100)
M:adjustToxLoss(0.1)
..()
return
+4 -5
View File
@@ -243,7 +243,7 @@ proc/check_panel(mob/M)
M << "\red <B>[my_target] flails around wildly.</B>"
my_target.show_message("\red <B>[src] has been attacked by [my_target] </B>", 1) //Lazy.
//src.health -= P.power
src.health -= P.force
return
@@ -256,12 +256,13 @@ proc/check_panel(mob/M)
O << "\red <B>[my_target] stumbles around.</B>"
New()
..()
spawn(300)
if(my_target)
my_target.hallucinations -= src
del(src)
step_away(src,my_target,2)
proccess()
processing_objects.Add(src)
proc/updateimage()
@@ -283,8 +284,7 @@ proc/check_panel(mob/M)
my_target << currentimage
proc/proccess()
if(!my_target) spawn(5) .()
process()
if(src.health < 0)
collapse()
return
@@ -312,7 +312,6 @@ proc/check_panel(mob/M)
if(prob(15))
step_away(src,my_target,2)
spawn(5) .()
proc/collapse()
collapse = 1
@@ -108,11 +108,17 @@ emp_act
location.add_blood(src)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.gloves) H.gloves.add_blood(src)
else H.add_blood(src)
if(H.wear_suit) H.wear_suit.add_blood(src)
else if(H.w_uniform) H.w_uniform.add_blood(src)
if(H.shoes) H.shoes.add_blood(src)
if (H.gloves)
H.gloves.add_blood(H)
H.gloves.transfer_blood = 2
H.gloves.bloody_hands_mob = H
else
H.add_blood(H)
H.bloody_hands = 2
H.bloody_hands_mob = H
switch(hit_area)
if("head")//Harder to score a stun but if you do it lasts a bit longer
+13 -1
View File
@@ -153,7 +153,7 @@
if( !message_mode && (disease_symptoms & DISEASE_WHISPER))
message_mode = "whisper"
if(src.stunned > 0 && (!(traumatic_shock > 61) && prob(50)))
if(src.stunned > 0 || (!(traumatic_shock > 61) && prob(50)))
message_mode = "" //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it
@@ -319,6 +319,7 @@
listening = hearers(message_range, T)
var/list/V = view(message_range, T)
var/list/W = V
//find mobs in lockers, cryo, intellicards, brains, MMIs, and so on.
for (var/mob/M in world)
if (!M.client)
@@ -334,6 +335,10 @@
if (M.client && M.client.ghost_ears)
listening|=M
var/list/eavesdroppers = get_mobs_in_view(7, src)
for(var/mob/M in listening)
eavesdroppers.Remove(M)
for (var/obj/O in ((W | contents)-used_radios))
W |= O
@@ -504,6 +509,13 @@
del(B)
*/
if (length(eavesdroppers))
for (var/mob/M in eavesdroppers)
M << "\blue [src] speaks into their radio..."
M << speech_bubble
spawn(30) del(speech_bubble)
/obj/effect/speech_bubble
+3
View File
@@ -325,6 +325,9 @@ mob/proc
del(T.item_use_icon)
del(T.gun_move_icon)
del(T.gun_run_icon)
T.target_can_move = 0
T.target_can_run = 0
T.target_can_click = 0
if(!targeted_by.len) del targeted_by
spawn(1) update_clothing()
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

+6212 -6217
View File
File diff suppressed because it is too large Load Diff