Here's the defected code which used to be a bit cleaner before i tried fixing it.
obj/objects
proc
Trash()
if(usr.movement)
var/tmp/trashed = 0
while(!trashed)
if(src.loc == src.norm_loc)
src.loc = usr.loc
src.icon_state = "trashed"
usr.score += 1
usr.cash += 2
var/mob/mom/M = new()
M.Whats_Sound()
trashed = 1
else
usr << "Object is already trashed."
return
trashed = 0
else return