This page is provided to give general information about the project, while specific area and project information will be on their respective pages. My mailing address is joelu@oocities.com , and please start subject lines with FG: to show they are to do with this project. Development platform is DJGPP V2 and Dos. Expected libraries used will probably be Allegro, and maybe mikmod, though I favour developing new specific libraries, if these aren't good/fast enough for game programming.
I run a 486DX-66 with Dos, Win95 and Linux, a 1.3 gig hard drive, an S3 Vesa Local Bus graphics card. I also have access to a Pentium 100, with a crummy trident card. I have a thunderboard, and the other computer a sound blaster compatible. Just so you know.
The focus will be on general game engines using object oriented (C++) approach, which may be simply and easily made into specific engines with optimizeation. The idea being That you create a game with the general engines, and when it is working as its supposed to, you optimize the code to be specific to your particular game.
For example, I'm working on a general tiling engine, which works in many graphics modes, with any tile size. Your game may only want 16x16 tiles in 800x600 Vesa SVGA resolution. So, you develop the game in its entireity with the general engine of mine, then when it works, go through and optimize the parts to make it specific to 16x16 and the SVGA resolution.
With this in mind, an object oriented approach makes a lot of sense. With all engines, sample code and documentation should be provided, along with perhaps some info about where and how you can optimize the code, and possibly some specific optimized code to show how its done.
Any disk file formats, read or written, should be documented as well. Now, I'm stressing documentation at this point, but this documentation will be a work in progress, and I'm hoping that by using the engines, the public code which becomes available will be documentation in itself.
I don't exactly know what to put in this section yet, but hopefully it will become more filled out after discussion with others. I should put a standard disclaimer : I place no warranty on anything contained in these pages, or its suitably for your computer or any particular task, nor do I accept responsibility for any damage to anything because of the use or misuse of anything here. I hope that means something to you.
At the moment, the code available here is only for the use of contributors and fellow programmers, and should not be used for profit without first consulting the ... well me. The people involved. You know what I mean. Other then that its freely available to develop with or learn from. This code and these pages are here to give the development of free internet games and games related software a small boost. Any profit from its code should be shared with the DJGPP development people - check out www.delorie.com to find out about them. (I really should link that. in a bit.)
Okay this stuff will be pretty loose for a while. I want to talk about input first. I favour all input devices to use a common method structure ; init, get, done. These three are used to access all devices, thus if mouse is a mouse input object, key is a keyboard object and joystick is a (you know) object, then mouse.init sets the mouse up, mouse.get gets its values, and mouse.done removes the handler.
I also favour using public data in objects to access devices, eg the variables mouse.x, mouse.y and mouse.buttons contain the appropriate values after mouse.get has been called.
I favour using many abstraction layers to allow code generalizeation. I favour using publically accessible pointers to objects as a way of abstracting the code from its interface. Unfortunately I haven't got this far in C++ yet, but in turbo pascal (sorry, I'm learning) its done like this ;
The above code draws a box with those co-ordinates, but because it goes through a pointer to an object, by simply changing that pointer, you can change the graphics mode, or draw to virtual screen of any size, depending on the object. This gives us a common simple interface to a mass of completely different methods. I will be making a double buffering base engine, which will use this method. It probably will have many pass through calls to Allegro drawing functions where they are appropriate, to get it up and running fast, and also provide an easy means for optimizeation.