Fates of Ort - retro fantasy RPG

Hey everybody!

I am finally getting around to creating a Defold community page for my game, Fates of Ort. I will try to keep this thread up to date with developments about the game. I live stream development on Twitch most weekdays - if you are interested in seeing the game being made then please drop me a follow.

In brief, Fates of Ort is a retro fantasy RPG with a couple special mechanics:

  • The action is a turn-based / real-time hybrid. Whenever you stand still and are not casting a spell, everything around you freezes.
  • The magic spells at your disposal cost HP. You need to be strategic and ensure you are not taking damage from enemies, while ensuring you are not wasting hit points on unnecessary spells.
  • Each spell can be combined with one of three elements, producing a different effect.

Thanks for reading!

30 Likes

Fantastic!! And at last, a community page! :smiley: Cheers from sweetfish on Twitch :beers:

6 Likes

Thanks for being active on social media. And please let me know if you have any ideas on how we can help you. I.e. - some pre-scheduled SMM to drive our subscribers to your live stream? Or your video content on our youtube?

@Axel and I are open for your ideas :wink:

5 Likes

Oleg, thank you very much for the offer! Currently my social media “strategy” consists of an attempt to create a steady stream of screenshots/videos to post on Twitter/Facebook/Instagram in order to generate a following. I am also toying with the idea of creating a Youtube devlog series to cover things like game mechanics, story elements, and obstacles encountered during development.

I would love to discuss more with you two (@Axel has all my details). If there’s anything we can co-ordinate together then all the better - I push for Defold all the time and have converted at least one disciple to the cause! :smiley:

6 Likes

Hey everybody, it’s been a while! What with life getting in the way (just minor things… like getting married), progress has been a bit slow. But it’s picking up again!

I’ve knocked out some good things, most notably a trailer. I’m a total amateur at video editing so I am pretty happy with how it turned out. Let me know what you think!

25 Likes

Hey @Pkeod, thanks for the like! You have been particularly important in helping make this happen. Fates of Ort uses defOS, defsave, and defblend. Massive thanks to you for all your efforts.

5 Likes

Your game looks super cool! Good luck and congrats!

5 Likes

Wow :smiley: this gameplay makes me wanna play this game urgently!

4 Likes

thanks! It looks good. SMMed a bit
Feel free to poke me if I am slow at noticing you did something good to push through our social channels :wink:

3 Likes

Looks realy nice! I wonder how did you make isometric tilemap with defold, can you give some tips, because i havn’t found any info about iso?!:frowning:

1 Like

Hi r3verser! Thank you for the kudos :slight_smile:

Actually, I don’t think Defold currently supports isometric tilemaps. At least it didn’t when I began this project. That’s why I made my own system - it works but it’s pretty resource intensive.

I design the maps in Tiled, and apply custom properties on each layer that helps me know what to do with each tile layer once I get it into Defold.

image

Tiled actually exports directly into .lua files, which is great for working with Defold. Here’s what it looks like when exported:

image

Once I have this in, I iterate over the table and spawn game objects with a sprite in them. Which sprite I spawn is determined by the “tileset” property I set above.

That’s the gist of it!

11 Likes

What is the size of your levels and do you do any manual culling?

2 Likes

We’ve limited ourselves to a maximum of 100x100 tiles, though in practice most of our maps are 50x50.

I do disable/enable game objects depending on whether or not they are on screen. That is making some difference.

I have been considering just exporting the ground layer (this is the layer with the most tiles obviously, and doesn’t need any live z-position manipulation) and placing that in one big atlas. That way we’d save 2,500 (50x50) game objects and sprite components. I ran a test of this and performance was way better. Any reason why this would be a bad idea?

1 Like

Yes, this should help. How do you detect when something goes off-screen?

I have a 2D table of all the tiles on the map. If the camera moves sufficiently, I trigger a loop that switches game objects on/off depending on if they are on screen or not. I don’t iterate over all tiles though - I pick a subset of the tiles based on the camera position (including a couple of tiles worth of bleed).

Works something like the sketch below.

image

I should note that it doesn’t appear to be (entirely) the culling mechanism that is driving performance. I was running the game on a couple of out of date laptops and saw the CPU running at about 25% on a 100x100 tile map. Replacing the ground layer of tiles (i.e. 10,000 game objects) with one very large png image about halfed the CPU usage.

3 Likes

Yes, that is to be expected. The 10000 game objects will have to have their transforms updated every frame which is costly.

What kind of components do you have per tile? One or more sprites? Collision objects?

Every game object has just one solitary sprite component. When I first started implementing culling I tried putting a script component on each game object… That idea went out the window very fast :sweat_smile:

Out of curiosity, @britzl, how would you go about making a game like this work? I wonder how far off I am from a sensible implementation.

2 Likes

Yeah, the script was a bad idea :slight_smile: I’ve wanted to try and put trigger collision objects on tiles and a large trigger box centered on the player and slightly larger than the screen size. When I get exit messages I disable the tiles and when I get enter messages I enable them again. Not sure if it’s faster than iterating tiles though…

4 Likes

Hmmm, that’s a really interesting idea! I don’t know enough to theorise about what the “cost” of >10,000 collision objects would be, so I’d have to test that out to know for sure. But the solution does appeal to me! So much easier than iterating over the rows and columns.

1 Like

Thanks, it’s very useful! What is the best place to put this logic (custom tile spawning)?