10 CRLF = Chr(13) & Chr(10)
12 dim scriptFullName, scriptPath
13 scriptFullName = WScript.ScriptFullName
14 scriptPath = Left ( scriptFullName, InStrRev ( scriptFullName, WScript.ScriptName) - 1 )
16 dim objFSO, setfolder, re, shader, objShaderTemplate, shaderTemplate
17 Set objFSO = CreateObject("Scripting.FileSystemObject")
18 Set setfolder = objFSO.GetFolder(scriptPath)
25 Set shader = objFSO.OpenTextFile (scriptPath & "\" & setfolder.name & ".shader", ForWriting, True)
27 Set objShaderTemplate = objFSO.OpenTextFile(scriptPath & "\template.shader", ForReading)
28 shaderTemplate = objShaderTemplate.ReadAll()
30 function filetitle(sfilename)
31 filetitle = Left(sfilename, len(sfilename) - 4)
34 dim noLightmap, isLiquid, isTransparent, bounceScale, shaderString
35 dim shaderHead, shaderTail, shaderQUI, shaderDiffuse, diffuseExtra
36 dim subfold, texfile, fn
38 For Each subfold in setfolder.Subfolders
39 ' shader.write "Folder: " & subfold.Name & CRLF
40 For Each texfile In subfold.Files
46 shaderString = shaderTemplate
54 ' First ignore any extra map or Thumbs.db
55 re.Pattern = "_bump.|_gloss.|_norm.|_glow.|Thumbs.db"
56 if not re.test(texfile.name) then
58 if re.test(texfile.name) then
63 if re.test(texfile.name) then
66 shaderHead = shaderHead & " surfaceparm trans" & CRLF
67 shaderHead = shaderHead & " surfaceparm water" & CRLF
68 shaderHead = shaderHead & " qer_trans 20" & CRLF
69 diffuseExtra = "blendfunc blend"
73 if re.test(texfile.name) then
76 shaderHead = shaderHead & " surfaceparm trans" & CRLF
77 shaderHead = shaderHead & " surfaceparm slime" & CRLF
78 shaderHead = shaderHead & " qer_trans 20" & CRLF
82 if re.test(texfile.name) then
85 shaderHead = shaderHead & " surfaceparm trans" & CRLF
86 shaderHead = shaderHead & " surfaceparm lava" & CRLF
87 shaderHead = shaderHead & " qer_trans 20" & CRLF
88 diffuseExtra = " blendfunc add"
92 if re.test(texfile.name) then
94 shaderHead = shaderHead & " surfaceparm trans" & CRLF
95 diffuseExtra = " blendfunc add"
99 if re.test(texfile.name) then
100 bounceScale = bounceScale + 0.25
101 shaderHead = shaderHead & " surfaceparm metalsteps" & CRLF
105 if re.test(texfile.name) then
106 bounceScale = bounceScale + 0.25
107 shaderHead = shaderHead & " surfaceparm trans" & CRLF
108 diffuseExtra = " blendfunc blend"
112 if re.test(texfile.name) then
113 bounceScale = bounceScale + 0.25
116 re.pattern = "dirt|terrain|old"
117 if re.test(texfile.name) then
118 bounceScale = bounceScale - 0.25
119 shaderHead = shaderHead & " surfaceparm dust" & CRLF
122 shaderDiffuse = "textures/" & setfolder.name & "/" & subfold.name & "/" & texfile.name
124 fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_gloss.tga"
125 if objFSO.FileExists(fn) Then
126 bounceScale = bounceScale + 0.25
129 fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga"
130 if objFSO.FileExists(fn) Then
131 shaderQUI = "textures/" & setfolder.name & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga"
133 shaderQUI = shaderDiffuse
136 if not noLightmap then
137 shaderTail = " {" & CRLF & " map $lightmap" & CRLF & " rgbGen identity" & CRLF & " tcGen lightmap" & CRLF & " blendfunc filter" & CRLF & " }"
140 if not bounceScale = 1 then
142 shaderHead = shaderHead & " q3map_bounceScale " & re.Replace(bounceScale, ".") & CRLF
145 re.Pattern = "%shader_name%"
146 shaderString = re.Replace(shaderTemplate, "textures/" & setfolder.name & "/" & subfold.name & "-" & filetitle(texfile.name))
148 re.Pattern = "%qei_name%"
149 shaderString = re.Replace(shaderString, shaderQUI)
151 re.Pattern = "%shader_head%"
152 shaderString = re.Replace(shaderString, shaderHead)
154 re.Pattern = "%diffuse_map%"
155 shaderString = re.Replace(shaderString, shaderDiffuse)
157 re.Pattern = "%diffuse_map_extra%"
158 shaderString = re.Replace(shaderString, diffuseExtra)
160 re.Pattern = "%shader_tail%"
161 shaderString = re.Replace(shaderString, shaderTail)
165 shader.write shaderString & CRLF & CRLF