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
adam_28nov2006.plan
0500 or as I like to call it. O-Dark Thirty.
Couldn't sleep so, got some coffee and a sandwich at the mobile and headed over to the labs to get some work done.
Spent the time here reorganizing the source code into separate projects.
This has resulted in a significantly cleaner build environments that I'm quite pleased with. The new organization is a follows:
- Core: Contains the Core Framework code base, what was referred to before as the Framework and Framework Services. Also the base classes that everything must inherit from.
- Extension: Contains the blocks that use the Framework to create a Simulation Engine. So these files are more apt to change. The renderer is here, the BSPManagerService is here. These are not entirely game specific, though if a certain game required new abilities the engine did not currently provide this is where they would have to be added.
- Simulation: These are the game specific Entities and Services. A game developer should be able to work mostly in this project to develop their product.
- Main: This is the platform layer that maintains the main program loop, initializing, and tying everything together. A game developer should have to make minimal changes to this project, basically just instantiating some high level things maybe.
I have a bit more work to do adding some functions to the FrameworkContainer in the Core project to allow for a bit more access to parts of the Framework now that things must be handled in a more dynamic way. But over all the conversion has gone very smoothly and what has resulted is much cleaner. Was able to eliminate quite a few antiquated files and linkers too.
Any way after a bit more work I will move onto the tech demo stuff. Been doing a lot of thinking and research about the Scene Graph too. There will be some major changes coming to that soon.
- Adam
adam_26nov2006.plan
Aaaahhhhh…. BSP traversal solved. Great lesson on MACROs learned. Text alpha blending problem diagnosed and possible solutions in the works. Entity parsing and creation from BSP files implemented. Things are going well.
I can start the technical planning of the tech demo stuff I mentioned in the last .plan now while I figure out how to handle the alpha blending issue.
But I’ve had a long time to look back on different design decisions as well as look forward to future design decisions and I have distilled two imperatives that must be addressed.
The first, and I knew this one was coming and intentionally left it till now, is how I was doing to make the engine code independent from the game code so the engine code would need no knowledge of the game code at compile time. Since this is cross platform DLLs are out of the question. So I choose to split the code into two projects. The ‘Core’ project, which will be a static link library containing all of the Engine specific code, and the ‘External’ (probably will be renamed) project which will link to and use the Core project.
The second is a product of the lack of time I had while developing this and my desire to push towards something I could show. I’ve always felt my Scene Graph implementation was the weakest point of the project. And as I have worked with it I have identified areas for improvement. In fact, the alpha blending issue with the text is a problem with the scene graph. So I have been talking to a lot of people and analyzing previous decisions and thinking about how I could improve them and I am currently working on a new conceptual design for my Scene Graph implementation. It actually won’t require major code changes, but conceptually it will be pretty different.
The first of these issues I do hope to address before my dead line (which is in 3 weeks!) but the second will probably come after.
So what is next? I will probably hack in some sort of fix for the alpha blending problem in the scene graph for now since I am pressed for time and it will probably change anyway. And the next big thing is, as talked about before, a basic GUI class and re-loading of BSP files.
So before I go, here is a screen of my very simply level which I use for BSP leaf testing.
You can see the hideous Alpha Blending issue on the text, and the green block in the bottom left is a place holder for the Black Engine logo.

- Adam
adam_24nov2006.plan
So it's been a while since the last update. Work was a bit spotty for more then a week but some work was accomplished.
It's hard to remember all of the little things, tweaks, minor bug fixes, that get accomplished while working on larger systems but rest assured there has been quite a bit of work done.
I have put in two very long coding stints (12+ hours) in the last two days and plan on at least two more for the weekend. I finished adapting my old rendering and loading code into the framework and SDL. There is a small bug with the BSP tree traversal that seems to have to do with some sort of precession error but I don't think it will take long to squash. I also need to re-implement my Entity loading code which should only consist of uncommenting a few lines and changing 2 other lines.
Once I feel the code is bullet proof enough I am going to move onto creating the tech demo I will present in 3 weeks to the CS Dept.
For the tech demo, at a bare minimum I plan on having a basic GUI that loads when the engine loads. From here you can select a BSP file to load or to exit the program. When you select a BSP file, it will load with a loading screen, then obviously you will be able to move around in the 3D BSP world. You can hit ESC at any time and it will bring you back to the GUI and you can load a new BSP file or exit if you choose.
There are only two real tasks here. One is creating the simple GUI system which is certainly non-trivial if I plan on it being a solid base for future more robust GUI systems. And two, and this sounds like I'm a bad coder for not already having this, but make the BSPManagerService able to clean up after it's self, so when you load a new BSP file it unloads all the data from the current BSP file.
There are several other things I would have liked to implement, like gravity and collision detection, but gravity can't be implemented with out collision detection, and collision detection is just too much for the time I have left.
If I did get all that done for the tech demo and had time to spare I'd like to do something with interacting with some sort of object in the world. Maybe just pick up and dropping a box or something. Who knows, we'll see.
- Adam
adam_11nov2006.plan
The movement physics under went another rewrite a little while ago bringing them to what will be the final version functionality wise for the semester since there is much more to be done. That being said they improved a great deal in both concept and implementation and now, in my opinion work better then the movement in Half-Life.
I say this because the Half-Life engine suffers from the problem of compounding simultaneous multidimensional movement requests. Meaning, if your Resource has a movement speed defined as say 10 and you hold both the forward and side strafe keys at the same time to move at a 45 degree angle in Half-Life it would take the first input, and add 10 to the Y component of the movement vector. Then it would process the side strafe input and add 10 to the X component of the movement vector. The resulting vector would have a magnitude of ~14.142 units. Which in my mind, if you define 10 as the speed for something in your world then that should be the speed no if ands or buts. So in my code I accumulate all the input, then based on the input I modify the angle not the magnitude of the resulting vector so no matter how you move the magnitude of the vector will be 10. Actually saves some computation as well.
Additionally, I’ve spent time adapting my BSP loading and rendering code into the Framework these last couple days. This is going well and actually a bit faster then I expected. The BSPManagerServices now successfully loads in a v30 BSP file. There is quite a bit of a paradigm shift in how the data is rendered though which took some thinking through to come up with the new methods needed. The renderer is almost done ( Still writing functions to give it efficient access to the geometric data loaded from the BSP file ). Once I finish that I need to write some functions for the SimulationResourceManagerService which will locate each Resource it manages in a Leaf of the BSP tree when ever they move and dynamically attach them to the BSPLeafNodes as they move around. That should be it then. The new Framework should be caught up to where the old engine was before this semester started.
So exciting things to come as I move into some of the less essential things like config files (finally!) and collision detection!
- Adam
