Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
207 lines
6.4 KiB
Python
207 lines
6.4 KiB
Python
# python
|
|
|
|
"""
|
|
Notes:
|
|
|
|
- TODO:
|
|
-- Database?
|
|
-- Install?
|
|
-- Debug compile
|
|
|
|
- Dependencies
|
|
-- Doable using just Scons?
|
|
-- If not fast enough, can probably be made fast by explicitly declaring
|
|
them with the Java dependecy builder.
|
|
--- env.Depends()
|
|
-- Only directly build haks/erfs, make .ncs files their dependencies
|
|
and let Scons derive from there?
|
|
"""
|
|
|
|
from os.path import basename, exists, join
|
|
import re
|
|
|
|
## Specific files and directories we need to muck about with
|
|
|
|
includedir = Dir("include")
|
|
othersdir = Dir("others")
|
|
_2dasdir = Dir("2das")
|
|
|
|
scrollmerch = othersdir.File("prc_scrolls.utm")
|
|
|
|
## Builders
|
|
# NWScript
|
|
|
|
nwscript = Builder(
|
|
action = "wine tools/nwnnsscomp.exe -cq -i include $SOURCE $TARGET",
|
|
suffix = ".ncs",
|
|
src_suffix = ".nss")
|
|
|
|
|
|
# Haks / Erf
|
|
|
|
erf = Builder(
|
|
action = ["-@rm -f $TARGET",
|
|
Action("wine tools/erf.exe --create $TARGET $SOURCES",
|
|
"Packaging $TARGET")]
|
|
)
|
|
|
|
erffromdir = Builder(
|
|
action = ["-@rm -f $TARGET",
|
|
Action("wine tools/erf.exe --create $TARGET $SOURCE/*",
|
|
"Packaging $TARGET from files in directory $SOURCE")],
|
|
source_factory=Dir
|
|
)
|
|
|
|
# TLK
|
|
|
|
tlk = Builder(
|
|
action = ["-@rm -f $TARGET",
|
|
Action("tools/linux/xml2tlk $SOURCE $TARGET",
|
|
"Building TLK from XML")]
|
|
)
|
|
|
|
# Other stuff
|
|
|
|
scrollmerchbuild = Builder(
|
|
action = ["-@mkdir scrolltemp",
|
|
Action("java -Xmx200m -jar tools/prc.jar buildscrhack 2das tlk scrolltemp",
|
|
"Creating scrolls and updating 2das"),
|
|
Action("java -cp ./tools/modpacker/nwn-tools.jar org.progeeks.nwn.XmlToGff scrolltemp scrolltemp/*.uti.xml",
|
|
"Converting scroll XML to UTI"),
|
|
Action("java -cp ./tools/modpacker/nwn-tools.jar org.progeeks.nwn.XmlToGff . prc_scrolls.utm.xml",
|
|
"Converting scroll merchant XML to UTM"),
|
|
"@mv scrolltemp/*.uti others/",
|
|
"@mv prc_scrolls.utm others/",
|
|
"@rm -rf scrolltemp",
|
|
"@rm -f prc_scrolls.utm.xml",
|
|
"@rm -f System.out"] # Bug in nwn-tools, produces this file
|
|
)
|
|
|
|
## Include scanner
|
|
|
|
include_regex = re.compile("^#include\s+\"(\w+)\"", re.MULTILINE)
|
|
|
|
def scan_nwscript(node, env, path):
|
|
contents = node.get_contents()
|
|
return ["../include/%s.nss" % (name,)
|
|
for name in include_regex.findall(contents)
|
|
if exists(includedir.File("%s.nss" % (name,)).abspath)]
|
|
|
|
nss_scan = Scanner(function = scan_nwscript,
|
|
skeys = [".nss"],
|
|
recursive = True)
|
|
|
|
## File lists
|
|
def mkobjectlist(scripts, objectdir):
|
|
return [join(objectdir, basename(script).replace(".nss", ".ncs"))
|
|
for script in scripts]
|
|
|
|
# Scripts
|
|
scripts = Glob("#/scripts/*.nss", strings=True)
|
|
spells = Glob("#/spells/*.nss", strings=True)
|
|
epicspellscripts = Glob("#/epicspellscripts/*.nss", strings=True)
|
|
racescripts = Glob("#/racescripts/*.nss", strings=True)
|
|
psionics = Glob("#/psionics/*.nss", strings=True)
|
|
newspellbooks = Glob("#/newspellbook/*.nss", strings=True)
|
|
includes = Glob("#/include/*.nss", strings=True)
|
|
|
|
# Object files
|
|
objects = mkobjectlist(scripts, "objs")
|
|
spellobjs = mkobjectlist(spells, "spellobjs")
|
|
epicspellobjs = mkobjectlist(epicspellscripts, "epicspellobjs")
|
|
raceobjs = mkobjectlist(racescripts, "raceobjs")
|
|
psionicsobjs = mkobjectlist(psionics, "psionicsobjs")
|
|
newspellbookobjs = mkobjectlist(newspellbooks, "newspellbookobjs")
|
|
|
|
# 2das
|
|
_2das = Glob("#/2das/*.2da", strings=True)
|
|
race2das = Glob("#/race2das/*.2da", strings=True)
|
|
craft2das = Glob("#/Craft2das/*.2da", strings=True)
|
|
|
|
# Misc
|
|
gfx = Glob("#/gfx/*.*", strings=True)
|
|
others = Glob("#/others/*.*", strings=True)
|
|
|
|
# Erfs
|
|
erffiles = Glob("#/erf/*.*", strings=True)
|
|
ocfixscripts = Glob("#/ocfixerf/*.nss", strings=True)
|
|
ocfixobjs = mkobjectlist(ocfixscripts, "ocfixerfobjs")
|
|
|
|
|
|
|
|
## Building
|
|
|
|
env = Environment(BUILDERS = {'NWScript' : nwscript,
|
|
'Erf' : erf,
|
|
'ErfFromDir' : erffromdir,
|
|
'Tlk' : tlk,
|
|
'ScrollMerch' : scrollmerchbuild})
|
|
env.Append(SCANNERS = nss_scan)
|
|
|
|
def buildscripts(scriptlist, objectlist):
|
|
# Note: Assumes objectlist was directly derived from scriptlist
|
|
# and is therefore in the same order.
|
|
for (script, object) in zip(scriptlist, objectlist):
|
|
env.NWScript(object, script)
|
|
|
|
def buildhak(name, filelist):
|
|
env.Erf("#/CompiledResources/%s.hak" % (name,), filelist)
|
|
|
|
def builderf(name, filelist):
|
|
env.Erf("#/CompiledResources/%s.erf" % (name,), filelist)
|
|
|
|
# Compiling scripts
|
|
|
|
buildscripts(scripts, objects)
|
|
buildscripts(spells, spellobjs)
|
|
buildscripts(epicspellscripts, epicspellobjs)
|
|
buildscripts(racescripts, raceobjs)
|
|
buildscripts(psionics, psionicsobjs)
|
|
buildscripts(newspellbooks, newspellbookobjs)
|
|
buildscripts(ocfixscripts, ocfixobjs)
|
|
|
|
# Convert TLK
|
|
|
|
env.Tlk("#/tlk/prc8_consortium.tlk", "#/tlk/prc8_consortium.tlk.xml")
|
|
|
|
# Building haks
|
|
|
|
buildhak("prc8_scripts", scripts + objects)
|
|
buildhak("prc8_spells", spells + spellobjs)
|
|
buildhak("prc8_epicspells", epicspellscripts + epicspellobjs)
|
|
buildhak("prc8_psionics", psionics + psionicsobjs)
|
|
buildhak("prc8_newspellbook", newspellbooks + newspellbookobjs)
|
|
buildhak("prc8_include", includes)
|
|
buildhak("prc8_race", racescripts + raceobjs + race2das)
|
|
|
|
|
|
buildhak("prc8_2das", _2das)
|
|
buildhak("prc8_textures", gfx)
|
|
buildhak("prc8_craft2das", craft2das)
|
|
|
|
|
|
# Building erfs
|
|
|
|
builderf("prc8_consortium", erffiles)
|
|
builderf("prc8_ocfix", ocfixscripts + ocfixobjs)
|
|
|
|
|
|
# Special handling for misc hak:
|
|
# Depends on the scroll merchant file, which may need to be generated / updated
|
|
|
|
env.ScrollMerch(scrollmerch,
|
|
[_2dasdir.File("spells.2da"),
|
|
_2dasdir.File("des_crft_scroll.2da"),
|
|
_2dasdir.File("des_crft_spells.2da"),
|
|
_2dasdir.File("iprp_spells.2da")
|
|
] +
|
|
Glob("#/2das/cls_spcr_*.2da"))
|
|
|
|
# Can't use Erf rule, since something crashes with it
|
|
# So instead declared the dependencies explicitly and then use dir build rule
|
|
env.Depends("#/CompiledResources/prc8_misc.hak",
|
|
others + [scrollmerch])
|
|
|
|
env.ErfFromDir("#/CompiledResources/prc8_misc.hak", "others")
|
|
|