Firstly, this obsession with entity systems is the pustulent boil of a symptom which I used to call "object oriented wank". This is where people get so bogged down designing systems to scale to 1,000,000 simultaneous players they never actually sit down and write a bloody game. This is probably Java's greatest weakness and of course its greatest strength. It's massively powerful and flexible. So powerful and flexible that people generally tend to get confused about what they're actually trying to achieve, what they're capable of achieving, why they're doing it, and who gives a shit.

I'll tell you this for free: an entity system will not get you on Steam. It will not make your code easier to understand. It will not finish your game for you. It is not as easy to understand as just having Some Entities In An ArrayList that all extend a base Entity class. The language does not make it easier to write the code. It does not really even solve a problem you should be having. Entity systems were developed for dealing with hundreds of thousands of entities, with vast numbers of permutations in ability and operations. You can use them in your space invaders game if you like, with all 100 entities in it (with just 5 sorts of entity). But your space invaders game will forever remain a hazy idea wafting away in your bong smoke. Get a grip on reality! Why is your game not finished yet?

This sort of thing is endemic in Java and is expressed in all sorts of silly ways. There's obsessions with 3D scenegraphs when most people can't even code a 2D game. There's obsessions with using NIO (the API designed for thousands and thousands of simultaneous IO operations) when people can't even write a server that handles 4 simultaneous realtime players.

This is why Java4k is so good.

<snip...>

You're bashing the obsession with certain advanced technologies, and saying that people never create any games with them due to them being way overkill to what they are making? So basically, you're saying that we are all incapable of making big scale games, and should spend the rest of our lives making 4kb games instead?

Maybe the problem isn't the individual programmers' skills, but rather our inability to organize bigger development teams than a few persons? Many Java games have either started off with a single or very few persons in the initial team, and have later expanded into companies, e.t.c. You keep talking about how many games copies individual people have shipped, but is that really relevant? Not many of us are going to ship even thousands of copies of our games. Isn't it the same with every programming language?

I'm using a pretty powerful entity system for the game I'm making, but I didn't make it myself. The point isn't that it's powerful or scalable or flexible or whatever. It's that I think that I can write better, more understandable code with it. But, you're blaming people MAKING too many advanced entity systems, not using them, so does that mean that I'm Doing It Right?

I have a few interests when it comes to programming. My favorite part of game making is the programmed graphics (lighting and special effects). I obviously spend an unproportionality large amount of my time on this part of my games, because that's what I found most fun to be doing. As a hobby, am I not supposed to have fun? Of course, the number of games I actually release gets lower, but I don't think that is necessarily a bad thing. That's because when I have fun, I learn things so much faster. Of course it isn't good to get too obsessed on some part of your game. I've actually gotten caught in the entity system trap multiple times before, but mostly due to the fact that I wasn't using one that was fitting for my game, and I had basically no experience in the field. I agree that it is a common pitfall like you said.

I've just recently realized that I can increase my productivity, my learning rate and how much fun I have by using libraries for the parts that I don't particularly enjoy implementing myself. I'd say that when people start with Java, it's better to do everything yourself. I mean, you don't need many libraries to get a Java2D space invaders game running. You'll also learn a lot just from implementing every aspect of the game. It's obviously important to keep your first game(s) simple, but I think it's even more important to not get stuck on some part of the game.

No, Java gaming never really took off. It was never supposed to, if you look at what Sun/Oracle has been doing with Java. OpenGL support had to be created by the community, rather than enabled by the JVM. I guess they didn't want to have headaches with drivers which they can't control. There's other issues as well, but my point is the Java creators/stewards had an idea of what Java should be, and it isn't really for games. More like business apps or whatever. All that said, we can make pretty cool games with Java.

From the perspective of a game player, there is no concern for what language/tools were employed. The experience is all that matters, including deployment. If the game is compelling enough, players will manually install JVMs and learn command line syntax; they tweak .ini files for Elder Scrolls, right? The game must be compelling, or at least popular enough to overcome the hurdle of somewhat-involved deployment. The task for us is to make games compelling and many of them. Oh, and on Flash games, which instantly get played in your browser... they still get played, despite they're mostly so simple and sort of lame. Easy as lighting up a cigarette, and about as rewarding, too.

(Quitting time at work, got to meet someone soon, will finish this post later if I remember)

People learn Java to mod Minecraft, even if they hate Java without being able to properly explain why ("Its dead slow and eats massive resources!", bla bla bla). I mean it doesn't get any more incredible than that IMO.

@OP: Really nice rant and very true. Been through the works myself. I went from spending years on developing general purpose editor tools (starting over three times), down to creating small, specific, manageable and game specific tools. When I started to do that, I managed to do in a week what normally took me several months to achieve and at the end it always just didn't work the way I wanted it too. Because it was too generic. Not only that but I started to create the games such that they complied with the tool - that should never happen.

IMO the term "generic" should be banished from use in the context of software development. Small, specific and to the point rules.

I don't think entity systems are in any way advanced - I think they're a horribly complicated way to do things in Java that's inefficient, fugly, and fighting against the language. With the right language support - prototyping - it makes more sense. In Java, it just makes things slower and fiddlier. There's boilerplate code all over the place, castings, instanceofs, indirection, memory scattering... it makes no sense for anyone's games in here. Its defining characteristic in these forums is that people have to ask how the hell to do it and how it works and even why to do it all the time, and then go on to design all sorts of different implementations of achieving the same thing. Stop! Alert! Rat odour detected! If you'd just used a simple class hierarchy you'd a) understand it straight away, b) have it implemented and working almost as soon as thinking of it, c) not have to ask any questions about something so bloody trivial and d) you'd also discover it was neat, tidy, fast, easy to maintain (yes - easy), and easy for others to maintain.

Also, I think you might be falling into a classic engineer's trap of not seeing the wood for the trees in the argument I've laid out. You say yourself, "It's that I think that I can write better, more understandable code with it" - and immediately you are swallowed into the conceit of the engineer. There is no such thing as better, more understandable code for the outside world. Are you writing a game, or just tinkering for the sake of it? You are not making an MMO. You don't have a team of 30 programmers. Your source code probably will be no use to anyone else! All you're learning is how to overengineer, procrastinate, and coding so you don't have to bother designing the game in the first place, which seems all very clever until you never finish.

And one last thing - you have another engineer's trap of seeing everything in a binary world view. When I say that Java4k is good, I very clearly do not mean "you're saying that we are all incapable of making big scale games, and should spend the rest of our lives making 4kb games instead?", but as an engineer your reductionist binary mind tries to boil down some simple metaphors and argument to whatever outcome you want it to be. Using your reductionist approach against you I will spell out again what I am trying to say:

If the probability of a game being finished is proportional to the amount of code it takes to make it finished, then the less code you write, the better. This is helped by being restricted in what you can write in the first place, and Java can sometimes be a hindrance to the inexperienced game developer in that it lets you do things in 100 different ways. The situation is far worse in C++, and far better in Flash and Unity. My entire discussion is based not the inference that everyone on this board is "incapable" of writing games, but the empirical evidence still seems to suggest that this is the case, and I suspect that the problem is that too many developers here are getting lost down the squirrelly 99 ways out of 100 that lead to nowhere. Let there be light.

While you are right with all your arguments, I think the main reason for this is, that most people here simply aren't interested in writing games - they just haven't realized it yet

This claim might be far fetched for others here, but it was at least the truth for me. Some might remember, that I even quit my day job to be a full time game programmer, but this never took of. I spend most of the time creating 3d-engine stuff, a terrain rendering system, a component system, IoC container driven game states, a generic animation framework and incorporating multiple 3rd party stuff, like persistence frameworks etc. etc.

At the time the financial support ran out and nothing was even remotely done, I asked myself, what the problem was. After a drunk evening I realized, all I wanted was to code some fancy code. Doing stuff in innovative and - to my eyes - elegant fashion. I also was under the impression that once I have all my fancy frameworks in place, making a game on top of it, would be a breath. This is however total BS. Making a fun game is the hardest part of it - regardless how the code looks underneath.

In the end I more ore less gave up on game programming - because it was apparently not what I wanted!

yeah could be - I mean my schedule when making a game is thinking about gameplay, testing, making maps / sketching level design, writing story, sketching sprites, writing a script, drawing item graphics, artworks, making sounds, making music - all thatbecause unless you do a wireframe game without story, there is a lot of assets to be created

bitter truth is: I hate programming, but unless you have really really capable programmers who work for you, you gotta do it - but its gets better once you find people to work with

bitter truth is: I hate programming, but unless you have really really capable programmers who work for you, you gotta do it - but its gets better once you find people to work with

Werd! This is exactly how I feel. Programming is a major irritation getting between me and my ideas.

you have ideas, visions - but then you think oh my god, how am I gonna do it, all the classes, call this and thatin the end you have some stupid bug, in the best case its like x instead of y (copy paste), takes you hours debugging it

when all you want is just to have your vision happening, and don't put up with the computer's stupidness

Component based models largely stem for the work of Brad Cox, the inventor of Objective C.

Problems related to the evolution of design in class based OO was rapidly noted by the inventors of SmallTalk (ya know, the original class-based OO language) and thus some of them ran off and made Self (ya know, the original prototype based OO language...note that the naming isn't an accident)

Quote

Anything larger than a 1985 Amstrad game (which was probably written in BASIC) and an ES should be making significant savings on development time.

If anyone reading this doesn't find that happen ... then you've missed the point, or you're doing it wrong - or you just suck at Game Design and need to find yourself a game designer who cares.

There is no such thing as "a silver bullet" in computer science. I understand component based design model pretty well and it is complete masturbation if one is not attempting to address data flow related issues. The so-called tutorials that demonstrate its flexibility, from what I've seen, are completely disingenuous as they show the stupidest way on the planet to design something and then compare it was a component-base version of the same and call it progress. My guess is that the number of people here that need to use a component-based design is roughly double the number of people that need to run out and learn Erlang so they can use an actor based model.

While you are right with all your arguments, I think the main reason for this is, that most people here simply aren't interested in writing games - they just haven't realized it yet Wink

This claim might be far fetched for others here, but it was at least the truth for me. Some might remember, that I even quit my day job to be a full time game programmer, but this never took of. I spend most of the time creating 3d-engine stuff, a terrain rendering system, a component system, IoC container driven game states, a generic animation framework and incorporating multiple 3rd party stuff, like persistence frameworks etc. etc.

At the time the financial support ran out and nothing was even remotely done, I asked myself, what the problem was. After a drunk evening I realized, all I wanted was to code some fancy code. Doing stuff in innovative and - to my eyes - elegant fashion. I also was under the impression that once I have all my fancy frameworks in place, making a game on top of it, would be a breath. This is however total BS. Making a fun game is the hardest part of it - regardless how the code looks underneath.

In the end I more ore less gave up on game programming - because it was apparently not what I wanted!

I agree with this 200%. I also came to this realization many years ago. There are lots of interesting problems in games development, but actually making games is really A LOT of HARD WORK. That's why I fiddle about with doing 3d in 4k. That's fun.

I've probably written several A4s of text by now only to erase it again. You just aren't saying much to be honest. I don't even know what to write after almost 2 hours. You're post is actually almost ridiculously aggressive, as it just seems to be a bunch of personal opinions without any real evidence for anything. If you want people to start doing as you think is right, tell us HOW we should do it. No, wait. Tell us how and WHY we should do it. If not, then don't mind me and carry on like this.

I don't have the vast experience of different programming languages that you seem to have. I started off with basic scripting and then went directly to Java. I've done some C++ in school, but I never got past the command console due to a lack of interest. I have a hard time telling what's fitting for Java as a language, which is one of your arguments against entity systems.

The third part of your post is the most confusing one. Now, English is not my native language, so I might be misunderstanding this, but it seems as you're saying that I'm a complete idiot, spewing out things about my "reductionist binary mind"? I don't even completely understand what you're trying to say with this part, but you seem to be blaming me for being too black-and-white in my opinion by bashing my sarcastic joke about 4k games? Who's the one being binary again?

I just can't agree with your last part about smaller games being better. Like people have been saying, not everyone's goal is to release a complete game by themselves. I'm only interested in some parts of game development. I fully realize that this reduces my chances of ever actually releasing a complete game, and I agree that I like the tinkering part of programming.

I'm a little shocked. I really wasn't expecting such an "angry" response from the famous Cas...

@PrincecI'm a little shocked. I really wasn't expecting such an "angry" response from the famous Cas...

he's not angry but honest

he is frustrated/sad/disappointed that most people, will rather obsess with technology instead of getting their act together and make a gametheoretically there shouldn't be a reason why there are to few java gamesbut well blahblahblah's argument is still the strongest

"java is slow - definitely not what you want to use to program games" - it is a notion written in stone since 1.0 and since few people are open minded, most won't even seriously try java for game development

4k is just one example where it seems to go better for java - and he stated the reasons

Goodness no, I'm not being aggressive, just making some meta analysis. I would never have guessed English wasn't your native language!

What I was saying is that you think like an engineer, and that is to concentrate for ages on lots of tiny little details whilst losing sight of the big picture, which is maybe the underlying gist of this thread. It is not intended to demean you - it is just an assessment of your thinking and possibly, a clue as to why you are where you are.

As for evidence, the hows and the whys: all I've got is facts and completed projects to go on. All the completed projects here are either tiny (j4k), or ruthlessly hacked together and released. Flavour of the month is entity systems, which have been around for years, yet no-one seems to have made a proper full game here using them yet. I've not said that smaller games are better - I've said that finished games are better. It just so happens the smaller and less full of paradigm shifts they are, the more likely they are to be finished.

I feel you're shooting the messenger here: the problem is not the ES; rather, the ES merely exposes the real problem.

The problem is that most people doing java games don't actually want to finish their game. They make games for the joy of the "continuously writing code" part - not for the "shipping a final, working, version that other people play" part.

e.g. tonight I just made a new map for Warlight (http://warlight.net). I have never done this before, I didn't even realise it was possible until this afternoon.

By playing with the game design and rules, I was able to slightly subvert the existing game and make - effectively - a new sub-game, just by playing with a map editor. It's nothing revolutionary - but it's a different kind of fun.

Took me approx 3.5 hours to figure it out, come up with an idea, implement the idea, and put it live on the Warlight servers.

I'm more interested in "having new ideas for game designs" and "implementing those game designs, playtesting, re-designing until they're 'fun'" ... than I am in "writing reams of code". Writing code is fun, too - but my passion is making games, not making libraries.

As Cas gently points out, there was a time when I tricked myself into being a library-maker instead of a game-maker. After burning years of my life on something academically worthy - but shipping only one game (commercial, but embarassingly simple) - I eventually stopped lieing to myself, embraced what I *really* wanted, and started "making stuff and putting it into other people's hands". That's what I love doing.

PS: putting it into other people's hands is critical; you quickly learn how crap other people think your stuff is. You quickly give up completely, or learn to make things "good enough for everyone else". Very important lesson to learn, IMHO

First of all, thanks for writing a post that stirs me enough to repsond. This is the second part of the post I had made yesterday.

I guess there are different types of people who come to JGO. I speculate that, in the vast minority, there are those who write Java games and release them, and perhaps make a bit of coin. Then there's the majority.

Most of us won't make a game or finish. This is not news to you, of course, but I feel some discussion about this is good. Perhaps a large slice of the JGO majority doesn't have a clear idea about what game they want to make. So, why would they be trying to make a game, or at least talk about doing so? Games are cool, man. They want to program something... anything... and a "game" would be fun. Later, they find out, whoa, a game turns out to be not trivial, especially when you need to learn to rotate images in place, put objects in a map created from a file, etc. in Java's way.

Most people aren't persistent. A home cooked meal would have been most satisfying, but, eh, fast food was just around the corner and what's a little indigestion, anyways?

The other slice of the JGO majority have a clear and mature idea about a game they want to make. So, where's their games?I don't know Mine is enduring code re-writes to better satisfy my vision. I'm thoroughly testing and fixing features. I'd rather release it later and good, than early and compromised to the point of being a disappointment.

This is JGO. We all know (or should) that coding is necessary to climb the mountain towards a completed game. Some things we find out along the way are:- wow, it's time-consuming and difficult, so I will quietly abort- wow, I have a non-trivial game idea, and, yes, I will need to engineer some code solutions to make it come to life- my wife and friends hate me now, why can't they just wait until the game is done, then they will love it, and by extension, me, and I will be redeemed

I read some of the earlier replies... amused to see some people want the game and secretly resent the coding, others love to whip and tame the code and don't think much about a completed game. Unfortunately, I am kind of both: I enjoy firing up Netbeans after work and on the weekends and I design what the game will be on paper when my brain bears such fruit.

Final point, and thanks for reading so far...I have to sort of eat my words about Flash games. If you have a game idea simple enough to do in Flash, then do it in Flash. Don't use Java, don't use even C. Flash will get you to your goal more quickly and painlessly. It would be the right tool for the job. You wouldn't use a modular hydraulic pump to drink when a straw would do, right?

You do need the modular hydraulic pump sometimes, though. I am making a not simple game, and Java has been flexible enough to meet virtually all of my game's needs. I sure as hell would not use Java to make a pinball game, though... I would have quit halfway through the Java2D tutorial

About Flash games (and any other platform for that matter): it's absolutely fine using any of these tools. But, this is java-gaming.org, so i'truth, anyone who says, "Just go use ${other_language}" in here basically needs to STFU. If there's one thing that ties everyone in this forum together it's Java, so we need a bit less of the hypocrisy of telling people to use some other tool. As for myself I make a vague exception for Scala, not coz I like it, but because it's Java underneath.

I did some thinking about Java4k recently and there is such a thing as going too far... one reason I've not ever bothered doing a 4k entry is that I don't really have the time to do all that byte optimisation and such. I did once moot the idea of the LWJGL16k compo as a compromise - enough bytes to give far less emphasis on pure code squeezing, and allow a balance on sound and graphics too. Maybe I should resurrect the idea?

It's because this is a site dedicated to people who want to use Java, for whatever reason. What's the point in saying, "don't bother with Java! Problem solved!" to people using java-gaming.org as a resource? It's ridiculous.

Not finishing a game because of fiddling around is one thing, I personally have problems to stay motivated to work on my game because I'm afraid that I will be unable to find people to play it.There are sooo incredible huge number of games available on the internet, how in the world could I reach and interest people for my particular game ?

Sure, I could create a website for it or submit it to dedicated game-sites but it will still be 'unfindable' among the thousands of other games available.One could argue that the game should stand out so much that it will draw enough attention to itself, but that is, of course, incredible hard, especially if this is just your second or third game.

I guess this just the problem with internet, with the whole world as competitor, it is just impossible to impress anyone anymore, because whether you're making software, games, music, graphics or whatever, one search at Google will make you realise that your idea/implementation/... is far from original and at least ten people have already created something very similair en perhaps even better than you will ever be able to.

So why would one bother anymore ?.. This whole thing discourages me a lot... I like the process of creating a game but I don't like to spend months on something that will have no chance to be noticed.

Flash is more content oriented. Maybe we can create a framework for java games that works faster than flash in terms of development speed. I didn't look into Java game frameworks like Slick since I like to use Flash for the client side ... We need (for 2D, something like this for 3D is of course possible too):

What's the point in saying, "don't bother with Java! Problem solved!" to people using java-gaming.org as a resource? It's ridiculous.

That's absolutely true, it's ridiculous.

I realize there are benefits if more programmers build games with Java: we, as a collective, learn more through the shared experiences of our members. Also, it sends a message to those that could augment our palette of software tools and provide new platforms--the message being Java is a good technology and deserves to be improved, refined, and ubiquitous. This direction helps not only Java, but all of us that use it.

Now that I've done so much legwork, I could make a simple game in Java as quickly as I could in Flash. The thing is, I am not interested in making Chess or Mario Bros.

I hope programmers will come to JGO as I did and get up to speed such that Java is as an attractive an option, if not more, than Flash. I'm not going to bash Flash It does what it does well. I used to make cartoons in Flash. At the time, I thought ActionScript was lame, but making animation and graphics, adding sounds and effects, all in one place was tremendous.

That's why the Flash guys can do it so quickly. They can't practically do wizardry with AI and diverse data acrobatics nor take advantage of the powerful functionality of libraries such as Java has. However, they can whip up graphics, animations, and pop in sounds and music ridiculously easily. They're constrained to some basic math and logic that govern a relatively rich video and audio experience. Fast and fast.

I sure as hell wouldn't want to do a 2D GTA, Rage or The Sims in Flash though.

Okay, I'll STFU now about Flash. For the record, Java is great and can do anything Flash can. There are reasons I chose Java over C/C++/Python/Flash/etc. for my game creation needs.

Jack_E, make games for your friends You'll get feedback, and they may even help you think of cool things that could be in the game you didn't. I love getting intoxicated with my friends and writing down the most outlandish features and things I could put into my game. Some of them even make it in!

@Cas: Well, my experiments with JME3 seems to run smooth on my system too. But why can't we help Saucer to get his java things smooth like his GameMaker sample? Did you try http://www.box.net/shared/6crbm32djhs3627lt93k ? there is a sample named after you

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org