This [src] is dirty!
Please clean it before use!"}
+ else
+ var/list/items_counts = new
+ var/list/items_measures = new
+ var/list/items_measures_p = new
+ for(var/obj/O in contents)
+ var/display_name = O.name
+ if(istype(O,/obj/item/reagent_containers/food/snacks/egg))
+ items_measures[display_name] = "egg"
+ items_measures_p[display_name] = "eggs"
+ if(istype(O,/obj/item/reagent_containers/food/snacks/tofu))
+ items_measures[display_name] = "tofu chunk"
+ items_measures_p[display_name] = "tofu chunks"
+ if(istype(O,/obj/item/reagent_containers/food/snacks/meat)) //any meat
+ items_measures[display_name] = "slab of meat"
+ items_measures_p[display_name] = "slabs of meat"
+ if(istype(O,/obj/item/reagent_containers/food/snacks/donkpocket))
+ display_name = "Turnovers"
+ items_measures[display_name] = "turnover"
+ items_measures_p[display_name] = "turnovers"
+ if(istype(O,/obj/item/reagent_containers/food/snacks/carpmeat))
+ items_measures[display_name] = "fillet of meat"
+ items_measures_p[display_name] = "fillets of meat"
+ items_counts[display_name]++
+ for(var/O in items_counts)
+ var/N = items_counts[O]
+ if(!(O in items_measures))
+ dat += {"[capitalize(O)]: [N] [lowertext(O)]\s tag
- to_chat(world, "[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces: [message] [message]Anomaly Alert
")
to_chat(src, "
Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.
")
@@ -987,8 +974,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/gun/projectile, /obj/item/ammo_
halitem.icon_state = "flashbang1"
halitem.name = "Flashbang"
if(client) client.screen += halitem
- spawn(rand(100,250))
- qdel(halitem)
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, halitem), rand(100,250))
if("dangerflash")
//Flashes of danger
if(!halimage)
@@ -1007,8 +993,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/gun/projectile, /obj/item/ammo_
halimage = image('icons/turf/floors/Chasms.dmi',target,"smooth",TURF_LAYER)
if(4)
halimage = image('icons/obj/assemblies.dmi',target,"plastic-explosive2",OBJ_LAYER+0.01)
-
-
+
if(client)
client.images += halimage
sleep(rand(40,60)) //Only seen for a brief moment.
@@ -1054,4 +1039,4 @@ var/list/non_fakeattack_weapons = list(/obj/item/gun/projectile, /obj/item/ammo_
spawn(rand(30,50)) //Only seen for a brief moment.
if(client)
client.images -= halbody
- halbody = null
+ halbody = null
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm b/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm
index d83bfaeccb0..be4f18539e2 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/candy_maker.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "candymaker_off"
cook_verbs = list("Wonderizing", "Scrumpdiddlyumptiousification", "Miracle-coating", "Flavorifaction")
- recipe_type = /datum/recipe/candy
+ recipe_type = RECIPE_CANDY
off_icon = "candymaker_off"
on_icon = "candymaker_on"
broken_icon = "candymaker_broke"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
index 62aaf8440bf..802f8f08c54 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm
@@ -4,7 +4,7 @@
layer = 2.9
density = 1
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 5
var/on = 0
var/onicon = null
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index 1e3c5602a22..bd80823addd 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -20,7 +20,7 @@
var/stealthmode = FALSE
var/list/victims = list()
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 500
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm b/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
index c1b2612533d..e95b186a9f0 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "grill_off"
cook_verbs = list("Grilling", "Searing", "Frying")
- recipe_type = /datum/recipe/grill
+ recipe_type = RECIPE_GRILL
off_icon = "grill_off"
on_icon = "grill_on"
broken_icon = "grill_broke"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index a58ccc1bb2b..5d758193bae 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -7,7 +7,7 @@
anchored = 1
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "icecream_vat"
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 20
var/obj/item/reagent_containers/glass/beaker = null
var/useramount = 15 //Last used amount
diff --git a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm
index ec806610601..a10f4e2fdae 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm
@@ -6,7 +6,7 @@
layer = 2.9
density = 1
anchored = 0
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 100
pass_flags = PASSTABLE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
index 83f1126f78f..9de98749e42 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
@@ -5,7 +5,7 @@
layer = 2.9
density = 1
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 100
flags = OPENCONTAINER
@@ -16,10 +16,7 @@
var/list/cook_verbs = list("Cooking")
//Recipe & Item vars
var/recipe_type //Make sure to set this on the machine definition, or else you're gonna runtime on New()
- var/list/datum/recipe/available_recipes // List of the recipes you can use
- var/list/acceptable_items // List of the items you can put in
- var/list/acceptable_reagents // List of the reagents you can put in
- var/max_n_of_items = 0
+ var/max_n_of_items = 25
//Icon states
var/off_icon
var/on_icon
@@ -35,23 +32,28 @@
..()
create_reagents(100)
reagents.set_reacting(FALSE)
- if(!available_recipes)
- available_recipes = new
- acceptable_items = new
- acceptable_reagents = new
- for(var/type in subtypesof(recipe_type))
+ init_lists()
+
+/obj/machinery/kitchen_machine/proc/init_lists()
+ if(!GLOB.cooking_recipes[recipe_type])
+ GLOB.cooking_recipes[recipe_type] = list()
+ GLOB.cooking_ingredients[recipe_type] = list()
+ GLOB.cooking_reagents[recipe_type] = list()
+ if(!length(GLOB.cooking_recipes[recipe_type]))
+ for(var/type in subtypesof(GLOB.cooking_recipe_types[recipe_type]))
var/datum/recipe/recipe = new type
+ if(recipe in GLOB.cooking_recipes[recipe_type])
+ qdel(recipe)
+ continue
if(recipe.result) // Ignore recipe subtypes that lack a result
- available_recipes += recipe
+ GLOB.cooking_recipes[recipe_type] += recipe
for(var/item in recipe.items)
- acceptable_items |= item
+ GLOB.cooking_ingredients[recipe_type] |= item
for(var/reagent in recipe.reagents)
- acceptable_reagents |= reagent
- if(recipe.items)
- max_n_of_items = max(max_n_of_items,recipe.count_n_items())
+ GLOB.cooking_reagents[recipe_type] |= reagent
else
qdel(recipe)
- acceptable_items |= /obj/item/reagent_containers/food/snacks/grown
+ GLOB.cooking_ingredients[recipe_type] |= /obj/item/reagent_containers/food/snacks/grown
/*******************
* Item Adding
@@ -80,26 +82,14 @@
if(broken > 0)
if(broken == 2 && istype(O, /obj/item/screwdriver)) // If it's broken and they're using a screwdriver
- user.visible_message( \
- "[user] starts to fix part of \the [src].", \
- "You start to fix part of \the [src]." \
- )
+ user.visible_message("[user] starts to fix part of [src].", "You start to fix part of [src].")
if(do_after(user, 20 * O.toolspeed, target = src))
- user.visible_message( \
- "[user] fixes part of \the [src].", \
- "You have fixed part of \the [src]." \
- )
+ user.visible_message("[user] fixes part of [src].", "You have fixed part of \the [src].")
broken = 1 // Fix it a bit
else if(broken == 1 && istype(O, /obj/item/wrench)) // If it's broken and they're doing the wrench
- user.visible_message( \
- "[user] starts to fix part of \the [src].", \
- "You start to fix part of \the [src]." \
- )
+ user.visible_message("[user] starts to fix part of [src].", "You start to fix part of [src].")
if(do_after(user, 20 * O.toolspeed, target = src))
- user.visible_message( \
- "[user] fixes \the [src].", \
- "You have fixed \the [src]." \
- )
+ user.visible_message("[user] fixes [src].", "You have fixed [src].")
icon_state = off_icon
broken = 0 // Fix it!
dirty = 0 // just to be sure
@@ -109,15 +99,9 @@
return 1
else if(dirty==100) // The machine is all dirty so can't be used!
if(istype(O, /obj/item/reagent_containers/spray/cleaner) || istype(O, /obj/item/soap)) // If they're trying to clean it then let them
- user.visible_message( \
- "[user] starts to clean \the [src].", \
- "You start to clean \the [src]." \
- )
+ user.visible_message("[user] starts to clean [src].", "You start to clean [src].")
if(do_after(user, 20 * O.toolspeed, target = src))
- user.visible_message( \
- "[user] has cleaned \the [src].", \
- "You have cleaned \the [src]." \
- )
+ user.visible_message("[user] has cleaned [src].", "You have cleaned [src].")
dirty = 0 // It's clean!
broken = 0 // just to be sure
icon_state = off_icon
@@ -125,33 +109,25 @@
else //Otherwise bad luck!!
to_chat(user, "It's dirty!")
return 1
- else if(is_type_in_list(O,acceptable_items))
+ else if(is_type_in_list(O, GLOB.cooking_ingredients[recipe_type]) || istype(O, /obj/item/mixing_bowl))
if(contents.len>=max_n_of_items)
to_chat(user, "This [src] is full of ingredients, you cannot put more.")
return 1
- if(istype(O,/obj/item/stack) && O:amount>1)
- new O.type (src)
- O:use(1)
- user.visible_message( \
- "[user] has added one of [O] to \the [src].", \
- "You add one of [O] to \the [src].")
+ if(istype(O,/obj/item/stack))
+ var/obj/item/stack/S = O
+ if(S.amount > 1)
+ var/obj/item/stack/to_add = S.split(user, 1)
+ to_add.forceMove(src)
+ user.visible_message("[user] adds one of [S] to [src].", "You add one of [S] to [src].")
+ else
+ add_item(S, user)
else
- if(!user.drop_item())
- to_chat(user, "\The [O] is stuck to your hand, you cannot put it in \the [src]")
- return 0
-
- O.forceMove(src)
- user.visible_message( \
- "[user] has added \the [O] to \the [src].", \
- "You add \the [O] to \the [src].")
- else if(istype(O,/obj/item/reagent_containers/glass) || \
- istype(O,/obj/item/reagent_containers/food/drinks) || \
- istype(O,/obj/item/reagent_containers/food/condiment) \
- )
+ add_item(O, user)
+ else if(is_type_in_list(O, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/drinks, /obj/item/reagent_containers/food/condiment)))
if(!O.reagents)
return 1
for(var/datum/reagent/R in O.reagents.reagent_list)
- if(!(R.id in acceptable_reagents))
+ if(!(R.id in GLOB.cooking_reagents[recipe_type]))
to_chat(user, "Your [O] contains components unsuitable for cookery.")
return 1
//G.reagents.trans_to(src,G.amount_per_transfer_from_this)
@@ -162,6 +138,14 @@
return 1
updateUsrDialog()
+/obj/machinery/kitchen_machine/proc/add_item(obj/item/I, mob/user)
+ if(!user.drop_item())
+ to_chat(user, "\The [I] is stuck to your hand, you cannot put it in [src]")
+ //return 0
+ else
+ I.forceMove(src)
+ user.visible_message("[user] adds [I] to [src].", "You add [I] to [src].")
+
/obj/machinery/kitchen_machine/attack_ai(mob/user)
return 0
@@ -182,11 +166,11 @@
return
var/dat = ""
if(broken > 0)
- dat = {"Bzzzzttttt"}
+ dat = {"Bzzzzttttt"}
else if(operating)
- dat = {"[pick(cook_verbs)] in progress!
Please wait...!"}
+ dat = {"[pick(cook_verbs)] in progress!"}
else if(dirty==100)
- dat = {"This [src] is dirty!
Please wait...!
Please clean it before use!"}
+ dat = {"This [src] is dirty!"}
else
var/list/items_counts = new
var/list/items_measures = new
@@ -260,12 +244,13 @@
stop()
return
- var/datum/recipe/recipe = select_recipe(available_recipes,src)
- var/obj/cooked
- var/obj/byproduct
- if(!recipe)
+ var/list/recipes_to_make = choose_recipes()
+
+ if(recipes_to_make.len == 1 && recipes_to_make[1][2] == RECIPE_FAIL)
+ //This only runs if there is a single recipe source to be made and it is a failure (the machine was loaded with only 1 mixing bowl that results in failure OR was directly loaded with ingredients that results in failure).
+ //If there are multiple sources, this bit gets skipped.
dirty += 1
- if(prob(max(10,dirty*5)))
+ if(prob(max(10,dirty*5))) //chance to get so dirty we require cleaning before next use
if(!wzhzhzh(4))
abort()
return
@@ -274,14 +259,14 @@
muck_finish()
fail()
return
- else if(has_extra_item())
+ else if(has_extra_item()) //if extra items present, break down and require repair before next use
if(!wzhzhzh(4))
abort()
return
broke()
fail()
return
- else
+ else //otherwise just stop without requiring cleaning/repair
if(!wzhzhzh(10))
abort()
return
@@ -289,24 +274,69 @@
fail()
return
else
- var/halftime = round(recipe.time/10/2)
- if(!wzhzhzh(halftime))
+ if(!wzhzhzh(5))
abort()
return
- if(!wzhzhzh(halftime))
+ if(!wzhzhzh(5))
abort()
fail()
return
- cooked = recipe.make_food(src)
- byproduct = recipe.get_byproduct()
- stop()
- if(cooked)
- cooked.forceMove(loc)
- for(var/i=1,i
Please clean it before use!
You have [currentkarma] available."})
- return
+ var/currentkarma = verify_karma()
+ if(!isnull(currentkarma))
+ to_chat(usr, {"
You have [currentkarma] available."})
/client/proc/verify_karma()
- var/currentkarma=0
+ var/currentkarma = 0
if(!dbcon.IsConnected())
to_chat(usr, "Unable to connect to karma database. Please try again later.
")
return
@@ -174,24 +178,18 @@ var/list/karma_spenders = list()
totalkarma = query.item[1]
karmaspent = query.item[2]
currentkarma = (text2num(totalkarma) - text2num(karmaspent))
-/* if(totalkarma)
- to_chat(usr, {"
You have [currentkarma] available.
)
-You've gained [totalkarma] total karma in your time here.
"}
- else
- to_chat(usr, "Your total karma is: 0
")*/
+
return currentkarma
/client/verb/karmashop()
set name = "karmashop"
set desc = "Spend your hard-earned karma here"
- set hidden = 1
+ set hidden = TRUE
if(config.disable_karma)
to_chat(src, "Karma is disabled.")
- return 0
-
+ return
karmashopmenu()
- return
/client/proc/karmashopmenu()
var/dat = "
"}
var/datum/browser/popup = new(usr, "karmashop", "
"}
if(!dbckey)
query = dbcon.NewQuery("INSERT INTO [format_table_name("whitelist")] (ckey, job) VALUES ('[usr.ckey]','[job]')")
if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during whitelist logging (adding new key). Error: \[[err]\]\n")
- message_admins("SQL ERROR during whitelist logging (adding new key). Error: \[[err]\]\n")
+ queryErrorLog(query.ErrorMsg(),"adding new key")
return
else
to_chat(usr, "You have unlocked [job].")
@@ -297,9 +309,7 @@ You've gained [totalkarma] total karma in your time here.
"}
var/newjoblist = jointext(joblist,",")
query = dbcon.NewQuery("UPDATE [format_table_name("whitelist")] SET job='[newjoblist]' WHERE ckey='[dbckey]'")
if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during whitelist logging (updating existing entry). Error : \[[err]\]\n")
- message_admins("SQL ERROR during whitelist logging (updating existing entry). Error : \[[err]\]\n")
+ queryErrorLog(query.ErrorMsg(),"updating existing entry")
return
else
to_chat(usr, "You have unlocked [job].")
@@ -321,9 +331,7 @@ You've gained [totalkarma] total karma in your time here.
"}
if(!dbckey)
query = dbcon.NewQuery("INSERT INTO [format_table_name("whitelist")] (ckey, species) VALUES ('[usr.ckey]','[species]')")
if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during whitelist logging (adding new key). Error : \[[err]\]\n")
- message_admins("SQL ERROR during whitelist logging (adding new key). Error : \[[err]\]\n")
+ queryErrorLog(query.ErrorMsg(),"adding new key")
return
else
to_chat(usr, "You have unlocked [species].")
@@ -337,9 +345,7 @@ You've gained [totalkarma] total karma in your time here.
"}
var/newspecieslist = jointext(specieslist,",")
query = dbcon.NewQuery("UPDATE [format_table_name("whitelist")] SET species='[newspecieslist]' WHERE ckey='[dbckey]'")
if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during whitelist logging (updating existing entry). Error: \[[err]\]\n")
- message_admins("SQL ERROR during whitelist logging (updating existing entry). Error: \[[err]\]\n")
+ queryErrorLog(query.ErrorMsg(),"updating existing entry")
return
else
to_chat(usr, "You have unlocked [species].")
@@ -349,7 +355,7 @@ You've gained [totalkarma] total karma in your time here.
"}
to_chat(usr, "You already have this species unlocked!")
return
-/client/proc/karmacharge(var/cost,var/refund = 0)
+/client/proc/karmacharge(var/cost,var/refund = FALSE)
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("karmatotals")] WHERE byondkey='[usr.ckey]'")
query.Execute()
@@ -361,9 +367,7 @@ You've gained [totalkarma] total karma in your time here.
"}
spent += cost
query = dbcon.NewQuery("UPDATE [format_table_name("karmatotals")] SET karmaspent=[spent] WHERE byondkey='[usr.ckey]'")
if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during karmaspent updating (updating existing entry). Error: \[[err]\]\n")
- message_admins("SQL ERROR during karmaspent updating (updating existing entry). Error: \[[err]\]\n")
+ queryErrorLog(query.ErrorMsg(),"updating existing entry")
return
else
to_chat(usr, "You have been [refund ? "refunded" : "charged"] [cost] karma.")
@@ -372,23 +376,8 @@ You've gained [totalkarma] total karma in your time here.
"}
/client/proc/karmarefund(var/type,var/name,var/cost)
switch(name)
- if("Tajaran Ambassador")
- cost = 30
- if("Unathi Ambassador")
- cost = 30
- if("Skrell Ambassador")
- cost = 30
- if("Diona Ambassador")
- cost = 30
- if("Kidan Ambassador")
- cost = 30
- if("Slime People Ambassador")
- cost = 30
- if("Grey Ambassador")
- cost = 30
- if("Vox Ambassador")
- cost = 30
- if("Customs Officer")
+ if("Tajaran Ambassador","Unathi Ambassador","Skrell Ambassador","Diona Ambassador","Kidan Ambassador",
+ "Slime People Ambassador","Grey Ambassador","Vox Ambassador","Customs Officer")
cost = 30
if("Nanotrasen Recruiter")
cost = 10
@@ -422,9 +411,7 @@ You've gained [totalkarma] total karma in your time here.
"}
var/newtypelist = jointext(typelist,",")
query = dbcon.NewQuery("UPDATE [format_table_name("whitelist")] SET [type]='[newtypelist]' WHERE ckey='[dbckey]'")
if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during whitelist logging (updating existing entry). Error: \[[err]\]\n")
- message_admins("SQL ERROR during whitelist logging (updating existing entry). Error: \[[err]\]\n")
+ queryErrorLog(query.ErrorMsg(),"updating existing entry")
return
else
to_chat(usr, "You have been refunded [cost] karma for [type] [name].")
@@ -436,6 +423,10 @@ You've gained [totalkarma] total karma in your time here.
"}
else
to_chat(usr, "Your ckey ([dbckey]) was not found.")
+/client/proc/queryErrorLog(err = null, errType)
+ log_game("SQL ERROR during whitelist logging ([errType]]). Error : \[[err]\]\n")
+ message_admins("SQL ERROR during whitelist logging ([errType]]). Error : \[[err]\]\n")
+
/client/proc/checkpurchased(var/name = null) // If the first parameter is null, return a full list of purchases
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("whitelist")] WHERE ckey='[usr.ckey]'")
query.Execute()
@@ -454,10 +445,10 @@ You've gained [totalkarma] total karma in your time here.
"}
var/list/combinedlist = joblist + specieslist
if(name)
if(name in combinedlist)
- return 1
+ return TRUE
else
- return 0
+ return FALSE
else
return combinedlist
else
- return 0
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index a856e3f822f..dd7f591e3b7 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -77,7 +77,7 @@
health -= O.force * 0.75
else
if(health <= 0)
- visible_message("The bookcase is smashed apart!")
+ visible_message("The bookcase is smashed apart!")
qdel(src)
return ..()
diff --git a/code/modules/martial_arts/adminfu.dm b/code/modules/martial_arts/adminfu.dm
index a279765c980..eaec2b1c3c8 100644
--- a/code/modules/martial_arts/adminfu.dm
+++ b/code/modules/martial_arts/adminfu.dm
@@ -37,8 +37,7 @@
add_to_streak("G",D)
if(check_streak(A,D))
return 1
- D.grabbedby(A,1)
- var/obj/item/grab/G = A.get_active_hand()
+ var/obj/item/grab/G = D.grabbedby(A,1)
if(G)
G.state = GRAB_NECK
diff --git a/code/modules/martial_arts/brawling.dm b/code/modules/martial_arts/brawling.dm
index b326e9f8b33..f7c4d307968 100644
--- a/code/modules/martial_arts/brawling.dm
+++ b/code/modules/martial_arts/brawling.dm
@@ -53,8 +53,7 @@
A.visible_message("[A] tries to grab ahold of [D], but fails!", \
"You fail to grab ahold of [D]!")
return 1
- D.grabbedby(A,1)
- var/obj/item/grab/G = A.get_active_hand()
+ var/obj/item/grab/G = D.grabbedby(A,1)
if(G)
D.visible_message("[A] grabs ahold of [D] drunkenly!", \
"[A] grabs ahold of [D] drunkenly!")
diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm
index a6cd25d50c0..38f1dba77b9 100644
--- a/code/modules/martial_arts/sleeping_carp.dm
+++ b/code/modules/martial_arts/sleeping_carp.dm
@@ -108,8 +108,7 @@
add_to_streak("G",D)
if(check_streak(A,D))
return 1
- D.grabbedby(A,1)
- var/obj/item/grab/G = A.get_active_hand()
+ var/obj/item/grab/G = D.grabbedby(A,1)
if(G)
G.state = GRAB_AGGRESSIVE //Instant aggressive grab
diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm
index 59d3a715f32..1e0f73cd995 100644
--- a/code/modules/mining/lavaland/loot/colossus_loot.dm
+++ b/code/modules/mining/lavaland/loot/colossus_loot.dm
@@ -12,7 +12,7 @@
unacidable = 1
burn_state = LAVA_PROOF | FIRE_PROOF
pixel_y = -4
- use_power = 0
+ use_power = NO_POWER_USE
var/memory_saved = FALSE
var/list/stored_items = list()
var/static/list/blacklist = typecacheof(list(/obj/item/spellbook))
@@ -97,7 +97,7 @@
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "anomaly_crystal"
luminosity = 8
- use_power = 0
+ use_power = NO_POWER_USE
density = 1
burn_state = LAVA_PROOF | FIRE_PROOF
unacidable = 1
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 57be913c699..6c11ee7a3a4 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -1,6 +1,6 @@
// At minimum every mob has a hear_say proc.
-/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
+/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
if(!client)
return 0
@@ -70,12 +70,12 @@
if(speaker == src)
to_chat(src, "You cannot hear yourself speak!")
else
- to_chat(src, "[speaker_name][alt_name] talks but you cannot hear [speaker.p_them()].")
+ to_chat(src, "[speaker_name][speaker.GetAltName()] talks but you cannot hear [speaker.p_them()].")
else
if(language)
- to_chat(src, "[speaker_name][alt_name] [track][language.format_message(message, verb)]")
+ to_chat(src, "[speaker_name][speaker.GetAltName()] [track][language.format_message(message, verb)]")
else
- to_chat(src, "[speaker_name][alt_name] [track][verb], ")
+ to_chat(src, "[speaker_name][speaker.GetAltName()] [track][verb], ")
if(speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z))
var/turf/source = speaker? get_turf(speaker) : get_turf(src)
src.playsound_local(source, speech_sound, sound_vol, 1)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 4c01ac1a4a5..5ff0ea8e28b 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -83,7 +83,7 @@
//This is probably the main one you need to know :)
//Just puts stuff on the floor for most mobs, since all mobs have hands but putting stuff in the AI/corgi/ghost hand is VERY BAD.
/mob/proc/put_in_hands(obj/item/W)
- W.forceMove(get_turf(src))
+ W.forceMove(drop_location())
W.layer = initial(W.layer)
W.plane = initial(W.plane)
W.dropped()
@@ -137,7 +137,7 @@
if(I)
if(client)
client.screen -= I
- I.forceMove(loc)
+ I.forceMove(drop_location())
I.dropped(src)
if(I)
I.layer = initial(I.layer)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index ddac1cc18e9..adf81753827 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -66,7 +66,7 @@
#define MAX_ALIEN_LEAP_DIST 7
/mob/living/carbon/alien/humanoid/hunter/proc/leap_at(var/atom/A)
- if(pounce_cooldown)
+ if(pounce_cooldown > world.time)
to_chat(src, "You are too fatigued to pounce right now!")
return
@@ -114,9 +114,7 @@
Weaken(2, 1, 1)
toggle_leap(0)
- pounce_cooldown = !pounce_cooldown
- spawn(pounce_cooldown_time) //3s by default
- pounce_cooldown = !pounce_cooldown
+ pounce_cooldown = world.time + pounce_cooldown_time
else if(A.density && !A.CanPass(src))
visible_message("[src] smashes into [A]!", "[src] smashes into [A]!")
Weaken(2, 1, 1)
diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm
index 907a2e4862d..f2a15119156 100644
--- a/code/modules/mob/living/carbon/brain/say.dm
+++ b/code/modules/mob/living/carbon/brain/say.dm
@@ -29,7 +29,7 @@
to_chat(usr, "You cannot speak, as your internal speaker is turned off.")
. = FALSE
-/mob/living/carbon/brain/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios, var/alt_name)
+/mob/living/carbon/brain/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios)
switch(message_mode)
if("headset")
var/radio_worked = 0 // If any of the radios our brainmob could use functioned, this is set true so that we don't use any others
@@ -45,6 +45,6 @@
radio_worked = c.radio.talk_into(src, message, message_mode, verb, speaking)
return radio_worked
if("whisper")
- whisper_say(message, speaking, alt_name)
+ whisper_say(message, speaking)
return 1
else return 0
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 6c2bb844155..b8e209498c2 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -178,7 +178,7 @@ emp_act
/mob/living/carbon/human/grabbedby(mob/living/user)
if(w_uniform)
w_uniform.add_fingerprint(user)
- ..()
+ return ..()
//Returns 1 if the attack hit, 0 if it missed.
/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user, def_zone)
diff --git a/code/modules/mob/living/carbon/human/interactive/functions.dm b/code/modules/mob/living/carbon/human/interactive/functions.dm
index 8e8c2c80013..06df994df5f 100644
--- a/code/modules/mob/living/carbon/human/interactive/functions.dm
+++ b/code/modules/mob/living/carbon/human/interactive/functions.dm
@@ -630,7 +630,7 @@
var/obj/item/reagent_containers/food/snacks/newSnack = new chosenType(get_turf(src))
TARGET = newSnack
newSnack.reagents.remove_any((newSnack.reagents.total_volume/2)-1)
- newSnack.name = "Synthetic [newSnack.name]"
+ newSnack.name = "synthetic [newSnack.name]"
custom_emote(2, "[pick("gibbers","drools","slobbers","claps wildly","spits")] as [p_they()] vomit[p_s()] [newSnack] from [p_their()] mouth!")
catch(var/exception/e)
log_runtime(e, src, "Caught in SNPC cooking module")
diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm
index 763a5ef15be..d8d469cfd57 100644
--- a/code/modules/mob/living/carbon/human/interactive/interactive.dm
+++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm
@@ -581,7 +581,7 @@
saveVoice()
..()
-/mob/living/carbon/human/interactive/hear_say(message, verb = "says", datum/language/language = null, alt_name = "", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol)
+/mob/living/carbon/human/interactive/hear_say(message, verb = "says", datum/language/language = null, italics = 0, mob/speaker = null, sound/speech_sound, sound_vol)
if(!istype(speaker, /mob/living/carbon/human/interactive))
knownStrings |= html_decode(message)
..()
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 7d408ce9199..a9f93f3d441 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -1,10 +1,10 @@
/mob/living/carbon/human/say(var/message, var/sanitize = TRUE, var/ignore_speech_problems = FALSE, var/ignore_atmospherics = FALSE)
- var/alt_name = ""
+ ..(message, sanitize = sanitize, ignore_speech_problems = ignore_speech_problems, ignore_atmospherics = ignore_atmospherics) //ohgod we should really be passing a datum here.
+/mob/living/carbon/human/GetAltName()
if(name != GetVoice())
- alt_name = " (as [get_id_name("Unknown")])"
-
- ..(message, alt_name = alt_name, sanitize = sanitize, ignore_speech_problems = ignore_speech_problems, ignore_atmospherics = ignore_atmospherics) //ohgod we should really be passing a datum here.
+ return " (as [get_id_name("Unknown")])"
+ return ..()
/mob/living/carbon/human/proc/forcesay(list/append)
if(stat == CONSCIOUS)
@@ -160,7 +160,7 @@
returns[3] = speech_problem_flag
return returns
-/mob/living/carbon/human/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios, var/alt_name)
+/mob/living/carbon/human/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios)
switch(message_mode)
if("intercom")
for(var/obj/item/radio/intercom/I in view(1, src))
@@ -203,7 +203,7 @@
R.talk_into(src, message, null, verb, speaking)
if("whisper")
- whisper_say(message, speaking, alt_name)
+ whisper_say(message, speaking)
return 1
else
if(message_mode)
diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm
index a27f7fee103..19af6cee849 100644
--- a/code/modules/mob/living/carbon/human/species/machine.dm
+++ b/code/modules/mob/living/carbon/human/species/machine.dm
@@ -15,8 +15,8 @@
skinned_type = /obj/item/stack/sheet/metal // Let's grind up IPCs for station resources!
eyes = "blank_eyes"
- brute_mod = 2.5 // 100% * 2.5 * 0.6 (robolimbs) ~= 150%
- burn_mod = 2.5 // So they take 50% extra damage from brute/burn overall.
+ brute_mod = 2.5 // 100% * 2.5 * 0.66 (robolimbs) = 165%
+ burn_mod = 2.5 // So they take 65% extra damage from brute/burn overall.
tox_mod = 0
clone_mod = 0
oxy_mod = 0
diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm
index b49dd88d8e6..82c875444d2 100644
--- a/code/modules/mob/living/carbon/human/species/plasmaman.dm
+++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm
@@ -83,7 +83,6 @@
if("Warden","Security Officer","Security Pod Pilot")
suit=/obj/item/clothing/suit/space/eva/plasmaman/security
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security
- H.equip_or_collect(new /obj/item/gun/energy/gun/advtaser(H), slot_in_backpack)
if("Internal Affairs Agent")
suit=/obj/item/clothing/suit/space/eva/plasmaman/lawyer
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/lawyer
@@ -93,7 +92,6 @@
if("Head of Security")
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hos
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
- H.equip_or_collect(new /obj/item/gun/energy/gun(H), slot_in_backpack)
if("Captain", "Blueshield")
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/captain
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
@@ -106,7 +104,6 @@
if("Medical Doctor","Brig Physician","Virologist")
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
- H.equip_or_collect(new /obj/item/flashlight/pen(H), slot_in_backpack)
if("Paramedic")
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm
index 1bc0b8b3b9e..d01f1ccf6fe 100644
--- a/code/modules/mob/living/carbon/human/species/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/vox.dm
@@ -84,16 +84,21 @@
/datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H)
if(!H.mind || !H.mind.assigned_role || H.mind.assigned_role != "Clown" && H.mind.assigned_role != "Mime")
H.unEquip(H.wear_mask)
- H.unEquip(H.l_hand)
H.equip_or_collect(new /obj/item/clothing/mask/breath/vox(H), slot_wear_mask)
var/tank_pref = H.client && H.client.prefs ? H.client.prefs.speciesprefs : null
+ var/obj/item/tank/internal_tank
if(tank_pref)//Diseasel, here you go
- H.equip_or_collect(new /obj/item/tank/nitrogen(H), slot_l_hand)
+ internal_tank = new /obj/item/tank/nitrogen(H)
else
- H.equip_or_collect(new /obj/item/tank/emergency_oxygen/vox(H), slot_l_hand)
- to_chat(H, "You are now running on nitrogen internals from the [H.l_hand] in your hand. Your species finds oxygen toxic, so you must breathe nitrogen only.")
- H.internal = H.l_hand
+ internal_tank = new /obj/item/tank/emergency_oxygen/vox(H)
+ if(!H.equip_to_appropriate_slot(internal_tank))
+ if(!H.put_in_any_hand_if_possible(internal_tank))
+ H.unEquip(H.l_hand)
+ H.equip_or_collect(internal_tank, slot_l_hand)
+ to_chat(H, "Could not find an empty slot for internals! Please report this as a bug")
+ H.internal = internal_tank
+ to_chat(H, "You are now running on nitrogen internals from the [internal_tank]. Your species finds oxygen toxic, so you must breathe nitrogen only.")
H.update_action_buttons_icon()
/datum/species/vox/on_species_gain(mob/living/carbon/human/H)
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index 5b0c7813ef3..4e74688e10f 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -1,10 +1,5 @@
//Lallander was here
/mob/living/carbon/human/whisper(message as text)
- var/alt_name = ""
-
- if(name != GetVoice())
- alt_name = "(as [get_id_name("Unknown")])"
-
message = trim_strip_html_properly(message) //bit of duplicate code, acceptable because the workaround would be annoying
//parse the language code and consume it
@@ -23,4 +18,4 @@
message = trim_left(message)
message = handle_autohiss(message, speaking)
- whisper_say(message, speaking, alt_name)
\ No newline at end of file
+ whisper_say(message, speaking)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/slime/say.dm b/code/modules/mob/living/carbon/slime/say.dm
index 6d47231792b..04416e945ee 100644
--- a/code/modules/mob/living/carbon/slime/say.dm
+++ b/code/modules/mob/living/carbon/slime/say.dm
@@ -14,7 +14,7 @@
return 1
return ..()
-/mob/living/carbon/slime/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
+/mob/living/carbon/slime/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
if(speaker in Friends)
speech_buffer = list()
speech_buffer.Add(speaker)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 55e8536cd10..2f6bb4628c3 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -95,10 +95,10 @@ proc/get_radio_key_from_channel(var/channel)
returns[3] = speech_problem_flag
return returns
-/mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+/mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios)
switch(message_mode)
if("whisper") //all mobs can whisper by default
- whisper_say(message, speaking, alt_name)
+ whisper_say(message, speaking)
return 1
return 0
@@ -109,7 +109,7 @@ proc/get_radio_key_from_channel(var/channel)
return returns
-/mob/living/say(var/message, var/datum/language/speaking = null, var/verb = "says", var/alt_name = "", var/sanitize = TRUE, var/ignore_speech_problems = FALSE, var/ignore_atmospherics = FALSE)
+/mob/living/say(var/message, var/datum/language/speaking = null, var/verb = "says", var/sanitize = TRUE, var/ignore_speech_problems = FALSE, var/ignore_atmospherics = FALSE)
if(client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "You cannot speak in IC (Muted).")
@@ -184,7 +184,7 @@ proc/get_radio_key_from_channel(var/channel)
return 0
var/list/used_radios = list()
- if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name))
+ if(handle_message_mode(message_mode, message, verb, speaking, used_radios))
return 1
var/list/handle_v = handle_speech_sound()
@@ -268,7 +268,7 @@ proc/get_radio_key_from_channel(var/channel)
var/speech_bubble_test = say_test(message)
for(var/mob/M in listening)
- M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
+ M.hear_say(message, verb, speaking, italics, src, speech_sound, sound_vol)
if(M.client)
speech_bubble_recipients.Add(M.client)
spawn(0)
@@ -359,7 +359,7 @@ proc/get_radio_key_from_channel(var/channel)
/mob/living/proc/get_whisper_loc()
return src
-/mob/living/proc/whisper_say(var/message, var/datum/language/speaking = null, var/alt_name="", var/verb="whispers")
+/mob/living/proc/whisper_say(var/message, var/datum/language/speaking = null, var/verb="whispers")
if(client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "You cannot speak in IC (Muted).")
@@ -381,6 +381,7 @@ proc/get_radio_key_from_channel(var/channel)
var/eavesdropping_range = 2
var/watching_range = 5
var/italics = 1
+ var/adverb_added = FALSE
var/not_heard //the message displayed to people who could not hear the whispering
if(speaking)
@@ -389,6 +390,7 @@ proc/get_radio_key_from_channel(var/channel)
not_heard = "[verb] something"
else
var/adverb = pick("quietly", "softly")
+ adverb_added = TRUE
verb = "[speaking.speech_verb] [adverb]"
not_heard = "[speaking.speech_verb] something [adverb]"
else
@@ -404,7 +406,7 @@ proc/get_radio_key_from_channel(var/channel)
if(verb == "yells loudly")
verb = "slurs emphatically"
- else if(speech_problem_flag)
+ else if(speech_problem_flag && !adverb_added)
var/adverb = pick("quietly", "softly")
verb = "[verb] [adverb]"
@@ -464,14 +466,14 @@ proc/get_radio_key_from_channel(var/channel)
var/speech_bubble_test = say_test(message)
for(var/mob/M in listening)
- M.hear_say(message, verb, speaking, alt_name, italics, src)
+ M.hear_say(message, verb, speaking, italics, src)
if(M.client)
speech_bubble_recipients.Add(M.client)
if(eavesdropping.len)
var/new_message = stars(message) //hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less.
for(var/mob/M in eavesdropping)
- M.hear_say(new_message, verb, speaking, alt_name, italics, src)
+ M.hear_say(new_message, verb, speaking, italics, src)
if(M.client)
speech_bubble_recipients.Add(M.client)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index c0393d78f92..cf9102858bd 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -69,7 +69,7 @@ var/list/ai_verbs_default = list(
var/control_disabled = 0 // Set to 1 to stop AI from interacting via Click() -- TLE
var/malfhacking = 0 // More or less a copy of the above var, so that malf AIs can hack and still get new cyborgs -- NeoFite
- var/malf_cooldown = 0 //Cooldown var for malf modules
+ var/malf_cooldown = 0 //Cooldown var for malf modules, stores a worldtime + cooldown
var/obj/machinery/power/apc/malfhack = null
var/explosive = 0 //does the AI explode when it dies?
@@ -281,7 +281,7 @@ var/list/ai_verbs_default = list(
/obj/machinery/ai_powersupply
name="\improper AI power supply"
active_power_usage=1000
- use_power = 2
+ use_power = ACTIVE_POWER_USE
power_channel = EQUIP
var/mob/living/silicon/ai/powered_ai = null
invisibility = 100
@@ -303,9 +303,9 @@ var/list/ai_verbs_default = list(
return
if(!powered_ai.anchored)
loc = powered_ai.loc
- use_power = 0
+ use_power = NO_POWER_USE
if(powered_ai.anchored)
- use_power = 2
+ use_power = ACTIVE_POWER_USE
/mob/living/silicon/ai/proc/pick_icon()
set category = "AI Commands"
@@ -1250,7 +1250,7 @@ var/list/ai_verbs_default = list(
else
to_chat(src, "Target is not on or near any active cameras on the station.")
-
+
/mob/living/silicon/ai/handle_fire()
return
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 2728a1af55e..98b97ed0602 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -137,6 +137,6 @@
acceleration = !acceleration
to_chat(usr, "Camera acceleration has been toggled [acceleration ? "on" : "off"].")
-/mob/camera/aiEye/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
+/mob/camera/aiEye/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
if(relay_speech)
ai.relay_speech(speaker, message, verb, language)
diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm
index 41d4c67427d..b0f498014d8 100644
--- a/code/modules/mob/living/silicon/pai/death.dm
+++ b/code/modules/mob/living/silicon/pai/death.dm
@@ -7,7 +7,7 @@
var/turf/T = get_turf_or_move(loc)
for(var/mob/M in viewers(T))
- M.show_message("[src] emits a dull beep before it loses power and collapses.", 3, "You hear a dull beep followed by the sound of glass crunching.", 2)
+ M.show_message("[src] emits a dull beep before it loses power and collapses.", 3, "You hear a dull beep followed by the sound of glass crunching.", 2)
name = "pAI debris"
desc = "The unfortunate remains of some poor personal AI device."
icon_state = "[chassis]_dead"
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index d28ce620a0c..d635422073f 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -324,11 +324,11 @@
return
if(loc != card)
- to_chat(src, "You are already in your mobile form!")
+ to_chat(src, "You are already in your mobile form!")
return
if(world.time <= last_special)
- to_chat(src, "You must wait before folding your chassis out again!")
+ to_chat(src, "You must wait before folding your chassis out again!")
return
last_special = world.time + 200
@@ -336,7 +336,7 @@
//I'm not sure how much of this is necessary, but I would rather avoid issues.
force_fold_out()
- visible_message("[src] folds outwards, expanding into a mobile form.", "You fold outwards, expanding into a mobile form.")
+ visible_message("[src] folds outwards, expanding into a mobile form.", "You fold outwards, expanding into a mobile form.")
/mob/living/silicon/pai/proc/force_fold_out()
if(istype(card.loc, /mob))
@@ -359,11 +359,11 @@
return
if(loc == card)
- to_chat(src, "You are already in your card form!")
+ to_chat(src, "You are already in your card form!")
return
if(world.time <= last_special)
- to_chat(src, "You must wait before returning to your card form!")
+ to_chat(src, "You must wait before returning to your card form!")
return
close_up()
@@ -494,7 +494,7 @@
if(loc == card)
return
- visible_message("[src] neatly folds inwards, compacting down to a rectangular card.", "You neatly fold inwards, compacting down to a rectangular card.")
+ visible_message("[src] neatly folds inwards, compacting down to a rectangular card.", "You neatly fold inwards, compacting down to a rectangular card.")
stop_pulling()
reset_perspective(card)
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index adf6e2f7682..88d566ad692 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -281,7 +281,7 @@
grabbed_something = 1
if(grabbed_something)
- to_chat(user, "You deploy your decompiler and clear out the contents of \the [T].")
+ to_chat(user, "You deploy your decompiler and clear out the contents of \the [T].")
else
to_chat(user, "Nothing on \the [T] is useful to you.")
return
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
index 790ecaa399a..9bf388fe5fe 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
@@ -4,7 +4,7 @@
density = 1
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 20
active_power_usage = 5000
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm
index 053384baba5..779b3a2de14 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm
@@ -1,7 +1,7 @@
/mob/living/silicon/robot/drone/say(var/message, var/datum/language/speaking = null)
if(copytext(message, 1, 2) == "*")
return emote(copytext(message, 2))
-
+
if(!speaking)
speaking = parse_language(message)
if(!speaking)
@@ -10,6 +10,6 @@
if(speaking)
return ..()
-/mob/living/silicon/robot/drone/whisper_say(var/message, var/datum/language/speaking = null, var/alt_name="", var/verb="whispers")
+/mob/living/silicon/robot/drone/whisper_say(var/message, var/datum/language/speaking = null, var/verb="whispers")
say(message) //drones do not get to whisper, only speak normally
return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index f284a0b250c..d590892cc01 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -20,6 +20,9 @@
contents -= O
if(module)
O.loc = module //Return item to module so it appears in its contents, so it can be taken out again.
+ for(var/X in O.actions) // Remove assocated actions
+ var/datum/action/A = X
+ A.Remove(src)
if(module_active == O)
module_active = null
@@ -56,6 +59,7 @@
O.plane = HUD_PLANE
O.screen_loc = inv1.screen_loc
contents += O
+ set_actions(O)
else if(!module_state_2)
O.mouse_opacity = initial(O.mouse_opacity)
module_state_2 = O
@@ -63,6 +67,7 @@
O.plane = HUD_PLANE
O.screen_loc = inv2.screen_loc
contents += O
+ set_actions(O)
else if(!module_state_3)
O.mouse_opacity = initial(O.mouse_opacity)
module_state_3 = O
@@ -70,10 +75,16 @@
O.plane = HUD_PLANE
O.screen_loc = inv3.screen_loc
contents += O
+ set_actions(O)
else
to_chat(src, "You need to disable a module first!")
update_icons()
+/mob/living/silicon/robot/proc/set_actions(obj/item/I)
+ for(var/X in I.actions)
+ var/datum/action/A = X
+ A.Grant(src)
+
/mob/living/silicon/robot/proc/uneq_active()
uneq_module(module_active)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 4b127de9af7..b9a7d0d12a0 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -51,6 +51,7 @@ var/list/robot_verbs_default = list(
var/opened = 0
var/custom_panel = null
var/list/custom_panel_names = list("Cricket")
+ var/list/custom_eye_names = list("Cricket","Standard")
var/emagged = 0
var/is_emaggable = TRUE
var/eye_protection = 0
@@ -306,7 +307,7 @@ var/list/robot_verbs_default = list(
module.channels = list("Service" = 1)
module_sprites["Basic"] = "robot_old"
module_sprites["Android"] = "droid"
- module_sprites["Default"] = "robot"
+ module_sprites["Default"] = "Standard"
module_sprites["Noble-STD"] = "Noble-STD"
if("Service")
@@ -317,7 +318,7 @@ var/list/robot_verbs_default = list(
module_sprites["Bro"] = "Brobot"
module_sprites["Rich"] = "maximillion"
module_sprites["Default"] = "Service2"
- module_sprites["Standard"] = "robotServ"
+ module_sprites["Standard"] = "Standard-Serv"
module_sprites["Noble-SRV"] = "Noble-SRV"
module_sprites["Cricket"] = "Cricket-SERV"
@@ -329,7 +330,7 @@ var/list/robot_verbs_default = list(
module_sprites["Basic"] = "Miner_old"
module_sprites["Advanced Droid"] = "droid-miner"
module_sprites["Treadhead"] = "Miner"
- module_sprites["Standard"] = "robotMine"
+ module_sprites["Standard"] = "Standard-Mine"
module_sprites["Noble-DIG"] = "Noble-DIG"
module_sprites["Cricket"] = "Cricket-MINE"
@@ -342,7 +343,7 @@ var/list/robot_verbs_default = list(
module_sprites["Surgeon"] = "surgeon"
module_sprites["Advanced Droid"] = "droid-medical"
module_sprites["Needles"] = "medicalrobot"
- module_sprites["Standard"] = "robotMedi"
+ module_sprites["Standard"] = "Standard-Medi"
module_sprites["Noble-MED"] = "Noble-MED"
module_sprites["Cricket"] = "Cricket-MEDI"
status_flags &= ~CANPUSH
@@ -354,7 +355,7 @@ var/list/robot_verbs_default = list(
module_sprites["Red Knight"] = "Security"
module_sprites["Black Knight"] = "securityrobot"
module_sprites["Bloodhound"] = "bloodhound"
- module_sprites["Standard"] = "robotSecy"
+ module_sprites["Standard"] = "Standard-Secy"
module_sprites["Noble-SEC"] = "Noble-SEC"
module_sprites["Cricket"] = "Cricket-SEC"
status_flags &= ~CANPUSH
@@ -367,7 +368,7 @@ var/list/robot_verbs_default = list(
module_sprites["Basic"] = "Engineering"
module_sprites["Antique"] = "engineerrobot"
module_sprites["Landmate"] = "landmate"
- module_sprites["Standard"] = "robotEngi"
+ module_sprites["Standard"] = "Standard-Engi"
module_sprites["Noble-ENG"] = "Noble-ENG"
module_sprites["Cricket"] = "Cricket-ENGI"
magpulse = 1
@@ -378,7 +379,7 @@ var/list/robot_verbs_default = list(
module_sprites["Basic"] = "JanBot2"
module_sprites["Mopbot"] = "janitorrobot"
module_sprites["Mop Gear Rex"] = "mopgearrex"
- module_sprites["Standard"] = "robotJani"
+ module_sprites["Standard"] = "Standard-Jani"
module_sprites["Noble-CLN"] = "Noble-CLN"
module_sprites["Cricket"] = "Cricket-JANI"
@@ -652,10 +653,13 @@ var/list/robot_verbs_default = list(
var/datum/robot_component/C = components[V]
if(C.installed == 1 || C.installed == -1)
removable_components += V
-
+ if(module)
+ removable_components += module.custom_removals
var/remove = input(user, "Which component do you want to pry out?", "Remove Component") as null|anything in removable_components
if(!remove)
return
+ if(module && module.handle_custom_removal(remove, user, W, params))
+ return
var/datum/robot_component/C = components[remove]
var/obj/item/robot_parts/robot_component/I = C.wrapped
to_chat(user, "You remove \the [I].")
@@ -870,7 +874,10 @@ var/list/robot_verbs_default = list(
overlays.Cut()
if(stat != DEAD && !(paralysis || stunned || weakened || low_power_mode)) //Not dead, not stunned.
- overlays += "eyes-[icon_state]"
+ if(custom_panel in custom_eye_names)
+ overlays += "eyes-[custom_panel]"
+ else
+ overlays += "eyes-[icon_state]"
else
overlays -= "eyes"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index e9aadf5086a..486b2a72e8f 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -15,6 +15,7 @@
var/list/stacktypes
var/channels = list()
+ var/list/custom_removals = list()
/obj/item/robot_module/emp_act(severity)
@@ -103,6 +104,10 @@
qdel(A)
R.module_actions.Cut()
+// Return true in an overridden subtype to prevent normal removal handling
+/obj/item/robot_module/proc/handle_custom_removal(component_id, mob/living/user, obj/item/W, params)
+ return FALSE
+
/obj/item/robot_module/standard
name = "standard robot module"
module_type = "Standard"
@@ -325,6 +330,7 @@
module_actions = list(
/datum/action/innate/robot_sight/meson,
)
+ custom_removals = list("KA modkits")
/obj/item/robot_module/miner/New()
..()
@@ -341,6 +347,13 @@
fix_modules()
+/obj/item/robot_module/miner/handle_custom_removal(component_id, mob/living/user, obj/item/W, params)
+ if(component_id == "KA modkits")
+ for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/D in src)
+ D.attackby(W, user, params)
+ return TRUE
+ return ..()
+
/obj/item/robot_module/deathsquad
name = "NT advanced combat module"
module_type = "Malf"
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index a66a9f30de0..48297dbb401 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -1,9 +1,9 @@
-/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios)
log_say(message, src)
if(..())
return 1
-/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios)
if(..())
return 1
if(message_mode)
@@ -15,7 +15,7 @@
message_mode = null
return radio.talk_into(src,message,message_mode,verb,speaking)
-/mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+/mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios)
if(..())
return 1
if(message_mode == "department")
@@ -30,11 +30,11 @@
message_mode = null
return aiRadio.talk_into(src,message,message_mode,verb,speaking)
-/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios)
if(..())
return 1
else if(message_mode == "whisper")
- whisper_say(message, speaking, alt_name)
+ whisper_say(message, speaking)
return 1
else if(message_mode)
if(message_mode == "general")
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 5e79c315f42..7f5c1916619 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -889,7 +889,7 @@ Pass a positive integer as an argument to override a bot's default speed.
// Machinery to simplify topic and access calls
/obj/machinery/bot_core
- use_power = 0
+ use_power = NO_POWER_USE
var/mob/living/simple_animal/bot/owner = null
/obj/machinery/bot_core/New(loc)
@@ -1106,4 +1106,4 @@ Pass a positive integer as an argument to override a bot's default speed.
var/image/I = path[path[1]]
if(I)
I.icon = null
- path.Cut(1, 2)
\ No newline at end of file
+ path.Cut(1, 2)
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 0efaefcce07..619d0316349 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -694,7 +694,7 @@
/mob/living/simple_animal/bot/mulebot/proc/RunOver(mob/living/carbon/human/H)
add_attack_logs(src, H, "Run over (DAMTYPE: [uppertext(BRUTE)])")
H.visible_message("[src] drives over [H]!", \
- "[src] drives over you!")
+ "[src] drives over you!")
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
var/damage = rand(5,15)
@@ -706,10 +706,14 @@
H.apply_damage(0.5*damage, BRUTE, "r_arm", run_armor_check("r_arm", "melee"))
- var/turf/T = get_turf(src)
- H.add_mob_blood(H)
- H.add_splatter_floor(T)
+
+ if(NO_BLOOD in H.dna.species.species_traits)//Does the run over mob have blood?
+ return//If it doesn't it shouldn't bleed (Though a check should be made eventually for things with liquid in them, like slime people, vox armalis, etc.)
+
+ var/turf/T = get_turf(src)//Where are we?
+ H.add_mob_blood(H)//Cover the victim in their own blood.
+ H.add_splatter_floor(T)//Put the blood where we are.
bloodiness += 4
var/list/blood_dna = H.get_blood_dna_list()
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index ef5de1908a8..451f21ce09a 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -175,7 +175,7 @@ Auto Patrol: []"},
mode = BOT_HUNT
/mob/living/simple_animal/bot/secbot/attack_hand(mob/living/carbon/human/H)
- if(H.a_intent == INTENT_HARM)
+ if(H.a_intent == INTENT_HARM || H.a_intent == INTENT_DISARM)
retaliate(H)
return ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 2514af0eebd..bda169fe576 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -78,7 +78,7 @@
to_chat(user, "[src] is wearing too much armor! You can't cause [p_them()] any damage.")
visible_message(" [user] hits [src] with [O], however [src] is too armored.")
else
- to_chat(user, "[src] is wearing too much armor! You can't reach [p_their()] skin.")
+ to_chat(user, "[src] is wearing too much armor! You can't reach [p_their()] skin.")
visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 079ec7df1d2..762dea31272 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -186,9 +186,7 @@
if(istype(blobmind) && istype(C))
blobmind.special_role = SPECIAL_ROLE_BLOB
var/obj/structure/blob/core/core = new(T, 200, C, 3)
- if(core.overmind && core.overmind.mind)
- //core.overmind.mind.name = blob.name
- core.overmind.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
+ core.lateblobtimer()
else
new /obj/structure/blob/core(T) // Ghosts will be prompted to control it.
if(ismob(loc)) // in case some taj/etc ate the mouse.
diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm
index cdbc64eea1e..30546ecb17d 100644
--- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm
+++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm
@@ -168,11 +168,11 @@
W.ChangeTurf(/turf/simulated/floor/plating)
new /obj/item/stack/sheet/metal(src, plasmaPoopPotential)
currentlyEating = null //ffs, unstore this
- src.visible_message("\the [src] eats \the [noms]!","You eat \the [noms]!","You hear gnashing.") //inform everyone what the fucking worm is doing.
+ src.visible_message("\the [src] eats \the [noms]!","You eat \the [noms]!","You hear gnashing.") //inform everyone what the fucking worm is doing.
else
currentlyEating = null
contents += noms
- src.visible_message("\the [src] eats \the [noms]!","You eat \the [noms]!","You hear gnashing.") //inform everyone what the fucking worm is doing.
+ src.visible_message("\the [src] eats \the [noms]!","You eat \the [noms]!","You hear gnashing.") //inform everyone what the fucking worm is doing.
if(ismob(noms))
var/mob/M = noms //typecast because noms isn't movable
M.loc = src //because just setting a mob loc to null breaks the camera and such
@@ -331,4 +331,4 @@
/mob/living/simple_animal/hostile/spaceWorm/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect, end_pixel_y)
..()
if(previousWorm)
- previousWorm.do_attack_animation(src)
\ No newline at end of file
+ previousWorm.do_attack_animation(src)
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index dba62b4744c..ed4c074bff0 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -703,12 +703,12 @@
available_channels = list(":e")
..()
-/mob/living/simple_animal/parrot/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios, var/alt_name)
+/mob/living/simple_animal/parrot/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios)
if(message_mode && istype(ears))
ears.talk_into(src, message, message_mode, verb, speaking)
used_radios += ears
-/mob/living/simple_animal/parrot/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null)
+/mob/living/simple_animal/parrot/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/italics = 0, var/mob/speaker = null)
if(speaker != src && prob(50))
parrot_hear(html_decode(message))
..()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 841c17a248e..77c98392740 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -47,6 +47,9 @@
/mob/proc/generate_name()
return name
+/mob/proc/GetAltName()
+ return ""
+
/mob/proc/Cell()
set category = "Admin"
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 46b5d1b0606..01bcb2bcc1a 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -469,7 +469,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM)
/proc/notify_ghosts(message, ghost_sound = null, enter_link = null, title = null, atom/source = null, image/alert_overlay = null, flashwindow = TRUE, var/action = NOTIFY_JUMP) //Easy notification of ghosts.
for(var/mob/dead/observer/O in player_list)
if(O.client)
- to_chat(O, "[message][(enter_link) ? " [enter_link]" : ""]")
+ to_chat(O, "[message][(enter_link) ? " [enter_link]" : ""]")
if(ghost_sound)
O << sound(ghost_sound)
if(flashwindow)
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 8d789763375..97a0dc9ca80 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -316,12 +316,10 @@
job_master.AssignRole(src, rank, 1)
var/mob/living/character = create_character() //creates the human and transfers vars and mind
- character = job_master.EquipRank(character, rank, 1) //equips the human
- EquipCustomItems(character)
+ character = job_master.AssignRank(character, rank, 1) //equips the human
// AIs don't need a spawnpoint, they must spawn at an empty core
if(character.mind.assigned_role == "AI")
-
var/mob/living/silicon/ai/ai_character = character.AIize() // AIize the character, but don't move them yet
// IsJobAvailable for AI checks that there is an empty core available in this list
@@ -365,6 +363,9 @@
ticker.mode.latespawn(character)
+ character = job_master.EquipRank(character, rank, 1) //equips the human
+ EquipCustomItems(character)
+
if(character.mind.assigned_role == "Cyborg")
AnnounceCyborg(character, rank, join_message)
callHook("latespawn", list(character))
diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm
index 2ae0c251f20..436070470ea 100644
--- a/code/modules/modular_computers/NTNet/NTNet_relay.dm
+++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm
@@ -2,7 +2,7 @@
/obj/machinery/ntnet_relay
name = "NTNet Quantum Relay"
desc = "A very complex router and transmitter capable of connecting electronic devices together. Looks fragile."
- use_power = 2
+ use_power = ACTIVE_POWER_USE
active_power_usage = 10000 //10kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational. Used to be 20 but that actually drained the smes one round
idle_power_usage = 100
icon = 'icons/obj/stationobjs.dmi'
@@ -38,9 +38,9 @@
/obj/machinery/ntnet_relay/process()
if(operable())
- use_power = 2
+ use_power = ACTIVE_POWER_USE
else
- use_power = 1
+ use_power = IDLE_POWER_USE
update_icon()
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index 832f5558cd8..36c4409fb34 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -7,7 +7,7 @@ var/list/global_modular_computers = list()
name = "modular computer"
desc = "An advanced computer."
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 5
var/hardware_flag = 0 // A flag that describes this device type
var/last_power_usage = 0 // Power usage during last tick
diff --git a/code/modules/modular_computers/hardware/printer.dm b/code/modules/modular_computers/hardware/printer.dm
index 3be4a091301..60f711ad960 100644
--- a/code/modules/modular_computers/hardware/printer.dm
+++ b/code/modules/modular_computers/hardware/printer.dm
@@ -24,7 +24,7 @@
if(!check_functionality())
return FALSE
- var/obj/item/paper/P = new/obj/item/paper(get_turf(holder))
+ var/obj/item/paper/P = new/obj/item/paper(holder.drop_location())
// Damaged printer causes the resulting paper to be somewhat harder to read.
if(damage > damage_malfunction)
diff --git a/code/modules/nano/modules/crew_monitor.dm b/code/modules/nano/modules/crew_monitor.dm
index ed102005ed5..19e6dfef3f7 100644
--- a/code/modules/nano/modules/crew_monitor.dm
+++ b/code/modules/nano/modules/crew_monitor.dm
@@ -6,7 +6,7 @@
return 1
var/turf/T = get_turf(nano_host())
if(!T || !is_level_reachable(T.z))
- to_chat(usr, "Unable to establish a connection: You're too far away from the station!")
+ to_chat(usr, "Unable to establish a connection: You're too far away from the station!")
return 0
if(href_list["track"])
if(isAI(usr))
diff --git a/code/modules/ninja/martial_art.dm b/code/modules/ninja/martial_art.dm
index c97a3e505c3..a7edb67407f 100644
--- a/code/modules/ninja/martial_art.dm
+++ b/code/modules/ninja/martial_art.dm
@@ -87,8 +87,7 @@
"[A]\ puts you in a [hold_name]! You are unable to speak!")
step_to(D,get_step(D,D.dir),1)
- D.grabbedby(A, 1)
- var/obj/item/grab/G = A.get_active_hand()
+ var/obj/item/grab/G = D.grabbedby(A, 1)
if(G)
G.state = GRAB_NECK
@@ -136,8 +135,7 @@
return A.pointed(D)
/datum/martial_art/ninja_martial_art/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) //Instant aggressive grab
- D.grabbedby(A)
- var/obj/item/grab/G = A.get_active_hand()
+ var/obj/item/grab/G = D.grabbedby(A)
if(G)
G.state = GRAB_AGGRESSIVE
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index ad2fdf38eb1..2b699c36530 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -13,7 +13,7 @@ var/list/alldepartments = list()
var/long_range_enabled = 0 // Can we send messages off the station?
req_one_access = list(access_lawyer, access_heads, access_armory)
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 30
active_power_usage = 200
diff --git a/code/modules/paperwork/frames.dm b/code/modules/paperwork/frames.dm
index c0455b872b2..4203b5abfff 100644
--- a/code/modules/paperwork/frames.dm
+++ b/code/modules/paperwork/frames.dm
@@ -35,8 +35,6 @@
icon_state = "[icon_base]-photo"
else if(istype(displayed, /obj/structure/sign/poster))
icon_state = "[icon_base]-[(displayed.icon_state in wide_posters) ? "wposter" : "poster"]"
- else if(istype(displayed, /obj/item/canvas))
- icon_state = "[icon_base]-canvas-[displayed.icon_state]"
else
icon_state = "[icon_base]-paper"
@@ -61,7 +59,7 @@
if(istype(I, /obj/item/screwdriver))
if(displayed)
playsound(src, I.usesound, 100, 1)
- user.visible_message("[user] unfastens \the [displayed] out of \the [src].", "You unfasten \the [displayed] out of \the [src].")
+ user.visible_message("[user] unfastens \the [displayed] out of \the [src].", "You unfasten \the [displayed] out of \the [src].")
if(istype(displayed, /obj/structure/sign/poster))
var/obj/structure/sign/poster/P = displayed
@@ -72,10 +70,10 @@
name = initial(name)
update_icon()
else
- to_chat(user, "There is nothing to remove from \the [src].")
+ to_chat(user, "There is nothing to remove from \the [src].")
else if(istype(I, /obj/item/crowbar))
playsound(src, I.usesound, 100, 1)
- user.visible_message("[user] breaks down \the [src].", "You break down \the [src].")
+ user.visible_message("[user] breaks down \the [src].", "You break down \the [src].")
for(var/A in contents)
if(istype(A, /obj/structure/sign/poster))
var/obj/structure/sign/poster/P = A
@@ -91,7 +89,7 @@
insert(I)
update_icon()
else
- to_chat(user, "\The [src] already contains \a [displayed].")
+ to_chat(user, "\The [src] already contains \a [displayed].")
else
return ..()
@@ -214,10 +212,10 @@
/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/screwdriver))
playsound(src, I.usesound, 100, 1)
- user.visible_message("[user] begins to unfasten \the [src] from the wall.", "You begin to unfasten \the [src] from the wall.")
+ user.visible_message("[user] begins to unfasten \the [src] from the wall.", "You begin to unfasten \the [src] from the wall.")
if(do_after(user, 100 * I.toolspeed, target = src))
playsound(src, I.usesound, 100, 1)
- user.visible_message("[user] unfastens \the [src] from the wall.", "You unfasten \the [src] from the wall.")
+ user.visible_message("[user] unfastens \the [src] from the wall.", "You unfasten \the [src] from the wall.")
frame.forceMove(user.loc)
frame = null
if(explosive)
@@ -231,7 +229,7 @@
if(!tilted)
to_chat(user, "\The [src] needs to be already tilted before being rigged with \the [I].")
return 1
- user.visible_message("[user] is fiddling around behind \the [src].", "You begin to secure \the [I] behind \the [src].")
+ user.visible_message("[user] is fiddling around behind \the [src].", "You begin to secure \the [I] behind \the [src].")
if(do_after(user, 150, target = src))
if(explosive || !tilted)
return
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index b096c768ee0..a8a0c8ddd19 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -7,7 +7,7 @@
var/insert_anim = "bigscanner1"
anchored = 1
density = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 30
active_power_usage = 200
power_channel = EQUIP
diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm
index 55403b372cc..e144841a144 100644
--- a/code/modules/pda/utilities.dm
+++ b/code/modules/pda/utilities.dm
@@ -41,24 +41,24 @@
icon = "heart-o"
/datum/data/pda/utility/scanmode/medical/scan_mob(mob/living/C as mob, mob/living/user as mob)
- C.visible_message("[user] has analyzed [C]'s vitals!")
+ C.visible_message("[user] has analyzed [C]'s vitals!")
- user.show_message("Analyzing Results for [C]:")
- user.show_message("\t Overall Status: [C.stat > 1 ? "dead" : "[C.health]% healthy"]", 1)
- user.show_message("\t Damage Specifics: [C.getOxyLoss() > 50 ? "" : ""][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "" : ""][C.getToxLoss()]-[C.getFireLoss() > 50 ? "" : ""][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "" : ""][C.getBruteLoss()]", 1)
- user.show_message("\t Key: Suffocation/Toxin/Burns/Brute", 1)
- user.show_message("\t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)", 1)
+ user.show_message("Analyzing Results for [C]:")
+ user.show_message("\t Overall Status: [C.stat > 1 ? "dead" : "[C.health]% healthy"]", 1)
+ user.show_message("\t Damage Specifics: [C.getOxyLoss() > 50 ? "" : ""][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "" : ""][C.getToxLoss()]-[C.getFireLoss() > 50 ? "" : ""][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "" : ""][C.getBruteLoss()]", 1)
+ user.show_message("\t Key: Suffocation/Toxin/Burns/Brute", 1)
+ user.show_message("\t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)", 1)
if(C.timeofdeath && (C.stat == DEAD || (C.status_flags & FAKEDEATH)))
- user.show_message("\t Time of Death: [station_time_timestamp("hh:mm:ss", C.timeofdeath)]")
+ user.show_message("\t Time of Death: [station_time_timestamp("hh:mm:ss", C.timeofdeath)]")
if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C
var/list/damaged = H.get_damaged_organs(1,1)
- user.show_message("Localized Damage, Brute/Burn:",1)
+ user.show_message("Localized Damage, Brute/Burn:",1)
if(length(damaged)>0)
for(var/obj/item/organ/external/org in damaged)
- user.show_message("\t [capitalize(org.name)]: [org.brute_dam > 0 ? "[org.brute_dam]" : "0"]-[org.burn_dam > 0 ? "[org.burn_dam]" : "0"]", 1)
+ user.show_message("\t [capitalize(org.name)]: [org.brute_dam > 0 ? "[org.brute_dam]" : "0"]-[org.burn_dam > 0 ? "[org.burn_dam]" : "0"]", 1)
else
- user.show_message("\t Limbs are OK.",1)
+ user.show_message("\t Limbs are OK.",1)
/datum/data/pda/utility/scanmode/dna
base_name = "DNA Scanner"
@@ -68,9 +68,9 @@
if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C
if(!istype(H.dna, /datum/dna))
- to_chat(user, "No fingerprints found on [H]")
+ to_chat(user, "No fingerprints found on [H]")
else
- to_chat(user, "[H]'s Fingerprints: [md5(H.dna.uni_identity)]")
+ to_chat(user, "[H]'s Fingerprints: [md5(H.dna.uni_identity)]")
scan_blood(C, user)
/datum/data/pda/utility/scanmode/dna/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob)
@@ -78,27 +78,27 @@
/datum/data/pda/utility/scanmode/dna/proc/scan_blood(atom/A, mob/user)
if(!A.blood_DNA)
- to_chat(user, "No blood found on [A]")
+ to_chat(user, "No blood found on [A]")
if(A.blood_DNA)
qdel(A.blood_DNA)
else
- to_chat(user, "Blood found on [A]. Analysing...")
+ to_chat(user, "Blood found on [A]. Analysing...")
spawn(15)
for(var/blood in A.blood_DNA)
- to_chat(user, "Blood type: [A.blood_DNA[blood]]\nDNA: [blood]")
+ to_chat(user, "Blood type: [A.blood_DNA[blood]]\nDNA: [blood]")
/datum/data/pda/utility/scanmode/halogen
base_name = "Halogen Counter"
icon = "exclamation-circle"
/datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C as mob, mob/living/user as mob)
- C.visible_message("[user] has analyzed [C]'s radiation levels!")
+ C.visible_message("[user] has analyzed [C]'s radiation levels!")
- user.show_message("Analyzing Results for [C]:")
+ user.show_message("Analyzing Results for [C]:")
if(C.radiation)
- user.show_message("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]")
+ user.show_message("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]")
else
- user.show_message("No radiation detected.")
+ user.show_message("No radiation detected.")
/datum/data/pda/utility/scanmode/reagent
base_name = "Reagent Scanner"
@@ -194,7 +194,7 @@
// notehtml ISN'T set to allow user to get their old notes back. A better implementation would add a "scanned documents"
// feature to the PDA, which would better convey the availability of the feature, but this will work for now.
// Inform the user
- to_chat(user, "Paper scanned and OCRed to notekeeper.")//concept of scanning paper copyright brainoblivion 2009
+ to_chat(user, "Paper scanned and OCRed to notekeeper.")//concept of scanning paper copyright brainoblivion 2009
else
- to_chat(user, "Error scanning [A].")
+ to_chat(user, "Error scanning [A].")
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 3ba1a4b5210..a0df2084b2f 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -47,7 +47,7 @@
desc = "A control terminal for the area electrical systems."
icon_state = "apc0"
anchored = 1
- use_power = 0
+ use_power = NO_POWER_USE
req_access = list(access_engine_equip)
var/spooky=0
var/area/area
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index 8c9ee3eda0d..7bbb5ac20f9 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -4,7 +4,7 @@
icon_state = "teg"
anchored = 0
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
var/obj/machinery/atmospherics/binary/circulator/cold_circ
var/obj/machinery/atmospherics/binary/circulator/hot_circ
@@ -244,4 +244,4 @@
/obj/machinery/power/generator/power_change()
..()
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 42f7cbde657..8f9d9fb14cd 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -24,7 +24,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
icon = 'icons/obj/machines/gravity_generator.dmi'
anchored = 1
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
unacidable = 1
var/sprite_number = 0
@@ -101,7 +101,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
active_power_usage = 3000
power_channel = ENVIRON
sprite_number = 8
- use_power = 1
+ use_power = IDLE_POWER_USE
interact_offline = 1
var/on = 1
var/breaker = 1
@@ -287,7 +287,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
/obj/machinery/gravity_generator/main/proc/set_state(var/new_state)
charging_state = POWER_IDLE
on = new_state
- use_power = on ? 2 : 1
+ use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
// Sound the alert if gravity was just enabled or disabled.
var/alert = 0
var/area/area = get_area(src)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index df12267015f..f83b00ec0d3 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -133,7 +133,7 @@
desc = "A lighting fixture."
anchored = 1
layer = 5 // They were appearing under mobs which is a little weird - Ostaf
- use_power = 2
+ use_power = ACTIVE_POWER_USE
idle_power_usage = 2
active_power_usage = 20
power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
@@ -258,10 +258,10 @@
on = 0
set_light(0)
else
- use_power = 2
+ use_power = ACTIVE_POWER_USE
set_light(BR, PO, CO)
else
- use_power = 1
+ use_power = IDLE_POWER_USE
set_light(0)
active_power_usage = (brightness_range * 10)
@@ -484,7 +484,7 @@
// create a light tube/bulb item and put it in the user's hand
- var/obj/item/light/L = new light_type()
+ var/obj/item/light/L = new light_type(get_turf(user))
L.status = status
L.rigged = rigged
L.brightness_range = brightness_range
@@ -499,7 +499,7 @@
L.update()
L.add_fingerprint(user)
- user.put_in_active_hand(L) //puts it in our active hand
+ user.put_in_hands(L) //puts it in our active hand
status = LIGHT_EMPTY
update()
@@ -576,7 +576,7 @@
/obj/machinery/light/blob_act()
if(prob(75))
- broken()
+ qdel(src)
// timed process
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 2892d0245b2..bf2563fe310 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -6,7 +6,7 @@
icon_state = "portgen0_0"
density = 1
anchored = 0
- use_power = 0
+ use_power = NO_POWER_USE
var/active = 0
var/power_gen = 5000
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 15b47a47635..0e255a804fe 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -12,7 +12,7 @@
anchored = 1.0
on_blueprints = TRUE
var/datum/powernet/powernet = null
- use_power = 0
+ use_power = NO_POWER_USE
idle_power_usage = 0
active_power_usage = 0
@@ -297,7 +297,7 @@
//source is an object caused electrocuting (airlock, grille, etc)
//No animations will be performed by this proc.
/proc/electrocute_mob(mob/living/carbon/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0)
- if(!istype(M))
+ if(!istype(M))
return 0
if(istype(M.loc,/obj/mecha))
return 0 //feckin mechs are dumb
@@ -305,7 +305,7 @@
var/mob/living/carbon/human/H = M
if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
- if(G.siemens_coefficient == 0)
+ if(G.siemens_coefficient == 0)
return 0 //to avoid spamming with insulated glvoes on
var/area/source_area
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index d54deb2f6f1..a85d9e880bd 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -8,7 +8,7 @@ var/global/list/rad_collectors = list()
anchored = 0
density = 1
req_access = list(access_engine_equip)
-// use_power = 0
+// use_power = NO_POWER_USE
var/obj/item/tank/plasma/P = null
var/last_power = 0
var/active = 0
@@ -148,4 +148,3 @@ var/global/list/rad_collectors = list()
flick("ca_deactive", src)
update_icons()
return
-
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 3a5a059d670..0e9bdd8ddf3 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -6,7 +6,7 @@
anchored = 1
density = 0
unacidable = 1
- use_power = 0
+ use_power = NO_POWER_USE
light_range = 4
layer = OBJ_LAYER + 0.1
var/obj/machinery/field/generator/FG1 = null
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index a6c86d3f2ef..0bcde54af4b 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -7,7 +7,7 @@
density = 1
req_access = list(access_engine_equip)
- use_power = 0
+ use_power = NO_POWER_USE
idle_power_usage = 10
active_power_usage = 300
@@ -167,7 +167,7 @@
/* if((severity == 1)&&prob(1)&&prob(1))
if(src.active)
src.active = 0
- src.use_power = 1 */
+ src.use_power = IDLE_POWER_USE */
return 1
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 11651ff13fe..0f281c634e3 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -26,7 +26,7 @@ field_generator power level display
icon_state = "Field_Gen"
anchored = 0
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
armor = list(melee = 25, bullet = 10, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0)
var/const/num_power_levels = 6 // Total number of power level icon has
var/power_level = 0
diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm
index 02a015ba6d5..69153cb4d89 100644
--- a/code/modules/power/singularity/generator.dm
+++ b/code/modules/power/singularity/generator.dm
@@ -6,7 +6,7 @@
icon_state = "TheSingGen"
anchored = 0
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
var/energy = 0
var/creation_type = /obj/singularity
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index dfbedc07ad2..c6c6de434c2 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -281,7 +281,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
icon_state = "none"
anchored = 0
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
idle_power_usage = 0
active_power_usage = 0
var/construction_state = 0
@@ -408,10 +408,10 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
if(construction_state < 3)//Was taken apart, update state
update_state()
if(use_power)
- use_power = 0
+ use_power = NO_POWER_USE
construction_state = temp_state
if(construction_state >= 3)
- use_power = 1
+ use_power = IDLE_POWER_USE
update_icon()
return 1
return 0
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 42fbb784f49..bf20ef45140 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -6,7 +6,7 @@
reference = "control_box"
anchored = 0
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
idle_power_usage = 500
active_power_usage = 10000
construction_state = 0
@@ -42,7 +42,7 @@
/obj/machinery/particle_accelerator/control_box/update_state()
if(construction_state < 3)
- use_power = 0
+ use_power = NO_POWER_USE
assembled = 0
active = 0
for(var/obj/structure/particle_accelerator/part in connected_parts)
@@ -52,7 +52,7 @@
connected_parts = list()
return
if(!part_scan())
- use_power = 1
+ use_power = IDLE_POWER_USE
active = 0
connected_parts = list()
@@ -147,9 +147,9 @@
..()
if(stat & NOPOWER)
active = 0
- use_power = 0
+ use_power = NO_POWER_USE
else if(!stat && construction_state <= 3)
- use_power = 1
+ use_power = IDLE_POWER_USE
update_icon()
if((stat & NOPOWER) || (!stat && construction_state <= 3)) //Only update the part icons if something's changed (i.e. any of the above condition sets are met).
@@ -231,13 +231,13 @@
log_game("PA Control Computer turned ON by [key_name(usr)] in ([x],[y],[z])")
use_log += text("\[[time_stamp()]\] [key_name(usr)] has turned on the PA Control Computer.")
if(active)
- use_power = 2
+ use_power = ACTIVE_POWER_USE
for(var/obj/structure/particle_accelerator/part in connected_parts)
part.strength = strength
part.powered = 1
part.update_icon()
else
- use_power = 1
+ use_power = IDLE_POWER_USE
for(var/obj/structure/particle_accelerator/part in connected_parts)
part.strength = null
part.powered = 0
@@ -276,4 +276,4 @@
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
popup.open()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index a2025376e9d..7342c1f26c1 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -8,7 +8,7 @@
icon_state = "sp_base"
anchored = 1
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
idle_power_usage = 0
active_power_usage = 0
var/id = 0
@@ -279,7 +279,7 @@
icon_state = "computer"
anchored = 1
density = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 250
var/icon_screen = "solar"
var/icon_keyboard = "power_key"
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index 20f4031a8ce..e4e3275ef26 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -10,7 +10,7 @@
icon_state = "tracker"
anchored = 1
density = 1
- use_power = 0
+ use_power = NO_POWER_USE
var/id = 0
var/sun_angle = 0 // sun angle as set by sun datum
@@ -82,4 +82,4 @@
icon = 'icons/obj/doors/door_assembly.dmi'
icon_state = "door_electronics"
w_class = WEIGHT_CLASS_SMALL
- origin_tech = "engineering=2;programming=1"
\ No newline at end of file
+ origin_tech = "engineering=2;programming=1"
diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm
index 762d442a2a9..4f7e7e9c895 100644
--- a/code/modules/power/treadmill.dm
+++ b/code/modules/power/treadmill.dm
@@ -8,7 +8,7 @@
desc = "A power-generating treadmill."
layer = 2.2
anchored = 1
- use_power = 0
+ use_power = NO_POWER_USE
var/speed = 0
var/friction = 0.15 // lose this much speed every ptick
diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm
index 08a2104383d..9d16a9c2123 100644
--- a/code/modules/projectiles/firing.dm
+++ b/code/modules/projectiles/firing.dm
@@ -40,6 +40,12 @@
if(!istype(targloc) || !istype(curloc) || !BB)
return 0
BB.ammo_casing = src
+
+ if(target && get_dist(user, target) <= 1) //Point blank shot must always hit
+ target.bullet_act(BB, BB.def_zone)
+ QDEL_NULL(BB)
+ return 1
+
if(targloc == curloc)
if(target) //if the target is right on our location we go straight to bullet_act()
target.bullet_act(BB, BB.def_zone)
diff --git a/code/modules/projectiles/guns/dartgun.dm b/code/modules/projectiles/guns/dartgun.dm
index c279abdc5c1..5c78613fbdf 100644
--- a/code/modules/projectiles/guns/dartgun.dm
+++ b/code/modules/projectiles/guns/dartgun.dm
@@ -58,11 +58,11 @@
/obj/item/gun/dartgun/examine(mob/user)
if(..(user, 2))
if(beakers.len)
- to_chat(user, "[src] contains:")
for(var/obj/item/reagent_containers/glass/beaker/B in beakers)
if(B.reagents && B.reagents.reagent_list.len)
for(var/datum/reagent/R in B.reagents.reagent_list)
- to_chat(user, "[R.volume] units of [R.name]")
/obj/item/gun/dartgun/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/dart_cartridge))
@@ -99,7 +99,7 @@
return
B.forceMove(src)
beakers += B
- to_chat(user, "You slot [B] into [src].")
src.updateUsrDialog()
/obj/item/gun/dartgun/can_shoot()
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 0cd3a2ce0b2..85ec203e063 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -124,7 +124,7 @@
if(!suppressed)
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
else if(isliving(loc))
- to_chat(loc, "[src] silently charges up.")
+ to_chat(loc, "[src] silently charges up.")
update_icon()
overheat = FALSE
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index 94f397b45bf..f6d84635c08 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -27,7 +27,7 @@
if(no_den_usage)
var/area/A = get_area(user)
if(istype(A, /area/wizard_station))
- to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].")
+ to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].")
return
else
no_den_usage = 0
@@ -72,7 +72,7 @@
return
/obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj)
- to_chat(user, "The [name] whizzles quietly.")
+ to_chat(user, "The [name] whizzles quietly.")
return
/obj/item/gun/magic/suicide_act(mob/user)
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index cae9d11cbb6..e00c6e16724 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -38,7 +38,7 @@
if(no_den_usage)
var/area/A = get_area(user)
if(istype(A, /area/wizard_station))
- to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].")
+ to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].")
return
else
no_den_usage = 0
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index d4d232d2ed7..cf291fba675 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -4,7 +4,7 @@
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "dispenser"
- use_power = 0
+ use_power = NO_POWER_USE
idle_power_usage = 40
var/ui_title = "Chem Dispenser 5000"
var/energy = 100
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index 16914c77c4d..2d031d9c2c5 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -4,7 +4,7 @@
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "mixer0b"
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 40
var/obj/item/reagent_containers/beaker = null
var/desired_temp = 300
@@ -154,4 +154,4 @@
beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list...
data["beakerContents"] = beakerContents
- return data
\ No newline at end of file
+ return data
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 90f9ed47eec..2a7dac0f48d 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -4,7 +4,7 @@
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "mixer0"
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 20
var/obj/item/reagent_containers/beaker = null
var/obj/item/storage/pill_bottle/loaded_pill_bottle = null
@@ -416,4 +416,4 @@
to_chat(user, "You can't use the [name] while it's panel is opened!")
return 1
else
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 8296550d8f9..ee2ac418555 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -6,7 +6,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "mixer0"
circuit = /obj/item/circuitboard/pandemic
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 20
var/temp_html = ""
var/wait = null
@@ -294,4 +294,4 @@
..()
return
else
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index ce5ed918932..5948d29e4cd 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -4,7 +4,7 @@
icon_state = "juicer1"
layer = 2.9
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 100
pass_flags = PASSTABLE
@@ -33,7 +33,6 @@
/obj/item/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0),
//Blender Stuff
- /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0),
/obj/item/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0),
/obj/item/reagent_containers/food/snacks/grown/wheat = list("flour" = -5),
/obj/item/reagent_containers/food/snacks/grown/oat = list("flour" = -5),
@@ -58,6 +57,7 @@
var/list/juice_items = list (
//Juicer Stuff
+ /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0),
/obj/item/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0),
/obj/item/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0),
/obj/item/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0),
@@ -446,4 +446,4 @@
var/amount = O.reagents.total_volume
O.reagents.trans_to(beaker, amount)
if(!O.reagents.total_volume)
- remove_object(O)
\ No newline at end of file
+ remove_object(O)
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index 199edb72fb4..7779cb91d85 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -397,7 +397,7 @@
if(13 to INFINITY)
to_chat(M, "You suddenly ignite in a holy fire!")
for(var/mob/O in viewers(M, null))
- O.show_message(text("[] suddenly bursts into flames!", M), 1)
+ O.show_message(text("[] suddenly bursts into flames!", M), 1)
M.fire_stacks = min(5,M.fire_stacks + 3)
M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
@@ -513,4 +513,4 @@
if(istype(O, /obj/item/clothing/shoes/galoshes))
var/t_loc = get_turf(O)
qdel(O)
- new /obj/item/clothing/shoes/galoshes/dry(t_loc)
\ No newline at end of file
+ new /obj/item/clothing/shoes/galoshes/dry(t_loc)
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 39c2e8c78fb..bcbce7f8af8 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -52,7 +52,7 @@
/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
- holder.my_atom.visible_message("")
var/datum/effect_system/foam_spread/s = new()
s.set_up(created_volume, location, holder, MFOAM_IRON)
@@ -480,4 +480,4 @@
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
- D.Devolve()
\ No newline at end of file
+ D.Devolve()
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 1a22f664ad5..eb588200265 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -377,7 +377,7 @@
found = 1
break
if(!found)
- to_chat(usr, "[bicon(src)] The conveyor switch did not detect any linked conveyor belts in range.")
+ to_chat(usr, "[bicon(src)] The conveyor switch did not detect any linked conveyor belts in range.")
return
var/obj/machinery/conveyor_switch/NC = new/obj/machinery/conveyor_switch(A, id)
transfer_fingerprints_to(NC)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 476028b4532..9de8033a00f 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -335,7 +335,7 @@
// timed process
// charge the gas reservoir and perform flush if ready
/obj/machinery/disposal/process()
- use_power = 0
+ use_power = NO_POWER_USE
if(stat & BROKEN) // nothing can happen if broken
return
@@ -356,13 +356,13 @@
if(stat & NOPOWER) // won't charge if no power
return
- use_power = 1
+ use_power = IDLE_POWER_USE
if(mode != 1) // if off or ready, no need to charge
return
// otherwise charge
- use_power = 2
+ use_power = ACTIVE_POWER_USE
var/atom/L = loc // recharging from loc turf
@@ -760,12 +760,8 @@
return
if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
var/turf/simulated/floor/F = T
- //F.health = 100
- F.burnt = 1
- F.intact = 0
- F.levelupdate()
- new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff
- F.icon_state = "Floor[F.burnt ? "1" : ""]"
+ new F.builtin_tile.type(H)
+ F.remove_tile(null,TRUE,FALSE)
if(direction) // direction is specified
if(istype(T, /turf/space)) // if ended in space, then range is unlimited
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 8b2f7c4197f..1b1b5c0ffa9 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -134,6 +134,7 @@
name = "package wrapper"
icon = 'icons/obj/items.dmi'
icon_state = "deliveryPaper"
+ singular_name = "package wrapper"
flags = NOBLUDGEON
amount = 25
max_amount = 25
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index cbc6ad98582..5a54bf54005 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -856,38 +856,6 @@
build_path = /obj/item/videocam
category = list("initial", "Miscellaneous")
-/datum/design/canvas
- name = "11px by 11px Canvas"
- id = "canvas"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50)
- build_path = /obj/item/canvas
- category = list("initial", "Miscellaneous")
-
-/datum/design/canvas/nineteenXnineteen
- name = "19px by 19px Canvas"
- id = "canvas19x19"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50)
- build_path = /obj/item/canvas/nineteenXnineteen
- category = list("initial", "Miscellaneous")
-
-/datum/design/canvas/twentythreeXnineteen
- name = "23px by 19px Canvas"
- id = "canvas23x19"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 70)
- build_path = /obj/item/canvas/twentythreeXnineteen
- category = list("initial", "Miscellaneous")
-
-/datum/design/canvas/twentythreeXtwentythree
- name = "23px by 23px Canvas"
- id = "canvas23x23"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 100)
- build_path = /obj/item/canvas/twentythreeXtwentythree
- category = list("initial", "Miscellaneous")
-
/datum/design/logic_board
name = "Logic Circuit"
id = "logic_board"
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index 57886d2972c..cc6305319c7 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -272,6 +272,16 @@
build_path = /obj/item/circuitboard/mechfab
category = list("Research Machinery")
+/datum/design/podfab
+ name = "Machine Board (Spacepod Fabricator)"
+ desc = "The circuit board for an Spacepod Fabricator"
+ id = "podfab"
+ req_tech = list("programming" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list(MAT_GLASS = 1000)
+ build_path = /obj/item/circuitboard/podfab
+ category = list("Research Machinery")
+
/datum/design/mech_recharger
name = "Machine Board (Mech Bay Recharger)"
desc = "The circuit board for a Mech Bay Recharger."
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index e504216fe38..f6e4f2c0877 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -21,7 +21,7 @@
icon_state = "h_lathe"
density = 1
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
var/recentlyExperimented = 0
var/mob/trackedIan
var/mob/trackedRuntime
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index 86d507d34de..88ecedbf555 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -50,7 +50,7 @@ var/global/list/obj/machinery/message_server/message_servers = list()
name = "Messaging Server"
density = 1
anchored = 1.0
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 100
@@ -199,7 +199,7 @@ var/obj/machinery/blackbox_recorder/blackbox
name = "Blackbox Recorder"
density = 1
anchored = 1.0
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 100
var/list/messages = list() //Stores messages of non-standard frequencies
@@ -377,4 +377,4 @@ proc/feedback_add_details(var/variable,var/details)
if(!FV) return
- FV.add_details(details)
\ No newline at end of file
+ FV.add_details(details)
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index 51b4f8512e1..1e884e35c3a 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -6,7 +6,7 @@
icon = 'icons/obj/machines/research.dmi'
density = 1
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
var/busy = 0
var/hacked = 0
var/disabled = 0
@@ -130,4 +130,4 @@
use_power(min(1000, (amount_inserted / 100)))
overlays += "[initial(name)]_[stack_name]"
sleep(10)
- overlays -= "[initial(name)]_[stack_name]"
\ No newline at end of file
+ overlays -= "[initial(name)]_[stack_name]"
diff --git a/code/modules/security_levels/keycard authentication.dm b/code/modules/security_levels/keycard authentication.dm
index da06ce169f3..b5f7540c3f2 100644
--- a/code/modules/security_levels/keycard authentication.dm
+++ b/code/modules/security_levels/keycard authentication.dm
@@ -17,7 +17,7 @@
var/ert_reason = "Reason for ERT"
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
power_channel = ENVIRON
diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm
index 57142365cc4..c58f4efb300 100644
--- a/code/modules/station_goals/bsa.dm
+++ b/code/modules/station_goals/bsa.dm
@@ -256,7 +256,7 @@
var/obj/machinery/bsa/full/cannon
var/notice
var/target
- use_power = 0
+ use_power = NO_POWER_USE
circuit = /obj/item/circuitboard/computer/bsa_control
icon = 'icons/obj/machines/particle_accelerator3.dmi'
icon_state = "control_boxp"
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 46f5920f3d3..d94064ec31a 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -87,10 +87,10 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/
to_chat(user, "Plants needs to be ready to harvest to perform full data scan.") //Because space dna is actually magic
return
if(plants[H.myseed.type])
- to_chat(user, "Plant data already present in local storage.")
+ to_chat(user, "Plant data already present in local storage.")
return
plants[H.myseed.type] = 1
- to_chat(user, "Plant data added to local storage.")
+ to_chat(user, "Plant data added to local storage.")
//animals
if(isanimal(target) || is_type_in_typecache(target, non_simple_animals))
@@ -100,19 +100,19 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/
to_chat(user, "No compatible DNA detected")
return
if(animals[target.type])
- to_chat(user, "Animal data already present in local storage.")
+ to_chat(user, "Animal data already present in local storage.")
return
animals[target.type] = 1
- to_chat(user, "Animal data added to local storage.")
+ to_chat(user, "Animal data added to local storage.")
//humans
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(dna[H.dna.uni_identity])
- to_chat(user, "Humanoid data already present in local storage.")
+ to_chat(user, "Humanoid data already present in local storage.")
return
dna[H.dna.uni_identity] = 1
- to_chat(user, "Humanoid data added to local storage.")
+ to_chat(user, "Humanoid data added to local storage.")
/obj/item/circuitboard/machine/dna_vault
@@ -301,4 +301,4 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/
/obj/machinery/dna_vault/proc/grant_power(mob/living/carbon/human/H, block, power)
H.dna.SetSEState(block, 1, 1)
H.mutations |= power
- genemutcheck(H, block, null, MUTCHK_FORCED)
\ No newline at end of file
+ genemutcheck(H, block, null, MUTCHK_FORCED)
diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm
index 78b1da7f2a9..40a15e91c21 100644
--- a/code/modules/telesci/bscrystal.dm
+++ b/code/modules/telesci/bscrystal.dm
@@ -26,7 +26,7 @@
/obj/item/ore/bluespace_crystal/proc/blink_mob(var/mob/living/L)
if(!is_teleport_allowed(L.z))
- src.visible_message("[src]'s fragments begin rapidly vibrating and blink out of existence.")
+ src.visible_message("[src]'s fragments begin rapidly vibrating and blink out of existence.")
qdel(src)
return
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 38d4fa19e40..09f4ffa7920 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "pad-idle"
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 200
active_power_usage = 5000
var/efficiency
@@ -61,7 +61,7 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "pad-idle"
anchored = 1
- use_power = 1
+ use_power = IDLE_POWER_USE
idle_power_usage = 20
active_power_usage = 500
var/stage = 0
diff --git a/code/modules/vehicle/ambulance.dm b/code/modules/vehicle/ambulance.dm
index 38eb4af18aa..a80b2d3dfa6 100644
--- a/code/modules/vehicle/ambulance.dm
+++ b/code/modules/vehicle/ambulance.dm
@@ -4,7 +4,59 @@
icon_state = "docwagon2"
keytype = /obj/item/key/ambulance
var/obj/structure/stool/bed/amb_trolley/bed = null
+ var/datum/action/ambulance_alarm/AA
+ var/datum/looping_sound/ambulance_alarm/soundloop
+/obj/vehicle/ambulance/New()
+ . = ..()
+ AA = new(src)
+ soundloop = new(list(src), FALSE)
+
+/datum/action/ambulance_alarm
+ name = "Toggle Sirens"
+ icon_icon = 'icons/obj/vehicles.dmi'
+ button_icon_state = "docwagon2"
+ check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_LYING | AB_CHECK_CONSCIOUS
+ var/toggle_cooldown = 40
+ var/cooldown = 0
+
+
+/datum/action/ambulance_alarm/Trigger()
+ if(!..())
+ return FALSE
+
+ var/obj/vehicle/ambulance/A = target
+
+ if(!istype(A) || !A.soundloop)
+ return FALSE
+
+ if(world.time < cooldown + toggle_cooldown)
+ return FALSE
+
+ cooldown = world.time
+
+ if(A.soundloop.muted)
+ A.soundloop.start()
+ A.set_light(4,3,"#F70027")
+ else
+ A.soundloop.stop()
+ A.set_light(0)
+
+
+/datum/looping_sound/ambulance_alarm
+ start_length = 0
+ mid_sounds = list('sound/items/WEEOO1.ogg' = 1)
+ mid_length = 14
+ volume = 100
+
+
+/obj/vehicle/ambulance/post_buckle_mob(mob/living/M)
+ . = ..()
+ if(has_buckled_mobs())
+ AA.Grant(M)
+ else
+ AA.Remove(M)
+
/obj/item/key/ambulance
name = "ambulance key"
@@ -56,4 +108,4 @@
to_chat(usr, "You unhook the bed to the ambulance.")
else
amb.bed = src
- to_chat(usr, "You hook the bed to the ambulance.")
+ to_chat(usr, "You hook the bed to the ambulance.")
\ No newline at end of file
diff --git a/config/example/config.txt b/config/example/config.txt
index c8bdc8cffc9..08792117b1f 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -183,6 +183,9 @@ CHECK_RANDOMIZER
## GitHub address
# GITHUBURL http://example.org
+## Discord address
+# DISCORDURL http://example.org
+
## Donations address
# DONATIONSURL http://example.org
diff --git a/html/changelog.html b/html/changelog.html
index 5f94ae7ebdf..3b8a02a212d 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,221 @@
-->
30 September 2018
+ Purpose updated:
+
+
+ datlo updated:
+
+
+ variableundefined updated:
+
+
+
+ 29 September 2018
+ Dapocalypse updated:
+
+
+ DarkPyrolord updated:
+
+
+ Kyep updated:
+
+
+ NoWolfie updated:
+
+
+ Triiodine updated:
+
+
+ Ty-Omaha updated:
+
+
+ farie82 updated:
+
+
+
+ 28 September 2018
+ DarkPyrolord updated:
+
+
+ Farie82 updated:
+
+
+ Kyep updated:
+
+
+ Purpose updated:
+
+
+ Tails2091 updated:
+
+
+ Triiodine updated:
+
+
+ Ty-Omaha updated:
+
+
+ farie82 updated:
+
+
+ uc_guy updated:
+
+
+ variableundefined updated:
+
+
+
+ 27 September 2018
+ Anasari updated:
+
+
+ Birdtalon updated:
+
+
+ CornMyCob updated:
+
+
+ Crazylemon64 updated:
+
+
+ DesolateG updated:
+
+
+ FalseIncarnate updated:
+
+
+ Farie82 updated:
+
+
+ Fox McCloud updated:
+
+
+ Kyep updated:
+
+
+ Purpose updated:
+
+
+ TDSSS updated:
+
+
+ Triiodine updated:
+
+
+ Ty-Omaha updated:
+
+
+ alex-gh updated:
+
+
+ datlo updated:
+
+
+ variableundefined updated:
+
+
+
+ 25 September 2018
+ Birdtalon updated:
+
+
+ Fox McCloud updated:
+
+
+ Purpose updated:
+
+
+
+ 24 September 2018
+ Triiodine, Desolate, updated:
+
+
+
+ 19 September 2018
+ Birdtalon updated:
+
+
+
18 September 2018
Birdtalon updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 0ba556c9bc3..e499c123837 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -6979,3 +6979,154 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- bugfix: Laser tag ED-209 bots get the correct names upon construction.
Ty-Omaha:
- spellcheck: adds a missing italics tag to nano/templates/song.tmpl
+2018-09-19:
+ Birdtalon:
+ - bugfix: Screwdrivers now open fire alarms instead of wirecutters.
+2018-09-24:
+ Triiodine, Desolate,:
+ - bugfix: Things without blood bleeding red when rolled over by a mulebot.
+2018-09-25:
+ Birdtalon:
+ - tweak: Secure console UI (security records) appears bigger by default.
+ - tweak: One-click-antag now respects game-mode's protected jobs.
+ Fox McCloud:
+ - rscadd: adds support for 128x128 skin interface pixel size for 4K monitors
+ Purpose:
+ - bugfix: Space is now visible under corner pieces of the Intact Empty Ship ruin.
+2018-09-27:
+ Anasari:
+ - rscadd: You can now deconstruct a fire extinguisher cabinet to yield a single
+ piece of metal. You can construct them for five pieces of metal, with extinguisher
+ included. (Using metal construction menu)
+ Birdtalon:
+ - bugfix: Borg modules now add item action buttons if present.
+ - tweak: Beepsky responds to attacking him with disarm intent.
+ CornMyCob:
+ - tweak: Adds in a prompt for becoming a headslug.
+ Crazylemon64:
+ - rscadd: Adds a fluff item for ELO
+ DesolateG:
+ - bugfix: Added a check to whispering adverbs to prevent double adverbs while whispering.
+ FalseIncarnate:
+ - rscadd: Adds mixing bowls, which allow you to cook multiple recipes at the same
+ time! The dinnerware vendor comes pre-stocked with 10!
+ - rscadd: Adds 2 mixing bowls to the Food Crate from cargo should you need additional.
+ This is the same crate that includes the extra bottle of enzymes.
+ - tweak: Burned messes now scale their carbon and "????" content with both physical
+ ingredients and directly inserted reagents while burning in the cooking machines.
+ - tweak: Upgraded cooking machines now attempt to evenly distribute reagents from
+ ingredients across all produced results, rather than just the original.
+ Farie82:
+ - tweak: You can remove notes from an airlock now with the grab intent using an
+ empty hand.
+ Fox McCloud:
+ - bugfix: Fixes 128x128 menu location
+ Kyep:
+ - bugfix: Refactored shieldgen.dm, fixed a bug which could cause shieldgens to behave
+ improperly under some rare conditions.
+ Purpose:
+ - tweak: CPU Performance tweaks in the Bananaium floor honks & squeaks
+ - bugfix: Capitalisation correction in automated chef npcs
+ - tweak: CPU Performance tweaks in the Xeno Hunter tackles
+ - tweak: CPU Performance tweaks in Malf AI
+ - bugfix: NT Formal clothing now updates to the station names correctly.
+ - spellcheck: Fixes typos in NT Formal clothing
+ - bugfix: Minimap is now updated
+ - bugfix: Holopads now use the correct amount of power.
+ - tweak: CPU Performance tweaks in the Pipe Dispenser
+ - bugfix: Blobs now delete light fixtures correctly.
+ - tweak: use_power variable is more clearly defined as non-boolean via defines.
+ TDSSS:
+ - bugfix: Atmospherics external airlocks can now be controlled by borgs and AIs
+ Triiodine:
+ - bugfix: righthand fork sprite being oriented wrong.
+ Ty-Omaha:
+ - bugfix: Fixes vending machine bank account security. You can now use them with
+ a bank account security level above zero.
+ - spellcheck: Fixes a bunch of \ tags
+ alex-gh:
+ - bugfix: Drask no longer take damage from cryokinesis
+ - tweak: Cryokinesis deals less damage, but lowers the body temperature a lot more.
+ - bugfix: Autopsy scanner now prints all times in human readable format.
+ datlo:
+ - rscadd: Added the wizard spell Greater Knock, letting them remove all access restrictions
+ on the Cyberiad and master door opening.
+ variableundefined:
+ - tweak: drop_location & AllowDrop() has been ported over from tg. Report unexpected
+ issues with dropping items.
+ - tweak: When you late join, extra items you can't equip / hold spawn on the ground
+ instead of in the lobby screen. Including vox medkit etc.
+ - bugfix: Plasmaman no longer get double the firepower when spawning in as Captain,
+ BS, or sec roles.
+ - bugfix: Non-human's DNA (Except for IPC, of course) should show up properly in
+ the DNA modifier now.
+2018-09-28:
+ DarkPyrolord:
+ - bugfix: Fixes a ten year old atmos bug, fix will cause toxins bombs and plasma
+ fires to be a little less lethal
+ - bugfix: Readds modkit sprites to items.dm to fix invis fluff item modkits.
+ Farie82:
+ - bugfix: No more broken tile due to getting shot out of disposals.
+ - bugfix: Point blank shots not hitting the correct person. When multiple people
+ are on the same tile.
+ Kyep:
+ - rscdel: The wild west away mission no longer offers hijack traitor status as a
+ potential reward.
+ - bugfix: Deconstructing/reconstructing the space pod fab no longer turns it into
+ a mech fab. No more mechanics building surprise mechs.
+ - tweak: The spacepod fab circuit is now buildable in R&D.
+ - tweak: Spacepod fabs now require mechanic access to use, like the mechanic R&D
+ console does.
+ Purpose:
+ - rscadd: Mappers can now have Floodlights round-start enabled.
+ Tails2091:
+ - bugfix: Refactored Hallucinations to match contribution guide standards a bit
+ more.
+ Triiodine:
+ - bugfix: Fixes jade lipstick being lime.
+ - rscadd: Adds lime lipstick.
+ - rscadd: New storage implant icon
+ Ty-Omaha:
+ - rscadd: Ambulances now have sirens!
+ - tweak: Shadowlings no longer are able to target simple animals (mice)
+ farie82:
+ - bugfix: fixed cling transformed humanoids looking rather pale.
+ - bugfix: Fixed emagged camera consoles not opening the tabs
+ uc_guy:
+ - tweak: Vox auto equip the nitrogen tank when spawning if possible.
+ - bugfix: Nitrogen tanks no longer overwrite job items.
+ variableundefined:
+ - rscadd: Benjaminfallout's fluff item.
+ - tweak: Qdel log is now re-added to the garbage subsystem to enable coders to investigate
+ sources of hard delete.
+ - bugfix: When you remove a light tube while lying down, the light tube disappear.
+ This no longer happens.
+ - bugfix: Latejoin AI no longer spawn in naked at arrival shuttles.
+ - bugfix: Not spawning in with your memory of bank account at roundstart...
+2018-09-29:
+ Dapocalypse:
+ - bugfix: Removes extra penlight given to plasmemes.
+ DarkPyrolord:
+ - rscadd: Pyro's fluff item
+ Kyep:
+ - bugfix: Fixed several bugs with blob, including lateround blobs not generating
+ biohazard alerts, blobs missing out on early resources they should have, and
+ a bug with blob storage being broken that prevented blobs getting any resources.
+ NoWolfie:
+ - rscadd: New Pyr'kus cult floor and wall sprite.
+ Triiodine:
+ - bugfix: Nukies spawning with cybernetic organs/limbs
+ Ty-Omaha:
+ - rscdel: Removes canvases due to everybody crashing from them.
+ farie82:
+ - tweak: Headbutting the airlock is more consistent.
+ - bugfix: refactored the airlock code.
+ - bugfix: Using multitools and such on a door with a note now doesn't remove the
+ note. Only grabbing with an empty hand now.
+2018-09-30:
+ Purpose:
+ - bugfix: Fixes various message format overflows.
+ datlo:
+ - tweak: Made the poison pen available to traitor librarians
+ variableundefined:
+ - bugfix: One click antagonist giving antag to people in restricted job.
diff --git a/html/changelogs/AutoChangeLog-pr-9467.yml b/html/changelogs/AutoChangeLog-pr-9467.yml
new file mode 100644
index 00000000000..059c11a30ea
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9467.yml
@@ -0,0 +1,4 @@
+author: "Shazbot"
+delete-after: True
+changes:
+ - bugfix: "You can now remove KA mods from borgs."
diff --git a/html/changelogs/AutoChangeLog-pr-9644.yml b/html/changelogs/AutoChangeLog-pr-9644.yml
new file mode 100644
index 00000000000..e6f16cbe2fc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9644.yml
@@ -0,0 +1,4 @@
+author: "Crazylemon"
+delete-after: True
+changes:
+ - tweak: "Corrects a comment in the code regarding IPC damage."
diff --git a/icons/atmos/vent_scrubber.dmi b/icons/atmos/vent_scrubber.dmi
index dadc7215473..c6b6d6ccfe4 100644
Binary files a/icons/atmos/vent_scrubber.dmi and b/icons/atmos/vent_scrubber.dmi differ
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index d229cd65875..160ee13c6d5 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 6ee9b9d5b3f..7bc8088aa86 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index e9d610d754d..d7e258376af 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index 8bcbf4146d5..653dfd5dfa9 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index ac347ad02f2..c12484b28e4 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 901581494dd..3e129dca1d2 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/artstuff.dmi b/icons/obj/artstuff.dmi
deleted file mode 100644
index 13e8ee5ebea..00000000000
Binary files a/icons/obj/artstuff.dmi and /dev/null differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index 20372528b02..de22e917ddc 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi
index 98ebe71d6ac..87bf67d72a7 100644
Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ
diff --git a/icons/obj/implants.dmi b/icons/obj/implants.dmi
index 8dc2f08fdcb..6ab6a2e74bd 100644
Binary files a/icons/obj/implants.dmi and b/icons/obj/implants.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 5714fcf4c9f..4b53ea70f51 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index d5dcc49c0fc..3bbc5618967 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/turf/walls/cult_wall.dmi b/icons/turf/walls/cult_wall.dmi
index 47a76ee5cb3..b097321e714 100644
Binary files a/icons/turf/walls/cult_wall.dmi and b/icons/turf/walls/cult_wall.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index eb99b7dd0fd..0aa6636b335 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -78,6 +78,18 @@
to_chat(src, "The GitHub URL is not set in the server configuration.")
return
+/client/verb/discord()
+ set name = "Discord"
+ set desc = "Join our Discord server."
+ set hidden = 1
+ if(config.discordurl)
+ if(alert("This will invite you to our Discord server. Are you sure?",,"Yes","No")=="No")
+ return
+ src << link(config.discordurl)
+ else
+ to_chat(src, "The Discord URL is not set in the server configuration.")
+ return
+
/client/verb/donate()
set name = "Donate"
set desc = "Donate to help with hosting costs."
diff --git a/interface/skin.dmf b/interface/skin.dmf
index c5ae8c52725..e7dec18eba4 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -1418,6 +1418,13 @@ menu "menu"
can-check = true
group = "size"
saved-params = "is-checked"
+ elem "icon128"
+ name = "&128x128 (4x)"
+ command = ".winset \"mapwindow.map.icon-size=128\""
+ category = "&Size"
+ can-check = true
+ group = "size"
+ saved-params = "is-checked"
elem "icon96"
name = "&96x96 (3x)"
command = ".winset \"mapwindow.map.icon-size=96\""
@@ -1690,18 +1697,29 @@ window "rpane"
size = 67x16
text = "Changelog"
command = "Changelog"
- elem "karma"
+ elem "discordb"
type = BUTTON
pos = 487,0
- size = 67x16
+ size = 60x16
+ background-color = #7289DA
+ text-color = #FFFFFF
+ font-style = bold
+ text = "Discord"
+ command = "discord"
+ elem "karma"
+ type = BUTTON
+ pos = 552,0
+ size = 77x16
background-color = #ff8040
+ font-style = bold
text = "Karma Shop"
command = "karmashop"
elem "donate"
type = BUTTON
- pos = 559,0
+ pos = 634,0
size = 60x16
- background-color = #8080ff
+ background-color = #008000
+ font-style = bold
text = "Donate"
command = "Donate"
elem "browseb"
diff --git a/nano/images/Cyberiad_nanomap_z1.png b/nano/images/Cyberiad_nanomap_z1.png
index da0c53c8d50..3e1469e2a95 100644
Binary files a/nano/images/Cyberiad_nanomap_z1.png and b/nano/images/Cyberiad_nanomap_z1.png differ
diff --git a/paradise.dme b/paradise.dme
index 7c4deb70dd2..1bc43410f66 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -777,6 +777,7 @@
#include "code\game\objects\items\flag.dm"
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\misc.dm"
+#include "code\game\objects\items\mixing_bowl.dm"
#include "code\game\objects\items\random_items.dm"
#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\toys.dm"
@@ -814,6 +815,7 @@
#include "code\game\objects\items\mountable_frames\air_alarm.dm"
#include "code\game\objects\items\mountable_frames\apc_frame.dm"
#include "code\game\objects\items\mountable_frames\buttons_switches.dm"
+#include "code\game\objects\items\mountable_frames\extinguisher_frame.dm"
#include "code\game\objects\items\mountable_frames\fire_alarm.dm"
#include "code\game\objects\items\mountable_frames\frames.dm"
#include "code\game\objects\items\mountable_frames\intercom.dm"
@@ -952,7 +954,6 @@
#include "code\game\objects\items\weapons\tanks\watertank.dm"
#include "code\game\objects\random\random.dm"
#include "code\game\objects\structures\aliens.dm"
-#include "code\game\objects\structures\artstuff.dm"
#include "code\game\objects\structures\barsign.dm"
#include "code\game\objects\structures\bedsheet_bin.dm"
#include "code\game\objects\structures\coathanger.dm"