diff --git a/code/nel/tools/build_gamedata/configuration/scripts.py b/code/nel/tools/build_gamedata/configuration/scripts.py
index 774061e25..a919b89a6 100644
--- a/code/nel/tools/build_gamedata/configuration/scripts.py
+++ b/code/nel/tools/build_gamedata/configuration/scripts.py
@@ -215,6 +215,49 @@ def findFile(log, dir_where, file_name):
printLog(log, "findFile: file not dir or file?! " + filePath)
return ""
+def needUpdateDirNoSubdirLogExt(log, dir_source, ext_source, dir_dest, ext_dest):
+ latestSourceFile = 0
+ latestDestFile = 0
+ sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
+ destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
+ for file in sourceFiles:
+ fileTime = os.stat(dir_source + "/" + file).st_mtime
+ if (fileTime > latestSourceFile):
+ latestSourceFile = fileTime
+ for file in destFiles:
+ fileTime = os.stat(dir_dest + "/" + file).st_mtime
+ if (fileTime > latestDestFile):
+ latestDestFile = fileTime
+ if latestSourceFile > latestDestFile or len(sourceFiles) > len(destFiles):
+ printLog(log, "UPDATE; Source: " + str(latestSourceFile) + ", " + str(len(sourceFiles)) + " files; Dest: " + str(latestDestFile) + ", " + str(len(destFiles)) + " files")
+ return 1
+ else:
+ printLog(log, "SKIP *")
+ return 0
+
+def needUpdateDirNoSubdirLogExtMultidir(log, all_dir_base, all_dir_source, dir_source, ext_source, dir_dest, ext_dest):
+ latestSourceFile = 0
+ latestDestFile = 0
+ sourceFilesAll = [ ]
+ for dir in all_dir_source:
+ sourceFilesAll += findFilesNoSubdir(log, all_dir_base + "/" + dir, ext_source)
+ sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
+ destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
+ for file in sourceFiles:
+ fileTime = os.stat(dir_source + "/" + file).st_mtime
+ if (fileTime > latestSourceFile):
+ latestSourceFile = fileTime
+ for file in destFiles:
+ fileTime = os.stat(dir_dest + "/" + file).st_mtime
+ if (fileTime > latestDestFile):
+ latestDestFile = fileTime
+ if latestSourceFile > latestDestFile or len(sourceFilesAll) > len(destFiles):
+ printLog(log, "UPDATE; Source: " + str(latestSourceFile) + ", " + str(len(sourceFilesAll)) + " files; Dest: " + str(latestDestFile) + ", " + str(len(destFiles)) + " files")
+ return 1
+ else:
+ printLog(log, "SKIP *")
+ return 0
+
def findTool(log, dirs_where, file_name, suffix):
try:
for dir in dirs_where:
diff --git a/code/nel/tools/build_gamedata/configuration/tools.py b/code/nel/tools/build_gamedata/configuration/tools.py
index 8a1cd388f..ed3e2fbb8 100644
--- a/code/nel/tools/build_gamedata/configuration/tools.py
+++ b/code/nel/tools/build_gamedata/configuration/tools.py
@@ -84,3 +84,4 @@ LandExportTool = "land_export"
PrimExportTool = "prim_export"
IgElevationTool = "ig_elevation"
IgAddTool = "ig_add"
+BuildClodBankTool = "build_clod_bank"
diff --git a/code/nel/tools/build_gamedata/processes/anim/1_export.py b/code/nel/tools/build_gamedata/processes/anim/1_export.py
index fe6770ced..5ab68c730 100644
--- a/code/nel/tools/build_gamedata/processes/anim/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/anim/1_export.py
@@ -49,12 +49,39 @@ printLog(log, "")
# For each anim directory
printLog(log, ">>> Export anim 3dsmax <<<")
-printLog(log, "********************************")
-printLog(log, "******** TODO ********")
-printLog(log, "********************************")
mkPath(log, ExportBuildDirectory + "/" + AnimExportDirectory)
for dir in AnimSourceDirectories:
mkPath(log, DatabaseDirectory + "/" + dir)
+ if (needUpdateDirNoSubdirLogExtMultidir(log, DatabaseDirectory, AnimSourceDirectories, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + AnimExportDirectory, ".anim")):
+ scriptSrc = "maxscript/anim_export.ms"
+ scriptDst = MaxUserDirectory + "/scripts/anim_export.ms"
+ logFile = ScriptDirectory + "/processes/anim/log.log"
+ outDirAnim = ExportBuildDirectory + "/" + AnimExportDirectory
+ animSourceDir = DatabaseDirectory + "/" + dir
+ tagList = findFiles(log, outDirAnim, "", ".anim")
+ tagLen = len(tagList)
+ if os.path.isfile(scriptDst):
+ os.remove(scriptDst)
+ tagDiff = 1
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("anim_source_directory", animSourceDir)
+ newline = newline.replace("output_directory", outDirAnim)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+ while tagDiff > 0:
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "anim_export.ms", "-q", "-mi", "-vn" ])
+ tagList = findFiles(log, outDirAnim, "", ".anim")
+ newTagLen = len(tagList)
+ tagDiff = newTagLen - tagLen
+ tagLen = newTagLen
+ printLog(log, "Exported " + str(tagDiff) + " .anim files!")
+ os.remove(scriptDst)
+
printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/anim/2_build.py b/code/nel/tools/build_gamedata/processes/anim/2_build.py
index 3cd6ead71..8b6a902bd 100644
--- a/code/nel/tools/build_gamedata/processes/anim/2_build.py
+++ b/code/nel/tools/build_gamedata/processes/anim/2_build.py
@@ -56,7 +56,12 @@ else:
mkPath(log, srcDir)
destDir = ExportBuildDirectory + "/" + AnimBuildDirectory
mkPath(log, destDir)
- subprocess.call([ AnimBuilder, srcDir, destDir, ScriptDirectory + "/configuration/zone_lighter_properties.cfg" ])
+ if DoOptimizeAnimations:
+ printLog(log, ">>> Optimizing animations <<<")
+ subprocess.call([ AnimBuilder, srcDir, destDir, ActiveProjectDirectory + "/anim_builder.cfg" ])
+ else:
+ printLog(log, ">>> Not optimizing animations <<<")
+ copyFilesNoTreeIfNeeded(log, srcDir, destDir)
printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/anim/todo_export_maxscript b/code/nel/tools/build_gamedata/processes/anim/todo_export_maxscript
deleted file mode 100644
index e69de29bb..000000000
diff --git a/code/nel/tools/build_gamedata/processes/clodbank/0_setup.py b/code/nel/tools/build_gamedata/processes/clodbank/0_setup.py
new file mode 100644
index 000000000..e28f629d9
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/clodbank/0_setup.py
@@ -0,0 +1,85 @@
+#!/usr/bin/python
+#
+# \file 0_setup.py
+# \brief Setup clodbank
+# \date 2009-03-10 14:56GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Setup clodbank
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Setup clodbank")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+# Setup source directories
+printLog(log, ">>> Setup source directories <<<")
+for dir in ClodSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+
+# Setup export directories
+printLog(log, ">>> Setup export directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + ClodTagExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ClodExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + SkelExportDirectory)
+
+# Setup build directories
+printLog(log, ">>> Setup build directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + ClodBankBuildDirectory)
+mkPath(log, ExportBuildDirectory + "/" + AnimBuildDirectory)
+
+# Setup client directories
+printLog(log, ">>> Setup client directories <<<")
+mkPath(log, ClientDataDirectory + "/" + ShapeClientDirectory)
+
+# Setup configuration files
+printLog(log, ">>> Setup configuration files <<<")
+mkPath(log, ActiveProjectDirectory + "/generated")
+cfgOut = open(ActiveProjectDirectory + "/generated/clod_paths.cfg", "w")
+cfgOut.write("\n")
+cfgOut.write("// The search pathes, look in the current process\n")
+cfgOut.write("search_pathes = \n")
+cfgOut.write("{\n")
+cfgOut.write("\t\"" + ExportBuildDirectory + "/" + ClodExportDirectory + "\", \n")
+cfgOut.write("\t\"" + ExportBuildDirectory + "/" + SkelExportDirectory + "\", \n")
+cfgOut.write("\t\"" + ExportBuildDirectory + "/" + AnimBuildDirectory + "\", \n")
+cfgOut.write("};\n")
+cfgOut.write("\n")
+cfgOut.close()
+
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/clodbank/1_export.py b/code/nel/tools/build_gamedata/processes/clodbank/1_export.py
new file mode 100644
index 000000000..d4da536fb
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/clodbank/1_export.py
@@ -0,0 +1,93 @@
+#!/usr/bin/python
+#
+# \file 1_export.py
+# \brief Export clodbank
+# \date 2009-03-10 13:13GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Export clodbank
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Export clodbank")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+# Find tools
+Max = findMax(log, MaxDirectory, MaxExecutable)
+printLog(log, "")
+
+# For each clodbank directory
+printLog(log, ">>> Export clodbank 3dsmax <<<")
+mkPath(log, ExportBuildDirectory + "/" + ClodExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ClodTagExportDirectory)
+for dir in ClodSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+ if (needUpdateDirNoSubdirLogExtMultidir(log, DatabaseDirectory, ClodSourceDirectories, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + ClodTagExportDirectory, ".tag")):
+ scriptSrc = "maxscript/clod_export.ms"
+ scriptDst = MaxUserDirectory + "/scripts/clod_export.ms"
+ logFile = ScriptDirectory + "/processes/clodbank/log.log"
+ outDirClod = ExportBuildDirectory + "/" + ClodExportDirectory
+ outDirTag = ExportBuildDirectory + "/" + ClodTagExportDirectory
+ maxSourceDir = DatabaseDirectory + "/" + dir
+ tagList = findFiles(log, outDirTag, "", ".tag")
+ tagLen = len(tagList)
+ if os.path.isfile(scriptDst):
+ os.remove(scriptDst)
+ tagDiff = 1
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("shape_source_directory", maxSourceDir)
+ newline = newline.replace("output_directory_clod", outDirClod)
+ newline = newline.replace("output_directory_tag", outDirTag)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+ while tagDiff > 0:
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "clod_export.ms", "-q", "-mi", "-vn" ])
+ tagList = findFiles(log, outDirTag, "", ".tag")
+ newTagLen = len(tagList)
+ tagDiff = newTagLen - tagLen
+ tagLen = newTagLen
+ printLog(log, "Exported " + str(tagDiff) + " .max files!")
+ os.remove(scriptDst)
+
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/clodbank/2_build.py b/code/nel/tools/build_gamedata/processes/clodbank/2_build.py
new file mode 100644
index 000000000..8155c0e00
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/clodbank/2_build.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+#
+# \file 2_build.py
+# \brief Build clodbank
+# \date 2009-03-10 13:13GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Build clodbank
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Build clodbank")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+# Find tools
+BuildClodBank = findTool(log, ToolDirectories, BuildClodBankTool, ToolSuffix)
+printLog(log, "")
+
+# Build clodbank
+printLog(log, ">>> Build clodbank <<<")
+if BuildClodBank == "":
+ toolLogFail(log, BuildClodBankTool, ToolSuffix)
+else:
+ srcDir = ExportBuildDirectory + "/" + ClodExportDirectory
+ mkPath(log, srcDir)
+ destDir = ExportBuildDirectory + "/" + ClodBankBuildDirectory
+ mkPath(log, destDir)
+ mkPath(log, ActiveProjectDirectory + "/generated")
+ destFile = destDir + "/" + ClodBankFileName
+ configFile = DatabaseDirectory + "/" + ClodConfigFile
+ subprocess.call([ BuildClodBank, ActiveProjectDirectory + "/generated/clod_paths.cfg", configFile, destFile ])
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/clodbank/3_install.py b/code/nel/tools/build_gamedata/processes/clodbank/3_install.py
new file mode 100644
index 000000000..6879f3da8
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/clodbank/3_install.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+#
+# \file 3_install.py
+# \brief Install clodbank
+# \date 2009-03-10 13:13GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Install clodbank
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Install clodbank")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+printLog(log, ">>> Install clodbank <<<")
+srcDir = ExportBuildDirectory + "/" + ClodBankBuildDirectory
+mkPath(log, srcDir)
+destDir = ClientDataDirectory + "/" + ShapeClientDirectory
+mkPath(log, destDir)
+copyFilesNoTreeIfNeeded(log, srcDir, destDir)
+
+printLog(log, "")
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms b/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms
index 49326a260..17c7aeb9c 100644
--- a/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms
+++ b/code/nel/tools/build_gamedata/processes/clodbank/maxscript/clod_export.ms
@@ -132,7 +132,7 @@ fn goClodExport =
(
-- Open the max project
nlerror ("Scanning file "+files[i]+" ...")
- if loadMaxFile files[i] quiet:true == true then
+ if (loadMaxFile files[i] quiet:true) == true then
(
-- Unhide category
unhidecategory()
diff --git a/code/nel/tools/build_gamedata/processes/font/0_setup.py b/code/nel/tools/build_gamedata/processes/font/0_setup.py
index bf61fce0e..3eb5a97fd 100644
--- a/code/nel/tools/build_gamedata/processes/font/0_setup.py
+++ b/code/nel/tools/build_gamedata/processes/font/0_setup.py
@@ -50,6 +50,7 @@ for dir in FontSourceDirectories:
# Setup export directories
printLog(log, ">>> Setup export directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + FontExportDirectory)
# Setup build directories
printLog(log, ">>> Setup build directories <<<")
diff --git a/code/nel/tools/build_gamedata/processes/font/1_export.py b/code/nel/tools/build_gamedata/processes/font/1_export.py
index 54292bec5..34089b83d 100644
--- a/code/nel/tools/build_gamedata/processes/font/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/font/1_export.py
@@ -43,6 +43,17 @@ printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
+printLog(log, ">>> Export font <<<")
+fontExportDir = ExportBuildDirectory + "/" + FontExportDirectory
+mkPath(log, fontExportDir)
+for dir in FontSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+ copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".ttf")
+ copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".afm")
+ copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".pfb")
+ copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".pfm")
+
+
printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/font/3_install.py b/code/nel/tools/build_gamedata/processes/font/3_install.py
index 55da60bed..4415c1195 100644
--- a/code/nel/tools/build_gamedata/processes/font/3_install.py
+++ b/code/nel/tools/build_gamedata/processes/font/3_install.py
@@ -45,14 +45,14 @@ printLog(log, "")
clientPath = ClientDataDirectory + "/" + FontClientDirectory
mkPath(log, clientPath)
+fontExportDir = ExportBuildDirectory + "/" + FontExportDirectory
+mkPath(log, fontExportDir)
printLog(log, ">>> Install font <<<")
-for dir in FontSourceDirectories:
- mkPath(log, DatabaseDirectory + "/" + dir)
- copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, clientPath, ".ttf")
- copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, clientPath, ".afm")
- copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, clientPath, ".pfb")
- copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, clientPath, ".pfm")
+copyFilesExtNoTreeIfNeeded(log, fontExportDir, clientPath, ".ttf")
+copyFilesExtNoTreeIfNeeded(log, fontExportDir, clientPath, ".afm")
+copyFilesExtNoTreeIfNeeded(log, fontExportDir, clientPath, ".pfb")
+copyFilesExtNoTreeIfNeeded(log, fontExportDir, clientPath, ".pfm")
printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/ig/1_export.py b/code/nel/tools/build_gamedata/processes/ig/1_export.py
index 8921b2d1a..c8eb2d363 100644
--- a/code/nel/tools/build_gamedata/processes/ig/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/ig/1_export.py
@@ -46,38 +46,39 @@ printLog(log, "")
Max = "" #find later
-def igExport(sourceDir, targetDir):
+def igExport(all_source_base, all_source_dir, sourceDir, targetDir):
scriptSrc = "maxscript/ig_export.ms"
scriptDst = MaxUserDirectory + "/scripts/ig_export.ms"
logFile = ScriptDirectory + "/processes/ig/log.log"
outDirTag = ExportBuildDirectory + "/" + IgStaticTagExportDirectory
outDirIg = ExportBuildDirectory + "/" + targetDir
igSourceDir = DatabaseDirectory + "/" + sourceDir
- tagList = findFiles(log, outDirTag, "", ".tag")
- tagLen = len(tagList)
- if os.path.isfile(scriptDst):
- os.remove(scriptDst)
- tagDiff = 1
- sSrc = open(scriptSrc, "r")
- sDst = open(scriptDst, "w")
- for line in sSrc:
- newline = line.replace("output_logfile", logFile)
- newline = newline.replace("ig_source_directory", igSourceDir)
- newline = newline.replace("output_directory_tag", outDirTag)
- newline = newline.replace("output_directory_ig", outDirIg)
- sDst.write(newline)
- sSrc.close()
- sDst.close()
- while tagDiff > 0:
- printLog(log, "MAXSCRIPT " + scriptDst)
- subprocess.call([ Max, "-U", "MAXScript", "ig_export.ms", "-q", "-mi", "-vn" ])
+ if (needUpdateDirNoSubdirLogExtMultidir(log, all_source_base, all_source_dir, igSourceDir, ".max", outDirTag, ".max.tag")):
tagList = findFiles(log, outDirTag, "", ".tag")
- newTagLen = len(tagList)
- tagDiff = newTagLen - tagLen
- tagLen = newTagLen
- printLog(log, "Exported " + str(tagDiff) + " .max files!")
- os.remove(scriptDst)
- return
+ tagLen = len(tagList)
+ if os.path.isfile(scriptDst):
+ os.remove(scriptDst)
+ tagDiff = 1
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("ig_source_directory", igSourceDir)
+ newline = newline.replace("output_directory_tag", outDirTag)
+ newline = newline.replace("output_directory_ig", outDirIg)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+ while tagDiff > 0:
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "ig_export.ms", "-q", "-mi", "-vn" ])
+ tagList = findFiles(log, outDirTag, "", ".tag")
+ newTagLen = len(tagList)
+ tagDiff = newTagLen - tagLen
+ tagLen = newTagLen
+ printLog(log, "Exported " + str(tagDiff) + " .max files!")
+ os.remove(scriptDst)
+ return
if MaxAvailable:
@@ -93,14 +94,14 @@ if MaxAvailable:
mkPath(log, ExportBuildDirectory + "/" + IgStaticLandExportDirectory)
for dir in IgLandSourceDirectories:
mkPath(log, DatabaseDirectory + "/" + dir)
- igExport(dir, IgStaticLandExportDirectory)
+ igExport(DatabaseDirectory, IgLandSourceDirectories, dir, IgStaticLandExportDirectory)
# Export ig other 3dsmax
printLog(log, ">>> Export ig other 3dsmax <<<")
mkPath(log, ExportBuildDirectory + "/" + IgStaticOtherExportDirectory)
for dir in IgOtherSourceDirectories:
mkPath(log, DatabaseDirectory + "/" + dir)
- igExport(dir, IgStaticOtherExportDirectory)
+ igExport(DatabaseDirectory, IgOtherSourceDirectories, dir, IgStaticOtherExportDirectory)
printLog(log, "")
diff --git a/code/nel/tools/build_gamedata/processes/ig_light/2_build.py b/code/nel/tools/build_gamedata/processes/ig_light/2_build.py
index 90b962012..c8f8a05d3 100644
--- a/code/nel/tools/build_gamedata/processes/ig_light/2_build.py
+++ b/code/nel/tools/build_gamedata/processes/ig_light/2_build.py
@@ -56,7 +56,7 @@ else:
mkPath(log, srcDir)
destDir = ExportBuildDirectory + "/" + IgOtherLightedBuildDirectory
mkPath(log, destDir)
- subprocess.call([ IgLighter, srcDir, destDir, ActiveProjectDirectory + "/generated/zone_lighter.cfg" ])
+ subprocess.call([ IgLighter, srcDir, destDir, ActiveProjectDirectory + "/generated/properties.cfg" ])
printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/ligo/1_export.py b/code/nel/tools/build_gamedata/processes/ligo/1_export.py
index 4ae323c43..ea111fa2a 100644
--- a/code/nel/tools/build_gamedata/processes/ligo/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/ligo/1_export.py
@@ -62,40 +62,40 @@ if LigoExportLand == "" or LigoExportOnePass == 1:
mkPath(log, DatabaseDirectory + "/" + LigoDatabaseCmbExportDirectory)
mkPath(log, DatabaseDirectory + "/" + ZoneSourceDirectory)
mkPath(log, ExportBuildDirectory + "/" + LigoTagExportDirectory)
- printLog(log, "WRITE " + ligoIniPath)
- ligoIni = open(ligoIniPath, "w")
- ligoIni.write("[LigoConfig]\n")
- ligoIni.write("LigoPath=" + DatabaseDirectory + "/" + LigoMaxSourceDirectory + "/\n")
- ligoIni.write("LigoExportPath=" + DatabaseDirectory + "/" + LigoDatabaseExportDirectory + "/\n")
- ligoIni.write("LigoOldZonePath=" + DatabaseDirectory + "/" + ZoneSourceDirectory + "/\n")
- ligoIni.close()
-
- outDirTag = ExportBuildDirectory + "/" + LigoTagExportDirectory
- logFile = ScriptDirectory + "/processes/ligo/log.log"
- smallBank = ExportBuildDirectory + "/" + SmallbankExportDirectory + "/" + BankTileBankName + ".smallbank"
-
- scriptSrc = "maxscript/nel_ligo_export.ms"
- scriptDst = MaxUserDirectory + "/scripts/nel_ligo_export.ms"
-
- if os.path.isfile(scriptDst):
+ if (needUpdateDirNoSubdirLogExt(log, DatabaseDirectory + "/" + LigoMaxSourceDirectory, ".max", ExportBuildDirectory + "/" + LigoTagExportDirectory, ".max.tag")):
+ printLog(log, "WRITE " + ligoIniPath)
+ ligoIni = open(ligoIniPath, "w")
+ ligoIni.write("[LigoConfig]\n")
+ ligoIni.write("LigoPath=" + DatabaseDirectory + "/" + LigoMaxSourceDirectory + "/\n")
+ ligoIni.write("LigoExportPath=" + DatabaseDirectory + "/" + LigoDatabaseExportDirectory + "/\n")
+ ligoIni.write("LigoOldZonePath=" + DatabaseDirectory + "/" + ZoneSourceDirectory + "/\n")
+ ligoIni.close()
+
+ outDirTag = ExportBuildDirectory + "/" + LigoTagExportDirectory
+ logFile = ScriptDirectory + "/processes/ligo/log.log"
+ smallBank = ExportBuildDirectory + "/" + SmallbankExportDirectory + "/" + BankTileBankName + ".smallbank"
+
+ scriptSrc = "maxscript/nel_ligo_export.ms"
+ scriptDst = MaxUserDirectory + "/scripts/nel_ligo_export.ms"
+
+ if os.path.isfile(scriptDst):
+ os.remove(scriptDst)
+
+ printLog(log, "WRITE " + scriptDst)
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("output_directory_tag", outDirTag)
+ newline = newline.replace("bankFilename", smallBank)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "nel_ligo_export.ms", "-q", "-mi", "-vn" ])
+
os.remove(scriptDst)
-
- printLog(log, "WRITE " + scriptDst)
- sSrc = open(scriptSrc, "r")
- sDst = open(scriptDst, "w")
- for line in sSrc:
- newline = line.replace("output_logfile", logFile)
- newline = newline.replace("output_directory_tag", outDirTag)
- newline = newline.replace("bankFilename", smallBank)
- sDst.write(newline)
- sSrc.close()
- sDst.close()
-
- printLog(log, "MAXSCRIPT " + scriptDst)
- subprocess.call([ Max, "-U", "MAXScript", "nel_ligo_export.ms", "-q", "-mi", "-vn" ])
-
- os.remove(scriptDst)
-
printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/pacs_prim/0_setup.py b/code/nel/tools/build_gamedata/processes/pacs_prim/0_setup.py
new file mode 100644
index 000000000..db68c6484
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/pacs_prim/0_setup.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+#
+# \file 0_setup.py
+# \brief setup pacs_prim
+# \date 2010-08-31 16:50GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Setup pacs_prim
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Setup pacs_prim")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+# Setup source directories
+printLog(log, ">>> Setup source directories <<<")
+for dir in PacsPrimSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+
+# Setup export directories
+printLog(log, ">>> Setup export directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + PacsPrimExportDirectory)
+
+# Setup build directories
+printLog(log, ">>> Setup build directories <<<")
+
+# Setup client directories
+printLog(log, ">>> Setup client directories <<<")
+mkPath(log, ClientDataDirectory + "/" + PacsPrimClientDirectory)
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/pacs_prim/1_export.py b/code/nel/tools/build_gamedata/processes/pacs_prim/1_export.py
new file mode 100644
index 000000000..819f6700d
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/pacs_prim/1_export.py
@@ -0,0 +1,104 @@
+#!/usr/bin/python
+#
+# \file 1_export.py
+# \brief Export pacs_prim
+# \date 2010-08-31 16:50GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Export pacs_prim
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Export pacs_prim")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+# Find tools
+Max = findMax(log, MaxDirectory, MaxExecutable)
+printLog(log, "")
+
+# For each pacs_prim directory
+printLog(log, ">>> Export pacs_prim 3dsmax <<<")
+mkPath(log, ExportBuildDirectory + "/" + PacsPrimExportDirectory)
+for dir in PacsPrimSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+ if (needUpdateDirNoSubdirLogExtMultidir(log, DatabaseDirectory, PacsPrimSourceDirectories, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + PacsPrimExportDirectory, ".pacs_prim")):
+ scriptSrc = "maxscript/pacs_prim_export.ms"
+ scriptDst = MaxUserDirectory + "/scripts/pacs_prim_export.ms"
+ logFile = ScriptDirectory + "/processes/pacs_prim/log.log"
+ outDirPacsPrim = ExportBuildDirectory + "/" + PacsPrimExportDirectory
+ pacs_primSourceDir = DatabaseDirectory + "/" + dir
+ tagList = findFiles(log, outDirPacsPrim, "", ".pacs_prim")
+ tagLen = len(tagList)
+ if os.path.isfile(scriptDst):
+ os.remove(scriptDst)
+ tagDiff = 1
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("pacs_prim_source_directory", pacs_primSourceDir)
+ newline = newline.replace("output_directory", outDirPacsPrim)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+ while tagDiff > 0:
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "pacs_prim_export.ms", "-q", "-mi", "-vn" ])
+ tagList = findFiles(log, outDirPacsPrim, "", ".pacs_prim")
+ newTagLen = len(tagList)
+ tagDiff = newTagLen - tagLen
+ tagLen = newTagLen
+ printLog(log, "Exported " + str(tagDiff) + " .pacs_prim files!")
+ os.remove(scriptDst)
+
+printLog(log, ">>> List pacs_prim <<<")
+outDirPacsPrim = ExportBuildDirectory + "/" + PacsPrimExportDirectory
+mkPath(log, outDirPacsPrim)
+listPath = ExportBuildDirectory + "/" + PacsPrimExportDirectory + "/landscape_col_prim_pacs_list.txt"
+if os.path.isfile(listPath):
+ os.remove(listPath)
+if WantLandscapeColPrimPacsList:
+ exportedPacsPrims = findFiles(log, outDirPacsPrim, "", ".pacs_prim")
+ printLog(log, "WRITE " + listPath)
+ listFile = open(listPath, "w")
+ for exported in exportedPacsPrims:
+ listFile.write(exported + "\n")
+ listFile.close()
+
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/pacs_prim/2_build.py b/code/nel/tools/build_gamedata/processes/pacs_prim/2_build.py
new file mode 100644
index 000000000..84186d962
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/pacs_prim/2_build.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+#
+# \file 2_build.py
+# \brief Build pacs_prim
+# \date 2010-08-31 16:50GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Build pacs_prim
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Build pacs_prim")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/pacs_prim/3_install.py b/code/nel/tools/build_gamedata/processes/pacs_prim/3_install.py
new file mode 100644
index 000000000..abd174652
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/pacs_prim/3_install.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+#
+# \file 3_install.py
+# \brief Install pacs_prim
+# \date 2010-08-31 16:50GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Install pacs_prim
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Install pacs_prim")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+clientPath = ClientDataDirectory + "/" + PacsPrimClientDirectory
+mkPath(log, clientPath)
+
+printLog(log, ">>> Install pacs_prim <<<")
+mkPath(log, ExportBuildDirectory + "/" + PacsPrimExportDirectory)
+copyFilesExtNoSubdirIfNeeded(log, ExportBuildDirectory + "/" + PacsPrimExportDirectory, clientPath, ".pacs_prim")
+
+printLog(log, "")
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/pacs_prim/maxscript/pacs_prim_export.ms b/code/nel/tools/build_gamedata/processes/pacs_prim/maxscript/pacs_prim_export.ms
new file mode 100644
index 000000000..0c8e5b8e0
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/pacs_prim/maxscript/pacs_prim_export.ms
@@ -0,0 +1,161 @@
+
+-- Allocate 20 Me for the script
+heapSize += 15000000
+
+nlErrorFilename = "output_logfile"
+nlErrorStream = openFile nlErrorFilename mode:"a"
+if nlErrorStream == undefined then
+ nlErrorStream = createFile nlErrorFilename
+
+-- Unhide category
+fn unhidecategory =
+(
+ if (geometry.count > 0) then
+ (
+ unhide geometry[1]
+ if (geometry[1].ishidden == true) then
+ max hide object toggle
+ )
+ if (shapes.count > 0) then
+ (
+ unhide shapes[1]
+ if (shapes[1].ishidden == true) then
+ max hide shape toggle
+ )
+ if (lights.count > 0) then
+ (
+ unhide lights[1]
+ if (lights[1].ishidden == true) then
+ max hide light toggle
+ )
+ if (cameras.count > 0) then
+ (
+ unhide cameras[1]
+ if (cameras[1].ishidden == true) then
+ max hide camera toggle
+ )
+ if (helpers.count > 0) then
+ (
+ unhide helpers[1]
+ if (helpers[1].ishidden == true) then
+ max hide helper toggle
+ )
+)
+
+-- Log a message
+fn nlerror message =
+(
+ if nlErrorStream != undefined then
+ (
+ format "%\n" message to:nlErrorStream
+ flush nlErrorStream
+ )
+
+ -- To the console
+ print message
+)
+
+try
+(
+ -- Get files in the "pacs_prim_source_directory" directory
+ files = getFiles "pacs_prim_source_directory/*.max"
+ gc ()
+
+ -- Sort files
+ sort files
+ gc ()
+
+ -- No file ?
+ if files.count != 0 then
+ (
+ -- For each files
+ for i = 1 to files.count do
+ (
+ try
+ (
+ -- Output file
+ output = "output_directory/" + (getFilenameFile files[i]) + ".pacs_prim"
+
+ -- Compare file date
+ if (NeLTestFileDate output files[i]) == true then
+ (
+ -- Free memory and file handles
+ gc ()
+ heapfree
+
+ -- Reset 3dsmax
+ resetMAXFile #noprompt
+
+ -- Open the max project
+ nlerror ("Scanning file "+files[i]+" ...")
+ if (loadMaxFile files[i] quiet:true) == true then
+ (
+ -- Unhide category
+ unhidecategory()
+
+ -- Select none
+ max select none
+
+ -- Select all PACS primitives
+ for i in geometry do
+ (
+ if ((classof i) == nel_pacs_cylinder) or ((classof i) == nel_pacs_box) then
+ selectmore i
+ )
+
+ -- Array of node
+ arrayNode = selection as array
+
+ -- Something to export ?
+ if (arrayNode.count != 0) then
+ (
+ -- Export the collision
+ if (NelExportPACSPrimitives arrayNode output) == false then
+ (
+ nlerror ("ERROR exporting PACS primitives in file "+files[i])
+ )
+ else
+ (
+ nlerror ("OK PACS primitives in file "+files[i])
+ )
+ )
+ else
+ (
+ nlerror ("WARNING no PACS primitives in file "+files[i])
+ )
+ )
+ else
+ (
+ -- Error
+ nlerror ("ERROR exporting collision: can't open the file "+files[i])
+ )
+ )
+ else
+ (
+ nlerror ("SKIPPED "+files[i])
+ )
+ )
+ catch
+ (
+ -- Error
+ nlerror ("ERROR error exporting collision in files " + files[i])
+ )
+ )
+ )
+ else
+ (
+ nlerror ("WARNING no collision file in folder pacs_prim_source_directory")
+ )
+)
+catch
+(
+ -- Error
+ nlerror ("ERROR fatal error exporting collision in folder pacs_prim_source_directory")
+)
+
+-- Bye
+
+resetMAXFile #noprompt
+quitMAX #noPrompt
+quitMAX () #noPrompt
+
diff --git a/code/nel/tools/build_gamedata/processes/properties/0_setup.py b/code/nel/tools/build_gamedata/processes/properties/0_setup.py
new file mode 100644
index 000000000..64fb5b198
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/properties/0_setup.py
@@ -0,0 +1,125 @@
+#!/usr/bin/python
+#
+# \file 0_setup.py
+# \brief setup properties
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Setup properties
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Setup properties")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+
+
+mkPath(log, ActiveProjectDirectory + "/generated")
+zlp = open(ActiveProjectDirectory + "/generated/properties.cfg", "w")
+ps = open(ActiveProjectDirectory + "/properties_base.cfg", "r")
+for line in ps:
+ try:
+ SmallbankExportDirectory
+ except NameError:
+ SmallbankExportDirectory = "_invalid"
+ try:
+ FarbankBuildDirectory
+ except NameError:
+ FarbankBuildDirectory = "_invalid"
+ try:
+ EcosystemName
+ except NameError:
+ EcosystemName = "_invalid"
+ try:
+ EcosystemPath
+ except NameError:
+ EcosystemPath = "_invalid"
+ try:
+ ContinentName
+ except NameError:
+ ContinentName = "_invalid"
+ try:
+ ContinentPath
+ except NameError:
+ ContinentPath = "_invalid"
+ try:
+ BankTileBankName
+ except NameError:
+ BankTileBankName = "_invalid"
+ try:
+ IgLandBuildDirectory
+ except NameError:
+ IgLandBuildDirectory = "_invalid"
+ try:
+ IgOtherBuildDirectory
+ except NameError:
+ IgOtherBuildDirectory = "_invalid"
+ try:
+ RbankOutputBuildDirectory
+ except NameError:
+ RbankOutputBuildDirectory = "_invalid"
+ try:
+ RbankRbankName
+ except NameError:
+ RbankRbankName = "_invalid"
+ newline = line.replace("%ExportBuildDirectory%", ExportBuildDirectory)
+ newline = newline.replace("%SmallbankExportDirectory%", SmallbankExportDirectory)
+ newline = newline.replace("%FarbankBuildDirectory%", FarbankBuildDirectory)
+ newline = newline.replace("%EcosystemName%", EcosystemName)
+ newline = newline.replace("%EcosystemPath%", EcosystemPath)
+ newline = newline.replace("%ContinentName%", ContinentName)
+ newline = newline.replace("%ContinentPath%", ContinentPath)
+ newline = newline.replace("%CommonName%", CommonName)
+ newline = newline.replace("%CommonPath%", CommonPath)
+ newline = newline.replace("%BankTileBankName%", BankTileBankName)
+ newline = newline.replace("%IgLandBuildDirectory%", IgLandBuildDirectory)
+ newline = newline.replace("%IgOtherBuildDirectory%", IgOtherBuildDirectory)
+ newline = newline.replace("%RbankOutputBuildDirectory%", RbankOutputBuildDirectory)
+ newline = newline.replace("%RbankRbankName%", RbankRbankName)
+ newline = newline.replace("%BuildQuality%", str(BuildQuality))
+ zlp.write(newline)
+ps.close()
+if (BuildQuality == 1):
+ ps = open(ActiveProjectDirectory + "/properties_final.cfg", "r")
+else:
+ ps = open(ActiveProjectDirectory + "/properties_draft.cfg", "r")
+for line in ps:
+ zlp.write(line)
+zlp.close()
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/properties/1_export.py b/code/nel/tools/build_gamedata/processes/properties/1_export.py
new file mode 100644
index 000000000..f494d646e
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/properties/1_export.py
@@ -0,0 +1,44 @@
+#!/usr/bin/python
+#
+# \file 1_export.py
+# \brief Export properties
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Export properties
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/properties/2_build.py b/code/nel/tools/build_gamedata/processes/properties/2_build.py
new file mode 100644
index 000000000..d2d245947
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/properties/2_build.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+#
+# \file 2_build.py
+# \brief Build properties
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Build properties
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/properties/3_install.py b/code/nel/tools/build_gamedata/processes/properties/3_install.py
new file mode 100644
index 000000000..68daf1f4a
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/properties/3_install.py
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+#
+# \file 3_install.py
+# \brief Install properties
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Install properties
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/ps/0_setup.py b/code/nel/tools/build_gamedata/processes/ps/0_setup.py
new file mode 100644
index 000000000..54c1ee692
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/ps/0_setup.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+#
+# \file 0_setup.py
+# \brief setup ps
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Setup ps
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Setup ps")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+# Setup source directories
+printLog(log, ">>> Setup source directories <<<")
+for dir in PsSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+
+# Setup export directories
+printLog(log, ">>> Setup export directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + PsExportDirectory)
+
+# Setup build directories
+printLog(log, ">>> Setup build directories <<<")
+
+# Setup client directories
+printLog(log, ">>> Setup client directories <<<")
+mkPath(log, ClientDataDirectory + "/" + PsClientDirectory)
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/ps/1_export.py b/code/nel/tools/build_gamedata/processes/ps/1_export.py
new file mode 100644
index 000000000..ea5ed019c
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/ps/1_export.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python
+#
+# \file 1_export.py
+# \brief Export ps
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Export ps
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Export ps")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+# For each ps directory
+printLog(log, ">>> Export ps 3dsmax <<<")
+mkPath(log, ExportBuildDirectory + "/" + PsExportDirectory)
+for dir in PsSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+ copyFilesExtNoSubdirIfNeeded(log, DatabaseDirectory + "/" + dir, ExportBuildDirectory + "/" + PsExportDirectory, ".ps")
+ copyFilesExtNoSubdirIfNeeded(log, DatabaseDirectory + "/" + dir, ExportBuildDirectory + "/" + PsExportDirectory, ".shape")
+ copyFilesExtNoSubdirIfNeeded(log, DatabaseDirectory + "/" + dir, ExportBuildDirectory + "/" + PsExportDirectory, ".primitive")
+
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/ps/2_build.py b/code/nel/tools/build_gamedata/processes/ps/2_build.py
new file mode 100644
index 000000000..b75c4e145
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/ps/2_build.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+#
+# \file 2_build.py
+# \brief Build ps
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Build ps
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Build ps")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/ps/3_install.py b/code/nel/tools/build_gamedata/processes/ps/3_install.py
new file mode 100644
index 000000000..67671d031
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/ps/3_install.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+#
+# \file 3_install.py
+# \brief Install ps
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Install ps
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+import time, sys, os, shutil, subprocess, distutils.dir_util
+sys.path.append("../../configuration")
+
+if os.path.isfile("log.log"):
+ os.remove("log.log")
+log = open("log.log", "w")
+from scripts import *
+from buildsite import *
+from process import *
+from tools import *
+from directories import *
+
+printLog(log, "")
+printLog(log, "-------")
+printLog(log, "--- Install ps")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+printLog(log, ">>> Install ps <<<")
+srcDir = ExportBuildDirectory + "/" + PsExportDirectory
+mkPath(log, srcDir)
+destDir = ClientDataDirectory + "/" + PsClientDirectory
+mkPath(log, destDir)
+copyFilesNoTreeIfNeeded(log, srcDir, destDir)
+
+printLog(log, "")
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/shape/0_setup.py b/code/nel/tools/build_gamedata/processes/shape/0_setup.py
index 214067583..5183c38de 100644
--- a/code/nel/tools/build_gamedata/processes/shape/0_setup.py
+++ b/code/nel/tools/build_gamedata/processes/shape/0_setup.py
@@ -53,13 +53,16 @@ for dir in MapSourceDirectories:
# Setup export directories
printLog(log, ">>> Setup export directories <<<")
mkPath(log, ExportBuildDirectory + "/" + ShapeTagExportDirectory)
-mkPath(log, ExportBuildDirectory + "/" + ShapeExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeNotOptimizedExportDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshExportDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeAnimExportDirectory)
+if ClodConfigFile != "":
+ mkPath(log, ExportBuildDirectory + "/" + ClodExportDirectory)
# Setup build directories
printLog(log, ">>> Setup build directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory)
diff --git a/code/nel/tools/build_gamedata/processes/shape/1_export.py b/code/nel/tools/build_gamedata/processes/shape/1_export.py
index 9ee7a3099..be3fb93e7 100644
--- a/code/nel/tools/build_gamedata/processes/shape/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/shape/1_export.py
@@ -27,6 +27,8 @@
import time, sys, os, shutil, subprocess, distutils.dir_util
sys.path.append("../../configuration")
+if os.path.isfile("log.log"):
+ os.remove("log.log")
if os.path.isfile("temp_log.log"):
os.remove("temp_log.log")
log = open("temp_log.log", "w")
@@ -70,7 +72,7 @@ if MaxAvailable:
logFile = ScriptDirectory + "/processes/shape/log.log"
outDirTag = ExportBuildDirectory + "/" + ShapeTagExportDirectory
mkPath(log, outDirTag)
- outDirWithoutCoarse = ExportBuildDirectory + "/" + ShapeExportDirectory
+ outDirWithoutCoarse = ExportBuildDirectory + "/" + ShapeNotOptimizedExportDirectory
mkPath(log, outDirWithoutCoarse)
outDirWithCoarse = ExportBuildDirectory + "/" + ShapeWithCoarseMeshExportDirectory
mkPath(log, outDirWithCoarse)
@@ -137,10 +139,11 @@ if MaxAvailable:
printLog(log, "SKIP " + maxFilePath)
# Export clod 3dsmax
- printLog(log, ">>> Export character lod shape files (.clod) from Max <<<")
- printLog(log, "********************************")
- printLog(log, "******** TODO ********")
- printLog(log, "********************************")
+ # this is historical garbage, just use the clodbank process.. :-)
+ #printLog(log, ">>> Export character lod shape files (.clod) from Max <<<")
+ #printLog(log, "********************************")
+ #printLog(log, "******** TODO ********")
+ #printLog(log, "********************************")
# cat ../clodbank/maxscript/clod_export.ms
#| sed -e "s&shape_source_directory&$database_directory/$i&g"
diff --git a/code/nel/tools/build_gamedata/processes/shape/2_build.py b/code/nel/tools/build_gamedata/processes/shape/2_build.py
index ae2f026bb..60873e12a 100644
--- a/code/nel/tools/build_gamedata/processes/shape/2_build.py
+++ b/code/nel/tools/build_gamedata/processes/shape/2_build.py
@@ -57,21 +57,28 @@ if DoBuildShadowSkin:
printLog(log, "******** TODO ********")
printLog(log, "********************************")
+mkPath(log, ExportBuildDirectory + "/" + ShapeNotOptimizedExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory)
if ClodConfigFile != "":
- printLog(log, ">>> BuildClodtex <<<")
- printLog(log, "********************************")
- printLog(log, "******** TODO ********")
- printLog(log, "********************************")
+ mkPath(log, ExportBuildDirectory + "/" + ClodExportDirectory)
+ printLog(log, ">>> Build CLodTex <<<")
+ subprocess.call([ BuildClodtex, "-d", DatabaseDirectory + "/" + ClodConfigFile, ExportBuildDirectory + "/" + ClodExportDirectory, ExportBuildDirectory + "/" + ShapeNotOptimizedExportDirectory, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory ])
+else:
+ printLog(log, ">>> Copy Shape <<<")
+ copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeNotOptimizedExportDirectory, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory, ".shape")
+# copy lightmap_not_optimized to lightmap
printLog(log, ">>> Optimize lightmaps <<<")
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeTagExportDirectory)
-mkPath(log, ExportBuildDirectory + "/" + ShapeExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory)
removeFilesRecursive(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
copyFiles(log, ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
-subprocess.call([ LightmapOptimizer, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory, ExportBuildDirectory + "/" + ShapeExportDirectory, ExportBuildDirectory + "/" + ShapeTagExportDirectory, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt" ])
+# Optimize lightmaps if any. Additionnaly, output a file indicating which lightmaps are 8 bits
+subprocess.call([ LightmapOptimizer, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory, ExportBuildDirectory + "/" + ShapeTagExportDirectory, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt" ])
+# Convert lightmap in 16 bits mode if they are not 8 bits lightmap
printLog(log, ">>> Convert lightmaps in 16 or 8 bits <<<")
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory)
@@ -91,6 +98,7 @@ for lightMapTga in lightMapTgas:
else:
subprocess.call([ TgaToDds, srcTga, "-o", dstTga, "-a", "tga16" ])
+# Corse meshes for this process ?
if len(CoarseMeshTextureNames) > 0:
printLog(log, ">>> Build coarse meshes <<<")
shapeWithCoarseMesh = ExportBuildDirectory + "/" + ShapeWithCoarseMeshExportDirectory
@@ -127,6 +135,7 @@ if len(CoarseMeshTextureNames) > 0:
cf.close()
subprocess.call([ BuildCoarseMesh, "config_generated.cfg" ])
os.remove("config_generated.cfg")
+ # Convert the coarse texture to dds
for tn in CoarseMeshTextureNames:
subprocess.call([ TgaToDds, shapeWithCoarseMesh + "/" + tn + ".tga", "-o", shapeWithCoarseMeshBuilded + "/" + tn + ".dds", "-a", "5" ])
else:
diff --git a/code/nel/tools/build_gamedata/processes/shape/3_install.py b/code/nel/tools/build_gamedata/processes/shape/3_install.py
index 6667acdac..393216e8f 100644
--- a/code/nel/tools/build_gamedata/processes/shape/3_install.py
+++ b/code/nel/tools/build_gamedata/processes/shape/3_install.py
@@ -46,8 +46,8 @@ printLog(log, "")
printLog(log, ">>> Install shape <<<")
clientPath = ClientDataDirectory + "/" + ShapeClientDirectory
mkPath(log, clientPath)
-mkPath(log, ExportBuildDirectory + "/" + ShapeExportDirectory)
-copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeExportDirectory, clientPath, ".shape")
+mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory)
+copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory, clientPath, ".shape")
mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory)
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, clientPath, ".shape")
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, clientPath, ".dds")
diff --git a/code/nel/tools/build_gamedata/processes/skel/1_export.py b/code/nel/tools/build_gamedata/processes/skel/1_export.py
index 32744a224..aad402658 100644
--- a/code/nel/tools/build_gamedata/processes/skel/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/skel/1_export.py
@@ -49,14 +49,46 @@ printLog(log, "")
# For each skel directory
printLog(log, ">>> Export skel 3dsmax <<<")
-printLog(log, "********************************")
-printLog(log, "******** TODO ********")
-printLog(log, "********************************")
mkPath(log, ExportBuildDirectory + "/" + SkelExportDirectory)
for dir in SkelSourceDirectories:
mkPath(log, DatabaseDirectory + "/" + dir)
-printLog(log, "")
+ if (needUpdateDirNoSubdirLogExtMultidir(log, DatabaseDirectory, SkelSourceDirectories, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + SkelExportDirectory, ".skel")):
+ scriptSrc = "maxscript/skel_export.ms"
+ scriptDst = MaxUserDirectory + "/scripts/skel_export.ms"
+ logFile = ScriptDirectory + "/processes/skel/log.log"
+ outDirSkel = ExportBuildDirectory + "/" + SkelExportDirectory
+ skelSourceDir = DatabaseDirectory + "/" + dir
+ tagList = findFiles(log, outDirSkel, "", ".skel")
+ tagLen = len(tagList)
+ if os.path.isfile(scriptDst):
+ os.remove(scriptDst)
+ tagDiff = 1
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("skel_source_directory", skelSourceDir)
+ newline = newline.replace("output_directory", outDirSkel)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+ while tagDiff > 0:
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "skel_export.ms", "-q", "-mi", "-vn" ])
+ tagList = findFiles(log, outDirSkel, "", ".skel")
+ newTagLen = len(tagList)
+ tagDiff = newTagLen - tagLen
+ tagLen = newTagLen
+ printLog(log, "Exported " + str(tagDiff) + " .skel files!")
+ os.remove(scriptDst)
+printLog(log, ">>> Export skel directly <<<")
+mkPath(log, ExportBuildDirectory + "/" + SkelExportDirectory)
+for dir in SkelSourceDirectories:
+ mkPath(log, DatabaseDirectory + "/" + dir)
+ copyFilesExtNoSubdirIfNeeded(log, DatabaseDirectory + "/" + dir, ExportBuildDirectory + "/" + SkelExportDirectory, ".skel")
+
+printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/skel/maxscript/skel_export.ms b/code/nel/tools/build_gamedata/processes/skel/maxscript/skel_export.ms
new file mode 100644
index 000000000..02cdcac38
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/skel/maxscript/skel_export.ms
@@ -0,0 +1,162 @@
+-- Allocate 20 Me for the script
+heapSize += 15000000
+
+nlErrorFilename = "output_logfile"
+nlErrorStream = openFile nlErrorFilename mode:"a"
+if nlErrorStream == undefined then
+ nlErrorStream = createFile nlErrorFilename
+
+-- Log a message
+fn nlerror message =
+(
+ if nlErrorStream != undefined then
+ (
+ format "%\n" message to:nlErrorStream
+ flush nlErrorStream
+ )
+
+ -- To the console
+ print message
+)
+
+-- Unhide category
+fn unhidecategory =
+(
+ if (geometry.count > 0) then
+ (
+ unhide geometry[1]
+ if (geometry[1].ishidden == true) then
+ max hide object toggle
+ )
+ if (shapes.count > 0) then
+ (
+ unhide shapes[1]
+ if (shapes[1].ishidden == true) then
+ max hide shape toggle
+ )
+ if (lights.count > 0) then
+ (
+ unhide lights[1]
+ if (lights[1].ishidden == true) then
+ max hide light toggle
+ )
+ if (cameras.count > 0) then
+ (
+ unhide cameras[1]
+ if (cameras[1].ishidden == true) then
+ max hide camera toggle
+ )
+ if (helpers.count > 0) then
+ (
+ unhide helpers[1]
+ if (helpers[1].ishidden == true) then
+ max hide helper toggle
+ )
+)
+
+try
+(
+ -- Get files in the skel_source_directory
+ files = getFiles "skel_source_directory/*.max"
+
+ -- Sort files
+ sort files
+
+ -- No file ?
+ if files.count != 0 then
+ (
+ -- For each files
+ for i = 1 to files.count do
+ (
+ try
+ (
+ -- Output file
+ output = ("output_directory/"+(getFilenameFile files[i])+".skel")
+
+ -- Compare file date
+ if (NeLTestFileDate output files[i]) == true then
+ (
+ -- Free memory and file handles
+ gc ()
+
+ -- Reset 3dsmax
+ resetMAXFile #noprompt
+
+ -- Open the max project
+ nlerror ("Scanning file "+files[i]+" ...")
+ if (loadMaxFile files[i] quiet:true) == true then
+ (
+ -- Unhide category
+ unhidecategory()
+
+ -- Select Bip01, not very smart
+ if $Bip01 != undefined then
+ (
+ -- Select Bip01
+ select $Bip01
+
+ if ($ != undefined) then
+ (
+ -- Set figure mode on
+ if ((classof $) == Biped_Object) then
+ (
+ $.controller.figureMode = true
+ )
+
+ -- Export the skeleton template
+ if (NelExportSkeleton $ output) == false then
+ (
+ nlerror ("ERROR exporting skeleton "+files[i])
+ )
+ else
+ (
+ nlerror ("OK "+output)
+ )
+ )
+ else
+ (
+ -- Error
+ nlerror ("ERROR exporting skeleton: no Bip01 node in file "+files[i])
+ )
+ )
+ else
+ (
+ -- Error
+ nlerror ("ERROR exporting skeleton: no Bip01 node in file "+files[i])
+ )
+ )
+ else
+ (
+ -- Error
+ nlerror ("ERROR exporting skeleton: can't open the file "+files[i])
+ )
+ )
+ else
+ (
+ nlerror ("SKIPPED "+files[i])
+ )
+ )
+ catch
+ (
+ -- Error
+ nlerror ("ERROR error exporting skeleton in files " + files[i])
+ )
+ )
+ )
+ else
+ (
+ nlerror ("WARNING no skeleton file in folder skel_source_directory")
+ )
+)
+catch
+(
+ -- Error
+ nlerror ("ERROR fatal error exporting skeleton in folder skel_source_directory")
+)
+
+-- Bye
+
+resetMAXFile #noprompt
+quitMAX #noPrompt
+quitMAX () #noPrompt
+
diff --git a/code/nel/tools/build_gamedata/processes/skel/todo_export_maxscript b/code/nel/tools/build_gamedata/processes/skel/todo_export_maxscript
deleted file mode 100644
index e69de29bb..000000000
diff --git a/code/nel/tools/build_gamedata/processes/swt/1_export.py b/code/nel/tools/build_gamedata/processes/swt/1_export.py
index 924ba2a6d..c65e6f793 100644
--- a/code/nel/tools/build_gamedata/processes/swt/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/swt/1_export.py
@@ -49,14 +49,40 @@ printLog(log, "")
# For each swt directory
printLog(log, ">>> Export skeleton weigths 3dsmax <<<")
-printLog(log, "********************************")
-printLog(log, "******** TODO ********")
-printLog(log, "********************************")
mkPath(log, ExportBuildDirectory + "/" + SwtExportDirectory)
for dir in SwtSourceDirectories:
mkPath(log, DatabaseDirectory + "/" + dir)
-printLog(log, "")
+ if (needUpdateDirNoSubdirLogExtMultidir(log, DatabaseDirectory, SwtSourceDirectories, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + SwtExportDirectory, ".swt")):
+ scriptSrc = "maxscript/swt_export.ms"
+ scriptDst = MaxUserDirectory + "/scripts/swt_export.ms"
+ logFile = ScriptDirectory + "/processes/swt/log.log"
+ outDirSwt = ExportBuildDirectory + "/" + SwtExportDirectory
+ swtSourceDir = DatabaseDirectory + "/" + dir
+ tagList = findFiles(log, outDirSwt, "", ".swt")
+ tagLen = len(tagList)
+ if os.path.isfile(scriptDst):
+ os.remove(scriptDst)
+ tagDiff = 1
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("swt_source_directory", swtSourceDir)
+ newline = newline.replace("output_directory", outDirSwt)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+ while tagDiff > 0:
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "swt_export.ms", "-q", "-mi", "-vn" ])
+ tagList = findFiles(log, outDirSwt, "", ".swt")
+ newTagLen = len(tagList)
+ tagDiff = newTagLen - tagLen
+ tagLen = newTagLen
+ printLog(log, "Exported " + str(tagDiff) + " .swt files!")
+ os.remove(scriptDst)
+printLog(log, "")
log.close()
diff --git a/code/nel/tools/build_gamedata/processes/swt/maxscript/swt_export.ms b/code/nel/tools/build_gamedata/processes/swt/maxscript/swt_export.ms
index 98cdb0c30..87517c831 100644
--- a/code/nel/tools/build_gamedata/processes/swt/maxscript/swt_export.ms
+++ b/code/nel/tools/build_gamedata/processes/swt/maxscript/swt_export.ms
@@ -84,7 +84,7 @@ try
-- Open the max project
nlerror ("Scanning file "+files[i]+" ...")
- if loadMaxFile files[i] == true then
+ if (loadMaxFile files[i] quiet:true) == true then
(
-- Unhide category
unhidecategory()
diff --git a/code/nel/tools/build_gamedata/processes/swt/todo_export_maxscript b/code/nel/tools/build_gamedata/processes/swt/todo_export_maxscript
deleted file mode 100644
index e69de29bb..000000000
diff --git a/code/nel/tools/build_gamedata/processes/veget/1_export.py b/code/nel/tools/build_gamedata/processes/veget/1_export.py
index 39e03c484..ce9179dd5 100644
--- a/code/nel/tools/build_gamedata/processes/veget/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/veget/1_export.py
@@ -69,19 +69,20 @@ if MaxAvailable:
for dir in VegetSourceDirectories:
vegetSourceDir = DatabaseDirectory + "/" + dir
mkPath(log, vegetSourceDir)
- sSrc = open(scriptSrc, "r")
- sDst = open(scriptDst, "w")
- for line in sSrc:
- newline = line.replace("output_logfile", logFile)
- newline = newline.replace("veget_source_directory", vegetSourceDir)
- newline = newline.replace("output_directory_veget", outputDirVeget)
- newline = newline.replace("output_directory_tag", outputDirTag)
- sDst.write(newline)
- sSrc.close()
- sDst.close()
- printLog(log, "MAXSCRIPT " + scriptDst)
- subprocess.call([ Max, "-U", "MAXScript", "veget_export.ms", "-q", "-mi", "-vn" ])
- os.remove(scriptDst)
+ if (needUpdateDirNoSubdirLogExtMultidir(log, DatabaseDirectory, VegetSourceDirectories, vegetSourceDir, ".max", outputDirTag, ".max.tag")):
+ sSrc = open(scriptSrc, "r")
+ sDst = open(scriptDst, "w")
+ for line in sSrc:
+ newline = line.replace("output_logfile", logFile)
+ newline = newline.replace("veget_source_directory", vegetSourceDir)
+ newline = newline.replace("output_directory_veget", outputDirVeget)
+ newline = newline.replace("output_directory_tag", outputDirTag)
+ sDst.write(newline)
+ sSrc.close()
+ sDst.close()
+ printLog(log, "MAXSCRIPT " + scriptDst)
+ subprocess.call([ Max, "-U", "MAXScript", "veget_export.ms", "-q", "-mi", "-vn" ])
+ os.remove(scriptDst)
printLog(log, "")
diff --git a/code/nel/tools/build_gamedata/processes/zone/2_build.py b/code/nel/tools/build_gamedata/processes/zone/2_build.py
index cdbecfe12..42d033102 100644
--- a/code/nel/tools/build_gamedata/processes/zone/2_build.py
+++ b/code/nel/tools/build_gamedata/processes/zone/2_build.py
@@ -61,7 +61,7 @@ if BuildQuality == 1:
mkPath(log, ExportBuildDirectory + "/" + ZoneDependBuildDirectory)
mkPath(log, ActiveProjectDirectory + "/generated")
configFile = ActiveProjectDirectory + "/generated/zone_dependencies.cfg"
- templateCf = open(ActiveProjectDirectory + "/generated/zone_lighter.cfg", "r")
+ templateCf = open(ActiveProjectDirectory + "/generated/properties.cfg", "r")
cf = open(configFile, "w")
for line in templateCf:
cf.write(line)
diff --git a/code/nel/tools/build_gamedata/processes/zone_light/0_setup.py b/code/nel/tools/build_gamedata/processes/zone_light/0_setup.py
index e4792e9e6..112a3c9c7 100644
--- a/code/nel/tools/build_gamedata/processes/zone_light/0_setup.py
+++ b/code/nel/tools/build_gamedata/processes/zone_light/0_setup.py
@@ -43,32 +43,6 @@ printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
-mkPath(log, ActiveProjectDirectory + "/generated")
-zlp = open(ActiveProjectDirectory + "/generated/zone_lighter.cfg", "w")
-ps = open(ActiveProjectDirectory + "/zone_lighter_base.cfg", "r")
-for line in ps:
- newline = line.replace("%ExportBuildDirectory%", ExportBuildDirectory)
- newline = newline.replace("%SmallbankExportDirectory%", SmallbankExportDirectory)
- newline = newline.replace("%FarbankBuildDirectory%", FarbankBuildDirectory)
- newline = newline.replace("%EcosystemName%", EcosystemName)
- newline = newline.replace("%EcosystemPath%", EcosystemPath)
- newline = newline.replace("%BankTileBankName%", BankTileBankName)
- newline = newline.replace("%IgLandBuildDirectory%", IgLandBuildDirectory)
- newline = newline.replace("%IgOtherBuildDirectory%", IgOtherBuildDirectory)
- newline = newline.replace("%RbankOutputBuildDirectory%", RbankOutputBuildDirectory)
- newline = newline.replace("%RbankRbankName%", RbankRbankName)
- newline = newline.replace("%BuildQuality%", str(BuildQuality))
- zlp.write(newline)
-ps.close()
-if (BuildQuality == 1):
- ps = open(ActiveProjectDirectory + "/zone_lighter_final.cfg", "r")
-else:
- ps = open(ActiveProjectDirectory + "/zone_lighter_draft.cfg", "r")
-for line in ps:
- zlp.write(line)
-zlp.close()
-printLog(log, "")
-
# Setup source directories
printLog(log, ">>> Setup source directories <<<")
for dir in WaterMapSourceDirectories:
diff --git a/code/nel/tools/build_gamedata/processes/zone_light/2_build.py b/code/nel/tools/build_gamedata/processes/zone_light/2_build.py
index dc6cccdfa..a96f4e94e 100644
--- a/code/nel/tools/build_gamedata/processes/zone_light/2_build.py
+++ b/code/nel/tools/build_gamedata/processes/zone_light/2_build.py
@@ -68,7 +68,7 @@ else:
destFile = destDir + "/" + file[0:-len(".zonew")] + ".zonel"
if (needUpdateLogRemoveDest(log, srcFile, destFile)):
dependFile = destDir + "/" + file[0:-len(".zonew")] + ".depend"
- subprocess.call([ ExecTimeout, str(ZoneLightBuildTimeout), ZoneLighter, srcFile, destFile, ActiveProjectDirectory + "/generated/zone_lighter.cfg", dependFile ])
+ subprocess.call([ ExecTimeout, str(ZoneLightBuildTimeout), ZoneLighter, srcFile, destFile, ActiveProjectDirectory + "/generated/properties.cfg", dependFile ])
printLog(log, "")
# For each zone_light ig
@@ -94,7 +94,7 @@ else:
if (needUpdateLogRemoveDest(log, igsrcFile, destFile)):
srcFile = srcDir + "/" + file
dependFile = destDir + "/" + file[0:-len(".zonel")] + ".depend"
- subprocess.call([ ExecTimeout, str(ZoneIgLightBuildTimeout), ZoneIgLighter, srcFile, destFile, ActiveProjectDirectory + "/generated/zone_lighter.cfg", dependFile ])
+ subprocess.call([ ExecTimeout, str(ZoneIgLightBuildTimeout), ZoneIgLighter, srcFile, destFile, ActiveProjectDirectory + "/generated/properties.cfg", dependFile ])
printLog(log, "")
log.close()
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/construction/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/construction/directories.py
new file mode 100644
index 000000000..a55f23182
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/construction/directories.py
@@ -0,0 +1,141 @@
+#!/usr/bin/python
+#
+# \file directories.py
+# \brief Directories configuration
+# \date 2010-08-27 17:13GMT
+# \author Jan Boon (Kaetemi)
+# \date 2001-2005
+# \author Nevrax
+# Python port of game data build pipeline.
+# Directories configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "construction"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SOURCE DIRECTORIES LEVELDESIGN/WORLD ***
+ContinentLeveldesignWorldDirectory = "" # DISABLED
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
+
+# Shape directories
+ShapeSourceDirectories = [ ]
+ShapeSourceDirectories += [ "stuff/Generique/Decors/Constructions" ]
+
+# Maps directories
+MapSourceDirectories = [ ]
+MapSourceDirectories += [ "stuff/Generique/Decors/_Textures/Batiments" ]
+
+MapUncompressedSourceDirectories = [ ]
+
+# Ligo directories
+LigoBaseSourceDirectory = "landscape/ligo"
+
+# Ig directories
+IgLandSourceDirectories = [ ]
+IgOtherSourceDirectories = [ ]
+IgOtherSourceDirectories += [ "stuff/Generique/Decors/Constructions" ]
+IgPrimitiveSourceDirectories = [ ]
+
+# Tiles root directory
+TileRootSourceDirectory = "landscape/_texture_tiles"
+
+# Displace directory
+DisplaceSourceDirectory = "landscape/_texture_tiles/displace"
+
+
+# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Shape directories
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
+ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
+ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
+ShapeAnimExportDirectory = CommonPath + "/shape_anim"
+
+# Ig directories
+IgStaticLandExportDirectory = CommonPath + "/ig_static_land" # Landscape IG eported from 3dsmax not elevated by the heightmap
+IgStaticOtherExportDirectory = CommonPath + "/ig_static_other" # Village or construction IGs exported from 3dsmax
+IgStaticTagExportDirectory = CommonPath + "/ig_static_tag" # Tag for exported 3dsmax files
+
+# Zone directories
+ZoneWeldBuildDirectory = CommonPath + "/zone_weld"
+ZoneDependBuildDirectory = CommonPath + "/zone_depend"
+ZoneLightWaterShapesLightedExportDirectory = CommonPath + "/zone_lwsl_temp" #fixme
+ZoneLightBuildDirectory = CommonPath + "/zone_lighted" #fixme
+ZoneLightDependBuildDirectory = CommonPath + "/zone_lighted_depend" #fixme
+ZoneLightIgLandBuildDirectory = CommonPath + "/zone_lighted_ig_land" #fixme
+
+
+# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Map directories
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
+
+# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
+ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
+ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
+ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
+
+# Ig directories
+IgElevLandPrimBuildDirectory = CommonPath + "/ig_elev_land_prim" # landscape IG generated by the prim exporter (already elevated by the land exporter)
+IgElevLandLigoBuildDirectory = CommonPath + "/ig_elev_land_ligo" # Landscape IG found in ligo bricks from 3dsmax elevated by the heightmap
+IgElevLandStaticBuildDirectory = CommonPath + "/ig_elev_land_static" # Landscape IG eported from 3dsmax elevated by the heightmap
+IgTempLandMergeBuildDirectory = CommonPath + "/ig_temp_land_merge"
+IgTempLandCompareBuildDirectory = CommonPath + "/ig_temp_land_compare" # Tmp final IG directory for landscape IGs before comparison
+IgLandBuildDirectory = CommonPath + "/ig_land" # Final IG directory for landscape IGs
+IgOtherBuildDirectory = CommonPath + "/ig_other" # Final IG directory for village or construction IGs
+IgOtherLightedBuildDirectory = CommonPath + "/ig_other_lighted"
+
+# Farbank directories
+FarbankBuildDirectory = CommonPath + "/farbank"
+
+# Ligo directories
+LigoZoneBuildDirectory = CommonPath + "/ligo_zones"
+LigoIgLandBuildDirectory = CommonPath + "/ligo_ig_land" # Landscape IG found in ligo bricks not elevated by the heightmap
+LigoIgOtherBuildDirectory = CommonPath + "/ligo_ig_other" # Village or construction IGs exported from ligo landscape
+
+
+# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+
+# Map directory
+MapClientDirectory = CommonName
+BitmapClientDirectory = MapClientDirectory
+
+# Shape directory
+ShapeClientDirectory = CommonName
+
+# Lightmap directory
+LightmapClientDirectory = CommonName
+
+# Animation directory
+AnimClientDirectory = CommonName
+
+# Ig directory
+IgClientDirectory = CommonName
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/construction/process.py b/code/ryzom/tools/build_gamedata/workspace/common/construction/process.py
new file mode 100644
index 000000000..6c4508985
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/construction/process.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+#
+# \file config.py
+# \brief Process configuration
+# \date 2010-08-27 17:02GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Process configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+# *** PROCESS CONFIGURATION ***
+
+
+# *** PROCESS CONFIG ***
+ProcessToComplete = [ ]
+ProcessToComplete += [ "properties" ]
+ProcessToComplete += [ "shape" ]
+ProcessToComplete += [ "map" ]
+ProcessToComplete += [ "ig" ]
+ProcessToComplete += [ "ig_light" ]
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "construction"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SHAPE EXPORT OPTIONS ***
+
+# Compute lightmaps ?
+ShapeExportOptExportLighting = "true"
+
+# Cast shadow in lightmap ?
+ShapeExportOptShadow = "true"
+
+# Lighting limits. 0 : normal, 1 : soft shadows
+ShapeExportOptLightingLimit = 0
+
+# Lightmap lumel size
+ShapeExportOptLumelSize = "0.25"
+
+# Oversampling value. Can be 1, 2, 4 or 8
+ShapeExportOptOversampling = 1
+
+# Does the lightmap must be generated in 8 bits format ?
+ShapeExportOpt8BitsLightmap = "false"
+
+# Does the lightmaps export must generate logs ?
+ShapeExportOptLightmapLog = "true"
+
+# Coarse mesh texture mul size
+TextureMulSizeValue = "1.5"
+
+DoBuildShadowSkin = 0
+
+ClodConfigFile = ""
+
+# *** COARSE MESH TEXTURE NAME ***
+CoarseMeshTextureNames = [ ]
+
+# *** POSTFIX USED BY THE MULTIPLE TILES SYSTEM ***
+MultipleTilesPostfix = [ ]
+MultipleTilesPostfix += [ "_sp" ]
+MultipleTilesPostfix += [ "_su" ]
+MultipleTilesPostfix += [ "_au" ]
+MultipleTilesPostfix += [ "_wi" ]
+
+# Name of the tilebank to use
+BankTileBankName = ""
+
+# *** LANDSCAPE NAME ***
+LandscapeName = ContinentName
+
+# *** LIGO OPTIONS ***
+LigoExportLand = ""
+LigoExportOnePass = 0
+LigoExportColormap = "colormap_invalid.png"
+LigoExportHeightmap1 = "big_invalid.png"
+LigoExportZFactor1 = "1.0"
+LigoExportHeightmap2 = "noise_invalid.png"
+LigoExportZFactor2 = "0.5"
+LigoTileBankFile = "landscape/_texture_tiles/jungle/jungle.bank"
+
+# *** MAPS OPTIONS ***
+
+ReduceBitmapFactor = 0
+
+# *** ANIMATIONS OPTIONS ***
+
+DoOptimizeAnimations = 0
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/construction/properties_base.cfg b/code/ryzom/tools/build_gamedata/workspace/common/construction/properties_base.cfg
new file mode 100644
index 000000000..2fa378594
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/construction/properties_base.cfg
@@ -0,0 +1,51 @@
+
+// Bank file name
+bank_name = "%ExportBuildDirectory%/ecosystems/jungle/smallbank/jungle.smallbank";
+bankfar_name = "%ExportBuildDirectory%/ecosystems/jungle/farbank/jungle.farbank";
+
+// Search pathes
+search_pathes =
+{
+ "%ExportBuildDirectory%/common/sfx/ps", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape_with_coarse_mesh", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/map", // Sfx directory
+ "%ExportBuildDirectory%/common/construction/shape", // Construction directory
+ "%ExportBuildDirectory%/common/construction/shape_with_coarse_mesh", // Construction directory
+ "%ExportBuildDirectory%/common/construction/map", // Construction directory
+};
+
+// Additional ig file name
+additionnal_ig =
+{
+
+};
+
+// Sun direction.
+//sun_direction = { -0.095, +1.0, -0.50 };
+sun_direction = { -0.776685, +0.216619, -0.59147 };
+
+// Center of the landscape pointed by the sun
+sun_center = {9954, -11017, 0};
+
+// Distance of the sun
+sun_distance = 50000;
+
+// FOV of the sun in radian
+sun_fov = 0.52359877; // Pi / 6
+
+// Sun radius, (for softshadow sampling)
+sun_radius = 5000;
+
+// GlobalRetriever bank file.gr. Empty string to disable SurfaceLighting
+grbank= "%ExportBuildDirectory%/continents/newbieland/rbank_output/newbieland.gr";
+
+// LocalRetriever bank file .rbank. Empty string to disable SurfaceLighting
+rbank= "%ExportBuildDirectory%/continents/newbieland/rbank_output/newbieland.rbank";
+
+// The lighter search in rbank any retriever with identifier ---igname*** as substring
+// where --- is col_identifier_prefix and *** is col_identifier_suffix
+// eg: if igname= "street", col_identifier_prefix= "col_", col_identifier_suffix= "_",
+// then "col_street_1" and "col_street_2" are valid and are used to build LightSurface infos in the Ig.
+col_identifier_prefix= "";
+col_identifier_suffix= "";
diff --git a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_draft.cfg b/code/ryzom/tools/build_gamedata/workspace/common/construction/properties_draft.cfg
similarity index 100%
rename from code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_draft.cfg
rename to code/ryzom/tools/build_gamedata/workspace/common/construction/properties_draft.cfg
diff --git a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_final.cfg b/code/ryzom/tools/build_gamedata/workspace/common/construction/properties_final.cfg
similarity index 94%
rename from code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_final.cfg
rename to code/ryzom/tools/build_gamedata/workspace/common/construction/properties_final.cfg
index ccb91159d..522c15d44 100644
--- a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_final.cfg
+++ b/code/ryzom/tools/build_gamedata/workspace/common/construction/properties_final.cfg
@@ -6,7 +6,7 @@ load_ig = 1;
compute_dependencies_with_igs = 1;
// Enable shadows. 0 disable, 1 enable
-shadow = 0; // FIXME: should be 1, but missing .depend files
+shadow = 1;
// Landscape ZBuffers size for all the landscape. There is one zbuffer like this one per softshadow sample.
zbuffer_landscape_size = 32768;
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/fauna/anim_builder.cfg b/code/ryzom/tools/build_gamedata/workspace/common/fauna/anim_builder.cfg
new file mode 100644
index 000000000..08128b23e
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/fauna/anim_builder.cfg
@@ -0,0 +1,15 @@
+
+// ***************************
+// Animation Optimizer
+// ***************************
+
+// Tracks which contain one of those name (eg "Bip01 Finger11.rotquat") will be mark as "Low Precision".
+// Usefull for memory optimisation. Avoid setting legs or root bones. Warning: case sensitive.
+anim_low_precision_tracks=
+{
+"Finger",
+"Ponytail",
+};
+
+// The Sample Rate.
+anim_sample_rate= 30;
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/fauna/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/fauna/directories.py
new file mode 100644
index 000000000..ac8baa134
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/fauna/directories.py
@@ -0,0 +1,277 @@
+#!/usr/bin/python
+#
+# \file directories.py
+# \brief Directories configuration
+# \date 2010-08-27 17:13GMT
+# \author Jan Boon (Kaetemi)
+# \date 2001-2005
+# \author Nevrax
+# Python port of game data build pipeline.
+# Directories configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "fauna"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
+
+# Skeleton directories
+SkelSourceDirectories = [ ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/aquatique/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/aquatique_monture/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/chien/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/coureur/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/crustace/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/familier/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/grand_ryzomien/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kamiforet/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kamiguard/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kitin_volant/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/oiseau/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/pachyderme/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/carnitree/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/electroalg/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/endrobouchea/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/phytopsy/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/sapenslaver/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/swarmplant/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_2/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_3/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_4/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_2/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_3/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_4/animations/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/cute/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/frahar/animation/skeletons" ]
+SkelSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/gibbai/animation/skeletons" ]
+
+# Skeleton template weight directories
+SwtSourceDirectories = [ ]
+
+# Shape directories
+ShapeSourceDirectories = [ ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/aquatique/clapclap" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/aquatique/ryzetacee" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/aquatique_monture/sagass_selle" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/mektoub" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/mektoubselle" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/mektoubpack" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/chien/chorani" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/chien/jungler" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/chien/regus" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/chien/varinx" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/coureur/capryni" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/coureur/filin" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/crustace/cococlaw" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/crustace/estrasson" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/crustace/hachtaha" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/crustace/diranak" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/familier/dag" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/grand_ryzomien/ryzerb" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/grand_ryzomien/ryzoholok" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kamiforet" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kamiguard" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_2" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_3" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_4" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_2" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_3" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_4" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/kitihank" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/kitinagan" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/kitinarak" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/kitinega" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/kitinokto" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/kitimandib" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/pucetron" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin_volant/kitifly" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin_volant/kitikil" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/oiseau/kazoar" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/oiseau/lightbird" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/oiseau/yber" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/pachyderme/arma" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/pachyderme/bul" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/pachyderme/vampignon" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/kakty" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/ryzoholo" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/zerx" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/carnitree" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/electroalg" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/endrobouchea" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/phytopsy" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/sapenslaver" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/swarmplant" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/cute" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/frahar" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/gibbai" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/aquatique" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/chiens" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/coureur" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/crustaces" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/grand_ryzomien" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/kitin" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/kitin_volant" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/oiseau" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/pachyderme/vampignon" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/ryzomien/kakty" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/ryzomien/ryzoholo" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/c03" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/h05" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/h12" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/chien/c02" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/chien/c07" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/coureur/h01" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/coureur/h04" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/crustace/c05" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/grand_ryzomien/c06" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/grand_ryzomien/h07" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/grand_ryzomien/h11" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/oiseau/c01" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/pachyderme/h08" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/pachyderme/h10" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/c04" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/h02" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/h06" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/h09" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/familier/h03" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/ryzomien/c04" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/familier/h03" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/homins_degeneres/cute" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/homins_degeneres/frahar" ]
+ShapeSourceDirectories += [ "stuff/goo/agents/monsters/homins_degeneres/gibbai" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/kitin_queen" ]
+
+# Maps directories
+MapSourceDirectories = [ ]
+MapSourceDirectories += [ "stuff/fyros/agents/_textures/monster" ]
+MapSourceDirectories += [ "stuff/tryker/agents/_textures/monster" ]
+MapSourceDirectories += [ "stuff/jungle/agents/_textures/monster" ]
+MapSourceDirectories += [ "stuff/primes_racines/agents/_textures/monster" ]
+MapSourceDirectories += [ "stuff/goo/agents/_textures/monster" ]
+
+MapUncompressedSourceDirectories = [ ]
+
+# Animation directories
+AnimSourceDirectories = [ ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/aquatique/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/aquatique_monture/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/cheval/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/chien/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/coureur/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/crustace/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/familier/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/grand_ryzomien/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kamiforet/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kamiguard/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kitin/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kitin_volant/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/oiseau/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/pachyderme/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/ryzomien/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/carnitree/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/electroalg/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/endrobouchea/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/phytopsy/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/sapenslaver/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/plante_carnivore/swarmplant/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_2/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_3/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_guide_4/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_2/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_3/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/kami/kami_preacher_4/animations/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/cute/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/frahar/animation/anims" ]
+AnimSourceDirectories += [ "stuff/tryker/agents/monsters/homins_degeneres/gibbai/animation/anims" ]
+
+# cLoD shape directories
+ClodSourceDirectories = [ ]
+ClodSourceDirectories += [ "stuff/lod_actors/lod_fauna" ]
+
+
+# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Skeleton directories
+SkelExportDirectory = CommonPath + "/skel"
+
+# Skeleton template weight directories
+SwtExportDirectory = CommonPath + "/swt"
+
+# Shape directories
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
+ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
+ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
+ShapeAnimExportDirectory = CommonPath + "/shape_anim"
+
+# Animation directories
+AnimExportDirectory = CommonPath + "/anim_export"
+
+# cLoD directories
+ClodExportDirectory = CommonPath + "/clod_export"
+ClodTagExportDirectory = CommonPath + "/clod_tag_export"
+
+
+# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Map directories
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
+
+# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
+ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
+ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
+ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
+
+# Animation directories
+AnimBuildDirectory = CommonPath + "/anim"
+
+# cLoD directories
+ClodBankBuildDirectory = CommonPath + "/clod_bank"
+
+
+# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+
+# Map directory
+MapClientDirectory = CommonName + "_maps"
+BitmapClientDirectory = MapClientDirectory
+
+# Shape directory
+ShapeClientDirectory = CommonName + "_shapes"
+LightmapClientDirectory = ShapeClientDirectory
+
+# Animation directory
+AnimClientDirectory = CommonName + "_animations"
+
+# Skeleton directory
+SkelClientDirectory = CommonName + "_skeletons"
+
+# Skeleton directory
+SwtClientDirectory = CommonName + "_swt"
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/fauna/process.py b/code/ryzom/tools/build_gamedata/workspace/common/fauna/process.py
new file mode 100644
index 000000000..76e2cfc32
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/fauna/process.py
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+#
+# \file config.py
+# \brief Process configuration
+# \date 2010-08-27 17:02GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Process configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+# *** PROCESS CONFIGURATION ***
+
+# *** PROCESS CONFIG ***
+ProcessToComplete = [ ]
+ProcessToComplete += [ "skel" ]
+ProcessToComplete += [ "swt" ]
+ProcessToComplete += [ "shape" ]
+ProcessToComplete += [ "map" ]
+ProcessToComplete += [ "anim" ]
+ProcessToComplete += [ "clodbank" ]
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "fauna"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SHAPE EXPORT OPTIONS ***
+
+# Compute lightmaps ?
+ShapeExportOptExportLighting = "true"
+
+# Cast shadow in lightmap ?
+ShapeExportOptShadow = "true"
+
+# Lighting limits. 0 : normal, 1 : soft shadows
+ShapeExportOptLightingLimit = 0
+
+# Lightmap lumel size
+ShapeExportOptLumelSize = "0.25"
+
+# Oversampling value. Can be 1, 2, 4 or 8
+ShapeExportOptOversampling = 1
+
+# Does the lightmap must be generated in 8 bits format ?
+ShapeExportOpt8BitsLightmap = "false"
+
+# Does the lightmaps export must generate logs ?
+ShapeExportOptLightmapLog = "true"
+
+# Coarse mesh texture mul size
+TextureMulSizeValue = "1.5"
+
+DoBuildShadowSkin = 0
+
+
+# *** CLODBANK OPTIONS ***
+
+ClodConfigFile = "stuff/lod_actors/lod_" + CommonName + "/clod_" + CommonName + "_script.cfg"
+ClodBankFileName = CommonName + ".clodbank"
+
+
+# *** COARSE MESH TEXTURE NAME ***
+CoarseMeshTextureNames = [ ]
+
+
+# *** POSTFIX USED BY THE MULTIPLE TILES SYSTEM ***
+MultipleTilesPostfix = [ ]
+MultipleTilesPostfix += [ "_sp" ]
+MultipleTilesPostfix += [ "_su" ]
+MultipleTilesPostfix += [ "_au" ]
+MultipleTilesPostfix += [ "_wi" ]
+
+
+# *** MAPS OPTIONS ***
+
+ReduceBitmapFactor = 0
+
+
+# *** SHADOW SKIN OPTIONS ***
+# Fauna are made of a single skin. Allow only 1000 faces for each monster (whatever the original nb faces)
+BuildShadowSkin = 1
+BuildShadowSkinRatio = 100
+BuildShadowSkinMaxface = 1000
+
+
+# *** ANIMATIONS OPTIONS ***
+
+DoOptimizeAnimations = 1
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/fonts/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/fonts/directories.py
new file mode 100644
index 000000000..7840625f8
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/fonts/directories.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+#
+# \file directories.py
+# \brief Directories configuration
+# \date 2010-08-27 17:13GMT
+# \author Jan Boon (Kaetemi)
+# \date 2001-2005
+# \author Nevrax
+# Python port of game data build pipeline.
+# Directories configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "fonts"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
+
+# Font directories
+FontSourceDirectories = [ ]
+FontSourceDirectories += [ "fonts" ]
+
+
+# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Font directories
+FontExportDirectory = CommonPath + "/font"
+
+
+# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+
+# Font directory
+FontClientDirectory = CommonName
+
+
+# end of file
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/fonts/process.py b/code/ryzom/tools/build_gamedata/workspace/common/fonts/process.py
new file mode 100644
index 000000000..e1e6d4824
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/fonts/process.py
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+#
+# \file config.py
+# \brief Process configuration
+# \date 2010-08-27 17:02GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Process configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+# *** PROCESS CONFIGURATION ***
+
+# *** PROCESS CONFIG ***
+ProcessToComplete = [ ]
+ProcessToComplete += [ "font" ]
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "fonts"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# end of file
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/interface/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/interface/directories.py
index 2f92ebbc1..e733bea15 100644
--- a/code/ryzom/tools/build_gamedata/workspace/common/interface/directories.py
+++ b/code/ryzom/tools/build_gamedata/workspace/common/interface/directories.py
@@ -26,9 +26,15 @@
# along with this program. If not, see .
#
-# *** COMMON PATH ***
-CommonPath = "common/interface"
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "interface"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
# *** SOURCE DIRECTORIES IN THE DATABASE ***
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/interface/process.py b/code/ryzom/tools/build_gamedata/workspace/common/interface/process.py
index f2288f832..29585bdcd 100644
--- a/code/ryzom/tools/build_gamedata/workspace/common/interface/process.py
+++ b/code/ryzom/tools/build_gamedata/workspace/common/interface/process.py
@@ -30,6 +30,16 @@
ProcessToComplete = [ ]
ProcessToComplete += [ "interface" ]
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "interface"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
# *** MAPS OPTIONS ***
ReduceBitmapFactor = 0
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/objects/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/objects/directories.py
index 0a5d2c46a..fcd134e00 100644
--- a/code/ryzom/tools/build_gamedata/workspace/common/objects/directories.py
+++ b/code/ryzom/tools/build_gamedata/workspace/common/objects/directories.py
@@ -60,7 +60,7 @@ MapUncompressedSourceDirectories = [ ]
# Shape directories
ShapeTagExportDirectory = CommonPath + "/shape_tag"
-ShapeExportDirectory = CommonPath + "/shape"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
ShapeAnimExportDirectory = CommonPath + "/shape_anim"
@@ -73,6 +73,7 @@ MapBuildDirectory = CommonPath + "/map"
MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/outgame/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/outgame/directories.py
new file mode 100644
index 000000000..fe7618b72
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/outgame/directories.py
@@ -0,0 +1,141 @@
+#!/usr/bin/python
+#
+# \file directories.py
+# \brief Directories configuration
+# \date 2010-08-27 17:13GMT
+# \author Jan Boon (Kaetemi)
+# \date 2001-2005
+# \author Nevrax
+# Python port of game data build pipeline.
+# Directories configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "outgame"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SOURCE DIRECTORIES LEVELDESIGN/WORLD ***
+ContinentLeveldesignWorldDirectory = "" # DISABLED
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
+
+# Shape directories
+ShapeSourceDirectories = [ ]
+ShapeSourceDirectories += [ "stuff/outgame/appart_crea" ]
+
+# Maps directories
+MapSourceDirectories = [ ]
+MapSourceDirectories += [ "stuff/outgame/_textures" ]
+
+MapUncompressedSourceDirectories = [ ]
+
+# Ligo directories
+LigoBaseSourceDirectory = "landscape/ligo"
+
+# Ig directories
+IgLandSourceDirectories = [ ]
+IgOtherSourceDirectories = [ ]
+IgOtherSourceDirectories += [ "stuff/outgame/appart_crea" ]
+IgPrimitiveSourceDirectories = [ ]
+
+# Tiles root directory
+TileRootSourceDirectory = "landscape/_texture_tiles"
+
+# Displace directory
+DisplaceSourceDirectory = "landscape/_texture_tiles/displace"
+
+
+# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Shape directories
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
+ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
+ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
+ShapeAnimExportDirectory = CommonPath + "/shape_anim"
+
+# Ig directories
+IgStaticLandExportDirectory = CommonPath + "/ig_static_land" # Landscape IG eported from 3dsmax not elevated by the heightmap
+IgStaticOtherExportDirectory = CommonPath + "/ig_static_other" # Village or construction IGs exported from 3dsmax
+IgStaticTagExportDirectory = CommonPath + "/ig_static_tag" # Tag for exported 3dsmax files
+
+# Zone directories
+ZoneWeldBuildDirectory = CommonPath + "/zone_weld"
+ZoneDependBuildDirectory = CommonPath + "/zone_depend"
+ZoneLightWaterShapesLightedExportDirectory = CommonPath + "/zone_lwsl_temp" #fixme
+ZoneLightBuildDirectory = CommonPath + "/zone_lighted" #fixme
+ZoneLightDependBuildDirectory = CommonPath + "/zone_lighted_depend" #fixme
+ZoneLightIgLandBuildDirectory = CommonPath + "/zone_lighted_ig_land" #fixme
+
+
+# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Map directories
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
+
+# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
+ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
+ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
+ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
+
+# Ig directories
+IgElevLandPrimBuildDirectory = CommonPath + "/ig_elev_land_prim" # landscape IG generated by the prim exporter (already elevated by the land exporter)
+IgElevLandLigoBuildDirectory = CommonPath + "/ig_elev_land_ligo" # Landscape IG found in ligo bricks from 3dsmax elevated by the heightmap
+IgElevLandStaticBuildDirectory = CommonPath + "/ig_elev_land_static" # Landscape IG eported from 3dsmax elevated by the heightmap
+IgTempLandMergeBuildDirectory = CommonPath + "/ig_temp_land_merge"
+IgTempLandCompareBuildDirectory = CommonPath + "/ig_temp_land_compare" # Tmp final IG directory for landscape IGs before comparison
+IgLandBuildDirectory = CommonPath + "/ig_land" # Final IG directory for landscape IGs
+IgOtherBuildDirectory = CommonPath + "/ig_other" # Final IG directory for village or construction IGs
+IgOtherLightedBuildDirectory = CommonPath + "/ig_other_lighted"
+
+# Farbank directories
+FarbankBuildDirectory = CommonPath + "/farbank"
+
+# Ligo directories
+LigoZoneBuildDirectory = CommonPath + "/ligo_zones"
+LigoIgLandBuildDirectory = CommonPath + "/ligo_ig_land" # Landscape IG found in ligo bricks not elevated by the heightmap
+LigoIgOtherBuildDirectory = CommonPath + "/ligo_ig_other" # Village or construction IGs exported from ligo landscape
+
+
+# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+
+# Map directory
+MapClientDirectory = CommonName
+BitmapClientDirectory = MapClientDirectory
+
+# Shape directory
+ShapeClientDirectory = CommonName
+
+# Lightmap directory
+LightmapClientDirectory = CommonName
+
+# Animation directory
+AnimClientDirectory = CommonName
+
+# Ig directory
+IgClientDirectory = CommonName
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/outgame/process.py b/code/ryzom/tools/build_gamedata/workspace/common/outgame/process.py
new file mode 100644
index 000000000..9097c3b3a
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/outgame/process.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+#
+# \file config.py
+# \brief Process configuration
+# \date 2010-08-27 17:02GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Process configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+# *** PROCESS CONFIGURATION ***
+
+
+# *** PROCESS CONFIG ***
+ProcessToComplete = [ ]
+ProcessToComplete += [ "properties" ]
+ProcessToComplete += [ "shape" ]
+ProcessToComplete += [ "map" ]
+ProcessToComplete += [ "ig" ]
+ProcessToComplete += [ "ig_light" ]
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "outgame"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SHAPE EXPORT OPTIONS ***
+
+# Compute lightmaps ?
+ShapeExportOptExportLighting = "true"
+
+# Cast shadow in lightmap ?
+ShapeExportOptShadow = "true"
+
+# Lighting limits. 0 : normal, 1 : soft shadows
+ShapeExportOptLightingLimit = 0
+
+# Lightmap lumel size
+ShapeExportOptLumelSize = "0.25"
+
+# Oversampling value. Can be 1, 2, 4 or 8
+ShapeExportOptOversampling = 1
+
+# Does the lightmap must be generated in 8 bits format ?
+ShapeExportOpt8BitsLightmap = "false"
+
+# Does the lightmaps export must generate logs ?
+ShapeExportOptLightmapLog = "true"
+
+# Coarse mesh texture mul size
+TextureMulSizeValue = "1.5"
+
+DoBuildShadowSkin = 0
+
+ClodConfigFile = ""
+
+# *** COARSE MESH TEXTURE NAME ***
+CoarseMeshTextureNames = [ ]
+
+# *** POSTFIX USED BY THE MULTIPLE TILES SYSTEM ***
+MultipleTilesPostfix = [ ]
+MultipleTilesPostfix += [ "_sp" ]
+MultipleTilesPostfix += [ "_su" ]
+MultipleTilesPostfix += [ "_au" ]
+MultipleTilesPostfix += [ "_wi" ]
+
+# Name of the tilebank to use
+BankTileBankName = ""
+
+# *** LANDSCAPE NAME ***
+LandscapeName = ContinentName
+
+# *** LIGO OPTIONS ***
+LigoExportLand = ""
+LigoExportOnePass = 0
+LigoExportColormap = "colormap_invalid.png"
+LigoExportHeightmap1 = "big_invalid.png"
+LigoExportZFactor1 = "1.0"
+LigoExportHeightmap2 = "noise_invalid.png"
+LigoExportZFactor2 = "0.5"
+LigoTileBankFile = "landscape/_texture_tiles/jungle/jungle.bank"
+
+# *** MAPS OPTIONS ***
+
+ReduceBitmapFactor = 0
+
+# *** ANIMATIONS OPTIONS ***
+
+DoOptimizeAnimations = 0
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_base.cfg b/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_base.cfg
new file mode 100644
index 000000000..a4ffbf3ca
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_base.cfg
@@ -0,0 +1,51 @@
+
+// Bank file name
+bank_name = "%ExportBuildDirectory%/ecosystems/jungle/smallbank/jungle.smallbank";
+bankfar_name = "%ExportBuildDirectory%/ecosystems/jungle/farbank/jungle.farbank";
+
+// Search pathes
+search_pathes =
+{
+ "%ExportBuildDirectory%/common/sfx/ps", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape_with_coarse_mesh", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/map", // Sfx directory
+ "%ExportBuildDirectory%/common/outgame/shape", // Outgame directory
+ "%ExportBuildDirectory%/common/outgame/shape_with_coarse_mesh", // Outgame directory
+ "%ExportBuildDirectory%/common/outgame/map", // Outgame directory
+};
+
+// Additional ig file name
+additionnal_ig =
+{
+
+};
+
+// Sun direction.
+//sun_direction = { -0.095, +1.0, -0.50 };
+sun_direction = { -0.776685, +0.216619, -0.59147 };
+
+// Center of the landscape pointed by the sun
+sun_center = {9954, -11017, 0};
+
+// Distance of the sun
+sun_distance = 50000;
+
+// FOV of the sun in radian
+sun_fov = 0.52359877; // Pi / 6
+
+// Sun radius, (for softshadow sampling)
+sun_radius = 5000;
+
+// GlobalRetriever bank file.gr. Empty string to disable SurfaceLighting
+grbank= "%ExportBuildDirectory%/continents/newbieland/rbank_output/newbieland.gr";
+
+// LocalRetriever bank file .rbank. Empty string to disable SurfaceLighting
+rbank= "%ExportBuildDirectory%/continents/newbieland/rbank_output/newbieland.rbank";
+
+// The lighter search in rbank any retriever with identifier ---igname*** as substring
+// where --- is col_identifier_prefix and *** is col_identifier_suffix
+// eg: if igname= "street", col_identifier_prefix= "col_", col_identifier_suffix= "_",
+// then "col_street_1" and "col_street_2" are valid and are used to build LightSurface infos in the Ig.
+col_identifier_prefix= "";
+col_identifier_suffix= "";
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_draft.cfg b/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_draft.cfg
new file mode 100644
index 000000000..07fad2f60
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_draft.cfg
@@ -0,0 +1,93 @@
+
+// Load instance group. 0 disable, 1 enable
+load_ig = 0;
+
+// Use ig to compute dependencies 0 disable, 1 enable
+compute_dependencies_with_igs = 0;
+
+// Enable shadows. 0 disable, 1 enable
+shadow = 0;
+
+// Landscape ZBuffers size for all the landscape. There is one zbuffer like this one per softshadow sample.
+zbuffer_landscape_size = 32768;
+
+// Object ZBuffers size for all the landscape. This zbuffer is typically finer. There is only one zbuffer like this.
+zbuffer_object_size = 98304;
+
+// Square root of the number of soft shadow samples
+soft_shadow_samples_sqrt = 4;
+
+// Soft shadow jitter (0 ~ 1) to smooth softshadow aliasing when sampling number is small
+soft_shadow_jitter = 0.4;
+
+// Enable the sun contribution. 0 disable, 1 enable
+sun_contribution = 1;
+
+// Enable the sky global illumaniation. 0 disable, 1 enable
+sky_contribution = 0;
+
+// The sky global illumaniation intensity . [0 ~ 1]
+sky_intensity = 0.20;
+
+// Accuracy of the sky global illumaniation algorithm in meter
+global_illumination_cell_size = 5;
+
+// shadow bias for water surfaces
+water_shadow_bias = 0.8;
+
+// ambient lighting for water. [0 ~ 1]
+water_ambient = 0.3;
+
+// diffuse lighting for water. [0 ~ 1]
+water_diffuse = 1.0;
+
+// true if the water color should be modulated with the source diffuse map
+modulate_water_color = 0;
+
+// 1 if the water should receive sky lighting contribution
+sky_contribution_for_water = 0;
+
+// Side length of landscape used to compute the sky global illumaniation in meter
+global_illumination_length = 600;
+
+// Size of the quad grid side in meter. Should be a power of 2. (optimisation)
+quad_grid_size = 512;
+
+// Size of a cell of the quad grid in meter. (optimisation)
+quad_grid_cell_size = 1;
+
+// Number of CPU used to calculate the lightmaps. 0 for automatic detection.
+cpu_num = 0;
+
+/// Evaluation the max vegetable height in meters. This is used to decide wether vegetable of a tile
+/// are above, below, or intersect a water surface (rough approximation).
+/// As a matter of fact, these flags are processed during hte lighting as well.
+vegetable_height = 2;
+
+
+
+
+// ***************************
+// Ig Lighting.
+// ***************************
+// Ig lighting shares also above parameters: sun_direction, shadow, quad_grid_size, quad_grid_cell_size, shapes_path
+
+
+// Oversampling value, must be 0 (disable), 2, 4, 8, 16
+// This apply to surface cells and instances.
+ig_oversampling = 16;
+
+
+// IG Surface Lighting (for ig_light process only)
+
+// If SurfaceLighting enabled, define size of a cell (in meters) in a surface.
+cell_surface_light_size = 1.5;
+
+// If SurfaceLighting enabled, define a deltaZ before raytracing cellPos against lights. Usefull to skip shadow errors like stairs
+cell_raytrace_delta_z = 0.2;
+
+
+// Build debug surface shapes (slows the process)
+build_debug_surface_shape= 0;
+
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_final.cfg b/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_final.cfg
new file mode 100644
index 000000000..522c15d44
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/outgame/properties_final.cfg
@@ -0,0 +1,93 @@
+
+// Load instance group. 0 disable, 1 enable
+load_ig = 1;
+
+// Use ig to compute dependencies 0 disable, 1 enable
+compute_dependencies_with_igs = 1;
+
+// Enable shadows. 0 disable, 1 enable
+shadow = 1;
+
+// Landscape ZBuffers size for all the landscape. There is one zbuffer like this one per softshadow sample.
+zbuffer_landscape_size = 32768;
+
+// Object ZBuffers size for all the landscape. This zbuffer is typically finer. There is only one zbuffer like this.
+zbuffer_object_size = 98304;
+
+// Square root of the number of soft shadow samples
+soft_shadow_samples_sqrt = 4;
+
+// Soft shadow jitter (0 ~ 1) to smooth softshadow aliasing when sampling number is small
+soft_shadow_jitter = 0.4;
+
+// Enable the sun contribution. 0 disable, 1 enable
+sun_contribution = 1;
+
+// Enable the sky global illumaniation. 0 disable, 1 enable
+sky_contribution = 1;
+
+// The sky global illumaniation intensity . [0 ~ 1]
+sky_intensity = 0.20;
+
+// Accuracy of the sky global illumaniation algorithm in meter
+global_illumination_cell_size = 5;
+
+// shadow bias for water surfaces
+water_shadow_bias = 0.8;
+
+// ambient lighting for water. [0 ~ 1]
+water_ambient = 0.3;
+
+// diffuse lighting for water. [0 ~ 1]
+water_diffuse = 1.0;
+
+// true if the water color should be modulated with the source diffuse map
+modulate_water_color = 0;
+
+// 1 if the water should receive sky lighting contribution
+sky_contribution_for_water = 0;
+
+// Side length of landscape used to compute the sky global illumaniation in meter
+global_illumination_length = 600;
+
+// Size of the quad grid side in meter. Should be a power of 2. (optimisation)
+quad_grid_size = 64;
+
+// Size of a cell of the quad grid in meter. (optimisation)
+quad_grid_cell_size = 2;
+
+// Number of CPU used to calculate the lightmaps. 0 for automatic detection.
+cpu_num = 0;
+
+/// Evaluation the max vegetable height in meters. This is used to decide wether vegetable of a tile
+/// are above, below, or intersect a water surface (rough approximation).
+/// As a matter of fact, these flags are processed during hte lighting as well.
+vegetable_height = 2;
+
+
+
+
+// ***************************
+// Ig Lighting.
+// ***************************
+// Ig lighting shares also above parameters: sun_direction, shadow, quad_grid_size, quad_grid_cell_size, shapes_path
+
+
+// Oversampling value, must be 0 (disable), 2, 4, 8, 16
+// This apply to surface cells and instances.
+ig_oversampling = 16;
+
+
+// IG Surface Lighting (for ig_light process only)
+
+// If SurfaceLighting enabled, define size of a cell (in meters) in a surface.
+cell_surface_light_size = 1.5;
+
+// If SurfaceLighting enabled, define a deltaZ before raytracing cellPos against lights. Usefull to skip shadow errors like stairs
+cell_raytrace_delta_z = 0.2;
+
+
+// Build debug surface shapes (slows the process)
+build_debug_surface_shape= 0;
+
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sfx/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/sfx/directories.py
new file mode 100644
index 000000000..5de327a3a
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sfx/directories.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python
+#
+# \file directories.py
+# \brief Directories configuration
+# \date 2010-08-27 17:13GMT
+# \author Jan Boon (Kaetemi)
+# \date 2001-2005
+# \author Nevrax
+# Python port of game data build pipeline.
+# Directories configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "sfx"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
+
+# PS directories
+PsSourceDirectories = [ ]
+PsSourceDirectories += [ "sfx/buildings" ]
+PsSourceDirectories += [ "sfx/environment" ]
+PsSourceDirectories += [ "sfx/fighting" ]
+PsSourceDirectories += [ "sfx/magic" ]
+PsSourceDirectories += [ "sfx/moving" ]
+PsSourceDirectories += [ "sfx/teaser" ]
+PsSourceDirectories += [ "sfx/forage" ]
+PsSourceDirectories += [ "sfx/monsters" ]
+
+# Maps directories
+MapSourceDirectories = [ ]
+MapSourceDirectories += [ "sfx/maps" ]
+
+# Shape directories
+ShapeSourceDirectories = [ ]
+ShapeSourceDirectories += [ "sfx/meshtoparticle" ]
+
+MapUncompressedSourceDirectories = [ ]
+
+
+# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Shape directories
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
+ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
+ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
+ShapeAnimExportDirectory = CommonPath + "/shape_anim"
+
+# PS directories
+PsExportDirectory = CommonPath + "/ps"
+
+
+# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Map directories
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
+
+# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
+ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
+ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
+ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
+
+
+# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+
+# Particule system directory
+PsClientDirectory = "sfx"
+
+# Map directory
+MapClientDirectory = "sfx"
+BitmapClientDirectory = MapClientDirectory
+
+# Shape directory
+ShapeClientDirectory = "sfx"
+
+# Lightmap directory
+LightmapClientDirectory = "sfx"
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sfx/process.py b/code/ryzom/tools/build_gamedata/workspace/common/sfx/process.py
new file mode 100644
index 000000000..a2f63c1ef
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sfx/process.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python
+#
+# \file config.py
+# \brief Process configuration
+# \date 2010-08-27 17:02GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Process configuration.
+#
+# NeL - MMORPG Framework
+# Copyright (C) 2010 Winch Gate Property Limited
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+
+# *** PROCESS CONFIGURATION ***
+
+# *** PROCESS CONFIG ***
+ProcessToComplete = [ ]
+ProcessToComplete += [ "ps" ]
+ProcessToComplete += [ "map" ]
+ProcessToComplete += [ "shape" ]
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "sfx"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
+
+
+# *** SHAPE EXPORT OPTIONS ***
+
+# Compute lightmaps ?
+ShapeExportOptExportLighting = "true"
+
+# Cast shadow in lightmap ?
+ShapeExportOptShadow = "true"
+
+# Lighting limits. 0 : normal, 1 : soft shadows
+ShapeExportOptLightingLimit = 0
+
+# Lightmap lumel size
+ShapeExportOptLumelSize = "0.25"
+
+# Oversampling value. Can be 1, 2, 4 or 8
+ShapeExportOptOversampling = 1
+
+# Does the lightmap must be generated in 8 bits format ?
+ShapeExportOpt8BitsLightmap = "false"
+
+# Does the lightmaps export must generate logs ?
+ShapeExportOptLightmapLog = "true"
+
+# Coarse mesh texture mul size
+TextureMulSizeValue = "1.5"
+
+DoBuildShadowSkin = 0
+
+ClodConfigFile = ""
+
+# *** COARSE MESH TEXTURE NAME ***
+CoarseMeshTextureNames = [ ]
+
+# *** POSTFIX USED BY THE MULTIPLE TILES SYSTEM ***
+MultipleTilesPostfix = [ ]
+MultipleTilesPostfix += [ "_sp" ]
+MultipleTilesPostfix += [ "_su" ]
+MultipleTilesPostfix += [ "_au" ]
+MultipleTilesPostfix += [ "_wi" ]
+
+# *** MAPS OPTIONS ***
+
+ReduceBitmapFactor = 0
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sky/anim_builder.cfg b/code/ryzom/tools/build_gamedata/workspace/common/sky/anim_builder.cfg
new file mode 100644
index 000000000..08128b23e
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/anim_builder.cfg
@@ -0,0 +1,15 @@
+
+// ***************************
+// Animation Optimizer
+// ***************************
+
+// Tracks which contain one of those name (eg "Bip01 Finger11.rotquat") will be mark as "Low Precision".
+// Usefull for memory optimisation. Avoid setting legs or root bones. Warning: case sensitive.
+anim_low_precision_tracks=
+{
+"Finger",
+"Ponytail",
+};
+
+// The Sample Rate.
+anim_sample_rate= 30;
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sky/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/sky/directories.py
index 453850db4..ba46541dd 100644
--- a/code/ryzom/tools/build_gamedata/workspace/common/sky/directories.py
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/directories.py
@@ -27,10 +27,17 @@
#
-# *** COMMON PATH ***
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "sky"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
-CommonName = "sky"
-CommonPath = "common/" + CommonName
+
+# *** SOURCE DIRECTORIES LEVELDESIGN/WORLD ***
+ContinentLeveldesignWorldDirectory = "" # DISABLED
# *** SOURCE DIRECTORIES IN THE DATABASE ***
@@ -54,12 +61,21 @@ MapUncompressedSourceDirectories += [ "sky_v2/textures/setup/jungle" ]
MapUncompressedSourceDirectories += [ "sky_v2/textures/setup/lacustre" ]
MapUncompressedSourceDirectories += [ "sky_v2/textures/textures/nodds" ]
+# Ligo directories
+LigoBaseSourceDirectory = "landscape/ligo"
+
# Ig directories
IgLandSourceDirectories = [ ]
IgOtherSourceDirectories = [ ]
IgOtherSourceDirectories += [ "sky_v2/max" ]
IgPrimitiveSourceDirectories = [ ]
+# Tiles root directory
+TileRootSourceDirectory = "landscape/_texture_tiles"
+
+# Displace directory
+DisplaceSourceDirectory = "landscape/_texture_tiles/displace"
+
# Animation directories
AnimSourceDirectories = [ ]
AnimSourceDirectories += [ "sky_v2/max" ]
@@ -69,7 +85,7 @@ AnimSourceDirectories += [ "sky_v2/max" ]
# Shape directories
ShapeTagExportDirectory = CommonPath + "/shape_tag"
-ShapeExportDirectory = CommonPath + "/shape"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
ShapeAnimExportDirectory = CommonPath + "/shape_anim"
@@ -79,6 +95,17 @@ IgStaticLandExportDirectory = CommonPath + "/ig_static_land" # Landscape IG epor
IgStaticOtherExportDirectory = CommonPath + "/ig_static_other" # Village or construction IGs exported from 3dsmax
IgStaticTagExportDirectory = CommonPath + "/ig_static_tag" # Tag for exported 3dsmax files
+# Zone directories
+ZoneWeldBuildDirectory = CommonPath + "/zone_weld"
+ZoneDependBuildDirectory = CommonPath + "/zone_depend"
+ZoneLightWaterShapesLightedExportDirectory = CommonPath + "/zone_lwsl_temp" #fixme
+ZoneLightBuildDirectory = CommonPath + "/zone_lighted" #fixme
+ZoneLightDependBuildDirectory = CommonPath + "/zone_lighted_depend" #fixme
+ZoneLightIgLandBuildDirectory = CommonPath + "/zone_lighted_ig_land" #fixme
+
+# Animation directories
+AnimExportDirectory = CommonPath + "/anim_export"
+
# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
@@ -87,6 +114,7 @@ MapBuildDirectory = CommonPath + "/map"
MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
@@ -101,13 +129,22 @@ IgLandBuildDirectory = CommonPath + "/ig_land" # Final IG directory for landscap
IgOtherBuildDirectory = CommonPath + "/ig_other" # Final IG directory for village or construction IGs
IgOtherLightedBuildDirectory = CommonPath + "/ig_other_lighted"
+# Farbank directories
+FarbankBuildDirectory = CommonPath + "/farbank"
+
+# Ligo directories
+LigoZoneBuildDirectory = CommonPath + "/ligo_zones"
+LigoIgLandBuildDirectory = CommonPath + "/ligo_ig_land" # Landscape IG found in ligo bricks not elevated by the heightmap
+LigoIgOtherBuildDirectory = CommonPath + "/ligo_ig_other" # Village or construction IGs exported from ligo landscape
+
+# Animation directories
+AnimBuildDirectory = CommonPath + "/anim"
+
# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
# Map directory
MapClientDirectory = CommonName
-
-# Map directory
BitmapClientDirectory = MapClientDirectory
# Shape directory
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sky/process.py b/code/ryzom/tools/build_gamedata/workspace/common/sky/process.py
index 84d2dac64..e68c6853e 100644
--- a/code/ryzom/tools/build_gamedata/workspace/common/sky/process.py
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/process.py
@@ -26,13 +26,24 @@
# *** PROCESS CONFIGURATION ***
+
# *** PROCESS CONFIG ***
ProcessToComplete = [ ]
+ProcessToComplete += [ "properties" ]
ProcessToComplete += [ "shape" ]
ProcessToComplete += [ "map" ]
-#ProcessToComplete += [ "anim" ]
-#ProcessToComplete += [ "ig" ]
-#ProcessToComplete += [ "ig_light" ]
+ProcessToComplete += [ "anim" ]
+ProcessToComplete += [ "ig" ]
+ProcessToComplete += [ "ig_light" ]
+
+
+# *** COMMON NAMES AND PATHS ***
+EcosystemName = "sky"
+EcosystemPath = "common/" + EcosystemName
+ContinentName = EcosystemName
+ContinentPath = EcosystemPath
+CommonName = ContinentName
+CommonPath = ContinentPath
# *** SHAPE EXPORT OPTIONS ***
@@ -65,9 +76,11 @@ DoBuildShadowSkin = 0
ClodConfigFile = ""
+
# *** COARSE MESH TEXTURE NAME ***
CoarseMeshTextureNames = [ ]
+
# *** POSTFIX USED BY THE MULTIPLE TILES SYSTEM ***
MultipleTilesPostfix = [ ]
MultipleTilesPostfix += [ "_sp" ]
@@ -75,6 +88,30 @@ MultipleTilesPostfix += [ "_su" ]
MultipleTilesPostfix += [ "_au" ]
MultipleTilesPostfix += [ "_wi" ]
+# Name of the tilebank to use
+BankTileBankName = ""
+
+
+# *** LANDSCAPE NAME ***
+LandscapeName = ContinentName
+
+
+# *** LIGO OPTIONS ***
+LigoExportLand = ""
+LigoExportOnePass = 0
+LigoExportColormap = "colormap_invalid.png"
+LigoExportHeightmap1 = "big_invalid.png"
+LigoExportZFactor1 = "1.0"
+LigoExportHeightmap2 = "noise_invalid.png"
+LigoExportZFactor2 = "0.5"
+LigoTileBankFile = "landscape/_texture_tiles/jungle/jungle.bank"
+
+
# *** MAPS OPTIONS ***
ReduceBitmapFactor = 0
+
+
+# *** ANIMATIONS OPTIONS ***
+
+DoOptimizeAnimations = 0
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_base.cfg b/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_base.cfg
new file mode 100644
index 000000000..6b6cd9e75
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_base.cfg
@@ -0,0 +1,51 @@
+
+// Bank file name
+bank_name = "%ExportBuildDirectory%/ecosystems/jungle/smallbank/jungle.smallbank";
+bankfar_name = "%ExportBuildDirectory%/ecosystems/jungle/farbank/jungle.farbank";
+
+// Search pathes
+search_pathes =
+{
+ "%ExportBuildDirectory%/common/sfx/ps", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape_with_coarse_mesh", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/map", // Sfx directory
+ "%ExportBuildDirectory%/common/sky/shape", // Sky directory
+ "%ExportBuildDirectory%/common/sky/shape_with_coarse_mesh", // Sky directory
+ "%ExportBuildDirectory%/common/sky/map", // Sky directory
+};
+
+// Additional ig file name
+additionnal_ig =
+{
+
+};
+
+// Sun direction.
+//sun_direction = { -0.095, +1.0, -0.50 };
+sun_direction = { -0.776685, +0.216619, -0.59147 };
+
+// Center of the landscape pointed by the sun
+sun_center = {9954, -11017, 0};
+
+// Distance of the sun
+sun_distance = 50000;
+
+// FOV of the sun in radian
+sun_fov = 0.52359877; // Pi / 6
+
+// Sun radius, (for softshadow sampling)
+sun_radius = 5000;
+
+// GlobalRetriever bank file.gr. Empty string to disable SurfaceLighting
+grbank= "%ExportBuildDirectory%/continents/newbieland/rbank_output/newbieland.gr";
+
+// LocalRetriever bank file .rbank. Empty string to disable SurfaceLighting
+rbank= "%ExportBuildDirectory%/continents/newbieland/rbank_output/newbieland.rbank";
+
+// The lighter search in rbank any retriever with identifier ---igname*** as substring
+// where --- is col_identifier_prefix and *** is col_identifier_suffix
+// eg: if igname= "street", col_identifier_prefix= "col_", col_identifier_suffix= "_",
+// then "col_street_1" and "col_street_2" are valid and are used to build LightSurface infos in the Ig.
+col_identifier_prefix= "";
+col_identifier_suffix= "";
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_draft.cfg b/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_draft.cfg
new file mode 100644
index 000000000..07fad2f60
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_draft.cfg
@@ -0,0 +1,93 @@
+
+// Load instance group. 0 disable, 1 enable
+load_ig = 0;
+
+// Use ig to compute dependencies 0 disable, 1 enable
+compute_dependencies_with_igs = 0;
+
+// Enable shadows. 0 disable, 1 enable
+shadow = 0;
+
+// Landscape ZBuffers size for all the landscape. There is one zbuffer like this one per softshadow sample.
+zbuffer_landscape_size = 32768;
+
+// Object ZBuffers size for all the landscape. This zbuffer is typically finer. There is only one zbuffer like this.
+zbuffer_object_size = 98304;
+
+// Square root of the number of soft shadow samples
+soft_shadow_samples_sqrt = 4;
+
+// Soft shadow jitter (0 ~ 1) to smooth softshadow aliasing when sampling number is small
+soft_shadow_jitter = 0.4;
+
+// Enable the sun contribution. 0 disable, 1 enable
+sun_contribution = 1;
+
+// Enable the sky global illumaniation. 0 disable, 1 enable
+sky_contribution = 0;
+
+// The sky global illumaniation intensity . [0 ~ 1]
+sky_intensity = 0.20;
+
+// Accuracy of the sky global illumaniation algorithm in meter
+global_illumination_cell_size = 5;
+
+// shadow bias for water surfaces
+water_shadow_bias = 0.8;
+
+// ambient lighting for water. [0 ~ 1]
+water_ambient = 0.3;
+
+// diffuse lighting for water. [0 ~ 1]
+water_diffuse = 1.0;
+
+// true if the water color should be modulated with the source diffuse map
+modulate_water_color = 0;
+
+// 1 if the water should receive sky lighting contribution
+sky_contribution_for_water = 0;
+
+// Side length of landscape used to compute the sky global illumaniation in meter
+global_illumination_length = 600;
+
+// Size of the quad grid side in meter. Should be a power of 2. (optimisation)
+quad_grid_size = 512;
+
+// Size of a cell of the quad grid in meter. (optimisation)
+quad_grid_cell_size = 1;
+
+// Number of CPU used to calculate the lightmaps. 0 for automatic detection.
+cpu_num = 0;
+
+/// Evaluation the max vegetable height in meters. This is used to decide wether vegetable of a tile
+/// are above, below, or intersect a water surface (rough approximation).
+/// As a matter of fact, these flags are processed during hte lighting as well.
+vegetable_height = 2;
+
+
+
+
+// ***************************
+// Ig Lighting.
+// ***************************
+// Ig lighting shares also above parameters: sun_direction, shadow, quad_grid_size, quad_grid_cell_size, shapes_path
+
+
+// Oversampling value, must be 0 (disable), 2, 4, 8, 16
+// This apply to surface cells and instances.
+ig_oversampling = 16;
+
+
+// IG Surface Lighting (for ig_light process only)
+
+// If SurfaceLighting enabled, define size of a cell (in meters) in a surface.
+cell_surface_light_size = 1.5;
+
+// If SurfaceLighting enabled, define a deltaZ before raytracing cellPos against lights. Usefull to skip shadow errors like stairs
+cell_raytrace_delta_z = 0.2;
+
+
+// Build debug surface shapes (slows the process)
+build_debug_surface_shape= 0;
+
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_final.cfg b/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_final.cfg
new file mode 100644
index 000000000..522c15d44
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/properties_final.cfg
@@ -0,0 +1,93 @@
+
+// Load instance group. 0 disable, 1 enable
+load_ig = 1;
+
+// Use ig to compute dependencies 0 disable, 1 enable
+compute_dependencies_with_igs = 1;
+
+// Enable shadows. 0 disable, 1 enable
+shadow = 1;
+
+// Landscape ZBuffers size for all the landscape. There is one zbuffer like this one per softshadow sample.
+zbuffer_landscape_size = 32768;
+
+// Object ZBuffers size for all the landscape. This zbuffer is typically finer. There is only one zbuffer like this.
+zbuffer_object_size = 98304;
+
+// Square root of the number of soft shadow samples
+soft_shadow_samples_sqrt = 4;
+
+// Soft shadow jitter (0 ~ 1) to smooth softshadow aliasing when sampling number is small
+soft_shadow_jitter = 0.4;
+
+// Enable the sun contribution. 0 disable, 1 enable
+sun_contribution = 1;
+
+// Enable the sky global illumaniation. 0 disable, 1 enable
+sky_contribution = 1;
+
+// The sky global illumaniation intensity . [0 ~ 1]
+sky_intensity = 0.20;
+
+// Accuracy of the sky global illumaniation algorithm in meter
+global_illumination_cell_size = 5;
+
+// shadow bias for water surfaces
+water_shadow_bias = 0.8;
+
+// ambient lighting for water. [0 ~ 1]
+water_ambient = 0.3;
+
+// diffuse lighting for water. [0 ~ 1]
+water_diffuse = 1.0;
+
+// true if the water color should be modulated with the source diffuse map
+modulate_water_color = 0;
+
+// 1 if the water should receive sky lighting contribution
+sky_contribution_for_water = 0;
+
+// Side length of landscape used to compute the sky global illumaniation in meter
+global_illumination_length = 600;
+
+// Size of the quad grid side in meter. Should be a power of 2. (optimisation)
+quad_grid_size = 64;
+
+// Size of a cell of the quad grid in meter. (optimisation)
+quad_grid_cell_size = 2;
+
+// Number of CPU used to calculate the lightmaps. 0 for automatic detection.
+cpu_num = 0;
+
+/// Evaluation the max vegetable height in meters. This is used to decide wether vegetable of a tile
+/// are above, below, or intersect a water surface (rough approximation).
+/// As a matter of fact, these flags are processed during hte lighting as well.
+vegetable_height = 2;
+
+
+
+
+// ***************************
+// Ig Lighting.
+// ***************************
+// Ig lighting shares also above parameters: sun_direction, shadow, quad_grid_size, quad_grid_cell_size, shapes_path
+
+
+// Oversampling value, must be 0 (disable), 2, 4, 8, 16
+// This apply to surface cells and instances.
+ig_oversampling = 16;
+
+
+// IG Surface Lighting (for ig_light process only)
+
+// If SurfaceLighting enabled, define size of a cell (in meters) in a surface.
+cell_surface_light_size = 1.5;
+
+// If SurfaceLighting enabled, define a deltaZ before raytracing cellPos against lights. Usefull to skip shadow errors like stairs
+cell_raytrace_delta_z = 0.2;
+
+
+// Build debug surface shapes (slows the process)
+build_debug_surface_shape= 0;
+
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/directories.py b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/directories.py
index cec353865..381f6be4b 100644
--- a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/directories.py
+++ b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/directories.py
@@ -42,6 +42,16 @@ ContinentLeveldesignWorldDirectory = ContinentName
# *** SOURCE DIRECTORIES IN THE DATABASE ***
+# Shape directories
+ShapeSourceDirectories = [ ]
+ShapeSourceDirectories += [ "stuff/" + ContinentName + "/sky" ]
+
+# Maps directories
+MapSourceDirectories = [ ]
+MapSourceDirectories += [ "stuff/" + ContinentName + "/sky" ]
+
+MapUncompressedSourceDirectories = [ ]
+
# Ligo directories
LigoBaseSourceDirectory = "landscape/ligo/" + EcosystemName
LigoMaxSourceDirectory = LigoBaseSourceDirectory + "/max"
@@ -63,9 +73,20 @@ TileRootSourceDirectory = "landscape/_texture_tiles/" + EcosystemName
# Displace directory
DisplaceSourceDirectory = "landscape/_texture_tiles/" + EcosystemName + "/displace"
+# Ligo primitive directory used in the client
+PsSourceDirectories = [ ]
+PsSourceDirectories += [ "primitive_microlife/" + ContinentName ]
+
# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+# Shape directories
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
+ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
+ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
+ShapeAnimExportDirectory = CommonPath + "/shape_anim"
+
# Ligo directories
LigoDatabaseExportDirectory = "landscape/ligo/" + EcosystemName
LigoDatabaseIgExportDirectory = LigoDatabaseExportDirectory + "/igs"
@@ -89,57 +110,80 @@ IgStaticLandExportDirectory = ContinentPath + "/ig_static_land" # Landscape IG e
IgStaticOtherExportDirectory = ContinentPath + "/ig_static_other" # Village or construction IGs exported from 3dsmax
IgStaticTagExportDirectory = ContinentPath + "/ig_static_tag" # Tag for exported 3dsmax files
+# PS directories
+PsExportDirectory = CommonPath + "/ps"
+
# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
+# Map directories
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
+
+# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
+ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
+ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
+ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
+
# Ligo directories
-LigoZoneBuildDirectory = ContinentPath + "/ligo_zones"
-LigoIgLandBuildDirectory = ContinentPath + "/ligo_ig_land" # Landscape IG found in ligo bricks not elevated by the heightmap
-LigoIgOtherBuildDirectory = ContinentPath + "/ligo_ig_other" # Village or construction IGs exported from ligo landscape
+LigoZoneBuildDirectory = CommonPath + "/ligo_zones"
+LigoIgLandBuildDirectory = CommonPath + "/ligo_ig_land" # Landscape IG found in ligo bricks not elevated by the heightmap
+LigoIgOtherBuildDirectory = CommonPath + "/ligo_ig_other" # Village or construction IGs exported from ligo landscape
# Zone directories
-ZoneWeldBuildDirectory = ContinentPath + "/zone_weld"
-ZoneDependBuildDirectory = ContinentPath + "/zone_depend"
-ZoneLightWaterShapesLightedExportDirectory = ContinentPath + "/zone_lwsl_temp" #fixme
-ZoneLightBuildDirectory = ContinentPath + "/zone_lighted" #fixme
-ZoneLightDependBuildDirectory = ContinentPath + "/zone_lighted_depend" #fixme
-ZoneLightIgLandBuildDirectory = ContinentPath + "/zone_lighted_ig_land" #fixme
+ZoneWeldBuildDirectory = CommonPath + "/zone_weld"
+ZoneDependBuildDirectory = CommonPath + "/zone_depend"
+ZoneLightWaterShapesLightedExportDirectory = CommonPath + "/zone_lwsl_temp" #fixme
+ZoneLightBuildDirectory = CommonPath + "/zone_lighted" #fixme
+ZoneLightDependBuildDirectory = CommonPath + "/zone_lighted_depend" #fixme
+ZoneLightIgLandBuildDirectory = CommonPath + "/zone_lighted_ig_land" #fixme
# Farbank directories
FarbankBuildDirectory = EcosystemPath + "/farbank"
# Ig directories
-IgElevLandPrimBuildDirectory = ContinentPath + "/ig_elev_land_prim" # landscape IG generated by the prim exporter (already elevated by the land exporter)
-IgElevLandLigoBuildDirectory = ContinentPath + "/ig_elev_land_ligo" # Landscape IG found in ligo bricks from 3dsmax elevated by the heightmap
-IgElevLandStaticBuildDirectory = ContinentPath + "/ig_elev_land_static" # Landscape IG eported from 3dsmax elevated by the heightmap
-IgTempLandMergeBuildDirectory = ContinentPath + "/ig_temp_land_merge"
-IgTempLandCompareBuildDirectory = ContinentPath + "/ig_temp_land_compare" # Tmp final IG directory for landscape IGs before comparison
-IgLandBuildDirectory = ContinentPath + "/ig_land" # Final IG directory for landscape IGs
-IgOtherBuildDirectory = ContinentPath + "/ig_other" # Final IG directory for village or construction IGs
-IgOtherLightedBuildDirectory = ContinentPath + "/ig_other_lighted"
+IgElevLandPrimBuildDirectory = CommonPath + "/ig_elev_land_prim" # landscape IG generated by the prim exporter (already elevated by the land exporter)
+IgElevLandLigoBuildDirectory = CommonPath + "/ig_elev_land_ligo" # Landscape IG found in ligo bricks from 3dsmax elevated by the heightmap
+IgElevLandStaticBuildDirectory = CommonPath + "/ig_elev_land_static" # Landscape IG eported from 3dsmax elevated by the heightmap
+IgTempLandMergeBuildDirectory = CommonPath + "/ig_temp_land_merge"
+IgTempLandCompareBuildDirectory = CommonPath + "/ig_temp_land_compare" # Tmp final IG directory for landscape IGs before comparison
+IgLandBuildDirectory = CommonPath + "/ig_land" # Final IG directory for landscape IGs
+IgOtherBuildDirectory = CommonPath + "/ig_other" # Final IG directory for village or construction IGs
+IgOtherLightedBuildDirectory = CommonPath + "/ig_other_lighted"
# Rbank directories
-RbankBboxBuildDirectory = ContinentPath + "/rbank_bbox"
-RbankTessellationBuildDirectory = ContinentPath + "/rbank_tessellation"
-RbankSmoothBuildDirectory = ContinentPath + "/rbank_smooth"
-RbankRawBuildDirectory = ContinentPath + "/rbank_raw"
-RbankPreprocBuildDirectory = ContinentPath + "/rbank_preproc"
-RbankMeshBuildDirectory = ContinentPath + "/rbank_cmb"
-RbankRetrieversBuildDirectory = ContinentPath + "/rbank_retrievers"
-RbankOutputBuildDirectory = ContinentPath + "/rbank_output"
+RbankBboxBuildDirectory = CommonPath + "/rbank_bbox"
+RbankTessellationBuildDirectory = CommonPath + "/rbank_tessellation"
+RbankSmoothBuildDirectory = CommonPath + "/rbank_smooth"
+RbankRawBuildDirectory = CommonPath + "/rbank_raw"
+RbankPreprocBuildDirectory = CommonPath + "/rbank_preproc"
+RbankMeshBuildDirectory = CommonPath + "/rbank_cmb"
+RbankRetrieversBuildDirectory = CommonPath + "/rbank_retrievers"
+RbankOutputBuildDirectory = CommonPath + "/rbank_output"
# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+# Map directory
+MapClientDirectory = CommonName + "_maps"
+BitmapClientDirectory = MapClientDirectory
+
+# Shape directory
+ShapeClientDirectory = CommonName + "_shapes"
+
+# Shape lightmaps directory
+LightmapClientDirectory = ShapeClientDirectory
+
# Ig directory
-IgClientDirectory = ContinentName + "_ig"
+IgClientDirectory = CommonName + "_ig"
# Zone directory
-ZoneClientDirectory = ContinentName + "_zones"
-WaterMapsClientDirectory = ContinentName + "_zones"
+ZoneClientDirectory = CommonName + "_zones"
+WaterMapsClientDirectory = ZoneClientDirectory
# PACS directory
-PacsClientDirectory = ContinentName + "_pacs"
+PacsClientDirectory = CommonName + "_pacs"
# PS directory
-IgClientDirectory = ContinentName + "_ig"
+PsClientDirectory = CommonName + "_ig"
diff --git a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/process.py b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/process.py
index b543cba32..b13dcfc78 100644
--- a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/process.py
+++ b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/process.py
@@ -29,13 +29,16 @@
# *** PROCESS CONFIG ***
ProcessToComplete = [ ]
+ProcessToComplete += [ "properties" ]
+ProcessToComplete += [ "map" ]
+ProcessToComplete += [ "shape" ]
ProcessToComplete += [ "ligo" ] # not fully implemented, works for this process (not yet), but does not export max files
ProcessToComplete += [ "zone" ] # works, need to check completeness
ProcessToComplete += [ "ig" ] # fully implemented
ProcessToComplete += [ "zone_light" ] # works, need to check completeness
ProcessToComplete += [ "rbank" ] # works, need to check completeness
ProcessToComplete += [ "ig_light" ] # fully implemented
-#ProcessToComplete += [ "ps" ] # not implemented
+ProcessToComplete += [ "ps" ]
# *** ECOSYSTEM AND CONTINENT NAMES ***
@@ -50,6 +53,40 @@ LandscapeName = ContinentName
ContinentFile = ContinentName + "/" + ContinentName + ".continent"
+
+# *** SHAPE EXPORT OPTIONS ***
+
+# Compute lightmaps ?
+ShapeExportOptExportLighting = "true"
+
+# Cast shadow in lightmap ?
+ShapeExportOptShadow = "true"
+
+# Lighting limits. 0 : normal, 1 : soft shadows
+ShapeExportOptLightingLimit = 0
+
+# Lightmap lumel size
+ShapeExportOptLumelSize = "0.25"
+
+# Oversampling value. Can be 1, 2, 4 or 8
+ShapeExportOptOversampling = 1
+
+# Does the lightmap must be generated in 8 bits format ?
+ShapeExportOpt8BitsLightmap = "false"
+
+# Does the lightmaps export must generate logs ?
+ShapeExportOptLightmapLog = "true"
+
+# Coarse mesh texture mul size
+TextureMulSizeValue = "1.5"
+
+DoBuildShadowSkin = 0
+
+ClodConfigFile = ""
+
+# *** COARSE MESH TEXTURE NAME ***
+CoarseMeshTextureNames = [ ]
+
# *** BANK EXPORT OPTIONS ***
# *** POSTFIX USED BY THE MULTIPLE TILES SYSTEM ***
@@ -111,3 +148,7 @@ RbankShapePaths += [ "ecosystems/" + EcosystemName + "/shape_with_coarse_mesh_bu
RbankShapePaths += [ "common/sfx/ps" ]
# RbankShapePaths += [ "l:/leveldesign/world_edit_files" ]
+# *** MAPS OPTIONS ***
+
+ReduceBitmapFactor = 0
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_base.cfg b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_base.cfg
similarity index 52%
rename from code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_base.cfg
rename to code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_base.cfg
index 4b886d584..27c73e966 100644
--- a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/zone_lighter_base.cfg
+++ b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_base.cfg
@@ -6,15 +6,19 @@ bankfar_name = "%ExportBuildDirectory%/%FarbankBuildDirectory%/%EcosystemName%.f
// Search pathes
search_pathes =
{
- "%ExportBuildDirectory%/continents/newbieland/ig_land", // Instance group directory
- "%ExportBuildDirectory%/continents/newbieland/ig_other", // Instance group directory
- "%ExportBuildDirectory%/continents/newbieland/shape", // Shape directory
- "%ExportBuildDirectory%/continents/newbieland/shape_with_coarse_mesh", // Shape directory
- "%ExportBuildDirectory%/common/sfx/processes/ps/ps", // Sfx directory
- "%ExportBuildDirectory%/ecosystems/jungle/shape", // Shape directory
- "%ExportBuildDirectory%/ecosystems/jungle/shape_with_coarse_mesh", // Shape directory
- "%ExportBuildDirectory%/ecosystems/jungle/map/tga", // Map directory
- "%ExportBuildDirectory%/continents/newbieland/zone_light/water_shapes_lighted", // Water shape lighted directory
+ "%ExportBuildDirectory%/common/sfx/ps", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/shape_with_coarse_mesh", // Sfx directory
+ "%ExportBuildDirectory%/common/sfx/map", // Sfx directory
+ "%ExportBuildDirectory%/ecosystems/%EcosystemName%/shape", // Shape directory
+ "%ExportBuildDirectory%/ecosystems/%EcosystemName%/shape_with_coarse_mesh", // Shape directory
+ "%ExportBuildDirectory%/ecosystems/%EcosystemName%/map", // Map directory
+ "%ExportBuildDirectory%/continents/%ContinentName%/zone_light/water_shapes_lighted", // Water shape lighted directory
+ "%ExportBuildDirectory%/continents/%ContinentName%/ig_land", // Instance group directory
+ "%ExportBuildDirectory%/continents/%ContinentName%/ig_other", // Instance group directory
+ "%ExportBuildDirectory%/continents/%ContinentName%/shape", // Shape directory
+ "%ExportBuildDirectory%/continents/%ContinentName%/shape_with_coarse_mesh", // Shape directory
+ "%ExportBuildDirectory%/continents/%ContinentName%/map", // Map directory
};
// Additional ig file name
diff --git a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_draft.cfg b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_draft.cfg
new file mode 100644
index 000000000..07fad2f60
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_draft.cfg
@@ -0,0 +1,93 @@
+
+// Load instance group. 0 disable, 1 enable
+load_ig = 0;
+
+// Use ig to compute dependencies 0 disable, 1 enable
+compute_dependencies_with_igs = 0;
+
+// Enable shadows. 0 disable, 1 enable
+shadow = 0;
+
+// Landscape ZBuffers size for all the landscape. There is one zbuffer like this one per softshadow sample.
+zbuffer_landscape_size = 32768;
+
+// Object ZBuffers size for all the landscape. This zbuffer is typically finer. There is only one zbuffer like this.
+zbuffer_object_size = 98304;
+
+// Square root of the number of soft shadow samples
+soft_shadow_samples_sqrt = 4;
+
+// Soft shadow jitter (0 ~ 1) to smooth softshadow aliasing when sampling number is small
+soft_shadow_jitter = 0.4;
+
+// Enable the sun contribution. 0 disable, 1 enable
+sun_contribution = 1;
+
+// Enable the sky global illumaniation. 0 disable, 1 enable
+sky_contribution = 0;
+
+// The sky global illumaniation intensity . [0 ~ 1]
+sky_intensity = 0.20;
+
+// Accuracy of the sky global illumaniation algorithm in meter
+global_illumination_cell_size = 5;
+
+// shadow bias for water surfaces
+water_shadow_bias = 0.8;
+
+// ambient lighting for water. [0 ~ 1]
+water_ambient = 0.3;
+
+// diffuse lighting for water. [0 ~ 1]
+water_diffuse = 1.0;
+
+// true if the water color should be modulated with the source diffuse map
+modulate_water_color = 0;
+
+// 1 if the water should receive sky lighting contribution
+sky_contribution_for_water = 0;
+
+// Side length of landscape used to compute the sky global illumaniation in meter
+global_illumination_length = 600;
+
+// Size of the quad grid side in meter. Should be a power of 2. (optimisation)
+quad_grid_size = 512;
+
+// Size of a cell of the quad grid in meter. (optimisation)
+quad_grid_cell_size = 1;
+
+// Number of CPU used to calculate the lightmaps. 0 for automatic detection.
+cpu_num = 0;
+
+/// Evaluation the max vegetable height in meters. This is used to decide wether vegetable of a tile
+/// are above, below, or intersect a water surface (rough approximation).
+/// As a matter of fact, these flags are processed during hte lighting as well.
+vegetable_height = 2;
+
+
+
+
+// ***************************
+// Ig Lighting.
+// ***************************
+// Ig lighting shares also above parameters: sun_direction, shadow, quad_grid_size, quad_grid_cell_size, shapes_path
+
+
+// Oversampling value, must be 0 (disable), 2, 4, 8, 16
+// This apply to surface cells and instances.
+ig_oversampling = 16;
+
+
+// IG Surface Lighting (for ig_light process only)
+
+// If SurfaceLighting enabled, define size of a cell (in meters) in a surface.
+cell_surface_light_size = 1.5;
+
+// If SurfaceLighting enabled, define a deltaZ before raytracing cellPos against lights. Usefull to skip shadow errors like stairs
+cell_raytrace_delta_z = 0.2;
+
+
+// Build debug surface shapes (slows the process)
+build_debug_surface_shape= 0;
+
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_final.cfg b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_final.cfg
new file mode 100644
index 000000000..522c15d44
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/properties_final.cfg
@@ -0,0 +1,93 @@
+
+// Load instance group. 0 disable, 1 enable
+load_ig = 1;
+
+// Use ig to compute dependencies 0 disable, 1 enable
+compute_dependencies_with_igs = 1;
+
+// Enable shadows. 0 disable, 1 enable
+shadow = 1;
+
+// Landscape ZBuffers size for all the landscape. There is one zbuffer like this one per softshadow sample.
+zbuffer_landscape_size = 32768;
+
+// Object ZBuffers size for all the landscape. This zbuffer is typically finer. There is only one zbuffer like this.
+zbuffer_object_size = 98304;
+
+// Square root of the number of soft shadow samples
+soft_shadow_samples_sqrt = 4;
+
+// Soft shadow jitter (0 ~ 1) to smooth softshadow aliasing when sampling number is small
+soft_shadow_jitter = 0.4;
+
+// Enable the sun contribution. 0 disable, 1 enable
+sun_contribution = 1;
+
+// Enable the sky global illumaniation. 0 disable, 1 enable
+sky_contribution = 1;
+
+// The sky global illumaniation intensity . [0 ~ 1]
+sky_intensity = 0.20;
+
+// Accuracy of the sky global illumaniation algorithm in meter
+global_illumination_cell_size = 5;
+
+// shadow bias for water surfaces
+water_shadow_bias = 0.8;
+
+// ambient lighting for water. [0 ~ 1]
+water_ambient = 0.3;
+
+// diffuse lighting for water. [0 ~ 1]
+water_diffuse = 1.0;
+
+// true if the water color should be modulated with the source diffuse map
+modulate_water_color = 0;
+
+// 1 if the water should receive sky lighting contribution
+sky_contribution_for_water = 0;
+
+// Side length of landscape used to compute the sky global illumaniation in meter
+global_illumination_length = 600;
+
+// Size of the quad grid side in meter. Should be a power of 2. (optimisation)
+quad_grid_size = 64;
+
+// Size of a cell of the quad grid in meter. (optimisation)
+quad_grid_cell_size = 2;
+
+// Number of CPU used to calculate the lightmaps. 0 for automatic detection.
+cpu_num = 0;
+
+/// Evaluation the max vegetable height in meters. This is used to decide wether vegetable of a tile
+/// are above, below, or intersect a water surface (rough approximation).
+/// As a matter of fact, these flags are processed during hte lighting as well.
+vegetable_height = 2;
+
+
+
+
+// ***************************
+// Ig Lighting.
+// ***************************
+// Ig lighting shares also above parameters: sun_direction, shadow, quad_grid_size, quad_grid_cell_size, shapes_path
+
+
+// Oversampling value, must be 0 (disable), 2, 4, 8, 16
+// This apply to surface cells and instances.
+ig_oversampling = 16;
+
+
+// IG Surface Lighting (for ig_light process only)
+
+// If SurfaceLighting enabled, define size of a cell (in meters) in a surface.
+cell_surface_light_size = 1.5;
+
+// If SurfaceLighting enabled, define a deltaZ before raytracing cellPos against lights. Usefull to skip shadow errors like stairs
+cell_raytrace_delta_z = 0.2;
+
+
+// Build debug surface shapes (slows the process)
+build_debug_surface_shape= 0;
+
+
diff --git a/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/directories.py b/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/directories.py
index e888b35b8..c6fbe35cf 100644
--- a/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/directories.py
+++ b/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/directories.py
@@ -150,7 +150,7 @@ PacsPrimSourceDirectories += [ "stuff/" + EcosystemName + "/decors/vegetations"
# Shape directories
ShapeTagExportDirectory = CommonPath + "/shape_tag"
-ShapeExportDirectory = CommonPath + "/shape"
+ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
ShapeAnimExportDirectory = CommonPath + "/shape_anim"
@@ -182,6 +182,9 @@ LigoTagExportDirectory = "ecosystems/" + EcosystemName + "/ligo_tag"
# Zone directories
ZoneExportDirectory = "ecosystems/" + EcosystemName + "/zone"
+# PACS primitives directories
+PacsPrimExportDirectory = "ecosystems/" + EcosystemName + "/pacs_prim"
+
# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
@@ -190,6 +193,7 @@ MapBuildDirectory = CommonPath + "/map"
MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
# Shape directories
+ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
@@ -250,4 +254,4 @@ VegetSetClientDirectory = "jungle_vegetable_sets"
VegetClientDirectory = "jungle_vegetables"
# PACS primitives directories
-PacsPrimitiveClientDirectory = "jungle_pacs_prim"
+PacsPrimClientDirectory = "jungle_pacs_prim"
diff --git a/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/process.py b/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/process.py
index 18f80cfe0..babdec16f 100644
--- a/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/process.py
+++ b/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/process.py
@@ -37,7 +37,7 @@ ProcessToComplete += [ "displace" ] # OK
ProcessToComplete += [ "veget" ] # OK
ProcessToComplete += [ "vegetset" ] # OK
ProcessToComplete += [ "ligo" ] # not fully implemented, works for this process, but does not export max files
-##ProcessToComplete += [ "pacs_prim" ]
+ProcessToComplete += [ "pacs_prim" ]
# *** MAP EXPORT OPTIONS ***
PanoplyFileList = [ ]
@@ -110,3 +110,6 @@ ReduceBitmapFactor = 0
DoBuildShadowSkin = False
ClodConfigFile = ""
+
+# *** PACS_PRIM OPTIONS ***
+WantLandscapeColPrimPacsList = True
diff --git a/code/ryzom/tools/build_gamedata/workspace/projects.py b/code/ryzom/tools/build_gamedata/workspace/projects.py
index ac4e3ab72..e04f683f6 100644
--- a/code/ryzom/tools/build_gamedata/workspace/projects.py
+++ b/code/ryzom/tools/build_gamedata/workspace/projects.py
@@ -26,11 +26,32 @@
ProjectsToProcess = [ ]
+
+# Common projects
+ProjectsToProcess += [ "common/fonts" ]
ProjectsToProcess += [ "common/interface" ]
ProjectsToProcess += [ "common/objects" ]
-ProjectsToProcess += [ "common/sky" ]
+ProjectsToProcess += [ "common/sfx" ]
+ProjectsToProcess += [ "common/fauna" ]
+
+# Ecosystem projects
ProjectsToProcess += [ "ecosystems/jungle" ]
+
+# Continent projects
ProjectsToProcess += [ "continents/newbieland" ]
+# Common projects depending on continent projects
+ProjectsToProcess += [ "common/construction" ] # Depends on jungle/newbieland due to ig_light tool usage of properties.cfg...
+ProjectsToProcess += [ "common/outgame" ] # Depends on jungle/newbieland due to ig_light tool usage of properties.cfg...
+ProjectsToProcess += [ "common/sky" ] # Depends on jungle/newbieland due to ig_light tool usage of properties.cfg...
+
+# TODO
+#ProjectsToProcess += [ "common/characters" ] # TODO
+#ProjectsToProcess += [ "common/characters_maps_hr" ] # TODO
+#ProjectsToProcess += [ "common/characters_maps_lr" ] # TODO
+#ProjectsToProcess += [ "ecosystems/desert" ] # TODO
+#ProjectsToProcess += [ "ecosystems/lacustre" ] # TODO
+#ProjectsToProcess += [ "ecosystems/primes_racines" ] # TODO
+
# end of file