diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 7912a307c91..33000bbfc21 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -20,6 +20,13 @@ idle_power_usage = 2 active_power_usage = 500 +/obj/machinery/gibber/Destroy() + if(contents.len) + for(var/atom/movable/A in contents) + A.loc = get_turf(src) + if(occupant) occupant = null + return ..() + //gibs anything that stands on it's input /obj/machinery/gibber/autogibber @@ -281,52 +288,50 @@ return /obj/machinery/gibber/proc/feedinTopanim() - if(!src.occupant) - return + if(!occupant) return - src.layer = MOB_LAYER + 0.1 + var/arbitrary_delay = 16 //arbitrary delay for animating going down + locked = 1 //lock gibber - src.locked = 1 - - var/image/gibberoverlay = new + var/image/gibberoverlay = new //used to simulate 3D effects gibberoverlay.icon = src.icon gibberoverlay.icon_state = "grinderoverlay" gibberoverlay.overlays += image('icons/obj/kitchen.dmi', "gridle") var/image/feedee = new occupant.dir = 2 - feedee.icon = getFlatIcon(occupant, 2) - feedee.pixel_y = 25 - feedee.pixel_x = 2 + feedee.icon = getFlatIcon(occupant, 2) //makes the image a copy of the occupant - overlays += feedee - overlays += gibberoverlay + var/atom/movable/holder = new //holder for occupant image + holder.name = null //make unclickable + holder.overlays += feedee //add occupant to holder overlays + holder.pixel_y = 25 //above the gibber + holder.pixel_x = 2 + holder.loc = get_turf(src) + holder.layer = MOB_LAYER //simulate mob-like layering + holder.anchored = 1 - var/i //our counter - for(i=0,i<30,i++) //32 tenths of a second (3.2seconds), counting from 0 to 31 - overlays -= gibberoverlay - overlays -= feedee + var/atom/movable/holder2 = new //holder for gibber overlay, used to simulate 3D effect + holder2.name = null + holder2.overlays += gibberoverlay + holder2.loc = get_turf(src) + holder2.layer = MOB_LAYER + 0.1 //3D, it's above the mob, rest of the gibber is behind + holder2.anchored = 1 - feedee.pixel_y-- + animate(holder, pixel_y = 16, time = arbitrary_delay) //animate going down - if(feedee.pixel_y == 16) - feedee.icon += icon('icons/obj/kitchen.dmi', "footicon") - continue + sleep(arbitrary_delay) - if(feedee.pixel_y == -5) - overlays -= feedee - overlays -= gibberoverlay - src.locked = 0 - break + holder.overlays -= feedee //reset static icon + feedee.icon += icon('icons/obj/kitchen.dmi', "footicon") //this is some byond magic; += to the icon var with a black and white image will mask it + holder.overlays += feedee + animate(holder, pixel_y = -3, time = arbitrary_delay) //animate going down further - overlays += feedee - overlays += gibberoverlay + sleep(arbitrary_delay) //time everything right, animate doesn't prevent proc from continuing - sleep(1) - - overlays -= feedee - overlays -= gibberoverlay - src.layer = 3 + qdel(holder) //get rid of holder object + qdel(holder2) //get rid of holder object + locked = 0 //unlock /obj/machinery/gibber/proc/startgibbing(var/mob/user, var/UserOverride=0) if(!istype(user) && !UserOverride)