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.
Printable View
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