ID:1666777
 
(See the best response by Albro1.)
I need help optimizing a couple procs.
Everytime I run the profiler these procs in particular are taking up way to much space.
Not really sure exactly what is eating up the most space. Also not really sure what and what does not belong in the client/north

Here is the move() proc

mob/human
Move(turf/loc,dirr)
if(!src || !src.client) return
if(!src.loc)
for(var/obj/Respawn_Pt/R in world)
if((!faction || (faction.village=="Missing"&&R.ind==4))||(faction.village=="Konoha"&&R.ind==1)||(faction.village=="Suna"&&R.ind==2)||(faction.village=="Kiri"&&R.ind==3))
loc = R.loc
break
if(!src.client)
if(!istype(src,/mob/human))
return
if(!loc)
return
if(!src.canwalk)
return
if(src.stunned) return
if(src.Juubi_Summon)return
if(src.barber) return
if(src.client) src.old_location=src.loc


if(istype(src,/mob/human/clay))
. = ..()
for(var/area/XE in oview(src,0))
if(istype(XE,/area/nopkzone))
var/mob/human/clay/spider/S = src
if(istype(src,/mob/human/clay/spider) && S.explode && istype(S.explode,/mob/human/player))
for(var/obj/trigger/exploding_spider/T in S.explode.triggers)
if(T.spider == src) S.explode.RemoveTrigger(T)
src.loc=null
return

if(istype(src,/mob/human/sandmonster)||istype(src,/mob/human/player/npc))
if(src.icon_state!="D-funeral" && !src.stunned)
goto fin
else
return 0

if(src.client && src.client.inputting)
return 0
if(src.incombo)
return 0
if(src.frozen)
return 0

if(src.lava_walk)
if(src.pk)
var/obj/a = new/obj/lava_walk(locate(src.x,src.y,src.z))
var/obj/b = new/obj/lava_walk(locate(src.x-1,src.y,src.z))
var/obj/c = new/obj/lava_walk(locate(src.x+1,src.y,src.z))
var/obj/d = new/obj/lava_walk(locate(src.x,src.y-1,src.z))
var/obj/e = new/obj/lava_walk(locate(src.x,src.y+1,src.z))
a:lavaowner = src
b:lavaowner = src
c:lavaowner = src
d:lavaowner = src
e:lavaowner = src

if(istype(src,/mob/spectator))
src.density=0
src.icon=null
goto fin


if(capture_the_flag&&capture_the_flag.HasFlag(src))
src.movepenalty+=1

if(src.mole)
if(src.curchakra>src.chakraregen || !src.curchakra<=0)
src.stunned=0
src.curchakra-=rand(40,100)
src.movepenalty+=5
else if(src.curchakra<src.chakraregen && src.curchakra<=0)
src.stunned+=1
var/i=0
i=Iswater(src.loc)
if(i)
var/obj/haku_ice/ice = locate(/obj/haku_ice) in loc
if(!ice)
if(clan == "Haku")
new /obj/haku_ice(loc)
else
if(chakra_foot)
watercount++
waterlogged = 0
curchakra -= 1
else if(clan == "Capacity"||clan=="Hozuki")
waterlogged = 0
watercount++
else if(curchakra>5)
curchakra-=5
waterlogged=1
watercount++
else if(curstamina>25)
curstamina-=25
waterlogged=1
watercount++
else
return 0


if(src && src.carrying)
for(var/mob/human/npc/bounty/B in view(src,1))
for(var/mob/corpse/C in src.carrying)
switch(input("Would you like to cash in your corpses' bountys?!","Corpse Bounty") in list ("Yes","No"))
if("Yes")
if(!src || !C) return
src.money+=C.corpsebounty
src<<"Gained [C.corpsebounty] money"
var/list/Team
if(src.squad)
Team = list()
for(var/mob/U in src.squad.online_members)
if(U in range(src,25))
Team += U
if(src.squad)
for(var/mob/U in Team)
U.money+=C.corpsebounty
U<<"Gained [C.corpsebounty] money"
U<<'Cash.wav'
for(var/mob/human/M in world)
M.carrying-=C
C.carryingme=null
C.corpsebounty=0
C.name="[C.name]<font color =green>CASHED IN!"
C.loc = locate(/turf/cage1)
src<<'Cash.wav'

if(src.Tank)
for(var/mob/human/player/Xe in get_step(src,src.dir))
if(Xe && Xe!=src && !Xe.ko && !Xe.protected)//(Xe.client))
var/obj/t = new/obj(Xe.loc)
t.icon='icons/gatesmack.dmi'
flick("smack",t)
if(t)t.loc=null
if(src.Tank==3)
spawn()if(Xe && src)Xe.Dec_Stam((src.rfx+src.rfxbuff-rfxneg)*pick(1,3)+600,1,src)
else if(src && src.Tank==4)
spawn()if(src && Xe)Xe.Dec_Stam((src.rfx+src.rfxbuff-rfxneg)*pick(2,6)+600,1,src)
else
spawn()if(src && Xe)Xe.Dec_Stam((src.str+src.strbuff-strneg)*pick(1,3)+400,1,src)
spawn()if(Xe && src)Xe.Hostile(src)
if(Xe && src &&!Xe.Tank)
Xe.loc=locate(src.x,src.y,src.z)
Xe.icon_state="Hurt"


spawn()
if(src && Xe && !Xe.Tank)
Xe.Knockback(5,turn(src.dir, 180))
else
if(src && Xe)Xe.Knockback(5,src.dir)
if(Xe)Xe.icon_state=""
else
if(src && Xe)src.loc=locate(Xe.x,Xe.y,Xe.z)

if(src.dynamic_kick)
for(var/mob/human/Xe in get_step(src,src.dir))
if(Xe!=src && !Xe.ko && !Xe.protected && (Xe.client/*||istype(Xe,/mob/human/player/npc/kage_bunshin)*/))
var/obj/t = new/obj(Xe.loc)
t.icon='icons/gatesmack.dmi'
flick("smack",t)
if(t)t.loc=null
if(src.dynamic_kick)
viewers(src) << output("[src] Dynamic Kick!", "combat_output")
spawn()if(src && Xe)Xe.Dec_Stam((src.rfx+src.rfxbuff-rfxneg)*pick(1,3)+500,1,src)
else if(src && Xe&&src.dynamic_kick==0)
spawn()if(src && Xe)Xe.Dec_Stam((src.rfx+src.rfxbuff-rfxneg)*pick(2,6)+100,1,src)
else
spawn()if(src && Xe)Xe.Dec_Stam((src.str+src.strbuff-strneg)*pick(1,3)+50,1,src)
spawn()if(src && Xe)Xe.Hostile(src)

if(Xe && src &&!Xe.dynamic_kick)
Xe.loc=locate(src.x,src.y,src.z)
Xe.icon_state="Hurt"



spawn()
viewers(src) << output("[src] Dynamic Kick!", "combat_output")
if(Xe && src&&!Xe.dynamic_kick)
Xe.Knockback(5,turn(src.dir, 180))
else
if(src && Xe)Xe.Knockback(5,src.dir)
if(src && Xe)Xe.icon_state=""
else
if(src && Xe)src.loc=locate(Xe.x,Xe.y,Xe.z)

if(movin)
return ..()

if(dirr==src.dir)
src.movin=1
walk(src,src.dir,1)
sleep(3)
walk(src,0)
src.movin=0
return 1
else
return ..()
if(!EN[14])
return ..()
if(src && !src.movedrecently)
src.movedrecently++
if(src && src.movedrecently>10)
src.movedrecently=10

if(src && src.isguard)
src.icon_state=""
src.isguard=0
for(var/obj/Bonespire/P in get_step(src,src.dir))
if(P.causer==src)
P.density=0
spawn(2)
if(P)
P.density=1
for(var/turf/P in get_step(src,src.dir))
if(!P.icon || P.type==/turf)
return 0
if(src.sleeping)
src.sleeping=0
src.icon_state=""
if(length(carrying))
for(var/mob/X in carrying)
X.loc=src.loc
fin

. = ..()
if(src.HasSkill(BLOOD_BIND))
for(var/obj/undereffect/B in src.loc)
if(B.uowner)src.Blood_Add(B.uowner)

if(!istype(src,/mob/human/player/npc) && src.z && src.z>1)
src.Get_Global_Coords()
var/wa=0

//~~~~
if(!afteryou_cool && wa)
if(pick(0,1))
var/squadsize=pick(1,2,3,4)
squadsize=min(squadsize,afteryou)
afteryou_cool=1
afteryou-=squadsize
spawn(30)
var/lvl=1
if(MissionClass=="D")
lvl=limit(1,round(src.blevel * rand(0.4,1)),30)
if(MissionClass=="C")
lvl=limit(1,round(src.blevel * rand(0.7,1.1)),60)
if(MissionClass=="B")
lvl=limit(1,round(src.blevel * rand(0.8,1.2)),80)
if(MissionClass=="A")
lvl=limit(1,round(src.blevel * rand(0.9,1.3)),100)
if(MissionClass=="S")
lvl=limit(1,round(src.blevel * rand(1,1.3)),100)

Ambush(src,lvl,squadsize)

else
if(wa)
spawn(200)
afteryou_cool=0
for(var/mob/human/player/npc/Q in oview(5))
if(Q.following==src)
Q.nextstep=src.dir
for(var/area/XE in oview(src,0))
if(istype(XE,/area/nopkzone))
if(src)src.Hostile()
if(istype(src,/mob/human/sandmonster)||istype(src,/mob/human/player/npc))
canmove=0
spawn(1)
canmove=1
return
for(var/obj/x in oview(0))
if(istype(x,/obj/caltrops))
x:E(src)
for(var/obj/x in oview(1))
if(istype(x,/obj/trip))
x:E(src)

// if (src.is_doubleStepping==1)
// return

src.runlevel++
if(src.runlevel>8)
src.runlevel=8
if(src.doublestep==2 && src.runlevel>=4 && canmove==1)
src.is_doubleStepping = 1
step(src,src.dir,0)
if(!src.Sprinting)
spawn(20)
src.runlevel--
if(src.levitate && src.runlevel<=3)
src.pixel_y=0
src.icon_state=""
src.levitation_active=0
else if(src.icon_state=="" &&src.runlevel<=3)//Run
src.icon_state=""
if(src.runlevel>4 &&!src.Size)
if(!src.icon_state&&!src.rasengan&&!src.larch&&src.levitate&&!src.lightning_cutter)
src.icon_state="Seal"
src.levitation_active=1

start
if(src)src.pixel_y+=1
sleep(2)
if(src)src.pixel_y+=1.5
sleep(3)
if(src)src.pixel_y-=1.5
sleep(2)
if(src)src.pixel_y-=1
if(src.runlevel>4)
goto start

else
if(!src.icon_state&&!src.rasengan&&!src.larch&&!src.levitate&&!src.lightning_cutter)
src.icon_state=""//Run
else
if(src.levitate&&src.icon_state=="Seal")
src.icon_state=""
src.levitation_active=0
if(src.is_doubleStepping==1)
src.icon_state="Run2"
/* else if(src.icon_state=="Run")
src.icon_state=""*/


canmove=0
sleep(-1)
if(src && src.Size==1)
src.movepenalty=25
if(src.Size==2)
src.movepenalty=35
if(src.movepenalty>50)
src.movepenalty=50
if(move_stun)
if(!movepenalty)
movepenalty = 10
sleep(round(movepenalty/5))
else
sleep(round(movepenalty/10))
/*
if(src.leading)
sleep(src.GetMovementSpeed())
*/

canmove=1


mob/var/movement_map
client
West()
if(src.mob.controlmob)
step(mob.controlmob,WEST)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,WEST) in oview(20,src.mob))
step(src.mob.Primary,WEST)
return

var/mob/user=src.mob
if(user &&user.pixel_y)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))
if(user &&user.pixel_x>0)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))

if(mob.movement_map)
var/dir = mob.movement_map["[WEST]"]
step(mob, dir)
return
..()

East()
if(src.mob.controlmob)
step(mob.controlmob,EAST)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,EAST) in oview(20,src.mob))
step(src.mob.Primary,EAST)
return

var/mob/user=src.mob
if(user &&user.pixel_x<0)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))
if(user &&user.pixel_y)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))

if(mob.movement_map)
var/dir = mob.movement_map["[EAST]"]
step(mob, dir)
return
..()

North()
if(src.mob.controlmob)
step(mob.controlmob,NORTH)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,NORTH) in oview(20,src.mob))
step(src.mob.Primary,NORTH)
return

var/mob/user=src.mob
if(user &&user.pixel_y<0)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))
if(user &&user.pixel_x)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))

if(mob.movement_map)
var/dir = mob.movement_map["[NORTH]"]
step(mob, dir)
return
..()

South()
if(src.mob.controlmob)
step(mob.controlmob,SOUTH)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,SOUTH) in oview(20,src.mob))
step(src.mob.Primary,SOUTH)
return

var/mob/user=src.mob
if(user &&user.pixel_y>0)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))
if(user &&user.pixel_x)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))

if(mob.movement_map)
var/dir = mob.movement_map["[SOUTH]"]
step(mob, dir)
return
..()

Southeast()
if(src.mob.controlmob)
step(mob.controlmob,SOUTHEAST)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,SOUTHEAST) in oview(20,src.mob))
step(src.mob.Primary,SOUTHEAST)
return

var/mob/user=src.mob
if(user &&user.pixel_y>0)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))
if(user &&user.pixel_x<0)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))

if(mob.movement_map)
var/dir = mob.movement_map["[SOUTHEAST]"]
step(mob, dir)
return
..()

Northeast()
if(src.mob.controlmob)
step(mob.controlmob,NORTHEAST)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,NORTHEAST) in oview(20,src.mob))
step(src.mob.Primary,NORTHEAST)
return

var/mob/user=src.mob
if(user &&user.pixel_y<0)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))
if(user &&user.pixel_x<0)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))

if(mob.movement_map)
var/dir = mob.movement_map["[NORTHEAST]"]
step(mob, dir)
return
..()

Southwest()
if(src.mob.controlmob)
step(mob.controlmob,SOUTHWEST)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,SOUTHWEST) in oview(20,src.mob))
step(src.mob.Primary,SOUTHWEST)
return

var/mob/user=src.mob
if(user &&user.pixel_y>0)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))
if(user &&user.pixel_x>0)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))

if(mob.movement_map)
var/dir = mob.movement_map["[SOUTHWEST]"]
step(mob, dir)
return
..()

Northwest()
if(src.mob.controlmob)
step(mob.controlmob,NORTHWEST)
return
if(src.mob.Primary)
if(get_step(src.mob.Primary,NORTHWEST) in oview(20,src.mob))
step(src.mob.Primary,NORTHWEST)
return

var/mob/user=src.mob
if(user &&user.pixel_y<0)
user.pixel_y-=user.pixel_y/abs(user.pixel_y) *min(8,abs(user.pixel_y))
if(user &&user.pixel_x>0)
user.pixel_x-=user.pixel_x/abs(user.pixel_x) *min(8,abs(user.pixel_x))

if(mob.movement_map)
var/dir = mob.movement_map["[NORTHWEST]"]
step(mob, dir)
return
..()
Best response
I'll give you the quick answer and tell you that the rip source is your problem.

A slightly better answer is that you're using goto.

A more in-depth answer should come later, since I don't have the time at the moment to examine this in-depth.
A Move() proc should never be that large in itself. ;;
In response to Kumorii
that helps
In response to Albro1
ok..
A few issues:

1:

istype(src,/mob/human/sandmonster)


You should never be checking the type of src within a proc. You should use polymorphism, and override move on that specific type to embed behavior.

2:

src.runlevel++
if(src.runlevel>8)
src.runlevel=8


Should be:

if(src.runlevel<8)
src.runlevel++


3)

if(!src.client)
if(!istype(src,/mob/human))
return


Just why? This is indicative of something very stupid going on.

4)
        if(src.lava_walk)
if(src.pk)
var/obj/a = new/obj/lava_walk(locate(src.x,src.y,src.z))
var/obj/b = new/obj/lava_walk(locate(src.x-1,src.y,src.z))
var/obj/c = new/obj/lava_walk(locate(src.x+1,src.y,src.z))
var/obj/d = new/obj/lava_walk(locate(src.x,src.y-1,src.z))
var/obj/e = new/obj/lava_walk(locate(src.x,src.y+1,src.z))
a:lavaowner = src
b:lavaowner = src
c:lavaowner = src
d:lavaowner = src
e:lavaowner = src


        if(src.lava_walk)
if(src.pk)
new/obj/lava_walk(src.loc,src)
for(var/ldir=1;ldir<=8;ldir*=2)
new/obj/lava_walk(get_step(src,ldir),src)


obj/lava_walk
New(loc,owner)
..(loc)
src.lavaowner = owner



4) What the crap is this? You should never spawn() code in Move().

        if(!afteryou_cool && wa)
if(pick(0,1))
var/squadsize=pick(1,2,3,4)
squadsize=min(squadsize,afteryou)
afteryou_cool=1
afteryou-=squadsize
spawn(30)
var/lvl=1
if(MissionClass=="D")
lvl=limit(1,round(src.blevel * rand(0.4,1)),30)
if(MissionClass=="C")
lvl=limit(1,round(src.blevel * rand(0.7,1.1)),60)
if(MissionClass=="B")
lvl=limit(1,round(src.blevel * rand(0.8,1.2)),80)
if(MissionClass=="A")
lvl=limit(1,round(src.blevel * rand(0.9,1.3)),100)
if(MissionClass=="S")
lvl=limit(1,round(src.blevel * rand(1,1.3)),100)

Ambush(src,lvl,squadsize)


5) Improper indentation

        for(var/mob/human/player/npc/Q in oview(5))
if(Q.following==src)
Q.nextstep=src.dir
for(var/area/XE in oview(src,0))
if(istype(XE,/area/nopkzone))
if(src)src.Hostile()



This is literally some of the worst code I've ever seen. Half of it is confused and backward. The rest is just broken.

If I were to spend more time looking at this, I'd honestly just tell you to throw it all away and start over. This is such a mess that it's going to take you absolutely forever to fix it.
Thanks for that, Ter. I just now finished most of the things I had to do today, and you beat me to this topic. lol
I think I've seen this code before.
In response to Miauw62
It is rip code of some sort. It's the only place you'll see code this convoluted with variables like uowner, rasengan, and afteryou_cool.