Isometric Projection in Game Development
pikuma.com
pikuma.com
The sort of thing you'd solve in 30 seconds with Google in 2024.
The 2D tiles were rendered out of 3D Studio Max, and the characters were meshes exported from Max.
> The sort of thing you'd solve in 30 seconds with Google in 2024.
This is unfortunately becoming increasingly untrue, as the forums where stuff like that was posted are rotting away, and Google’s advertisement optimized result ranking neglects the long tail.
And to the extent it is still true, it’s because pioneers like you figured it out and shared their results!
I guess I'm becoming the old, grumpy "back in my days, we used Google!" type of guy.
sadly your best "free" alteratives is going back to the days of smaller, specific communities, and searching through there. If the forum has a bad search, you go back to google but can then use Site:[website.com] as a filter to fine tune your results. .
I still don't use it - I can't trust it not to misrepresent what its citations say, and if I have to check the cited pages I might as well just use regular search.
It seems to be responsive to which sites you want ranked higher/lower. For instance I have wikipedia pinned which resolves a longstanding issue google has had where seo is prioritized over relevancy.
it's kinda weird how the web has increasingly become optimized for bots - and filled with content created by bots... to the point where as a human you now need a bot to cut through all the bloated SEO bullshit and filter out what you actually want to know...
I think in the default windows setup, your bing searches are "integrated" with your user account in some way.
Look, I don't mind the top 2 search results being ads (if you make them visually distinct from the rest), but I don't want all the other crap.
Bing's engine through duckduckgo is better. The ads don't get in your way once you've learned to start reading at the third entry on the page.
But it has become very bad at _discovering_ valuable information.
I'm Pretty Sure these things are true in comparison to the past:
- There is much more high quality content on the web than was ever before.
- The signal to noise ratio is _much_ smaller.
- Search results are getting cluttered by SEO spam, some of which is straight up copying from organic social media style sites (forums, SO, reddit, Github issues etc.)
It's extremely hard to find good content, even though _i know_ it is out there. Sometimes it's even hard to find sites I visited before, but I only remembered vague keywords.
And this is true especially for content that is of educational nature or interesting punditry. You know, the stuff that comes directly from people who have expertise and have earned a grounded opinion.
This is why I'm hoarding links to all sorts of interesting things. It's not an efficient way to do it and I don't know if there's a more general solution here. Very unfortunate.
On the other hand like the sibling comment mentions, perplexity is great at digging out obscure stuff sometimes. Provide enough details and use the pro type search and you may be surprised.
The problem is keeping the SEO bots out.
So the challenge becomes how to scale a collaborative platform while keeping out the bad actors.
I don’t think it supports auto-archiving, though you could probably use it in conjunction with pinboard for that.
QR codes got a second lease on life. Although they remained common in industrial use, they fell out of popular use almost a decade ago. Their resurgence is one of the few persistent, positive social changes to come out of the pandemic.
It took me a while to get the transform figured out, but once you do you are basically done for an entire tile set. This is also robust to vertical/horizontal overflow of tile art. The browser gives you reasonable ways to get at the various coordinate systems. You can either take the screen space coords directly or inverse transform them to get the orthographic (i.e. purely top-down) tile coords.
Modern web browser tech is really something to behold. It's maybe the best game engine if you hold it right. There are some crazy things you can do in the browser in 5 minutes that are completely infeasible everywhere else. For example, what if some of the tiles are x264 video files and not just static PNGs? What if we also mix in tiles that are drawn using webgl/canvas at each frame update? We could have the client itself handle rendering of tiles using scene descriptions received from the server.
I had a pet project for a while where I was extracting all the assets from Lineage 1 so I could try to recreate it.
Absolutely loved it as a teen!
It was supposed to be a fully 2D game, and several months in we realized we'd run out of RAM for all the sprites with all their rotations. So somehow I managed to convert it into a 2D+3D game in two weeks.
I’ve implemented this in my own games and I remember that the solution was basically raycasting. But it was NOT some 30 seconds thing. It was a major effort anyway.
(There are of course other options, like rendering a picture with a different color for each object, and sampling the color to figure out what you clicked on. And “color” may just be a 1-channel integer object ID.)
My first solution (before the buildings in my game had multiple floors) was to take the ISO mouse position, grab a list of items within a cone spreading towards the screen, then:
1.) Loop through each item
2.) Create a sprite of the item (so I have direct access to RGBA info)
3.) Convert mouse coords to sprite coords
4.) Check if I'm hitting a pixel (i.e. alpha > 0)
5.) Keep track of this item
6.) Update if an item closer to the bottom of the screen (i.e. closer to camera) gets a hit
Once I added building height, this became impractical (too many items to loop through, sprite creation is CPU intensive).
New solution is to assign a 24 byte UUID to each item, convert that to RGB, draw it to the screen (invisible to the user), and then return a tiny texture every frame from the GPU at the mouse position. If the color in the texture is not black, then convert RGB back into the UUID.
PS: If you know how to draw so that alpha replaces existing alpha (instead of blending), please let me know so I can have 32 byte UUIDs!
[1] Source: I'm developing Metropolis 1998 https://store.steampowered.com/app/2287430/Metropolis_1998/
I also remember being quite chuffed about coming up with a "novel" approach using dithered planar masks to offset colours into palette ranges for not-too-blocky lighting. Then Quake came out. You forget just how siloed we all were before the Internet took off; every wheel imaginable must have been reinvented so many times...
edit: thats assuming you cant select anything that's been occluded. If you need to select things that've been occluded, lmao i dunno
Figuring it out without google was immensely satisfying, though. Reminded me what I love about programming.
I developed a large-scale, 2D isometric tactical strategy game called Cantata: https://store.steampowered.com/app/690370/Cantata/
It's sort of like a 4X version of a smaller tactics game like Advance Wars. Supply lines, region capture, unique units, etc.
It's isometric throughout, in part because I just love the aesthetics of pixel art isometric (having grown up on RTC, Age of Wonders, Simcity, Alpha Cen, Civ...).
This article was (and is) still the gold standard on describing isometric math: https://clintbellanger.net/articles/isometric_math/
We built a custom renderer for the game as well to support doing lots of crazy tile-layering steps that mix and match Z-depths based on various factors like specific units, terrain type, terrain decoration type, etc. Things like:
If a human soldier is on grass, the grass should be rendered on top of them, but if its a tank the grass "makes sense" to be under the tank, etc.
Art assets were based around 64x64 size tiles, and as someone else pointed out we were technically dimetric instead of isometric (as were most isometric games, dimetric feels too uniform).
And credit where credit is due, the art wasn't me (I was the lead dev + creative director): Character Art - Artyom Trakhanov https://x.com/vor_bokor
Unit Pixel Art - Cobralad https://cobralad.itch.io/
UI Art - Gustav Samuelson https://x.com/MechaBarbarian
It’s worth a watch! I personally prefer Jordan’s approach, which is more focused on the math than computation.
In hindsight actually I’d probably have put a little more of the computation side in the video. Based on comments I’ve received I think a good portion of the audience is just looking to get something working and doesn’t necessarily want to understand what a matrix is to get there. I think this article is a great resource for that.
> The use of isometric graphics in video games began with Data East's DECO Cassette System arcade game Treasure Island,[6] released in Japan in September 1981,[7] but it was not released internationally until June 1982.[8] The first isometric game to be released internationally was Sega's Zaxxon, which was significantly more popular and influential;[9][10] it was released in Japan in December 1981[11] and internationally in April 1982.[8] Zaxxon is an isometric shooter where the player flies a space plane through scrolling levels. It is also one of the first video games to display shadows.[9]
(...)
> In 1983, isometric games were no longer exclusive to the arcade market and also entered home computers, with the release of Blue Max for the Atari 8-bit computers and Ant Attack for the ZX Spectrum. In Ant Attack, the player can move forward in any direction of the scrolling game, offering complete free movement rather than fixed to one axis as with Zaxxon.
The only difference is if you "stack" tiles vertically they slightly offset in 2d space from ones that are offset 1x+1y.
in an isometric projection all the edges of an axis-aligned cube are the same length. in the axonometric projection discussed here, which is dimetric rather than isometric, the vertical edges are of length 1 while the horizontal edges are of length √(1 + ½²) ≈ 1.118
is the fact that this projection is not isometric the reason zaxxon was called zaxxon and not zisom?
https://www.atariarchives.org/
http://redparsley.blogspot.com/2016/08/input-magazine-retros...
https://archive.org/details/input-hi-01
Or if you prefer something more up to date,
I have a son and I asked the same question on how to start learning. I have decided to start with PICO-8 and then evolve to something else. Fingers crossed. :)
[0]: https://pikuma.com/courses/ps1-programming-mips-assembly-lan...
If it was a few years later, I wouldn't be surprised if there were some courses for the recent Unreal Editor for Fornite that could ease a new programmer in as an interactive way to script, while learning a relevant industry tool (then again, it may also go the route of Roblox, so who knows?).
Honestly, I'd defer to either mods or games with level editors as a way to help gauge how much a child would potentially enjoy programming. Then they could try sme visual scripting like Scratch to try and make something outside of that environment.
Ironically, when I was a kid I used to read the code of computer games out of curiosity and that's exactly what got me into programming.
The iso engine worked at 60fps, in 1024x748, back in 1997. But it was pulled. It was the right tech, but for the wrong game. When released GPM3 became GP World, it reverted to the traditional spreadsheet views of GPM1 & 2. (At least it looks like they kept most of my "3D" race code intact.)
I was a huge fan of this game. When I was playing this game, I was always wondering how they were able to achieve such stunning 3D visuals where almost all of the other games in the SNES console couldn't. It turned out they are pre-rendered, as per the article.
Booklet: https://imgur.com/a/6mUVpXm
Frankly, I'd expect more consistency from someone who invites his students to focus on the mathematical aspects, not only on the code.
I could look up the answer but I swear Bastion is entirely 2D. Though the characters might be 3D models constrained to certain angles.
Doom sort of fits in this category? The original[1] renderer cheated significantly in order to render the scene. It had to, for the hardware of the era. But it's not capable of arbitrary rooms/map layouts, and so, e.g., the maps are strictly 2D. IIRC, this is the reason the camera is locked on the pitch axis.
Factorio is a 2D game, but the assets are 3D, sort of like the DK example. The fun comes in that the game is 2D grid of tiles (pretty normal) but not top down, and that causes some associated havoc when things try to rotate: https://www.factorio.com/blog/post/fff-133
[1]: many modern ports do, or can, use true 3D renderers, and are thus not quite the same as the original in this regard. Later ports are also capable of non-2D maps, including things like bridges and overlapping rooms that the OG renderer couldn't do.
https://terrycavanagh.itch.io/nayas-quest
" You can download the flash player projector here
https://www.adobe.com/support/flashplayer/debug_downloads.ht...
Then from within the player, File > Open this link