Wow!!!
Excellent work there Zaei, now lets see some elevation changes!!
Hehe, just kidding. But if you can, even better!
Printable View
Wow!!!
Excellent work there Zaei, now lets see some elevation changes!!
Hehe, just kidding. But if you can, even better!
Eventually. Those tiles are hardcoded, just as proof of concept. Next comes an actual manager, etc. Also, I have to figure out an algorithm to align tiles on triangle borders, or I get some ugly artifacts with the blending =). Then I have to come up with an editor for the tiles, and such =).
I also want to change the amount of overlap on the tiles, and maybe even vary it (so each tile is more like a puzzle piece =)).
Z.
That looks nice Zaei. Bit pixely but i guess thats the texture.
Hmm, looks like it cud take a while for me to implement the try catch thing. i will experiment a bit first to get used to using it.
Can i test to see if memory is leaking from my code in any way ?
Cheers for the core. now im trying to figure out where its gotta fit into it lol.
You can test for memory leaks by overloading new and delete, and storing the number of allocations and de-allocations.
Z.
I got logging implemented =)Code:
-= Divinity Networking Module =-
-------------------------------------
-Sockets Initialized
-Network Selected: DN_IP
-Network Initializing: DN_SERVER
-Server Version: 1.1
-Server Name: Times Of War
-Game Name: Crystal Rain Server
-Groups Created
-Connections Initialized
-Locked Server
-Max Clients: 10
-Network Initialized
-Network Starting
-Server Listening: 213.78.79.37:5600
-Core Thread Started
-Network Started
-Connection
-Address: 127.0.0.1:2357
-TCP Thread Started
-UDP Thread Started
-TCP HELO Command
-TCP VERS Command
-TCP USER Command
-TCP PASS Command
-TCP JOIN Command
-TCP EXIT Command
-UDP EXIT Command
-TCP Thread Stopped
-UDP Thread Stopped
-Network Stopping
-Core Thread Stopped
-Server Closed
-Network Stopped
-Network Terminating
-Groups Destroyed
-Network Terminated
-Sockets Terminated
Looks excellent Psy!
Nice =).
Z.
Well, I have some good news =). I have gotten the terrain working correctly, textured, etc, and I ahve implemented a TOW_Map class that contains the tiles and such. Now, I created a 10x10 tiled map, with tiles 6.0x6.0 meters, with 15x15 quads. Textured, and alpha blended, at a whopping 253 frames per second. On my card =). It looks excellent, and its nice and fast =).
Psy, something I noticed in the log above:
Is this right, or should it be switched?Code:-Server Name: Times Of War
-Game Name: Crystal Rain Server
On a different note, I will be going out of town in the morning, and i will be back home Sunday night.
Z.
Yea it should be switched. I havent really thought about the layout at the moment (variable) wise and so in the dn_session class username in a server is server name and name is gamename. i have to sort it out and change it around. Now i have the base code going i gotta think about how this would all work in reference to joining a game etc and re-do it.
heres what i have thought.
I think something like that is best and allows for expansion etc. and easy automation. Im expanding / changing the class now to allow for this.Code:
1) User selects to run as client.
2) Client class Initializes
3) They enter username, password and select a server/port/game from the list
4) If an OnConnect(DN_CLIENT) is received Join(gamename) is called.
5) If an OnJoin() is connected then a request to join the lobby is sent. if allowed OnLobby() is called.
6) When OnLobby() is called the engine can display the lobby screen in which users can now talk to each other.
7) Then when the host (server) clicks on RunGame the clients receive a OnGame() call in which the game starts running and data is passed through the UDP connnection.
Servers at the moment will have to be dedicated. Im thinking that when a server is started the lobby screen is shown which is where they can chat with the others / set options, then once they click OnGame the server, joins the game too (or can see whats going on) like a watcher (they dont play) until i can work out how to make it so theyre dedicated or not.
All of this will be working in seperate threads to allow for OnConnect() etc to be called and handled while the networking works on verifying the username/password etc.
Looking good, Psy =). Keep up the good work, and I will be back on Sunday.
Z.
Well, i have spent the last 3 hours re-writing 1,500 lines of code to get the networking how we want it. currently version 6, lol :D
I wont even bother versioning until we release the first set of binaries to the general public =).
Z.
Ok, I'm feeling ASP-dumb this week, and I can't seem to get anything right. As a result, the downloads and news pages will be automated tomorrow, but the site release is going to be set back.
It happens =). You have been doing great work!
Z.
Well i did it locally on my pc so that i can keep track of each re-write that i do. Yet it is still version 0.1
I got some code from flipcode for memory leak tracking although it uses STL which i dont know how to use so i gotta play around with it till i get it working.
I know the code you are talking about. You can pretty much ignore the STL sections of it, and just use the overloaded new and delete operators.
Z.
Well, i got it to work using STL. It shows no memory loss, although i cannot get it to work with new[] and delete[] only new and delete.
I have almost got the dll redone and will be working on some demo applications next.
Well, I spent the evening screwing around with the terrain rendering, and managed to drop the frames per second down to about 3 =). I will spend tomorrow fixing that up, and optimizing it a bit.
Z.
Okay, real sorry about the latent slowness around here lately. I've basically not been doing my end of the job and that will stop tomorrow. If possible I'm spending the full day on it.
I fixed the terrain rendering, but it is still slow (my card's fault). I will be doing more work on that in the next few days.
Z.
Im working on a class to be implemented into the engine that will work the networking for us. Im also implementing the error checking and reporting. I will fill out all of the details in the class as full as possible, like i will have a switch statement built into OnError() for you that has all the errors and when they can occur to make it easier for you to use Zaei.
I had a little problem with disconnections which is half fixed though im not totally happy with it.
well this is my first post in this thread (and I am probably gonna regret posting, because there is probably going to be 20 answer emails in my mail every day...)
well I have been to the page of tow quite a couple of times but I could not find out a whole lot there, so I am gonna ask you guys here.
1) Who is on the team? Seems like every big name of the Gaming Forum is on (mainly talking about Zaie and Sastraxi)
2) What's the game exactly about? what will be the options? I know its RTS but will it be with a lot of buildings, no buildings, future, past, science???
3) how far are you yet?
4) can I have the source Ha Ha Ha!
1) Sastraxi (Project Leader), Zaei (Engine), PsyVision (Networking), InVitro (Music), Real Igor (Music), Norman Nomein (Dunno LOL), Jorj (Story Line)
2) Not too set in stone as to what its about, not too sure on options (as im not doing this). there will be buildins and in the past i think.
3) How far ?? Well, the enigne is coming on fairly well, Zaei is working on the terrain at the moment. The game hasnt been coded at all. The networking is half working.
4) Erm, NO! :P
- Check out the web site and demo @ www.crystal-rain.com
Im sure Zaei and Sastraxi will fin in the extras and the bits i missed / could not answer.
I knew it it only took like 3 seconds for an answer an I feel when I next check my mail I will have a mail of my provider telling me I have to upgrade to professional accout since I am getting more than 1000 emails a day... :p
well that will be really interesting... can't wait for some downloads and some sever running :)
how are you setting up the network? pure VB?
is the graphics gonna be kept pretty simple? Or are you doing thousand of optimations to make a fast detailed 3d engine??
well I wish you best luck I know your team is really talented...
I will take a look in here from time to time and if you want I can do some testing...
Cheers for da luck !
The whole project (or at least 90%) is in C++ for pure speed.
The graphics engine is / will be optimized for best results on low end computers.
The networking will work via an internet explorer link where by you can enter an url / click a limk and it will run the game and logon to the server to join and play the game.
Or there will eb the conventional enter an ip/port and connect.
- For Zaei -
Im am implementing the OnError function at the moment. Here is a but of information on the structure of it.
When it is called it switches the module the error was generated from, either:
DN_MODULE_NONE = Divinity Sockets
DN_MODULE_NETWORK = Network Error
DN_MODULE_SERVER = Server Error
DN_MODULE_CLIENT = Client Error
It then splits into another switch that decided what the error is by calling the various GetError() remarks and handles it.
Yes, because most of us have slow computers (darn it, Psy!!! :p) we're going to make it so low-end computers can play it, but will of course have added grahpical effects (such as bumpmapping, fog, and high-poly versions) for the fast computers. At least that's what I'm hoping for ;)
Thanks, the first thing you can do is test out the demo and the second is to, very shortly, try out the fora I am making for our development team. Unlike most of everyone elses' fora, this one will be grammatically correct and will serve a purpose :D
haha show me where your forums are at an I will use them :rolleyes:
well anyways I guess its a matter of which language it's supposed to be and a matter of how smart you want to sound :)
I read on the page something about you and I :) that immediatly came to my attention. Here in Germany we even learn to say you and me because everybody does, but luckily after living one year in the US I am capable of doing it the right way to :p (didn't that just sound great? ..no?:eek: )
well right now I got what you could call a moderatly fast computer so if you hurry up with releasing a demo I will run it on this pc, if it takes another year, my pc will be crap... already nearly one year old...
C Athlon 1400 256MB DDR (I know I need more of that :)) and a slow G-Force 2, that does all I need for now and it was cheap! :)
well then...
I was having a problem really pissin me off earlier which is now sorted. the connect was just hanging and saying it had when it hadnt so i had to use a hint in the divinity sockets to work them properly.
Im still torn over how to do the error handling.
Should i have one big function called when an error occurs
OR
Should i have it so it sets a variable to the error then if the function returns an error u can check the variable (im going for this).
Well.....
... as i said, check the web site. It has a demo on that in the downloads section. also check www.crystal-rain.com/preview and you will see some more up-to date information.
You need Direct X 8.1 to run da demo.
That's where the forums will be shortly. You see the big shiny Forum link that doesn't work? Hehe, I need some time. But the fora will be up in all of its beta glory, while I finish the rest of the site.
Oh, and Psy lies, the preview has no factual information in it whatsoever. :D
I Lied ?
I thought the introduction page had some on ?
well at least I couldn't find any downloads (except for music maybe, but I am not gonna switch off my pc player for anything!)
Sorry for that little hiatus I took, guys =). The terrain rendering is fixed, though not as optimized as I would like. I will keep working along on that =).
/\/\isanThr0p:
Yeah, the engine will run on slow computers (that what I have, so it better =). That means that the graphics will be fairly simple (as long as it gets at least 5 fps on my computer =), but I plan on throwing in a few bells and whistles, for those people with the big guns.
As for question 3, above =). The game is designed so that everything is loaded from data, so, theoretically, it could be any time period, with or without buildings (though the TOW game itself will be past, and with buildings =).
Z.
hey, if you give me a mail address i will send the demo to you.
okay,
i have scrapped the OnLogon etc calls. I have changed the client / server calls to prefix __ and the network prefixed with _, then the module that goes into the engine has Logon which calls _Logon which calls __Logon (working through the modules). I can then use this Logon function within the engine to switch out the errors and handle them from there (a lot easier).
welll I looked at your enginge and I got to say I like it!
the snow is nice and the way you can already interact with the objects is pretty cool!
Keep it up!
Well, I havent done a thing this evening, but my brain has been churning. This time its more terrain stuff (its just not as fast as I want it to be =( ), and pathfinding.
Psy: From a design perspective, do you think that I should throw the pathfinding stuff into the actual TOW_Map class, or keep it external? Im thinking that it should go inside, and we can then have some methods like "list<path_node> FindPath(VECTOR start, VECTOR end)", and such. Let me know what you think =).
If someone would like a job to do, I would be really happy if someone could put together a tile map editor (allows the placing of tiles). A few things it should include are:
- Tile placing, with an arbitrary number of tile textures, on an arbitrarily sized, square grid
- Saving and Loading(come up with a file format, preferably binary)
- If feeling very ambitious, the ability to load in a greyscale heightmap of any size, and progressivly place tiles (so that high slope ares have barren textures, high altitude, low slope areas have snow, low altitude, low slope ares have grass, coastal ares are either sandy or muddy, etc.
I dont really care what language its done in, but it would really speed things along =).
Z.
Is the pathfinding going to be automatic, or will the mapper have to include it himself? If it's going to be automated (generated at run-time) we should keep it in a temporary map that is generated at runtime. In all cases, I think it should be inside of the tow_map class.
And about the tile map editor, I may be able to start this for you Zaei. Only things I need to know are whether it must be in 3D, and whether the file format will store the heights of the terrain.
What I had originally intended for ToW was for the mapping to be in 3 parts: Tile Map Editing, Height Mapping -> Dynamic Texture Generation, DScript Editing (for special events).
Basically we can have a sort of "entity" like Half-Life has in its WorldCraft editor, that is only an X-Y-Z placeholder. Editing this "entity" (maybe we'll call it TOW_Entity? ;)) will let you load presets and edit the DScript behind it.
Also in a while, I want us to make an external DScript editor, that will allow for Point-And-Click editing, and then editing the actual DScript. The reason for this is so it is easier to make the base (through point-n-click), and then edit it for full power.
I need your input guys!
I think the path finding should go within the map class. Perhaps in the map editor as a thing to add after we could make it so u have to "compile" the mpa, this sets up the path finding and saves it for the enigne to load, as well as setting the DScript up.
I think the Entity idea is a must !!
I cant really help with the map editor though i can probably do something for the DScript editor if you can expand on the point n click.
Do u mean like vb when u stick a control on the form it would add sa base code for OnLoad / OnClick, then an actual text editor to add the rest ?
I.E. it does some of the coding for you ?
The pathfinding will probably be runtime, so no information needs to be included in the map.
If youve ever seen the Warcraft2 map editor, that is basically what I want. If you have seen the Unreal Editor, having that tree browser with available entities, that you can edit, that would be excellent. For instance, say you have a town hall entity. You could have a DScript function that does something when the thing is being built, etc.
Please explain about the three mapping stages =). My plan was that a height map would be generated, and then tiles would be placed on the heightmap grid (so a 3x3 heightmap would have 4 tiles), either by hand or automatically (procedurally). Then it could be edited by hand to produce the map desired. Once that is complete, buildings and units could be placed, and any special DScript code would be implemented.
We will definatly have the entity thing. It is required, since everything is going to be loaded from data =).
Z.
I should hopefully sort this networking out today. kind of in a mess at the moment.
I got the networking sorted and im currently sorting out the error checking. Im using a method of virtual functions and non-virtual checking.
dn_networking::Logon (in the engine) calls dn_network::_logon (in the dll) which calls dn_client::__logon (in the dll).
If all is successful OnLogon is called, which returns true this can then allow Logoff etc and other calls to be made. If an error occurs it returns the module the error occured in. which can be switched out:
Code:
int Initialize (int network) {
int result = dn_network::_initialize(network);
if (result != DN_TRUE) {
switch (result) {
case DN_MODULE_SOCKETS: {
int error = dn_network::_geterror(result);
switch (error) {
case DS_OUT_OF_MEMORY: {
// No Memory Available To Be Used
}
case DS_NO_NETWORK: {
// No Available Drivers To Be Used
}
}
result = DN_FALSE;
break;
}
}
}
else {
result = DN_TRUE;
}
return result;
}
Thats the mammoth ass that i have been coding recently :DCode:
class dn_networking : public dn_network {
private:
int OnInitialize (int network) {
cout << "OnInitialize" << endl;
return DN_TRUE;
}
int OnTerminate (void) {
cout << "OnTemrinate" << endl;
return DN_TRUE;
}
int OnLogon (char *server, int port, char *username, char *password, char *game) {
cout << "OnLogon" << endl;
return DN_TRUE;
}
int OnLogoff (void) {
cout << "OnLogoff" << endl;
return DN_TRUE;
}
int OnError (int module) {
return module;
}
int OnConnect (int module, char *address, int port) {
cout << "OnConnect" << endl;
return DN_TRUE;
}
/*
int OnHello (int module) {
cout << "OnHello" << endl;
return DN_TRUE;
}
int OnVersion (int module, char *version) {
cout << "OnVersion" << endl;
return DN_TRUE;
}
int OnUsername (int module, char *username){
cout << "OnUsername" << endl;
return DN_TRUE;
}
int OnPassword (int module, char *password) {
cout << "OnPassword" << endl;
return DN_TRUE;
}
int OnJoin (int module, char *game) {
cout << "OnJoin" << endl;
return DN_TRUE;
}
int OnLobby (int module) {
cout << "OnLobby" << endl;
return DN_TRUE;
}
int OnGame (int module) {
cout << "OnGame" << endl;
return DN_TRUE;
}
*/
int OnDisconnect (int module, int index) {
cout << "OnDisconnect" << endl;
return DN_TRUE;
}
/*
int OnMessage (int module, char *username, char *message) {
cout << "OnMessage" << endl;
return DN_TRUE;
}
*/
public:
int Initialize (int network) {
int result = dn_network::_initialize(network);
if (result != DN_TRUE) {
switch (result) {
case DN_MODULE_SOCKETS: {
int error = dn_network::_geterror(result);
switch (error) {
case DS_OUT_OF_MEMORY: {
// No Memory Available To Be Used
}
case DS_NO_NETWORK: {
// No Available Drivers To Be Used
}
}
result = DN_FALSE;
break;
}
}
}
else {
result = DN_TRUE;
}
return result;
}
int Terminate (void) {
int result = dn_network::_terminate();
if (result != DN_TRUE) {
switch (result) {
case DN_MODULE_SOCKETS: {
int error = dn_network::_geterror(result);
switch (error) {
case DS_INIT_REMAINING: {
// Shutdown Of Previous Not Carried Out
}
}
result = DN_FALSE;
break;
}
}
}
else {
result = DN_TRUE;
}
return result;
}
int Logon (char *server, int port, char *username, char *password, char *game) {
int result = dn_network::_logon(server, port, username, password, game);
if (result != DN_TRUE) {
switch (result) {
case DN_MODULE_NETWORK: {
int error = dn_network::_geterror(result);
switch (error) {
case DN_NETWORK_ERROR: {
// Network Already In Use
}
}
result = DN_FALSE;
break;
}
case DN_MODULE_CLIENT: {
int error = dn_network::_geterror(result);
switch (error) {
case DN_CONNECTION_TIMEOUT: {
// Timedout Connecting To Server
cout << "Could Not Connect To Server." << endl;
break;
}
case DN_WAITING_TIMEOUT: {
// Timedout Waiting For Data
cout << "Server Accept Timedout." << endl;
break;
}
case DN_TCP_CONNECT: {
// Connected, Although -ERR Received
cout << "TCP Connection Not Locked." << endl;
break;
}
case DN_UDP_CONNECT: {
// Connected, Although -ERR Received
cout << "UDP Connection Not Locked." << endl;
break;
}
case DN_UNKNOWN_ERROR: {
// Unknown Error Occurred
cout << "An Unknown Error Occurred." << endl;
break;
}
}
result = DN_FALSE;
break;
}
case DN_MODULE_SOCKETS: {
int error = dn_network::_geterror(result);
switch (error) {
case DS_NO_NETWORK: {
// Divinity Sockets Not Initialized
}
case DS_INVALID_SOCKET: {
// Invalid Socket Specified
}
case DS_NULL_POINTER: {
// Invalid Address Object
}
case DS_SOCKET_ERROR: {
// Call dsGetSystemError
}
case DS_WRONG_TYPE: {
// Wrong Socket Type Specified
}
case DS_CON_REFUSED: {
// Connection Refused / Socket Already Connected
}
case DS_INVALID_ENUM: {
// Invalid Enum Specified (Possible: Wrong Socket Type)
}
case DS_OUT_OF_MEMORY: {
// No Memory Available To Be Used
}
}
result = DN_FALSE;
break;
}
}
}
else {
result = DN_TRUE;
}
return result;
}
int Logoff (void) {
int result = dn_network::_logoff();
if (result != DN_TRUE) {
switch (result) {
case DN_MODULE_NETWORK: {
int error = dn_network::_geterror(result);
switch (error) {
case DN_NETWORK_ERROR: {
// Network Not Setup As Client
}
}
result = DN_FALSE;
break;
}
case DN_MODULE_CLIENT: {
int error = dn_network::_geterror(result);
switch (error) {
}
result = DN_FALSE;
break;
}
case DN_MODULE_SOCKETS: {
int error = dn_network::_geterror(result);
switch (error) {
case DS_NO_NETWORK: {
// Divinity Sockets Not Initialized
}
case DS_INVALID_SOCKET: {
// Invalid Socket Specified
}
case DS_SOCKET_ERROR: {
// Call dsGetSystemError
}
}
result = DN_FALSE;
break;
}
}
}
else {
result = DN_TRUE;
}
return result;
}
int Start (dn_session *session) {
int result = dn_network::_start(session);
if (result != DN_TRUE) {
switch (result) {
case DN_MODULE_NETWORK: {
int error = dn_network::_geterror(result);
switch (error) {
case DN_NETWORK_ERROR: {
// Network Already In Use
}
}
result = DN_FALSE;
break;
}
case DN_MODULE_SERVER: {
int error = dn_network::_geterror(result);
switch (error) {
case DN_THREAD_ERROR: {
// Could Not Start Thread
}
}
result = DN_FALSE;
break;
}
case DN_MODULE_SOCKETS: {
int error = dn_network::_geterror(result);
switch (error) {
case DS_SOCKET_ERROR: {
// Call dsGetSystemError
}
case DS_OUT_OF_GROUPS: {
// Reach Maximum Groups
}
case DS_NO_NETWORK: {
// Divinity Sockets Not Initialized
}
case DS_OUT_OF_MEMORY: {
// No Memory Available To Be Used
}
case DS_INVALID_SOCKET: {
// Invalid Socket Specified
}
case DS_INVALID_ENUM: {
// Invalid Enum Specified (Possible: Wrong Socket Type)
}
}
result = DN_FALSE;
break;
}
}
}
else {
result = DN_TRUE;
}
return result;
}
int Stop (void) {
int result = dn_network::_stop();
if (result != DN_TRUE) {
switch (result) {
case DN_MODULE_NETWORK: {
int error = dn_network::_geterror(result);
switch (error) {
case DN_NETWORK_ERROR: {
// Network Not Setup As Server
}
}
result = DN_FALSE;
break;
}
case DN_MODULE_SERVER: {
int error = dn_network::_geterror(result);
switch (error) {
}
result = DN_FALSE;
break;
}
case DN_MODULE_SOCKETS: {
int error = dn_network::_geterror(result);
switch (error) {
case DS_NO_NETWORK: {
// Divinity Sockets Not Initialized
}
case DS_INVALID_SOCKET: {
// Invalid Socket Specified
}
case DS_SOCKET_ERROR: {
// Call dsGetSystemError
}
case DS_INVALID_GROUP: {
// The Group Id Was Invalid
}
case DS_FIND_SOCKET: {
// The Socket Was Not Found Within The Group
}
}
result = DN_FALSE;
break;
}
}
}
else {
result = DN_TRUE;
}
return result;
}
int GetError (int module) {
return dn_network::_geterror(module);
}
};
Looking good, Psy =).
Z.
I split it up no into a .h and .cpp
Though at the moment it doesnt seem to want to work properly so i gotta do some debugging.
Quite a lot of thos errors will never happen (or at least shouldnt) but i have put the there for sheer safety. I will let you know which of those are which and you can just output a "Serious Internal Error" Message.
I am busy proofing thorugh every single possible error that could occur now (ie all of the functions that werent error handled before, are now).
Well, I think that the speed problems with the terrain are fill rate based, so I am going to put together a little distribution for you all, so you can get back to me with a variety of cards.
Z.
Okay, once you send it do you need the system specifications? My old computer is highly overclocked so I can play some newer games ;)
So...
Celeron 533
GF2 MX 400 @ 210/200 with FSAA (normal 180/150 I think)
AMD 1.8 (is that Athlon, think so)
GeForce3 Ti 200 64MB
512 DDR RAM
Yeah, System specs would be great. I just need to know if I get acceptable speeds on today's average video cards.
Z.
Oooh, send it to me too.... :)
Ill be posting it here =).
Z.
According to somewhere, I read that most casual gamers have GeForce2 GTS to GeForce 3 Ti200, and die-hard gamers have Radeon 8500 (8800 and 9000 soon to come maybe?) and GeForce4. Budget computers will have fast CPUs but bad graphics cards.
Also, I read the average 3Dmarks was something like 3000 (not sure the exact number, or when I read it). You may want to base the work on these claims.
Oh, the forum is FINALLY coming along nicely, and I'm just about to make it so that there is a hidden forum, called "News", that only we (Administration) can see. Anyone else is denied access (they can't see it anyways). Then, the news page takes all the threads from this and displays them depending on what you want (3 day news, archived, or all of it). You can also discuss the news item in the thread, because I'm making it so they can view and REPLY only to posts in that forum.
What does everybody think?
Oh and Zaei I hope it's okay that I stole the "Divinity" name for the forum (Divinity Forum Beta 1).
If there's any problem let me know!
=)
You can use the name all you want =).
I will have to DL 3DMark, to see how my card scores (45, probably =).
Those forums are sounding great! I cant wait to post in them =).
I just finished the test for you all. I wil be sending it to Sas, because I am actually running Linux right now, so I cant post to the CR website. Sas, you can either post it to the web site, or email it along, which ever you choose.
Ignore all errors, unless nothing actually shows =). There is a little error in the osftream class caused by my overloaded new and delete, which will cause an error when you exit. The only key you need is the esc key, which exits. All other instructions are included in the zip file's comments. Basically, you extract the terrain test zip file, to get the DivShell, tow, and textures zip files. extract DivShell anywhere you like. That has the main executables. You MUST MUST MUST extract the tow zip to C:\Times of War\ or it wont work, and you MUST MUST MUST extrac the textures zip to C:\TexCache\ or it wont work. Other then that, enjoy =).
Also, tell me how you like the camera positioning =).
Z.
PS: 7 smilies in this post. That must be some kind of record!!
I'll retain it for now, and post it when the new site is done. The files will also be forum-integrated, being the same as News.
7.44385, from Debug.txt