Ooops
October 28, 2020, 06:21:01 AM

Author Topic: [bb] gile[s] .gls Loader by N [ 1+ years ago ]  (Read 1287 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] gile[s] .gls Loader by N [ 1+ years ago ]
« on: June 29, 2017, 12:28:43 AM »
Title : gile .gls Loader
Author : N
Posted : 1+ years ago

Description : Simple enough.  There's no guarantee I'm doing this the 'right' way, or that I'm doing anything right at all, but it works on the Ruins example, so that's good enough for me.

Simply call LoadGLS("your.gls") and it will return a pivot which has every model loaded from the .gls parented to it.


Code :
Code: BlitzBasic
  1. Graphics3D 800,600,32,2
  2.  
  3. Camera = CreateCamera()
  4. Ruin = LoadGLS("ruin.gls")
  5.  
  6. PositionEntity Camera,10*2.2,20*2.2,-30*2.2
  7. If Ruin Then PointEntity Camera,Ruin
  8. Repeat
  9.         UpdateWorld
  10.         RenderWorld
  11.         Flip
  12. Until KeyHit(1)
  13.  
  14.  
  15.  
  16.  
  17. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  18. ;; gls Loader                                                                                   ;;
  19. ;; gile[s]: www.frecle.net/giles                                                ;;
  20. ;; Written by Noel R. Cower                                                     ;;
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  22.  
  23. ;; GLOBALS
  24. Global glsMaterialCount = 0
  25. Global glsTextureCount = 0
  26. Global glsLightMapCount = 0
  27.  
  28. ;; TYPES
  29. Type glsMaterial
  30.         Field Index
  31.         Field Brush
  32.         Field Name$
  33.         Field R,G,B,A#
  34.         Field Shine#
  35.         Field FX%
  36.         Field Blend
  37. End Type
  38.  
  39. Type glsTexture
  40.         Field Index
  41.         Field Texture
  42.         Field Path$
  43.         Field Flags%
  44. End Type
  45.  
  46. Type glsLightmap
  47.         Field Index
  48.         Field Texture
  49. End Type
  50.  
  51. ;; CONSTANTS
  52. ;; Yes, I typed all of these and I probably don't even use half of them.
  53. Const GLS_HEADER = $FFFF
  54. Const GLS_AUTHOR = $F000
  55. Const GLS_MODELS = $1000
  56. Const GLS_MODEL = $1001
  57. Const GLS_MODEL_NAME = $1002
  58. Const GLS_MODEL_POSITION = $1003
  59. Const GLS_MODEL_ROTATION = $1004
  60. Const GLS_MODEL_SCALE = $1005
  61. Const GLS_MODEL_CUSTOMPROPS = $1006
  62. Const GLS_MODEL_FILE = $1007
  63. Const GLS_MODEL_HIDDEN = $1008
  64. Const GLS_MESH = $2000
  65. Const GLS_MESH_OVERRIDE = $2001
  66. Const GLS_MESH_BACKLIGHT = $2002
  67. Const GLS_MESH_RECEIVESHADOW = $2003
  68. Const GLS_MESH_CASTSHADOW = $2004
  69. Const GLS_MESH_RECEIVEGI = $2005
  70. Const GLS_MESH_AFFECTGI = $2006
  71. Const GLS_MESH_SURFACES = $2100
  72. Const GLS_MESH_SURF = $2101
  73. Const GLS_MESH_SURFVERTS = $2102
  74. Const GLS_MESH_SURFPOLYS = $2103
  75. Const GLS_MESH_SURFMATERIAL = $2104
  76. Const GLS_MESH_SURFVERTFORMAT = $2105
  77. Const GLS_MESH_SURFVERTDATA = $2106
  78. Const GLS_MESH_SURFPOLYDATA = $2107
  79. Const GLS_PIVOT = $3000
  80. Const GLS_LIGHT = $4000
  81. Const GLS_LIGHT_TYPE = $4001
  82. Const GLS_LIGHT_ACTIVE = $4002
  83. Const GLS_LIGHT_CASTSHADOWS = $4003
  84. Const GLS_LIGHT_INFINITE = $4004
  85. Const GLS_LIGHT_OVERSHOOT = $4005
  86. Const GLS_LIGHT_RADIUS = $4006
  87. Const GLS_LIGHT_RED = $4007
  88. Const GLS_LIGHT_GREEN = $4008
  89. Const GLS_LIGHT_BLUE = $4009
  90. Const GLS_LIGHT_INTENSITY = $400A
  91. Const GLS_LIGHT_NEAR = $400B
  92. Const GLS_LIGHT_FAR = $400C
  93. Const GLS_LIGHT_INNER = $400D
  94. Const GLS_LIGHT_OUTER = $400E
  95. Const GLS_LIGHT_TOON = $400F
  96. Const GLS_LIGHT_TOONLEVELS = $40010
  97. Const GLS_MATERIALS = $5000
  98. Const GLS_MAT = $5001
  99. Const GLS_MAT_NAME = $5002
  100. Const GLS_MAT_RED = $5003
  101. Const GLS_MAT_GREEN = $5004
  102. Const GLS_MAT_BLUE = $5005
  103. Const GLS_MAT_ALPHA = $5006
  104. Const GLS_MAT_SELFILLUMINATION = $5007
  105. Const GLS_MAT_SHININESS = $5008
  106. Const GLS_MAT_FX = $5009
  107. Const GLS_MAT_BLEND = $500A
  108. Const GLS_MAT_LIGHTMETHOD = $500B
  109. Const GLS_MAT_LIGHTMAP = $500C
  110. Const GLS_MAT_RECEIVEBACK = $500D
  111. Const GLS_MAT_RECEIVESHADOW = $500E
  112. Const GLS_MAT_CASTSHADOW = $500F
  113. Const GLS_MAT_RECEIVEGI = $5010
  114. Const GLS_MAT_AFFECTGI = $5011
  115. Const GLS_MAT_TEXLAYER = $5012
  116. Const GLS_TEXTURES = $6000
  117. Const GLS_TEX = $6001
  118. Const GLS_TEX_FILE = $6002
  119. Const GLS_TEX_SCALEU = $6003
  120. Const GLS_TEX_SCALEV = $6004
  121. Const GLS_TEX_OFFSETU = $6005
  122. Const GLS_TEX_OFFSETV = $6006
  123. Const GLS_TEX_ANGLE = $6007
  124. Const GLS_TEX_FLAGS = $6008
  125. Const GLS_TEX_BLEND = $6009
  126. Const GLS_TEX_COORDSET = $600A
  127. Const GLS_LIGHTMAPS = $7000
  128. Const GLS_LMAP = $7001
  129. Const GLS_LMAP_NAME = $7002
  130. Const GLS_LMAP_FILE = $7003
  131. Const GLS_LMAP_WIDTH = $7004
  132. Const GLS_LMAP_HEIGHT = $7005
  133. Const GLS_LMAP_NONUNIFORM = $7006
  134. Const GLS_LMAP_USECUSTOMTEXEL = $7007
  135. Const GLS_LMAP_CUSTOMTEXEL = $7008
  136. Const GLS_LMAP_REPACK = $7009
  137. Const GLS_LMAP_DATA = $700A
  138. Const GLS_RENDER = $8000
  139. Const GLS_RENDER_CLEARBEFORERENDER = $8001
  140. Const GLS_RENDER_DIRENABLE = $8002
  141. Const GLS_RENDER_GIENABLE = $8003
  142. Const GLS_RENDER_RAYBIAS = $8004
  143. Const GLS_RENDER_DIRMULTIPLY = $8005
  144. Const GLS_RENDER_DIRBACKSHAD = $8006
  145. Const GLS_RENDER_DIRSHADOWS = $8007
  146. Const GLS_RENDER_DIRSOFT = $8008
  147. Const GLS_RENDER_SOFTSAMPLES = $8009
  148. Const GLS_RENDER_GIIGNORETEX = $800A
  149. Const GLS_RENDER_GIITERATIONS = $800B
  150. Const GLS_RENDER_GIDENSITY = $800C
  151. Const GLS_RENDER_GISAMPLES = $800D
  152. Const GLS_RENDER_GIMULTIPLY = $800E
  153. Const GLS_RENDER_SKYENABLE = $800F
  154. Const GLS_RENDER_SKYRED = $8010
  155. Const GLS_RENDER_SKYBLUE = $8011
  156. Const GLS_RENDER_SKYGREEN = $8012
  157. Const GLS_RENDER_SKYMULTIPLY = $8013
  158. Const GLS_RENDER_AUTOBLUR = $8014
  159. Const GLS_RENDER_AUTOEXPAND = $8015
  160. Const GLS_RENDER_AUTOBLURRADIUS = $8016
  161.  
  162. ;; FUNCTIONS
  163. ;; Loads a .gls model
  164. Function LoadGLS(Path$)
  165.         glsMaterialCount = 0
  166.         glsLightMapCount = 0
  167.         glsTextureCount = 0
  168.         If FileType(Path$) <> 1 Then Return 0
  169.         F = ReadFile(Path$)
  170.         If F = 0 Then Return 0
  171.         Local Pivot = CreatePivot()
  172.         While Not Eof(F)
  173.                 ChunkID% = ReadInt(F)
  174.                 ChunkSize% = ReadInt(F)
  175.                 FPos = FilePos(F)
  176.                 Select ChunkID
  177.                         Case GLS_HEADER
  178.                                 Header$ = ReadString(F)
  179.                                 Version# = ReadFloat(F)
  180.                        
  181.                         Case GLS_AUTHOR
  182.                                 Author$ = ReadString(F)
  183.                                 NameEntity(Pivot,Header+" "+Version+"    Made by "+Author)
  184.                        
  185.                         Case GLS_MODELS
  186.                                 DebugLog "Entering GLS_MODELS chunk"
  187.                        
  188.                         Case GLS_MODEL
  189.                                 DebugLog "Entering GLS_MODEL chunk"
  190.                                 SetScale = 0
  191.                                 SetRotation = 0
  192.                                 SetPosition = 0
  193.                        
  194.                         Case GLS_MODEL_NAME
  195.                                 ModelName$ = ReadString(F)
  196.                        
  197.                         Case GLS_MODEL_POSITION
  198.                                 SetPosition = 1
  199.                                 PX# = ReadFloat(F)
  200.                                 PY# = ReadFloat(F)
  201.                                 PZ# = ReadFloat(F)
  202.                        
  203.                         Case GLS_MODEL_ROTATION
  204.                                 SetRotation = 1
  205.                                 RX# = ReadFloat(F)
  206.                                 RY# = ReadFloat(F)
  207.                                 RZ# = ReadFloat(F)
  208.                        
  209.                         Case GLS_MODEL_SCALE
  210.                                 SetScale = 1
  211.                                 SX# = ReadFloat(F)
  212.                                 SY# = ReadFloat(F)
  213.                                 SZ# = ReadFloat(F)
  214.                        
  215.                         Case GLS_MODEL_CUSTOMPROPS
  216.                                 Properties$ = ReadString(F)
  217.                                 ModelName$ = Trim(ModelName$+" "+Properties)
  218.                        
  219.                         Case GLS_MODEL_HIDDEN
  220.                                 ModelHidden% = ReadByte(F)
  221.                        
  222.                         Case GLS_MESH
  223.                                 Local Mesh = CreateMesh()
  224.                                 EntityParent Mesh,Pivot,0
  225.                                 If SetScale Then ScaleEntity Mesh,SX,SY,SZ,0
  226.                                 If SetRotation Then RotateEntity Mesh,RX,RY,RZ,0
  227.                                 If SetPosition Then PositionEntity Mesh,PX,PY,PZ,0
  228.                                 NameEntity Mesh,ModelName
  229.                                 If ModelHidden Then HideEntity Mesh
  230.                        
  231.                         Case GLS_MESH_OVERRIDE
  232.                                 MeshOverride = ReadByte(F)
  233.                        
  234.                         Case GLS_MESH_BACKLIGHT
  235.                                 MeshBacklight = ReadByte(F)
  236.                        
  237.                         Case GLS_MESH_RECEIVESHADOW
  238.                                 MeshReceiveShadow = ReadByte(F)
  239.                                
  240.                         Case GLS_MESH_CASTSHADOW
  241.                                 MeshCastShadow = ReadByte(F)
  242.                        
  243.                         Case GLS_MESH_RECEIVEGI
  244.                                 MeshReceiveGI = ReadByte(F)
  245.                        
  246.                         Case GLS_MESH_AFFECTGI
  247.                                 MeshAffectGI = ReadByte(F)
  248.                        
  249.                         Case GLS_MESH_SURFACES
  250.                                 DebugLog "Entering GLS_MESH_SURFACES chunk"
  251.                        
  252.                         Case GLS_MESH_SURF
  253.                                 Surface = CreateSurface(Mesh)
  254.                        
  255.                         Case GLS_MESH_SURFVERTS
  256.                                 Vertices = ReadShort(F)
  257.                        
  258.                         Case GLS_MESH_SURFPOLYS
  259.                                 Polygons = ReadShort(F)
  260.                        
  261.                         Case GLS_MESH_SURFMATERIAL
  262.                                 MaterialIndex = ReadInt(F)
  263.                                 For M.glsMaterial = Each glsMaterial
  264.                                         If MIndex = MaterialIndex Then
  265.                                                 PaintSurface Surface,MBrush
  266.                                                 Exit
  267.                                         EndIf
  268.                                 Next
  269.                        
  270.                         Case GLS_MESH_SURFVERTFORMAT
  271.                                 VertFormat = ReadInt(F)
  272.                                 VPosition = 0
  273.                                 VNormals = 0
  274.                                 VColor = 0
  275.                                 VLight = 0
  276.                                 VLMap = 0
  277.                                 VTexCoords = 0
  278.                                 If (VertFormat And 0) = 0 Then VPosition = 1
  279.                                 If (VertFormat And 1) = 1 Then VNormals = 1
  280.                                 If (VertFormat And 2) = 2 Then VColor = 1
  281.                                 If (VertFormat And 4) = 4 Then VLight = 1
  282.                                 If (VertFormat And 8) = 8 Then VLMap = 1
  283.                                 If (VertFormat And 16) = 16 Then VTexCoords = 1
  284.                        
  285.                         Case GLS_MESH_SURFVERTDATA
  286.                                 For N = 1 To Vertices
  287.                                         If VPosition Then
  288.                                                 VX# = ReadFloat(F)
  289.                                                 VY# = ReadFloat(F)
  290.                                                 VZ# = ReadFloat(F)
  291.                                         Else
  292.                                                 VX = 0
  293.                                                 VY = 0
  294.                                                 VZ = 0
  295.                                         EndIf
  296.                                        
  297.                                         If VNormals Then
  298.                                                 VNX# = ReadFloat(F)
  299.                                                 VNY# = ReadFloat(F)
  300.                                                 VNZ# = ReadFloat(F)    
  301.                                         Else
  302.                                                 VNX = 0
  303.                                                 VNY = 0
  304.                                                 VNZ = 0
  305.                                         EndIf
  306.                                        
  307.                                         If VColor Then
  308.                                                 VCR = ReadByte(F)
  309.                                                 VCG = ReadByte(F)
  310.                                                 VCB = ReadByte(F)
  311.                                                 VCA = ReadByte(F)
  312.                                         Else
  313.                                                 VCR = 255
  314.                                                 VCG = 255
  315.                                                 VCB = 255
  316.                                                 VCA = 255
  317.                                         EndIf
  318.                                        
  319.                                         If VLight Then
  320.                                                 VLR# = Float(ReadByte(F))/255
  321.                                                 VLG# = Float(ReadByte(F))/255
  322.                                                 VLB# = Float(ReadByte(F))/255
  323.                                         Else
  324.                                                 VLR = 1
  325.                                                 VLG = 1
  326.                                                 VLB = 1
  327.                                         EndIf
  328.                                        
  329.                                         If VLMap Then
  330.                                                 VLU# = ReadFloat(F)
  331.                                                 VLV# = ReadFloat(F)
  332.                                         Else
  333.                                                 VLU = 0
  334.                                                 VLV = 0
  335.                                         EndIf
  336.                                        
  337.                                         If VTexCoords Then
  338.                                                 VU# = ReadFloat(F)
  339.                                                 VV# = ReadFloat(F)
  340.                                         Else
  341.                                                 VU = 0
  342.                                                 VV = 0
  343.                                         EndIf
  344.                                        
  345.                                         V = AddVertex(Surface,VX,VY,VZ,VU,VV)
  346.                                         VertexTexCoords Surface,V,VLU,VLV,0,1
  347.                                         VertexNormal Surface,V,VNX,VNY,VNZ
  348.                                         VertexColor Surface,V,VCR*VLR,VCG*VLG,VCB*VLB,VCA
  349.                                 Next
  350.                        
  351.                         Case GLS_MESH_SURFPOLYDATA
  352.                                 For N = 1 To Polygons
  353.                                         VI0 = ReadShort(F)
  354.                                         VI1 = ReadShort(F)
  355.                                         VI2 = ReadShort(F)
  356.                                         AddTriangle Surface,VI0,VI1,VI2
  357.                                 Next
  358.                        
  359.                         Case GLS_PIVOT
  360.                                 Mesh = CreatePivot()
  361.                                 EntityParent Mesh,Pivot,0
  362.                                 If SetScale Then ScaleEntity Mesh,SX,SY,SZ,0
  363.                                 If SetRotation Then RotateEntity Mesh,RX,RY,RZ,0
  364.                                 If SetPosition Then PositionEntity Mesh,PX,PY,PZ,0
  365.                                 NameEntity Mesh,ModelName
  366.                                 If ModelHidden Then HideEntity Mesh
  367.                        
  368.                         Case GLS_LIGHT_TYPE
  369.                                 InnerCone# = -1
  370.                                 OuterCone# = -1
  371.                                 LightType = ReadByte(F)
  372.                                 If LightType = 4 Then LightType = 2
  373.                                 Mesh = CreateLight(LightType)
  374.                                 EntityParent Mesh,Pivot,0
  375.                                 If SetScale Then ScaleEntity Mesh,SX,SY,SZ,0
  376.                                 If SetRotation Then RotateEntity Mesh,RX,RY,RZ,0
  377.                                 If SetPosition Then PositionEntity Mesh,PX,PY,PZ,0
  378.                                 NameEntity Mesh,ModelName
  379.                                 If ModelHidden Then HideEntity Mesh
  380.                        
  381.                         Case GLS_LIGHT_ACTIVE
  382.                                 LightActive = ReadByte(F)
  383.                                 If LightActive=0 Then HideEntity Mesh
  384.                        
  385.                         Case GLS_LIGHT_RADIUS
  386.                                 LightRadius = ReadFloat(F)
  387.                                 LightRange Mesh,LightRadius
  388.                        
  389.                         Case GLS_LIGHT_RED
  390.                                 LR% = ReadFloat(F)*255
  391.                        
  392.                         Case GLS_LIGHT_GREEN
  393.                                 LG% = ReadFloat(F)*255
  394.                        
  395.                         Case GLS_LIGHT_BLUE
  396.                                 LB% = ReadFloat(F)*255
  397.                        
  398.                         Case GLS_LIGHT_INTENSITY
  399.                                 Intensity# = ReadFloat(F)
  400.                                 LightColor Mesh,LR*Intensity,LG*Intensity,LB*Intensity
  401.                        
  402.                         Case GLS_LIGHT_INNER
  403.                                 InnerCone = ReadFloat(F)
  404.                                 If OuterCone <> -1 Then
  405.                                         LightConeAngles Mesh,InnerCone,OuterCone
  406.                                 EndIf
  407.                        
  408.                         Case GLS_LIGHT_OUTER
  409.                                 OuterCone = ReadFloat(F)
  410.                                 If InnerCone <> -1 Then
  411.                                         LightConeAngles Mesh,InnerCone,OuterCone
  412.                                 EndIf
  413.                        
  414.                         Case GLS_MATERIALS
  415.                                 DebugLog "Entering GLS_MATERIALS chunk"
  416.                        
  417.                         Case GLS_MAT
  418.                                 M.glsMaterial = New glsMaterial
  419.                                 MIndex = glsMaterialCount
  420.                                 MBrush = CreateBrush()
  421.                                 glsMaterialCount = glsMaterialCount + 1
  422.                                 ReSet = 0
  423.                                 GrSet = 0
  424.                                 BlSet = 0
  425.                        
  426.                         Case GLS_MAT_NAME
  427.                                 MName = ReadString(F)
  428.                        
  429.                         Case GLS_MAT_RED
  430.                                 MR = ReadFloat(F)*255
  431.                                 ReSet = 1
  432.                                 If BlSet And ReSet And GrSet Then
  433.                                         BrushColor MBrush,MR,MG,MB
  434.                                 EndIf
  435.                        
  436.                         Case GLS_MAT_GREEN
  437.                                 MG = ReadFloat(F)*255
  438.                                 ReSet = 1
  439.                                 If BlSet And ReSet And GrSet Then
  440.                                         BrushColor MBrush,MR,MG,MB
  441.                                 EndIf
  442.                        
  443.                         Case GLS_MAT_BLUE
  444.                                 MB = ReadFloat(F)*255
  445.                                 BlSet = 1
  446.                                 If BlSet And ReSet And GrSet Then
  447.                                         BrushColor MBrush,MR,MG,MB
  448.                                 EndIf
  449.                        
  450.                         Case GLS_MAT_ALPHA
  451.                                 MA = ReadFloat(F)
  452.                                 BrushAlpha MBrush,MA
  453.                        
  454.                         Case GLS_MAT_SHININESS
  455.                                 MShine = ReadFloat(F)
  456.                                 BrushShininess MBrush,MShine
  457.                        
  458.                         Case GLS_MAT_FX
  459.                                 MFX = ReadInt(F)
  460.                                 BrushFX MBrush,MFX
  461.                        
  462.                         Case GLS_MAT_BLEND
  463.                                 MBlend = ReadInt(F)
  464.                                 BrushBlend MBrush,MBlend
  465.                        
  466.                         Case GLS_MAT_TEXLAYER
  467.                                 Layer = ReadByte(F)
  468.                                 Index = ReadShort(F)
  469.                                 For T.glsTexture = Each glsTexture
  470.                                         If TIndex = Index Then
  471.                                                 BrushTexture MBrush,TTexture,0,Layer
  472.                                                 Exit
  473.                                         EndIf
  474.                                 Next
  475.                        
  476.                         Case GLS_MAT_LIGHTMAP
  477.                                 Index = ReadShort(F)
  478.                                 For L.glsLightmap = Each glsLightmap
  479.                                         If LIndex = Index Then
  480.                                                 BrushTexture MBrush,LTexture,0,7
  481.                                         EndIf
  482.                                 Next
  483.                        
  484.                         Case GLS_TEXTURES
  485.                                 DebugLog "Entering GLS_TEXTURES chunk"
  486.                        
  487.                         Case GLS_TEX
  488.                                 T.glsTexture = New glsTexture
  489.                                 TIndex = glsTextureCount
  490.                                 glsTextureCount = glsTextureCount + 1
  491.                                 eTOV# = 0
  492.                                 eTOU# = 0
  493.                                 eSOV# = 1
  494.                                 eSOU# = 1
  495.                                 TBlend = 1
  496.                                 TCoords = 0
  497.                                 TAngle# = 0
  498.                                 TFlags = 9
  499.                        
  500.                         Case GLS_TEX_FILE
  501.                                 TPath$ = ReadString(F)
  502.                        
  503.                         Case GLS_TEX_FLAGS
  504.                                 TFlags = ReadInt(F)
  505.                                 TTexture = LoadTexture(TPath,TFlags)
  506.                                 TextureCoords TTexture,TCoords
  507.                                 TextureBlend TTexture,TBlend
  508.                                 ScaleTexture TTexture,eSOU,eSOV
  509.                                 PositionTexture TTexture,ePOU,ePOV
  510.                                 RotateTexture TTexture,TAngle
  511.                        
  512.                         Case GLS_TEX_OFFSETU
  513.                                 eTOU# = ReadFloat(F)
  514.                        
  515.                         Case GLS_TEX_OFFSETV
  516.                                 eTOV# = ReadFloat(F)
  517.                        
  518.                         Case GLS_TEX_SCALEU
  519.                                 eSOU# = ReadFloat(F)
  520.                        
  521.                         Case GLS_TEX_SCALEV
  522.                                 eSOV# = ReadFloat(F)
  523.                        
  524.                         Case GLS_TEX_ANGLE
  525.                                 TAngle# = ReadFloat(F)
  526.                        
  527.                         Case GLS_TEX_BLEND
  528.                                 TBlend = ReadInt(F)
  529.                        
  530.                         Case GLS_TEX_COORDSET
  531.                                 TCoords =  ReadByte(F)
  532.                        
  533.                         Case GLS_LIGHTMAPS
  534.                                 DebugLog "Entering GLS_LIGHTMAPS chunk"
  535.                        
  536.                         Case GLS_LMAP
  537.                                 L.glsLightmap = New glsLightmap
  538.                                 glsLightMapCount = glsLightMapCount + 1
  539.                                 LIndex = glsLightMapCount
  540.                                 WSet=0
  541.                                 HSet=0
  542.                        
  543.                         Case GLS_LMAP_WIDTH
  544.                                 WSet = 1
  545.                                 LWidth = ReadShort(F)
  546.                                 If HSet And WSet Then LTexture = CreateTexture(LWidth,LHeight,1)
  547.                        
  548.                         Case GLS_LMAP_HEIGHT
  549.                                 HSet = 1
  550.                                 LHeight = ReadShort(F)
  551.                                 If HSet And WSet Then LTexture = CreateTexture(LWidth,LHeight,1)
  552.                        
  553.                         Case GLS_LMAP_DATA
  554.                                 TextureBlend LTexture,2
  555.                                 TextureCoords LTexture,1
  556.                                 Buffer = TextureBuffer(LTexture)
  557.                                 LockBuffer(Buffer)
  558.                                 For u = 1 To LWidth
  559.                                         For v = 1 To LHeight
  560.                                                 R = ReadByte(F)
  561.                                                 G = ReadByte(F)
  562.                                                 B = ReadByte(F)
  563.                                                 Pixel = $FF Shl 24 Or R Shl 16 Or G Shl 8 Or B
  564.                                                 WritePixelFast u,v,Pixel,Buffer
  565.                                         Next
  566.                                 Next
  567.                                 UnlockBuffer(Buffer)           
  568.                        
  569.                         Default
  570.                                 SeekFile F,FPos+ChunkSize
  571.                 End Select
  572.         Wend
  573.        
  574.         For M.glsMaterial = Each glsMaterial
  575.                 FreeBrush MBrush
  576.         Next
  577.        
  578.         For L.glsLightmap = Each glsLightmap
  579.                 FreeTexture LTexture
  580.         Next
  581.        
  582.         For T.glsTexture = Each glsTexture
  583.                 FreeTexture TTexture
  584.         Next
  585.        
  586.         Delete Each glsMaterial
  587.         Delete Each glsLightmap
  588.         Delete Each glsTexture
  589.        
  590.         CloseFile F
  591.         Return Pivot
  592. End Function
  593.  
  594. ;; Overloads the default ReadString() function with one that isn't as piss
  595. Function ReadString$(Stream,BreakCharacter = 0)
  596.         If Stream = 0 Then Return ""
  597.         If Eof(Stream) Then Return ""
  598.         Repeat
  599.                 C = ReadByte(Stream)
  600.                 If C = BreakCharacter Or Eof(Stream) Then Exit
  601.                 S$ = S$ + Chr(C)
  602.         Forever
  603.         Return S$
  604. End Function


Comments :


Dirk Krause(Posted 1+ years ago)

 Great, thanks Noel.Just a remark: it might be useful to strip the texture paths, for example with Perturbatio's code here:<a href="codearcs72ce.html?code=808" target="_blank">http://www.blitzbasic.com/codearcs/codearcs.php?code=808[/url]Include this, and then change  Case GLS_TEX_FILE  TPath$ = ExtractFileName$(ReadString(F))and it works directly in the 'ruin' folder.


N(Posted 1+ years ago)

 Dirk: Yes, but then the textures would have to be in the root directory of the .gls or there would have to be an added chunk for setting a path relative to the root.


Dirk Krause(Posted 1+ years ago)

 ok, I put it wrong :-). The way it is coded right now, you have to rebuild Fredborgs harddisk structure and create a folder 'C:GraphixRuin'.The good news is: the way you coded it you can change the path to the texture by varying the line above.


N(Posted 1+ years ago)

 Dirk: I think the best way to make it relative would be to strip the drive letter and anything similar to the current path (CurrentDirectory$()).  In any case, it's up to whoever wants to use it.


Picklesworth(Posted 1+ years ago)

 Perhaps add on a function where you can convert a file path string to another. So for instance, you could tell the loader that the image leaves.jpg is actually in a different place.


wizzlefish(Posted 1+ years ago)

 neat neat neat neat neat!!!!


wizzlefish(Posted 1+ years ago)

 "Texture doesn't exist"


N(Posted 1+ years ago)

 Don't look at me- I'm not finding what the problem is.


JoshK(Posted 1+ years ago)

 Your code fails to load the mesh hierarchy.


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal