Merge with upstream/master

This commit is contained in:
DZD
2015-02-12 16:43:01 -05:00
98 changed files with 3191 additions and 2422 deletions
+15 -3
View File
@@ -5,9 +5,6 @@
icon_state = "cart"
anchored = 0
density = 1
flags = OPENCONTAINER
//copypaste sorry
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
var/obj/item/stack/sheet/glass/myglass = null
var/obj/item/stack/sheet/metal/mymetal = null
var/obj/item/stack/sheet/plasteel/myplasteel = null
@@ -82,6 +79,21 @@
update_icon()
else
user << fail_msg
else if(istype(I, /obj/item/weapon/wrench))
if (!anchored && !isinspace())
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message( \
"[user] tightens \the [src]'s casters.", \
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 1
else if(anchored)
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message( \
"[user] loosens \the [src]'s casters.", \
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 0
else
usr << "<span class='warning'>You cannot interface your modules [src]!</span>"
+204
View File
@@ -0,0 +1,204 @@
/obj/structure/foodcart
name = "food cart"
desc = "A cart for transporting food and drinks."
icon = 'icons/obj/foodcart.dmi'
icon_state = "cart"
anchored = 0
density = 1
//Food slots
var/list/food_slots[6]
//var/obj/item/weapon/reagent_containers/food/snacks/food1 = null
//var/obj/item/weapon/reagent_containers/food/snacks/food2 = null
//var/obj/item/weapon/reagent_containers/food/snacks/food3 = null
//var/obj/item/weapon/reagent_containers/food/snacks/food4 = null
//var/obj/item/weapon/reagent_containers/food/snacks/food5 = null
//var/obj/item/weapon/reagent_containers/food/snacks/food6 = null
//Drink slots
var/list/drink_slots[6]
//var/obj/item/weapon/reagent_containers/food/drinks/drink1 = null
//var/obj/item/weapon/reagent_containers/food/drinks/drink2 = null
//var/obj/item/weapon/reagent_containers/food/drinks/drink3 = null
//var/obj/item/weapon/reagent_containers/food/drinks/drink4 = null
//var/obj/item/weapon/reagent_containers/food/drinks/drink5 = null
//var/obj/item/weapon/reagent_containers/food/drinks/drink6 = null
/obj/structure/foodcart/proc/put_in_cart(obj/item/I, mob/user)
user.drop_item()
I.loc = src
updateUsrDialog()
user << "<span class='notice'>You put [I] into [src].</span>"
return
/obj/structure/foodcart/attackby(obj/item/I, mob/user)
var/fail_msg = "<span class='notice'>There are no open spaces for this in [src].</span>"
if(!I.is_robot_module())
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks))
var/success = 0
for(var/s=1,s<=6,s++)
if(!food_slots[s])
put_in_cart(I, user)
food_slots[s]=I
update_icon()
success = 1
break;
if(!success)
user << fail_msg
else if(istype(I, /obj/item/weapon/reagent_containers/food/drinks))
var/success = 0
for(var/s=1,s<=6,s++)
if(!drink_slots[s])
put_in_cart(I, user)
drink_slots[s]=I
update_icon()
success = 1
break;
if(!success)
user << fail_msg
else if(istype(I, /obj/item/weapon/wrench))
if (!anchored && !isinspace())
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message( \
"[user] tightens \the [src]'s casters.", \
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 1
else if(anchored)
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message( \
"[user] loosens \the [src]'s casters.", \
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 0
else
usr << "<span class='warning'>You cannot interface your modules [src]!</span>"
/obj/structure/foodcart/attack_hand(mob/user)
user.set_machine(src)
var/dat
if(food_slots[1])
dat += "<a href='?src=\ref[src];f1=1'>[food_slots[1]]</a><br>"
if(food_slots[2])
dat += "<a href='?src=\ref[src];f2=1'>[food_slots[2]]</a><br>"
if(food_slots[3])
dat += "<a href='?src=\ref[src];f3=1'>[food_slots[3]]</a><br>"
if(food_slots[4])
dat += "<a href='?src=\ref[src];f4=1'>[food_slots[4]]</a><br>"
if(food_slots[5])
dat += "<a href='?src=\ref[src];f5=1'>[food_slots[5]]</a><br>"
if(food_slots[6])
dat += "<a href='?src=\ref[src];f6=1'>[food_slots[6]]</a><br>"
if(drink_slots[1])
dat += "<a href='?src=\ref[src];d1=1'>[drink_slots[1]]</a><br>"
if(drink_slots[2])
dat += "<a href='?src=\ref[src];d2=1'>[drink_slots[2]]</a><br>"
if(drink_slots[3])
dat += "<a href='?src=\ref[src];d3=1'>[drink_slots[3]]</a><br>"
if(drink_slots[4])
dat += "<a href='?src=\ref[src];d4=1'>[drink_slots[4]]</a><br>"
if(drink_slots[5])
dat += "<a href='?src=\ref[src];d5=1'>[drink_slots[5]]</a><br>"
if(drink_slots[6])
dat += "<a href='?src=\ref[src];d6=1'>[drink_slots[6]]</a><br>"
var/datum/browser/popup = new(user, "foodcart", name, 240, 160)
popup.set_content(dat)
popup.open()
/obj/structure/foodcart/Topic(href, href_list)
if(!in_range(src, usr))
return
if(!isliving(usr))
return
var/mob/living/user = usr
if(href_list["f1"])
if(food_slots[1])
user.put_in_hands(food_slots[1])
user << "<span class='notice'>You take [food_slots[1]] from [src].</span>"
food_slots[1] = null
if(href_list["f2"])
if(food_slots[2])
user.put_in_hands(food_slots[2])
user << "<span class='notice'>You take [food_slots[2]] from [src].</span>"
food_slots[2] = null
if(href_list["f3"])
if(food_slots[3])
user.put_in_hands(food_slots[3])
user << "<span class='notice'>You take [food_slots[3]] from [src].</span>"
food_slots[3] = null
if(href_list["f4"])
if(food_slots[4])
user.put_in_hands(food_slots[4])
user << "<span class='notice'>You take [food_slots[4]] from [src].</span>"
food_slots[4] = null
if(href_list["f5"])
if(food_slots[5])
user.put_in_hands(food_slots[5])
user << "<span class='notice'>You take [food_slots[5]] from [src].</span>"
food_slots[5] = null
if(href_list["f6"])
if(food_slots[6])
user.put_in_hands(food_slots[6])
user << "<span class='notice'>You take [food_slots[6]] from [src].</span>"
food_slots[6] = null
if(href_list["d1"])
if(drink_slots[1])
user.put_in_hands(drink_slots[1])
user << "<span class='notice'>You take [drink_slots[1]] from [src].</span>"
drink_slots[1] = null
if(href_list["d2"])
if(drink_slots[2])
user.put_in_hands(drink_slots[2])
user << "<span class='notice'>You take [drink_slots[2]] from [src].</span>"
drink_slots[2] = null
if(href_list["d3"])
if(drink_slots[3])
user.put_in_hands(drink_slots[3])
user << "<span class='notice'>You take [drink_slots[3]] from [src].</span>"
drink_slots[3] = null
if(href_list["d4"])
if(drink_slots[4])
user.put_in_hands(drink_slots[4])
user << "<span class='notice'>You take [drink_slots[4]] from [src].</span>"
drink_slots[4] = null
if(href_list["d5"])
if(drink_slots[5])
user.put_in_hands(drink_slots[5])
user << "<span class='notice'>You take [drink_slots[5]] from [src].</span>"
drink_slots[5] = null
if(href_list["d6"])
if(drink_slots[6])
user.put_in_hands(drink_slots[6])
user << "<span class='notice'>You take [drink_slots[6]] from [src].</span>"
drink_slots[6] = null
update_icon() //Not really needed without overlays, but keeping just in case
updateUsrDialog()
/*
Overlays for cart_unused
/obj/structure/foodcart/update_icon()
overlays = null
if(food1)
overlays += "cart_food1"
if(food2)
overlays += "cart_food2"
if(food3)
overlays += "cart_food3"
if(food4)
overlays += "cart_food4"
if(food5)
overlays += "cart_food5"
if(food6)
overlays += "cart_food6"
if(drink1)
overlays += "cart_drink1"
if(drink2)
overlays += "cart_drink2"
if(drink3)
overlays += "cart_drink3"
if(drink4)
overlays += "cart_drink4"
if(drink5)
overlays += "cart_drink5"
if(drink6)
overlays += "cart_drink6"
*/
@@ -34,14 +34,6 @@
update_nearby_tiles()
..()
proc/update_nearby_tiles(need_rebuild) //Copypasta from airlock code
if(!air_master)
return 0
air_master.mark_for_update(get_turf(src))
return 1
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 0
+17 -2
View File
@@ -482,14 +482,29 @@
update_icon()
else
user << "<span class='notice'>[src] can't hold any more signs.</span>"
else if(mybag)
mybag.attackby(I, user)
else if(istype(I, /obj/item/weapon/crowbar))
user.visible_message("<span class='warning'>[user] begins to empty the contents of [src].</span>")
if(do_after(user, 30))
usr << "<span class='notice'>You empty the contents of [src]'s bucket onto the floor.</span>"
reagents.reaction(src.loc)
src.reagents.clear_reagents()
else if(istype(I, /obj/item/weapon/wrench))
if (!anchored && !isinspace())
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message( \
"[user] tightens \the [src]'s casters.", \
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 1
else if(anchored)
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message( \
"[user] loosens \the [src]'s casters.", \
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 0
else if(mybag)
mybag.attackby(I, user)
else
usr << "<span class='warning'>You cannot interface your modules [src]!</span>"
@@ -157,13 +157,6 @@
CheckHardness()
return
proc/update_nearby_tiles(need_rebuild) //Copypasta from airlock code
if(!air_master) return 0
air_master.mark_for_update(get_turf(src))
return 1
/obj/structure/mineral_door/iron
mineralType = "metal"
hardness = 3
@@ -27,13 +27,6 @@ obj/structure/windoor_assembly
var/secure = 0 //Whether or not this creates a secure windoor
var/state = "01" //How far the door assembly has progressed
/obj/structure/windoor_assembly/proc/update_nearby_tiles(need_rebuild)
if(!air_master) return 0
air_master.mark_for_update(loc)
return 1
obj/structure/windoor_assembly/New(dir=NORTH)
..()
src.ini_dir = src.dir
+12 -20
View File
@@ -65,7 +65,7 @@ var/global/wcColored
if(health <= 0)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window destroyed by [Proj.firer.name] ([formatPlayerPanel(Proj.firer,Proj.firer.ckey)]) via \an [Proj]! pdiff = [pdiff] at [formatJumpTo(loc)]!")
msg_admin_attack("Window destroyed by [Proj.firer.name] ([formatPlayerPanel(Proj.firer,Proj.firer.ckey)]) via \an [Proj]! pdiff = [pdiff] at [formatJumpTo(loc)]!")
log_admin("Window destroyed by ([Proj.firer.ckey]) via \an [Proj]! pdiff = [pdiff] at [loc]!")
destroy()
return
@@ -135,19 +135,19 @@ var/global/wcColored
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
if(M)
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
log_admin("Window with pdiff [pdiff] at [loc] deanchored by [M.real_name] ([M.ckey])!")
else
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [AM]!")
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [AM]!")
log_admin("Window with pdiff [pdiff] at [loc] deanchored by [AM]!")
if(health <= 0)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
if(M)
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
log_admin("Window with pdiff [pdiff] at [loc] destroyed by [M.real_name] ([M.ckey])!")
else
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [AM]!")
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [AM]!")
log_admin("Window with pdiff [pdiff] at [loc] destroyed by [AM]!")
destroy()
@@ -158,7 +158,7 @@ var/global/wcColored
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window destroyed by hulk [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
msg_admin_attack("Window destroyed by hulk [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
log_admin("Window destroyed by hulk [user.real_name] ([user.ckey]) with pdiff [pdiff] at [loc]!")
destroy()
else if (usr.a_intent == "harm")
@@ -183,7 +183,7 @@ var/global/wcColored
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window destroyed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
msg_admin_attack("Window destroyed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
destroy()
else //for nicer text~
user.visible_message("<span class='danger'>[user] smashes into [src]!</span>")
@@ -240,7 +240,7 @@ var/global/wcColored
return
if(W.flags & NOBLUDGEON) return
if(istype(W, /obj/item/weapon/screwdriver))
if(reinf && state >= 1)
state = 3 - state
@@ -254,7 +254,7 @@ var/global/wcColored
if(!anchored)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
else if(!reinf)
anchored = !anchored
@@ -264,7 +264,7 @@ var/global/wcColored
if(!anchored)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1)
state = 1 - state
@@ -305,7 +305,7 @@ var/global/wcColored
step(src, get_dir(user, src))
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
else
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
@@ -325,7 +325,7 @@ var/global/wcColored
if(health <= 0)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] broken at [formatJumpTo(loc)]!")
msg_admin_attack("Window with pdiff [pdiff] broken at [formatJumpTo(loc)]!")
destroy()
return
@@ -403,14 +403,6 @@ var/global/wcColored
dir = ini_dir
update_nearby_tiles(need_rebuild=1)
//This proc has to do with airgroups and atmos, it has nothing to do with smoothwindows, that's update_nearby_tiles().
/obj/structure/window/proc/update_nearby_tiles(need_rebuild)
if(!air_master) return 0
air_master.mark_for_update(get_turf(src))
return 1
//checks if this window is full-tile one
/obj/structure/window/proc/is_fulltile()
if(dir & (dir - 1))