Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 16 Feb 2007
Offline Last Active Jun 02 2014 06:06 PM

#5157423 Is working in terminal/console really a waste of time?

Posted by BCullis on 01 June 2014 - 04:13 PM

If you want to learn more specifically about game programming rather than programming in general, modding a game is much more valuable.


This group right here is where most of the facepalm moments come from in the "For Beginners" section of this site, though.  I think this group, more than any other, needs the console programming time to get past the CS101 problems.

#5142670 Where To [Re]Start?

Posted by BCullis on 27 March 2014 - 01:55 PM

I want to piggyback on Serapth with an anecdote here:


In my signature you'll see a link to my personal game project, something that's been sitting dormant for the last year thanks to other projects and that whole "real life" thing I have to spend time maintaining.  I started with a specific game goal (so not just "I want to make a game engine for no specific game") and the side task of creating some editor tools to accompany that game.  


I began with XNA as a great starting point, and then when I heard that it was reaching end-of-life, I cranked up the difficulty and decided to learn DirectX fundamentals as implemented through SharpDX to replicate everything XNA had offered, but with complete control over how everything was implemented (I naively thought that this would mean I could write a lean, efficient framework that didn't spend any spare cycles on anything that wasn't necessary for my specific game project).  And I did, to a fair degree, learn all about the programmable graphics pipeline, become more familiar with content I/O, get practice designing useful interfaces for tools, etc.  But the project wasn't making much progress (hey, I have these great minimally-buggy tools that get me about ...1% closer to having an actual game) as I was learning and building every piece as I went.


Then I was picked up to work on Cryamore, where we quickly grabbed some Unity licenses.


Don't ever, ever, attempt to create a game engine until you've used a game engine.


This is SO AMAZINGLY TRUE that I'm sorry I took this long to get to reiterating it.  


After a few weeks learning how Unity went about their component-based approach to game object logic, their material-driven rendering system, the data-driven asset designs...I could see dozens of ways that my work on Hazard Pay was going to turn brittle and self-destructive as I continued to build on top of a framework I *thought* was stable and extensible.  And I could also tell how I was never going to get the game into anyone's hands if I kept on developing an entire game framework on my own from the ground up (at least, with the amount of time I have to devote to it).


Once Cryamore has been pushed out I might rehash my framework as a hobby project, having much more experience with a successfully built engine, but I'll likely just leverage UE4 to get the game made.



My end goal is to make the 3D game about the islands and magic fountains

If this is doable in 1 time unit,

using an engine I wrote myself using only libraries such as OpenGL, SDL, etc.

This will turn that into 10 units, minimum.

I'm a huge fan of the learning process that I went through when I started implementing my own graphics and content framework, but it will inevitably slow your progress on the actual game to a disheartening crawl.  Learn the individual systems you want to know about with smaller projects, like learning SDL via a tetris-level game (or just learning it enough to have a rendering/input context that OpenGL can draw in) but if you have bigger (multi-A) title dreams, leverage anything you can to limit the number of wheels you need to reinvent.

#5142668 Can you make an entire game with UE4 blueprints?

Posted by BCullis on 27 March 2014 - 01:31 PM

It's easier to learn to use blueprints.  Especially if you're a visual learner.

The faster development question is entirely specific to the developer(s) and the goal product.  For you as a non-programmer, you would develop a game much faster than learning to do it in code.

Watch some of the youtube videos, there are over a dozen on Blueprints alone.  It is possible to script any game mechanic you can define in their system.  Chances are most of them are probably already implemented as a node or layout (like your 3rd person shooter character controller).  You can create event-driven scripts for levels, you can customize behaviors of actors, you can dynamically spawn/destroy other actors, and if you ever REALLY hit a wall with something and have scoured the documentation without hope, chances are you can find someone in the UE4 community that could (or already did) implement your vision via source code changes.

#5142665 Farseer Physics collision detection problem.

Posted by BCullis on 27 March 2014 - 01:19 PM

It sounds like (apologies if this is already apparent) your rendering and your physics simulation are out of sync.  Two questions:


What happens in world.step?

Are you using any debug output to confirm that the location of the box as you're seeing it lines up with where the simulation thinks it is?

#5142394 Windowing tasks

Posted by BCullis on 26 March 2014 - 03:03 PM

Minimize, switch window, resize, maximize, dock, etc...

This is why a lot of people use something like SDL/SFML for the window context, and then do all rendering inside that window with OpenGL (as an example).

#5140674 Advice for game engine

Posted by BCullis on 20 March 2014 - 09:17 AM

The just-announced UE4 editor has a completely visual scripting system (no programming, just linking boxes with lines) and comes with all the visual punch you're looking for.  It's not free, but at $19 per month it has an insanely low barrier for entry.

#5139733 Can you develop a 2D Game Engine with Java?

Posted by BCullis on 17 March 2014 - 10:40 AM

Yes.  There are several Java graphics APIs to choose from.  But your post sounds like you're a bit "all over the road" with your potential choices (for example, what does knowing "SOME C++" have to do with your ability to write a game in java?).

If you are already familiar with a language (or just comfortable enough), there are tools to make a 2d game in that language.  If you're not familiar enough with ANY language, pick one (it doesn't matter which) and ask questions specific to creating the game you want to create in that language.

The answer to "can I make X in Y" will most always, and most pointlessly, be "yes".

#5139164 Libraries, wrappers, framework, etc. What's the difference?

Posted by BCullis on 15 March 2014 - 01:51 AM

I'm surprised that after a few years in that major, you haven't had any of those elements covered for you, but here goes:


Library: just a collection of code, usually centered around a specific functionality.  An engine is a library, a framework is a library, etc.

Wrapper class: "Wraps" a class or piece of functionality inside another class, usually for ease of calling the thing being wrapped in the wrapping class' language.  Ex: SharpDX (a graphics library and API) has C# wrapper classes around the C++ DirectX classes. (this is grossly simplified for ease of explanation)

Framework: A library (ha!) or set of libraries that provide a lot of basic functionality that will be used to build upon.  XNA is considered a framework because it doesn't actually give you a game, just the toolkit to make one.

Game Engine: is a framework.  If you take a completely coded game, and remove all the stuff that specifically makes that individual game, what you're left with is the engine: all the code that makes everything work but that knows absolutely nothing about the specific assets it's loading, dialogue that happens in a game, level layouts, etc.  Game engines often (unless you're some AAA studio like Epic or Id) are a result of writing a specific game, and then keeping all the code that can be re-used to make another game.

GDK: usually a framework (or engine) coupled with a few handy editor tools (level editor, asset packager, etc)

API: Application Programming Interface  - You can think of them as tools to put in your coding toolbox.  Graphics APIs, networking APIs, Physics APIs...basically a black box of code in a library with (hopefully) documented interfaces for using that functionality.  Or not black-boxed in the case of open source.  API does a thing, you need something that does that thing, you use that API in your project.


For the specifics:

Unity3D: Game Engine/GDK/Framework/APIs.  This spans a lot.  It has its own engine, you can program with its APIs, it has editors (that you can extend in code)

UDK: same as Unity3D

Allegro: as per its wikipedia entry, it's a library that contains multiple APIs.  You could also consider it a framework (are you catching that some of these are loose definitions that overlap a lot?).  It has everything you would need to make an engine, but is not one itself.

DirectX, OpenGL, SDLnet: APIs.  Well, libraries of APIs if you stick to the concept of an API as a singular tool.

Qt Creator: had to look this one up, I guess it's just an IDE?  (Integrated Development Environment, think Visual Studio, Eclipse, Netbeans, etc)

#5060969 XNA Code Help - Drawing Collision Rectangle

Posted by BCullis on 10 May 2013 - 07:54 PM



for (int x = bulletBounds.Count - 1; x > -1; x-- )
                for (int y = alienBounds.Count - 1; y > -1; y--)
                    if (bulletBounds[x].Intersects(alienBounds[y]))


Be Very careful about removing objects from lists while iterating over them: while this will work because your reversing over the array from n-1 --> 0, If you when forward over the array (0 --> n-1) you will find bugs!

In this case, List.RemoveAll is very handy and efficient, for example by flagging all "dead" aliens and bullets, and then calling something like

bulletBounds.RemoveAll(bullet => bullet.isDead == true);

And so on for alien components

#5048071 What is functional programming and how can it help us in game developing?

Posted by BCullis on 29 March 2013 - 12:23 PM

It has potentially huge applications to self-correcting AI routines (and really the field of AI in general). Depending on your functional language, output from a function can be fed as input right back into the same function. For example: Lisp can rewrite and evaluate its own code, because there's no differentiation between "code" and "data".

#5047994 Steps on How to Become a game Developer

Posted by BCullis on 29 March 2013 - 08:56 AM

and remember that this series is for the begginers, so it is essential. and you think that was easy. these 6 videos took about 6 months of work. don't judge it quickly.

Time investment doesn't give you a buy on the quality (or lack thereof) of your result. You dropped 6 months on something and THEN asked for feedback, with your guard prepared for any negative criticism saying "but I spent so much time on it."

That doesn't work. I'm a horrible cook. If I spent all day in the kitchen making a full-course meal from scratch, and it still tasted awful, people aren't going to want to eat it. (Or if they do, it's painful and solely out of pity).

This doesn't sound like you're in search of feedback, but rather back-patting. People have been honest with you: the audience you're most likely to reach (active forum members on a game development site) are telling you that your videos aren't properly addressing the actual needs of beginners (people that want to start making their game idea). I think you're underestimating the knowledge already obtained by your average "beginner" game developer: anyone searching the internet for resources has found plenty of them.

The majority of your received responses here are of the "woah, slow down, change course before you spend any more time on the current heading" variety, and I'm willing to bet the downvotes are expressing the desire to keep quality information out there for people.

#5047989 Which is easier to program C# or Java?

Posted by BCullis on 29 March 2013 - 08:22 AM

Having used both, I'd say C# and Visual Studio combine for a much better experience building GUIs than Java and Swing/AWT. I know there are dozens of add-on libraries for Java so everyone's mileage may vary depending on which package they know to grab, but I just found the C# route so much more direct: everything you need is ready to go in a great IDE and the partial class system means that when you dive in to edit button code and hook up your functionality, you don't have to sift through the crazy GUI-initialization verbosity.

To be fair to Java, it really does suffer from being the earlier of the two: like people have pointed out, C# got to watch Java make its mistakes first. And Java GUIs (if you package the jar correctly) will be cross-platform more easily* than C# tools.

*JVM is more common on most non-PC platforms than Mono. There are solutions for almost any platform, but the number of steps to get a Java application running is definitely fewer on average.

#5044331 Planned Terrain Generation

Posted by BCullis on 18 March 2013 - 02:19 PM

For clarification, is it easiest to start with a flat mesh or some easily computed mesh, and then apply these changes to it? Once I know where to start, I think creating these tools will be much easier to accomplish.

It's easier to start with a flat mesh.  I generate it in the tool (it's really easy to make a flat grid of vertices, I just establish an x-step value and a z-step value, and walk through the array of verts giving them appropriate x- and z-locations.  Y is 0.).  Though if you have a pipeline to bring in external meshes, it's just as easy to model something up outside the tool and then import it to do further tweaks (and in my case, all the game-contextual stuff like triggers and props).

And one last question, if I may: What if you want to add "vertices" or make the scene more complex? I know that should be just another tool, but are there any ideas or topics that can get me started there as well?


Now you're talking about procedural mesh generation and even topology algorithms.  This is a huge can of worms that I'm happy to call "my current brain candy".  I can't give you any really good advice yet as I'm still sifting through it all.  Keep in mind though, this is for things like "I want to grow the terrain here, but keep the vertex density the same" or "I want to cut a hole in the terrain to stick a cave mouth prefab into, and then retriangulate the edges to fix the seam".  If you just want to add separate objects to the scene, that'll depend on the definition of your "level".  My current solution is just to keep a list of all prop (what I call my static meshes) IDs and their world transform information (location, scale, rotation).  When the level loads in the game, it reads through that data and populates it accordingly with actual prop instances.

#5044323 Planned Terrain Generation

Posted by BCullis on 18 March 2013 - 01:32 PM

I was wondering what you all have in ideas for developing mostly pre-planned terrain?

As in, not procedurally generated, but hand-modeled?


Use a 3d editor and import the mesh.  Or if you're interested in the learning aspect, do what I did and write a custom level-building tool that lets you "paint" terrain geometry (things like raise/lower terrain).


Edit: for more detail, I wrote a tool that uses picking to figure out where I'm pointing at my terrain mesh in the viewport, selects all nearby vertices in the mesh data based on my current brush radius, and applies the current modifier to all those vertices.  So if I have "lower terrain" selected, just do a -= operation on their Y values to lower the terrain in that area.  Then you can get fancy and do things like tune-able brush falloff (to simulate a smooth brush border) where the vertices closer to the edge of the brush aren't affected as much as the ones in the middle, and so on.

#5044269 Array MADNESS

Posted by BCullis on 18 March 2013 - 11:04 AM

Rawest form: create a vector of pointers, each pointer being the head of an individual array of data.

Somewhat better: create a vector of vectors, where the "outer layer" vector is the dynamically-sized group, comprised of 16-element vectors (instead of your 16-element arrays).  The way you describe it in your latest reply is correct in that regard, in that you would take the 16 elements, push them into a vector, and then push THAT vector onto the "main" one.

OOD approach: wrap the arrays of information in a struct or class, and just create a vector of said classes.


My question still stands though: what is this being used for?  It feels very unconventional, and there might be a more programmer-friendly approach that I could suggest if I knew what was going on.