Files
kiwistation/code/game/machinery/washing_machine.dm
T
2016-01-13 14:40:15 -06:00

293 lines
8.3 KiB
Plaintext

/obj/machinery/washing_machine
name = "washing machine"
desc = "Gets rid of those pesky bloodstains, or your money back!"
icon = 'icons/obj/machines/washing_machine.dmi'
icon_state = "wm_10"
density = 1
anchored = 1
var/state = 1
//1 = empty, open door
//2 = empty, closed door
//3 = full, open door
//4 = full, closed door
//5 = running
//6 = blood, open door
//7 = blood, closed door
//8 = blood, running
var/gibs_ready = 0
var/obj/crayon
/obj/machinery/washing_machine/AltClick(mob/user)
if(!user.canUseTopic(src))
return
if( state != 4 )
usr << "The washing machine cannot run in this state."
return
if( locate(/mob,contents) )
state = 8
else
state = 5
update_icon()
sleep(200)
for(var/atom/A in contents)
A.clean_blood()
//Tanning!
for(var/obj/item/stack/sheet/hairlesshide/HH in contents)
var/obj/item/stack/sheet/wetleather/WL = new(src)
WL.amount = HH.amount
qdel(HH)
//Corgi costume says goodbye
for(var/obj/item/clothing/suit/hooded/ian_costume/IC in contents)
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src)
qdel(IC)
if(crayon)
var/wash_color
if(istype(crayon,/obj/item/toy/crayon))
var/obj/item/toy/crayon/CR = crayon
wash_color = CR.colourName
else if(istype(crayon,/obj/item/weapon/stamp))
var/obj/item/weapon/stamp/ST = crayon
wash_color = ST.item_color
if(wash_color)
var/new_jumpsuit_icon_state = ""
var/new_jumpsuit_item_state = ""
var/new_jumpsuit_name = ""
var/new_can_adjust
var/new_glove_icon_state = ""
var/new_glove_item_state = ""
var/new_glove_name = ""
var/new_shoe_icon_state = ""
var/new_shoe_name = ""
var/new_sheet_icon_state = ""
var/new_sheet_name = ""
var/new_softcap_icon_state = ""
var/new_softcap_name = ""
var/new_desc = "The colors are a bit dodgy."
for(var/T in typesof(/obj/item/clothing/under/color))
var/obj/item/clothing/under/color/J = new T
//world << "DEBUG: [wash_color] == [J.item_color]"
if(wash_color == J.item_color)
new_jumpsuit_icon_state = J.icon_state
new_jumpsuit_item_state = J.item_state
new_jumpsuit_name = J.name
new_can_adjust = J.can_adjust
qdel(J)
break
qdel(J)
for(var/T in typesof(/obj/item/clothing/gloves/color))
var/obj/item/clothing/gloves/color/G = new T
if(wash_color == G.item_color)
new_glove_icon_state = G.icon_state
new_glove_item_state = G.item_state
new_glove_name = G.name
qdel(G)
break
qdel(G)
for(var/T in typesof(/obj/item/clothing/shoes/sneakers))
var/obj/item/clothing/shoes/sneakers/S = new T
if(wash_color == S.item_color)
new_shoe_icon_state = S.icon_state
new_shoe_name = S.name
qdel(S)
break
qdel(S)
for(var/T in typesof(/obj/item/weapon/bedsheet))
var/obj/item/weapon/bedsheet/B = new T
if(wash_color == B.item_color)
new_sheet_icon_state = B.icon_state
new_sheet_name = B.name
qdel(B)
break
qdel(B)
for(var/T in typesof(/obj/item/clothing/head/soft))
var/obj/item/clothing/head/soft/H = new T
if(wash_color == H.item_color)
new_softcap_icon_state = H.icon_state
new_softcap_name = H.name
qdel(H)
break
qdel(H)
if(new_jumpsuit_icon_state && new_jumpsuit_item_state && new_jumpsuit_name)
for(var/obj/item/clothing/under/color/J in contents)
J.item_state = new_jumpsuit_item_state
J.icon_state = new_jumpsuit_icon_state
J.item_color = wash_color
J.name = new_jumpsuit_name
J.desc = new_desc
J.suit_color = wash_color
J.can_adjust = new_can_adjust
if(new_glove_icon_state && new_glove_item_state && new_glove_name)
for(var/obj/item/clothing/gloves/color/G in contents)
G.item_state = new_glove_item_state
G.icon_state = new_glove_icon_state
G.item_color = wash_color
G.name = new_glove_name
G.desc = new_desc
if(new_shoe_icon_state && new_shoe_name)
for(var/obj/item/clothing/shoes/sneakers/S in contents)
if (S.chained == 1)
S.chained = 0
S.slowdown = SHOES_SLOWDOWN
new /obj/item/weapon/restraints/handcuffs( src )
S.icon_state = new_shoe_icon_state
S.item_color = wash_color
S.name = new_shoe_name
S.desc = new_desc
if(new_sheet_icon_state && new_sheet_name)
for(var/obj/item/weapon/bedsheet/B in contents)
B.icon_state = new_sheet_icon_state
B.item_color = wash_color
B.name = new_sheet_name
B.desc = new_desc
if(new_softcap_icon_state && new_softcap_name)
for(var/obj/item/clothing/head/soft/H in contents)
H.icon_state = new_softcap_icon_state
H.item_color = wash_color
H.name = new_softcap_name
H.desc = new_desc
qdel(crayon)
crayon = null
if( locate(/mob,contents) )
state = 7
gibs_ready = 1
else
state = 4
update_icon()
/obj/machinery/washing_machine/verb/climb_out()
set name = "Climb out"
set category = "Object"
set src in usr.loc
sleep(20)
if(state in list(1,3,6) )
usr.loc = src.loc
/obj/machinery/washing_machine/update_icon()
icon_state = "wm_[state]0"
/obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp))
if( state in list( 1, 3, 6 ) )
if(!crayon)
if(!user.drop_item())
return
crayon = W
crayon.loc = src
else
..()
else
..()
else if(istype(W,/obj/item/weapon/grab))
if(state == 1)
var/obj/item/weapon/grab/G = W
if(iscorgi(G.affecting))
G.affecting.loc = src
qdel(G)
state = 3
else
..()
else if(istype(W,/obj/item/stack/sheet/hairlesshide) || \
istype(W,/obj/item/clothing/under) || \
istype(W,/obj/item/clothing/mask) || \
istype(W,/obj/item/clothing/head) || \
istype(W,/obj/item/clothing/gloves) || \
istype(W,/obj/item/clothing/shoes) || \
istype(W,/obj/item/clothing/suit) || \
istype(W,/obj/item/weapon/bedsheet))
//YES, it's hardcoded... saves a var/can_be_washed for every single clothing item.
if ( istype(W,/obj/item/clothing/suit/space ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/suit/syndicatefake ) )
user << "This item does not fit."
return
// if ( istype(W,/obj/item/clothing/suit/powered ) )
// user << "This item does not fit."
// return
if ( istype(W,/obj/item/clothing/suit/cyborg_suit ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/suit/bomb_suit ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/suit/armor ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/suit/armor ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/mask/gas ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/mask/cigarette ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/head/syndicatefake ) )
user << "This item does not fit."
return
if ( istype(W,/obj/item/clothing/head/helmet ) )
user << "This item does not fit."
return
if(W.flags & NODROP) //if "can't drop" item
user << "<span class='warning'>\The [W] is stuck to your hand, you cannot put it in the washing machine!</span>"
return
if(contents.len < 5)
if ( state in list(1, 3) )
if(!user.drop_item())
return
W.loc = src
state = 3
else
user << "<span class='warning'>You can't put the item in right now!</span>"
else
user << "<span class='warning'>The washing machine is full!</span>"
else
..()
update_icon()
/obj/machinery/washing_machine/attack_hand(mob/user)
switch(state)
if(1)
state = 2
if(2)
state = 1
for(var/atom/movable/O in contents)
O.loc = src.loc
if(3)
state = 4
if(4)
state = 3
for(var/atom/movable/O in contents)
O.loc = src.loc
crayon = null
state = 1
if(5)
user << "<span class='danger'>The [src] is busy.</span>"
if(6)
state = 7
if(7)
if(gibs_ready)
gibs_ready = 0
if(locate(/mob,contents))
var/mob/M = locate(/mob,contents)
M.gib()
for(var/atom/movable/O in contents)
O.loc = src.loc
crayon = null
state = 1
update_icon()