diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 41d111bac6..6f92a30771 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -96,11 +96,25 @@
icon_state = "down"
anchored = 0
+/obj/item/roller
+ name = "roller bed"
+ desc = "A collapsed roller bed that can be carried around."
+ icon = 'rollerbed.dmi'
+ icon_state = "folded"
+ w_class = 4.0 // Can't be put in backpacks. Oh well.
+
+ attack_self(mob/user)
+ var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
+ R.add_fingerprint(user)
+ del(src)
+
/obj/structure/stool/bed/roller/Move()
..()
if(buckled_mob)
if(buckled_mob.buckled == src)
buckled_mob.loc = src.loc
+ else
+ buckled_mob = null
/obj/structure/stool/bed/roller/buckle_mob(mob/M as mob, mob/user as mob)
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || user.lying || user.stat || M.buckled || istype(usr, /mob/living/silicon/pai) )
@@ -122,4 +136,15 @@
density = 0
icon_state = "down"
..()
- return
\ No newline at end of file
+ return
+
+/obj/structure/stool/bed/roller/MouseDrop(over_object, src_location, over_location)
+ ..()
+ if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
+ if(!ishuman(usr)) return
+ if(buckled_mob) return 0
+ visible_message("[usr] collapses \the [src.name]")
+ new/obj/item/roller(get_turf(src))
+ spawn(0)
+ del(src)
+ return
\ No newline at end of file
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 6350d02f29..3d69ce4bca 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -9,12 +9,13 @@ var/global/floorIsLava = 0
log_adminwarn(rendered)
for (var/client/C in admin_list)
if (C)
- var/msg = rendered
- if (admin_ref)
- msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
- if (admin_holder_ref && C.holder)
- msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
- C << msg
+ if (C.holder.level >= 1)
+ var/msg = rendered
+ if (admin_ref)
+ msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
+ if (admin_holder_ref && C.holder)
+ msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
+ C << msg
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
@@ -22,9 +23,10 @@ var/global/floorIsLava = 0
log_adminwarn(rendered)
for (var/client/C in admin_list)
if (C)
- if(!C.STFU_atklog)
- var/msg = rendered
- C << msg
+ if (C.holder.level >= 1)
+ if(!C.STFU_atklog)
+ var/msg = rendered
+ C << msg
///////////////////////////////////////////////////////////////////////////////////////////////Panels
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index b013b93d20..c0e01cebcf 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -185,6 +185,9 @@
var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null
var/mode = 0
var/condi = 0
+ var/bottlesprite = "1" //yes, strings
+ var/pillsprite = "1"
+ var/client/has_sprites = list()
var/useramount = 30 // Last used amount
/obj/machinery/chem_master/New()
@@ -347,6 +350,7 @@
P.name = "[name] pill"
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
+ P.icon_state = "pill"+pillsprite
reagents.trans_to(P,50)
else if (href_list["createbottle"])
@@ -357,11 +361,33 @@
P.name = "[name] bottle"
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
+ P.icon_state = "bottle"+bottlesprite
reagents.trans_to(P,30)
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
reagents.trans_to(P,50)
-
+ else if(href_list["change_pill"])
+ #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites
+ var/dat = "
"
+ for(var/i = 1 to MAX_PILL_SPRITE)
+ dat += " |
"
+ dat += "
"
+ usr << browse(dat, "window=chem_master")
+ return
+ else if(href_list["change_bottle"])
+ #define MAX_BOTTLE_SPRITE 20 //max icon state of the bottle sprites
+ var/dat = ""
+ for(var/i = 1 to MAX_BOTTLE_SPRITE)
+ dat += " |
"
+ dat += "
"
+ usr << browse(dat, "window=chem_master")
+ return
+ else if(href_list["pill_sprite"])
+ pillsprite = href_list["pill_sprite"]
+ else if(href_list["bottle_sprite"])
+ bottlesprite = href_list["bottle_sprite"]
+ else
+ usr << browse(null, "window=chem_master")
src.updateUsrDialog()
return
@@ -372,6 +398,13 @@
return src.attack_hand(user)
/obj/machinery/chem_master/attack_hand(mob/user as mob)
+ if(!(user.client in has_sprites)) //yes, it's in three places, so they get downloaded even when they arent going to be shown, because they could be in the future
+ spawn()
+ has_sprites += user.client
+ for(var/i = 1 to MAX_PILL_SPRITE)
+ usr << browse_rsc(icon('chemical.dmi', "pill" + num2text(i)), "pill[i].png")
+ for(var/i = 1 to MAX_BOTTLE_SPRITE)
+ usr << browse_rsc(icon('chemical.dmi', "bottle" + num2text(i)), "bottle[i].png")
if(stat & BROKEN)
return
user.machine = src
@@ -418,8 +451,8 @@
else
dat += "Empty
"
if(!condi)
- dat += "
Create pill (50 units max)
"
- dat += "Create bottle (30 units max)"
+ dat += "
Create pill (50 units max)
"
+ dat += "Create bottle (30 units max)
"
else
dat += "Create bottle (50 units max)"
if(!condi)
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index 9b40baf208..241ffdf954 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -20,6 +20,10 @@ em {font-style: normal; font-weight: bold;}
.adminobserver {color: #996600; font-weight: bold;}
.admin {color: #386aff; font-weight: bold;}
+.mod {color: #735638; font-weight: bold;}
+.modooc {color: #184880; font-weight: bold;}
+.adminmod {color: #402A14; font-weight: bold;}
+
.name { font-weight: bold;}
.say {}