X Zone Edtior Source

Community Forums/Developer Stations/X Zone Edtior Source

Xzider(Posted 2008) [#1]
X Zone Editor - http://www.blitzbasic.com/toolbox/toolbox.php?tool=197

Very poor world dropper, now open source.
Poor quality code design too;) But if anyone wants to learn off of it, or rip anything from code, feel free. Was made years ago when I was starting in blitz3d.

You will need to download the media from the site as well. You can click the link above to go to the toolbox and download.
This is not a release, doesnt require comments, but go ahead if you want.

Note: SkyBox function code taken from Blitz3D Examples

Source:

 Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Const UpKey = 200
Const DownKey = 208
Const LeftKey = 203
Const RightKey = 205

Global Camera = CreateCamera()
Global World = CreatePivot()
Global Cursor = LoadImage("Cursor.bmp")
Global ID%
Global New_ID%
Global X#
Global Y#
Global Z#
Global O.Objc
Global CollisionType%
Global FX%
Global Fit%
Global Obje$
Global Scale#
Global TexDup$
Global Tex1$
Global Tex2$
Global Trunk%
Global Branch%
Global Tree1$
Global Tree2$
Global Sky
Global A%
Global Duplicate%
Global ShowGUI% = 1
Global DupCounter%
Global DupWait% = 1000
EntityType Camera,1
CameraRange Camera,1,10000

  Type Button

  Field Name$
  Field ID%
  Field Image%
  Field Colors%
  Field X#
  Field Y#
  Field Height#
  Field Width#

  End Type 

HidePointer

Type Objc

  Field Name$
  Field State$
  Field ForWard%
  Field Texture$
  Field Entity%
  Field CollisionType%
  Field ID%
  Field Rotate%
  Field X#
  Field Y#
  Field Z#
  Field Scale0#
  Field Scale1#
  Field Scale2#
  Field Image
  Field FX%
  Field Fit%

  End Type 

Global Entity2% = Camera

B.Button = New Button
B\Name$ = "Load"
B\ID% = 1
B\Colors% = 100
B\X# = 0
B\Y# = 0
B\Height = 120
B\Width = 20


B.Button = New Button
B\Name$ = "Save"
B\ID% = 2
B\Colors% = 100
B\X# = 0
B\Y# = 50
B\Height = 120
B\Width = 20


B.Button = New Button
B\Name$ = "Load Object"
B\ID% = 3
B\Colors% = 100
B\X# = 0
B\Y# = 100
B\Height = 120
B\Width = 20


B.Button = New Button
B\Name$ = "Load Sprite"
B\ID% = 4
B\Colors% = 100
B\X# = 0
B\Y# = 150
B\Height = 120
B\Width = 20

B.Button = New Button
B\Name$ = "Duplicate Object"
B\ID% = 5
B\Colors% = 100
B\X# = 0
B\Y# = 200
B\Height = 150
B\Width = 20

B.Button = New Button
B\Name$ = "Duplicate Sprite"
B\ID% = 6
B\Colors% = 1000
B\X# = 0
B\Y# = 250
B\Height = 150
B\Width = 20

B.Button = New Button
B\Name$ = "Create XYZ Random"
B\ID% = 7
B\Colors% = 1000
B\X# = 0
B\Y# = 300
B\Height = 150
B\Width = 20

B.Button = New Button
B\Name$ = "Create Custom Tree"
B\ID% = 8
B\Colors% = 1000
B\X# = 0
B\Y# = 350
B\Height = 150
B\Width = 20

B.Button = New Button
B\Name$ = "Duplicate Custom Tree"
B\ID% = 9
B\Colors% = 1000
B\X# = 0
B\Y# = 400
B\Height = 200
B\Width = 20

B.Button = New Button
B\Name$ = "Exit"
B\ID% = 10
B\Colors% = 100
B\X# = 0
B\Y# = 450
B\Height = 120
B\Width = 20

        SkyBox("Data\Media\Sky\BlueSea")
        EntityRadius Camera,1

While Not KeyHit(1)

  If KeyHit(59)

  If ShowGUI% = 1

		ShowGUI% = 0
		
  ElseIf ShowGUI% = 0

		ShowGUI% = 1
		
  End If

  End If

  If KeyHit(2)

  If Water% = 0

       Water% = Create_Water(500,0.5,-2)

  Else

       Error(400,200,"Error!","ERROR!","Water already exists!")

  End If

  End If

  If Water%

UnderWater% = Update_Water(Water%,Camera%,-2,0.05,1)

  End If

EntityCoord(Entity2%)

  If Entity2% = Camera

  Else

While MouseDown(2)

Cls 

       UpdateWorld 
       RenderWorld
       DrawImage Cursor,MouseX(),MouseY()
       PlayerMove
       Update_Objects()
Flip 

Wend 

        Entity2% = Camera
  End If 

  If KeyHit(3)

  If Plane = 0

        Plane = CreatePlane()
        Tex = LoadTexture("Data\Media\Textures\Moss.bmp")
        ScaleEntity Plane,20,40,20
        ScaleTexture Tex,20,20
        EntityTexture Plane,Tex

  Else


       Error(400,200,"Error!","ERROR!:","Plane already exists!")

  End If

  End If 

  If KeyHit(9) Generate_Random_Entity()

  If KeyHit(10)

  For i = 1 To 250
xx = xx + 50

  If xx >= 410 zz = zz + 250 xx = 0

        Building = CreateCube()
        ScaleEntity Building,10,50,10
        EntityTexture Building,LoadTexture("SkyScraper.bmp")
        PositionEntity Building,xx,0,zz
  Next 

  End If 

Cls

UpdateWorld
RenderWorld


  If MouseDown(2) = False And Duplicate = 1

        Duplicate = 0

  End If 
        Color 0,0,255

  If ShowGUI% = 1

        Text 200,0,"Your X Coordinate is - " + X#
        Text 200,20,"Your Y  Coordinate is - " + Y#
        Text 200,40,"Your Z Coordinate is - " + Z#
		Text 200,60,"Press 1 to create water
		Text 200,80,"Press 2 to create a flat mossy grass plane"
		Text 200,100,"Press F1 to take of this text"
		
  End If

        PlayerMove
        Update_Objects
        Update_Buttons()

        PositionEntity Sky,EntityX(Camera),EntityY(Camera),EntityZ(Camera)
        CameraClsColor Camera,0,0,0
        CameraProject Camera,X#,Y#,Z#
        DrawImage Cursor,MouseX(),MouseY()

Flip

Wend 

Function EntityCoord(Entity1%)

X# = EntityX#(Entity1%)
Y# = EntityY#(Entity1%)
Z# = EntityZ#(Entity1%)

End Function 

Function PlayerMove()

  If KeyDown(UpKey) MoveEntity Entity2%,0,0,10
  If KeyDown(DownKey) MoveEntity Entity2%,0,0,-10
  If KeyDown(LeftKey) TurnEntity Entity2%,0,2,0
  If KeyDown(RightKey) TurnEntity Entity2%,0,-2,0
  If KeyDown(6) MoveEntity Entity2%,0,0.2,0
  If KeyDown(7) MoveEntity Entity2%,0,-0.2,0
  If KeyDown(8) TurnEntity Entity2%,0.2,0,0  FlushKeys 
  If KeyDown(9) TurnEntity Entity2%,-0.2,0,0 FlushKeys


End Function 

Function Create_Object(Name$,Texture$,Entity%,CollisionType%,X#,Y#,Z#,Scale0#,Scale1#,Scale2#,Pitch#,Yaw#,Roll#,FX%,Fit%)

        O.Objc = New Objc
        O\Name$ = Name$
        O\Texture$ = Texture$
        O\Entity% = CopyEntity(Entity%)
        New_ID 
        O\ID% = New_ID%
        O\X# = X#
        O\Y# = Y#
        O\Z# = Z#
        O\Scale0# = Scale0#
        O\Scale1# = Scale1#
        O\Scale2# = Scale2#
        O\CollisionType% = CollisionType%
		O\FX% = FX%
		O\Fit% = Fit%
		EntityPickMode O\Entity%,2
		EntityRadius O\Entity%,2
		EntityFX O\Entity%,O\FX%
		
  If O\Fit% = 1

		FitMesh O\Entity%,-10,0,0,20,20,0
		
  End If

        EntityType O\Entity%,O\CollisionType 


  If Not Entity%

       Error(400,200,"Error!","ERROR!:","Entity Did Not Exist")
       Return

  End If 


  If Texture$ <> ""
  If Texture$ <> "VoidTexture"

        Tex% = LoadTexture(O\Texture$,4)

  If Tex% = 0

        Error(350,200,"ERROR!","","Texture does Not exist!")
        FreeEntity O\Entity%
        Delete O.Objc
        Return

  End If 

        EntityTexture O\Entity%,Tex%

  End If 
  End If 

  If O\Texture$ = "" Or O\Texture$ = " "

        O\Texture$ = "VoidTexture"

  End If

  If Scale0# <> 0 And Scale1# <> 0 And Scale2# <> 0

        ScaleEntity O\Entity%,O\Scale0#,O\Scale1#,O\Scale2#

  End If 

        PositionEntity O\Entity,O\X#,O\Y#,O\Z#

  If Rotate% = 1 O\Rotate% = 1

  EntityParent O\Entity,World
  RotateEntity O\Entity,Pitch#,Yaw#,Roll#

End Function 

Function Update_Objects()

  For O.Objc = Each Objc
        O\X# = EntityX(O\Entity)
        O\Y# = EntityY(O\Entity)
        O\Z# = EntityZ(O\Entity)
        PositionEntity O\Entity%,O\X#,O\Y#,O\Z#
        Collisions CharacterCollision%,O\CollisionType%,2,2
        CameraProject Camera,O\X#,O\Y#,O\Z#

  If EntityInView(O\Entity%,Camera)

  If EntityDistance#(Camera,O\Entity%) <= 5000


  If Entity2% <> Camera

  If O\Entity% = Entity2%

  If KeyHit(211) 

  If Not O\Entity%

        Error(400,200,"Error!","ERROR!:","Entity Did Not Exist")
        Exit 

  End If 

        FreeEntity O\Entity%
        Delete O.Objc
        FlushKeys
        Entity2% = Camera
        Exit 

  End If 

  End If 

  Else

  If MouseDown(2)

  If CameraPick(Camera%,MouseX(),MouseY())

  If PickedEntity() = O\Entity%

        ID% = O\ID% 
        Entity2% = O\Entity

  End If

  End If

  End If

  End If   

  End If 

  End If

Next

End Function 

Function Load_Zone(File$)

File$ = File$ + ".zdt"
File1% = OpenFile(File$)

  If Not File1% 

       Error(400,200,"Error!","ERROR!:","Error Loading Zone File")
       Return

  End If 

File2% = ReadFile(File$)

While Not Eof(File2%)


        FileRead1$ = ReadLine(File2%)
        FileRead2$ = ReadLine(File2%)
        FileRead3$ = ReadLine(File2%)
        FileRead4# = ReadLine(File2%)
        FileRead5# = ReadLine(File2%)
        FileRead6# = ReadLine(File2%)
        FileRead7# = ReadLine(File2%)
        FileRead8# = ReadLine(File2%)
        FileRead9# = ReadLine(File2%)
        FileRead10% = ReadLine(File2%)
        FileRead11# = ReadLine(File2%)
        FileRead12# = ReadLine(File2%)
        FileRead13# = ReadLine(File2%)
		FileRead14% = ReadLine(File2%)
		FileRead15% = ReadLine(File2%)
		
        Entity% = LoadMesh(FileRead1$)

  If Not Entity% RuntimeError "Error Loading Object In Zone File!"

        HideEntity Entity%
        Create_Object(FileRead1$,FileRead2$,Entity%,FileRead10%,FileRead4#,FileRead5#,FileRead6#,FileRead7#,FileRead8#,FileRead9#,FileRead11#,FileRead12#,FileRead13#,FileRead14%,FileRead15%)
        FreeEntity Entity%
Wend 
End Function

Function Save_Zone(File$)

        File1% = WriteFile(File$ + ".zdt")

  For O.Objc = Each Objc

       WriteLine(File1%,O\Name$)
       WriteLine(File1%,O\Texture$)
       WriteLine(File1%,O\ID%)
       WriteLine(File1%,O\X#)
       WriteLine(File1%,O\Y#)
       WriteLine(File1%,O\Z#)
       WriteLine(File1%,O\Scale0#)
       WriteLine(File1%,O\Scale1#)
       WriteLine(File1%,O\Scale2#)
       WriteLine(File1%,O\CollisionType%)
       WriteLine(File1%,EntityPitch#(O\Entity%))
       WriteLine(File1%,EntityYaw#(O\Entity%))
       WriteLine(File1%,EntityRoll#(O\Entity%))
	   WriteLine(File1%,O\FX%)
       WriteLine(File1%,O\Fit%)

  Next

End Function

Function New_ID%()

        New_ID% = New_ID% + 1
        O\ID% = New_ID%

End Function 

Function Generate_Random_Entity()

Count% = Input("How many of these do you want?")

  For i = 1 To Count%

        FlushKeys
        Entity% = LoadMesh(Obje$)

  If Not Entity%

       Error(400,200,"Error!","ERROR!:","Entity Did Not Exist")
       Return

End If 

        HideEntity Entity%
        Create_Object(Obje$,TexDup$,Entity%,CollisionType%,Rand(-500,500),Y#,Rand(-500,500),Scale#,Scale#,Scale#,0,0,0,FX%,Fit%)
        FreeEntity Entity%
        FlushKeys

  Next 

End Function 


Function Create_In_Rows()

        Count% = Input("How many of these do you want?")
        Rows% = Input("How Many Rows?")

        Xx# = X#
        Zz# = Z#

  For i = 1 To Count%

        Xx# = Xx# + 35

  If Xx# >= Rows% Xx# = 0 Zz# = Zz# + 25

        FlushKeys
        Entity% = LoadMesh(Obje$)

  If Not Entity% 

        Error(350,200,"Error!","ERROR!:","Entity Did Not Exist")
		Exit
		
  Else

        HideEntity Entity%
        Create_Object(Obje$,"",Entity%,CollisionType%,XX#,Y#,ZZ#,Scale#,Scale#,Scale#,0,0,0,FX%,Fit%)
        FreeEntity Entity%
        FlushKeys

  End If

  Next 

End Function
Function Update_Buttons()

  For B.Button = Each Button

        Color B\Colors%,0,0
        Rect(B\X#,B\Y#,B\Height#,B\Width#)
        Color 0,B\Colors% + 50,0
        Text B\X#,B\Y#,B\Name$

  If ImageRectOverlap(Cursor,MouseX(),MouseY(),B\X#,B\Y#,B\Height#,B\Width#) B\Colors = B\Colors% + 100 Else B\Colors% = 100
  If ImageRectOverlap(Cursor,MouseX(),MouseY(),B\X#,B\Y#,B\Height#,B\Width#) And MouseDown(1) = True 

        Color 255,0,0

  Select B\ID%

  Case 1

       Cls 
       FlushKeys
       Load$ = Input("What Zone To Load?")
       Load_Zone(Load$)
       FlushKeys

  Case 2

       Cls  
       FlushKeys
       Save$ = Input("What zone file would you like to Save To ?")
       Save_Zone(Save$)
       FlushKeys

  Case 3

        Cls
        FlushKeys
        Obje$ = Input("File path of the mesh?")
        Scale# = Input("Mesh Scale? (This will make all 3 fields scaled) ")
        Tex$ = Input("Mesh Texture? (If none,or already textured,leave blank.)")
        CollisionType% = Input("Collision Type? (For in-game collision) ")
		FX% = Input("EntityFX with what parameter? (0[Default],1,2,4,8,16)")
		Fit% = 0
		TexDup$ = Tex$
		
  If FX% = 0 Or FX% = 1 Or FX% = 2 Or FX% = 4 Or FX% = 8 Or FX% = 16

  Else

		FX% = 0
		
  End If


        Entity% = LoadMesh(Obje$)

  If Not Entity%

       Error(350,200,"Error!","ERROR!:","Entity Did Not Exist")
       Return

  End If 

        HideEntity Entity%
        Create_Object(Obje$,Tex$,Entity%,CollisionType%,X#,Y#,Z#,Scale#,Scale#,Scale#,0,0,0,FX%,Fit%)
        FreeEntity Entity%
        FlushKeys


  Case 4

        Error(350,200,"Error!","ERROR!:","Button Not Implemented Yet!")

  Case 5

  If MilliSecs() >= DupCounter% + DupWait%

		DupCounter% = MilliSecs()
		
  If Duplicate = 0

        FlushKeys
        Entity% = LoadMesh(Obje$)

  If Not Entity%

        Error(350,200,"Error!","ERROR!:","Entity Did Not Exist")
		Exit
		
  Else

        HideEntity Entity%

        Create_Object(Obje$,TexDup$,Entity%,CollisionType%,X#,Y#,Z#,Scale#,Scale#,Scale#,0,0,0,FX%,Fit%)
        FreeEntity Entity%
        FlushKeys

        Duplicate = 1

  End If

  End If 

  End If

  Case 6

        Error(350,200,"Error!","ERROR!:","Button Not Implemented Yet!")

  Case 7
 
        Cls
        Generate_Random_Entity()

  Case 8

        Create_Custom_Tree

  Case 9

  If MouseDown(2) And Duplicate = 0


        Trunk% = LoadMesh(Tree1$)
        Branch% = LoadMesh(Tree2$)
        Pivot = CreatePivot()
        PositionEntity Pivot,EntityX(Camera),EntityY(Camera),EntityZ(Camera)
        Create_Object(Tree1$,Tex1$,Trunk%,2,EntityX(Pivot),EntityY(Pivot),EntityZ(Pivot),Scale#,Scale#,Scale#,0,0,0,FX%,Fit%)
        Create_Object(Tree2$,Tex2$,Branch%,2,EntityX(Pivot),EntityY(Pivot),EntityZ(Pivot),Scale#,Scale#,Scale#,0,0,0,FX%,Fit%)
        FreeEntity Trunk%
        FreeEntity Branch%

        Duplicate = 1

  End If

  Case 10

		End

  End Select 

  End If 

  Next 

End Function 

Function SkyBox(File$)

     Sky  = CreateMesh()
     SkyB=LoadBrush(File$ + "_ft.bmp",49)
     s = CreateSurface(Sky,SkyB)
     AddVertex  S,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
     AddVertex S,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
     AddTriangle S,0,1,2:AddTriangle S,0,2,3
     FreeBrush SkyB

     SkyB  = LoadBrush(File$ + "_LF.bmp",49)
     s = CreateSurface( Sky,SkyB )
     AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
     AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
     AddTriangle  s,0,1,2:AddTriangle s,0,2,3
     FreeBrush SkyB

     SkyB = LoadBrush( File$ + "_BK.bmp",49)
     s = CreateSurface(Sky,SkyB)
     AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
     AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
     AddTriangle s,0,1,2:AddTriangle s,0,2,3
     FreeBrush SkyB

     SkyB = LoadBrush(File$ + "_RT.bmp",49)
     s=CreateSurface(Sky,SkyB)
     AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
     AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
     AddTriangle s,0,1,2:AddTriangle s,0,2,3
     FreeBrush SkyB

     SkyB = LoadBrush(File$ + "_UP.bmp",49)
     s = CreateSurface( Sky,SkyB )
     AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
     AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
     AddTriangle  s,0,1,2 : AddTriangle s,0,2,3

     FreeBrush SkyB
     ScaleMesh Sky,5000,5000,5000
     FlipMesh Sky
     EntityFX Sky,9
     EntityOrder Sky,10
     Return Sky 

End Function

Function Error(Height%,Width%,Title$,ErrorMessage1$,ErrorMessage2$)

        File% = WriteFile("Data.dat")

        WriteLine(File%,Height%)
        WriteLine(File%,Width%)
        WriteLine(File%,Title$)
        WriteLine(File%,ErrrorMessage1$)
        WriteLine(File%,ErrorMessage2$)
        CloseFile File%
        ExecFile "Window.exe"

End Function

Function Create_Custom_Tree()

  Cls 


        Tree1$ = Input("What trunk do you wish to load?")
        Tree2$ = Input("What Branch do you wish to load?")
        Tex1$ = Input("What Texture do you wish to load for the Trunk?")
        Tex2$ = Input("What Texture do you wish to load for the Branch?")
        Scale# = Input("What scale do you want them to be?")
        Trunk% = LoadMesh(Tree1$)
        Branch% = LoadMesh(Tree2$)

  If Trunk% = 0 Or Branch% = 0

        Error(350,200,"Error!","Entity did not exist.","Entity Did Not Exist")
        Return

  End If 

        Pivot = CreatePivot()
        PositionEntity Pivot,X#,Y#,Z#

        Create_Object(Tree1$,Tex1$,Trunk%,2,EntityX(Pivot),EntityY(Pivot),EntityZ(Pivot),Scale#,Scale#,Scale#,0,0,0,FX,Fit%)

        Create_Object(Tree2$,Tex2$,Branch%,2,EntityX(Pivot),EntityY(Pivot),EntityZ(Pivot),Scale#,Scale#,Scale#,0,0,0,FX%,Fit%)

        FreeEntity Trunk%
        FreeEntity Branch%
        FreeEntity Pivot

End Function 

Function Create_Water(TempScale#,TempShallow#,TempY#)

  If TempShallow# >= 1

        RuntimeError "Error: Water Shallow Setting To High! (0.1-0.9)"

  Else If TempShallow# <= 0

        RuntimeError "Error: Water Shallow Setting To Low! (0.1-0.9)"

  End If


        TempEntity% = CreatePlane()

        PositionEntity TempEntity%,0,TempY#,0
        ScaleEntity TempEntity%,TempScale#,0.001,TempScale#
        EntityColor TempEntity%,0,0,255
        EntityAlpha TempEntity%,TempShallow#

        TempEntity2% = CreatePlane()

        PositionEntity TempEntity2%,0,TempY#,0
        ScaleEntity TempEntity2%,TempScale#,0.001,TempScale#
        EntityColor TempEntity2%,0,0,255
        EntityAlpha TempEntity2%,TempShallow#
        RotateEntity TempEntity2%,0,0,180
        EntityParent TempEntity2%,TempEntity%

  Return TempEntity%

End Function

Function Update_Water(TempEntity%,TempPlayer%,TempY#,TempSpeed#,Duration#)

        TempTime=MilliSecs()*TempSpeed#

        PositionEntity TempEntity%,Sin(TempTime%),TempY#+Sin(TempTime%)+Duration#,Cos(TempTime%)

  If EntityY(TempPlayer%) < EntityY(TempEntity%)

        CameraFogMode Camera,1
        CameraFogColor Camera,0,0,100
        CameraFogRange Camera,20,100
        Gravity# = 0.05
        Speed# = 0.2
        TempUnderWater% = 1

  Else

        CameraFogMode Camera,0
        Speed# = 1
        TempUnderWater% = 0

  End If

  Return TempUnderWater%

End Function 



Blitzplotter(Posted 2009) [#2]
Very generous to supply the source code, well indented professional looking code ;)