Developing a tactics engine in Godot

Поділитися
Вставка
  • Опубліковано 12 січ 2025

КОМЕНТАРІ • 154

  • @Bitlytic
    @Bitlytic Рік тому +241

    This is EXACTLY the kinda stuff I love hearing about in devlog type videos. I love systems design the most and you breaking down things such as hierarchy and how different systems are handled/interact is so enjoyable to me for some reason

    • @Nohbdy_Ahtall
      @Nohbdy_Ahtall Рік тому +3

      Infinite agreeance. The node visual layout alone.... but also the isolation of sections (i.e. the `@export` variables in-editor) visually. All the video edits.... yes, some semblance of perfection.
      Hope we/I collect great tutorial examples into a compilation someday, for tutorial makers(a skillset in the knowledge world we need more of).

    • @alexandretostivin3534
      @alexandretostivin3534 Рік тому

      😊

  • @ICM9
    @ICM9 Місяць тому +2

    Man, these videos are great. There are so many tutorials online for game development but they always fail to go into depth about the actual architecture of the game, which is critical for more complex projects as not only will it provide it working product but it will save you a lot of time and future headaches. Awesome videos and thank you!

  • @_gamma.
    @_gamma. Рік тому +75

    I really like how you covered the design of the game! It feels well laid out and extensible, and moving to 4 with its better handling of resources editor-wise is the right choice. No feedback on the implementation, but I think this is a great window into the thought process of actually creating a tactics type game

  • @turtleburger
    @turtleburger 6 місяців тому +8

    LOVE seeing your node structure. This is the most helpful kind of video.

  • @RustoKomuska
    @RustoKomuska Рік тому +12

    Having just gotten out of the basic godot tutorial and being struck dumb trying to figure out the top-level basic structure to use for my first self developed project, hearing you talk about the way you organised yours and what informed your decisions feels like opening my mind a little

  • @streambeon8274
    @streambeon8274 Рік тому +7

    Great video, I'm just getting started with Godot and trying to create a small Tactics game for practice, so this kind of overview is very helpful!

  • @pedrorns
    @pedrorns Рік тому +2

    I like the depth of your explanation on node organization. Will come back to study this video later.

  • @LiveGameDriveChannel
    @LiveGameDriveChannel Рік тому +4

    I was trying to make a little tactic game for godot about a half a year ago. It is pleasing to see that I had some similarities in architecture, though it was too much for me when I started AI

  • @richardwolfe2089
    @richardwolfe2089 Рік тому +4

    I have a software engineering background and I've been working on a tactics game myself for the past several months. This is my first real game development project so it is taking me quite a long time. I am happy that it seems like the overall structure I have landed on is very similar to yours.
    So far I have a "working" concept where I have implemented a "Move" action and can select and move units within their movement range along the grid. I have also implemented a basic melee attack action (that currently doesn't do anything because I haven't implemented a health system yet) which seems to work well.
    I ran into a bit of a snag today when trying to ask myself what to do about actions that target different kinds of units (friendly, self, enemy, or multiple of these). Currently each unit has its own "Faction" property, and can be "player", "friendly", "neutral", "enemy".
    I tried to use Data Driven Design where possible and I used an EventBus pattern for most of the communication between nodes. Currently most of the core game logic is being handled by my GameBoard class as that is what contains the actual grid. At first this seemed fine because the GameBoard could answer questions like "What is on the grid in this location?" and "highlight the valid cells I can move to with the move action on this particular unit". But as I go along, this class just keeps growing and growing. It is now over 250 lines, which doesn't seem right. Maybe it is? It just feels very icky to me.
    I am finding that the Eventbus is just passing around the "active_unit" and "selected_action" around everywhere. Also I can answer questions like "Which cells on the grid are occupied by a grid_object (just units for now)" but I am struggling with more detailed questions like "get me all of the cells in range of this action that specifically have "Friendly" units on them".
    I think I need to do some more decoupling and the "Services" you talk about sounds like it could be the answer. It's at times like this I wish I had a mentor or more experienced developer to keep me on the right path. I would love to see a more detailed overview of the Services pattern and how they communicate with one another.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +4

      Thanks for sharing! As a fellow software dev, it's also a bit of relief to me that another dev landed on something similar 😅
      Understand about the GameBoard getting a bit large. I started in a similar spot, and that's why I ended up separating questions about combat from those about the game world itself. Not that there's inherently anything long with a larger class like that, but it just felt neater that way.
      For services, it sounds like there's a fair bit of interest in that subject so I'm thinking of covering it further in a future video. Game Programming Patterns also has a good talk about this pattern, though he may or may not approve of how I've used it here: gameprogrammingpatterns.com/service-locator.html

    • @richardwolfe2089
      @richardwolfe2089 Рік тому +1

      @@TheShaggyDev Sounds good. Thank you for the link to the resource. It's very interesting. I was able to do some cleanup today and it feels a bit more organized. GameBoard is still a bit large for my liking, but its a start.

  • @PASTRAMIKick
    @PASTRAMIKick Рік тому +4

    This is really cool, I like seeing good architecture and design patterns being applied in games and not just in other fields of Software development

  • @MaksimZhouner
    @MaksimZhouner Рік тому +1

    Thank you for sharing your experience with Godot and tactic games dev!
    There are pretty clear and useful explanations you've provided in video.
    The only thing was hard for me is to catch some of the examples related to the events and reaction loop without some kind of event sequence diagrams or other supportive visuals.
    Anyway, now I'm going to watch the rest of your videos :)

  • @Muphet
    @Muphet 10 місяців тому

    love this video. showing and explaining actual node structure when designing game is far more valuable then tutorials about features that beginner developer have no idea how to apply

  • @juandiegotentoco5870
    @juandiegotentoco5870 9 місяців тому +32

    I know nothing about developing games. I am starting from scratch. Don't know about any coding, but can do art (haven't tried pixel art yet, but I know it will be easy). I am on this journey because Square Enix won't make another Final Fantasy Tactics game, and if they won't, I'll do it on my fucking own.

    • @SophieBonner-z1t
      @SophieBonner-z1t 4 місяці тому +8

      If you're still on this project then all the best. I'd kill for a good tactics game

    • @myrmidon4464
      @myrmidon4464 4 місяці тому +3

      I'm with you there brother. No new FFT, no new Tactics Ogre, no new Shining Force. My friends and I have just started the same journey a few weeks ago.

    • @Xeon985
      @Xeon985 2 місяці тому +1

      Just seen this now and yeah ... i wanna add Advance wars and Rebelstar tactical command to that 😂

    • @VictorYamaykin
      @VictorYamaykin Місяць тому

      Sword of Convallaria is pretty good but FFT is still the best

    • @leothelion5035
      @leothelion5035 3 дні тому

      Me and you brother, me and you... that's my dream come true

  • @tenesenka
    @tenesenka Рік тому +3

    Exactly what I was looking for and exactly what Godot needs. Beautiful explanations and break downs.

  • @JayFolipurba
    @JayFolipurba Рік тому +1

    I just realised I'm trying to make a tactics game. This helps tremendously, if only for that realisation. This came at exactly the right time, please more on this of you have it

  • @moonstar_connor
    @moonstar_connor Рік тому +1

    Such an awesome deep dive! Love to hear how you're thinking about scene organization and coding patterns

  • @DiSyllar25
    @DiSyllar25 Рік тому +2

    You are one of the most underrated UA-camrs I watch. Your explanations are very concise and to the point, I always learn something from these.

  • @BoxiestLlama
    @BoxiestLlama Рік тому +2

    I'd love to see more about the Action system, it seems really modular and versatile! Excellent videos, love your content.

  • @southcoastgames1623
    @southcoastgames1623 Рік тому

    Great video! Extremely helpful. Looking to create a similar game, and your insight into the game design rather than going into a deep dive into code is a great approach. Thank you!!!

  • @tNag556
    @tNag556 Рік тому +2

    I wanted to make a tactics toy project during summer, this will be super helpful!

  • @adamsicora1200
    @adamsicora1200 Рік тому

    Thank you so much for explaining your node tree the way you did. Soooo helpful.

  • @Baanchou
    @Baanchou Рік тому

    This is perfect! I will be following this closely. I've started on my own tactics game and was wrestling with how to compartmentalize code and your layout makes so much sense.

  • @andrewroby1130
    @andrewroby1130 Рік тому

    Game design ~ node hierarchy 🤯
    What a great insight, thank you!

  • @leonardoraele
    @leonardoraele Рік тому

    Thank you so much for sharing your code architecture

  • @KevinYoung93
    @KevinYoung93 Рік тому +1

    such a great technical dive! ive been in the process of iterating on my own tactics game in godot, and when i eventually finish it i hope to rethink my entire approach and create a basic framework similarly to what you are doing

  • @jackkraus6948
    @jackkraus6948 Рік тому +2

    This video has made me pretty interested in trying out Godot over my current engine of choice: GameMaker. The ability to segment similarly functioned code seems to be more robust in Godot's node system compared to simple class inheritance and scripts in GameMaker. The parameter specification within the editor also looks easier to use, and I know 2d lighting and 3d development is out of the box with Godot vs. GameMaker where it requires much more complicated implementation

  • @NocturnalPenguin
    @NocturnalPenguin Рік тому

    Excellent video! Subscribed!

  • @TakunHiwatari
    @TakunHiwatari Рік тому +5

    As someone who is also trying to make a tactics game in Godot 4, I'd love to see more of this.
    Also, if you wouldn't mind sharing some of the code, that'd be appreciated as well since there's little to no tutorials for this stuff in Godot 4. If not, that's understandable.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +12

      Thanks! I plan on releasing more videos about the game as development progresses and want to to keep a similar structure where I can to help make it more useful for other people.
      As for source code, I probably won't be releasing the code to this project any time soon, but I do want to think on this some as there's been a lot of interest in the nuts and bolts of games like this. Maybe a proper "tutorial" type video + project or something like that...

    • @TakunHiwatari
      @TakunHiwatari Рік тому +5

      @@TheShaggyDev A TRPG focused tutorial would be nice for sure. I've been going through all sorts of random Godot 4 tutorials and open-source code for TRPGs in Godot 3 and trying to mesh it all together.
      It's been quite the experience to say the least lol.

  • @gokusupersaiyan6
    @gokusupersaiyan6 Рік тому +1

    I am very happy about the architecture part of your dev log. Specifically about dependency injection and the services @2:21. Would you be interested in making an in-depth tutorials about this topic?
    I once did a card game where I wanted to have lots of animations and execute code after an animation is complete (each card had effects and such). I had a UI component that handled animations, CardSuit components which represented the cards, a game state object that held the state of the game and a controller to tie everything together. The controller would consume the input events from the UI, modify the game state, request animations to be played through the ui controller and wait for said animations to finish and so on.
    I think these kinds of architectures are pretty scarse. It would help out indie game devs a lot!
    Great video, I really enjoyed watching it and I learned a few things!

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      Thanks for watching! And good suggestions on topics. I agree that it can be hard to find such information, which is partially why I try to structure my devlogs the way I do (though I'm still figuring that piece out a bit). Definitely the kind of topics I like to dive into.
      Your card game architecture sounds great! Something I'd like to see myself, haha.

    • @gokusupersaiyan6
      @gokusupersaiyan6 Рік тому

      @@TheShaggyDev I will try to do a tutorial and start my own channel 🤣 Been planning it for a while but was scared to start.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      @@gokusupersaiyan6 Just give it a go! You won't really know what you're doing / want to do until you start anyways (I would place myself firmly in the "still figuring it out stage") and Godot needs more content like what you described!

  • @matthewroloff5095
    @matthewroloff5095 Рік тому +1

    Great Video as always! I am most interested in the action overrides mechanic. There are a lot of Pull Requests related to Godot 4's AnimationPlayer and AnimationTree but until more features are implemented this seems like a great way to handle more complex time based events.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +2

      Thank you! Yeah, my hope is I don't have to use overrides too often, but they really come in handy when I need them as modifying AnimationPlayer animations through code is a SLOG.

  • @raichirup
    @raichirup Рік тому +3

    wow so cool
    thanks for the tips and experiences. I've been trying to make a game inspired in the gameplay of darkest dungeon 1 and I always reach a point in which complexity is a mess, signals flying everywhere.
    in all honesty it's quite the balancing act to not use too many global objects or event buses nor too few that makes everything coupled together.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +3

      For real. I've been developing this structure over the course of a few games and every time I update it I find something else that didn't quite work how I would've liked for it to originally. It's definitely a tricky balance to get right and I feel like this genre doesn't have a lot of good resource available so I'm trying to help expand the knowledge base a bit, even if it's not always 100% right off the bat.

    • @tNag556
      @tNag556 Рік тому +4

      @@TheShaggyDev preach it, I have "some" time here and there to attend to my hobby of game dev, I enjoy Godot very much, but once I did the basic tutorial games (asteroirds, snake, flappy, Mario...) and wanted to do something I enjoyed, the lack of material was baffling. Everywhere I look is either ARPG (zeldalikes) or 2d platformers. I wanted to do something jrpg-lite style, maybe even turn based strategy. I was able to do some stuff on my own, but I would feel much more secure if I saw something with experience tackle the genre and explain some stuff. I have a list of concepts I'd like to see explained, maybe I can share it with you, and you can either tackle them or ignore them, that's okey. haha.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +2

      @@tNag556 Ha sure! I definitely wouldn't call myself experienced in this area but I'd at least be curious to see what's on your mind and if there's anything that would make sense for me to cover at some point. I'm always on the lookout for new topic ideas or even just what people consider "the important bits" of a subject.

    • @raichirup
      @raichirup Рік тому +1

      @@TheShaggyDev
      Either way thanks for the videos, all experiences are good to learn from.

  • @faimenDev
    @faimenDev Рік тому

    Awesome job!
    I'm currently working on tactics for a unity game as well. It was interesting to see your architecture as an example

  • @Trading_Conquest
    @Trading_Conquest 4 місяці тому

    Brruh your game looks so good

  • @breadman7733
    @breadman7733 Рік тому

    Hell yea dude !! Love this

  • @adoniscanada4073
    @adoniscanada4073 Рік тому

    great stuff 👍

  • @raidev_
    @raidev_ Рік тому +1

    Im not making a tactics game but a turn based rpg, and this still pretty useful information for that since the general systems are the same

  • @dantescanline
    @dantescanline Рік тому +3

    hey this is super cool! i have tried making my own mini tactics engine a few times and it always gets 'messy' like you say without services.

  • @TheEntireUniverse
    @TheEntireUniverse Рік тому +1

    I would really love a deep-dive into what Godot 4 changes to resources, typing, etc. you make use of

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      Honestly, the basics like better editor exports have probably made the biggest difference to my workflow. Being able to define custom resources and data types, export, nest, and edit them in the editor, throwing them into arrays, and stuff like that. The main problem I ran into with Godot 3 was defining custom data constraints and then trying to enforce those constraints via exports. For instance, I forget what the exact issue was, but there was a trick to making that nested Resources save correctly.

    • @TheEntireUniverse
      @TheEntireUniverse Рік тому

      @@TheShaggyDev As I said: it would be very interesting to get a detailed breakdown on how all those work in Godot 4. Tons of beginner godot tutorials out there, not so many go into nuts and bolts of those sorts of features

  • @alejmc
    @alejmc Рік тому +1

    Fell in love with the sci-fi tiny pixel art one… would be great if one day you could tell us more about how easy/hard it is for you to do all of this? Is it part time? As a hobby? Does it come naturally?
    Cheers and thanks for this video

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      Good suggestion! Could be worth talking about fully at some point, but it's all just a part-time hobby for me. An hour here and there kind of thing, and just trying to keep my scope manageable 🙃
      And glad you like the sci-fi one! I'm partial to it as well, but it just wasn't quite ready yet when I was picking my next project to do so went with the other one. Definitely plan on coming back to it though...

    • @alejmc
      @alejmc Рік тому +1

      @@TheShaggyDev nice! will be lurking around here for any updates on any of that at whatever pace it happens to be.
      These videos have been motivating too to find the energies to do any sort of exploration after a energy zapping day of work.
      Cheers and good luck.

  • @ZaranTalaz
    @ZaranTalaz Рік тому

    I wanted to echo what others said about how good this video is. Also kudos on writing a text version.
    I'd be interested in learning more about how you're handling your service nodes. My impression is that you have an autoload that you register your service nodes with, and everything else accesses the service nodes through the autoload. What are the benefits of that vs making the service nodes themselves autoloads?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      It's mostly as a lazy way to manage cleanup. The services aren't 100% stateless, so instantiating a fresh one with each battle is an easy way to make sure everything's as it should be.

  • @leavemydogalone
    @leavemydogalone Рік тому

    I’d love a breakdown of the combat service and how it interacts with everything else

  • @TomMorledge-y2n
    @TomMorledge-y2n Рік тому +2

    This is a great video and really helpful towards understanding a better way to structure a Godot project.
    It raised a question for me though, if you have services which do all the "messy" stuff, if they are not autoloaded than how are you referencing them? Surely then you have nodes (like a Unit) which has to have a reference to any service it needs to talk to and if you were to decide to move/rename that service you would have to find and update all the references to it. Is there a reason you wouldn't have all (most) services as autoloaders rather than $path/to/the/service?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +2

      Good question! I kind of glossed over that piece when writing the script. To get around the fragility of node paths, I experiment with two different techniques. The first was completely avoiding autoloads and doing a chain of dependency injection, where Level gave a reference to Combatants, which gave to Groups and so on, but that really just wasn't workable even at the modest scale the game is currently at. So instead I have a ServiceLocator autoload that contains a reference to each service that any interested party can use to connect to. When a level starts, the top "Level" node sets the appropriate references in the locator, and then each node just calls ServiceLocator.some_service.some_function()

  • @mrussogamedev
    @mrussogamedev 6 місяців тому +1

    awesome, thanks! Any directions for the range highlight that "shapes" around the walls?

    • @TheShaggyDev
      @TheShaggyDev  6 місяців тому +1

      No special sauce there. I grab every potential tile for an action, filter it as appropriate (line of sight checks, how many tiles to move to it once obstacles are accounted for, etc) and then use an autotiling layer to display the results of whatever is left.

    • @mrussogamedev
      @mrussogamedev 6 місяців тому +1

      @@TheShaggyDev never thought about autotiling. Brilliant, thanks!

  • @Tosek2010
    @Tosek2010 Рік тому +3

    Awesome. Have you ever thought about putting all this together in a complete tutorial series? Maybe on youtube or Udemy?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +2

      Yeah I probably will at some point as there does seem to be a desire for something more in-depth than just a devlog-type video. Maybe after this game comes out? I still kind of consider all of this to be "in development" so I want to have some time to get it right before trying to sell it as a proper tutorial / complete solution.

  • @sneeky_09
    @sneeky_09 Рік тому +1

    This was really interesting. Do you have any videos breaking down how to use service nodes?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +2

      Afraid not, but the good news is that there's no secret sauce to them. They're just nodes in the application that other nodes get a reference to. How and when to use them becomes a bit trickier, but what I show here is really my thinking behind them: Things that need to get a lot of info from a lot of places and answer a lot of questions from a lot of places.

  • @Zyjin
    @Zyjin Рік тому +3

    Really love the format of explaining the structure of the nodes! It's great to be able to look at it and compare my own structural preferences and utilization to yours! (I hate dynamic typing too, but my experience with C# Godot has been eh).
    Question, I saw that you use custom resources pretty extensively for a good bit of the data in your game, and I don't actually make use of them much, but I do think it's a way to allow certain data to be synced across all locations.
    My question however, would be, how would you deal with things like upgrades? Like let's say your have a unit that individually has been given extra health, or something, how would you only give that specific unit health if you define the units parameters in a custom resource?
    Great video as always, and one that I will definitely be revisiting, kind of interesting and useful even for non-tactics games honestly!

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      Glad you enjoyed it! And great question, as that's something that bit me a little on Elemechs since I didn't quite get it implemented correctly. I do plan to show this a bit more in-depth in a future video, but right now each individual unit has its own copy of a data "definition" that holds its specific stats (Currently that's done as a Resource but really should probably be changed to a RefCounted just to make it a little more lightweight). When a unit is created in the world, it loads its definition and sets up its stats, available actions, etc based on that. And it's a similar thing for monster parts. There's a base definition that says "this part does X and should have these stats at minimum" and then each instance of a part copies this base information to its own private data container and can layer information on top of that, such as upgrades.

    • @Zyjin
      @Zyjin Рік тому +2

      ​@@TheShaggyDev Gotcha, that's helpful, so basically just storing a private set of references to the custom resource parameters that need to change, makes sense.
      I presume a similar thing would need to be done for any UI showing statistics etc too? Not sure if you had resolved that issue yet, but just something I was curious about.
      And same here, I put together a game recently and I sort of just ran out of time and never quite got it implemented successfully, hence my curiosity

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      @@Zyjin The UI so far, for what little I currently have, is more dynamic. Anything unit specific holds a reference to that unit and can watch and update accordingly. So in the Kaiju example, since it does at least have a functioning health bar, an instance of the monster card is created for each monster and given a reference to that monster so it can watch for stat-related signals as appropriate.

    • @Zyjin
      @Zyjin Рік тому +1

      @@TheShaggyDev gotcha, I was utilizing the same shared custom resource across UI and individuals, and I think that was my issue there.
      Thanks for the notes, very helpful, keep doing what you do!

  • @alexline4131
    @alexline4131 Рік тому +1

    I'm trying to build a board game, there's a lot of overlap here. Thank you.

  • @Barldon
    @Barldon Рік тому +1

    I'd love to know more about your use of Services. How does a node request data from a service and how does the service get that data? Is this done by a signal or do you have to pass a reference to the service to any object that needs it? Or does the level script do that? Does the node assume that there is always a service in the scene it's placed in?
    Keep up the super informative videos!

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      I've played around with a few different styles of access. Originally, I manually gave each node access that needed it via dependency injection moving down the tree. So the level would give combatants access, which would give the combatant groups access, which would give units access, and so on. The problem with this approach is it became a pain to get a reference to everything that needed it (as that chain of injection can go a fair bit deeper at the deepest layers of the game) and it felt like a lot of bulky code just to pass some references around.
      So I ended up going with a service locator pattern and creating an Autoload that holds a reference to each service that nodes can use to access directly. When the level fires up, the top-level node registers services with this Autoload, then everyone can access what they need by something like "ServicesLocator.navigation_service.my_func(...)".
      This does mean that there's an assumption that the services are present in every level, but based off of my plan for the game I really can't think of any reason why they wouldn't be. It also means that references should be cleared when leaving the level (since the nodes won't exist anymore) and that I have to be mindful about not calling any functions needing services when units appear elsewhere, like on the home screen, but again I don't see that as too much of an issue.
      For registering data, I have a few exports on each service I use to hook up the nodes they care about and then pull data from when needed. Ex: Combat Service has a reference to the combatant groups and registers each on startup so it can then ask them for data about where each unit is when needed.

    • @Barldon
      @Barldon Рік тому +1

      ​@@TheShaggyDev I see, using an autoload probably is the most elegant solution so that makes sense! I guess even in the situation that a service wasn't needed in one place for whatever reason, the node could just check with the locator if it exists and block the functionality that needs it if it doesn't (Though I suppose having a service that wasn't needed in every level would sort of go against the idea of it being a service in the first place). Thanks for the detailed response.

  • @papydur
    @papydur Рік тому +1

    Really insightful video! I was wondering if you make the services nodes global to make them easier to access, or do all the nodes that require for example the navigation service have a reference to it?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      Yep, I use a global Service Locator that objects can use to look up the service they need. Had originally tried keeping references local but it was becoming a bit of a pain to manage.

  • @andynoelker2874
    @andynoelker2874 Рік тому +1

    This is incredible, thank you for making this! I'm trying to make a tactics game and this has given me some great ideas! I know a lot of people would love a tutorial series, but if you wanted to make something smaller in scope, I would love to hear more about how your Navigation Service works with the rest of the game. Does it store a reference to the tilemap that is on the current level? Does it need to know what units, obstacles, etc. are on the tilemap at all times? And how do your other entities, like units, call functionality on the Nav Service like pathfinding? Are you using dependency injection to pass down a reference to children nodes and having a chain of each parent passing to the child? Or is there some other way you can reference the Nav Service without having to pass it down from parent to child in a chain? In my own project, I'm passing a reference to the tilemap to basically everything and this is not scaling well, so very curious to hear how you've done it here!

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      That's a good suggestion. I may do a video on my services in the future as there's been a number of people wanting to learn more about how that's set up. (Any sort of tutorial would have to come after this project wraps up!)
      I had started with a dependency injection chain, but also found it to be a bit unwieldy so I ripped that out and went with a service locator pattern instead. Now, there's a ServiceLocator autoload that gets a reference to all services when the level starts and can then be accessed through the global namespace. So any object can just call "ServiceLocator.navigation_service.some_function()".
      I've found this to be a lot more workable since there's a lot of places in the application that may want to know about pathfinding.
      As for what's in the navigation service, there's two layers. The lower layer is an extension of Godot's AStarGrid2D class, which adds some helper functions, like pathfinding with some extra checks, and applies some default configuration options, like what heuristic to use. Then there's the service node itself, which adds functions for navigating, like finding adjacent open tiles to a cell, checking lines of sight, and storing unit positions, which are updated after every action and can turned on or off for pathfinding purposes depending on what kind of check needs to be done.
      At this time, it actually doesn't store the tilemap reference itself because I don't need that after initializing everything. On level start, it gets passed the map structure, parses that into AStarGrid2D, and then forgets about the tilemap itself. For any sort of dynamic level modification, like destructible objects, the current plan is that would live outside of the tilemap, though I can change that in the future if needed.

    • @andynoelker2874
      @andynoelker2874 Рік тому

      @@TheShaggyDev That makes a lot of sense! Thank you! And I totally understand the need to focus on your own projects before figuring out more tutorials. Looking forward to the future videos!

  • @Aaronitouse
    @Aaronitouse 9 місяців тому +1

    Great video! Is there any chance we could get a code template or project for this, would be super helpful.

    • @TheShaggyDev
      @TheShaggyDev  9 місяців тому +2

      In the immediate future, no, but I do understand there's an interest in starter templates so it's something I'm considering for the future.

  • @longuemire748
    @longuemire748 Рік тому

    Thank you for the demonstration.
    Excuse me, but in 11:30 do you use a shader to create the movement zone?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      Nope, that's just a tilemap sitting on top of the regular map.

  • @kloa4219
    @kloa4219 Рік тому +1

    it's amazing that you made specific tools for it, i really want to be at that level. do you have any tips?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +2

      I'm probably not the best person to ask since I don't make my own tools that often, but the plugin I showed was straightforward enough to make since you can use built-in Godot tools, which should make the process for most people a bit easier. I just started here in the docs and built it up from there, little by little: docs.godotengine.org/en/stable/tutorials/plugins/editor/making_plugins.html
      I can also suggest you think about how you're going to save/load data, both to and from the tool and in your game, as that's all on you now and if you change that format too much you may lose or have to go back and fix older data.

  • @dziwic
    @dziwic 5 місяців тому

    I would really love I you could say something about that x-com style ground highlight you did in your games. I'm uding AStar Grid and have collisions down, but struggle with that. That and textured lines, they work unitl I need to swap a texture.

    • @TheShaggyDev
      @TheShaggyDev  5 місяців тому

      For that piece, I have a tilemap with a auto-tiling / terrain set up so I just need to feed it all the tiles for an attack or movement and it displays correctly. As for figuring out *which* tiles to highlight, I just brute force it and check every potential tile within range. Not exactly elegant, but it's simple and works.

    • @dziwic
      @dziwic 5 місяців тому

      @@TheShaggyDev I went for similar brute force approach highlighting terrain just few days ago and seems to be working. But still stumped at the arrow thingie - wwould it be possible for you to make a video about this or maybe share the code snippet just for this bit on github or somewhere?

    • @TheShaggyDev
      @TheShaggyDev  5 місяців тому

      @@dziwic Sure, but that's fairly simple. I have a Line2D node and just feed it the points that my pathfinding system prints out when I find a path from the player to the node they're highlighting. Doesn't let you do much in the way of styling beyond the simple colors shown here, but that's all I needed.

    • @dziwic
      @dziwic 5 місяців тому

      @@TheShaggyDev Ah, for some reason I thought you had textured lines. Those I'm struggling with, corners prove to be a problem.
      The drawn ones I got down, thanks ;)

  • @cloudliusihui
    @cloudliusihui Рік тому

    When can we play your game? Looking forward to it!

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      Thanks! Probably still some time off. Taking a bit to get the art together for it.

  • @ILiveintheZone
    @ILiveintheZone Рік тому

    Bro the second game ❤ my boy made Quazimorph 🎉😂

  • @Thurasiz
    @Thurasiz Рік тому +1

    Not an overly important question at all, but since i'm right now trying to understand them: Have you considered hexagonal grids for those games, and if yes what were the main reasons you decided to not go with them ?
    For context i'm playing around on what at this stage is more a concept than a prototype. A turn based transport business game in space, mostly ui driven but with a grid based map where you can plan your ships routes and watch them fly around each time you hit next turn. And i'm really trying to understand hex grids now because i feel like they'd make the map part of the game feel slightly more modern (the main inspiration for that project is a 1994 game that probably didn't make waves internationally even, and that used what i'd call points of interest on a simple drawn map)

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      Great question! Generally speaking, I subscribe to the paradigm that hex grids are great for natural or open spaces, or perhaps large scale maps, while square grids are great for man-made spaces and scales. I anticipate both of these projects would largely take place in built spaces, so I kind of just naturally went in that direction, though I do like hex grids and think there is some interesting things they can offer.
      You also may have noticed that I treat diagonal directions the same as cardinal when resolving movement or attacks (so there's 8 valid places you can be to do an attack that requires the target be adjacent to you), just to spice up the square grid a bit and make movement feel more natural and, dare I say, hex-like.
      For the sci-fi game specifically, there's also the issue that, in my experience, hex grids can be difficult to get right with pixel at since they inherently don't align to low resolution pixel grids well. You *can* make it work, but since this game would largely, or entirely, take place indoors, I think square may be the better call anyways.

    • @Thurasiz
      @Thurasiz Рік тому +1

      @@TheShaggyDev I admit i never even thought about the whole indoors aspect, Maybe that is the reason why i felt hex grids more fitting in my project. You don't get space that's much more open than space itself after all^^
      Hexes and Pixel art is another headache for me right now. We'll see if i can get them right in a pixel art style, or if i end using a different art style for them, and only make the transporters themselves in pixel art.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      @@Thurasiz Yeah I got the indoor vs outdoor idea from this awesome talk some time back and it really makes sense: ua-cam.com/video/KM6ZTAcnEkE/v-deo.html
      Good luck on the pixel art with hexes! I never could come up with a satisfying solution for it, though I know it has to exist. If you figure it out, let me know!

    • @Thurasiz
      @Thurasiz Рік тому +1

      @@TheShaggyDev For now i found a script that generates polygons in aseprite, and by changing some of the options i got a 32x32 hexagon that works nicely enough with the godot tilemap editor i think.
      It looks best with double or triple wide borders, thicker on the left side and thinner on the right. The slightly thicker border is not much of a problem, since i plan to use changing colors on those borders to signal different information to the player (things like, what places do they have cargo for, what places potential transports from the current planned stop would go to etc.)
      The fact it's shifted 1 pixel to the left will probably make some problems at a point, or i might get lucky. I'm basicly flying blind here, alternating between reading up on the essential math on hex grids, tweaking the one tile i'll use as base for every other, and trying to keep myself from adding more and more features to my plan because if there is one thing i learned by now, it's how feature creep kills projects^^

  • @sunny99179
    @sunny99179 Рік тому

    It is hard to find an guide of tactics style to engines.. 😮😮🎉🎉🎉

  • @Kenbomp
    @Kenbomp Рік тому +2

    This is good but a lot of it glosses over these pretty meaty concepts. But you can only do so much on a video. But very well organized.good to study over

  • @kantallive
    @kantallive Рік тому

    I like those graphics

  • @Rankao
    @Rankao Рік тому

    I'm curious with your navigation do you use the navigation layer on the TileMap, or load it into your own AStar and build out the paths out of the world?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      Own Astar layer. In Godot 4, that's the AStarGrid2D class, which is easy enough to populate from a tilemap. In Godot 3 I used the regular AStar2D class, which is a bit more involved to get set up.

  • @nicholasmaniccia1005
    @nicholasmaniccia1005 Рік тому

    Very cool

  • @adulab5429
    @adulab5429 Рік тому

    Great breakdown!!

  • @sceppzXD
    @sceppzXD 8 днів тому

    can anyone recommend a course or tutorial to actialy making such a game because i am new and cant find a tutorial or udemy course to making a tactics game from ground up

  • @justSomeOthaGuy
    @justSomeOthaGuy Рік тому +1

    do you plan on making a tutorial for these kinds of game, I've been looking for one built for godot 4 because the godot 3 tutorial from gdquest has been really confusing and the code isn't explained very well, either that or I'm just stupid

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      Maybe at some point, after this game is out. I'm a bit selective with my tutorials and would need to be a bit more comfortable in the nitty gritty before I'd consider making one. In the meantime, I do plan to cover the game's development at more or less this video's level - technical enough that more advanced users can jump in with the info given without diving so deep into the weeds as to slow things to a crawl.

    • @justSomeOthaGuy
      @justSomeOthaGuy Рік тому

      @@TheShaggyDev thanks for answering my question

  • @thelegacyofgaming2928
    @thelegacyofgaming2928 Рік тому +1

    I need someone to officially release an engine like this. I've wanted to make these kinds of games since playing FFTA as a kid.

  • @pa_ho
    @pa_ho 11 місяців тому

    How did you achieve the tile hover highlighting in 3D, i tried to do this effect with 3D GridMaps too, but i don't really know how to access a single Mesh from the GridMap after ray casting from the mouse button and getting the ray cast position? :/

    • @TheShaggyDev
      @TheShaggyDev  11 місяців тому

      For Elemechs, I just used a quad with a texture on it and snapped it to the grid positions as the mouse moved around. It's probably possible to do in GridMaps as well, just kept it simpler.

    • @pa_ho
      @pa_ho 11 місяців тому +1

      ​@@TheShaggyDev Sounds good, im a little bit stuck right now, so i will look into it, thank you for the help. Keep up the good work ! :)

  • @ivanmonge384
    @ivanmonge384 Рік тому

    I’m kinda beginner here in Godot. But is there a tutorial where this is done and sort of explained line by line. I’ve been looking to make an Advanced Wars clone in the future but I barely see any tutorials in the genre. thanks.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      The closest I've seen is one of the GDQuest courses talks about a JRPG-style turn-based combat system. Would still have to figure out all the spatial stuff, but might at least get you going on the general game flow.

  • @BalugaLugaLuga
    @BalugaLugaLuga Рік тому

    Will you be selling a Simple demo like this on the new Godot asset store.. If they ever get one?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      More likely I'd just release something open source at some point, but if people want to give me money for it I'd certainly consider the asset store as one potential way of doing it

    • @BalugaLugaLuga
      @BalugaLugaLuga Рік тому

      I definitely would buy on a Godot asset store. I have spent/bought a lot of assets on unity. Helps the developer's make more and new content.. For me to figure out a new way of making games is always great. A good give and take.. Especially since Godot has almost no books on Azon to learn from. and any documentation is very lack luster at best..

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      @@BalugaLugaLuga That makes sense, I'll keep that in mind if an asset store ever comes!

  • @bbugarschi
    @bbugarschi Рік тому

    is the art for the scifi game made by you or is it an asset pack?

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      Made by me, but using proportions from some Oryx assets to help get everything the right general shape.

  • @maxwelladragonslayer346
    @maxwelladragonslayer346 Рік тому

    do you have a discord? I am working on a similar concept with hex grid.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      I try not to make it public to help avoid bots and other nonsense. Message me on Twitter or at the email on the channel first?

  • @SiisKolkytEuroo
    @SiisKolkytEuroo Рік тому

    What's the one at 0:00

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      XCom 2!

    • @SiisKolkytEuroo
      @SiisKolkytEuroo Рік тому +1

      @@TheShaggyDev Thanks. it's the best looking game in the video but it's not even made in Godot, I feel kind of clickbaited now :(

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      @@SiisKolkytEuroo Apologies! Wasn't my intent. I show a lot of games that aren't made in Godot for general footage on this channel so didn't even cross my mind.

    • @322ss
      @322ss Рік тому +1

      @@TheShaggyDev IMHO / too many indie dev vloggers show triple A or popular indie games while explaining their idea or concept in their videos - it annoys me too - I no longer have time to browse all the games available in the world, and then I see a vlog that starts with something nice that isn't actually created by the vlog author (turns out later) - it would be fair to process borrowed material either by framing, labeling (add a title when showing a clip) or post processing to make it clear that these clips are NOT your creations. I know indie devs who can create such quality... so one might expect that you start with your own content.

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      @@322ss That's a fair point, and one I hadn't considered. I've been thinking about adding title cards to game clips anyways so I think this is another good reason why I should start doing that. Thanks for the honest and helpful feedback.

  • @f0xshadow521
    @f0xshadow521 Рік тому +1

    Have you considered lve-streaming your sessions? Wouldn't need to have commentary, it'd just be so great to be a fly-on-the-wall

    • @TheShaggyDev
      @TheShaggyDev  Рік тому +1

      Oh that's an interesting idea! I hadn't thought of streaming development but I would definitely be open to it, though I'm a little bit worried it might be a bit boring 😅

    • @matthewroloff5095
      @matthewroloff5095 Рік тому

      @@TheShaggyDev I would love to see this 😄. You are my go to source for applying tried and true game development principles to Godot's latest features and I learn so much from each of your videos. I actually landed a job recently where I am using the Godot engine to simulate real world warehouses to make them more efficient.

  • @will7466
    @will7466 Рік тому

    Great video, wish you would go more indepth with the code. Would really like to see the nuts and bolts of what's going on

  • @MohamedSayedAbdElRaheem
    @MohamedSayedAbdElRaheem Рік тому

    next video please about idle game and mechanisms please

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      I just did one! Though I kind of skipped over the core mechanics since I didn't feel they were that interesting. Is there something in particular you're curious about?

  • @G69G71
    @G69G71 Рік тому

    its something like create a engine for your own game? btw looks interessant!

  • @musicdudejoe263
    @musicdudejoe263 Рік тому

    The noise suppression in your mic really needs fixing. It's small but it's noticeable. Game looks really good tho :)

    • @TheShaggyDev
      @TheShaggyDev  Рік тому

      Thanks for the feedback! I've been meaning to revisit my audio setup and processing chain for some time. May finally look into it. If you're noticing anything in particular, I'm all ears. Otherwise I've got some ideas...

  • @YouReyKarr
    @YouReyKarr Рік тому

    I feel like system is a more idiomatic term for games, service makes me think of microservices...

  • @computercrazies
    @computercrazies Рік тому

    The development community has been sucked into trending words so much they lost sight of what an Engine is. Is it a roguelike because characters can die and open world because you can choose where to walk too? LOLOL

  • @dorianmccarthy7602
    @dorianmccarthy7602 Рік тому

    Downvote was for starting a statement with 'so'. As 'so' is meant as a joiner between a previous comment and the present one.