There are a very large number of freely modifiable/distributable meshes and textures (including animals (both living and extinct) and plants) using the Zoo Tycoon 2 format (zt2).
These meshs and textures are extremely high quality and would be a fabulous way of adding in large numbers of new animals, including a massive number of dinosaurs. Check out some of the renders: https://www.google.co.uk/search?q=zt2&tbm=isch
The original game includes 100+ animals, which have often been modified heavily by end users, but there are also many texture packs created by users from scratch which are public domain in many websites (often easily found by searching for zt2 on google). eg:-
http://zootycoon.wikia.com/wiki/List_of_user-made_animals_for_Zoo_Tycoon_2
http://w11.zetaboards.com/The_Round_Table/forum/3624200/
The .zt2 file is a renamed zip file, so can easily be extracted.
And information about the file structure and how to edit and modify the files is also widely documented. eg:-
http://zt2modding.wikia.com/wiki/Coding_an_Animal
http://z14.invisionfree.com/ZT2_Designing_Center/index.php?showtopic=1390
http://www.zootycoonunleashed.com/ZTForums/index.php?showtopic=15808&st=0&p=249013&
I'm not sure if the file format is directly able to be displayed by Irrlicht, but the NIF meshes are able to be edited with Blender (amongst others) if not, so worst case might be needing a conversion step to generate b3d files. Some are BFB files which might be more challanging to convert.
The sound files are .wav format, so not an issue.
I would normally have 'had a go' at generating the script before asking the question, but will be rather busy over the coming weeks, so thought I'd put it out as general information to start with. Especially as I would probably have worked on it a long time ago if I'd realised such a resource existed.
The following is a relatively irrelevant python script, but it does use code to copy file and walk through directorys, so might be a starter for such a script
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
import os
import shutil
tgtDir = '/media/david/2TB_#2/'
srcDir = '/media/david/3TB#2/'
curLoop = 1
#generate checksums for the source directory
#os.chdir(srcDir)
#cmd = "tigerdeep -r -l -z -j1 -e * >> 'sourceAllFiles.tiger'"
#os.system(cmd)
'''
#copy files from source to target (cp overwrites without prompting)
print('*** Copying Files from Source to Target Directory: ***\n')
os.chdir(srcDir)
cmd = "cp -r '"+srcDir+ "' '"+ tgtDir+ "'"
cmd = "rsync -r -R -I -l -H '"+srcDir+ "' '"+ tgtDir+ "'"
cmd = "gcp -r -f '"+srcDir+ "' '"+ tgtDir+ "'" # using GCP provides a progress bar
print(cmd)
os.system(cmd)
'''
print("Counting files to be copied")
totalFileCnt = 0
curFileCnt = 0
for src_dir, dirs, files in os.walk(srcDir):
totalFileCnt = totalFileCnt+len(files)
if len(files)>0:
# if totalFileCnt/1000 == int(totalFileCnt/1000):
print("Counted "+ str(totalFileCnt)+ " files")
print("Copying total of "+ str(totalFileCnt)+ " files")
for src_dir, dirs, files in os.walk(srcDir):
dst_dir = src_dir.replace(srcDir, tgtDir)
if not os.path.exists(dst_dir):
os.mkdir(dst_dir)
for file_ in files:
curFileCnt += 1
src_file = os.path.join(src_dir, file_)
dst_file = os.path.join(dst_dir, file_)
if os.path.exists(dst_file):
os.remove(dst_file)
fileSize = os.path.getsize(src_file)
if fileSize>=1000000:
print("Copying "+str(curFileCnt)+ "/"+str(totalFileCnt)+" ("+str(totalFileCnt-curFileCnt)+" remaining). Current file size: "+ str(fileSize/1000000)+"MB")
shutil.copy(src_file, dst_dir)
# print("Coiped "+str(curFileCnt)+ "/"+str(totalFileCnt)+" files. "+str(totalFileCnt-curFileCnt)+" files remaining)")
#generate checksums for the target directory
#walk through the source directory and generate checksums from the target directory for corresponding files
os.chdir(tgtDir)
os.system('cls' if os.name == 'nt' else 'clear')
print('*** Generating checksums for the target directory: ***\n')
for curdir, subdirs, files in os.walk(srcDir):
for i in range(0, len(files)):
curTgtDir = curdir.replace(srcDir, "");
print (curdir)
print (' '+ files[i]+ '/n')
try:
# os.chdir(tgtDir) # probably overkill, but definitely don't want to accidentally checksum source files
# print (os.getcwd())
cmd = "tigerdeep -r -l -z -j1 -e '"+ curTgtDir+ '/'+ files[i]+ "' >> 'targetFiles"+ str(curLoop)+ ".tiger'"
print (cmd)
os.system(cmd)
except:
print ("Failed to checksum:/n")
print (' '+ curdir)
print (' '+ files[i]+ '/n')
pass
#If source and target checksums for each file match then delete source file
print "*** Deleting Verified Source Files: ***/n"
with open(srcDir+ 'sourceAllFiles.tiger') as f1:
srcChecksums = f1.read().splitlines()
with open(tgtDir+ "targetFiles"+ str(curLoop)+ ".tiger") as f2:
tgtChecksums = f2.read().splitlines()
a = set(srcChecksums)
b = set(tgtChecksums)
matchingChecksums = list(set(a).intersection(b))
matchCnt = len(matchingChecksums)
for i in range(0, matchCnt):
print "Deleting Source File: "+ str(i)+ '/'+ str(matchCnt)+ ': '+ matchingChecksums[i][62:]
try:
os.remove(srcDir+ matchingChecksums[i][62:])
except:
pass
#Clear empty directories
#walk through the entire directory structure repeatedly until all blank directories have been deleted
print "*** Deleting Empty Directories ***/n"
blankCount = 1
while blankCount != 0:
blankCount = 0
for curdir, subdirs, files in os.walk(srcDir):
for i in range(len(files), 0):
if os.path.islink(files[i]):
os.unlink(files[i])
if os.path.islink(curdir):
os.unlink(curdir)
elif len(subdirs) == 0 and len(files) == 0: #check for empty directories.
os.rmdir(curdir) #delete the directory
blankCount = blankCount + 1
print ("Deleting Empty Directory: "+ curdir)
#print ('Correctly moved '+ str(matchCnt)+ ' of '+ str(len(tgtChecksums))+ ' attempted files/n')
#Repeat until no files left