About this blog
Sprawling text for ocular consumption written by a hobbyist game developer.
Entries in this blog
There's been a lot of uproar regarding XNA among the community lately. A lot of people have become really excited with XNA at the prospect of making games with the XNA Framework, but to be honest I am very..."blah" about the whole thing.
I've been developing with C# and Managed DirectX for the past 2 and a half years, and I have learned a lot about C# as a game programming language and Managed DirectX as an API, and here's my thoughts on the matter.
1) You can be crazy productive, and knock out prototypes in an incredibly fast amount of time. The more common tasks in 3D programming are very EASY to do, but there are a lot of generally advanced things that are NOT easy (i.e. skeletal animation).
2) The documentation and object oriented style make MDX a true joy to work with for C# fans and developers, or any fan/developer of object oriented programming styles. It's incredibly intuitive and robust.
3) Deployment SUCKS. It's not because any single thing is altogether difficult, but when you have several minor pains in the ass you eventually end up with a rather huge pain in the ass.
Bottom line is that my experience with C# and MDX are great for making small and simple prototype games. However, the scalability of the API is not linear and deployment is rife with headaches. This makes it somewhat difficult to create full-featured, next-gen games. For the hobbyist, it's great.
So where does this fit in with XNA? Well the bottom line is that the same issues I have with Managed DirectX exist with XNA. It's a great Language/API combo for hobbyist or casual games, but the API is going to need a lot of maturing before we see mainstream titles use the technology. Granted this isn't an issue for most people, but it is for me (I have more lofty goals). C# needs a killer app to get the respect it deserves in the commercial front, and I just don't see it coming with XNA in its current state.
I just caution people to remember what Microsoft's true goal here is: to make money for their shareholders. I have nothing against Microsoft at all, in fact I am very thankful for what they have provided developers with C# and the .Net Framework. But the bottom line here is that hobbyist and educational game development is a new market for them to expand into. With XNA they will make a good amount of money on the sale of subscription fees and consoles from hobbyists and educational institutions, not to mention provide a lot of content for Xbox live to help compete with the Wii's virtual console. So just take XNA with a grain of salt, and if it doesn't do it for you, give Tao a try.
Well I've been playing a lot of World of Warcraft...it's not the most innovative MMO around, but it's just plain fun. I figured I'd write a quick journal entry since the servers are down.
I've dubbed the name of my next project "Delphi" which is an acronym for something. I'm still working on the design document, but that is progressing a bit slower than I wanted to. The project seems to be getting a lot bigger too as time goes on. This slightly worries me. Tuss Toss was a challenge enough, but I think with the proper planning and organization I can avoid the bad program design I had with Tuss Toss.
This is NOT an in game shot, still conceptual.
I've finished the story/script for Project: Delphi. I have a short version of the script you can read at Here. Most likely all of the information kept in there will be in the shareware demo version of the game. Feel free to read an comment on what's in there.
Next up is to flesh out game mechanics.
Guild Wars has made me quite unproductive lately. Usually after the initial thrill of a new game settles down, I'm able to get some work done. Despite that though, I'm really enjoying the game. I won't go into a rant about why I like the game, but if you've got any interest in the game it's worth checking out.
I've finished my font writer wrapper and I'm mostly happy. It uses the Direct3D font interface to do most of the dirty work. The upside to this is the ease of use of the class, but the one thing that kinda dissapoints me is that I become limited in the fonts I can use. I really wish there was a way I could load a custom font from a file, but as far as I can tell there weren't any constructor overloads in either the Microsoft.Direct3D.Font or System.DRawing.Font namespaces that had a load from file parameter. Although I couldn't add this one feature, I was able to create a neat linked list feature that allows the user to make as many font objects as necessary. Creation of a font yeilds an integer handle back to the user in order to reference the font. This handle works almost like a pointer. I was pretty happy about doing this because it allowed me to keep the actual font objects hidden from the user and safe from any unwated changes that can occur to unprotected data. Not to mention the flexibility and scalability it gave me. Yeah I know it's just a font writer class, but at least I'll have something that can be reused with relative ease.
Since I know people love media in these journals, I'll start off with a link to the music track for Boss Levels in Tuss Toss. Enjoy.
Tuss Toss is coming along great. We are in the muster stage of gathering all the content and getting it into a fully featured game. So far the level editor, free play and custom play modes are complete. All we really need now is to finish story mode, and touch a few things up.
Our soft deadline is August 1st. This gives us approximately 3 weeks of heavy bug fixing and gameplay adjustment through playtesting. Then its onto entering slamdance. We are also planning on entering the IGDA awards as well, for a little exposure and learning.
Lately I've been working on the level editor toolset. Building tools is a breeze with C#, and I highly recommend using the language and resources to anyone, regardless of what language/platform/API you are working on. Take a looksee at what I've accomplished in just a short time:
I've still got a ways to go here, but the tools are definitely comming along great. In a very positive mood right now :). I also know you fear my elite icon art.
Updates have come painstakingly slow lately. I added some simple picking to the alpha I'm making which worked perfectly without too much of a hitch. It detects what tiles are being clicked on using a ray-triangle simple intersect formula. I want to add a couple more basic things to the alpha, like meshes and maybe lighting. Other than that There's really not much more to do than jump in and start getting into the thick of things. Several things are really keeping development slow. Those being my 10 hour workdays 5-6 days a week.
Stupid little things also keep my team held up, not to mention a lack of enthusiasm and help on their part. Can't help but to feel that these are really my fault as a team leader who doesn't really have time to "lead." Ahh well maybe that's just the long workweek talking...I should get back to something productive.
The following is an IN GAME RENDERED SCREENSHOT! (wewt).
Basically what you are seeing is a test level randomly generated. Below the tile mapped spaces are two layers: one has those crazy words/symbols and the other is the cloud layer. I also added some alpha blending into the tiles and symbol layer for a really "dream-like" appearance. Let's just hope my artist doesn't flip. The neat-O thing you can't see is that the cloud and symbol layers are scrolling independently of one another.
I know it's a relatively simple thing, but I'm pretty proud that I was able to accomplish what I set out to do for once, and solve all my problems on my own along the way. Can't wait to add some models to this sucker!
Shadow of the Colossus kicks ass. This game is all about why we love to play games, and why we love to make games. At least as far as I believe, Shadow of the Colossus embodies everything that I think the indie development community should embrace: Simple design, complex implementation, artistic cinematography, unique stylistic presentation, atmospheric...and pure beauty.
I really recommend anyone with a ps2 rent or buy it. It's released at 40$ which is 20% less than what most retail games go for. The main gameplay is only 10-15 hours, but trust me, you'll want to play this game again. The puzzle solving is gone, but the thrills are all still there. Renting is a good choice if this doesn't seem like your game and you don't want to make the 40$ investment. But everyone should at least TRY this game.
There comes a time in just about every game programmer's life when they decide that they will take on a task which is generally only tackled by the insane, the stupid or the brilliant. Because I feel like I fall into all three of these categories, it is a natural progression for me to take on this task. No, I do not mean making an MMORPG...I'm talking about rolling my own engine.
There's always two sides to the debate as to whether or not a hobbyist or indie should ever bother with such a task, but I am going for it. I feel like I could learn a lot in the success and failure. The end result would give me a piece of software that I could reuse for rapid development. Of course, I also have a game in mind with which to use the engine, if I didn't I wouldn't even bother.
I've dubbed it "Machina Ex Machinis" (MxM for short) or "The Machine from Machines" because Latin makes everything sound a lot higher on the coolness scale. Current features include the following:
-Completely modular Object Oriented design.
-Written in the C# language.
-Cross Platform (thanks to Mono and Tao, Windows version may use MDX).
-Primarily 2D engine, will contain support for 3D rendering features.
-Highly scaleable through a modular design to promote a longer shelf-life.
Right now I am unsure as to whether or not I plan on making it open-source. I most likely will. As you can see I have a lot of details ahead, so now I'm working on the planning and design side of things. Hopefully more frequent journal updates will follow.
I can now draw blocks again, so nearly everything rendering wise is back to normal. Here's a shot:
Next (and the final part of the first phase) is to draw the tusses animating in their burst effect.
Today at work I got horribly lost trying to pick up product for a customer. The supplier that I was getting then material from was in a town called Podunk...I found this midly humerous as I was in an angered state from being lost. So after 5 hours on the road today the morale of the story is this: "Retail sucks, get your damn degree in comp sci so you don't have to sell rocks anymore."
In Delphi news I am currnetly programming an Effects class. This class is slightly complicated and will be used to apply any type of offensive or defensive effect. From dealing a simple amount of damage to creating graduated attribute buffs, this class is going to describe it all. No doubt this will take me a considerable amount of time to implement right, only to find that I've done it all wrong.
Yes, I sell rocks.
I need to get a new one, le sigh. This is going to push back my timetables a little. If I get a call back from the university about the position I was interviewed for, I'm ordering the parts immediately. Here's to hopin'!
I want to start a side project (which will end up being my main project). I am stuck with the age old developer question: "What Language and API do I want to use?"
Details regarding the project:
1) It will use a 3D perspective.
2) I may plan to sell it, or at least make it commercial quality.
3) This will be a main portfolio piece, showcasing my best work as a designer and developer.
4) I would like to complete it in a year.
Things about me:
1) I am proficient with C/C++, C#, and Java.
2) I like object oriented programming.
3) I am confortable with Managed DirectX, I have used a moderate amount of unmanaged DirectX. I have never used OpenGL.
1) I would like to port the game to other OS platforms if possible, but finishing the project on time is more important.
2) I have had some recent disappointing realizations of Vista, and have recently started using Linux (but still mostly Windows), thus spurring some desire to learn and use OpenGL.
3) Being infatuated with OO programming, OpenGL's syntax is a little "ugly" to me.
4) I love C#, but I have desires to port my work, and since most professional studio jobs I see require a display of C++ skills, this makes me want to use C++.
Any suggestions are welcome...please. I'm looking for some divine inspiration here! [lol]
Well on a personal note, the spring semesters starts monday here at URI. I'm taking three courses: Advanced Programming Concepts, Operating Systems and Networking, and Artificial Intelligence. I'm looking forward to the AI class the most. The professor holds a doctorate from Oxford and is super-duper smart. He is teaching us by basically stripping down Quake II AI and implementing our own while learning about popular AI techniques. I'm really gonna learn a lot and can't wait.
In other news TussToss v1.1 has reached its first milestone and is on to phase 2. The purpose of phase two is to basically get the game to a basic working state. That means implementing logic, scorekeeping, timing and a very basic particle generator. It'll be nice to have the game up and working again so we can add the finer points of our remake. Till next time folks, and thanks for reading.
Just wanted to wish my fellow Americans a happy Independence Day!
Major things that have happened to my current project. I changed the name to "Project: Delphi" in the hopes that Borland would be less likely to sue my ass.
I think now I can reveal the actual premise of the game. Project: Delphi is going to be a turn based strategy game. But instead of normal battles taking place in a fantasy land, this game is going to take place in cyberspace. Delphi is an acronym which stands for Delusive Personal Hacking Interface. Basically it makes hacking look like cyber combat, instead of just a bunch of boring commands and stuff.
The player controls his avatar, and the avatars of their hacking squad as they accomplish missions to further along the game's plot.
In personal news, still no job yet. Turned down a part-time position though. Please hire me, I rule...and stuff.
I was checking the lyrics to a musical called Avenue Q and I found these lyrics that were humerous considering my current unemployment situation.
What Do You Do with a B.A. in English?
What do you do with a B.A. in English,
What is my life going to be?
Four years of college and plenty of knowledge,
Have earned me this useless degree.
I can't pay the bills yet,
'Cause I have no skills yet,
The world is a big scary place.
But somehow I can't shake,
The feeling I might make,
To the human race.
Just a quick update to keep myself in the posting habit. Work on Tuss Toss is continuing, at a slightly slower pace while some graphics content is being produced.
Meanwhile I've started a small side project. Basically its a system that procedurally generates NPC's through the use of evolutionary and genetic algorithms. I'm naming the system "MEGEA" for Massive Entity Generation with Evolutionary Algorithms, at least for now. Code is being written in C++ with a strong emphasis on Object Oriented programming concepts. I will include a small graphical harness/game with the project is complete. I plan on using OpenGL for renedering and hope to make Linux/MacOS variants along with a Win32 release.
I've switched gears over the past two days back to the basics. I'm working on getting the actual board rendered on screen again. Why am I doing this gain? Well the original code was just a very quick demo. Now that I'm in a full blown alpha stage, I am potentially creating code that will be in the release version of the project, and that means creating a solid foundation.
Everything was going smoothly until I realized I had a problem. In the original demo I was calling drawprimitive() for every tile I was rendering on the board. I can't even imagine the performance hit I was creating with 1024 possible calls to drawprimitive() per frame. Yeck. So I decided I'd throw an entire map into a single vertexbuffer, thus reducing my overall calls to one. However bells imediately went off in my head. My largest map size will be 128x128 tiles. That's a crap load of tiles, with 2 polys per tile. Wasting 20,0000 unnecessary polygon draws makes me cry so now my next step is to create a simple octree of sorts. My plan is to split every map into 16x16 tile sectors. This will give me 512 polys per sector max (some tiles will be empty, containing no polys, or will be obscured). Then I will render a max of 9 sectors at once based on the camera's position. That would be a max of 4608 polys spread over 9 drawprimitive calls. I could cut my sectors down to a 8x8, Thus reducing my calls to 64 polys, but I will have draw more sectors, calling drawprimitive() more times. Yeesh. Ahh well, nothing to do but to try it. Back to the grind after I snoop around my fellow devs' journals.
Now that I have some free time and can really be programming things that I want to program, I've continued on with the first phase in the Tuss Toss remake. My talented friend and artist, Kelsey, has converted all our old backgrounds into useable texture formats. Kelso also decided to change Trixie's pose as he wasn't satisfied with it in the original game. Here's a look at what the bakcgrounds look like with the new font stuff written over them.
The next part of phase one is to get all the block art converted to texture formats and have them able to be drawn to the scene.
Delphi was way out of the scope of something that I could and should be working on, and a friend really helped me realize that. So isntead we are working on a new version of our original game, Tuss Toss.
The lowdown: Being programmed in C# with MDX as the graphic, sound and input API of choice. The old game used C++/DirectX also, but the graphics used DirectDraw. Now we are updating to Direct3D for its obvious benefits. Some new features are going to be added that we had originally included in our design. These include some new blocks, some new graphical features, and the ability to create custom levels.
The work has been broken down into 8 phases. We are currently well on our way into the first: Content conversion. This basically is a phase where we take all the art my partner made and convert it into dimensions that can be used for textures.
Phase two of Tuss Toss 1.1 is complete! This means that I have the game built to a playable state again. I have already made some changes to speed up the gameplay, and they feel great.
Now we are on phase 3. This phase consists of basically adding in two new blocks that weren't in version 1.0. These will be a wildcard type block, and a transporter block that swaps the horizontals and verticals with one another. New art and game logic will need to be created. This also includes effects and animtations.
Finally in other news, today was my first day back from spring break. I tons of work due in the next two weeks, and my head is starting to spin. From employing the A * algorithm to a quake 2 bot, and loading/starting user processes in geekos, I think I'm gonna lose it O_o.
I've employed particles into Tuss Toss v1.1, and I'm pretty happy with them. There are two types. The first is a "streak" which occurs when the player uses the quickdrop button (also a newly implemented function). Check it out:
The other kind is a droplet, which is created when a block explodes. The droplest match the color of the corresponding block destroyed. Here's a closeup shot:
In other random news, I'm now working at my summer job on campus as an apprentice desktop technician. Also, I was recently met with a couple faculty members at my local community college. They were looking for some one to possibly teach a course in game programming and apparently my boss at my current college gave them my name. They are trying to work out the logistics right now, and if they manage to get the approval, they assured me that I would be the one teaching it. Sounds like a good opportunity so I'm keeping my fingers crossed.