adam_26jan2007.plan
So the logging system has been completely over hauled finally. There is now a separate logging thread so that write operations will not block inside the rendering loop. Formal logging messages are now implemented with logging levels so for public releases the logging level can be lowered from debug so there is less spam in the log file. Also as far as writing debug info goes, there is a much longer list of overloads for the write() function so any data type can be parsed out to text easily.
Also been working on the new 2D components to create a truly flexible base which a GUI Service will build on top of to provide a robust interface. Once this GUI service is complete it will be what the user sees instead of just loading straight into a BSP file. Then from there the user will be able to select the BSP file to load or exit the engine.
That along with 2 bugs that need squashing is all that is left on the release list!
So hopefully I can get those done soon and get a release out.
- Adam
adam_22jan2007.plan
I'm knocking down items on my release list fast and furious.
I finished implementing my new ConfigurationService which loads in *nix-ish config files in the form of:
# Commend line
[NameSpace]
Key1 value1
Key2 value2
[/NameSpace]
So they can be accessed like:
getValue( "NameSpace", "Key1" );
I hooked this up to the renderer already so the resolution and if it is full screen or not can FINALLY be set in a config file! This is something I have wanted to do since the engine started 2 years ago but always got put off!
The hooks for collision detection are finally in as well. Lets see what else...
I've been going through and slowly adding Doxygen comments to old code, as well as to all new code. I doubt the next release will be fully documented, but the one after that will be.
I also completely over hauled the boot strapping process of the framework which will crash more gracefully now if something fails as well as produce more informative log messages.
Also wrote the new unified TextureManagerService to replace the functions in the BSPManagerService. So now everything in the framework loads and manages textures in the same way. This is a big step because it allows for the 2D classes finally!
I'm debating what to do next now. There are 3 things left before I'd be comfortable doing another public release.
- 2D Interface classes
- BSPManager clean up code
- Asynchronous logger
While the 2D interface would be more rewarding, the number of logger calls is increasing a lot, and the longer I wait the more function calls will have to be replaced. So that will probably be next.
Theres still quite a bit of work left to do for a release, but getting close. Baring any unforeseen events, I should have v.6 out by the end of the week since I have nothing else to do!
- Adam
adam_18jan2007.plan
This ( Black Engine) has been, like I've said all along, a HUGE learning experience for me. I have tried to plan as much of it as possible by talking to people and doing copious amounts of research, but at the same time I didn't want to just copy other engines. I wanted to know I could come up with these ideas on my own.
As I've been working with my Engine and reading and talking to people I have come with with a short list of things that must change. A sea change in fundamental design philosophies that should be used when making any component of the Engine. Now this will not effect many parts of the engine. In fact a lot of the engine really came out quite perfect IMHO. But the areas that need to change are as follows:
- Strict initialization phase required for ALL elements
- Stronger encapsulation for all classes resulting in more task oriented publicly exposed functions
- Re-implementing of scene graph to be less convoluted and more of a traditional Scene Graph implementation
Let me elaborate on each of these:
1. Strict initialization phase required for ALL elements: I had thought of this before any code was even laid down for the rewrite but wasn't sure if it was necessary. The idea was that there would be two phases to starting up the framework.
1. Instantiation
2. Initialization
Instantiation, all elements that are to be started with the framework would be instantiated but the constructors would do nothing else. Then after everything was done, everything would then enter the 2nd phase which is where all the things traditionally in the constructor would execute, assigning default values and such. The idea being if one element required a pointer to another this method ensures the other element exists already so the order of instantiation does not matter.
2. Stronger encapsulation for all classes resulting in more task oriented publicly exposed functions: This is really a sea change for me in OO design. My instinct has been to, while protecting the private date, still only providing basic access functions to it letting the other classes combine them into the more complex actions they needed thus being totally flexible. But what this is saying is to have much more simplified functions that describe a task rather then a data operation. So instead of having setVelocity(), setPosition(), there would just be a moveTo() function. A shift to this kind of thinking has already been implemented in the User class's control scheme.
3. Re-implementing of scene graph to be less convoluted and more of a traditional Scene Graph implementation: This has been a nagging aspect of the engine I have known from the beginning needed attention. Though it seems the longer I wait the better an idea in my head I get of what I want it to turn into. But now I think I have a very good idea of how to implement it which will result in a much cleaner design that is more logical.
That all being said, while a LOT of time has gone into theorizing about Black Engine very little work has been accomplished in the last ten days. I'm getting back to coding now. I have spend a LOT of time reading and talking to people about Collision Detection, and it is sure to be the hardest topic of the Engine, period. Looking at the time required to implement a proper algorithm, I am implementing a hold over so that I can get to the remaining topics left for the v.6 release. Those are:
- Rudimentary Collision Detection
- 2D classes
- Unified texture manager
- Configure file Service
- Asynchronous logger
None of these are real time killers so I'm really hoping to bang these out in a couple days...
We'll see.
- Adam
adam_06jan2007.plan
So we are well into the New Year now and progress is moving along on with Black Engine.
When I first got back I finished getting BE to compile on both Windows and Linux seamlessly which took a minimal amount of code changes but a lot of time organizing and standardizing the build environment so everything works exactly the same on both platforms. A lot of time was spent getting all the build targets working and standardized as well.
I then got the entire project into SourceForge's SVN which is a big sigh of relief for me since it's not just sitting on my hdd some where now.
Lastly I created post compile scripts for every project which automated a task I had been performing by hand and which had really sucked. So now the build environment is much cleaner and extremely easy to set up and get building.
Why did I do this you ask? Because I have a new programmer helping with development now! Ju2wheels2 will be taking on some tasks as he can to help speed things along. His first task is a complete overhaul of the Logging class which will add some much needed functionality as well as improve logging performance greatly.
In other news I finished the changes to the Kinetic Element system which has resulted in an even yet cleaner and faster system for moving Elements.
With all of that done I had a choice, I could start on the 2d GUI classes which would require a Unified Texture Manger Service, or just jump right into collision detection finally and just get this nasty beast taken care of. So I started researching different approaches and algorithms and identified the one I wanted to use.
It's an ellipsoid-plane collision detection/response algorithm that is very well explained. So after a day of reading and looking at how it would fit into the engine, I began coding it today. I've put down about 300 lines of code for it today and I can already say. This is one of the hardest topics I've tackled yet in the engine. It's going to take some time to get this one right. But it is coming along.
Also there is some very preliminary planning taking place for a Game which will use Black Engine. Chris our lead artist has been working up some concept sketches and we've been talking about game ideas. I think we have some pretty cool stuff brewing.
Unfortunately I'm leaving tomorrow for several days. Going down to Mass to do some Slave labor on my dads boat 😉 But when I return I plan on banging out this damn collision detection algorithm and hopefully get a release out shortly after.
- Adam
adam_28dec2006.plan
Had a lot of time while being home to do a whole lot of nothing. Spent a lot of that time lately thinking about the engine, areas to improve, etc.
Coming down the home stretch on yet another improvement to the Kinetic Resources system. Should be even more efficient and concise.
Also since I've been home I reformatted my main box and am now dual booting a clean install of XP as well as Ubuntu. Since I plan on using Ubuntu as my primary development platform from now on I figured it was time to get BlackEngine cross compiling. And after really not too much work I have the Core project successfully compiling under Linux. I still have to now get it to cross compile for windows in a Linux environment, but thats not hard at all. So now that I have to process down I will finish off the next 3 projects and get them cross compiling as well. Long story short is v.6 should be released for both windows and linux!
More off topic, I've been fighting a war against Viagra spam bots spamming the comment forums on these .plan pages. It was really becoming quite a pain, but I'm pleased to report I have struck the final blow in this war, and the spam bots have been defeated 😉
Any way, heading out for a couple days, looking forward to getting some serious development done after the 1st.
So Happy New Years everyone!!
- Adam
adam_22dec2006.plan
These last 3 weeks were INSANE. Finishing final projects in the weeks leading up to finals week I pulled all nighters EVERY night of the week, no lie.
Then finals week, I had to do well on my physics final just to PASS for the semester. Not having gotten above a 68 on any exam in that class so far I was sure I was going to fail.
Long story short I fucking blow the final out of the water and PASSED!!! FUCK YAY!!!
Sorry, bit off topic but that... that’s just huge 🙂
Any way during finals week while I was a little bored I went back and cleaned up an issue with the build environments which took a long time but has made doing builds of dependencies MUCH easier.
Also I've been taking to a graphic design major who is interested in working on a game with me using Black Engine. So we have been in the very preliminary stages of drafting game ideas and have what I think are some pretty innovative ideas.
The engine still has a ways to come till it can be used for game development but I have pegged down a list of what must be done and have start to attack it. Hopefully in the early part of January I will get enough of the list checked off that we can start with very early stage development on some of our ideas.
Any way stay tuned if your interested!
- Adam
adam_17dec2006.plan
Well my independent study on 3D engines is over. I presented it to the entire CS department and it went over really well.
So now that I can take a bit more leisurely pace with Black Engine's development it's time to sit back and decide what is to be done with it.
First off I would like to do a public release of v.6 which means there needs to be some polishes and tweaks here and there. The main thing, all though it sounds trivial, is to get the BE tag displaying again on the HUD. The reason this is important is because it requires a new base class which will be used for all non-text 2D elements as well as getting alpha blending working again.
Once I get that in I will probably do a public release and call it v.6. But looking forward there is so much to expand on now that the base is done, this is where it really gets exciting because the tons of hard work I was doing before showed so little progress as it went along, but now, every little thing I do will show a lot of progress which is always a huge motivator.
Heres a short list of things I would like to tackle in the near future:
- A general clean up of some code in the base classes which was put in for testing and tech demo purposes
- BE tag on HUD + 2D base classes
- Removal of Events which are essentially RPCs (remote procedure calls) and replace with straight function calls
- Configuration utility class which can be used by any part of the engine to load in config parameters from a text file
- Collision Detection and Response
- Loading and displaying Light Maps
- 2D GUI base classes
- BSP Manager Clean Up code which would allow for BSP files to be unloaded and another one loaded in during run time
- Improve logging class to allow for message levels, as well as make it asyncronous so large logging jobs dont block during the frame cycle.
Obviously some are MUCH more time consuming then others, so my first thought was to order the list so I did the least time consuming first, thus getting the most done the fastest, but then I realized that’s what I always do, and Collision detection always gets thrown at the end of the list and after 2 and 1/2 years STILL isn't done!!
So f**** it! I'm going to do the BE tag HUD element so I can get a public release out and then just dive in head long and FINIALLY get collision detection / response implemented. I already have 80% of the 3D math in my 3D math lib, so we'll see how it goes!
Also I really really need to get this whole thing into a CVS... gotta figure that out b/c my connection here sucks too much to connect to my source forge CVS.
[EDIT]
Heres a screen as promised:

[/EDIT]
Lastly, off topic of Black Engine, I am planning to add quite a bit of content to this site over winterm, (I have all of January off). Looking to write a few coding related articles, a rant on when AJAX should and shouldn’t be used for instance, probably a very technical description of v30 BSP files which the web is severally lacking. Post them in a new Articles section of the site. Going to try and get my resume up here finially too. Also I think, I’m going to add a different section for my programs, things that are smaller then the things listed under projects, I’ll start by posting stuff like the C++ chaining hash table which I wrote for Black Engine, it’s a very versatile and solid hash table if I do say so my self 😉 and I do. And probably some older little programs I wrote. Also been getting some bot spam in the comments for these .plans so going to implement some sort of anti-bot functionality here.
Looking forward to getting a lot accomplished over winterm. Maybe if I hit enough things on that list for Black Engine I will do some sort of stupid little game. I was thinking a very rudimentary bowling game could be done with what I have in only a few days. My tech demo already has a box you can push around the world so it’s not a far cry from a bowling ball 😉
Any way, I’m rambling and this is already a very long one. So, happy holidays!
- Adam
adam_14dec2006.plan
Well… 16 hours, 8 Red Bulls, and 1 large coffee later, I have the code for my tech demo done.
I can’t even remember everything I did to night. This is for sure the longest continuous coding stint I have ever done…
I’m just kinda numb right now… Have to make it to my 8am Physics class and show what I’ve got to my professor after that. Then later today I have to work on the new BSP file which I’m going to feature in the Tech Demo as well as new textures and such…
That’s all I got… I’ll post a download of the Tech Demo when It’s done later to night.
- Adam
