X Zone Edtior Source
Community Forums/Developer Stations/X Zone Edtior Source| 
 | ||
| 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  | 
| 
 | ||
| Very generous to supply the source code, well indented professional looking code ;) |