Where to start? 2D isometric game.

Greetings, everyone! I have a couple of questions and would be grateful if you helped me.

What I have knowledge of:

  • I am pretty ok with java (not with graphics though) and am familiar with creating huge projects.
  • no knowlege on graphics or drawing.

What I would like to be able to do:

  • a 2d isometric(or similar, like oblique projection) turn-based game. Art-wise, I would love to make something similar to, say, Ultima VI\VII.

What I have tried\looked through:

  • For the past years I have been writing a text-based game, which is still fun but I thought I could aim a bit higher.

  • I tried drawing. It was bad. But since this project is only for my personal fun and experimenting with turn-based rpg mechanics, it shouldn’t be a problem, I hope. I intend to spend several months learning the drawing basics if it is necessary.

  • Looked at various free game engines, Unity in particular. The major issue i ran into while messing around with it is that I feel having less control over the project - because not everything is written by me. That’s why I am a little bit opposed to using libraries\engines, I just need to know how everything works.

  • Lots of very helpful topics on forums, including yours, like this one: http://www.java-gaming.org/index.php?topic=22023.0

Relevant questions to all the knowledgeable folk here:

  • Art design perspective: since i am not an artist, what will be your recommendations considering my situation? Should I improve my drawing skills? Personally, I think it would be better to just use some placeholder graphics for the first months to get myself familiar with how everything works together.

  • Art design implementation perspective: the core question: where to start? It’s just there’s sooo many things out there. I’ve read about tiles, sprites, animations, etc. but I am not sure if i need all that. I believe there’s too much information to try to find it in forum posts\tutorials, and I will have to find a book meeting my needs. But which one?

  • General perspective: what in general do you think about my case? Should I just not bother with it since I am not an artist? I am almost sure the author of KotC (Knights ofthe Chalice) did both the programming and the design part himself. Since the art design and perspective projection resembles the Ultima games, that’s the thing I am inspired by (graphically).

Thanks!

I am Russian, so some questions might sound unnatural, language-wise, or make no sense at all. My apologies in advance.

I don’t have any screens of it online right now, but I once started to work on an RPG with line-art graphics and the display turned out quite nicely. A few examples - unfortunately I have no full scene view online right now, but it might give an idea:

Monsters:

http://sourceforge.net/projects/varkagraphics/screenshots/324296

Tools:

http://sourceforge.net/projects/varkagraphics/screenshots/324294

But even with this much simplified graphics I never managed to finish an RPG. Item design, character design, world building, and finally writing the code … well usually I ran out of interest in the project after a few years and never got an RPG done.

I’d say, don’t worry about the graphics till you have a good core for an interesting game.

Varkas, thanks for the answer!

I’ve been working on this for about 4 years now, will a couple breaks for several months. So far it was a fun experience. Character design and world building is not an issue since the game main focus is combat.

[quote]I’d say, don’t worry about the graphics till you have a good core for an interesting game.
[/quote]
The problem is, I am coming to a point when everything that is graphics-independent is implemented. I am using a mixture of 3.5E\Pathfinder ruleset and some things, like area-of-effect spells, have to be coded with the graphics in mind. I did implement it via text, but only until I figure out the graphics thing.

Although I have stated U6\KotC as my inspirations, I would be happy to get something as primitive as Gold Box games graphics. It’s just I don’t know where to start in terms of java\animations\etc., and hoped someone here ran into similar problems. I am still looking through numerous threads and books, but having some directions or guidelines would definitely help.

IMHO you should pick up LibGDX and work on some simple graphical games like Pong, Asteroids, etc before tackling an isometric RPG (which is a rather huge endeavour, and not all that easy for somebody who’s never worked with graphics).

Well since you have no knowledge of how to do graphics - I suggest you start there.

You could start with how to draw an image on the screen or start from a historical perspective and see how graphics started out.

If you’re most interested in designing and making a game then you should definitely use a game engine of sorts instead of making your own.

This is good advice. The main challenge lies not in creating something that remotely resembles an isometric game (i.e. a scrollable map with tiles, a guy walking around, and some items / skills), but rather in finishing a game: making it fun to play, have a nice storyline, progression of some kind, to allow users to install it, and run it in a good way (i.e. deployment), menus, testing, lots of bugfixing, and so on, and so on. First really finishing a simple game such as pong or asteroids, or tetris gives you an idea of how to best approach a bigger project and whether that is something for you.

  1. You must decide if you want to go 3D or 2D

if you go 2D the route will be about this:

a) Decide on the size of the graphics and the number of views (rotations)
b) Decide on a tile raster (dx, dy) - this will determine the basic isometric grid for your display. To convert map coordinates to screen coordinates with the choses raster, use something like this:

    public int getTileScreenX(final int x, final int y) {
        return x*dx - y*dx;
    }

    public int getTileScreenY(final int x, final int y) {
        return x*dy + y*dy;
    }

c) Decide on a graphics format (storage) and make the graphics.
d) Load the graphics into memory
e) For each map element, determine the screen position (see (b)) and draw the appropriate image there (also (a) rotations, animations).

Done :slight_smile:

Thanks for the replies!

[quote]IMHO you should pick up LibGDX and work on some simple graphical games like Pong, Asteroids, etc before tackling an isometric RPG (which is a rather huge endeavour, and not all that easy for somebody who’s never worked with graphics).
[/quote]
Well, having looked through first tutorial articles, it looks promising, thank you. And I like a challenge.

[quote]Well since you have no knowledge of how to do graphics - I suggest you start there.

You could start with how to draw an image on the screen or start from a historical perspective and see how graphics started out.

If you’re most interested in designing and making a game then you should definitely use a game engine of sorts instead of making your own.
[/quote]
I would like to try to stick to my own code as long as possible, but yes, I understand that at some point I will have to give up and use something like LibGDX. I find it the most helpful to try to tackle the problem on your own and only then to look at how other people solved it.

[quote]This is good advice. The main challenge lies not in creating something that remotely resembles an isometric game (i.e. a scrollable map with tiles, a guy walking around, and some items / skills), but rather in finishing a game: making it fun to play, have a nice storyline, progression of some kind, to allow users to install it, and run it in a good way (i.e. deployment), menus, testing, lots of bugfixing, and so on, and so on. First really finishing a simple game such as pong or asteroids, or tetris gives you an idea of how to best approach a bigger project and whether that is something for you.
[/quote]
Again, I’m not planning on using it commercially, it’s just for my personal experience and fun. But yes, I will try to make a simple project like tetris to get used to, say, LibGDX.

[quote]1) You must decide if you want to go 3D or 2D

if you go 2D the route will be about this:

a) Decide on the size of the graphics and the number of views (rotations)
b) Decide on a tile raster (dx, dy) - this will determine the basic isometric grid for your display. To convert map coordinates to screen coordinates with the choses raster, use something like this:
1
2
3
4
5
6
7 public int getTileScreenX(final int x, final int y) {
return xdx - ydx;
}

public int getTileScreenY(final int x, final int y) {
    return x*dy + y*dy;
}

c) Decide on a graphics format (storage) and make the graphics.
d) Load the graphics into memory
e) For each map element, determine the screen position (see (b)) and draw the appropriate image there (also (a) rotations, animations).

Done
[/quote]
Thanks for a detailed post!

I have been experimenting with projections for some time, since for that purposes standard java library would suffice. The problem is the following: all sorts of technical issues arise, e.g.: there is an object on the screen that I want to click on (for instance, a chest or a monster). I would listen to mouse clicks and when mousePressed() I would check the coordinates - if event.getPoint() lies in the object rectangle\frame, then I’ve clicked on the object. But this solution seems primitive and hence I wonder how it is usually done. And I have many questions like that. I guess I just need to look at simple open source projects and learn from there.

Anyway, thanks for your advices! I will look into LibGDX, make a simple project with that and try to analyze some primitive open source games.

The screenshots from the games I mentioned.

Gold Box Engine, 1988

Ultima VII, 1992

Knights of the Chalice, 2009

(Spoiler tag didn’t put the images under cut so sorry for a long post).

Depending on how lazy I feel I either track all rectangles during painting the map, and then just checkk the rectangles on mouse position inside, just like you described.

But sometimes I also coded the reverse projection from screen coordinates into map coordinates and used that to look up the object.

Actually the first method has the benfit that you can do a “is pixel part of the image or transparent” test, which is very good even for largely overlapping objects.

You don’t need to overengineer solutions here. Simple things are often good enough.

Something I discovered not too long ago is that making mockups can help a lot to get an idea of what the project needs.

Look for sprites, tiles and effects online, and then compose them on an art program, like GiMP or Photoshop, to look like you want the game to look, UI and all.

Do a series of these mockups, and as you place elements or modify the image further, think, with each step, what will be necessary for the real implementation (animations, underlying code, etc…).

For example, for my current project, I came up with the actual implementation of the lighting system while drawing the shadows in GiMP for the mockup.

It’s the closest you can get to making a sketch of a game, and, at least in my experience, helps a lot.

Gathering a lot of tools (code, art assets, engines, etc…) can become overwhelming once you put your mind to using them… But don’t have a clear idea of how to do so.

Anyway, my two cents. :slight_smile:

For each hour I spend using libgdx, it seems to do less for me…in a good way. Let me explain. To begin with, I had no idea what was going on, and I felt like I wasn’t working on my own game. After doing a bunch of tutorials, I realized that I was basically working on the same things I did before (while creating my Java2D RPG framework), only many of the intricate, error-prone parts were left out. They’re already done tremendously well, just waiting for you to utilize them!

It’s not even as if by choosing libgdx you limit yourself to using their gameloop strategies and such. You can loosely implement some parts of the framework. If you don’t like Scene2D, you can just make your own UI implementation. You could even fairly easily port a Java2D menu-system to libgdx without much hassle. Not that I’d recommend it, because scene2D is AWESOME once you get the hang of it!

I wholeheartedly recommend going for libgdx, but starting extremely slow is a good idea. PingPong is harder than it looks, and Tetris is a nightmare when you’re a beginner!

Good luck on your ventures!