mirror of
https://gitlab.com/xonotic/xonotic
synced 2025-02-02 19:51:45 +00:00
173 lines
4.9 KiB
Plaintext
173 lines
4.9 KiB
Plaintext
option explicit
|
|
|
|
|
|
Const ForReading = 1
|
|
Const ForWriting = 2
|
|
Const ForAppending = 8
|
|
|
|
dim CRLF
|
|
|
|
CRLF = Chr(13) & Chr(10)
|
|
|
|
dim scriptFullName, scriptPath
|
|
scriptFullName = WScript.ScriptFullName
|
|
scriptPath = Left ( scriptFullName, InStrRev ( scriptFullName, WScript.ScriptName) - 1 )
|
|
|
|
dim objFSO, setfolder, re, shader, objShaderTemplate, shaderTemplate
|
|
Set objFSO = CreateObject("Scripting.FileSystemObject")
|
|
Set setfolder = objFSO.GetFolder(scriptPath)
|
|
Set re = New RegExp
|
|
|
|
re.IgnoreCase = True
|
|
re.Global = True
|
|
re.Pattern = ""
|
|
|
|
Set shader = objFSO.OpenTextFile (scriptPath & "\" & setfolder.name & ".shader", ForWriting, True)
|
|
|
|
Set objShaderTemplate = objFSO.OpenTextFile(scriptPath & "\template.shader", ForReading)
|
|
shaderTemplate = objShaderTemplate.ReadAll()
|
|
|
|
function filetitle(sfilename)
|
|
filetitle = Left(sfilename, len(sfilename) - 4)
|
|
end function
|
|
|
|
dim noLightmap, isLiquid, isTransparent, bounceScale, shaderString
|
|
dim shaderHead, shaderTail, shaderQUI, shaderDiffuse, diffuseExtra
|
|
dim subfold, texfile, fn
|
|
|
|
For Each subfold in setfolder.Subfolders
|
|
' shader.write "Folder: " & subfold.Name & CRLF
|
|
For Each texfile In subfold.Files
|
|
'Defaults
|
|
noLightmap = false
|
|
isLiquid = false
|
|
isTransparent = false
|
|
bounceScale = 1
|
|
shaderString = shaderTemplate
|
|
|
|
shaderHead = ""
|
|
shaderTail = ""
|
|
shaderQUI = ""
|
|
shaderDiffuse = ""
|
|
diffuseExtra = ""
|
|
|
|
' First ignore any extra map or Thumbs.db
|
|
re.Pattern = "_bump.|_gloss.|_norm.|_glow.|Thumbs.db"
|
|
if not re.test(texfile.name) then
|
|
re.pattern = "decal"
|
|
if re.test(texfile.name) then
|
|
noLightmap = true
|
|
end if
|
|
|
|
re.pattern = "water"
|
|
if re.test(texfile.name) then
|
|
noLightmap = true
|
|
isLiquid = true
|
|
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
|
shaderHead = shaderHead & " surfaceparm water" & CRLF
|
|
shaderHead = shaderHead & " qer_trans 20" & CRLF
|
|
diffuseExtra = "blendfunc blend"
|
|
end if
|
|
|
|
re.pattern = "slime"
|
|
if re.test(texfile.name) then
|
|
noLightmap = true
|
|
isLiquid = true
|
|
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
|
shaderHead = shaderHead & " surfaceparm slime" & CRLF
|
|
shaderHead = shaderHead & " qer_trans 20" & CRLF
|
|
end if
|
|
|
|
re.pattern = "lava"
|
|
if re.test(texfile.name) then
|
|
noLightmap = true
|
|
isLiquid = true
|
|
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
|
shaderHead = shaderHead & " surfaceparm lava" & CRLF
|
|
shaderHead = shaderHead & " qer_trans 20" & CRLF
|
|
diffuseExtra = " blendfunc add"
|
|
end if
|
|
|
|
re.pattern = "glass"
|
|
if re.test(texfile.name) then
|
|
noLightmap = true
|
|
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
|
diffuseExtra = " blendfunc add"
|
|
end if
|
|
|
|
re.pattern = "metal"
|
|
if re.test(texfile.name) then
|
|
bounceScale = bounceScale + 0.25
|
|
shaderHead = shaderHead & " surfaceparm metalsteps" & CRLF
|
|
end if
|
|
|
|
re.pattern = "grate"
|
|
if re.test(texfile.name) then
|
|
bounceScale = bounceScale + 0.25
|
|
shaderHead = shaderHead & " surfaceparm trans" & CRLF
|
|
diffuseExtra = " blendfunc blend"
|
|
end if
|
|
|
|
re.pattern = "shiny"
|
|
if re.test(texfile.name) then
|
|
bounceScale = bounceScale + 0.25
|
|
end if
|
|
|
|
re.pattern = "dirt|terrain|old"
|
|
if re.test(texfile.name) then
|
|
bounceScale = bounceScale - 0.25
|
|
shaderHead = shaderHead & " surfaceparm dust" & CRLF
|
|
end if
|
|
|
|
shaderDiffuse = "textures/" & setfolder.name & "/" & subfold.name & "/" & texfile.name
|
|
|
|
fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_gloss.tga"
|
|
if objFSO.FileExists(fn) Then
|
|
bounceScale = bounceScale + 0.25
|
|
end if
|
|
|
|
fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga"
|
|
if objFSO.FileExists(fn) Then
|
|
shaderQUI = "textures/" & setfolder.name & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga"
|
|
else
|
|
shaderQUI = shaderDiffuse
|
|
end if
|
|
|
|
if not noLightmap then
|
|
shaderTail = " {" & CRLF & " map $lightmap" & CRLF & " rgbGen identity" & CRLF & " tcGen lightmap" & CRLF & " blendfunc filter" & CRLF & " }"
|
|
end if
|
|
|
|
if not bounceScale = 1 then
|
|
re.pattern = ","
|
|
shaderHead = shaderHead & " q3map_bounceScale " & re.Replace(bounceScale, ".") & CRLF
|
|
end if
|
|
|
|
re.Pattern = "%shader_name%"
|
|
shaderString = re.Replace(shaderTemplate, "textures/" & setfolder.name & "/" & subfold.name & "-" & filetitle(texfile.name))
|
|
|
|
re.Pattern = "%qei_name%"
|
|
shaderString = re.Replace(shaderString, shaderQUI)
|
|
|
|
re.Pattern = "%shader_head%"
|
|
shaderString = re.Replace(shaderString, shaderHead)
|
|
|
|
re.Pattern = "%diffuse_map%"
|
|
shaderString = re.Replace(shaderString, shaderDiffuse)
|
|
|
|
re.Pattern = "%diffuse_map_extra%"
|
|
shaderString = re.Replace(shaderString, diffuseExtra)
|
|
|
|
re.Pattern = "%shader_tail%"
|
|
shaderString = re.Replace(shaderString, shaderTail)
|
|
|
|
|
|
|
|
shader.write shaderString & CRLF & CRLF
|
|
end if
|
|
Next
|
|
Next
|
|
shader.Close
|
|
|
|
|
|
|