diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm
index 093fc8f5fd3..d2c747dd5b8 100644
--- a/code/datums/recipe.dm
+++ b/code/datums/recipe.dm
@@ -8,35 +8,35 @@
* * reagents are reagents. Acid, milc, booze, etc.
* * items are objects. Fruits, tools, circuit boards.
* * result is type to create as new object
- * * time is optional parameter, you shall use in in your machine,
+ * * time is optional parameter, you shall use in in your machine,
default /datum/recipe/ procs does not rely on this parameter.
*
* Functions you need:
* /datum/recipe/proc/make(var/obj/container as obj)
* Creates result inside container,
- * deletes prerequisite reagents,
+ * deletes prerequisite reagents,
* transfers reagents from prerequisite objects,
* deletes all prerequisite objects (even not needed for recipe at the moment).
- *
+ *
* /proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj as obj, exact = 1)
* Wonderful function that select suitable recipe for you.
* obj is a machine (or magik hat) with prerequisites,
* exact = 0 forces algorithm to ignore superfluous stuff.
- *
- *
+ *
+ *
* Functions you do not need to call directly but could:
* /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents)
* //1=precisely, 0=insufficiently, -1=superfluous
- *
+ *
* /datum/recipe/proc/check_items(var/obj/container as obj)
* //1=precisely, 0=insufficiently, -1=superfluous
- *
+ *
* */
/datum/recipe
var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice
var/list/items // example: =list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo
- var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut
+ var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
var/time = 100 // 1/10 part of second
@@ -52,7 +52,7 @@
if ((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len)
return -1
return .
-
+
/datum/recipe/proc/check_items(var/obj/container as obj) //1=precisely, 0=insufficiently, -1=superfluous
if (!items)
if (locate(/obj/) in container)
diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm
index 4b1e01c2f63..95643336645 100644
--- a/code/defines/obj/vending.dm
+++ b/code/defines/obj/vending.dm
@@ -176,7 +176,7 @@
icon_state = "sec"
icon_deny = "sec-deny"
req_access_txt = "1"
- product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/grenade/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut;/obj/item/weapon/storage/box/evidence"
+ product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/grenade/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut/normal;/obj/item/weapon/storage/box/evidence"
product_amounts = "8;4;5;12;6"
product_hidden = "/obj/item/clothing/glasses/sunglasses;/obj/item/kitchen/donut_box"
product_hideamt = "2;2"
diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm
index 84a2d016ca4..762bd38cc8f 100644
--- a/code/defines/procs/helpers.dm
+++ b/code/defines/procs/helpers.dm
@@ -272,7 +272,9 @@
return (result + R.Copy(Ri, 0))
/proc/sortRecord(var/list/datum/data/record/L, var/field = "name", var/order = 1)
- if(isnull(L) || L.len < 2)
+ if(isnull(L))
+ return list()
+ if(L.len < 2)
return L
var/middle = L.len / 2 + 1
return mergeRecordLists(sortRecord(L.Copy(0, middle), field, order), sortRecord(L.Copy(middle), field, order), field, order)
@@ -282,16 +284,23 @@
var/Li=1
var/Ri=1
var/list/result = new()
- while(Li <= L.len && Ri <= R.len)
- var/datum/data/record/rL = L[Li]
- var/datum/data/record/rR = R[Ri]
- if(sorttext(rL.fields[field], rR.fields[field]) == order)
- result += L[Li++]
- else
- result += R[Ri++]
+ if(!isnull(L) && !isnull(R))
+ while(Li <= L.len && Ri <= R.len)
+ var/datum/data/record/rL = L[Li]
+ if(isnull(rL))
+ L -= rL
+ continue
+ var/datum/data/record/rR = R[Ri]
+ if(isnull(rR))
+ R -= rR
+ continue
+ if(sorttext(rL.fields[field], rR.fields[field]) == order)
+ result += L[Li++]
+ else
+ result += R[Ri++]
- if(Li <= L.len)
- return (result + L.Copy(Li, 0))
+ if(Li <= L.len)
+ return (result + L.Copy(Li, 0))
return (result + R.Copy(Ri, 0))
/proc/sortList(var/list/L)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 828a55d1f1f..9a291815580 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -45,9 +45,10 @@
"}
if(2.0)
dat += "Record List:
"
- for(var/datum/data/record/R in sortRecord(data_core.general))
- dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"])
- //Foreach goto(132)
+ if(!isnull(data_core.general))
+ for(var/datum/data/record/R in sortRecord(data_core.general))
+ dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"])
+ //Foreach goto(132)
dat += text("
Back", src)
if(3.0)
dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index a77d9ed4779..fd73f4ac12c 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -69,32 +69,33 @@
Fingerprints |
Criminal Status |
"}
- for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
- var/crimstat = ""
- for(var/datum/data/record/E in data_core.security)
- if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
- crimstat = E.fields["criminal"]
- var/background
- switch(crimstat)
- if("*Arrest*")
- background = "'background-color:#DC143C;'"
- if("Incarcerated")
- background = "'background-color:#CD853F;'"
- if("Parolled")
- background = "'background-color:#CD853F;'"
- if("Released")
- background = "'background-color:#3BB9FF;'"
- if("None")
- background = "'background-color:#00FF7F;'"
- if("")
- background = "'background-color:#FFFFFF;'"
- crimstat = "No Record."
- dat += text("| [] | ", background, src, R, R.fields["name"])
- dat += text("[] | ", R.fields["id"])
- dat += text("[] | ", R.fields["rank"])
- dat += text("[] | ", R.fields["fingerprint"])
- dat += text("[] |
", crimstat)
- dat += "
"
+ if(!isnull(data_core.general))
+ for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
+ var/crimstat = ""
+ for(var/datum/data/record/E in data_core.security)
+ if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
+ crimstat = E.fields["criminal"]
+ var/background
+ switch(crimstat)
+ if("*Arrest*")
+ background = "'background-color:#DC143C;'"
+ if("Incarcerated")
+ background = "'background-color:#CD853F;'"
+ if("Parolled")
+ background = "'background-color:#CD853F;'"
+ if("Released")
+ background = "'background-color:#3BB9FF;'"
+ if("None")
+ background = "'background-color:#00FF7F;'"
+ if("")
+ background = "'background-color:#FFFFFF;'"
+ crimstat = "No Record."
+ dat += text("| [] | ", background, src, R, R.fields["name"])
+ dat += text("[] | ", R.fields["id"])
+ dat += text("[] | ", R.fields["rank"])
+ dat += text("[] | ", R.fields["fingerprint"])
+ dat += text("[] |
", crimstat)
+ dat += "
"
dat += text("Record Maintenance
", src)
dat += text("{Log Out}",src)
if(2.0)
@@ -400,7 +401,7 @@ What a mess.*/
if("name")
if (istype(active1, /datum/data/record))
var/t1 = input("Please input name:", "Secure. records", active1.fields["name"], null) as text
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1)
+ if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1)
return
active1.fields["name"] = t1
if("id")
diff --git a/code/game/objects/closets/janitor.dm b/code/game/objects/closets/janitor.dm
index 7f4fddc71f2..fcc9c93999c 100644
--- a/code/game/objects/closets/janitor.dm
+++ b/code/game/objects/closets/janitor.dm
@@ -12,4 +12,5 @@
new /obj/item/weapon/caution(src)
new /obj/item/weapon/caution(src)
new /obj/item/weapon/trashbag(src)
- new /obj/item/device/lightreplacer(src)
\ No newline at end of file
+ new /obj/item/device/lightreplacer(src)
+ new /obj/item/clothing/head/soft/purple(src)
\ No newline at end of file
diff --git a/code/game/objects/closets/wardrobe.dm b/code/game/objects/closets/wardrobe.dm
index 9640a359ae0..5ebfe08ed10 100644
--- a/code/game/objects/closets/wardrobe.dm
+++ b/code/game/objects/closets/wardrobe.dm
@@ -66,6 +66,9 @@
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
+ new /obj/item/clothing/head/soft/green(src)
+ new /obj/item/clothing/head/soft/green(src)
+ new /obj/item/clothing/head/soft/green(src)
return
/obj/structure/closet/wardrobe/orange/New()
@@ -75,6 +78,9 @@
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
+ new /obj/item/clothing/head/soft/orange(src)
+ new /obj/item/clothing/head/soft/orange(src)
+ new /obj/item/clothing/head/soft/orange(src)
return
/obj/structure/closet/wardrobe/yellow/New()
@@ -84,6 +90,9 @@
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
+ new /obj/item/clothing/head/soft/yellow(src)
+ new /obj/item/clothing/head/soft/yellow(src)
+ new /obj/item/clothing/head/soft/yellow(src)
return
/obj/structure/closet/wardrobe/atmospherics_yellow/New()
@@ -93,6 +102,9 @@
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
+ new /obj/item/clothing/head/soft/yellow(src)
+ new /obj/item/clothing/head/soft/yellow(src)
+ new /obj/item/clothing/head/soft/yellow(src)
return
/obj/structure/closet/wardrobe/engineering_yellow/New()
@@ -102,6 +114,9 @@
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/orange(src)
+ new /obj/item/clothing/head/soft/yellow(src)
+ new /obj/item/clothing/head/soft/yellow(src)
+ new /obj/item/clothing/head/soft/yellow(src)
return
/obj/structure/closet/wardrobe/white/New()
@@ -185,6 +200,13 @@
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/white(src)
+ new /obj/item/clothing/head/soft/mime(src)
+ new /obj/item/clothing/head/soft/blue(src)
+ new /obj/item/clothing/head/soft/yellow(src)
+ new /obj/item/clothing/head/soft/green(src)
+ new /obj/item/clothing/head/soft/orange(src)
+ new /obj/item/clothing/head/soft/purple(src)
+ if(prob(10)) new /obj/item/clothing/head/soft/rainbow(src)
return
/obj/structure/closet/lawcloset/New()
diff --git a/code/game/objects/devices/PDA/cart.dm b/code/game/objects/devices/PDA/cart.dm
index f2253bda569..cb91a4ee2c1 100644
--- a/code/game/objects/devices/PDA/cart.dm
+++ b/code/game/objects/devices/PDA/cart.dm
@@ -260,9 +260,9 @@ Code:
menu = "
Crew Manifest
"
menu += "Entries cannot be modified from this terminal.
"
-
- for (var/datum/data/record/t in sortRecord(data_core.general))
- menu += "[t.fields["name"]] - [t.fields["rank"]]
"
+ if(!isnull(data_core.general))
+ for (var/datum/data/record/t in sortRecord(data_core.general))
+ menu += "[t.fields["name"]] - [t.fields["rank"]]
"
menu += "
"
@@ -335,8 +335,9 @@ Code:
if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working.
menu = "
Medical Record List
"
- for (var/datum/data/record/R in sortRecord(data_core.general))
- menu += "[R.fields["id"]]: [R.fields["name"]]
"
+ if(!isnull(data_core.general))
+ for (var/datum/data/record/R in sortRecord(data_core.general))
+ menu += "[R.fields["id"]]: [R.fields["name"]]
"
menu += "
"
if(441)
menu = "
Medical Record
"
@@ -377,9 +378,9 @@ Code:
menu += "
"
if (45) //security records
menu = "
Security Record List
"
-
- for (var/datum/data/record/R in sortRecord(data_core.general))
- menu += "[R.fields["id"]]: [R.fields["name"]]
"
+ if(!isnull(data_core.general))
+ for (var/datum/data/record/R in sortRecord(data_core.general))
+ menu += "[R.fields["id"]]: [R.fields["name"]]
"
menu += "
"
if(451)
diff --git a/code/game/objects/items/food.dm b/code/game/objects/items/food.dm
index 21f9750f2d3..d213f44e95c 100644
--- a/code/game/objects/items/food.dm
+++ b/code/game/objects/items/food.dm
@@ -10,62 +10,70 @@ MONKEY CUBE BOX
/mob/living/carbon/var/last_eating = 0
/obj/item/kitchen/donut_box
- var/amount = 6
+ var/const/max_amount = 6
+ var/list/obj/item/weapon/reagent_containers/food/snacks/donut/donuts = list()
icon = 'food.dmi'
- icon_state = "donutbox"
+ icon_state = "donutbox6"
name = "donut box"
+
/obj/item/kitchen/egg_box
var/amount = 12
icon = 'food.dmi'
icon_state = "eggbox"
name = "egg box"
+/obj/item/kitchen/donut_box/New()
+ for(var/i = 0; i < max_amount; i++)
+ donuts += new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src)
+ update()
+ ..()
+
/obj/item/kitchen/donut_box/proc/update()
- src.icon_state = text("donutbox[]", src.amount)
+ src.icon_state = text("donutbox[]", src.donuts.len)
return
-/*
-/obj/item/kitchen/donut_box/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/reagent_containers/food/snacks/donut) && (amount < 6))
+/obj/item/kitchen/donut_box/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
+ if (istype(W, /obj/item/weapon/reagent_containers/food/snacks/donut) && (donuts.len < max_amount))
user.drop_item()
W.loc = src
+ donuts += W
usr << "You place a donut back into the box."
- src.update()
+ src.update()
return
-*/
-/obj/item/kitchen/donut_box/MouseDrop(mob/user as mob)
+/obj/item/kitchen/donut_box/MouseDrop(mob/living/user as mob)
if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
if(!istype(user, /mob/living/carbon/metroid))
if( !usr.get_active_hand() )
src.attack_hand(usr, usr.hand, 1)
return
-/obj/item/kitchen/donut_box/attack_paw(mob/user as mob)
+/obj/item/kitchen/donut_box/attack_paw(mob/living/user as mob)
return src.attack_hand(user)
-/obj/item/kitchen/donut_box/attack_hand(mob/user as mob, unused, flag)
+/obj/item/kitchen/donut_box/attack_hand(mob/living/user as mob, unused, flag)
if (flag)
return ..()
src.add_fingerprint(user)
- var/obj/item/weapon/reagent_containers/food/snacks/donut/P = locate() in src
- if(!P && (amount >= 1))
- P = new /obj/item/weapon/reagent_containers/food/snacks/donut( src )
+ var/last = donuts.len
+ if(last <= 0)
+ user << "Oh no! No donuts left!"
+ return
+ //world.log << last
+ var/obj/item/weapon/reagent_containers/food/snacks/donut/P = donuts[last] // Get the last donut.
if(P)
- usr.put_in_hands(P)
- usr << "You take a donut out of the box."
- src.amount--
+ P.loc = user.loc
+ user.put_in_hands(P)
+ donuts -= P
+ user << "You take a donut out of the box."
src.update()
return
/obj/item/kitchen/donut_box/examine()
set src in oview(1)
- src.amount = round(src.amount)
- var/n = src.amount
- for(var/obj/item/weapon/reagent_containers/food/snacks/donut/P in src)
- n++
+ var/n = src.donuts.len
if (n <= 0)
n = 0
usr << "There are no donuts left in the box."
diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm
index 9265e3b07d2..cc5cb63cb63 100644
--- a/code/game/objects/storage/belt.dm
+++ b/code/game/objects/storage/belt.dm
@@ -110,8 +110,8 @@
"/obj/item/clothing/glasses",
"/obj/item/ammo_casing/shotgun",
"/obj/item/ammo_magazine",
- "/obj/item/weapon/reagent_containers/food/snacks/donut",
- "/obj/item/weapon/reagent_containers/food/snacks/jellydonut"
+ "/obj/item/weapon/reagent_containers/food/snacks/donut/normal",
+ "/obj/item/weapon/reagent_containers/food/snacks/donut/jelly"
)
/obj/item/weapon/storage/belt/soulstone
diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm
index 44f504201a3..c40eb1a4920 100644
--- a/code/modules/food/food.dm
+++ b/code/modules/food/food.dm
@@ -104,6 +104,11 @@
name = "donut"
desc = "Goes great with Robust Coffee."
icon_state = "donut1"
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/normal
+ name = "donut"
+ desc = "Goes great with Robust Coffee."
+ icon_state = "donut1"
New()
..()
reagents.add_reagent("nutriment", 3)
@@ -114,12 +119,12 @@
src.name = "frosted donut"
reagents.add_reagent("sprinkles", 2)
-/obj/item/weapon/reagent_containers/food/snacks/chaosdonut
+/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
name = "Chaos Donut"
desc = "Like life, it never quite tastes the same."
icon_state = "donut1"
New()
- ..()
+
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("sprinkles", 1)
bitesize = 10
@@ -150,7 +155,8 @@
src.name = "Frosted Chaos Donut"
reagents.add_reagent("sprinkles", 2)
-/obj/item/weapon/reagent_containers/food/snacks/jellydonut
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/jelly
name = "Jelly Donut"
desc = "You jelly?"
icon_state = "jdonut1"
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index f8c4a34a8af..c3e97e99ab2 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -45,14 +45,14 @@
/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/reagent_containers/food/snacks/egg
)
- result = /obj/item/weapon/reagent_containers/food/snacks/jellydonut
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly
/datum/recipe/donut
items = list(
/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/reagent_containers/food/snacks/egg
)
- result = /obj/item/weapon/reagent_containers/food/snacks/donut
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
/datum/recipe/human
//invalid recipe
@@ -414,7 +414,7 @@
/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/reagent_containers/food/snacks/egg
)
- result = /obj/item/weapon/reagent_containers/food/snacks/chaosdonut
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos
/datum/recipe/human/kabob
items = list(
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 0793154c607..4845d77efa3 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -413,9 +413,10 @@
var/dat = ""
dat += "Crew Manifest
"
var/list/L = list()
- for (var/datum/data/record/t in sortRecord(data_core.general))
- var/R = t.fields["name"] + " - " + t.fields["rank"]
- L += R
+ if(!isnull(data_core.general))
+ for (var/datum/data/record/t in sortRecord(data_core.general))
+ var/R = t.fields["name"] + " - " + t.fields["rank"]
+ L += R
for(var/R in sortList(L))
dat += "[R]
"
dat += "