Sign in to follow this  
Krisztian

How can I organize a large game project

Recommended Posts

Hi, I'm new here and I have a question about advancing as a game developer. I'm a hobbyist developer, where I have created several incomplete applications, which were just part of the learning process. So in fact, no completed applications. However, I have gained enough experience to try a large scale game. I don't have a need for programming instructions, except the questions I ask specifically, so I'm fairly self-sufficient. However, I have one very big problem. I'm disorganized. I also found out after some practices, that my main reason for not completing most projects when wanting to, is I get too easily cluttered. So my big question here is to get help on organizing a large programming project. How I would best do this and where I can get additional information or example dev blogs I might be able to read, where others have got past the major hurdles. To better ask my question, i will describe the project and I will be more specific about where I have faults.

 

I am planning a Commando's Behind Enemy Lines style of gameplay. Large scrolling maps, either top view or isometric (have not decided). The game will be heavily interactive as a goal, so there will be many things to do on a map. My programming question first of all is how I would setup and organize an engine for this. What type of event system, what type of file formats and etc. I would like to program this in C/C++ and SDL or maybe SFML. Prototyping has been easy, which is what led to deciding to do this, but my prototypes are not really playable and lack performance. I will be creating the editors and utilities in .NET, and at this time editors would be for personal use, so this is not a feature, that I plan on releasing. The most important thing is, that it's a hobby project.

 

So are there any blogs out there for this kind of project and most important is there any info, for creating a intricate engine. I'm most interested in Skeleton designs or pseudo code (whatever it's called these days). Code code be useful, but at this time I'm only in the programming design phase.

 

Any suggestions?

Share this post


Link to post
Share on other sites

Personally, I think your best bet (based on the experience that it sounds like you have) is to NOT think too much about large scale design yet. I say this, because I fell into this trap. Yes, I think this is a thought trap for new developers. If you have never built fully functional pieces of software, then trying to design something up front by just reading about design is likely to get you into a cycle of decision-making about how to handle this and that, then when you start trying to do it, it gets messy and doesn't work like it did on paper so you go back to the drawing board and repeat the process over and over trying to figure out how to design it. Obviously, I don't know you or what you're capable of, I'm just speaking from experience.

 

Here's what helped me when I was at this stage of programming (not that long ago). And this actually helped me IMMENSELY. Before I started doing this, I was spinning my wheels so much with design patterns and just completely over-designing everything and making it super complex (even though I was TRYING to make it less complex, but it doesn't work that way).

 

So what I did was, just pick something like space invaders and just start hacking it together and make it completely work and just see how fast you can do it. No stopping to think about design. Nothing. You just start by putting a window on the screen. Then draw a ship to the window. Then add some input controls to the ship. Then confine it to the bottom. Then add a projectile that shoots up. Then add an alien. Then an array of aliens. Then get them to shift back and forth and move down. Then add a few more arrays of aliens. Then do some basic collision detection with the projectiles. etc, etc, etc, add a splash screen and a menu if you want, etc, etc...

 

Just one step at a time until you have a fully functional thing. Then pick something else and see how fast you can do that. Then something else. Once you get the hang of making fully functional things, you will start seeing ways to simplify the overall design (because they WILL be messy. get comfortable with messy until you're more experienced), you'll get better at making bigger and bigger things, and when you read about design patterns and architecture and all that, it will make sooo much more sense to you because you have the experience of putting entire working things together.

 

I know you didn't exactly ask for this kind of advice, but I thought it might be relevant and helpful. If not, just ignore ^_^

Share this post


Link to post
Share on other sites

Actually, thank you for the advice. I listen to everybody now and I can remember making some mistakes like you mentioned. As far as incomplete projects, I do have a good working tile based system, and some interactive events, that are static. In other words, I don't have an event system, not because I don't know how to build one, but I can't plan it on a large scale. For example, I may have a scrolling map that's huge. Lot's of locations, lot's of events and lot's of random encounters. Organizing this into a manageable structure is something I have to look at now. Even if some of the design aspects might seem overwhelming, I would like to try to tackle the problem. If that get's overwhelming, for me that's fine at this point, but I will resolve those issues around the same planned idea. I would like to specialize on that type of game-play for now. The larger step I will take, will be to move to 3D graphics programming. So basically, I'm following your advice ironically, but I'm basing it around my expectations of what type of software to create. So I agree with you, but I'm still interested in any help on this, that anyone might be able to recommend. An absolute beginner would do well to take your advice, so I second it. Just made it more clear. :)

Edited by Krisztian

Share this post


Link to post
Share on other sites

The problem with tackling a large project like this without having experience in completing some smaller projects is that most solutions to the problems that you talk about are learned from doing the smaller projects.. but more than that - completing projects, however small, builds some character traits that are absolutely required to finish larger projects - persistence and discipline.

 

To add to the above poster's comments on coding up larger systems - code is just a tool to do a thing right? You can waste a lot of time trying to "architect" code so that it fits some criteria that will make it future proof and able to scale. Why not just write the code to make whatever thing your trying to do right now work, and don't worry about it until you have to. If things are slow its a lot easier figuring out how to make them faster and improve the thing you have than trying to write code that will be fast when you have nothing. For example - you have a lot of events and encounters on a map and you are worried about it? Have you tried just sticking "events" and "encounters" in an array and processing them every frame from beginning to end? It would likely work just fine. All of this I'm saying is learned from experience - and learned from a lot of wasted time doing unnecessary things.

 

I would suggest a very, very small chunk of the game your talking about - and complete it.

Share this post


Link to post
Share on other sites
What type of event system

 

from the youtube video, i don't see anything that would require an event system.   but an even system is one (possibly less efficient?) way it could be done. 

 

 

 

what type of file formats

 

as for all games  - whatever is the cheapest and easiest for you to use. 

 

 

I'm most interested in Skeleton designs

 

the characters in the video appeared to be 2d sprites, not animated 3d skinned meshes with skeletons. if you want 3D, you might look at Unity as an engine. it can handle non-huge maps, supports animated 3D skinned meshes, and an isometric camera view.  its free for hobby use, and supports popular file formats. unreal is another possibility.

 

 

 

Any suggestions?

 

 

rapid prototype first as needed.

 

for development, use a prioritized todo list.  everything goes on the todo list. most important stuff first (not coolest or what you want to do).    bugs go at the top of the list.  zero bug tolerance.

 

do one thing at a time:

design, code, test, debug, refactor if needed, move from todo list to done list.

 

then start on the next system or feature.

 

keep slogging through the list until you've gone gold.

 

that is game development.

 

not everyone has the stick-to-it-ivness necessary to slog thought that long dark tunnel that leads from game concept  to "gone gold".

Edited by Norman Barrows

Share this post


Link to post
Share on other sites

Norman - I don't know what you are referring to, I don't have a you tube video. You might have mixed it up with someone else's post, or may have clicked on an ad.

 

 

Regardless, I think that is what I'll do. Just small chunks of the game at a time. I started prototyping an encounter system, which can turn into a better event system I guess.

Share this post


Link to post
Share on other sites

I started prototyping an encounter system, which can turn into a better event system I guess.

 

I'm assuming that by "event system"  you mean registering events, and a message system, and listeners, and all that.

 

and by "encounter system" you mean periodic random encounters.

 

event systems are a generic way to pass data or call subroutines from one section of code to another.  they work in lieu of flags, explicit calls, etc. generally a way to preform deferred processing (i need to do it, but i can't do it now, i need to set flags, save vars, etc, and do it later), as opposed to immediate processing (i have everything i need to do it now, so its more efficient to just do it now. no flags, no vars to save for later, no code that must run later on, etc. no overhead of messaging / deferred processing.   note that overhead is measured both in dev time and run time).

 

a periodic random encounter system uses a game clock and a random function to spawn badguys.   each update, you advance the game clock by however much game time oine update is supposed to represent. if you want a 50% chance of an encounter every 30 seconds, you do something like:

 

if (abs(clock.seconds-30.0f)<.0.1f) && (percentile_dice() > 50) trigger_encounter(random_encounter_type(player.location))

 

when seconds hits 30, a d100 is rolled. if the result is > 50, the player's location is passed to a routine that returns what they encounter (and perhaps where), based on where the player is. this encounter type (and perhaps location) is then passed to the code that spawns the badguys.   note the use of abs()<0.1f for the float comparison to ensure it gets called once and only once per minute.    use of something like int clock.millisecs and int clock.seconds avoids this.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this