Merge branch 'master' into upstream-merge-36242

This commit is contained in:
deathride58
2018-03-09 20:38:39 +00:00
committed by GitHub
296 changed files with 5175 additions and 3012 deletions
+3 -3
View File
@@ -193,9 +193,9 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
// Calculate new position (searches through beacons in world)
var/obj/item/device/radio/beacon/chosen
var/obj/item/device/beacon/chosen
var/list/possible = list()
for(var/obj/item/device/radio/beacon/W in GLOB.teleportbeacons)
for(var/obj/item/device/beacon/W in GLOB.teleportbeacons)
possible += W
if(possible.len > 0)
@@ -218,7 +218,7 @@
var/y_distance = TO.y - FROM.y
var/x_distance = TO.x - FROM.x
for (var/atom/movable/A in urange(12, FROM )) // iterate thru list of mobs in the area
if(istype(A, /obj/item/device/radio/beacon))
if(istype(A, /obj/item/device/beacon))
continue // don't teleport beacons because that's just insanely stupid
if(A.anchored)
continue
@@ -4,6 +4,7 @@
var/list/random_icon_states = list()
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
var/beauty = 0
var/mergeable_decal = TRUE //when two of these are on a same tile or do we need to merge them into just one?
/obj/effect/decal/cleanable/Initialize(mapload, list/datum/disease/diseases)
@@ -16,6 +17,7 @@
if(C != src && C.type == src.type && !QDELETED(C))
if (replace_decal(C))
return INITIALIZE_HINT_QDEL
if(LAZYLEN(diseases))
var/list/datum/disease/diseases_to_add = list()
for(var/datum/disease/D in diseases)
@@ -24,6 +26,11 @@
if(LAZYLEN(diseases_to_add))
AddComponent(/datum/component/infective, diseases_to_add)
/obj/effect/decal/cleanable/LateInitialize()
if(src.loc && isturf(src.loc))
var/area/A = get_area(src)
A.beauty += beauty / max(1, A.areasize) //Ensures that the effects scale with room size
/obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal
if(mergeable_decal)
return TRUE
@@ -90,12 +97,9 @@
return bloodiness
else
return 0
<<<<<<< HEAD
=======
/obj/effect/decal/cleanable/Destroy()
. = ..()
if(src.loc && isturf(src.loc))
var/area/A = get_area(src)
A.beauty -= beauty / max(1, A.areasize)
>>>>>>> 0bc8550... Small moodie balance changes (#36242)
@@ -8,6 +8,7 @@
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
bloodiness = MAX_SHOE_BLOODINESS
blood_state = BLOOD_STATE_XENO
beauty = -200
/obj/effect/decal/cleanable/xenoblood/Initialize()
. = ..()
@@ -6,6 +6,7 @@
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
blood_state = BLOOD_STATE_HUMAN
bloodiness = MAX_SHOE_BLOODINESS
beauty = -200
/obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C)
C.add_blood_DNA(return_blood_DNA())
@@ -3,6 +3,7 @@
desc = "Someone should clean that up."
icon = 'icons/obj/objects.dmi'
icon_state = "shards"
beauty = -150
/obj/effect/decal/cleanable/ash
name = "ashes"
@@ -10,6 +11,7 @@
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
mergeable_decal = FALSE
beauty = -150
/obj/effect/decal/cleanable/ash/Initialize()
. = ..()
@@ -24,6 +26,7 @@
/obj/effect/decal/cleanable/ash/large
name = "large pile of ashes"
icon_state = "big_ash"
beauty = -150
/obj/effect/decal/cleanable/ash/large/Initialize()
. = ..()
@@ -34,6 +37,7 @@
desc = "Back to sand."
icon = 'icons/obj/shards.dmi'
icon_state = "tiny"
beauty = -20
/obj/effect/decal/cleanable/glass/Initialize()
. = ..()
@@ -47,17 +51,20 @@
desc = "Someone should clean that up."
icon_state = "dirt"
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
beauty = -150
/obj/effect/decal/cleanable/flour
name = "flour"
desc = "It's still good. Four second rule!"
icon_state = "flour"
beauty = -100
/obj/effect/decal/cleanable/greenglow
name = "glowing goo"
desc = "Jeez. I hope that's not for lunch."
light_color = LIGHT_COLOR_GREEN
icon_state = "greenglow"
beauty = -100
/obj/effect/decal/cleanable/greenglow/Initialize(mapload)
. = ..()
@@ -73,6 +80,7 @@
layer = WALL_OBJ_LAYER
icon_state = "cobweb1"
resistance_flags = FLAMMABLE
beauty = -150
/obj/effect/decal/cleanable/cobweb/cobweb2
icon_state = "cobweb2"
@@ -84,10 +92,12 @@
icon = 'icons/effects/effects.dmi'
icon_state = "molten"
mergeable_decal = FALSE
beauty = -250
/obj/effect/decal/cleanable/molten_object/large
name = "big gooey grey mass"
icon_state = "big_molten"
beauty = -200
//Vomit (sorry)
/obj/effect/decal/cleanable/vomit
@@ -96,6 +106,7 @@
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
beauty = -400
/obj/effect/decal/cleanable/vomit/attack_hand(mob/user)
if(ishuman(user))
@@ -127,12 +138,14 @@
gender = NEUTER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
beauty = -125
/obj/effect/decal/cleanable/plant_smudge
name = "plant smudge"
gender = NEUTER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_plant")
beauty = -125
/obj/effect/decal/cleanable/egg_smudge
name = "smashed egg"
@@ -140,6 +153,7 @@
gender = NEUTER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
beauty = -125
/obj/effect/decal/cleanable/pie_smudge //honk
name = "smashed pie"
@@ -147,6 +161,7 @@
gender = NEUTER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_pie")
beauty = -125
/obj/effect/decal/cleanable/chem_pile
name = "chemical pile"
@@ -154,6 +169,7 @@
gender = NEUTER
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
beauty = -125
/obj/effect/decal/cleanable/shreds
name = "shreds"
@@ -161,6 +177,7 @@
icon_state = "shreds"
gender = PLURAL
mergeable_decal = FALSE
beauty = -125
/obj/effect/decal/cleanable/shreds/ex_act(severity, target)
if(severity == 1) //so shreds created during an explosion aren't deleted by the explosion.
@@ -177,12 +194,14 @@
icon = 'icons/effects/tomatodecal.dmi'
icon_state = "salt_pile"
gender = NEUTER
beauty = -125
/obj/effect/decal/cleanable/glitter
name = "generic glitter pile"
desc = "The herpes of arts and crafts."
icon = 'icons/effects/tile_effects.dmi'
gender = NEUTER
beauty = 300
/obj/effect/decal/cleanable/glitter/pink
name = "pink glitter"
@@ -200,4 +219,5 @@
name = "stabilized plasma"
desc = "A puddle of stabilized plasma."
icon_state = "flour"
color = "#C8A5DC"
color = "#C8A5DC"
beauty = -200
@@ -10,6 +10,7 @@
blood_state = BLOOD_STATE_OIL
bloodiness = MAX_SHOE_BLOODINESS
mergeable_decal = FALSE
beauty = -200
/obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions)
set waitfor = 0
@@ -46,6 +47,7 @@
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
blood_state = BLOOD_STATE_OIL
bloodiness = MAX_SHOE_BLOODINESS
beauty = -125
/obj/effect/decal/cleanable/oil/Initialize()
. = ..()
@@ -57,4 +59,4 @@
/obj/effect/decal/cleanable/oil/slippery
/obj/effect/decal/cleanable/oil/slippery/Initialize()
AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE))
AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE))
+1 -1
View File
@@ -30,4 +30,4 @@
/obj/effect/decal/cleanable/robot_debris/old
name = "dusty robot debris"
desc = "Looks like nobody has touched this in a while."
desc = "Looks like nobody has touched this in a while."
+1 -1
View File
@@ -22,7 +22,7 @@
/obj/item/reagent_containers/food/snacks/egg)
/obj/effect/spawner/bundle/costume/gladiator
name = "gladitator costume spawner"
name = "gladiator costume spawner"
items = list(
/obj/item/clothing/under/gladiator,
/obj/item/clothing/head/helmet/gladiator)
+4
View File
@@ -531,6 +531,10 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
else
M.take_bodypart_damage(7)
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
if(mood)
mood.add_event("eye_stab", /datum/mood_event/eye_stab)
add_logs(user, M, "attacked", "[src.name]", "(INTENT: [uppertext(user.a_intent)])")
M.adjust_blurriness(3)
+1
View File
@@ -191,6 +191,7 @@
FD.CalculateAffectingAreas()
to_chat(usr, "<span class='notice'>You rename the '[prevname]' to '[str]'.</span>")
log_game("[key_name(usr)] has renamed [prevname] to [str]")
A.update_area_size()
interact()
return 1
+3
View File
@@ -549,6 +549,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? "r_hand" : "l_hand"
user.apply_damage(5, BURN, hitzone)
user.visible_message("<span class='warning'>After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn their finger in the process.</span>", "<span class='warning'>You burn yourself while lighting the lighter!</span>")
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
if(mood)
mood.add_event("burnt_thumb", /datum/mood_event/burnt_thumb)
else
set_lit(FALSE)
@@ -547,7 +547,6 @@
/obj/item/circuitboard/machine/tesla_coil/Initialize()
. = ..()
if(build_path)
name = "Tesla Coil (Machine Board)"
build_path = PATH_POWERCOIL
/obj/item/circuitboard/machine/tesla_coil/attackby(obj/item/I, mob/user, params)
@@ -666,7 +665,7 @@
/obj/item/circuitboard/machine/circuit_imprinter
name = "Circuit Imprinter (Machine Board)"
build_path = /obj/machinery/rnd/circuit_imprinter
build_path = /obj/machinery/rnd/production/circuit_imprinter
req_components = list(
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
@@ -674,11 +673,11 @@
/obj/item/circuitboard/machine/circuit_imprinter/department
name = "Departmental Circuit Imprinter (Machine Board)"
build_path = /obj/machinery/rnd/circuit_imprinter/department
build_path = /obj/machinery/rnd/production/circuit_imprinter/department
/obj/item/circuitboard/machine/circuit_imprinter/department/science
name = "Departmental Circuit Imprinter - Science (Machine Board)"
build_path = /obj/machinery/rnd/circuit_imprinter/department/science
build_path = /obj/machinery/rnd/production/circuit_imprinter/department/science
/obj/item/circuitboard/machine/destructive_analyzer
name = "Destructive Analyzer (Machine Board)"
@@ -698,7 +697,7 @@
/obj/item/circuitboard/machine/protolathe
name = "Protolathe (Machine Board)"
build_path = /obj/machinery/rnd/protolathe
build_path = /obj/machinery/rnd/production/protolathe
req_components = list(
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 2,
@@ -706,31 +705,67 @@
/obj/item/circuitboard/machine/protolathe/department
name = "Departmental Protolathe (Machine Board)"
build_path = /obj/machinery/rnd/protolathe/department
build_path = /obj/machinery/rnd/production/protolathe/department
/obj/item/circuitboard/machine/protolathe/department/cargo
name = "Departmental Protolathe (Machine Board) - Cargo"
build_path = /obj/machinery/rnd/protolathe/department/cargo
build_path = /obj/machinery/rnd/production/protolathe/department/cargo
/obj/item/circuitboard/machine/protolathe/department/engineering
name = "Departmental Protolathe (Machine Board) - Engineering"
build_path = /obj/machinery/rnd/protolathe/department/engineering
build_path = /obj/machinery/rnd/production/protolathe/department/engineering
/obj/item/circuitboard/machine/protolathe/department/medical
name = "Departmental Protolathe (Machine Board) - Medical"
build_path = /obj/machinery/rnd/protolathe/department/medical
build_path = /obj/machinery/rnd/production/protolathe/department/medical
/obj/item/circuitboard/machine/protolathe/department/science
name = "Departmental Protolathe (Machine Board) - Science"
build_path = /obj/machinery/rnd/protolathe/department/science
build_path = /obj/machinery/rnd/production/protolathe/department/science
/obj/item/circuitboard/machine/protolathe/department/security
name = "Departmental Protolathe (Machine Board) - Security"
build_path = /obj/machinery/rnd/protolathe/department/security
build_path = /obj/machinery/rnd/production/protolathe/department/security
/obj/item/circuitboard/machine/protolathe/department/service
name = "Departmental Protolathe - Service (Machine Board)"
build_path = /obj/machinery/rnd/protolathe/department/service
build_path = /obj/machinery/rnd/production/protolathe/department/service
/obj/item/circuitboard/machine/techfab
name = "\improper Techfab (Machine Board)"
build_path = /obj/machinery/rnd/production/techfab
req_components = list(
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/reagent_containers/glass/beaker = 2)
/obj/item/circuitboard/machine/techfab/department
name = "\improper Departmental Techfab (Machine Board)"
build_path = /obj/machinery/rnd/production/techfab/department
/obj/item/circuitboard/machine/techfab/department/cargo
name = "\improper Departmental Techfab (Machine Board) - Cargo"
build_path = /obj/machinery/rnd/production/techfab/department/cargo
/obj/item/circuitboard/machine/techfab/department/engineering
name = "\improper Departmental Techfab (Machine Board) - Engineering"
build_path = /obj/machinery/rnd/production/techfab/department/engineering
/obj/item/circuitboard/machine/techfab/department/medical
name = "\improper Departmental Techfab (Machine Board) - Medical"
build_path = /obj/machinery/rnd/production/techfab/department/medical
/obj/item/circuitboard/machine/techfab/department/science
name = "\improper Departmental Techfab (Machine Board) - Science"
build_path = /obj/machinery/rnd/production/techfab/department/science
/obj/item/circuitboard/machine/techfab/department/security
name = "\improper Departmental Techfab (Machine Board) - Security"
build_path = /obj/machinery/rnd/production/techfab/department/security
/obj/item/circuitboard/machine/techfab/department/service
name = "\improper Departmental Techfab - Service (Machine Board)"
build_path = /obj/machinery/rnd/production/techfab/department/service
/obj/item/circuitboard/machine/rdserver
name = "R&D Server (Machine Board)"
+5
View File
@@ -116,6 +116,11 @@
. = ..()
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
/obj/item/weapon/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
if(mood)
mood.add_event("honk", /datum/mood_event/honk)
/obj/item/bikehorn/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(src, 'sound/items/bikehorn.ogg', 50, 1)
+28 -33
View File
@@ -13,12 +13,12 @@
w_class = WEIGHT_CLASS_TINY
var/mode = WAND_OPEN
var/region_access = 1 //See access.dm
var/obj/item/card/id/ID
var/list/access_list
/obj/item/door_remote/New()
..()
ID = new /obj/item/card/id
ID.access = get_region_accesses(region_access)
/obj/item/door_remote/Initialize()
. = ..()
access_list = get_region_accesses(region_access)
AddComponent(/datum/component/ntnet_interface)
/obj/item/door_remote/attack_self(mob/user)
switch(mode)
@@ -30,35 +30,30 @@
mode = WAND_OPEN
to_chat(user, "Now in mode: [mode].")
/obj/item/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user)
if(!istype(D))
// Airlock remote works by sending NTNet packets to whatever it's pointed at.
/obj/item/door_remote/afterattack(atom/A, mob/user)
GET_COMPONENT_FROM(target_interface, /datum/component/ntnet_interface, A)
if(!target_interface)
return
if(!(D.hasPower()))
to_chat(user, "<span class='danger'>[D] has no power!</span>")
return
if(!D.requiresID())
to_chat(user, "<span class='danger'>[D]'s ID scan is disabled!</span>")
return
if(D.check_access(ID) && D.canAIControl(user))
switch(mode)
if(WAND_OPEN)
if(D.density)
D.open()
else
D.close()
if(WAND_BOLT)
if(D.locked)
D.unbolt()
else
D.bolt()
if(WAND_EMERGENCY)
if(D.emergency)
D.emergency = FALSE
else
D.emergency = TRUE
D.update_icon()
else
to_chat(user, "<span class='danger'>[src] does not have access to this door.</span>")
// Generate a control packet.
var/datum/netdata/data = new
data.recipient_ids = list(target_interface.hardware_id)
switch(mode)
if(WAND_OPEN)
data.plaintext_data = "open"
if(WAND_BOLT)
data.plaintext_data = "bolt"
if(WAND_EMERGENCY)
data.plaintext_data = "emergency"
data.plaintext_data_secondary = "toggle"
data.passkey = access_list
ntnet_send(data)
/obj/item/door_remote/omni
name = "omni door remote"
+1 -1
View File
@@ -648,4 +648,4 @@
item_state = "defibpaddles0"
req_defib = FALSE
#undef HALFWAYCRITDEATH
#undef HALFWAYCRITDEATH
+44
View File
@@ -0,0 +1,44 @@
/obj/item/device/beacon
name = "\improper tracking beacon"
desc = "A beacon used by a teleporter."
icon = 'icons/obj/device.dmi'
icon_state = "beacon"
item_state = "beacon"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
var/enabled = TRUE
var/renamed = FALSE
/obj/item/device/beacon/Initialize()
. = ..()
if (enabled)
GLOB.teleportbeacons += src
else
icon_state = "beacon-off"
/obj/item/device/beacon/Destroy()
GLOB.teleportbeacons.Remove(src)
return ..()
/obj/item/device/beacon/attack_self(mob/user)
enabled = !enabled
if (enabled)
icon_state = "beacon"
GLOB.teleportbeacons += src
else
icon_state = "beacon-off"
GLOB.teleportbeacons.Remove(src)
to_chat(user, "<span class='notice'>You [enabled ? "enable" : "disable"] the beacon.</span>")
return
/obj/item/device/beacon/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/pen)) // needed for things that use custom names like the locator
var/new_name = stripped_input(user, "What would you like the name to be?")
if(!user.canUseTopic(src, BE_CLOSE))
return
if(new_name)
name = new_name
renamed = TRUE
return
else
return ..()
@@ -1,32 +0,0 @@
/obj/item/device/radio/beacon
name = "tracking beacon"
desc = "A beacon used by a teleporter."
icon_state = "beacon"
item_state = "beacon"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
var/code = "electronic"
dog_fashion = null
/obj/item/device/radio/beacon/Initialize()
. = ..()
GLOB.teleportbeacons += src
/obj/item/device/radio/beacon/Destroy()
GLOB.teleportbeacons.Remove(src)
return ..()
/obj/item/device/radio/beacon/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode)
return
/obj/item/device/radio/beacon/verb/alter_signal(t as text)
set name = "Alter Beacon's Signal"
set category = "Object"
set src in usr
if ((usr.canmove && !( usr.restrained() )))
src.code = t
if (!( src.code ))
src.code = "beacon"
src.add_fingerprint(usr)
return
-1
View File
@@ -1,4 +1,3 @@
//CREATOR'S NOTE: DO NOT FUCKING GIVE THIS TO BOTANY!
/obj/item/hot_potato
name = "hot potato"
+3
View File
@@ -96,6 +96,9 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
H.visible_message("<span class='notice'>[user] heals [H] with the power of [deity_name]!</span>")
to_chat(H, "<span class='boldnotice'>May the power of [deity_name] compel you to be healed!</span>")
playsound(src.loc, "punch", 25, 1, -1)
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood)
mood.add_event("blessing", /datum/mood_event/blessing)
return 1
/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
+8
View File
@@ -192,6 +192,14 @@
for(var/i in 1 to 7)
new /obj/item/reagent_containers/glass/beaker( src )
/obj/item/storage/box/medsprays
name = "box of medical sprayers"
desc = "A box full of medical sprayers, with unscrewable caps and precision spray heads."
/obj/item/storage/box/medsprays/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/medspray( src )
/obj/item/storage/box/injectors
name = "box of DNA injectors"
desc = "This box contains injectors, it seems."
+25 -38
View File
@@ -17,9 +17,6 @@
icon = 'icons/obj/device.dmi'
icon_state = "locator"
var/temp = null
var/frequency = FREQ_LOCATOR_IMPLANT
var/broadcasting = null
var/listening = 1
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_SMALL
item_state = "electronic"
@@ -32,17 +29,11 @@
/obj/item/locator/attack_self(mob/user)
user.set_machine(src)
var/dat
if (src.temp)
dat = "[src.temp]<BR><BR><A href='byond://?src=[REF(src)];temp=1'>Clear</A>"
if (temp)
dat = "[temp]<BR><BR><A href='byond://?src=[REF(src)];temp=1'>Clear</A>"
else
dat = {"
<B>Persistent Signal Locator</B><HR>
Frequency:
<A href='byond://?src=[REF(src)];freq=-10'>-</A>
<A href='byond://?src=[REF(src)];freq=-2'>-</A> [format_frequency(src.frequency)]
<A href='byond://?src=[REF(src)];freq=2'>+</A>
<A href='byond://?src=[REF(src)];freq=10'>+</A><BR>
<A href='?src=[REF(src)];refresh=1'>Refresh</A>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
@@ -59,30 +50,30 @@ Frequency:
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)))
usr.set_machine(src)
if (href_list["refresh"])
src.temp = "<B>Persistent Signal Locator</B><HR>"
temp = "<B>Persistent Signal Locator</B><HR>"
var/turf/sr = get_turf(src)
if (sr)
src.temp += "<B>Located Beacons:</B><BR>"
for(var/obj/item/device/radio/beacon/W in GLOB.teleportbeacons)
if (W.frequency == src.frequency)
var/turf/tr = get_turf(W)
if (tr.z == sr.z && tr)
var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y))
if (direct < 5)
direct = "very strong"
temp += "<B>Beacon Signals:</B><BR>"
for(var/obj/item/device/beacon/W in GLOB.teleportbeacons)
if (!W.renamed)
continue
var/turf/tr = get_turf(W)
if (tr.z == sr.z && tr)
var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y))
if (direct < 5)
direct = "very strong"
else
if (direct < 10)
direct = "strong"
else
if (direct < 10)
direct = "strong"
if (direct < 20)
direct = "weak"
else
if (direct < 20)
direct = "weak"
else
direct = "very weak"
src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
direct = "very weak"
temp += "[W.name]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
src.temp += "<B>Extranneous Signals:</B><BR>"
temp += "<B>Implant Signals:</B><BR>"
for (var/obj/item/implant/tracking/W in GLOB.tracked_implants)
if (!W.imp_in || !isliving(W.loc))
continue
@@ -103,18 +94,14 @@ Frequency:
direct = "strong"
else
direct = "weak"
src.temp += "[W.imp_in.name]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
temp += "[W.imp_in.name]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
src.temp += "<B>You are at \[[sr.x],[sr.y],[sr.z]\]</B> in orbital coordinates.<BR><BR><A href='byond://?src=[REF(src)];refresh=1'>Refresh</A><BR>"
temp += "<B>You are at \[[sr.x],[sr.y],[sr.z]\]</B> in orbital coordinates.<BR><BR><A href='byond://?src=[REF(src)];refresh=1'>Refresh</A><BR>"
else
src.temp += "<B><FONT color='red'>Processing Error:</FONT></B> Unable to locate orbital position.<BR>"
temp += "<B><FONT color='red'>Processing Error:</FONT></B> Unable to locate orbital position.<BR>"
else
if (href_list["freq"])
src.frequency += text2num(href_list["freq"])
src.frequency = sanitize_frequency(src.frequency)
else
if (href_list["temp"])
src.temp = null
if (href_list["temp"])
temp = null
if (ismob(src.loc))
attack_self(src.loc)
else
+2 -2
View File
@@ -357,5 +357,5 @@
if(get_fuel() < max_fuel && nextrefueltick < world.time)
nextrefueltick = world.time + 10
reagents.add_reagent("welding_fuel", 1)
#undef WELDER_FUEL_BURN_INTERVAL
#undef WELDER_FUEL_BURN_INTERVAL
+3 -1
View File
@@ -42,6 +42,7 @@
icon_state = "waterballoon-e"
item_state = "balloon-empty"
/obj/item/toy/balloon/New()
create_reagents(10)
..()
@@ -286,6 +287,7 @@
w_class = WEIGHT_CLASS_SMALL
resistance_flags = FLAMMABLE
/obj/item/toy/windupToolbox
name = "windup toolbox"
desc = "A replica toolbox that rumbles when you turn the key."
@@ -332,7 +334,7 @@
/obj/item/toy/katana
name = "replica katana"
desc = "Woefully underpowered in D20. Almost has a sharp edge."
desc = "Woefully underpowered in D20."
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "katana"
item_state = "katana"
+5
View File
@@ -22,6 +22,11 @@
var/current_skin //Has the item been reskinned?
var/list/unique_reskin //List of options to reskin.
// Access levels, used in modules\jobs\access.dm
var/list/req_access
var/req_access_txt = "0"
var/list/req_one_access
var/req_one_access_txt = "0"
/obj/vv_edit_var(vname, vval)
@@ -62,4 +62,4 @@
new /obj/item/gun/energy/laser/bluetag(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/bluetag(src)
new /obj/item/clothing/head/helmet/bluetaghelm(src)
new /obj/item/clothing/head/helmet/bluetaghelm(src)
@@ -18,4 +18,4 @@
new /obj/item/clothing/head/soft(src)
new /obj/item/device/export_scanner(src)
new /obj/item/door_remote/quartermaster(src)
new /obj/item/circuitboard/machine/protolathe/department/cargo(src)
new /obj/item/circuitboard/machine/techfab/department/cargo(src)
@@ -27,7 +27,7 @@
new /obj/item/door_remote/chief_engineer(src)
new /obj/item/pipe_dispenser(src)
new /obj/item/inducer(src)
new /obj/item/circuitboard/machine/protolathe/department/engineering(src)
new /obj/item/circuitboard/machine/techfab/department/engineering(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
@@ -75,7 +75,7 @@
new /obj/item/clothing/neck/petcollar(src)
new /obj/item/pet_carrier(src)
new /obj/item/wallframe/defib_mount(src)
new /obj/item/circuitboard/machine/protolathe/department/medical(src)
new /obj/item/circuitboard/machine/techfab/department/medical(src)
/obj/structure/closet/secure_closet/animal
name = "animal control"
@@ -96,3 +96,5 @@
..()
new /obj/item/storage/box/pillbottles(src)
new /obj/item/storage/box/pillbottles(src)
new /obj/item/storage/box/medsprays(src)
new /obj/item/storage/box/medsprays(src)
@@ -25,4 +25,4 @@
new /obj/item/device/laser_pointer(src)
new /obj/item/door_remote/research_director(src)
new /obj/item/storage/box/firingpins(src)
new /obj/item/circuitboard/machine/protolathe/department/science(src)
new /obj/item/circuitboard/machine/techfab/department/science(src)
@@ -57,7 +57,7 @@
new /obj/item/clothing/neck/petcollar(src)
new /obj/item/pet_carrier(src)
new /obj/item/door_remote/civillian(src)
new /obj/item/circuitboard/machine/protolathe/department/service(src)
new /obj/item/circuitboard/machine/techfab/department/service(src)
/obj/structure/closet/secure_closet/hos
name = "\proper head of security's locker"
@@ -89,7 +89,7 @@
new /obj/item/gun/energy/e_gun/hos(src)
new /obj/item/device/flashlight/seclite(src)
new /obj/item/pinpointer/nuke(src)
new /obj/item/circuitboard/machine/protolathe/department/security(src)
new /obj/item/circuitboard/machine/techfab/department/security(src)
/obj/structure/closet/secure_closet/warden
name = "\proper warden's locker"
+12 -10
View File
@@ -15,9 +15,17 @@
var/openable = TRUE
var/obj/item/electronics/airlock/electronics
var/start_showpiece_type = null //add type for items on display
var/list/start_showpieces = list() //Takes sublists in the form of list("type" = /obj/item/bikehorn, "trophy_message" = "henk")
var/trophy_message = ""
/obj/structure/displaycase/Initialize()
. = ..()
if(start_showpieces.len && !start_showpiece_type)
var/list/showpiece_entry = pick(start_showpieces)
if (showpiece_entry && showpiece_entry["type"])
start_showpiece_type = showpiece_entry["type"]
if (showpiece_entry["trophy_message"])
trophy_message = showpiece_entry["trophy_message"]
if(start_showpiece_type)
showpiece = new start_showpiece_type (src)
update_icon()
@@ -35,6 +43,9 @@
to_chat(user, "<span class='notice'>Hooked up with an anti-theft system.</span>")
if(showpiece)
to_chat(user, "<span class='notice'>There's [showpiece] inside.</span>")
if(trophy_message)
to_chat(user, "The plaque reads:")
to_chat(user, trophy_message)
/obj/structure/displaycase/proc/dump()
@@ -213,7 +224,7 @@
//The captains display case requiring specops ID access is intentional.
//The lab cage and captains display case do not spawn with electronics, which is why req_access is needed.
/obj/structure/displaycase/captain
alert = 1
alert = TRUE
start_showpiece_type = /obj/item/gun/energy/laser/captain
req_access = list(ACCESS_CENT_SPECOPS)
@@ -223,12 +234,9 @@
start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr
req_access = list(ACCESS_RD)
/obj/structure/displaycase/trophy
name = "trophy display case"
desc = "Store your trophies of accomplishment in here, and they will stay forever."
var/trophy_message = ""
var/placer_key = ""
var/added_roundstart = TRUE
var/is_locked = TRUE
@@ -245,12 +253,6 @@
GLOB.trophy_cases -= src
return ..()
/obj/structure/displaycase/trophy/examine(mob/user)
..()
if(trophy_message)
to_chat(user, "The plaque reads:")
to_chat(user, trophy_message)
/obj/structure/displaycase/trophy/attackby(obj/item/W, mob/user, params)
if(!user.Adjacent(src)) //no TK museology
+1 -1
View File
@@ -90,7 +90,7 @@
name = "magic mirror"
desc = "Turn and face the strange... face."
icon_state = "magic_mirror"
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth")
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush")
var/list/choosable_races = list()
/obj/structure/mirror/magic/New()
+14 -43
View File
@@ -1,6 +1,3 @@
/obj/structure/statue
name = "statue"
desc = "Placeholder. Yell at Firecage if you SOMEHOW see this."
@@ -16,47 +13,21 @@
/obj/structure/statue/attackby(obj/item/W, mob/living/user, params)
add_fingerprint(user)
user.changeNext_move(CLICK_CD_MELEE)
if(istype(W, /obj/item/wrench))
if(anchored)
user.visible_message("[user] is loosening the [name]'s bolts.", \
"<span class='notice'>You are loosening the [name]'s bolts...</span>")
if(W.use_tool(src, user, 40, volume=100))
if(!anchored)
return
user.visible_message("[user] loosened the [name]'s bolts!", \
"<span class='notice'>You loosen the [name]'s bolts!</span>")
anchored = FALSE
else
if(!isfloorturf(src.loc))
user.visible_message("<span class='warning'>A floor must be present to secure the [name]!</span>")
return
user.visible_message("[user] is securing the [name]'s bolts...", \
"<span class='notice'>You are securing the [name]'s bolts...</span>")
if(W.use_tool(src, user, 40, volume=100))
if(anchored)
return
user.visible_message("[user] has secured the [name]'s bolts.", \
"<span class='notice'>You have secured the [name]'s bolts.</span>")
anchored = TRUE
if(!(flags_1 & NODECONSTRUCT_1))
if(default_unfasten_wrench(user, W))
return
if(istype(W, /obj/item/weldingtool) || istype(W, /obj/item/gun/energy/plasmacutter))
if(!W.tool_start_check(user, amount=0))
return FALSE
else if(istype(W, /obj/item/pickaxe/drill/jackhammer))
user.visible_message("[user] destroys the [name]!",
"<span class='notice'>You destroy the [name].</span>")
W.play_tool_sound(src)
qdel(src)
else if(istype(W, /obj/item/weldingtool) || istype(W, /obj/item/gun/energy/plasmacutter))
if(!W.tool_start_check(user, amount=0))
return FALSE
user.visible_message("[user] is slicing apart the [name].", \
"<span class='notice'>You are slicing apart the [name]...</span>")
if(W.use_tool(src, user, 40, volume=50))
user.visible_message("[user] slices apart the [name].", \
"<span class='notice'>You slice apart the [name]!</span>")
deconstruct(TRUE)
else
return ..()
user.visible_message("[user] is slicing apart the [name].", \
"<span class='notice'>You are slicing apart the [name]...</span>")
if(W.use_tool(src, user, 40, volume=50))
user.visible_message("[user] slices apart the [name].", \
"<span class='notice'>You slice apart the [name]!</span>")
deconstruct(TRUE)
return
return ..()
/obj/structure/statue/attack_hand(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
+11 -1
View File
@@ -95,7 +95,17 @@
pushed_mob.visible_message("<span class='danger'>[user] pushes [pushed_mob] onto [src].</span>", \
"<span class='userdanger'>[user] pushes [pushed_mob] onto [src].</span>")
add_logs(user, pushed_mob, "pushed")
if(!ishuman(pushed_mob))
return
var/mob/living/carbon/human/H = pushed_mob
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood)
if(iscatperson(H)) //Catpeople are a bit dumb and think its fun to be on a table
mood.add_event("table", /datum/mood_event/happytable)
H.startTailWag()
addtimer(CALLBACK(H, /mob/living/carbon/human.proc/endTailWag), 30)
else
mood.add_event("table", /datum/mood_event/table)
/obj/structure/table/attackby(obj/item/I, mob/user, params)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -335,6 +335,9 @@
L.ExtinguishMob()
L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily
L.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
GET_COMPONENT_FROM(mood, /datum/component/mood, L)
if(mood)
mood.add_event("shower", /datum/mood_event/nice_shower)
if(iscarbon(L))
var/mob/living/carbon/M = L
. = TRUE