Merge remote-tracking branch 'upstream/master' into dev-freeze

Conflicts:
	code/game/objects/structures/crates_lockers/largecrate.dm
	code/modules/mob/living/carbon/human/life.dm
	code/modules/mob/living/silicon/ai/ai.dm
	code/modules/research/circuitprinter.dm
This commit is contained in:
PsiOmega
2015-08-15 10:52:17 +02:00
24 changed files with 47 additions and 23 deletions

View File

@@ -163,14 +163,13 @@
command_announcement.Announce(fulltext) command_announcement.Announce(fulltext)
// Proc: get_unhacked_apcs() // Proc: get_all_apcs()
// Parameters: None // Parameters: None
// Description: Returns a list of APCs that are not yet hacked. // Description: Returns a list of all APCs
/proc/get_unhacked_apcs() /proc/get_all_apcs()
var/list/H = list() var/list/H = list()
for(var/obj/machinery/power/apc/A in machines) for(var/obj/machinery/power/apc/A in machines)
if(!A.hacker) H.Add(A)
H.Add(A)
return H return H

View File

@@ -38,7 +38,7 @@
// END RESEARCH DATUMS // END RESEARCH DATUMS
// BEGIN ABILITY VERBS // BEGIN ABILITY VERBS
/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_unhacked_apcs()) /datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_all_apcs())
set category = "Software" set category = "Software"
set name = "Basic Encryption Hack" set name = "Basic Encryption Hack"
set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station." set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station."

View File

@@ -14,6 +14,7 @@ var/global/list/cached_icons = list()
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
possible_transfer_amounts = list(10,20,30,60) possible_transfer_amounts = list(10,20,30,60)
volume = 60 volume = 60
unacidable = 0
flags = OPENCONTAINER flags = OPENCONTAINER
var/paint_type = "red" var/paint_type = "red"

View File

@@ -14,7 +14,7 @@
new /obj/item/stack/material/wood(src) new /obj/item/stack/material/wood(src)
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
for(var/atom/movable/AM in contents) for(var/atom/movable/AM in contents)
if(AM.simulated) AM.loc = T if(AM.simulated) AM.forceMove(T)
user.visible_message("<span class='notice'>[user] pries \the [src] open.</span>", \ user.visible_message("<span class='notice'>[user] pries \the [src] open.</span>", \
"<span class='notice'>You pry open \the [src].</span>", \ "<span class='notice'>You pry open \the [src].</span>", \
"<span class='notice'>You hear splitting wood.</span>") "<span class='notice'>You hear splitting wood.</span>")

View File

@@ -401,8 +401,10 @@ var/list/admin_verbs_mentor = list(
var/mob/body = mob var/mob/body = mob
var/mob/dead/observer/ghost = body.ghostize(1) var/mob/dead/observer/ghost = body.ghostize(1)
ghost.admin_ghosted = 1 ghost.admin_ghosted = 1
if(body && !body.key) if(body)
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus body.aghosted = ghost
if(!body.key)
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -24,6 +24,7 @@
volume = 5 volume = 5
can_be_placed_into = null can_be_placed_into = null
flags = OPENCONTAINER | NOBLUDGEON flags = OPENCONTAINER | NOBLUDGEON
unacidable = 0
/obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob) /obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob)
return return

View File

@@ -216,6 +216,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return return
mind.current.ajourn=0 mind.current.ajourn=0
mind.current.key = key mind.current.key = key
mind.current.aghosted = null
if(!admin_ghosted) if(!admin_ghosted)
announce_ghost_joinleave(mind, 0, "They now occupy their body again.") announce_ghost_joinleave(mind, 0, "They now occupy their body again.")
return 1 return 1

View File

@@ -182,7 +182,7 @@
if(L == default_language) if(L == default_language)
dat += "<b>[L.name] (:[L.key])</b> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>" dat += "<b>[L.name] (:[L.key])</b> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>"
else else
dat += "<b>[L.name] (:[L.key])</b> - <a href='byond://?src=\ref[src];default_lang=[L]'>set default</a><br/>[L.desc]<br/><br/>" dat += "<b>[L.name] (:[L.key])</b> - <a href='byond://?src=\ref[src];default_lang=\ref[L]'>set default</a><br/>[L.desc]<br/><br/>"
src << browse(dat, "window=checklanguage") src << browse(dat, "window=checklanguage")
@@ -191,8 +191,8 @@
if(href_list["default_lang"] == "reset") if(href_list["default_lang"] == "reset")
set_default_language(null) set_default_language(null)
else else
var/datum/language/L = all_languages[href_list["default_lang"]] var/datum/language/L = locate(href_list["default_lang"])
if(L) if(L && (L in languages))
set_default_language(L) set_default_language(L)
check_languages() check_languages()
return 1 return 1

View File

@@ -260,7 +260,7 @@
var/show_ssd var/show_ssd
var/mob/living/carbon/human/H = src var/mob/living/carbon/human/H = src
if(istype(H)) show_ssd = H.species.show_ssd if(istype(H)) show_ssd = H.species.show_ssd
if(show_ssd && (!client || !key || player_logged)) if(show_ssd && !client && !aghosted)
M.visible_message("<span class='notice'>[M] shakes [src] trying to wake [t_him] up!</span>", \ M.visible_message("<span class='notice'>[M] shakes [src] trying to wake [t_him] up!</span>", \
"<span class='notice'>You shake [src], but they do not respond... Maybe they have S.S.D?</span>") "<span class='notice'>You shake [src], but they do not respond... Maybe they have S.S.D?</span>")
else if(lying || src.sleeping) else if(lying || src.sleeping)

View File

@@ -918,6 +918,9 @@
if(sleeping < 2 && species.show_ssd && (!client || !key || player_logged)) if(sleeping < 2 && species.show_ssd && (!client || !key || player_logged))
sleeping = 2 sleeping = 2
//SSD check, if a logged player is awake put them back to sleep!
if(species.show_ssd && !client && !aghosted)
Sleeping(2)
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1 blinded = 1
silent = 0 silent = 0

View File

@@ -5,6 +5,5 @@
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
mind.active = 1 //indicates that the mind is currently synced with a client mind.active = 1 //indicates that the mind is currently synced with a client
//If they're SSD, remove it so they can wake back up. //If they're SSD, remove it so they can wake back up.
player_logged = 0
update_antag_icons(mind) update_antag_icons(mind)
return . return .

View File

@@ -1,8 +1,6 @@
/mob/living/Logout() /mob/living/Logout()
..() ..()
if (mind) if (mind)
if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts. //Per BYOND docs key remains set if the player DCs, becomes null if switching bodies.
if(!key) //key and mind have become seperated.
mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body.
//This tags a player as SSD. See appropriate life.dm files for furthering SSD effects such as falling asleep.
if(mind.active)
player_logged = 1

View File

@@ -224,7 +224,7 @@
if(L == default_language) if(L == default_language)
default_str = " - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a>" default_str = " - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a>"
else else
default_str = " - <a href='byond://?src=\ref[src];default_lang=[L]'>set default</a>" default_str = " - <a href='byond://?src=\ref[src];default_lang=\ref[L]'>set default</a>"
var/synth = (L in speech_synthesizer_langs) var/synth = (L in speech_synthesizer_langs)
dat += "<b>[L.name] (:[L.key])</b>[synth ? default_str : null]<br/>Speech Synthesizer: <i>[synth ? "YES" : "NOT SUPPORTED"]</i><br/>[L.desc]<br/><br/>" dat += "<b>[L.name] (:[L.key])</b>[synth ? default_str : null]<br/>Speech Synthesizer: <i>[synth ? "YES" : "NOT SUPPORTED"]</i><br/>[L.desc]<br/><br/>"

View File

@@ -214,8 +214,8 @@
var/stance_damage = 0 //Whether this mob's ability to stand has been affected var/stance_damage = 0 //Whether this mob's ability to stand has been affected
//SSD var, changed it up some so people can have special things happen for different mobs when SSD. //Indicates if a clientless mob is actually an admin aghosting
var/player_logged = 0 var/mob/dead/observer/aghosted = null
var/turf/listed_turf = null //the current turf being examined in the stat panel var/turf/listed_turf = null //the current turf being examined in the stat panel
var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes

View File

@@ -563,6 +563,7 @@
adj_drowsy = -3 adj_drowsy = -3
adj_sleepy = -2 adj_sleepy = -2
adj_temp = 25 adj_temp = 25
overdose = 45
glass_icon_state = "hot_coffee" glass_icon_state = "hot_coffee"
glass_name = "cup of coffee" glass_name = "cup of coffee"
@@ -572,10 +573,14 @@
..() ..()
if(alien == IS_DIONA) if(alien == IS_DIONA)
return return
M.make_jittery(5)
if(adj_temp > 0) if(adj_temp > 0)
holder.remove_reagent("frostoil", 10 * removed) holder.remove_reagent("frostoil", 10 * removed)
/datum/reagent/drink/coffee/overdose(var/mob/living/carbon/M, var/alien)
if(alien == IS_DIONA)
return
M.make_jittery(5)
/datum/reagent/drink/coffee/icecoffee /datum/reagent/drink/coffee/icecoffee
name = "Iced Coffee" name = "Iced Coffee"
id = "icecoffee" id = "icecoffee"

View File

@@ -9,6 +9,7 @@
amount_per_transfer_from_this = 50 amount_per_transfer_from_this = 50
// Large, but inaccurate. Use a chem dispenser or beaker for accuracy. // Large, but inaccurate. Use a chem dispenser or beaker for accuracy.
possible_transfer_amounts = list(50, 100) possible_transfer_amounts = list(50, 100)
unacidable = 1
var/spawn_reagent = null var/spawn_reagent = null
var/label = "" var/label = ""

View File

@@ -9,6 +9,10 @@
var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets) var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
/obj/item/weapon/reagent_containers/food/drinks/bottle/New()
..()
if(isGlass) unacidable = 1
/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target as mob, mob/living/user as mob) /obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target as mob, mob/living/user as mob)
//Creates a shattering noise and replaces the bottle with a broken_bottle //Creates a shattering noise and replaces the bottle with a broken_bottle

View File

@@ -6,6 +6,7 @@
icon_state = "glass_empty" icon_state = "glass_empty"
amount_per_transfer_from_this = 5 amount_per_transfer_from_this = 5
volume = 30 volume = 30
unacidable = 1 //glass
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=10)
on_reagent_change() on_reagent_change()

View File

@@ -8,6 +8,7 @@
icon_state = "jar" icon_state = "jar"
item_state = "beaker" item_state = "beaker"
center_of_mass = list("x"=15, "y"=8) center_of_mass = list("x"=15, "y"=8)
unacidable = 1
New() New()
..() ..()
reagents.add_reagent("slime", 50) reagents.add_reagent("slime", 50)

View File

@@ -14,6 +14,7 @@
volume = 60 volume = 60
w_class = 2 w_class = 2
flags = OPENCONTAINER flags = OPENCONTAINER
unacidable = 1 //glass doesn't dissolve in acid
var/label_text = "" var/label_text = ""
@@ -219,6 +220,7 @@
possible_transfer_amounts = list(10,20,30,60,120) possible_transfer_amounts = list(10,20,30,60,120)
volume = 120 volume = 120
flags = OPENCONTAINER flags = OPENCONTAINER
unacidable = 0
attackby(var/obj/D, mob/user as mob) attackby(var/obj/D, mob/user as mob)
if(isprox(D)) if(isprox(D))

View File

@@ -9,6 +9,7 @@
item_state = "hypo" item_state = "hypo"
icon_state = "hypo" icon_state = "hypo"
amount_per_transfer_from_this = 5 amount_per_transfer_from_this = 5
unacidable = 1
volume = 30 volume = 30
possible_transfer_amounts = null possible_transfer_amounts = null
flags = OPENCONTAINER flags = OPENCONTAINER

View File

@@ -11,6 +11,7 @@
throw_speed = 2 throw_speed = 2
throw_range = 10 throw_range = 10
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
unacidable = 1 //plastic
possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one. possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one.
var/spray_size = 3 var/spray_size = 3
var/list/spray_sizes = list(1,3) var/list/spray_sizes = list(1,3)

View File

@@ -18,6 +18,7 @@
w_class = 1 w_class = 1
slot_flags = SLOT_EARS slot_flags = SLOT_EARS
sharp = 1 sharp = 1
unacidable = 1 //glass
var/mode = SYRINGE_DRAW var/mode = SYRINGE_DRAW
var/image/filling //holds a reference to the current filling overlay var/image/filling //holds a reference to the current filling overlay
var/visible_name = "a syringe" var/visible_name = "a syringe"

View File

@@ -137,6 +137,9 @@ var/world_topic_spam_protect_time = world.timeofday
s["vote"] = config.allow_vote_mode s["vote"] = config.allow_vote_mode
s["ai"] = config.allow_ai s["ai"] = config.allow_ai
s["host"] = host ? host : null s["host"] = host ? host : null
// This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here.
s["players"] = 0
s["stationtime"] = worldtime2text() s["stationtime"] = worldtime2text()
if(input["status"] == "2") if(input["status"] == "2")