Blog - Progression 1
Early History (January 2007 - April 2007)
This is an archived blog containing development information and various tidbits, as written by the Arcanoria Project Lead, Arcanor. Where there are images embedded in each entry, you can click them to see an enlarged version. If you'd like to read the most current events, start at the top. If you'd like a trip down memory lane, starting at the beginning, please read from the bottom up. Have fun reading!
This particular page contains the oldest blogs from the very beginning of the project. This includes some very early attempts at using Ogre3D and CrystalSpace, as you can read below. For other Arcanoria blogs, see below.
April 15, 2007 - Here's some more recent Changelog entries.
========
20070415
========
- still having difficulty resolving a couple of nagging issues using newton physics, so I've started investigating other possible solutions. Made a backup of the project source and then took out all newton references. Now considering two new alternatives which are widely different to each other. Bullet may be a good replacement for newton. Another possibility is to use Torque as a replacement for the entire engine (i.e. starting from scratch replacing Ogre and everything else as well). More to come soon...
========
20070413
========
- prevent walking up slopes > 60 degrees, even if done at an angle.
- allow climbing onto small objects below a certain threshold (set character to ellipsoid) - should use a spring??
- lots of other physics tweaks over the last week or so to create a believable "kinetic control" object appropriate to an RPG. It's still not perfect, but looking much better.
========
20070412
========
- loading of basic meshes/positions/etc. from "*.scene" files
========
20070410
========
- code cleanup after the major changes recently
- added physics materials, to allow objects to selectively "pass through" objects of certain types.
- added jump command, including testing if on ground (requires custom collision callback testing)
========
20070409
========
- created new ArcObject class, to encapsulate Ogre::Entity and OgreNewt::Body and other data
- enabled Ogre Eihort's built-in memory leak detection, and fixed all memory leaks.
- added a gravity toggle for testing purposes.
April 9, 2007 - Here's some more recent Changelog entries.
========
20070408
========
- created new ArcPlayer, ArcWorldMgr, ArcCEGUIMgr classes, dividing up the functions from ArcScreenMgr class.
- implemented and tested gravity & collisions. This was a lot of work! It involved a lot of actual math and physics including vectors and quaternions.
- changed scale of all world objects to 1 unit = 1 meter (this was a major problem, due to unforseen dependencies affecting camera position, collision boxes, etc.). This required removing all objects and re-creating them in blender (where possible) at 1 unit = 1 meter scale.
========
20070406
========
- created new command alt-Z to show/hide debug boxes around objects
- stopped F10 from pausing game (alt key substitute: windows is trapping it to get to system menu). This required submitting a patch to the Ogre engine.
========
20070405
========
- began integration of physics library (Newton)
- been working on smoothing out the 3D model pipeline from Blender, so other artists can contribute easier
- integrated numerous basic textures for skinning models into my blender environment
========
20070403
========
- implemented new FramedImageButton CEGUI widget type, and put 10 of the new buttons on the button bar
- added a resource loading bar during startup
- stopped ALT-key combinations from beeping. This required submitting a patch to the Ogre engine.
April 2, 2007 - Here's some recent Changelog entries for ya'...
========
20070402
========
- added a DebugInfoPane to put FPS information in (instead of the default ugly Ogre Debug Overlay)
- improved speed of FPS reporting so it's not a big drag on performance (only updates screen once per second)
- added a calculated value for FPS in addition to Ogre::Root's reported value. They're usually pretty close, but not identical.
========
20070401
========
- partially implemented a GUI button bar, including exit button
- implemented GUI tooltips
========
20070331
========
- added a frame timer, distribute it as an argument to update(), and inject the timer value into CEGUI for use with tooltips, etc. later on.
- GUI customizations to mouse cursor graphics
- enlarged the imageset to make room for new color swatches and other GUI items to come
- got a Quit button working
========
20070330
========
- don't update screen if not visible
- ability to reload from original layouts of main gui or test gui windows during runtime (for testing)
- GUI loading from layout files
========
20070329
========
- load gui layout from media file (.layout) instead of creating with c++
- ability to save camera positions and restore previously saved values
- ability to reset camera positions to starting values
- ability to adjust camera relative to base settings (basic up/down X-axis camera rotation command for now)
========
20070328
========
- created 4 distinct camera modes, and allow switching between them: Chase, 1st Person, Stationary, Top Down.
- key-based ninja movement
- fixed - bug: mouse clicks shouldn't register in app when outside app window, or on "edges" of main window (cegui forum post) need to "mute" the click events somehow until the cursor comes back into the main part of the window.
- sound should mute when window not focused
- allowed graphics to continue updating even if app window doesn't have focus
- fixed bug: escaping config dialog crashes app
- when mouse in app window, should hide OS cursor except when on "edges" of main window - done
- bug: mouse cursor shouldn't move when outside app window - fixed
- fixed crashing bug where OpenGL selection causes heap corruption
- Well, we've finally decided on our engine, and it's going to be Ogre. Over the last few weeks it's become clear to me that I just don't have the stamina to keep going back to the IRC to get my CS questions answered, and I don't want to keep bugging those guys, who are working hard on making their engine better. Honestly, the decision also is due to engine bugs. In the last couple of weeks I found a few bugs in the engine code, and many more in the documentation. While I understand that all programs will have bugs, especially larger ones like CS, the bugs I uncovered were using what I consider very basic functions, which is worrisome. Unfortunately, there don't seem to be nearly as many users of CS as compared to Ogre, so in CS there are many things that don't end up getting properly tested and debugged before release. I really need dependability and good documentation and tutorials and search capabilities. Ogre gives me all that without my having to help them get there - they're already there. I'm excited about getting moving forward with game issues again.
- Reinstated all the Ogre codebase that I had been working on.
- Added a whole new Reporter Manager system, which is a central hub for any messages being passed around from place to place in the application.
- After days of coding, we now have a new Action Map system, which was made pretty much entirely from scratch. I'm quite proud of it! It has the following nifty features:
- accepts configuration from a text file that is parsed manually.
- the text file allows comments ("//"), and ignores spaces, so the file can be made quite readable for the user
- system allows for modifiers CTRL, SHIFT, ALT.
- system allows linking of function calls using the boost::function and boost::bind libraries
- user can configure functions to trigger based on key press or mouse button(s), including up to 7-button mice
- provides a mechanism for "latching" of key modifiers for stateful functions, so that when the key or mouse is released the original modifiers are applied and the state is properly ended.
- Enabled (and debugged!) loading of XML "world files". Was able to successfully load all the example worlds provided with CS, including terrainf, flarge, castle, etc. and use the Arcanoria game engine to walk around inside them.
- Created a simple plane and mapped a UV texture to it (grabbed from a free texture library) in blender, then exported it to CS's world file format and loaded it into the game engine. We have original 3D artwork!
- Separated out all the GUI code into a new GUI Manager class. Also added a new GUI on/off toggle for those times when I'm looking at the scenery and not the GUI.
- Separated out all the physical object/entity code into a new Object Manager class.
- Loaded a small "thing" mesh object on demand (with a keypress). This will be very important going forward as we will eventually build on this functionality to allow the server to send object creation requests to the client.
- Did some general code cleanup.
Mar 20, 2007 - It's been a busy week in Arcanoria!
- Deployed the client program to a 2nd machine (both running Windows XP) and was able to run it outside the development environment (no small feat).
- Implemented in-game audio, and am currently using it to play background music upon game initialization (many more uses to come later). I initially had used CS's built-in sound implementation (which happens to use OpenAL), but then ripped it out in favor of the FMOD library. FMOD is fantastic, I can't recommend it highly enough.
- Re-implemented CEGUI under CS, so now we have GUI windows again. Still need to set them up properly, but the base implementation is working.
- I've been reading lots of CS tutorials and spent lots of time asking questions in the #crystalspace IRC channel, and community forums. The CS devs are really nice folks, and make themselves remarkably accessible for noob questions.
- Started delineating the different tasks which will be allocated to the client and server applications. I've got a separate document for each, which helps to guide me as I move forward and decide what to implement next (and where).
- Updated the website content and style a bit. :)
- Switched over to Crystal Space (CS) as the main engine (replacing Ogre Eihort completely), since it seems to provide much more functionality. There have been some bumps in the road though. Thus far I've got a single room and I've been able to play with the textures, room size, and lighting.
- Implemented mouse events.
- Implemented ArcNetMgr, which lets the client application communicate with the server.
Mar 4, 2007
- Enabled the Eihort message pump, allowing the client window to use its title bar to do normal windows stuff like minimize, maximize, move, etc. This makes it much more convenient to use the client and server on the same computer (for testing purposes).
Mar 3, 2007 - Client/server code is taking shape. Able to use the existing client app (which is graphical) to send messages to the server (which is a console app). Server is also able to send messages back to the client. Successfully tested client and server apps running on separate machines. Houston, we have separation!
Feb 27, 2007 - I scrapped the ExampleApplication version of the project and started again from scratch, creating my own objects based on the new UML diagrams. I finally got around to implementing RakNet, so Arcanoria is now officially client/server, although there's no communication yet, but at least there's both a client and a server code base. :) Most of the prior functionality has not been re-implemented in the new code base though, including the CEGUI, and the camera movement.
Feb 25, 2007 - Okay, I've been thinking about how things should work in the BIG PICTURE and I've decided that it's important to create things properly from the start. I've been reading up on object oriented game development, and started making diagrams using ArgoUML (after trying several other tools, none of the free ones are great, although I'm sure rational rose is fine, it's just expensive!). I made a beginning deployment diagram and a simple use case diagram. My UML probably is incorrect, I didn't take a lot of time to learn how the different objects are supposed to be used, I more wanted to get some ideas down. I'll hope to fix it later. :)
Lots of miscellaneous demo functionality integrated together. Based on ExampleApplication.h (from the ogre demos). Implements eihort, OIS, CEGUI, example loading bar. Ninja, robot, and ogre from ogre distribution, plus a purple cube that my daughter made in blender and we exported, and Vic3 (no clothes yet) exported from DAZ Studio into blender, then out to ogre. Vic3 has 24k triangles, and caused some problems with the shaders, at least in debug mode, so I had to select a dumbed down version of the shaders for now. Camera movement with both mouse and keyboard works great. Sky is a curved plane. Still don't have anything animating or selectable yet.
Before January 2007 the whole idea of Arcanoria MMORPG was nothing but an idea!
Other History Blog Pages
Progression 2: The Torque Detour - blogs detailing our failed attempts at using Torque TGEA as our game engine. (April 2007 - January 2008)
Progression 3: Zen Engine Era - most recent blog entries showing the current state of Arcanoria development. (February 2008 - present)