mob
var{firing=0;move1=1;damage=0}
obj
var{mob/owner=0;total=0;moved=0;list/Beam=list()}
Beams
icon = 'Beam.dmi'
density = 1
restricted = 0
pixel_step_size = 12
animate_movement=SYNC_STEPS
Head
icon_state = "head"
New()
spawn(1)
Start()
Check()
..()
proc
Start()
walk(src,owner.dir,1)//notice how i took usr out here
Check()
while(src)
var/turf/T = get_step(src,src.dir)
if(!T)
owner.firing = 0
owner.icon_state = ""
owner.move1 = 1
if(src)
for(var/obj/O in src.Beam)
del(O)
del(src)
sleep(1)
Bump(atom/M)
if(isturf(M))
owner.firing = 0
owner.icon_state = ""
owner.move1 = 1
for(var/obj/O in src.Beam)
del(O)
del(src)
else if(ismob(M))
var/mob/Target = M
view(src.owner) << "[src.owner]'s beam hits [M] for [owner.damage]!"
Target.PL -= owner.damage
Target.PowerlevelCheck()
owner << "Target's powerlevel is [Target.PL]."
owner.firing = 0
src.owner.icon_state = ""
owner.move1 = 1
for(var/obj/X in src.Beam)
del(X)
del(src)
else if(isobj(M))
if(istype(M,/obj/Beams/Head))
var/obj/O = M
src.restricted = 1
src.Struggle(O) // get the struggle effect
if(src.owner.damage>O.owner.damage)
var/mob/loser = O.owner
for(var/obj/X in O.Beam)
del(X)
del(O)
walk_towards(src,loser,3)
else
if(!ismob(M) && !isturf(M) && !isobj(M) && !isarea(M))
owner.firing = 0
owner.icon_state = ""
owner.move1 = 1
for(var/obj/O in src.Beam)
del(O)
del(src)
Body
icon_state = "body"
density = 1
Move()
if(restricted) return
if(istype(src,/obj/Beams/Head))
var/obj/Body = new/obj/Beams/Body(src.loc)
Body.owner = src
src.Beam.Add(Body)
Body.dir = src.dir
moved++
if(moved == total)
owner.firing = 0
owner.icon_state = ""
owner.move1 = 1
if(src)
for(var/obj/O in src.Beam)
del(O)
del(src)
..()
obj/proc/Struggle(obj/M)
src.restricted = 1
var/a = 3 //adjust this to how many times you want the struggle "effect" to last
while(a)
a--
var/obj/O = src.Beam[src.Beam.len]
del(O)
sleep(2)
src.x--
step(M,M.dir)
var/obj/B = M.Beam[M.Beam.len]
del(B)
sleep(2)
M.x++
src.restricted = 0
step(src,src.dir)
obj/var/restricted = 0
mob
proc
KBeam()
var/obj/Head = new/obj/Beams/Head()
if(usr.dir == NORTH)
Head.loc = locate(usr.x,usr.y+1,usr.z)
if(usr.dir == SOUTH)
Head.loc = locate(usr.x,usr.y-1,usr.z)
if(usr.dir == WEST)
Head.loc = locate(usr.x-1,usr.y,usr.z)
if(usr.dir == EAST)
Head.loc = locate(usr.x+1,usr.y,usr.z)
Head.total = 10
Head.dir = usr.dir
Head.owner = usr
mob
verb
KameHameHa()
if(usr.firing)
usr << "This cannot be done."
return
else
usr.firing = 1
usr.move1 = 0
usr.damage=5
Problem description:
When my two beams collide with eachother, it does the struggle effect, but I get these runtimes.
runtime error: Cannot read null.dir
proc name: Struggle (/obj/proc/Struggle)
usr: 0
src: Head (/obj/Beams/Head)
call stack:
Head (/obj/Beams/Head): Struggle(null)
Head (/obj/Beams/Head): Bump(null)
runtime error: Cannot read null.owner
proc name: Bump (/obj/Beams/Head/Bump)
usr: 0
src: Head (/obj/Beams/Head)
call stack:
Head (/obj/Beams/Head): Bump(null)
runtime error: Cannot read null.x
proc name: Struggle (/obj/proc/Struggle)
usr: 0
src: Head (/obj/Beams/Head)
call stack:
Head (/obj/Beams/Head): Struggle(null)
Head (/obj/Beams/Head): Bump(null)
runtime error: Cannot read null.owner
proc name: Bump (/obj/Beams/Head/Bump)
usr: 0
src: Head (/obj/Beams/Head)
call stack:
Head (/obj/Beams/Head): Bump(null)
#define DEBUG
It will let the runtime errors tell you the exact line number that the problem is happening in your code file. Reply with them if you want help, because I'm no reading through it all.