# Isometric Stuff

**URL:** <https://forum.makecode.com/t/isometric-stuff/45786>\
**Category:** Show & Tell\
**Tags:** game, graphics-and-math\
**Created:** [September 8, 2026, 12:20am UTC](https://forum.makecode.com/t/isometric-stuff/45786 "2026-09-08T00:20:28Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![engineer703](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/engineer703/32/35135_2.png) [@engineer703](https://forum.makecode.com/u/engineer703)\
**Post date:** [September 8, 2026, 12:20am UTC](https://forum.makecode.com/t/isometric-stuff/45786/1 "2026-09-08T00:20:28Z")

</div>

Recently, I was talking with @darkcloak about some random coding stuff, and I said I would be able to create the basics of Terra Nil in a week (if you don’t know what Terra Nil is then look it up).

So that’s what I’m doing now.

But since Terra Nil is an isometric game, I had to figure out both how to make basically an isometric tilemap, and how to randomly generate the terrain. I’ve gotten pretty far (three days in though) and I figured out an array system for it and a world gen thing that works okay.

This topic is for all the isometric tilemap/world gen stuff I’ve been working on for the game.

So far, I’ve made a riverbed and land creation system, which I’ve adapted to the canyon generator below:

> **[Iso World Gen](https://arcade.makecode.com/S74804-02653-82141-43100)**
>
> Canyon World Gen Logic with settings that can be changed

This is something I am very proud of, and here are some settings that I think produce the best results:

1. 15 or 20 world size (minimal lag) (no I don’t know why you can enter a 6-digit world size, either)
2. 80% canyon density (creates best layer variability)

I’ll leave the rest for other people to find out.

Also, here’s the Terra Nil generation so far (Version 3):

> **[Terra Nil World Gen Mk. 3](https://arcade.makecode.com/37702-19525-27823-92448)**
>
> ACTUAL LOGIC FOR WORLDGEN NOW WITH BETTER LOGIC :D

If anyone wants an explanation of how either of these works, please ask.

If anyone wants me to do a full game with the canyon generation, please say so below:

_Poll ([view on site](https://forum.makecode.com/t/isometric-stuff/45786/1))_

Also does anyone know how to further optimize the Terra Nil world generation? It lags at larger world sizes for some reason and I need it to work at larger world sizes (50+).

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 8, 2026, 1:28am UTC](https://forum.makecode.com/t/isometric-stuff/45786/2 "2026-09-08T01:28:57Z")

</div>

I made a ismetric tile generator code but I never got around to implementing textures or walls(I’m scared of trying to implement walls)

---

<div class="post-metadata">

**Author:** ![luxregina](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/luxregina/32/32544_2.png) [@luxregina](https://forum.makecode.com/u/luxregina)\
**Post date:** [September 8, 2026, 1:31am UTC](https://forum.makecode.com/t/isometric-stuff/45786/3 "2026-09-08T01:31:56Z")

</div>

You could make a simplified version of Final Fantasy Tactics / Jeanne d’Arc - How demanding/intensive is the world generation?

I’m a huge fan of isometric games and I’ve worked on quite a bunch of them! (but for other platforms than MakeCode)

Excited to see where you go with this!

---

<div class="post-metadata">

**Author:** ![engineer703](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/engineer703/32/35135_2.png) [@engineer703](https://forum.makecode.com/u/engineer703)\
**Post date:** [September 10, 2026, 3:29am UTC](https://forum.makecode.com/t/isometric-stuff/45786/4 "2026-09-10T03:29:57Z")

</div>

New Update!

I’ve figured out a way better way to handle world generation.

It simply fills the world array (array full of numbers 1-3) using some logic, and then spawns in the world all at once. This takes generating a 50 size world from an average of 20 minutes on a PC (an actual one), to about 1-2 minutes on a school computer. This means I can generate large enough worlds fast enough.

For the canyon game, I’ve decided I’m going to go with a desert theme instead, as it fits better with the size. And I have an idea for what the game part would be.

The game would, quite simply, be a survival game, with custom crafting recipes and rules. For example, to get wood from a palm tree (oasis), you would need to cut it down with an axe and either A. chop the fallen trunk with an axe to get wood chunks (made into planks) or B. use a saw to get planks directly from it.

Here’s the current version (I finished world generation):

> **[Desert Iso World Gen](https://arcade.makecode.com/07462-57062-69941-86551)**
>
> The new world generation for the desert survival game, with dead bushes and rocks, as well as being able to handle much larger world sizes

Here are some of the things I’ve added:

- Faster/Better World Gen
- Low Ground Percentage (previously Canyon Density) is randomly changed while generating, making larger worlds more variable. I recommend 50% or 60% to start for good results.
- Randomly placed rocks and dry bushes for early game resources (not that they do anything yet)

Also, since the terrain is stored in a (quite large) array of numbers, seeds would work as well, including for save files (something to plan for later).

Some other things I’m planning to do:

- Player sprite and animations
- Movement
- Destroying bushes and rocks with fists
- Inventory with built-in crafting thing
- Render distance around player for less lag
- Settings menu

As another thing, who wants me to implement multiplayer functionality with the second-screen extension after I implement the playable mechanics, because of how efficient the world gen is?

_Poll ([view on site](https://forum.makecode.com/t/isometric-stuff/45786/4))_

And if anyone wants to do something with this isometric stuff, I’ve included the basic function to make the isometric stuff appear based on a number array and an image array below (with basic isometric blocks as placeholders). I will be updating this as I make the game to include more functionality, including players and rendering in a circle (or square) around a sprite.

> **[Isometric Rendering](https://arcade.makecode.com/S97021-85268-10057-16604)**
>
> Made with ❤️ in Microsoft MakeCode Arcade.

I’ve also made a new pfp for myself because I’m doing the isometric stuff right now.

And @luxregina, thanks for the support, but I have decided not to do a simplified version of Final Fantasy Tactics or Jeanne d’ Arc, but if you or anyone else wants to do this instead I can help with some of the code (if needed). And since you’ve worked on a bunch of isometric games, do you have any specific tips for me?

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 10, 2026, 4:41pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/5 "2026-09-10T16:41:00Z")

</div>

maybe u could use render to screen at z index to not need 2000 sprites for a 50x50 world

---

<div class="post-metadata">

**Author:** ![luxregina](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/luxregina/32/32544_2.png) [@luxregina](https://forum.makecode.com/u/luxregina)\
**Post date:** [September 10, 2026, 4:42pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/6 "2026-09-10T16:42:50Z")

</div>

Not particularly, isometric is pretty straight-forward as long as you have a strong Z-sorting algorithm: at some point, you will want to have volumes above your tiles (buildings, trees, etc) and it will be important to z-sort all the sprites that interact with your world… it might be tricky to do this and preserve performance on MakeCode ? I’ll be following your progress on this 🙂

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 10, 2026, 4:48pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/7 "2026-09-10T16:48:24Z")

</div>

I would suggest to not do that because it would double the lag and this is no gameplay AT ALL

---

<div class="post-metadata">

**Author:** ![engineer703](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/engineer703/32/35135_2.png) [@engineer703](https://forum.makecode.com/u/engineer703)\
**Post date:** [September 10, 2026, 6:16pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/8 "2026-09-10T18:16:40Z")

</div>

Well I meant after I finish the gameplay and maybe a good bit later too.

Also it doesn’t lag enough for it to matter much as long as you only render in a certain distance around the player (in the future)

---

<div class="post-metadata">

**Author:** ![teaeat100](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/teaeat100/32/33097_2.png) [@teaeat100](https://forum.makecode.com/u/teaeat100)\
**Post date:** [September 11, 2026, 4:50pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/9 "2026-09-11T16:50:29Z")

</div>

Do an Advanced version of Final Fantasy Tactics, say . . . FInal Fantasy Tactics Advance . . .

@richard

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 12, 2026, 3:30am UTC](https://forum.makecode.com/t/isometric-stuff/45786/10 "2026-09-12T03:30:22Z")

</div>

I made an algorithm method of how I did it I’m curious tho how do you do it

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 12, 2026, 3:31am UTC](https://forum.makecode.com/t/isometric-stuff/45786/11 "2026-09-12T03:31:45Z")

</div>

wait lez go I made a function to create 250x250 tilemap of iso tiles running at 36 fps on my potato Chromebook I did use ai to see where I could optimize it but I will create my own version

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 12, 2026, 6:45pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/12 "2026-09-12T18:45:41Z")

</div>

How big is the map gonna be?

---

<div class="post-metadata">

**Author:** ![engineer703](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/engineer703/32/35135_2.png) [@engineer703](https://forum.makecode.com/u/engineer703)\
**Post date:** [September 12, 2026, 6:45pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/13 "2026-09-12T18:45:59Z")

</div>

For rendering it (62500 sprites/tiles?!)? And how big of a sprite/tile is it? Mine can run pretty well, but most of the time it takes to load is just so it can generate the number array, and I don’t know how to optimize that. Also what do you mean by how did I do it? If you’re talking about rendering in a distance around the player, I haven’t done that yet because there isn’t a player yet. But it will (most likely) drastically reduce lag because it doesn’t need to have 3000 sprites at the same time

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 12, 2026, 11:46pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/14 "2026-09-12T23:46:24Z")

</div>

I think it has a height of 5 and is 18 x9 also I’m not using sprites or tiles

---

<div class="post-metadata">

**Author:** ![engineer703](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/engineer703/32/35135_2.png) [@engineer703](https://forum.makecode.com/u/engineer703)\
**Post date:** [September 12, 2026, 11:50pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/15 "2026-09-12T23:50:47Z")

</div>

The player can choose the size, probably max like in the hundreds

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 12, 2026, 11:51pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/16 "2026-09-12T23:51:34Z")

</div>

500 sprites in screen will lag a lot do you need sprites tho that’s the question indeed

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 12, 2026, 11:53pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/17 "2026-09-12T23:53:35Z")

</div>

I could run a 50x50 tilemap at the same fps with the render algorithm but I run my isotope function every frame 250 times so if I saved them to a nested array it would run like 30 times faster

---

<div class="post-metadata">

**Author:** ![TheEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/theearth/32/34579_2.png) [@TheEarth](https://forum.makecode.com/u/TheEarth)\
**Post date:** [September 13, 2026, 7:15pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/18 "2026-09-13T19:15:36Z")

</div>

? Why do you need a number array I use a function array

---

<div class="post-metadata">

**Author:** ![engineer703](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/engineer703/32/35135_2.png) [@engineer703](https://forum.makecode.com/u/engineer703)\
**Post date:** [September 13, 2026, 7:25pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/19 "2026-09-13T19:25:55Z")

</div>

Well yes, I need sprites, maybe not for the tiles specifically but definitely for the rocks and dry bushes. Also if I make a function that only renders the world in a certain distance, I won’t have nearly as many sprites and it will most likely run 100-200+ fps because of it.

---

<div class="post-metadata">

**Author:** ![engineer703](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/engineer703/32/35135_2.png) [@engineer703](https://forum.makecode.com/u/engineer703)\
**Post date:** [September 13, 2026, 7:27pm UTC](https://forum.makecode.com/t/isometric-stuff/45786/20 "2026-09-13T19:27:33Z")

</div>

Are you using the drawing thingy or what?

[Next page](https://forum.makecode.com/t/isometric-stuff/45786.md?page=2)
