diff --git a/code/WorkInProgress/Tastyfish/Eliza_Data.dm b/code/WorkInProgress/Tastyfish/Eliza_Data.dm
index 3537c73c2cc..0fecf95cf71 100644
--- a/code/WorkInProgress/Tastyfish/Eliza_Data.dm
+++ b/code/WorkInProgress/Tastyfish/Eliza_Data.dm
@@ -353,13 +353,10 @@
process(object)
// get name & message
- var/i = findtext(object, " that ")
- var/sl = 6
+ var/i = findtext(object, ",")
+ var/sl = 1
if(!i || lentext(object) < i + sl)
- i = findtext(object, ",")
- sl = 1
- if(!i || lentext(object) < i + sl)
- return "Tell who that you what?"
+ return "Tell who that you what?"
var/name = trim(copytext(object, 1, i))
object = trim(copytext(object, i + sl))
diff --git a/code/WorkInProgress/Tastyfish/wallmount_frame.dm b/code/WorkInProgress/Tastyfish/wallmount_frame.dm
index d747a5c1ea4..1134dd6a463 100644
--- a/code/WorkInProgress/Tastyfish/wallmount_frame.dm
+++ b/code/WorkInProgress/Tastyfish/wallmount_frame.dm
@@ -63,7 +63,16 @@
req_components = circuit.req_components.Copy()
for(var/A in circuit.req_components)
req_components[A] = circuit.req_components[A]
- if(circuit.frame_desc) desc = circuit.frame_desc
+ req_component_names = circuit.req_components.Copy()
+ for(var/A in req_components)
+ var/cp = text2path(A)
+ var/obj/ct = new cp() // have to quickly instantiate it get name
+ req_component_names[A] = ct.name
+ if(circuit.frame_desc)
+ desc = circuit.frame_desc
+ else
+ update_desc()
+ user << desc
else
user << "\red This frame does not accept circuit boards of this type!"
if(istype(P, /obj/item/weapon/wirecutters))
@@ -126,19 +135,26 @@
if(istype(P, /obj/item/weapon))
for(var/I in req_components)
if(istype(P, text2path(I)) && (req_components[I] > 0))
+ playsound(src.loc, 'Deconstruct.ogg', 50, 1)
if(istype(P, /obj/item/weapon/cable_coil))
var/obj/item/weapon/cable_coil/CP = P
if(CP.amount > 1)
+ var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src)
- CC.amount = 1
+ CC.amount = camt
+ CC.update_icon()
+ CP.use(camt)
components += CC
- req_components[I]--
+ req_components[I] -= camt
+ update_desc()
break
user.drop_item()
P.loc = src
components += P
req_components[I]--
+ update_desc()
break
+ user << desc
if(P.loc != src && !istype(P, /obj/item/weapon/cable_coil))
user << "\red You cannot add that component to the machine!"
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 75a2ed70f87..1b253966adb 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -9,8 +9,23 @@
obj/item/weapon/circuitboard/circuit = null
list/components = null
list/req_components = null
+ list/req_component_names = null
state = 1
+ proc/update_desc()
+ var/D
+ if(req_components)
+ D = "Requires "
+ var/first = 1
+ for(var/I in req_components)
+ if(req_components[I] > 0)
+ D += "[first?"":", "][num2text(req_components[I])] [req_component_names[I]]"
+ first = 0
+ if(first) // nothing needs to be added, then
+ D += "nothing"
+ D += "."
+ desc = D
+
/obj/machinery/constructable_frame/machine_frame
attackby(obj/item/P as obj, mob/user as mob)
if(P.crit_fail)
@@ -48,7 +63,16 @@
req_components = circuit.req_components.Copy()
for(var/A in circuit.req_components)
req_components[A] = circuit.req_components[A]
- if(circuit.frame_desc) desc = circuit.frame_desc
+ req_component_names = circuit.req_components.Copy()
+ for(var/A in req_components)
+ var/cp = text2path(A)
+ var/obj/ct = new cp() // have to quickly instantiate it get name
+ req_component_names[A] = ct.name
+ if(circuit.frame_desc)
+ desc = circuit.frame_desc
+ else
+ update_desc()
+ user << desc
else
user << "\red This frame does not accept circuit boards of this type!"
if(istype(P, /obj/item/weapon/wirecutters))
@@ -104,19 +128,26 @@
if(istype(P, /obj/item/weapon))
for(var/I in req_components)
if(istype(P, text2path(I)) && (req_components[I] > 0))
+ playsound(src.loc, 'Deconstruct.ogg', 50, 1)
if(istype(P, /obj/item/weapon/cable_coil))
var/obj/item/weapon/cable_coil/CP = P
if(CP.amount > 1)
+ var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src)
- CC.amount = 1
+ CC.amount = camt
+ CC.update_icon()
+ CP.use(camt)
components += CC
- req_components[I]--
+ req_components[I] -= camt
+ update_desc()
break
user.drop_item()
P.loc = src
components += P
req_components[I]--
+ update_desc()
break
+ user << desc
if(P.loc != src && !istype(P, /obj/item/weapon/cable_coil))
user << "\red You cannot add that component to the machine!"
diff --git a/code/game/magic/musician.dm b/code/game/magic/musician.dm
index 464a9e9f3aa..3bb9287e6c0 100644
--- a/code/game/magic/musician.dm
+++ b/code/game/magic/musician.dm
@@ -460,7 +460,7 @@
onclose(user, "piano")
Topic(href, href_list)
- if(in_range(src, usr) && !issilicon(usr) && !anchored)
+ if(in_range(src, usr) && !issilicon(usr) && anchored)
if(href_list["tempo"])
song.tempo += text2num(href_list["tempo"])
if(song.tempo < 1)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 7855041e5ba..1186d68cd05 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -804,15 +804,50 @@
M.s_tone = max(min(round(text2num(new_tone)), 220), 1)
M.s_tone = -M.s_tone + 35
- var/new_style = input("Please select hair style", "Character Generation") as null|anything in list( "Cut Hair", "Short Hair", "Long Hair", "Mohawk", "Balding", "Wave", "Bedhead", "Dreadlocks", "Ponytail", "Bald" )
+ // hair
+ var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
+ var/list/hairs = list()
+ // loop through potential hairs
+ for(var/x in all_hairs)
+ var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x
+ hairs.Add(H.name) // add hair name to hairs
+ del(H) // delete the hair after it's all done
+
+ var/new_style = input("Please select hair style", "Character Generation") as null|anything in hairs
+
+ // if new style selected (not cancel)
if (new_style)
M.h_style = new_style
- new_style = input("Please select facial style", "Character Generation") as null|anything in list("Watson", "Chaplin", "Selleck", "Full Beard", "Long Beard", "Neckbeard", "Van Dyke", "Elvis", "Abe", "Chinstrap", "Hipster", "Goatee", "Hogan", "Shaved")
+ for(var/x in all_hairs) // loop through all_hairs again. Might be slightly CPU expensive, but not significantly.
+ var/datum/sprite_accessory/hair/H = new x // create new hair datum
+ if(H.name == new_style)
+ M.hair_style = H // assign the hair_style variable a new hair datum
+ break
+ else
+ del(H) // if hair H not used, delete. BYOND can garbage collect, but better safe than sorry
- if (new_style)
+ // facial hair
+ var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
+ var/list/fhairs = list()
+
+ for(var/x in all_fhairs)
+ var/datum/sprite_accessory/facial_hair/H = new x
+ fhairs.Add(H.name)
+ del(H)
+
+ new_style = input("Please select facial style", "Character Generation") as null|anything in fhairs
+
+ if(new_style)
M.f_style = new_style
+ for(var/x in all_fhairs)
+ var/datum/sprite_accessory/facial_hair/H = new x
+ if(H.name == new_style)
+ M.facial_hair_style = H
+ break
+ else
+ del(H)
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender)
diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm
index 787b7434d65..666245a89cf 100644
--- a/code/modules/mob/screen.dm
+++ b/code/modules/mob/screen.dm
@@ -470,7 +470,7 @@
O.show_message(text("\red [] manages to break out of the straight jacket!", usr), 1)
usr << "\green You successfully break out of your straight jacket."
var/obj/sj = usr:wear_suit
- usr.u_equip(sj)
+ usr.remove_from_mob(sj)
sj.loc = usr.loc
else
usr << "\red You attempt to get out of your straight jacket. (This will take around 4 minutes and you need to stand still)"
@@ -483,7 +483,7 @@
O.show_message(text("\red [] manages to wriggle out of the straight jacket!", usr), 1)
usr << "\blue You successfully get out of your straight jacket."
var/obj/sj = usr:wear_suit
- usr.u_equip(sj)
+ usr.remove_from_mob(sj)
sj.loc = usr.loc
if(usr:handcuffed && (usr.last_special <= world.time) && usr:buckled)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index e4a15e3b6b1..d69eb32ff15 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -305,6 +305,9 @@
src.updateDialog()
+ if(!air_contents) // caused runtime error for the first tick, if created mid-game
+ return
+
if(flush && air_contents.return_pressure() >= SEND_PRESSURE) // flush can happen even without power
flush()