diff --git a/code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms b/code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms
index cdff0431c..76956165a 100644
--- a/code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms
+++ b/code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms
@@ -41,22 +41,32 @@ fn getAbsoluteDestination t =
fn getFixedTexturePath t =
(
- if (doesFileExist (getAbsoluteSource t)) then
+ absoluteDestination = (getAbsoluteDestination t)
+ if (not (doesFileExist absoluteDestination)) and (((findString t "\\Stuff\\Fyros\\Decors\\_textures\\Batiments") != undefined) or ((findString t "\\Stuff\\Fyros\\Decors\\_textures\\Accessories\\Vv2\\") != undefined)) then
(
- if not (doesFileExist (getAbsoluteDestination t)) then
+ testDestination = ("W:\\database\\stuff\\Fyros\\Agents\\_textures\\Accessories\\" + (getFilenameFile (filenameFromPath t)) + ".png")
+ if (doesFileExist testDestination) then
(
- makeDir (getFilenamePath (getAbsoluteDestination t)) all:true
- renameFile (getAbsoluteSource t) (getAbsoluteDestination t)
- )
- if (doesFileExist (getAbsoluteDestination t)) then
- (
- if (getAbsoluteDestination t) != (getAbsoluteSource t) then
- (
- deleteFile (getAbsoluteSource t)
- )
+ absoluteDestination = testDestination
)
)
- return (getAbsoluteDestination t)
+ if (not (doesFileExist absoluteDestination)) and (((findString t "\\Stuff\\Fyros\\Decors\\_textures\\Batiments") != undefined) or ((findString t "\\Stuff\\Fyros\\Decors\\_textures\\Accessories\\") != undefined)) then
+ (
+ testDestination = ("W:\\database\\stuff\\Fyros\\Agents\\_textures\\Accessories\\Vv2\\" + (getFilenameFile (filenameFromPath t)) + ".png")
+ if (doesFileExist testDestination) then
+ (
+ absoluteDestination = testDestination
+ )
+ )
+ if (not (doesFileExist absoluteDestination)) and ((findString t "\\Stuff\\Fyros\\Decors\\_textures\\Accessories\\") != undefined) then
+ (
+ testDestination = ("W:\\database\\stuff\\Fyros\\Agents\\_textures\\Batiments\\" + (getFilenameFile (filenameFromPath t)) + ".png")
+ if (doesFileExist testDestination) then
+ (
+ absoluteDestination = testDestination
+ )
+ )
+ return absoluteDestination
)
fn renameTexture t =
@@ -169,12 +179,14 @@ rollout assets_png_rollout "Properties"
m.delegate.ReflectionMap = undefined
m.delegate.RefractionMap = undefined
)
-
+
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
-
+
+ max views redraw
+
return 1
)
diff --git a/code/nel/tools/build_gamedata/configuration/scripts.py b/code/nel/tools/build_gamedata/configuration/scripts.py
index f85bd9117..774061e25 100644
--- a/code/nel/tools/build_gamedata/configuration/scripts.py
+++ b/code/nel/tools/build_gamedata/configuration/scripts.py
@@ -135,6 +135,10 @@ def copyFilesExtNoTreeIfNeeded(log, dir_source, dir_target, file_ext):
files = findFiles(log, dir_source, "", file_ext)
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
+def copyFilesExtNoSubdirIfNeeded(log, dir_source, dir_target, file_ext):
+ files = findFilesNoSubdir(log, dir_source, file_ext)
+ copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
+
def copyFilesNoTreeIfNeeded(log, dir_source, dir_target):
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, os.listdir(dir_source))
@@ -192,7 +196,7 @@ def findFilesNoSubdir(log, dir_where, file_ext):
if fileName[-len_file_ext:].lower() == file_ext.lower():
result += [ fileName ]
elif not os.path.isdir(fileFull):
- printLog(log, "findFilesNoSubdir: file not dir or file?!" + filePath)
+ printLog(log, "findFilesNoSubdir: file not dir or file?!" + fileFull)
return result
def findFile(log, dir_where, file_name):
diff --git a/code/nel/tools/build_gamedata/processes/anim/maxscript/anim_export.ms b/code/nel/tools/build_gamedata/processes/anim/maxscript/anim_export.ms
new file mode 100644
index 000000000..ce7c83405
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/anim/maxscript/anim_export.ms
@@ -0,0 +1,185 @@
+NEL3D_APPDATA_EXPORT_NODE_ANIMATION = 1423062800
+
+
+-- 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 anim_source_directory
+ files = getFiles "anim_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
+ (
+ nlerror ("Scanning file "+files[i]+" ...")
+
+ try
+ (
+ -- Output file
+ output = ("output_directory/"+(getFilenameFile files[i])+".anim")
+
+ -- 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
+ if (loadMaxFile files[i] quiet:true) == true then
+ (
+ -- Unhide category
+ unhidecategory()
+
+ -- Select Bip01, not very smart
+ if $Bip01 != undefined then
+ (
+ select $Bip01
+
+ -- Always uncheck triangle pelvis
+ if (classof $Bip01) == Biped_Object then
+ (
+ $Bip01.controller.figureMode = true
+ $Bip01.controller.trianglepelvis = false
+ $Bip01.controller.figureMode = false
+ )
+ )
+
+ -- For each node
+ for node in objects do
+ (
+ exportNodeAnmation = getappdata node NEL3D_APPDATA_EXPORT_NODE_ANIMATION
+ if (exportNodeAnmation != undefined) then
+ (
+ if (exportNodeAnmation == "1") then
+ (
+ selectmore node
+
+ -- Is it a biped ?
+ if (classof node.controller) == Vertical_Horizontal_Turn then
+ (
+ -- Always uncheck triangle pelvis
+ node.controller.trianglepelvis = false
+ )
+ )
+ )
+ )
+
+ if ((selection as array).count != 0) then
+ (
+ -- Export the animation
+ if (NelExportAnimation (selection as array) output false) == false then
+ (
+ nlerror ("ERROR exporting animation "+files[i])
+ )
+ else
+ (
+ nlerror ("OK "+output)
+ )
+ )
+ else
+ (
+ -- Error
+ nlerror ("ERROR exporting animation: no node animated to export in file "+files[i])
+ )
+ )
+ else
+ (
+ -- Error
+ nlerror ("ERROR exporting animation: can't open the file "+files[i])
+ )
+ )
+ else
+ (
+ nlerror ("SKIPPED "+files[i])
+ )
+ )
+ catch
+ (
+ -- Error
+ nlerror ("ERROR error exporting animation in files " + files[i])
+ )
+ )
+ )
+ else
+ (
+ nlerror ("WARNING no animation file in folder anim_source_directory")
+ )
+)
+catch
+(
+ -- Error
+ nlerror ("ERROR fatal error exporting animation in folder anim_source_directory")
+)
+
+-- Bye
+
+resetMAXFile #noprompt
+quitMAX #noPrompt
+quitMAX () #noPrompt
+
diff --git a/code/nel/tools/build_gamedata/processes/map/2_build.py b/code/nel/tools/build_gamedata/processes/map/2_build.py
index abff9ec7a..44d28979f 100644
--- a/code/nel/tools/build_gamedata/processes/map/2_build.py
+++ b/code/nel/tools/build_gamedata/processes/map/2_build.py
@@ -63,13 +63,13 @@ else:
mkPath(log, sourcePath)
destPath = ExportBuildDirectory + "/" + MapBuildDirectory
mkPath(log, destPath)
- files = findFiles(log, sourcePath, "", ".tga")
+ files = findFilesNoSubdir(log, sourcePath, ".tga")
for file in files:
sourceFile = sourcePath + "/" + file
destFile = destPath + "/" + os.path.basename(file)[0:-len(".tga")] + ".dds"
if needUpdateLogRemoveDest(log, sourceFile, destFile):
subprocess.call([ ExecTimeout, str(MapsBuildTimeout), TgaToDds, sourceFile, "-o", destFile, "-m", "-r" + str(ReduceBitmapFactor) ])
- files = findFiles(log, sourcePath, "", ".png")
+ files = findFilesNoSubdir(log, sourcePath, ".png")
for file in files:
sourceFile = sourcePath + "/" + file
destFile = destPath + "/" + os.path.basename(file)[0:-len(".png")] + ".dds"
@@ -78,14 +78,14 @@ else:
printLog(log, "")
printLog(log, ">>> Build map uncompressed: copy tga, png, dds <<<")
-for dir in MapSourceDirectories:
+for dir in MapUncompressedSourceDirectories:
sourcePath = DatabaseDirectory + "/" + dir
mkPath(log, sourcePath)
destPath = ExportBuildDirectory + "/" + MapBuildDirectory
mkPath(log, destPath)
- copyFilesExtNoTreeIfNeeded(log, sourcePath, destPath, ".dds")
- copyFilesExtNoTreeIfNeeded(log, sourcePath, destPath, ".png")
- copyFilesExtNoTreeIfNeeded(log, sourcePath, destPath, ".tga")
+ copyFilesExtNoSubdirIfNeeded(log, sourcePath, destPath, ".dds")
+ copyFilesExtNoSubdirIfNeeded(log, sourcePath, destPath, ".png")
+ copyFilesExtNoSubdirIfNeeded(log, sourcePath, destPath, ".tga")
printLog(log, ">>> Build panoply <<<")
printLog(log, "********************************")
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 54c53826c..214067583 100644
--- a/code/nel/tools/build_gamedata/processes/shape/0_setup.py
+++ b/code/nel/tools/build_gamedata/processes/shape/0_setup.py
@@ -61,10 +61,13 @@ mkPath(log, ExportBuildDirectory + "/" + ShapeAnimExportDirectory)
# Setup build directories
printLog(log, ">>> Setup build directories <<<")
mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory)
# Setup client directories
printLog(log, ">>> Setup client directories <<<")
mkPath(log, ClientDataDirectory + "/" + ShapeClientDirectory)
+mkPath(log, ClientDataDirectory + "/" + LightmapClientDirectory)
log.close()
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 79f82c191..9ee7a3099 100644
--- a/code/nel/tools/build_gamedata/processes/shape/1_export.py
+++ b/code/nel/tools/build_gamedata/processes/shape/1_export.py
@@ -36,38 +36,9 @@ from process import *
from tools import *
from directories import *
-# Todo: make a tool to verify the files :)
-
def getTagFileName(filePath):
return os.path.split(filePath)[1] + ".tag"
-def hackBigTree():
- return 0
- if EcosystemName == "jungle":
- # FO_S2_big_tree is corrupt on first export...
- outDirTag = ExportBuildDirectory + "/" + ShapeTagExportDirectory
- outDirWithCoarse = ExportBuildDirectory + "/" + ShapeWithCoarseMeshExportDirectory
- shapeName = "FO_S2_big_tree.shape"
- tagName = "FO_S2_big_tree.max.tag"
- hackName = "FO_S2_big_tree_hack.tag"
- if os.path.exists(outDirWithCoarse + "/" + shapeName) and os.path.exists(outDirTag + "/" + tagName) and not os.path.exists(outDirTag + "/" + hackName):
- printLog(log, "Removing bad export of FO_S2_big_tree")
- printLog(log, "RM " + outDirWithCoarse + "/" + shapeName)
- os.remove(outDirWithCoarse + "/" + shapeName)
- printLog(log, "RM " + outDirTag + "/" + tagName)
- os.remove(outDirTag + "/" + tagName)
- printLog(log, "TAG " + outDirTag + "/" + hackName)
- hackTagFile = open(outDirTag + "/" + hackName, "w")
- hackTagFile.write("FO_S2_big_tree")
- hackTagFile.close()
- return 1
- elif os.path.exists(outDirTag + "/" + hackName) and not os.path.exists(outDirWithCoarse + "/" + shapeName) and not os.path.exists(outDirTag + "/" + tagName):
- printLog(log, "Missing export of FO_S2_big_tree")
- return 0
- else:
- return 0
-
-
printLog(log, "")
printLog(log, "-------")
printLog(log, "--- Export shape")
@@ -150,8 +121,9 @@ if MaxAvailable:
subprocess.call([ ExecTimeout, str(MaxShapeExportTimeout), Max, "-U", "MAXScript", "shape_export.ms", "-q", "-mi", "-vn" ])
lSrc = open(logFile, "r")
for line in lSrc:
- if (len(line) > 0):
- printLog(log, line.strip())
+ lineStrip = line.strip()
+ if (len(lineStrip) > 0):
+ printLog(log, lineStrip)
lSrc.close()
os.remove(logFile)
if (os.path.exists(tagFilePath)):
@@ -163,19 +135,6 @@ if MaxAvailable:
os.remove(scriptDst)
else:
printLog(log, "SKIP " + maxFilePath)
-#while tagDiff > 0:
-# printLog(log, "MAXSCRIPT " + scriptDst)
-# subprocess.call([ Max, "-U", "MAXScript", "shape_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!")
-# if not tagDiff > 0:
-# tagDiff += hackBigTree() # force rerun also when big tree deleted
-# if not tagDiff > 0:
-# tagDiff += secondTry
-# secondTry = 0
# Export clod 3dsmax
printLog(log, ">>> Export character lod shape files (.clod) from Max <<<")
@@ -193,6 +152,8 @@ if MaxAvailable:
printLog(log, "")
log.close()
+if os.path.isfile("log.log"):
+ os.remove("log.log")
shutil.move("temp_log.log", "log.log")
# end of file
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 c0e158918..ae2f026bb 100644
--- a/code/nel/tools/build_gamedata/processes/shape/2_build.py
+++ b/code/nel/tools/build_gamedata/processes/shape/2_build.py
@@ -63,17 +63,35 @@ if ClodConfigFile != "":
printLog(log, "******** TODO ********")
printLog(log, "********************************")
-printLog(log, ">>> LightmapOptimizer <<<")
-printLog(log, "********************************")
-printLog(log, "******** TODO ********")
-printLog(log, "********************************")
+printLog(log, ">>> Optimize lightmaps <<<")
+mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeTagExportDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeExportDirectory)
+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" ])
-printLog(log, ">>> TgaToDds <<<")
-printLog(log, "********************************")
-printLog(log, "******** TODO ********")
-printLog(log, "********************************")
+printLog(log, ">>> Convert lightmaps in 16 or 8 bits <<<")
+mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
+mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory)
+lightMapTgas = findFilesNoSubdir(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory, ".tga")
+listLm8Bit = [ ]
+listLm8BitFile = open(ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt", "r")
+for line in listLm8BitFile:
+ lineStrip = line.strip()
+ if (len(lineStrip) > 0):
+ listLm8Bit += [ lineStrip ]
+for lightMapTga in lightMapTgas:
+ srcTga = ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/" + lightMapTga
+ dstTga = ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory + "/" + lightMapTga
+ if needUpdateLogRemoveDest(log, srcTga, dstTga):
+ if lightMapTga in listLm8Bit: # THIS MAY NOT WORK, PLEASE VERIFY CONTENTS OF list_lm_8bit.txt!!!
+ subprocess.call([ TgaToDds, srcTga, "-o", dstTga, "-a", "tga8" ])
+ else:
+ subprocess.call([ TgaToDds, srcTga, "-o", dstTga, "-a", "tga16" ])
-if 1: # todo: CoarseMeshTextureNames length > 0 ...
+if len(CoarseMeshTextureNames) > 0:
printLog(log, ">>> Build coarse meshes <<<")
shapeWithCoarseMesh = ExportBuildDirectory + "/" + ShapeWithCoarseMeshExportDirectory
mkPath(log, shapeWithCoarseMesh)
@@ -111,6 +129,8 @@ if 1: # todo: CoarseMeshTextureNames length > 0 ...
os.remove("config_generated.cfg")
for tn in CoarseMeshTextureNames:
subprocess.call([ TgaToDds, shapeWithCoarseMesh + "/" + tn + ".tga", "-o", shapeWithCoarseMeshBuilded + "/" + tn + ".dds", "-a", "5" ])
+else:
+ printLog(log, ">>> No coarse meshes <<<")
log.close()
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 3253a46fc..6667acdac 100644
--- a/code/nel/tools/build_gamedata/processes/shape/3_install.py
+++ b/code/nel/tools/build_gamedata/processes/shape/3_install.py
@@ -43,26 +43,26 @@ printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
+printLog(log, ">>> Install shape <<<")
clientPath = ClientDataDirectory + "/" + ShapeClientDirectory
mkPath(log, clientPath)
-
-printLog(log, ">>> Install shape <<<")
mkPath(log, ExportBuildDirectory + "/" + ShapeExportDirectory)
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeExportDirectory, clientPath, ".shape")
mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory)
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, clientPath, ".shape")
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, clientPath, ".dds")
-#if test "$lightmap_install_directory"; then
-# mkdir $client_directory/$lightmap_install_directory 2>> log.log 2> /dev/null
-# cp -u -p -R lightmap_16_bits/. $client_directory/$lightmap_install_directory 2>> log.log
-#fi
-
mkPath(log, ExportBuildDirectory + "/" + ShapeAnimExportDirectory)
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeAnimExportDirectory, clientPath, ".anim")
# ls anim | grep ".anim" >> $client_directory/auto_animations_list.txt
+printLog(log, ">>> Install shape lightmaps <<<")
+clientPath = ClientDataDirectory + "/" + LightmapClientDirectory
+mkPath(log, clientPath)
+mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory)
+copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory, clientPath, ".tga")
+
printLog(log, "")
log.close()
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/objects/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/objects/directories.py
new file mode 100644
index 000000000..0a5d2c46a
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/objects/directories.py
@@ -0,0 +1,93 @@
+#!/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 PATH ***
+
+CommonPath = "common/objects"
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
+
+# Shape directories
+ShapeSourceDirectories = [ ]
+ShapeSourceDirectories += [ "stuff/fyros/agents/accessories" ]
+ShapeSourceDirectories += [ "stuff/tryker/agents/accessories" ]
+ShapeSourceDirectories += [ "stuff/matis/agents/accessories" ]
+ShapeSourceDirectories += [ "stuff/zorai/agents/accessories" ]
+ShapeSourceDirectories += [ "stuff/generique/agents/accessories" ]
+ShapeSourceDirectories += [ "stuff/caravan/agents/accessories" ]
+ShapeSourceDirectories += [ "stuff/animated_light" ]
+
+# Maps directories
+MapSourceDirectories = [ ]
+MapSourceDirectories += [ "stuff/fyros/agents/_textures/accessories" ]
+MapSourceDirectories += [ "stuff/tryker/agents/_textures/accessories" ]
+MapSourceDirectories += [ "stuff/matis/agents/_textures/accessories" ]
+MapSourceDirectories += [ "stuff/zorai/agents/_textures/accessories" ]
+MapSourceDirectories += [ "stuff/generique/agents/_textures/accessories" ]
+MapSourceDirectories += [ "stuff/caravan/agents/_textures/accessories" ]
+
+MapUncompressedSourceDirectories = [ ]
+
+
+# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Shape directories
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeExportDirectory = CommonPath + "/shape"
+ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
+ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
+ShapeAnimExportDirectory = CommonPath + "/shape_anim"
+
+
+# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Map directories
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
+
+# Shape directories
+ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
+ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
+ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
+
+
+# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+
+# Map directory
+MapClientDirectory = "objects"
+
+# Map directory
+BitmapClientDirectory = MapClientDirectory
+
+# Shape directory
+ShapeClientDirectory = "objects"
+
+# Lightmap directory
+LightmapClientDirectory = "objects"
diff --git a/code/ryzom/tools/build_gamedata/workspace/common/objects/process.py b/code/ryzom/tools/build_gamedata/workspace/common/objects/process.py
new file mode 100644
index 000000000..cdd53ce02
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/objects/process.py
@@ -0,0 +1,77 @@
+#!/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 += [ "shape" ] # not fully implemented, but works for this process
+ProcessToComplete += [ "map" ] # not fully implemented, but works for this process
+
+
+# *** 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/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/sky/directories.py
new file mode 100644
index 000000000..453850db4
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/directories.py
@@ -0,0 +1,123 @@
+#!/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 PATH ***
+
+CommonName = "sky"
+CommonPath = "common/" + CommonName
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
+
+# Shape directories
+ShapeSourceDirectories = [ ]
+ShapeSourceDirectories += [ "sky_v2/max" ]
+
+# Maps directories
+MapSourceDirectories = [ ]
+MapSourceDirectories += [ "sky_v2/textures/textures" ]
+
+MapUncompressedSourceDirectories = [ ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/textures/desert" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/textures/forest" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/textures/jungle" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/textures/lacustre" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/setup/desert" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/setup/forest" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/setup/jungle" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/setup/lacustre" ]
+MapUncompressedSourceDirectories += [ "sky_v2/textures/textures/nodds" ]
+
+# Ig directories
+IgLandSourceDirectories = [ ]
+IgOtherSourceDirectories = [ ]
+IgOtherSourceDirectories += [ "sky_v2/max" ]
+IgPrimitiveSourceDirectories = [ ]
+
+# Animation directories
+AnimSourceDirectories = [ ]
+AnimSourceDirectories += [ "sky_v2/max" ]
+
+
+# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Shape directories
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeExportDirectory = CommonPath + "/shape"
+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
+
+
+# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
+
+# Map directories
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
+
+# Shape directories
+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"
+
+
+# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
+
+# Map directory
+MapClientDirectory = CommonName
+
+# Map directory
+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/sky/process.py b/code/ryzom/tools/build_gamedata/workspace/common/sky/process.py
new file mode 100644
index 000000000..84d2dac64
--- /dev/null
+++ b/code/ryzom/tools/build_gamedata/workspace/common/sky/process.py
@@ -0,0 +1,80 @@
+#!/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 += [ "shape" ]
+ProcessToComplete += [ "map" ]
+#ProcessToComplete += [ "anim" ]
+#ProcessToComplete += [ "ig" ]
+#ProcessToComplete += [ "ig_light" ]
+
+
+# *** 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/continents/newbieland/directories.py b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/directories.py
index 11633a34a..cec353865 100644
--- a/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/directories.py
+++ b/code/ryzom/tools/build_gamedata/workspace/continents/newbieland/directories.py
@@ -33,6 +33,8 @@ EcosystemName = "jungle"
EcosystemPath = "ecosystems/" + EcosystemName
ContinentName = "newbieland"
ContinentPath = "continents/" + ContinentName
+CommonName = ContinentName
+CommonPath = ContinentPath
# *** SOURCE DIRECTORIES LEVELDESIGN/WORLD ***
ContinentLeveldesignWorldDirectory = ContinentName
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 f18db50b5..e888b35b8 100644
--- a/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/directories.py
+++ b/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/directories.py
@@ -26,12 +26,14 @@
# along with this program. If not, see .
#
-# *** SOURCE DIRECTORIES IN THE DATABASE ***
-
# *** ECOSYSTEM NAME ***
EcosystemName = "jungle"
EcosystemPath = "ecosystems/" + EcosystemName
+CommonPath = EcosystemPath
+
+
+# *** SOURCE DIRECTORIES IN THE DATABASE ***
# Shape directories
ShapeSourceDirectories = [ ]
@@ -147,11 +149,11 @@ PacsPrimSourceDirectories += [ "stuff/" + EcosystemName + "/decors/vegetations"
# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
# Shape directories
-ShapeTagExportDirectory = "ecosystems/" + EcosystemName + "/shape_tag"
-ShapeExportDirectory = "ecosystems/" + EcosystemName + "/shape"
-ShapeWithCoarseMeshExportDirectory = "ecosystems/" + EcosystemName + "/shape_with_coarse_mesh"
-ShapeLightmapNotOptimizedExportDirectory = "ecosystems/" + EcosystemName + "/shape_lightmap_not_optimized"
-ShapeAnimExportDirectory = "ecosystems/" + EcosystemName + "/shape_anim"
+ShapeTagExportDirectory = CommonPath + "/shape_tag"
+ShapeExportDirectory = CommonPath + "/shape"
+ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
+ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
+ShapeAnimExportDirectory = CommonPath + "/shape_anim"
# Smallbank directories
SmallbankExportDirectory = "ecosystems/" + EcosystemName + "/smallbank"
@@ -184,11 +186,13 @@ ZoneExportDirectory = "ecosystems/" + EcosystemName + "/zone"
# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
# Map directories
-MapBuildDirectory = "ecosystems/" + EcosystemName + "/map"
-MapPanoplyBuildDirectory = "ecosystems/" + EcosystemName + "/map_panoply"
+MapBuildDirectory = CommonPath + "/map"
+MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
# Shape directories
-ShapeWithCoarseMeshBuildDirectory = "ecosystems/" + EcosystemName + "/shape_with_coarse_mesh_builded"
+ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
+ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
+ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
# Farbank directories
FarbankBuildDirectory = "ecosystems/" + EcosystemName + "/farbank"
@@ -218,15 +222,15 @@ ClientSetupDirectories += [ "jungle_vegetable_sets" ]
ClientSetupDirectories += [ "jungle_pacs_prim" ]
ClientSetupDirectories += [ "jungle_lightmaps" ]
-# Shape directory
+# Map directory
MapClientDirectory = "jungle_maps"
+# Map directory
+BitmapClientDirectory = MapClientDirectory
+
# Shape directory
ShapeClientDirectory = "jungle_shapes"
-# Map directory
-BitmapClientDirectory = "jungle_maps"
-
# Lightmap directory
LightmapClientDirectory = "jungle_lightmaps"
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 ddd54fadf..18f80cfe0 100644
--- a/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/process.py
+++ b/code/ryzom/tools/build_gamedata/workspace/ecosystems/jungle/process.py
@@ -69,6 +69,10 @@ ShapeExportOptLightmapLog = "false"
# Coarse mesh texture mul size
TextureMulSizeValue = "1.5"
+DoBuildShadowSkin = 0
+
+ClodConfigFile = ""
+
# *** COARSE MESH TEXTURE NAME ***
CoarseMeshTextureNames = [ ]
CoarseMeshTextureNames += [ "nel_coarse_mesh_jungle_sp" ]
diff --git a/code/ryzom/tools/build_gamedata/workspace/projects.py b/code/ryzom/tools/build_gamedata/workspace/projects.py
index 82b2f286d..ac4e3ab72 100644
--- a/code/ryzom/tools/build_gamedata/workspace/projects.py
+++ b/code/ryzom/tools/build_gamedata/workspace/projects.py
@@ -27,6 +27,8 @@
ProjectsToProcess = [ ]
ProjectsToProcess += [ "common/interface" ]
+ProjectsToProcess += [ "common/objects" ]
+ProjectsToProcess += [ "common/sky" ]
ProjectsToProcess += [ "ecosystems/jungle" ]
ProjectsToProcess += [ "continents/newbieland" ]