ID:598287
 
(See the best response by Iobject.)
Code:
obj

Smoke
icon = 'SmokeClouds.dmi'
layer = 50
// density = 1
New()
spawn(rand(60,100))del src
loop
step(src,rand(1,10))
spawn(rand(3,6))goto loop
Bump(M)
..()
if(ismob(M))loc=M:loc


mob
proc

sleepinggas()
if(smokeamount<=0||bombed||dead||attacked||Frozen)return
if(smokeamount)smokeamount--
bombed=1
spawn(50)bombed=0
if(usr.subinvis)
usr.subinvis=0
usr.invisibility=2
usr.invisibility+=10
spawn(30)usr.invisibility-=10
var/g=3
var/t=60
for(var/turf/G in oview(g))
var/T=new/obj/Smoke(usr.loc)
T:owner=src
spawn(t)
for(var/obj/Smoke/G in world)if(G:owner==src)del G

usr.stepback(5)
if(smokeamount<=0)
for(var/obj/Poisons/Sleep_Gas/M in client.screen)del M
for(var/obj/Poisons/Sleep_Gas/M in src)del M


Problem description:

Well when the smoke is created around it just stays in the same spot and doesnt move when Im surronded by grass but for some odd reason when I am by water it works how it wants to.
Has the same effect still wont move.
There are a number of problems with that code (colon abuse, goto abuse, usr in proc abuse, direction bit flag abuse, spaghetti spawning(), what I'm going to call a race condition, and more...), however none of them seem like they would create the symptoms you are describing.

Did you override Enter() for any of your turfs?
Best response
He was talking to me on windows live about this (and complained some bit about people "Not helping" but I can see help here) and I noticed some things wrong. Also I am using the post from DarkCampaigner for most of my fixes, because he believes you aren't trying to help.
obj

Smoke
icon = 'SmokeClouds.dmi'
layer = 50
// density = 1
New()
spawn(rand(60,100))
del(src)
while(src)
step(src,rand(1,10))
spawn(rand(3,6))
break
Bump(M)
..()
if(ismob(M))
del(src)//He wanted it to disappear.


mob
proc
sleepinggas()
if(smokeamount<=0)
return
if(src.bombed)
return
if(src.dead)
return
if(src.attacked)
return
if(src.Frozen)
return//Fixed the if(||) stuff. Also I indented to make it better organized
if(smokeamount)
smokeamount--
bombed=1
spawn(50)
bombed=0
if(src.subinvis)
src.subinvis=0
src.invisibility=2
src.invisibility+=10
spawn(30)
src.invisibility-=10
var/g=3
var/t=60
for(var/turf/G in oview(g))//Fixed the indentation again, the loc, and the :
var/T=new/obj/Smoke()
T.loc = locate(src.x,src.y,src.z)
T.owner=src
spawn(t)
for(var/obj/Smoke/G in world)//Fixed indents, :, and the del G is now del(G)
if(G.owner==src)
del(G)

src.stepback(5)
if(smokeamount<=0)
for(var/obj/Poisons/Sleep_Gas/M in client.screen)//Fixed indents and del M is del(M)
del(M)
for(var/obj/Poisons/Sleep_Gas/M in src)//same as last
del(M)


Hopefully this solves your problems. Again, don't misunderstand (cause you clearly did) he asked for if any turfs had an Enter() override, not just that code you gave. He can't just look at your source remotely whenever he wants, unless he hacked you which I doubt.