Thanks, here.
` -------Zombie Editor-------
REM Initialize Game
sync on
sync rate 30
set display mode 640,480,16
set cursor 0,0
INK RGB(11,11,11),RGB(255,255,255)
REM Initialize Variables
` Arrays
dim object_properties(1000,4)
`dim pathgrid(10000,10000)
` Variables
objnum = 0
curobj = 5000
curout = 5006
avg# = 0.0
count = 0
`rename = 1
firstsearch = 1 : `used when loading maps
sprite_pos=1
` Find first files in directory
find first
`Make positioning cube
make object cube 3000,100
color object 3000,RGB(0,0,0)
ghost object on 3000
Rem Load Environmental Objects
load image "Tree.bmp",1
load image "grass.jpg",2
load image "dirt.jpg",3
load image "concrete.jpg",4
load image "house.jpg",5
load image "zombie.jpg",6
load image "human.jpg",7
load image "grid.jpg",9
load image "grass2.jpg",10
load image "dirt2.jpg",11
Rem Load Gui
load image "toolbar.jpg",2000
load image "file.bmp",2001
load image "file_selected.bmp",2002
load image "New.bmp",2003
load image "New_selected.bmp",2004
load image "Box1.bmp",2005
load image "Button1.bmp",2006
load image "Button1_Selected.bmp",2007
load image "Load.bmp",2008
load image "Load_Selected.bmp",2009
load image "Button1.bmp",2010
load image "Button1_Selected.bmp",2011
load image "Button1.bmp",2012
load image "Button1_Selected.bmp",2013
load image "SaveExport.bmp",2014
load image "SaveExport_Selected.bmp",2015
Rem Setup Gui
`Toolbar
sprite 1,0,0,2000
stretch sprite 1,125,100
hide sprite 1
`File
sprite 2,2,2,2001
sprite 3,2,2,2002
hide sprite 2
hide sprite 3
`FileMenu
sprite 4,2,20,2000
stretch sprite 4,15,350
hide sprite 4
`New
sprite 5,5,25,2003
sprite 6,5,25,2004
hide sprite 5
hide sprite 6
`Are you sure(File>New)
sprite 7,250,240,2005
sprite 8,320,338,2006
sprite 9,417,338,2006
sprite 10,320,338,2007
sprite 11,417,338,2007
for n = 7 to 11 : hide sprite n : next n
`Rename
sprite 12,400,338,2006
sprite 13,400,338,2007
hide sprite 12
hide sprite 13
`load
sprite 14,5,45,2008
sprite 15,5,45,2009
sprite 16,200,230,2005
sprite 17,265,370,2010
sprite 18,265,370,2011
sprite 19,437,370,2012
sprite 20,437,370,2013
stretch sprite 16,125,125
hide sprite 14
hide sprite 15
hide sprite 16
hide sprite 17
hide sprite 18
hide sprite 19
hide sprite 20
`Export
sprite 21,5,65,2014
sprite 22,5,65,2015
hide sprite 21
hide sprite 22
for n = 1 to 22
set sprite n,0,0
next n
Rem load mouse
load image "dot.bmp",3000
load object "house.x",5000
texture object 5000,5
load object "tree.x",5001
texture object 5001,1
load object "zombie.x",5002
texture object 5002,6
make object plain 5003,110,110
xrotate object 5003,90
make object cube 5004,100
`ghost object on 5004
texture object 5004,4
load object "human.x",5005
`ghost object on 5005
texture object 5005,7
position object 5005,20000,0,0
load object "human.x",9000
texture object 9000,7
position object 9000,20000,0,0
rem outlines
load object "house.x",5006
color object 5006,RGB(249,4,255)
scale object 5006,-107,-96,-107
xrotate object 5006,180
glue object to limb 5006,5000,0
load object "tree.x",5007
color object 5007,RGB(249,4,255)
scale object 5007,-103,-103,-103
xrotate object 5007,180
glue object to limb 5007,5001,0
load object "zombie.x",5008
color object 5008,RGB(249,4,255)
scale object 5008,-106,-103,-106
xrotate object 5008,180
glue object to limb 5008,5002,0
make object cube 5010,100
color object 5010,RGB(249,4,255)
scale object 5010,-106,-51,-106
xrotate object 5010,180
glue object to limb 5010,5004,0
position object 5010,0,25,0
`load object "human.x",5005
`ghost object on 5005
`texture object 5005,7
`position object 5005,20000,0,0
`load object "human.x",9000
`texture object 9000,7
`position object 9000,20000,0,0
rem make grid
make object plain 30000,10000,10000
texture object 30000,9
scale object texture 30000,200,200
position object 30000,0,-10,0
xrotate object 30000,90
firsttime = 1
Rem Main Loop
firstcheck = 1
do
ct# = timer()
ft# = dt# - ct#
dt# = timer()
set cursor 0,30
`if firstcheck = 1
` time = timer()
` for n = 1 to 100000
`` Gosub Movement
`next n
`newtimeMove = timer() - time
`endif
gosub Movement
Gosub Object_Selection
Gosub Object_Rotation
Gosub Export
Gosub Object_Placement
Gosub Camera
`if firstcheck = 1
`time = timer()
`for n = 1 to 100000
` Gosub GUI
`next n
`newtime = timer()
`endif
gosub GUI
print "Milliseconds: ",newtime - time
print "Movement: ",newtimeMove
firstcheck = 0
Gosub Info
` if upkey > 0 then position object 3000,object position x(3000),0,objz
sync
loop
`----------------
`SUBROUTINES
`----------------
` Movement
Movement:
if objtype < 4 or objtype = 7
if leftkey()>0
XPOS=XPOS-ft#+2.97
position object 3000,XPOS,0,ZPOS
endif
if rightkey()>0
XPOS=XPOS+ft#+2.97
position object 3000,XPOS,0,ZPOS
endif
if downkey()>0
ZPOS=ZPOS-ft#+2.97
position object 3000,XPOS,0,ZPOS
endif
if upkey()>0
ZPOS=ZPOS+ft#+2.97
position object 3000,XPOS,0,ZPOS
endif
endif
if objtype > 3 and objtype < 7 and timer2 = 0
if leftkey()>0
XPOS=XPOS-50
position object 3000,XPOS,0,ZPOS
endif
if rightkey()>0
XPOS=XPOS+50
position object 3000,XPOS,0,ZPOS
endif
if downkey()>0
ZPOS=ZPOS-50
position object 3000,XPOS,0,ZPOS
endif
if upkey()>0
ZPOS=ZPOS+50
position object 3000,XPOS,0,ZPOS
endif
timer2 = 3
endif
if timer2 > 0 then dec timer2
`Position Object at Position
position object curobj,object position x(3000),object position y(curobj),object position z(3000)
return
`Object Selection
Object_Selection:
`Select House
if inkey$() = "1"
objtype = 1
curobj = 5000
curout = 5006
show object 5000
show object 5006
hide object 5001
hide object 5002
hide object 5003
hide object 5004
hide object 5005
hide object 5007
hide object 5008
hide object 5010
endif
`Select Tree
if inkey$() = "2"
objtype = 2
curobj = 5001
curout = 5007
show object 5001
show object 5007
hide object 5000
hide object 5002
hide object 5003
hide object 5005
hide object 5004
hide object 5006
hide object 5008
hide object 5010
endif
`Select Zombie
if inkey$() = "3"
objtype = 3
curobj = 5002
curout = 5008
show object 5002
show object 5008
hide object 5000
hide object 5001
hide object 5003
hide object 5004
hide object 5005
hide object 5006
hide object 5007
hide object 5010
endif
`Select Grass
if inkey$() = "4"
objtype = 4
xpos = object position x(3000)
zpos = object position z(3000)
xpos = xpos/50*50
zpos = zpos/50*50
position object 3000,xpos,0,zpos
curobj = 5003
show object 5003
hide object 5000
hide object 5001
hide object 5002
hide object 5004
hide object 5005
hide object 5006
hide object 5007
hide object 5008
hide object 5010
texture object 5003,10
endif
`Select Dirt
if inkey$() = "5"
objtype = 5
xpos = object position x(3000)
zpos = object position z(3000)
xpos = xpos/50*50
zpos = zpos/50*50
position object 3000,xpos,0,zpos
curobj = 5003
show object 5003
hide object 5000
hide object 5001
hide object 5002
hide object 5004
hide object 5005
hide object 5006
hide object 5007
hide object 5008
hide object 5010
texture object 5003,11
endif
`Select Wall
if inkey$() = "6"
objtype = 6
position object 3000,0,25,0
xpos = 0
zpos = 0
curobj = 5004
curout = 5010
show object 5004
show object 5010
hide object 5000
hide object 5001
hide object 5002
hide object 5003
hide object 5005
hide object 5006
hide object 5007
hide object 5008
texture object 5003,4
endif
`Select Player Start Marker
if inkey$() = "7"
objtype = 7
xpos = 0
zpos = 0
curobj = 5005
curout = 5007
show object 5005
hide object 5000
hide object 5001
hide object 5002
hide object 5003
hide object 5004
hide object 5006
hide object 5008
hide object 5010
hide object 5007
endif
return
`Object Rotation
Object_Rotation:
if inkey$() = ","
if rotate < 6 then rotate = 353
if outrotate > 354 then outrotate = 7
rotate = rotate - 5
endif
if inkey$() = "."
if rotate > 354 then rotate = 7
if outrotate < 6 then outrotate = 353
rotate = rotate + 5
endif
if curobj < 5003 then yrotate object curobj,rotate
return
`Export
Export:
if rename = 0
if inkey$() = "e" or inkey$() = "E"
open to write 1,filename$
write string 1,str$(objnum)
for n = 1 to objnum
write string 1,str$(object_properties(n,1))
write string 1,str$(object_properties(n,2))
write string 1,str$(object_properties(n,3))
write string 1,str$(object_properties(n,4))
next n
write string 1,str$(object position x(9000))
write string 1,str$(object position z(9000))
close file 1
end
endif
endif
return
`Object Placement
Object_Placement:
if objtype = 1 and inkey$() = " " and timer = 0
objnum = objnum + 1
load object "house.x",objnum
texture object objnum,5
position object objnum,object position x(3000),object position y(3000),object position z(3000)
rotate object objnum,0,rotate,0
object_properties(objnum,1) = object position x(objnum)
object_properties(objnum,2) = object position z(objnum)
object_properties(objnum,3) = 1
object_properties(objnum,4) = rotate
timer = 25
endif
if objtype = 2 and inkey$() = " " and timer = 0
objnum = objnum + 1
load object "tree.x",objnum
texture object objnum,1
set object objnum,1,0,1
rotate object objnum,0,rotate,0
position object objnum,object position x(3000),object position y(3000),object position z(3000)
object_properties(objnum,1) = object position x(objnum)
object_properties(objnum,2) = object position z(objnum)
object_properties(objnum,3) = 2
object_properties(objnum,4) = rotate
timer = 25
endif
if objtype = 3 and inkey$() = " " and timer = 0
objnum = objnum + 1
load object "zombie.x",objnum
position object objnum,object position x(3000),object position y(3000),object position z(3000)
texture object objnum,6
rotate object objnum,0,rotate,0
object_properties(objnum,1) = object position x(objnum)
object_properties(objnum,2) = object position z(objnum)
object_properties(objnum,3) = 3
object_properties(objnum,4) = rotate
timer = 25
endif
if objtype = 4 and inkey$() = " " and timer = 0
objnum = objnum + 1
make object plain objnum,100,100
position object objnum,object position x(3000),object position y(3000),object position z(3000)
xrotate object objnum,90
texture object objnum,2
object_properties(objnum,1) = object position x(objnum)
object_properties(objnum,2) = object position z(objnum)
object_properties(objnum,3) = 4
timer = 25
endif
if objtype = 5 and inkey$() = " " and timer = 0
objnum = objnum + 1
make object plain objnum,100,100
position object objnum,object position x(3000),object position y(3000),object position z(3000)
xrotate object objnum,90
texture object objnum,3
object_properties(objnum,1) = object position x(objnum)
object_properties(objnum,2) = object position z(objnum)
object_properties(objnum,3) = 5
timer = 25
endif
if objtype = 6 and inkey$() = " " and timer = 0
objnum = objnum + 1
make object cube objnum,100
position object objnum,object position x(3000),object position y(3000)+50,object position z(3000)
texture object objnum,4
object_properties(objnum,1) = object position x(objnum)
object_properties(objnum,2) = object position z(objnum)
object_properties(objnum,3) = 6
timer = 25
endif
if objtype = 7 and inkey$() = " " and timer = 0
position object 9000,object position x(3000),object position y(3000),object position z(3000)
timer = 25
endif
if timer>0 then dec timer
return
`Game Camera
Camera:
cZ# = NewzValue(object position z(3000),object position y(3000)-180,100)
cX# = NewxValue(object position x(3000),object position y(3000)-180,100)
Position Camera cX#,400,cZ#
Point Camera object position x(3000),40,object position z(3000)
return
` Graphical User Interface
GUI:
sprite 3000,mousex(),mousey(),3000
Rem toolbar
paste sprite 1,0,0
Rem File
paste sprite 2,2,2
if stayopen = 0
if sprite collision(3000,2) > 0 then paste sprite 3,2,2
if sprite collision(3000,2) > 0 and mouseclick() = 1
paste sprite 4,2,20
fileclick = 1
showmenu = 1
filetimer = 50
endif
if filetimer > 0
paste sprite 4,2,20
dec filetimer
endif
if fileclick = 1 and sprite collision(3000,4) > 0 then showmenu = 1
if fileclick = 1 and sprite collision(3000,4) = 0 and filetimer = 0
fileclick = 0
showmenu = 0
endif
endif:` if stayopen = 0
if showmenu = 1
paste sprite 4,2,20
`new
paste sprite 5,5,25
if sprite collision(3000,5) > 0 then paste sprite 6,5,25
if sprite collision(3000,5) > 0 and mouseclick() = 1 then newclick = 1
`Load
paste sprite 14,5,45
if sprite collision(3000,14) then paste sprite 15,5,45
if sprite collision(3000,14) and mouseclick() = 1 then loadbox = 1
`Save/Export
paste sprite 21,5,65
if sprite collision(3000,21) then paste sprite 22,5,65
if sprite collision(3000,21) and mouseclick() = 1
showmenu = 1
stayopen = 1
rename = 1
export = 1
endif:`if sprite collision(3000,21) and mouseclick() = 1
if export = 1
gosub rename
if continue = 1
open to write 1,filename$
write string 1,str$(objnum)
for n = 1 to objnum
write string 1,str$(object_properties(n,1))
write string 1,str$(object_properties(n,2))
write string 1,str$(object_properties(n,3))
write string 1,str$(object_properties(n,4))
next n
write string 1,str$(object position x(9000))
write string 1,str$(object position z(9000))
close file 1
stayopen = 0
export = 0
continue = 0
showmenu = 0
endif:` if continue = 1
endif
if newclick = 1
text 327,342,"Are you sure?"
paste sprite 7,250,240
paste sprite 8,320,338
paste sprite 9,417,338
stayopen = 1
if sprite collision(3000,8) then paste sprite 10,320,338
if sprite collision(3000,8) and mouseclick() = 1
for n = 1 to objnum
delete object n
next n
objnum = 0
undim object_properties(1000,4)
dim object_properties(1000,4)
position object 9000,20000,0,0
newclick = 0
`gosub rename
showmenu = 0
stayopen = 0
clear entry buffer
endif
if sprite collision(3000,9) then paste sprite 11,417,338
if sprite collision(3000,9) and mouseclick() = 1 then newclick = 0
text 327,342,"Confirm"
text 425,342,"Cancel"
text 330,280,"Are you sure?"
endif: `newclick
`Load
if loadbox = 1
paste sprite 16,200,230
stayopen = 1
box 215,270,560,360
INK RGB(255,255,255),RGB(255,255,255)
box 217,272,558,358
INK RGB(25,25,25),RGB(255,255,255)
paste sprite 17,265,370
paste sprite 19,437,370
if firstsearch = 1
`cl\s
rem Find current directory
`mydir$=get dir$()
rem Current directory can also be changed
`set dir mydir$
rem Show user current directory
`print "Directory to scan is ";mydir$
rem Begin search for files in current working directory
find first
rem Create array and index variable
dim item$(100)
items=1
rem begin repeat loop
repeat
rem add to item array if file found
if get file type()=0
if right$(get file name$(),5)=".ZLVL"
item$(items)=get file name$()
items=items+1
endif
endif
rem Find next file in current working directory
find next
Rem Repeat loop until no more files in current working directory
until get file type()=-1
rem List files within array
print "Files in current directory:"
for t=1 to items-1
print item$(t)
next t
INK RGB(30,30,30),RGB(255,255,255)
for n=1 to items-1
cls
set cursor 0,30
print left$(item$(n),len(item$(n))-5)
get image n+3000,0,30,110,45
if sprite_pos = 9 then sprite_pos = 1
if sprite_pos = 1 then sprite n+2000,219,273,n+3000
if sprite_pos = 2 then sprite n+2000,329,273,n+3000
if sprite_pos = 3 then sprite n+2000,439,273,n+3000
if sprite_pos = 4 then sprite n+2000,219,290,n+3000
if sprite_pos = 5 then sprite n+2000,329,290,n+3000
if sprite_pos = 6 then sprite n+2000,439,290,n+3000
if sprite_pos = 7 then sprite n+2000,219,308,n+3000
if sprite_pos = 8 then sprite n+2000,329,308,n+3000
if sprite_pos = 9 then sprite n+2000,439,308,n+3000
hide sprite n+2000
sprite_pos = sprite_pos + 1
next n
INK RGB(25,25,25),RGB(145,145,145)
for n=1 to items-1
cls
set cursor 0,30
print left$(item$(n),len(item$(n))-5)
get image n+3000+items-1,0,30,110,45
sprite n+2000+items-1,0,0,n+3000+items-1
hide sprite n+2000+items-1
next n
Rem Delete array from memory
`undim item$()
firstsearch = 0
endif
INK RGB(9,0,0),RGB(143,143,143)
for n=1 to items-1
paste sprite n+2000,sprite x(n+2000),sprite y(n+2000)
if sprite collision(3000,n+2000) and mouseclick() = 1
curloadsel=n+2000+items-1
curloadpos=n+2000
curloadname$=item$(n)
endif
if curloadsel > 0 then paste sprite curloadsel,sprite x(curloadpos),sprite y(curloadpos)
next n
if sprite collision(3000,19) > 0 then paste sprite 20,437,370
if sprite collision(3000,19) > 0 and mouseclick() = 1
loadbox = 0
stayopen = 0
showmenu = 0
endif
if sprite collision(3000,17) > 0
paste sprite 18,265,370
if sprite collision(3000,17) > 0 and mouseclick() = 1
for n = 1 to objnum
delete object n
next n
objnum = 0
undim object_properties(1000,4)
dim object_properties(1000,4)
position object 9000,20000,0,0
newclick = 0
`rename = 1
continue=0
clear entry buffer
open to read 1,curloadname$
read string 1,T$: objnum = val(T$)
dim objectexist(objnum)
print objnum
zombobj = 2999
for n = 1 to objnum
read string 1,T$ : object_properties(n,1) = val(T$)
read string 1,T$ : object_properties(n,2) = val(T$)
read string 1,T$ : object_properties(n,3) = val(T$)
read string 1,T$ : object_properties(n,4) = val(T$)
if object_properties(n,3) = 1 : load object "house.x",n : texture object n,5 : position object n,object_properties(n,1),0,object_properties(n,2) : yrotate object n,object_properties(n,4) : endif
if object_properties(n,3) = 2 : load object "tree.x",n : set object n,1,0,1 : texture object n,1 : position object n,object_properties(n,1),0,object_properties(n,2) : yrotate object n,object_properties(n,4) : endif
if object_properties(n,3) = 3 : load object "zombie.x",n : texture object n,6 : position object n,object_properties(n,1),10,object_properties(n,2) : yrotate object n,object_properties(n,4) : endif
if object_properties(n,3) = 4 : make object plain n,100,100 : xrotate object n,90 : texture object n,2 : position object n,object_properties(n,1),0,object_properties(n,2) : yrotate object n,object_properties(n,4) : endif
if object_properties(n,3) = 5 : make object plain n,100,100 : xrotate object n,90 : texture object n,3 : position object n,object_properties(n,1),0,object_properties(n,2) : yrotate object n,object_properties(n,4): endif
if object_properties(n,3) = 6 : make object cube n,100 : texture object n,4 : position object n,object_properties(n,1),50,object_properties(n,2) : yrotate object n,object_properties(n,4) : endif
next n
read string 1,T$ : plrstartx = val(T$)
read string 1,T$ : plrstartz = val(T$)
position object 9000,plrstartx,10,plrstartz
texture object 9000,7
close file 1
loadbox = 0
stayopen = 0
showmenu = 0
endif:`if sprite collision(3000,17) > 0 and mouseclick() = 1
`if sprite collision(3000,19) > 0
`paste sprite 20,437,370
`if sprite collision(3000,19) > 0 and mouseclick() = 1 then loadbox = 0
`endif
endif
text 275,375,"Confirm"
text 447,375,"Cancel"
text 230,240,"Please choose a file to load"
endif
`File name
rename:
if rename = 1
stayopen = 1
paste sprite 7,250,240
paste sprite 12,400,338
box 327,300,500,324
INK RGB(255,255,255),RGB(255,255,255)
box 329,302,498,322
INK RGB(11,11,11),RGB(11,11,11)
if scancode() <> 14 and len(line$)<14 then line$ = line$ + entry$()
if scancode() = 14 then line$ = left$(line$,len(line$)-1)
text 343,304,line$
clear entry buffer
if sprite collision(3000,12) > 0 then paste sprite 13,400,338
if sprite collision(3000,12) > 0 and mouseclick() = 1
filename$ = line$
filename$ = filename$ + ".ZLVL"
rename = 0
continue = 1
stayopen = 0
showmenu = 0
endif
text 505,306,".ZLVL"
text 266,306,"Filename:"
text 410,343,"Confirm"
text 300,260,"Please name this level(13 Chars.)"
endif
return
endif:`if showmenu = 1
return
Info:
if objtype = 1 then print "Object Type: House - X Position: ", object position x(3000), " - Z Position: " , object position z(3000),
if objtype = 2 then print "Object Type: Tree - X Position: ", object position x(3000), " - Z Position: " , object position z(3000),
if objtype = 3 then print "Object Type: Zombie - X Position: ", object position x(3000), " - Z Position: " , object position z(3000),
if objtype = 4 then print "Object Type: Grass - X Position: ", object position x(3000), " - Z Position: " , object position z(3000),
if objtype = 5 then print "Object Type: Dirt - X Position: ", object position x(3000), " - Z Position: " , object position z(3000),
if objtype = 6 then print "Object Type: Wall(Concrete) - X Position: ", object position x(3000), " - Z Position: " , object position z(3000),
if objtype = 7 then print "Object Type: PLAYER START MARKER - X Position: ", object position x(3000), " - Z Position: " , object position z(3000),
print " - fps: ", screen fps(),
print "mouse x: ",mousex(),
print "mouse y: ",mousey(),
`print sprite x(3000)
`print sprite y(3000)
return
Feel free to look it over if you want.