Ran across LÖVE recently, and decided to see what I could do with it. Results of my first efforts:
It's mostly from scratch (I made use of a modified version of TSerialize by Taehl, but everything else I wrote or drew myself). Left clicking on an unselected tile selects it, left clicking on a selected tile de-selects it. The scroll wheel increases/decreases the height of the selected tile. The save button does more or less what you would expect. The four arrows let you pan around to view the rest of the map. The map gets auto-loaded when you start.
Some things yet to do: allow text input of file names to save/load. Implement different terrain types and a way to change them (it stores the terrain type now, but there's only the one grass-over-dirt terrain at the moment). Allow different camera angles so you can see around stuff. Create an actual game to make use of the map(s) created. Replace the terrible graphics with... um... less-terrible graphics?
Messing around with isometrics - more progress shots
- Exasperation
- Prole
- Posts: 11
- Joined: Sat Oct 02, 2010 7:11 pm
Messing around with isometrics - more progress shots
Last edited by Exasperation on Wed Oct 06, 2010 5:50 pm, edited 2 times in total.
- Taehl
- Dreaming in associative arrays
- Posts: 1025
- Joined: Mon Jan 11, 2010 5:07 am
- Location: CA, USA
- Contact:
Re: Messing around with isometrics
Looking good! Have you figured out collision? It can be a little trickier for an isometric game since you have to take the third dimension into account. On the other hand, its tile-based nature can let you take shortcuts, if you're crafty.
Earliest Love2D supporter who can't Love anymore. Let me disable pixel shaders if I don't use them, dammit!
Lenovo Thinkpad X60 Tablet, built like a tank. But not fancy enough for Love2D 0.10.0+.
Lenovo Thinkpad X60 Tablet, built like a tank. But not fancy enough for Love2D 0.10.0+.
- Exasperation
- Prole
- Posts: 11
- Joined: Sat Oct 02, 2010 7:11 pm
Re: Messing around with isometrics
I haven't even looked at collision yet. That's sort of in the "create an actual game" to-do item. Everything I had implemented as of the previous posting is listed in the post (I don't think I forgot anything, at least). Since then, I have gotten map rotation done, so now you can turn the map by 90 degree increments.
Probably the only interesting implementation detail so far is the way I'm handling screen-to-tile mapping. I'm using one of the 0.7.0 beta's new features to cheat at it.
Probably the only interesting implementation detail so far is the way I'm handling screen-to-tile mapping. I'm using one of the 0.7.0 beta's new features to cheat at it.
- kikito
- Inner party member
- Posts: 3153
- Joined: Sat Oct 03, 2009 5:22 pm
- Location: Madrid, Spain
- Contact:
Re: Messing around with isometrics
You are using a framebuffer, perhaps?I'm using one of the 0.7.0 beta's new features to cheat at it.
When I write def I mean function.
- Exasperation
- Prole
- Posts: 11
- Joined: Sat Oct 02, 2010 7:11 pm
Re: Messing around with isometrics
Yeah. I use b for type of element and r+g for the individual element. So the buttons around the edge are colored 50,50,250 through 56,50,250 (and the next one will be 57,50,250), while the map tiles are colored 51,51,50 through 50+mapsize.x,50+mapsize.y,50. I've started working on a main menu, and on that mousemap the menu items (the only one there so far enters the editor screen) are colored r,g,255. So getting the element at a screen location x,y is just a matter of mouseMap:getPixel(x,y), and I don't need to worry about doing the math for when the mouse is over whatever arbitrarily shaped object I want to interact with.
Edit:
Another day, a little more progress. I got fed up with making graphics for gui elements for every thing I implemented, so I went looking online and found a free GUI construction kit. While I was at it I found a free font that looked decently readable, and grabbed that too. As a result, I still haven't gotten around to adding controls connected to the last few things I implemented internally, but the program at least looks prettier (screenshot shrunk down to 1/2 size to reduce filesize, it looks a little better at normal size).
(And there is a lot of code cleanup and some additions behind the scenes, just no new exposed functionality.)
Edit:
Another day, a little more progress. I got fed up with making graphics for gui elements for every thing I implemented, so I went looking online and found a free GUI construction kit. While I was at it I found a free font that looked decently readable, and grabbed that too. As a result, I still haven't gotten around to adding controls connected to the last few things I implemented internally, but the program at least looks prettier (screenshot shrunk down to 1/2 size to reduce filesize, it looks a little better at normal size).
(And there is a lot of code cleanup and some additions behind the scenes, just no new exposed functionality.)
Re: Messing around with isometrics - now prettier
This looks pretty neat.
Will it have any kind of depth sorting for the objects? From my experience isometrics can get really tricky when you have objects that are tall(e.g. taller than the tile), multiple tiles wide or want to have moving objects at the right depth.
This is for 0.7, right? I like your use of framebuffers and the map rotation.
Will it have any kind of depth sorting for the objects? From my experience isometrics can get really tricky when you have objects that are tall(e.g. taller than the tile), multiple tiles wide or want to have moving objects at the right depth.
This is for 0.7, right? I like your use of framebuffers and the map rotation.
- Exasperation
- Prole
- Posts: 11
- Joined: Sat Oct 02, 2010 7:11 pm
Re: Messing around with isometrics - now prettier
Thanks!
I expect I'll have to implement some sort of depth sorting, yeah. Haven't really decided on how I want to do that yet, though. And yes, this is in 0.7 (has to be, since framebuffers are newly supported in 0.7).
Also, some more progress shots:
This shows the (currently unimpressive) main menu, the brand-new terrain brush picking menu (entered by clicking on the image of the currently selected brush), and an example of multiple terrains + view rotation at work.
I've also got code in place (and tested) to handle larger cursor selection areas (changing height/terrain for multiple tiles at once), but I haven't put in the controls to let you change the size of the selection area yet.
I expect I'll have to implement some sort of depth sorting, yeah. Haven't really decided on how I want to do that yet, though. And yes, this is in 0.7 (has to be, since framebuffers are newly supported in 0.7).
Also, some more progress shots:
This shows the (currently unimpressive) main menu, the brand-new terrain brush picking menu (entered by clicking on the image of the currently selected brush), and an example of multiple terrains + view rotation at work.
I've also got code in place (and tested) to handle larger cursor selection areas (changing height/terrain for multiple tiles at once), but I haven't put in the controls to let you change the size of the selection area yet.
Re: Messing around with isometrics - now prettier
I'm wondering what you use those for...redlock wrote:This looks pretty neat.
Will it have any kind of depth sorting for the objects? From my experience isometrics can get really tricky when you have objects that are tall(e.g. taller than the tile), multiple tiles wide or want to have moving objects at the right depth.
This is for 0.7, right? I like your use of framebuffers and the map rotation.
Can't you just use love.graphics.setScissor(x,y,w,h)?
Hello, I am not dead.
- Exasperation
- Prole
- Posts: 11
- Joined: Sat Oct 02, 2010 7:11 pm
Re: Messing around with isometrics - more progress shots
No, setScissor wouldn't do anything like what I want. setScissor restricts the drawing area to some portion of the display. If you look at this image again:
That shows the contents of a framebuffer that is normally never displayed, only stored to an ImageData. This image is a projection of the normal contents of the display, but with everything colored according to what should happen when the mouse interacts with it. Since this particular framebuffer has the same dimensions as the actual drawing area, I can take the mouse coordinates, send them to this framebuffer (or rather an ImageData capture of its contents) using ImageData:getPixel, and get back the r, g, and b values that coordinate has in this hidden framebuffer, which indicate what interface element the mouse is interacting with (and saves me the trouble of finding out whether the mouse coordinates are within some (potentially arbitrarily shaped) area).
Another use for framebuffers is if you have a scene to display with some dynamic elements and a lot of complicated but static elements. You can draw all the static elements to a framebuffer once, then just draw the contents of the framebuffer + the dynamic elements to the screen every frame, saving yourself the recomputation of the static stuff every frame.
That shows the contents of a framebuffer that is normally never displayed, only stored to an ImageData. This image is a projection of the normal contents of the display, but with everything colored according to what should happen when the mouse interacts with it. Since this particular framebuffer has the same dimensions as the actual drawing area, I can take the mouse coordinates, send them to this framebuffer (or rather an ImageData capture of its contents) using ImageData:getPixel, and get back the r, g, and b values that coordinate has in this hidden framebuffer, which indicate what interface element the mouse is interacting with (and saves me the trouble of finding out whether the mouse coordinates are within some (potentially arbitrarily shaped) area).
Another use for framebuffers is if you have a scene to display with some dynamic elements and a lot of complicated but static elements. You can draw all the static elements to a framebuffer once, then just draw the contents of the framebuffer + the dynamic elements to the screen every frame, saving yourself the recomputation of the static stuff every frame.
- Thursdaybloom
- Citizen
- Posts: 81
- Joined: Mon Feb 15, 2010 3:43 am
- Location: Australia
Re: Messing around with isometrics - more progress shots
We spoke briefly about isometric maps in the IRC room and I'd be interested in working on this with you if you'd like.
Who is online
Users browsing this forum: No registered users and 1 guest