New Mapsplitter Tool?
kungfoomasta
01-10-2006 22:12:46
Hey All,
I've been exploring the Mapsplitter tool, and I was wondering if the community thinks its feasible to create a GUI version of the tool.
I have started working on one, with the goal that the user can generate the *.gen.cfg and runtime cfg file without every opening a text editor.
I am using template.default.gen.cfg as the outline of options available for creating .gen.cfg files.
Here is the work I have put in so far:
The main purpose of this post is to see if
1) This seems like a feasible task
2) Anybody would find this tool to be useful ( from the windows user base )
As I do not know or understand many of the options in the cfg files, I will need community help to implement this tool.
KungFooMasta
Dale_ee
02-10-2006 11:43:51
I think it would be really nice thing to use. Waiting for
tuan kuranes's opinion.
tuan kuranes
02-10-2006 13:14:21
I'm all for it.
best would be a multiplatform one, and even better would be a cegui one, just to be sure everyone can compile it out of the box.
But any would do meanwhile and would be integrated inside the win32 binary demo pack at least
jacmoe
02-10-2006 17:27:13
May I suggest the use of tabbed pages?
Otherwise the tool window will be one big scroll!
Great initiative!
kungfoomasta
02-10-2006 18:08:26
Good Idea jacmoe!
I haven't used tabs yet in my apps, but it shouldn't be hard to figure out right? Guess I'll find out after work today!
Also, if anybody knows how to open notepad in managed C++ or C# feel free to point me in the right direction.
KungFooMasta
OvermindDL1
02-10-2006 18:50:40
I am for it, but yea, have to agree with above, better to make it with CEGUI/Ogre so it is multi-platform and compiles out of the box for the people that would be using it.
What do you mean by "open notepad in managed C++ or C#"? Notepad is a standalone program.
kungfoomasta
02-10-2006 21:22:27
I think you would spawn a new process which would open notepad.exe and view "template.default.gen.cfg" for example. The idea is to be able to quickly open up the file via clicking a "Edit CFG" button in the app, so that you can still run mapsplitter through the app.
I agree with multi-platform, but I am limited on time, and can easily merge OGRE/mapsplitter/.NET window forms into an app, as I have done with 2 other tool applications of mine (Entity Viewer! ya!).
I just want to slap up something useful in a relatively short amount of time. I am already able to generate *.gen.cfg file and run mapsplitter over them, but I need to add in generation of runtime .cfg files and use tabbing. Plus some of the options need to be added in.. I will post questions soon regarding some of the options, more specifically the dynamic ones, as in the number of supported texture formats (unlimited amount can be specified, right?) and others.
KungFooMasta
kungfoomasta
02-10-2006 21:43:25
This will clarify. Found it online, and will try this out in managed C++ tonight:
using System;
using System.Diagnostics;
namespace csharp_station.howto
{
/// <summary>
/// Demonstrates how to start another program from C#
/// </summary>
class ProcessStart
{
static void Main(string[] args)
{
Process notePad = new Process();
notePad.StartInfo.FileName = "notepad.exe";
notePad.StartInfo.Arguments = "ProcessStart.cs";
notePad.Start();
}
}
}
KungFooMasta
kungfoomasta
03-10-2006 06:36:36
I didn't get around to testing out the code to open notepad. I did, however, change the format to use tabs. Thanks Jacmoe, its good you suggested this!
I have some questions regarding the template files:
*.gen.cfg files
#Sand
MaterialColor0=1.0f 1.0f 0.0f 1.0f
#Grass
MaterialColor1=0.13f 0.545f 0.13f 1.0f
#Rock
MaterialColor2=0.411764f 0.411764f 0.411764f 1.0f
#Snow
MaterialColor3=1.0f 0.98f 0.98f 1.0f
What is the min number of Material Colors? Max?
#needs to be in maptool directory
SplatFilename0=splatting_sand.png
SplatFilename1=splatting_grass.png
SplatFilename2=splatting_rock.png
SplatFilename3=splatting_snow.png
What is the min number of Splatting Files? Max?
*.cfg files
TextureFormatSupported0=ImagePaging
TextureFormatSupported1=Base
TextureFormatSupported2=Base2
TextureFormatSupported3=InstantBase
TextureFormatSupported4=Splatting
TextureFormatSupported5=Splatting2
TextureFormatSupported6=Splatting4
TextureFormatSupported7=Splatting6
TextureFormatSupported8=Splatting7
TextureFormatSupported9=Base
TextureFormatSupported10=Base2
TextureFormatSupported11=InstantBase
TextureFormatSupported12=Splatting3
TextureFormatSupported13=Splatting5
TextureFormatSupported14=SplattingShader
TextureFormatSupported18=InstantBaseShadowed
What is the min number of supported texture formats? Max?
# the one selected
TextureFormat=ImagePaging
ImageFilename=ps_texture_1k
#BigImage=yes
## realtime splatting
#TextureFormat=Base
## (need to generate maps with mapsplitter)
#TextureFormat=InstantBase
# Same but keep a copy in main memory (allow RT blending/editing)
#TextureFormat=InstantBaseEdit
#TextureFormat=InstantBaseShadowed
# Shader Splatting
# Needs pixel shader
#TextureFormat=Splatting5
#TextureFormat=SplattingShader
#need DIRECTX
#TextureFormat=Splatting
## precalc static splatting
## (need to generate maps with mapsplitter)
#TextureFormat=Base2
#TextureFormat=Splatting2
# Same but keep a copy in main memory (allow RT blending/editing)
#TextureFormat=Splatting2Edit
#TextureFormat=Splatting7
# Same but keep a copy in main memory (allow RT blending/editing)
#TextureFormat=Splatting7Edit
### Experimentals splatting techniques
#TextureFormat=Splatting4
### Experimentals splatting techniques
#need OPENGL
#TextureFormat=Splatting3
#need DIRECTX
#TextureFormat=Splatting4
What is the min number of "TextureFormat=" Lines? Max?
This will help me determine how information should be gathered.
Thanks,
KungFooMasta
tuan kuranes
03-10-2006 13:01:59
What is the min number of Material Colors? Max?
What is the min number of Splatting Files? Max?
NumMatHeightSplat is what you're looking for:
NumMatHeightSplat=4
means
4 MaterialColor, 4 SplatFilename, 4 MaterialHeight
No Min if you're not using a generated material, otherwise 2 would be a minimum.
No Max.
What is the min number of supported texture formats? Max?
What is the min number of "TextureFormat=" Lines? Max?
exact number should be given using NumTextureFormatSupported
Min is 1.
No Max.
NumTextureFormatSupported=17
means you have to give a list to 17 TextureFormatSupported
kungfoomasta
03-10-2006 17:10:50
Thanks for the response, those seem very obvious
.
Does
NumMatHeightSplat work in the .gen.cfg file also? It's not listed in Template.default.gen.cfg:
#########SPLATTING
#
# Splatting
# We are allowing 4 textures to build the terrain texture
# MaterialHeight to change alpha weights ( using percentage )
MaterialHeight1=12
MaterialHeight2=50
# yes if you specify below otherwise it reads splatting textures
AvgColorsExists=yes
#Sand
MaterialColor0=1.0f 1.0f 0.0f 1.0f
#Grass
. . .
For the last one, isn't
TextureFormat=
different from
NumTextureFormatSupported=
?
What are bounds of TextureFormat? (not TextureFormatSupported)
Also, template.default.cfg assigns 19 to NumTextureFormatSupported, but does not list them all. Maybe the template won't work out of the box?
NumTextureFormatSupported=19
TextureFormatSupported0=ImagePaging
TextureFormatSupported1=Base
TextureFormatSupported2=Base2
TextureFormatSupported3=InstantBase
TextureFormatSupported4=Splatting
TextureFormatSupported5=Splatting2
TextureFormatSupported6=Splatting4
TextureFormatSupported7=Splatting6
TextureFormatSupported8=Splatting7
TextureFormatSupported9=Base
TextureFormatSupported10=Base2
TextureFormatSupported11=InstantBase
TextureFormatSupported12=Splatting3
TextureFormatSupported13=Splatting5
TextureFormatSupported14=SplattingShader
TextureFormatSupported18=InstantBaseShadowed
KungFooMasta
tuan kuranes
03-10-2006 17:27:33
Does NumMatHeightSplat work in the .gen.cfg file also? It's not listed in Template.default.gen.cfg
yes. I'll add it to the template, sorry.
TextureFormat=
Must be one of the listed TextureFormatSupportedX, and there can only be one TextureFormat, as it's the "choice".
You're, right some have disappeared... I'll fix that.
kungfoomasta
04-10-2006 01:25:08
Oh, I missed this:
Template.default.gen.cfg
# We are allowing 4 textures to build the terrain texture
# MaterialHeight to change alpha weights ( using percentage )
MaterialHeight1=12
MaterialHeight2=50
Does this mean the max is 4? What is min? Or is this variable dependant on
NumMatHeightSplat?
Template.default.cfg
# Splatting
# We are allowing 4 textures to build the terrain texture
# MaterialHeight to change alpha weights ( using percentages )
# for Real-time textureformat and deformable (instantBase, splatting5)
NumMatHeightSplat=4
MaterialHeight0=0
MaterialHeight1=12
MaterialHeight2=60
MaterialHeight3=75
Maybe we should make these the same in both files? Why/When would they be different?
Template.default.gen.cfg
#Sand
MaterialColor0=1.0f 1.0f 0.0f 1.0f
#Grass
MaterialColor1=0.13f 0.545f 0.13f 1.0f
#Rock
MaterialColor2=0.411764f 0.411764f 0.411764f 1.0f
#Snow
MaterialColor3=1.0f 0.98f 0.98f 1.0f
Does the runtime file (Template.default.cfg) support MaterialColor options also? Please add them if they do.
Also what options must be the same between the
gen file and
runtime file? For example, can the splatting options be different between the two, and not cause problems or strange effects?
Do the options need to appear in a specific order within the .cfg files, or can I move around the options any way I like? Is there a preferred order? Although I don't know much about these options, they appear in a somewhat random order.
KungFooMasta
OvermindDL1
04-10-2006 04:27:01
So... any chance of this getting moved to something more mainstream... like wxWidgets? .NET 2.0 is still borked on this machine, 1.0 works fine though....
kungfoomasta
04-10-2006 05:05:30
I will provide all the source for my work on this project, however I know nothing about wxwidgets, so a lot of my time would be spent figuring that out. At the current rate (few hours a day on this) I will finish all functionality in 2-3 days. I am already able to create the gen.cfg file, edit the file in the app or by opening notepad (Press Edit Button), and run mapsplitter over it. All that's left is the runtime cfg file, some buttons, and
getting some more answers from Tuan (Bolded for visibility).
Making the tool more robust/user friendly/informative can be done at a later time.
I would port to wxwidgets, but I have yet to even load terrain into my other app, and I have other things that I need to move on to.
Splatting has a lot of options! Even more for real time cfg!
KungFooMasta
Jerky
04-10-2006 07:18:37
Great work Kungfoomasta. I think this tool will help people evaluate PLSM much easier, which will, in turn, get more people using it. That will, in turn, get more good projects and helpful results here in the forums. All of the results can only be good. Keep it up!
tuan kuranes
04-10-2006 13:05:47
Does this mean the max is 4? What is min? Or is this variable dependant on
NumMatHeightSplat?
this variable dependant on
NumMatHeightSplat
Maybe we should make these the same in both files? Why/When would they be different?
it shouldn't be diffferent, I'll change that
Does the runtime file (Template.default.cfg) support MaterialColor options also? Please add them if they do.
runtime does support it. I'll add it.
Also what options must be the same between the
gen file and
runtime file? For example, can the splatting options be different between the two, and not cause problems or strange effects?
All common option should be the same, otherwise strange effects, even segault can happens.
Do the options need to appear in a specific order within the .cfg files, or can I move around the options any way I like? Is there a preferred order? Although I don't know much about these options, they appear in a somewhat random order.
it's random.
kungfoomasta
05-10-2006 01:14:00
Thanks for the answers Tuan.
I'm working on generated the run time file, and I'm figuring out all the similarities in options. I have 3 questions:
What is the difference between
ColorMapName and
ImageFilename? They seem to be the same to me.
Wouldn't
LandScapeFileName and
LandScapeExtension make more sense to be
HeightMapFileName and
HeightMapExtension? The LandScapeFileName is also being used as a variable for Output Directory, so if I was using defaults, and had LandScapeFileName set to
myTerrainHeightmap, the output folder would be "
\myTerrainHeightmap", instead of something like "
myTerrain". Of course, I can change the OutDirectory, but the default shouldn't be the heightmap file name. Just a suggestion that would make things more clear
How does the LandScapeExportExtension option work (I see its definition in the wiki, but I'm wondering how to utilize this option)?
I believe this is the list of common options for both config files. The Wiki should be updated to reflect this.
GENERAL:
GroupName
HEIGHTMAP:
LandScapeFileName
LandScapeExtension
LandScapeExportExtension
PAGING:
PageSize
TileSize
Data2DFormat
TEXTURE:
ColorMapName == ImageFilename
TextureExtension
TextureStretchFactor
SPLATTING:
NumMatHeightSplat
MaterialHeight0...x
MaterialColor0...x
SplatFilename0...x
KungFooMasta
tuan kuranes
05-10-2006 12:57:16
What is the difference between ColorMapName and ImageFilename? They seem to be the same to me.
more or less the same, yes. ImageFilename doesn't have the extension and will be used at runtime...
Wouldn't LandScapeFileName and LandScapeExtension make more sense to be HeightMapFileName and HeightMapExtension?
yes. I can add that as new name as it makes sense.
(keeping old names for compatibility.)
The LandScapeFileName is also being used as a variable for Output Directory, so if I was using defaults, and had LandScapeFileName set to myTerrainHeightmap, the output folder would be "\myTerrainHeightmap", instead of something like "myTerrain". Of course, I can change the OutDirectory, but the default shouldn't be the heightmap file name. Just a suggestion that would make things more clear
What would be default then ?
How does the LandScapeExportExtension option work (I see its definition in the wiki, but I'm wondering how to utilize this option)?
If you split a raw map and want a .raw export, use =raw ?
I believe this is the list of common options for both config files. The Wiki should be updated to reflect this.
Feel free to update it.
kungfoomasta
05-10-2006 17:35:19
What would be default then ?
Make another variable such as LandScapeName or TerrainName or something similar. Those seem to be the 3 main parts: TerrainName, HeightMapFileName, ImageFileName. The rest of the options are important also, but with these three options some options can be filled in (like extension), and using defaults, users can just use these 3 properties to create a default map, but with their images.
KungFooMasta
tuan kuranes
05-10-2006 18:18:54
I'll add that in CVS and next release.
kungfoomasta
05-10-2006 19:02:51
Awesome. I'll update and make changes based on that when I get off work.
KungFooMasta
OvermindDL1
05-10-2006 21:17:58
Any chance of using straight MFC then? Just anything to get out of .NET?
kungfoomasta
05-10-2006 23:01:38
Does MFC use CLI? Is there any easy way to convert CLR code into MFC code? I am not very knowledgable about these different APIs... I got help from Bekas a while back, and I found a solution that worked, and stuck with it.
Does MFC use managed or native code, or mixed, like I do with CLR?
You don't have any access to any WinXP machines with Framework 2.0?
KungFooMasta
kungfoomasta
06-10-2006 06:43:25
Some more questions I ran into:
What is ScaleX/ScaleY/ScaleZ in .gen.cfg? What is its purpose in the .gen file?
If the file is already in OGRE resource path and the file specifies to add to resource group, is an exception thrown, or is this case handled?
Does LandScapeExportExtension also apply to The ColorMap? What if they are different types?
What file types are supported for use as a ColorMap?
Would it be possible to change and add a few options, for better clarification? I have made certain changes, and if its too difficult to change then I can revert to the old options. As of now the mapsplitter crashes running my cfg files, probably because of these changes.
GUI:
Output: myNewMap.gen.cfg
####### Generated by Terrain Generator #######
####### FileName: MyNewMap.gen.cfg ######
TerrainName=MyNewMap
## General Options ##
GroupName=PLSM2
HeightMapFileName=ps_height_1k
HeightMapExtension=png
HeightMapExportExtension=png
ImageFileName=ps_texture_1k
ImageExtension=png
ImageExportExtension=png
Paged=yes
OutDirectory=TerrainOutput\MyNewMap
## Paging Related Options (no effect if Paged=no) ##
PageSize=513
TileSize=65
Data2DFormat=HeightField
## Image Options ##
ImageStretchFactor=1
ImageSplit=yes
LitImageSplit=no
## Height Map Options ##
HeightMap=yes
InfiniteMap=no
HeightMapBlurFactor=0.0f
Equalize=no
MiniMap=yes
MiniMapWidth=512
MiniMapHeight=512
## Normals Options ##
NormalMap=no
HeightNormalMap=no
ColorMapGenerated=no
LitColorMapGenerated=no
## Splatting Options ##
NumMatHeightSplat=4
MaterialHeight0=0
MaterialHeight1=12
MaterialHeight2=60
MaterialHeight3=7
#Sand
MaterialColor0=1.0f 1.0f 0.0f 1.0f
#Grass
MaterialColor1=0.13f 0.545f 0.13f 1.0f
#Rock
MaterialColor2=0.411764f 0.411764f 0.411764f 1.0f
#Snow
MaterialColor3=1.0f 0.98f 0.98f 1.0
#needs to be in maptool directory
SplatFilename0=splatting_sand.png
SplatFilename1=splatting_grass.png
SplatFilename2=splatting_rock.png
SplatFilename3=splatting_snow.pn
AvgColorsExists=yes
BaseMap=no
LitBaseMap=no
## Maps used for Splatting ##
CoverageMap=no
AlphaMaps=no
AlphaSplatRGBAMaps=no
AlphaSplatLightMaps=no
RGBMaps=no
## Lighting Options ##
HorizonMap=no
ElevationMap=no
ZHorizon=no
## Visibility Options ##
PVSMap=no
Changes:
-Added "TerrainName=MyNewMap"
-Changed "LandScape" changed into "HeightMap"
-Added ImageFileName=ps_texture_1k
-Added ImageExtension=png
-Added ImageExportExtension=png
-Changed "ColorMapStrecthFactor" into "ImageStretchFactor=1"
-Changed "ColorSplit" into "ImageSplit=yes"
-Changed "LitColorMapSplit" into "LitImageSplit=no"
-I took out ScaleX=/ScaleY=/ScaleZ=, since I don't know their purpose.
-I took out ColorMapName, replaced by ImageFileName. ImageFileName does not include the extension, to be consistent with HeightMapName
Remember that the app allows for easy editting with notepad, although I hope this isn't used much, that would defeat the tool's purpose.
It's also easy to throw comments in, so if there aren't enough comments that can be fixed easily.
Let me know what you think.
KungFooMasta
tuan kuranes
06-10-2006 13:03:33
What is ScaleX/ScaleY/ScaleZ in .gen.cfg? What is its purpose in the .gen file?
scaling terrain for normal map, lightmap and horizon map is essential, in order to be in synch with runtime scale values.
If the file is already in OGRE resource path and the file specifies to add to resource group, is an exception thrown, or is this case handled?
case handled
Does LandScapeExportExtension also apply to The ColorMap? What if they are different types?
What file types are supported for use as a ColorMap?
any supported by Devil library used.
-Added "TerrainName=MyNewMap"
-Changed "LandScape" changed into "HeightMap"
-Added ImageFileName=ps_texture_1k
-Added ImageExtension=png
-Added ImageExportExtension=png
-Changed "ColorMapStrecthFactor" into "ImageStretchFactor=1"
-Changed "ColorSplit" into "ImageSplit=yes"
-Changed "LitColorMapSplit" into "LitImageSplit=no"
-I took out ColorMapName, replaced FileNamby ImageFileName. Imagee does not include the extension, to be consistent with HeightMapName
I'm all for changes, but :
Does Image really depict more clearly than colormap the fact that it will color terrain ?
Perhaps TerrainColorImage would be better, no ?
kungfoomasta
06-10-2006 17:59:38
Yah, lets go with TerrainColorImage.
So I will update:
ImageFileName=ps_texture_1k
ImageExtension=png
ImageExportExtension=png
Into
TerrainColorImageFileName=ps_texture_1k
TerrainColorImageExtension=png
TerrainColorImageExportExtension=png
Also, if I remember correctly, the Template.default.gen.cfg has
ScaleX=1
ScaleY=1
ScaleZ=1
and Template.default.cfg has
ScaleX=90000
ScaleY=15000
ScaleZ=90000
Are these supposed to be the same, or am I still missing out on something?
Would all Color Map names need to match? (Are they referring to the TerrainColorImage?) For example, LitColorMapGenerated.
I will post up runtime cfg and gen cfg tonight. If anybody wants access to the source at this time I can put that online also. A small portion of mapsplitter and PLSM will need to be modified to support these changes.
KungFooMasta
tuan kuranes
06-10-2006 18:08:17
Are these supposed to be the same, or am I still missing out on something? Smile
its an error...
I'll fix that too.
I will post up runtime cfg and gen cfg tonight. If anybody wants access to the source at this time I can put that online also. A small portion of mapsplitter and PLSM will need to be modified to support these changes.
I'll modify that asap. I hope to have a new version monday at least.
Thanks for sticking on that despite answer delay and for providing your results.
That helps a lot.
kungfoomasta
06-10-2006 18:13:01
Wow fast response! I added another question regarding options using the string "ColorMap". Should they all be changed to TerrainColorImage? If they are related, than it should be. I'm just asking for clarification.
Glad to help, it should help everybody understand the options better
KungFooMasta
kungfoomasta
07-10-2006 06:39:57
I went ahead and kept the "colormap" label, since its consistent with heightmap, and makes sense.
The gen file has an option to enable/disable paging, but the runtime file doesn't show this option. Are runtime files always paged, or should this option also be available to runtime files?
Aside from the question above, The following gen and runtime file are what I have set out. Let me know if I am missing anything, or should change anything. All that's left is some minor changes to the app, and getting mapsplitter to work with some new options, and I can try to test this out with the PLSM.
gen file:
####### Generated by Terrain Generator #######
####### FileName: myTestMap.gen.cfg ######
####### GEN FILE: This file tells mapsplitter how to process the heightmap and colormap ######
TerrainName=myTestMap
## General Options ##
GroupName=PLSM2
HeightMapFileName=ps_height_1k
HeightMapExtension=png
HeightMapExportExtension=png
ColorMapFileName=ps_texture_1k
ColorMapExtension=png
ColorMapExportExtension=png
Paged=yes
OutDirectory=TerrainOutput\myTestMap
ScaleX=90000
ScaleY=15000
ScaleZ=90000
## Paging Related Options (no effect if Paged=no) ##
PageSize=513
TileSize=65
Data2DFormat=HeightField
MaxValue=0
MinValue=0
## Color Map Options ##
ColorMapStretchFactor=1
ColorMapSplit=yes
LitColorMapSplit=no
## Height Map Options ##
HeightMap=yes
InfiniteMap=no
HeightMapBlurFactor=0.0f
Equalize=no
MiniMap=yes
MiniMapWidth=512
MiniMapHeight=512
## Normals Options ##
NormalMap=no
HeightNormalMap=no
ColorMapGenerated=no
LitColorMapGenerated=no
## Splatting Options ##
NumMatHeightSplat=4
MaterialHeight0=0
MaterialHeight1=12
MaterialHeight2=60
MaterialHeight3=7
#Sand
MaterialColor0=1.0f 1.0f 0.0f 1.0f
#Grass
MaterialColor1=0.13f 0.545f 0.13f 1.0f
#Rock
MaterialColor2=0.411764f 0.411764f 0.411764f 1.0f
#Snow
MaterialColor3=1.0f 0.98f 0.98f 1.0
#needs to be in maptool directory
SplatFilename0=splatting_sand.png
SplatFilename1=splatting_grass.png
SplatFilename2=splatting_rock.png
SplatFilename3=splatting_snow.pn
AvgColorsExists=yes
BaseMap=no
LitBaseMap=no
## Maps used for Splatting ##
CoverageMap=no
AlphaMaps=no
AlphaSplatRGBAMaps=no
AlphaSplatLightMaps=no
RGBMaps=no
## Lighting Options ##
HorizonMap=no
ElevationMap=no
ZHorizon=no
## Visibility Options ##
PVSMap=no
runtime file:
####### Generated by Terrain Generator #######
####### FileName: myTestMap.cfg ######
####### RUNTIME FILE: This is the run-time file used to load the terrain into the scene ######
TerrainName=myTestMap
## General Options ##
GroupName=PLSM2
HeightMapFileName=ps_height_1k
HeightMapExtension=png
ColorMapFileName=ps_texture_1k
ColorMapExtension=png
## Paging Related Options (no effect if Paged=no) ##
Width=2
Height=2
PageSize=513
TileSize=65
Data2DFormat=HeightField
MaxValue=0
MinValue=0
## Terrain Properties ##
ScaleX=90000
ScaleY=15000
ScaleZ=90000
Deformable=yes
VertexCompression=yes
VertexProgramMorph=yes
LODMorphStart=0.2
MaxPixelError=3
## Lighting Options ##
VertexNormals=no
VertexLit=no
## Texture Properties ##
ColorMapStretchFactor=1
NumTextureFormatSupported=16
TextureFormatSupported0=ImagePaging
TextureFormatSupported1=Base
TextureFormatSupported2=Base2
TextureFormatSupported3=InstantBase
TextureFormatSupported4=Splatting
TextureFormatSupported5=Splatting2
TextureFormatSupported6=Splatting4
TextureFormatSupported7=Splatting6
TextureFormatSupported8=Splatting7
TextureFormatSupported9=Base
TextureFormatSupported10=Base2
TextureFormatSupported11=InstantBase
TextureFormatSupported12=Splatting3
TextureFormatSupported13=Splatting5
TextureFormatSupported14=SplattingShader
TextureFormatSupported15=InstantBaseShadowe
TextureFormat=ImagePaging
NumMatHeightSplat=4
MaterialHeight0=0
MaterialHeight1=12
MaterialHeight2=60
MaterialHeight3=7
#Sand
MaterialColor0=1.0f 1.0f 0.0f 1.0f
#Grass
MaterialColor1=0.13f 0.545f 0.13f 1.0f
#Rock
MaterialColor2=0.411764f 0.411764f 0.411764f 1.0f
#Snow
MaterialColor3=1.0f 0.98f 0.98f 1.0
#needs to be in maptool directory
SplatFilename0=splatting_sand.png
SplatFilename1=splatting_grass.png
SplatFilename2=splatting_rock.png
SplatFilename3=splatting_snow.pn
BigImage=no
VertexColors=no
CoverageVertexColor=no
BaseVertexColor=no
BaseVertexShadow=no
BaseVertexInstantColor=no
## Performance Options ##
VisibleRenderables=200
DistanceLOD=5
MaxRenderLevel=5
NumRenderablesLoading=50
MaxAdjacentPages=2
MaxPreloadedPages=3
ChangeFactor=1.5
CameraThreshold=5
MaxNumRenderables=256
IncrementRenderables=256
MaxNumTiles=256
IncrementTiles=256
HorizonVisibilityComputing=yes
## Camera Properties (on Terrain Load) ##
BaseCameraViewpoint.x=0.0f
BaseCameraViewpoint.y=0.0f
BaseCameraViewpoint.z=0.0f
Baselookat.x=0.0f
Baselookat.y=0.0f
Baselookat.z=0.0f
If you need the source to help make changes to mapsplitter/plsm, let me know and I'll zip it and throw it online.
KungFooMasta
ppClarity
07-10-2006 21:30:04
Looks like you're dropping a character at the end of some of the sections. Check out "MaterialColor3=1.0f 0.98f 0.98f 1.0" (no f) and "SplatFileName3=splatting_snow.pn" (no g).
Oh, and thanks for asking all those questions, it's been quite helpful
kungfoomasta
08-10-2006 00:40:44
Thanks for pointing that out ppClarity. My Code was actually skipping the last character when taking the text from a RichTextBox and writing to file.
Thanks!
KungFooMasta
OvermindDL1
09-10-2006 19:01:30
MFC is the standard Windows graphical API, nothing to do with the CLI. .NET uses MFC as its graphic back-end, so you are already using it, just with another (and relatively slow) abstraction layer on top. MFC itself is native, but the purpose is to get out of managed/mixed for no .NET dependency, so perfect.
If you release the source then I could help port it to something that will actually work everywhere, like wxWidgets.
Also, just a notice from the screenshots, maybe a more abstracted view of all the content, rather then dealing with the text boxes. For example, you could have a couple materials (where, when written to the file would have comment names and all such) that have a name, few definitions like textures and so forth, as well as being able to save them out into another native format so that they can be imported and used in other terrains as well?
pjcast
09-10-2006 19:20:57
I just want to clear things up. MFC is not the standard windows API. Win32 API is completely C based. MFC is a C++ wrapper that tries to make the regular horid API not so horid - but, by doing so, makes it more horid just in a C++ way
There are other layers too, ATL/WTL, etc etc.
Now, System.Windows.Forms is not a CLR wrapper for MFC at all. In mono, it is done via the System.Drawing API, so forms are drawn within the CLR. In MS's .Net implementation, they probably use very windows centric GDI drawing (I am not to familiar with the lowdown), but it is far from a MFC wrapper.
Plus, nothing makes his app Win32 specific, I am positive that his relatively simple app could easily compile under Mono on Linux or Windows.
kungfoomasta
09-10-2006 19:44:08
Until the mapsplitter is modified to accept the changed/added options I threw into the cfg files, I won't be able to learn more about how it works. So far I have been using the templates and asking questions, to add to clarity and consistency between the two cfg files, but the next step would be to use mapsplitter and be able to render terrain using PLSM.
For example, you could have a couple materials (where, when written to the file would have comment names and all such) that have a name, few definitions like textures and so forth, as well as being able to save them out into another native format so that they can be imported and used in other terrains as well?
I'm not sure I understand. From the looks of how the files work, SplatFiles can be specified to be used at certain heights on the terrain. I don't see where material scripts come into play. Are you asking for a Material Editor/Creator?
KungFooMasta
OvermindDL1
09-10-2006 22:15:01
I was trying to keep it simple. MFC is just the most common interface as the form editor's in VS directly output MFC classes. .NET does not do its drawing in .NET, it offloads most of it to the windows libraries (as MFC does) to draw a consistent interface (which I could describe in detail how it works, been using that monster for over a decade).
Mono still has issues...
Still doesn't help that .NET 2 refuses to not crash (as stated, .NET1 works). Although, I am about to install Vista RC2 in a virtual computer later this week, could always run it there I guess...
I still prefer native programs, no need to download a bloody huge runtime for a tiny 24kb program (my only foray in .NET programming, turned me off of it instantly).
Also, not referring to splats, just referring to basic setups like you could make a setup that contains a dirt layer, one for sand, etc... and combine them to different terrain files to keep all linking simple. Nevermind though, would make it more of a full editor rather then just an easy to use terrain generator.
pjcast
09-10-2006 22:32:46
I was trying to keep it simple. MFC is just the most common interface as the form editor's in VS directly output MFC classes. .NET does not do its drawing in .NET, it offloads most of it to the windows libraries (as MFC does) to draw a consistent interface (which I could describe in detail how it works, been using that monster for over a decade).
I agree keeping it simple is good. But, you have to be careful not to be missleading, and saying that Winforms is using MFC is clearly wrong, which led to your conclusion that the wrapper made Winforms slow was unfounded. You havn't seen an app use the C API? Apparently you have been blessed (although, i wouldn't call using MFC instead as blessed)
I never said MS's .Net drew controls itself. Likely, it uses the Win32 API API both documented and undocumented underneath. If you however, are blessed with the details, please provide a link. What I said, was Mono drew controls itself.
Mono still has issues...
I agree.
Still doesn't help that .NET 2 refuses to not crash (as stated, .NET1 works). Although, I am about to install Vista RC2 in a virtual computer later this week, could always run it there I guess...
I still prefer native programs, no need to download a bloody huge runtime for a tiny 24kb program (my only foray in .NET programming, turned me off of it instantly).
If you're concerned about speed, I doubt a virtual computer will be upto snuff running any .Net apps
As for size, there are various other techs that also require downloads - Java being the main. Which is of course, large also. DirectX SDK, etc. This is made easier for end users, as you can bet most people have .net already, or provide the Net download installer, or perhaps even include it with your install CD. As dev's, we are of course always downloading large lib's/apps, so I think that is a moot point. I hope you have broadband
</offtopic>
@kungfoomasta
Your app looks sweet, whenever you open the source, I'll be adding it to Ogre Studio as a plugin
- as long as it is LGPL.
kungfoomasta
09-10-2006 23:54:01
I haven't looked into differences in licensing, but this is a simple app like you said, so I will release the source, and people can do as they please with it. I just hope any mistakes I made get corrected, so that in the future it is easier to produce terrain cfg files and render the terrain with PLSM.
Usually on weekdays I get some responses from Tuan, I wonder if he is sick or really busy..
Hope we can use this app pretty soon!
KungFooMasta
OvermindDL1
10-10-2006 01:09:19
I hocked MFC out of all my in dev apps as of about a year ago, been using JUCE and wxWidgets ever since. Juce is by far the most simple and fast one I've seen, where-as wxWidgets has the power.
No issue with speed, I just don't like .NET due to the massive runtime download requirements with it (same reason I do not program in Java), and the fact .NET refuses to run. Any .NET app I try to run that uses .NET2 gives me a nice exception report with no information in a dialog box that is quite unique to the .NET exception reports. I've tried to reinstall and such, it just refuses to run...
jacmoe
10-10-2006 19:59:54
I would like to thank kungfoomasta for doing this!
For asking all these questions, and help making PLSM configuration a bit easier!
Kudos, man!
tuan kuranes
16-10-2006 13:01:16
Usually on weekdays I get some responses from Tuan, I wonder if he is sick or really busy..
sorry for the delay. But I'm on it now.
Question The gen file has an option to enable/disable paging, but the runtime file doesn't show this option. Are runtime files always paged, or should this option also be available to runtime files?
mapsplitter has to know that, but runtime can see it using width and height information (if width and height == 1 => no paging.)
MaxValue=0
MinValue=0
are only needed for TC data load mode (HeightFieldTC, HeightFieldRawTC, etc...)
a new Option is RoughnessLod = yes or no.
I went ahead and kept the "colormap" label, since its consistent with heightmap, and makes sense.
Ok, since no one raise the point, I'll follow your advice, just because you're the english native speaker there...
tuan kuranes
16-10-2006 18:04:52
Changes:
-Added "TerrainName=MyNewMap"
-Changed "LandScape" changed into "HeightMap"
-Added ImageFileName=ps_texture_1k
-Added ImageExtension=png
-Added ImageExportExtension=png
-Changed "ColorMapStrecthFactor" into "ImageStretchFactor=1"
-Changed "ColorSplit" into "ImageSplit=yes"
-Changed "LitColorMapSplit" into "LitImageSplit=no"
-I took out ScaleX=/ScaleY=/ScaleZ=, since I don't know their purpose.
-I took out ColorMapName, replaced by ImageFileName. ImageFileName does not include the extension, to be consistent with HeightMapName
Is there anything else or that's the definitive list ?
kungfoomasta
16-10-2006 18:46:16
Tonight I will provide an accurate changelist, as well as put online the new Template.default.gen.cfg file. I will also put up the source for the tool, and explain how it works and compiles together.
That changelist is off the top of my head, will confirm after work today:
1) Added TerrainName property, which affects the created folder's name, and can be used as a reference to the created terrain.
2) Added ColorMapExtension property, so that heightmap and colormap do not have to be the same, and it's more clear what type of file colormap is.
3) Added ColorMapExportExtension property, to match heightmap in consistency and functionality.
4) "ColorMap" stays "ColorMap", no "Image" usage. All listed options are not modified:
ColorMapStretchFactor
ColorSplit
LitColorMapSplit
5) ScaleX/Y/Z are still in both cfg files, and are enforced in the app to be the same in both cfg files.
6) MinValue and MaxValue should be able to be parsed, even if the TC data load mode makes this NA (parsed, just doesn't do anything)
7) I remember bigImage was commented out, this should be able to be parsed.
Tomorrow you should be able to grab the gen file I have up, and we can work on getting mapsplitter to parse and process it.
KungFooMasta
kungfoomasta
17-10-2006 02:09:09
Looking at the generated cfg files, I believe the previous post sums up the changes to the options. In addition to the changes, the app makes sure common options are the same in each file.
Here is the gen file that needs to run with mapsplitter:
http://projectstormsong.com/downloads/template.default.gen.cfg
Here is the run-time file that needs to be able to load terrain:
http://projectstormsong.com/downloads/template.default.cfg
Here is the Source Code, bundled with the release directory. The only reason it is of this size is because I didn't take out the media directory (~10mb):
http://projectstormsong.com/downloads/TerrainGenerator.zip
Building the project:
1) I Built Mapsplitter as a lib and included it in the project, along with the correct headers. If you want to use this same approach, you need to build
Tool_MapSplitter.lib.
2) I built the project in release mode, I don't think there is any reason to build in debug mode, so make sure the project is set to build in release mode.
3) Make sure the project's include and lib paths match your directory structure, via Project Properties.
4) As a note, the output directory and current working directory should already be set correctly, but you may want to check to make sure.
Using the application:
The app is very simple, basically there are 3 main tabs which guide the user through the process of creating 2 .cfg files, the first file used to process the terrain heightmap and colormap into usable images, and the second file used to render the terrain using PLSM. Images are also produced through use of the mapsplitter tool. The heightmap and colormap can be used by loading them via the "Load" buttons at the top of the first tab, and intially looks for maps in the "OriginalMaps" folder within the release directory.
As an example, I have made one tooltip for the HeightMap property. If you click the button labelled "?" you will see the tooltip appear. As there are many controls, and I am not comfortable providing definitions on what they represent, I did not create any more tooltips. This can be done at a later time, for additional understanding.
Note that the user cannot do anything on the 2nd or 3rd tab, until the generation cfg file has been created. The button for creating this is at the bottom. After the cfg has been created, the user can also edit this file manually, by clicking the "Edit Generation CFG File" button. This will load the file in notepad. Any changes to this file will be used by mapsplitter, but the changes will not be reflected by the application controls.
On the second tab, the Maptools.cfg is displayed, which is autogenerated after creation of the gen.cfg file. The contents can be modified and used by mapsplitter by modifying the contents of the Text Box. I was thinking it would be cool to split the Text Box in half, and have the bottom portion display the progress of the mapsplitter tool, but that would require some work, and changes of both the application and the mapsplitter tool. By default, pressing the button "Run Mapsplitter" should run fine with the generated properties.
The third tab works similar to the first tab, only with different options. You will notice many options are read only, because they must match the values set in the gen cfg file. If you really want to change these values, you can edit the file in notepad.
All generated output (such as cfg files and split images from mapsplitter) will be in the "TerrainOutput" directory in the release directory.
Hope there aren't too many bugs with the app.. at least nothing that requires a major amount of work to fix.
Please note that the app will not work until changes to the mapsplitter and plsm are made.
KungFooMasta
tuan kuranes
20-10-2006 16:40:31
It's in cvs.
kungfoomasta
20-10-2006 17:18:30
Awesome! I'll add in a few changes in the next few days.
KungFooMasta
kungfoomasta
07-11-2006 06:15:05
Hey Tuan,
Trying to get TerrainGenerator to work, and need your help with join debug.
First, you will need to update CVS with my modified BaseForm.h file, which fixes maptool.cfg generation (from rich text box), and has all controls labeled (not random, like button123).
http://stormsonggames.com/downloads/BaseForm.zip
Second, I would like you to mimick my Working Directory environment. Download this zip, and extract everything to:
X:\ogreaddons\paginglandscape\Tools\TerrainGenerator\bin\release
http://stormsonggames.com/downloads/release.zip
What is the directory "./2" for? Your code tries to create this in a try/catch block, and gives the following error:
-----------------------------------
Details:
-----------------------------------
Error #: 8
Function: FileSystemArchive::changeDirectory
Description: Cannot open requested directory ./2.
File: ..\src\OgreFileSystem.cpp
Line: 141
Stack unwinding: <<beginning of stack>>
21:56:37: An exception has been thrown!
This is the actual error message I get which crashes my app. It crashes when trying to execute:
Ogre::MapUtil *MapPrecompute = new Ogre::MapUtil();
MapPrecompute->Load();
[b]MapPrecompute->process();[/b]
delete MapPrecompute;
-----------------------------------
Details:
-----------------------------------
Error #: 8
Function: ResourceGroupManager::openResource
Description: Cannot locate resource .png in resource group PLSM2 or any other group..
File: ..\src\OgreResourceGroupManager.cpp
Line: 598
Stack unwinding: <<beginning of stack>>
Does maptool need plugins? Which plugins does it use?
What resources does maptool need? I don't see why I need Plugins_plsm2.cfg and resources_plsm2.cfg.
KungFooMasta
tuan kuranes
30-11-2006 09:20:31
New BaseForm in cvs.
What is the directory "./2" for? Your code tries to create this in a try/catch block, and gives the following error:
Cannot remember that, have to check...
Does maptool need plugins? Which plugins does it use?
it uses OgreMain and OgrePlatform, otherwise no plugins needed AFAICR.
What resources does maptool need? I don't see why I need Plugins_plsm2.cfg and resources_plsm2.cfg.
Access to Terrain to be splitter, at least.
kungfoomasta
10-12-2006 21:48:10
Seems that we need to add TerrainGenerator.cfg to CVS:
#### Terrain Generator Application Defaults ####
# Initial Directory Where the application looks for Heightmaps
HeightmapFolder=.
# Initial Directory Where the application looks for Colormaps
ColormapFolder=.
# Hard disk location where the application will store generated
# files, such as the gen/runtime files, and Mapsplitter produced images
OutputFolder=.
Also, the Output Path seems to be incorrectly created, for example:
OutDirectory=e:\DagonCVS\ogreaddons\paginglandscape\Tools\TerrainGenerator\bin\Debug\.\\town
problaby stems from code around Line 545 in BaseForm.h:
HeightMapFolder = HeightMapFolder->Replace("/", "\\");
ColorMapFolder = ColorMapFolder->Replace("/", "\\");
OutputFolder = OutputFolder->Replace("/", "\\");
HeightMapFolder = Environment::CurrentDirectory->Replace("\\", "\\") + "\\" + HeightMapFolder + "\\";
ColorMapFolder = Environment::CurrentDirectory->Replace("\\", "\\") + "\\" + ColorMapFolder + "\\";
OutputFolder = Environment::CurrentDirectory->Replace("\\", "\\") + "\\" + OutputFolder + "\\";
// update Visual Component
OutDirectoryTextBox->Text = OutputFolder + "\\TerrainName";
MapUtil.cpp Line 295 (inside catch):
rsm->addResourceLocation("../../../paginglandscape/Samples/Media/paginglandscape2/gui","FileSystem", "PLSM2");
But if it's run from paginglandscape\Tools\TerrainGenerator\bin\debug, should be:
rsm->addResourceLocation("../../../../Samples/Media/paginglandscape2/terrains","FileSystem", "PLSM2");
MapUtil.cpp Line 317, what is this doing?
try
{
ResourceGroupManager::getSingletonPtr()->addResourceLocation("./2","FileSystem", "PLSM2");
}
catch (Ogre::Exception& e)
{
String error = e.getFullDescription();
//..
}
-----------------------------------
Details:
-----------------------------------
Error #: 8
Function: FileSystemArchive::changeDirectory
Description: Cannot open requested directory ../../../../../ogreaddons/paginglandscape/Samples/Media/paginglandscape2.
File: e:\ogrenew_dagoncvs\ogremain\src\ogrefilesystem.cpp
Line: 141
Stack unwinding: <<beginning of stack>>
13:23:50: An exception has been thrown!
-----------------------------------
Details:
-----------------------------------
Error #: 8
Function: FileSystemArchive::changeDirectory
Description: Cannot open requested directory ../../../paginglandscape/Samples/Media/paginglandscape2.
File: e:\ogrenew_dagoncvs\ogremain\src\ogrefilesystem.cpp
Line: 141
Stack unwinding: <<beginning of stack>>
13:27:27: An exception has been thrown!
-----------------------------------
Details:
-----------------------------------
Error #: 8
Function: FileSystemArchive::changeDirectory
Description: Cannot open requested directory ./2.
File: e:\ogrenew_dagoncvs\ogremain\src\ogrefilesystem.cpp
Line: 141
Stack unwinding: <<beginning of stack>>
What resources are needed to run?
App is crashing when trying to load maptool.cfg.. not sure what the problem is.
It would be nice to get TerrainGenerator self sufficient, with everything it needs to run in "paginglandscape\Tools\TerrainGenerator\bin\debug", where the exe is generated.
This is the list of files (aside from resources..) that are needed in the directory:
OgreMain_d.dll
OgrePlatform_d.dll
plugins_plsm2.cfg (no plugins, just says "PluginFolder=.")
resources_plsm2.cfg (empty, just has [Bootstrap] and [General])
TerrainGenerator.cfg
TerrainGenerator.exe
Town.png (made from L3DT)
Town.JPG (made from L3DT)
Tuan, can you help me out?
KungFooMasta
grizzley90
11-12-2006 01:27:30
Can someone supply a fully working version in a zip or installer file because i have been trying really hard to get the copy from cvs but to work its either throwing exceptions when you run the mapsplitter or the mapsplitter just crashes everything. I am hoping this will help me sort out why some of my hand written config files aren't working.
tuan kuranes
14-12-2006 14:03:01
@grizzley90: latest CVS has been fixed. otherwise you'll have to use latest SDK.
@kungfoomasta: TerrainGenerator is inside CVS, in media/paginglandscape2/ and other path bugs fixed. and its runned from SDK/CVS Ogre bin folder now. Resources are at least the heightmap, color, and splats. "maptool.cfg" problems was coming from being read from exe directory badly, whereas "resource-folded" was working. both works now.
It would be nice to get TerrainGenerator self sufficient, with everything it needs to run in "paginglandscape\Tools\TerrainGenerator\bin\debug", where the exe is generated.
Too much distribution problem for me, I'll made it like mapsplitter that needs ogreMain, ogreplatform, etc... run from same directory as sample.
kungfoomasta
20-12-2006 08:38:49
Needed changes:
Line 379, in function "setGenDefaults()", change to
OutDirectoryTextBox->Text = OutputFolder + "<TerrainName>";
Line 554, in function "setAppDefaults()", change to
OutDirectoryTextBox->Text = OutputFolder + "<TerrainName>";
Line 75, in function "createGenFile()", change to
System::IO::FileStream^ fs = System::IO::File::Create(
OutputFolder +
GTerrainNameTextBox->Text +
".gen.cfg");
Line 5097, in function "GEditCFGButton_Click(...)", change to
notePad->StartInfo->Arguments = OutputFolder + GTerrainNameTextBox->Text + ".gen.cfg";
Line 178, in function "createRunTimeFile()" change to
System::IO::FileStream^ fs = System::IO::File::Create(
OutputFolder + GTerrainNameTextBox->Text + ".cfg");
Line 558, add as last thing inside function "setAppDefaults()":
Ogre::ResourceGroupManager* rgm = Ogre::ResourceGroupManager::getSingletonPtr();
// Add Heightmap folder to resource path
if( !System::IO::Directory::Exists(HeightMapFolder) )
{
// If directory does not exist, create it!
System::IO::Directory::CreateDirectory(HeightMapFolder);
}
// Add Heightmap folder to resource path, for use with mapsplitter
DECLARE_OGRE_STRING(heightMapFolder,HeightMapFolder);
rgm->addResourceLocation(
heightMapFolder,
"FileSystem",
"PLSM2"
);
// Add Colormap folder to resource path
if( !System::IO::Directory::Exists(ColorMapFolder) )
{
// If directory does not exist, create it!
System::IO::Directory::CreateDirectory(ColorMapFolder);
}
// Add Colormap folder to resource path, for use with mapsplitter
DECLARE_OGRE_STRING(colorMapFolder,ColorMapFolder);
rgm->addResourceLocation(
colorMapFolder,
"FileSystem",
"PLSM2"
);
// Make sure output folder exists!
if( !System::IO::Directory::Exists(OutputFolder) )
{
// If directory does not exist, create it!
System::IO::Directory::CreateDirectory(OutputFolder);
}
// Add output folder to resource path, to use produced gen and runtime cfg files
DECLARE_OGRE_STRING(outputFolder,OutputFolder);
rgm->addResourceLocation(
outputFolder,
"FileSystem",
"PLSM2"
);
-- I copied/pasted code 3 times, probably worth writing a function for. Very important, checks for existance of Heightmap Folder, Colormap Folder, and OutputFolder. Creates if doesn't exist, and adds to resource path. (
Should it check if resource location already added? Will exception be thrown?)
Line 534, in function "setAppDefaults()", remove
mMapUtil->init();
Line 35, add in BaseForm constructor, right after creation of MapUtil object:
// Creates OGRE root and sets up defined resource locations
mMapUtil->init();
Line 5242, in function EditRunTimeCFGButton_Click(...), change code to:
notePad->StartInfo->Arguments = OutputFolder + RTerrainNameTextBox->Text + ".cfg";
Line 5231, in function EditRunTimeCFGButton_Click(...), add code to end of function:
EditRunTimeCFGButton->Enabled = true;
I just realized the line numbers will vary, since I listed these changes in random order. Don't copy/paste blindly.
If things get too messy I can just throw my BaseForm.h online. I was able to generate gen and runtime files, as well as split the "gcanyon_height_4k2k.png" map successfully! Next step is seeing if the runtime file works for loading terrain!
tuan kuranes
20-12-2006 14:09:38
Please send me a csv patch instead. (using TortoiseCvs, rightclick on terraingenerator folder => select create patch.)
kungfoomasta
21-12-2006 07:41:07
Ok, created a patch. I went ahead and cleaned up the resource part, and also created and moved most of BaseForm.h code into BaseForm.cpp.
KungFooMasta