mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
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:
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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."
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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>")
|
||||||
|
|||||||
@@ -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!
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 .
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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/>"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 = ""
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user