About this blog
Random ramblings of a night-time game developer :)
Entries in this blog
Spent last night starting a particle system framework. I've made 3D particle systems in the past for rain, lighting, and sparks. With that in mind, I'm doing a 2D game, but trying to keep the core graphics library 3D-centric. Currently I'm working on the basic particle emitter types and then I'll tie them in with the particle system and particle classes. Hopefully I'll have enough time this weekend to get this wrapped up enough to integrate into both the editor and the game.
A buddy of mine got me hooked on a really fun web-based RTS (and I use the term RTS loosely here...)
It's called ogame and it's great if you don't have hours & hours & hours to burn on a game, but you want to get your fix (i.e. at work!!!). I'm only a couple of days into it, but I'll be keeping up on this one for sure. I was seconds away from actually purchasing WoW, and thank goodness I didn't...I'm making great progress on my game-hobby addiction :)
I tossed in editor support for picking a level background and then the game engine support to draw it. All I need now is a score counter and I'd have a very basic shell of a game! After which of course comes the fun part...polish & eye-candy (the fun parts).
I started implementing support to stream OggVorbis files using OpenAL and then I found a fantastic article with a working implementation along side it:
A great read for those who are looking for a totally free sound solution (i.e not FMOD).
I'm going to spend tonight integrating the class that the author wrote into my framework and perhaps put some fade in/out capabilities into it as well to make transitioning better. I've got a host of things I can run with after the music starts cranking:
- in-game console (I already have this coded in my core library, just need to integrate it).
- Particle Effects
- Animated sprite system
- Proceedural textures (CPU & GPU generated)
- 3D level backgrounds/scene
- Tighter collision (i.e. sphere to rectagle instead of rect to rect)
- Power up/down system
- Bonus point system
- Level timer
- Score tracking/display
- "lives" tracking/display
- pre/post game menus (incluing a game state system)
- In-game pause
- High score system
- Level 'packs'
- Install program for the entire lot (need this before I do any demos...)
This morning I also integrated both full and windowed screenshot taking capabilities into my core graphics library. To test it out, here is a screenie of the game as it is now. Sorry for the HORRID graphics...sooner or later I'll get my buddy to make some good block, background, and border textures.
I got the basics of my OpenAL wrapper finished yesterday. I added support into the editor to assign a sound when a block is hit. I tossed in support over in the game as well to play the sound when the block is hit.
The only major bug/stumbling point I hit was that you can de-allocate an OpenAL sound buffer while it's currently in use by a source.I *would* link a buffer to the source(s) that it's currently being played from, but the problem is that there is no way to be notified when a sound has finished playing in source's queue. For now I'm just resorting to stopping all sound output from a source and clearing that source's queue before. Hopefully that's not *too* ghetto :)
Slowly moving forwards is better than sitting idle :)
I've been throwing bits & pieces of code together, but not at the rate I want to really progress. At any rate, I've got the basics of a level editor in place, it exports 'em and now the game will start up and load up the demo level. Granted, there are no bonuses, power ups, sound, or special effects, but the ball bounces around the level, responds to hitting bricks and the paddle. Good start...now it's time to add all the fluff. I think the next item on my list is to encapsulate OpenAL into a nice little library for me to use. After that I'll add some support in the editor to assign sounds to bricks as well as the game support to play them.
My graphics skills are still at an all-time low but I think I've found a friend who is capable of hooking me up with some textures. I'm holding out on screenies until I get something worthy of posting. That'll probably be after I put in some basic particle support and actually get the score and power-ups on the screen as well.
Nothin' huge tonight, but it's kinda nice to see results. I cooked up save/load logic for the editor. I also somehow managed to sneak in a good solid hour+ of guildwars. AND I'm getting to bed before 11 PM...remember I have a child who'll wake me up at 6:30, so 11 is pretty much the end of the road for me :P
Now that I can create the basic 'shape' of a level, I'd like to move over to the actual game side of things and get the basics working over there. This involves
-block collision detection
-end of level detection
-ball out-of-bounds detection
After that's in place then I'll go back to the editor to add all the cool 'powerups' that actually make the game actually interesting :)
Well, lots of Win32 fun this last weekend. "Why not MFC?", you ask. I hate dealing with MFC to be frank. I enjoy the simplicity of Win32. The most complex thing about it would be...well...nothing.
This screenie just shows a basic block layout scheme along with the tool window. I forgot to checkin the boarder textures, but you can set those along with the background. Next up (I think tonight) I'm going to work on exporting and importing levels.
I cooked up a little grid class last night. Here at work I fleshed out a list of items I need to start banging out for the editor. The first one was a little grid class to draw....well...a grid. It still needs a bit of tweaking, but I'd say it's about 80% done as of now. Oh yeah, and I have to document it too.
As soon as I finish up with the grid work I'll port over my DirectInput wrappers so I can get mouse input going (and hit detection for block selection). That should carry me through tonight.
I'm going to wait just a while longer before I post up a screenie. Something about a window with a grid just not being exactly awe-inspiring ;)
I also am going to try and stay awake a bit later to try and bang out more code at nights. 1.5 hours a night just isn't enough to really make good progress IMHO. I'd rather have a good solid 2 to 3 hours. My son is usually in bed by 8 which means I can rampage to 11ish ad get a solid 3 hours in, assuming I'm not paying pennance with some wife-time :D
I *wish* I could have coded, but family responsibilities crept in and stole the show. I guess I'll have to make it a priority to skip out on battlefield 2 this week and get a jump on my level editor. Perhaps tonight I can get some particle stuff cooked up, but since I'm working on my second mixed drink...I doubt that is going to get far :)
On a side note, I shot an 82 at the golf course today..and that includes a *horrible* triple and double bogey (both of which I was pretty pissed off about). Hopefully next weekend I can avoid those costly errors and easily break 80 :)
So, I'm proud of myself. I managed to only play an hour or so of battlefield 2...AND I got some coding in...yay me :)
I cooked up the basics of the block, ball, and playing area classes. Once those are polished up, I'll move on to starting the editor. I've opted to not make the editor 100% in-game with a custom GUI, that's just not what I need...to blow out the project timeline even more. Instead, I'm going to use Win32 dialog boxes & controls wherever possible which will be everything except for the actual screen where you lay out the blocks. Unfortunately I won't have much time to crank on that this weekend, so I'll have to see how much I can whip up tonight. Have a great weekend everyone!
I had an awesome vacation last week, I didn't get too much done in the way of coding, but it really got me refreshed and ready to get back on the bandwagon both at work and here on the hobby-front.
Before I left I mentioned I wanted to go really simple, breakout-clone style. No more multi-player this, physics-that. Just some old school arcade action to get a completed title under my belt. I've been coding OpenGL & DirectX for too long to not have a completed game to my name!!!
Rather than just go kamakazi and code up some messiness, I'm organizing my code into a statically linked library and making it as modular as possible for me to build on and use again later.
So far I've ported over all of my old math stuff, my console binding library, and I've just finished the bare-minimum for my graphics foundation. Here is an example screenie & code to use the graphics library.
using namespace Kyrite::Graphics;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
CSprite *pSprite = NULL;
// Create the window.
window.Create(hInstance, false, "WindowTestbed", 800, 600, 16);
window.SetClearColor(RGBA_MAKE(0, 0, 255, 0));
//Create the sprite.
pSprite = new CSprite(&window);
// Application loop.
I have a basic GUI framework for my uber-engine that I'm kind of abandoning. In between tasks at work I'm starting to design a proper GUI that I'll use for my in-game editor. I'd like to distinctly seperate the GUI from any graphics and input so that it might be usefull to others, and if/when I have to upgrade my own graphics stuff, I don't have to redo all my GUI code :)
So, I took vacation all of this week. It was a pretty sweet deal actually. The company gives us Monday & Tuesday off (due to the holliday). Then I took Wednesday - Friday off (taking out from my 80+ hours of time off I have built up). The end result is I get 9 days off in a row for very little time off taken! So, how much coding have I cooked up...well...um...FREAKING NONE! A little pissed...you bet, but hopefully that'll start chaning as of now. I just rolled what I've had from last week into CVS, now I'm going to start ripping up some base-graphics stuff tonight and keep going tomorrow.
I can't say the lack of code has been all bad. I've had a chance to get lots of stuff done around the apartment, spend some quality time with the fam, etc, etc. It wasn't what I had planned though, and now I've got to bust balls to get caught up! Tutorials are flat out of the question, I need to bust through the base code first, then think about doing tutorials sometime next month or whenever.
You know it's bad when I haven't even had time to play Battlefield 2...and you boys & girls that play BF2 know how much that hurts :)
Aight, I won't report back until I have at least one screenie to show, regardless of how rudimenary it may be...."Hello World" anyone? :D
Welcome to July, I hope you will enjoy your stay. Today is the last day of work before I take a nice week off (yay).
I've got a good jump on converting some of my old code to the new library, and documenting the hell out of it, using Doxygen.
So far I've converted over the following classes
and all of the classes associated with my Function Binding Libary(FUBI).
My next stop is to get the FUBI editor in a 'releasable' state so that I can put out my FUBI library for all to enjoy. That shouldn't take much time so I can move on to my sprite library.
Since I have an entire week off I'd really like to get a good jump on the editor for my breakout clone. *Not* getting sucked into hours and hours of battlefield 2 will be tough, but I'm sure I can manage :)
As soon as I have a release/demo of FUBI I'll put it up on my webspace here. I'm also contemplating starting a little website to house tutorials and code. With the recent announcement of NeHe's site going over to gamedev that kind of got me thinking, there isn't really a definitive site for DirectX programming like his. NeXe was an attempt, but that's been around for a couple of years now and still hasn't really gotten off the ground. I dunno, just an idea, we'll see how time permits on that one though.
So, I put together a nice little list of the items I'd like to start banging out for my little game. When I say little, I really do mean "much smaller than my usual grandios ideas". It'll be a nice simple breakout clone with a few scoring differences and some new block types but overall the same ol breakout we all know.
As for the editor, I've decided to build it in-game to force myself to implement a nice GUI framework. I've already got the GUI framework I was working on for my uber-game engine, but I'd like to adjust a few things to it. Also...
Rather than making a huge "engine" I thought it might be more handy to other coders to break things up as modular as possible and post them on my website as I go along. One of the first things I did (while I was at work today...shhhhh don't tell anyone) was to convert my old math, logging, timer, and other miscelaneous classes over to the new library. I've got *tons* of documentation to do before I can post the stuff up on the website, but I'll try to get as much of that out of the way while I'm at my day-job as possible.
Something I used to do that I'd like to bring back is to force myself to put out a weekly screenshot (as soon as I get to the stage where I can do that). I should probably start working on a basic layout for the website so I can post what I have going now for code.
I'm having lots of fun with Battlefield 2. If your computer can handle it, I highly suggest picking it up. No, it's not an exact clone of Desert Combat for those of you who played that mod. It's pretty damn slick though. Oh yeah, and for all you 25+ year old gamers, come on over and join a fun group I found (2old2play.com). I'm the moderator of their PC games forums and we're trying to get a larger following of PC gamers to join us...so stop on by and say hello! (if you're 25 years of age or older of course....)
So, I'm a wandering coder. I'm having serious 'keeping focus' issues and I think it's because I don't have a good gameplan. I can dink around and code little graphics demo's until I'm blue in the face but it doesn't get me a finished game. Falling back on one of the most simple ideas is probably the best thing to get me 'back in the groove'. I keep trying to get my "Subspace" clone off the ground but realistically I know it's more work than I have time for right now. So, for a simple idea, I've decided it can't get much easier than a breakout clone. The toughest part obviously being the editor.
In order to keep myself paced I'm in the process of cooking up the little features I want to add, as well as the complete task list...all before I start coding! I'd also like to help others learn from my process by making my code as re-usable, and documented as I can. With that in mind, I'm going to cook up a little web page for each stand-alone class, or set of classes, for others to check out.
As I mentioned before the first step is planning. I've got a couple of pages of ideas for 'power-ups' and block types. I'll need to formalize that into a brief design doc with some screen mock-ups. I'm also starting a complete list of all the tasks I need to do. I'm not going to go as far as to put dates beside each though :)
Rather than attempting to have designated 'code nights' I'm going to switch over to 'every night is code night' but just for an hour or so on the weeknights, and as much as possible on the weekends. That will keep me from getting too 'into' whatever game I'm playing currently (i.e. Battlefield 2) or whatever other leisure activity I may be doing.
OK. So that's the battle plan. Saying what I'm going to do is always the easy part...doing...well...that's the bitch now, isn't it?
I almost forgot that I had all this old code written! I cooked up some code to render planets, complete with cloud, light, color, and reflection mapping! Ignore the super-lame point-based starfield in the background, that was just a placeholder until I got around to doing up a nice sphere-map texture. My original plan was to do a space-sim (my absolute favorite genre) but after doing lots of thinking I kind of came to the conclusion it was too much work for me at the time. After going back and digging up this screenie it almost makes me want to get back into it. I think I'll do up a little task-list and just remind myself why this wasn't a do-able project for little 'ol me :)
So, I followed the tutorial on
to cook up this mockup of a main menu. Now I just need to do the mockup for the "Join Server" and "Options" screens so I can have something to transition to :)
Here is the "Join Server" prototype I came up with. Tomorrow I'll have to see if I can script up the UI using my GUI scripting language :)
Work is kicking my ass. Plain & simple. I really wish I could say I've tackled more coding, but when I get home, I can barely muster any motivation at all. It's sad, really. I guess part of it is that in the back of my head I know this is a *long* term project so if I hunker down and bang out a ton of functionality, I've still got miles to go :) I almost wonder if I'd be better off releasing smaller tools or demo's instead of a full-blown game. For example: I could tear out the code I've got written for console command binding and make it a .dll for folks to use. I've already cooked up an editor for it, which needs a bit of polishing. Basically, it allows you to setup CLI/Console commands, with modes & hints. When the command is executed with the correct number of parameters, it'll trigger your callback function. If there is any interest among anyone for something like that, please fire off a comment. Otherwise I might just sit down at the drawing board and come up with something so simple it's a day-or-two at most project to get me back in the swing of things.
Well, it's time for networking goodness. I've got the basics of my multi-column listbox going, so now I need something to fill it with. How about a server enumeration? With that in mind I started writing the server last night. I threw together a hasty MFC front-end to drive the server with. Today at work (sssh, don't tell anyone) I started implementing the networking with RakNet and some basic client-server messages.
My goal for this weekend is to get some basic client-server action going. By action I mean.
-Clients can browse the LAN for a server
-Clients connect to the server
-Clients can text-chat
Bonus Credit: Write a master-server browser for Linux and put it on my server, then have the clients list available "internet" servers via that method.
I'll have to get all amped up on soda tomorrow night if I'm going to be staying up reasonably late. Usually during the week I'm a wreak by 10:30 and I pass out as soon as my head hits the pillow. Thankfully I can bring my lappy into work and write (even if it's just a tad-bit) some code. God forbid my employer finds out I'm actually a software developer, and not QA. I'd get promoted (without a pay increase) and get way more time-consuming responsibility than I care to have. I actually poked around on Dice.com last night. I found out two things. 1) I'm way under-paid. 2) I could easily land a job doing network coding for a game development house. I always feel that if I applied without a demo I'd get the shaft even though I'm more than qualified. Hopefully my efforts over the coming months will fix that.
OK, less rambling...more coding.
OpenAL is up & running. I've tossed in some pretty generic support for Lua GUI event handlers to now play sounds. In the past I've used Direct Sound and FMod, but never OpenAL. I snagged the 1.1 beta and I must say, I'm impressed. I don't know the specifics of its performance or disadvantages but it does all the basics I need. I dug up a gamedev article on opening & playing OggVorbis files with OpenAL, so that's now on the to-do list so I'm not just messing with .wav files.
The next (dreaded) item on the list is multi-column list boxes. I've started coding it up tonight but I imagine it'll be a couple of nights before I get it knocked off. There are a few tweaks I need to make to the base list box class to accomodate multi-column'ness.
I got a little more motivation today to work harder on my game code. As I'm sitting at work I watched as a fellow employee was dragged to the managers office, then returned to his desk with a cardboard box, and then promptly was escorted out of the building. Not knowing if you'll have any income on a day-to-day basis sure is a great motivator to get out on your own and not have to depend on "the man" for you and your families survival....
Last night I tossed in support for rendering an overlay for the currently selected listbox item. I also fixed some random bugs, but overall a pretty slow night. I ended up coding during commercial breaks of the show "Lost".
Tonight I started tackling adding sound support. I've put in the XML support so that Lua scripts can play sounds. I've also cooked up some wrapper classes for OpenAL which I'm currently in the process of debugging. I want to get some type of sound coming from my speakers before I call it quits for tonight though! Unfortunately I'll be away all weekend so I'm not sure how much, if any, code I'll get cooked up. I'll try to bring the lappy and see how much I can get done after everyone heads off to bed at insaneley early hours. The only downside is horrible compile times on the laptop. Nothing really to put up tonight for screenshots. If I really kick some major ass, perhaps I can get the elusive multi-column-listbox working before the next update. That would be awesome....and by awesome, I mean totally sweet.
OK. The GUI code isn't even close to being done, but it's a good start, and I *really* wanted to get up a screenie by tonight. So here it is!
Although it isn't tagged, the control at the bottom left is a radio button group (yes, I just reused my checkbox textures). The control at the top left is a very over-sized checkbox with corresponding label (note the tool-tip in action). In the middle is a static image control with my engine title. When you press the "OK" button it causes the static image control to play its animation, which is currently just a little shimmy & shake move.
Here is an example of the XML code to cook up the push button.
Note the tag which causes the lua script OnJiggle to be called (which actually triggers the animation on the other control).
There are lots more features that I've got working which aren't really visible via a screen shot, so perhaps when I get all of the base controls implemented I can push out a demo for all to play with. That's probably at least two or three weeks out though!
So, I was planning to rip up tons of code this past weekend, but alas, my dreams were crushed by hour upon hour of playing Guildwars. The game is great, no doubt about that, but I find myself less willing to actually play it during the week. I think it has to do with my dislike for my current day-job, which actually inspires me to go home and do something reasonably productive. By day I'm an "automation engineer" for a startup network-storage company (yes, I work some insane hours most days...).
I did make some good progress last night. I created a new texture set for my GUI controls, and fixed a handfull of bugs. I'm still far from feature-complete on the GUI, but at least I'm a little closer to having screen-shot-worthy material.
Still on the to-do list is
- Highlights for the current selection on a ListBox
- Multi-column list boxes
- Combo-boxes (may, or may not implement)
- Multi-line edit box
- Scroll bars (and test them on each control type)
- Dialog Boxes
- Screen Transitions (I'll explain this concept below)
- Playing sounds from Lua event handlers
- Size animations (location is already implemented)
- Alpha animations (for fading in & out)
- Spherical interpolation for animations (linear is already working)
- Better error handling
- Dodumentation of the XML interface as well as what's available to Lua scripts.
The screen transition idea stems from the fact that the top-most control type in my GUI system is a "screen". You can think of a screen as a desktop of sorts. A screen contains a collection of controls (say perhaps the sound-settings screen). When you click the OK or ACCEPT button, you'd want the current menu to become the "options" menu. This transition between the two screens is the feature I'm looking to implement. The XML file will declare a "transition-in" and "transition-out" sequence for either all the items (example: all controls "fly-out" to the left when the screen is being transitioned out). Additionally, each control can have it's own customized in and out transitions. That way you can have complex animations.
All the basics are in-place...it's just a matter of doing :) Isn't that always the case?
So, this is my second post, I'm thinking a twice-a-week posting scheme (with an optional weekend post) would be a good goal. I say goal because I'm usually pretty bad about logging my progress on journals/logs/emails/blogs/etc.
Episode 3? Fantastic. I played hookie for a few hours at work today, it was worth it. I suggest even the most skeptical fan, or non-fan, to go see it. It's so gripping how the best of intentions can go oh-so wrong.
Code? Yeah, I've done some of that this week, but not as much as I would have hoped. We're in crunch mode here at work, and it's chewing into my fun-time (yeah, yeah, I should have skipped out today...blah blah blah).
So, my original design for my GUI system called for all the basic contrls, designed and defined in XML, and I'd use Lua to handle events and allow on-the-fly modifications. Sound familiar? Yeah, it's like Crazy Eddie's GUI. I just found out his system existed two days ago. I spent some time looking into the library, and it looks good, but it's missing animation support! I've already got that coded up and I'm only a few steps away from having it done...so I'm going to stick with my own code for now.
Thus far I've got the following controls done
-Single line edit box
As I mentioned previously, this is all done in XML with Lua to handle events (which can call back into the C++ code if a get/set on a control's attribute is needed). I've also got key-frame based animation going too, which seems to work OK.
I'm about 50% done with a list box control (not multi-column). After that I'm thinking scroll bars, dialog-box, multi-column list box, and then some minor cosmetics to clean it all up. I *could* take some screenies and post them, but the textures I'm using are so horrible it would be embarasing :) If I get around to making some non-sucky textures I'll do up some screenies.
Alright, I'm finally signed up for GDNet+ in hopes that this will keep me motivated to drive forward with my indie game-coding adventures. Once upon a time I was part of a team of folks working on a project, which inevitably fell apart as we all graduated from college and dove into "the real world". 5 years later, the "real world" is anything but exciting, and the game coding bug has bit me again :)
I started up a "GDNet Boston" GD Gathering group. Hopefully I'll be able to meet some other Boston-area folks who are also looking for some motivation.
As for a project, I'm currently in the process of fleshing out a simple idea to get me going. Well, not breakout, or tetris simple, but not UT2k4 complex either. It's a remake of the old "Subspace" game I loved playing back in the 14.4kbps days. If you never played it, google for "Subspace" or "Continuum", which is the working title of the community upkeep version.
I'm currently working on my GUI library. I'm taking the extra steps to make a library instead of just hard-coding the items because I'm notoriously horrible at design, and art. I'd rather provide the tools to someone more talented in that area, and let them run with more creative ideas. Well, the "real world" calls.