diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm index f757ed5e9e..69794c9af3 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm @@ -163,14 +163,13 @@ command_announcement.Announce(fulltext) -// Proc: get_unhacked_apcs() +// Proc: get_all_apcs() // Parameters: None -// Description: Returns a list of APCs that are not yet hacked. -/proc/get_unhacked_apcs() +// Description: Returns a list of all APCs +/proc/get_all_apcs() var/list/H = list() for(var/obj/machinery/power/apc/A in machines) - if(!A.hacker) - H.Add(A) + H.Add(A) return H diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm index 9c3c584d9e..f1bad288ad 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm @@ -38,7 +38,7 @@ // END RESEARCH DATUMS // 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 name = "Basic Encryption Hack" set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station." diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index d92812b3fd..fe1247cc89 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -14,6 +14,7 @@ var/global/list/cached_icons = list() amount_per_transfer_from_this = 10 possible_transfer_amounts = list(10,20,30,60) volume = 60 + unacidable = 0 flags = OPENCONTAINER var/paint_type = "red" diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index c697f1a4c1..17204e77c8 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -14,7 +14,7 @@ new /obj/item/stack/material/wood(src) var/turf/T = get_turf(src) for(var/atom/movable/AM in contents) - if(AM.simulated) AM.loc = T + if(AM.simulated) AM.forceMove(T) user.visible_message("[user] pries \the [src] open.", \ "You pry open \the [src].", \ "You hear splitting wood.") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 94bbf16415..7898d97a19 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -401,8 +401,10 @@ var/list/admin_verbs_mentor = list( var/mob/body = mob var/mob/dead/observer/ghost = body.ghostize(1) ghost.admin_ghosted = 1 - if(body && !body.key) - body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus + if(body) + 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! diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index aedf6e4c9f..38cac18fbb 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -24,6 +24,7 @@ volume = 5 can_be_placed_into = null flags = OPENCONTAINER | NOBLUDGEON + unacidable = 0 /obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob) return diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index cd7afde0e4..2b267b908b 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -216,6 +216,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return mind.current.ajourn=0 mind.current.key = key + mind.current.aghosted = null if(!admin_ghosted) announce_ghost_joinleave(mind, 0, "They now occupy their body again.") return 1 diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index a69e08df58..bf90079db8 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -182,7 +182,7 @@ if(L == default_language) dat += "[L.name] (:[L.key]) - default - reset
[L.desc]

" else - dat += "[L.name] (:[L.key]) - set default
[L.desc]

" + dat += "[L.name] (:[L.key]) - set default
[L.desc]

" src << browse(dat, "window=checklanguage") @@ -191,8 +191,8 @@ if(href_list["default_lang"] == "reset") set_default_language(null) else - var/datum/language/L = all_languages[href_list["default_lang"]] - if(L) + var/datum/language/L = locate(href_list["default_lang"]) + if(L && (L in languages)) set_default_language(L) check_languages() return 1 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index d0c07c8509..47aa05aeda 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -260,7 +260,7 @@ var/show_ssd var/mob/living/carbon/human/H = src if(istype(H)) show_ssd = H.species.show_ssd - if(show_ssd && (!client || !key || player_logged)) + if(show_ssd && !client && !aghosted) M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ "You shake [src], but they do not respond... Maybe they have S.S.D?") else if(lying || src.sleeping) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 282831641c..651b3e7fea 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -918,6 +918,9 @@ if(sleeping < 2 && species.show_ssd && (!client || !key || player_logged)) 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 blinded = 1 silent = 0 diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 383a81f13b..b41baabef9 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -5,6 +5,5 @@ 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 //If they're SSD, remove it so they can wake back up. - player_logged = 0 update_antag_icons(mind) return . diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index 1f2551b6b8..577221a03e 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -1,8 +1,6 @@ /mob/living/Logout() ..() - if (mind) - if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts. + if (mind) + //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. - //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 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index adb95b7271..9bb71d2210 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -224,7 +224,7 @@ if(L == default_language) default_str = " - default - reset" else - default_str = " - set default" + default_str = " - set default" var/synth = (L in speech_synthesizer_langs) dat += "[L.name] (:[L.key])[synth ? default_str : null]
Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
[L.desc]

" diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index cee9e723a4..06fbd2d8f4 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -214,8 +214,8 @@ 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. - var/player_logged = 0 + //Indicates if a clientless mob is actually an admin aghosting + var/mob/dead/observer/aghosted = null 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 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 2f9cc0f548..b548353c60 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -563,6 +563,7 @@ adj_drowsy = -3 adj_sleepy = -2 adj_temp = 25 + overdose = 45 glass_icon_state = "hot_coffee" glass_name = "cup of coffee" @@ -572,10 +573,14 @@ ..() if(alien == IS_DIONA) return - M.make_jittery(5) if(adj_temp > 0) 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 name = "Iced Coffee" id = "icecoffee" diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm index 569da4cc73..2f7369cba0 100644 --- a/code/modules/reagents/dispenser/cartridge.dm +++ b/code/modules/reagents/dispenser/cartridge.dm @@ -9,6 +9,7 @@ amount_per_transfer_from_this = 50 // Large, but inaccurate. Use a chem dispenser or beaker for accuracy. possible_transfer_amounts = list(50, 100) + unacidable = 1 var/spawn_reagent = null var/label = "" diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index 7e289a45f3..8db599bf52 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -9,6 +9,10 @@ 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 +/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) //Creates a shattering noise and replaces the bottle with a broken_bottle diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index 0dc3012493..c7f0f0a9fe 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -6,6 +6,7 @@ icon_state = "glass_empty" amount_per_transfer_from_this = 5 volume = 30 + unacidable = 1 //glass center_of_mass = list("x"=16, "y"=10) on_reagent_change() diff --git a/code/modules/reagents/reagent_containers/food/drinks/jar.dm b/code/modules/reagents/reagent_containers/food/drinks/jar.dm index 7cca924261..47abb8637a 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/jar.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/jar.dm @@ -8,6 +8,7 @@ icon_state = "jar" item_state = "beaker" center_of_mass = list("x"=15, "y"=8) + unacidable = 1 New() ..() reagents.add_reagent("slime", 50) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 123bbc9d1f..359e6b2c99 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -14,6 +14,7 @@ volume = 60 w_class = 2 flags = OPENCONTAINER + unacidable = 1 //glass doesn't dissolve in acid var/label_text = "" @@ -219,6 +220,7 @@ possible_transfer_amounts = list(10,20,30,60,120) volume = 120 flags = OPENCONTAINER + unacidable = 0 attackby(var/obj/D, mob/user as mob) if(isprox(D)) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index ec5923c73d..7632f8456f 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -9,6 +9,7 @@ item_state = "hypo" icon_state = "hypo" amount_per_transfer_from_this = 5 + unacidable = 1 volume = 30 possible_transfer_amounts = null flags = OPENCONTAINER diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 662099a716..91d82b9bc1 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -11,6 +11,7 @@ throw_speed = 2 throw_range = 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. var/spray_size = 3 var/list/spray_sizes = list(1,3) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 420990def0..c06b57d54c 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -18,6 +18,7 @@ w_class = 1 slot_flags = SLOT_EARS sharp = 1 + unacidable = 1 //glass var/mode = SYRINGE_DRAW var/image/filling //holds a reference to the current filling overlay var/visible_name = "a syringe" diff --git a/code/world.dm b/code/world.dm index 9a5508ffe9..8e8317b0a7 100644 --- a/code/world.dm +++ b/code/world.dm @@ -137,6 +137,9 @@ var/world_topic_spam_protect_time = world.timeofday s["vote"] = config.allow_vote_mode s["ai"] = config.allow_ai 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() if(input["status"] == "2")