Tap to unmute

Developing a tactics engine in Godot

  Рет қаралды 186,994

The Shaggy Dev

The Shaggy Dev

Күн бұрын

Пікірлер: 154
@Bitlytic
@Bitlytic Жыл бұрын
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 Жыл бұрын
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 Ай бұрын
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. Жыл бұрын
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 ай бұрын
LOVE seeing your node structure. This is the most helpful kind of video.
@RustoKomuska
@RustoKomuska Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
I like the depth of your explanation on node organization. Will come back to study this video later.
@LiveGameDriveChannel
@LiveGameDriveChannel Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@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 Жыл бұрын
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 Жыл бұрын
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 ай бұрын
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 ай бұрын
If you're still on this project then all the best. I'd kill for a good tactics game
@myrmidon4464
@myrmidon4464 4 ай бұрын
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 ай бұрын
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 Жыл бұрын
Exactly what I was looking for and exactly what Godot needs. Beautiful explanations and break downs.
@JayFolipurba
@JayFolipurba Жыл бұрын
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 Жыл бұрын
Such an awesome deep dive! Love to hear how you're thinking about scene organization and coding patterns
@DiSyllar25
@DiSyllar25 Жыл бұрын
You are one of the most underrated KZbinrs I watch. Your explanations are very concise and to the point, I always learn something from these.
@BoxiestLlama
@BoxiestLlama Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@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 Жыл бұрын
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 Жыл бұрын
@@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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@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 Жыл бұрын
@@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 Жыл бұрын
@@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
@TheShaggyDev
@TheShaggyDev 4 ай бұрын
Thank you!
@breadman7733
@breadman7733 Жыл бұрын
Hell yea dude !! Love this
@adoniscanada4073
@adoniscanada4073 Жыл бұрын
great stuff 👍
@raidev_
@raidev_ Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
I would really love a deep-dive into what Godot 4 changes to resources, typing, etc. you make use of
@TheShaggyDev
@TheShaggyDev Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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()
@Tosek2010
@Tosek2010 Жыл бұрын
Awesome. Have you ever thought about putting all this together in a complete tutorial series? Maybe on youtube or Udemy?
@TheShaggyDev
@TheShaggyDev Жыл бұрын
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.
@mrussogamedev
@mrussogamedev 6 ай бұрын
awesome, thanks! Any directions for the range highlight that "shapes" around the walls?
@TheShaggyDev
@TheShaggyDev 6 ай бұрын
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 ай бұрын
@@TheShaggyDev never thought about autotiling. Brilliant, thanks!
@sneeky_09
@sneeky_09 Жыл бұрын
This was really interesting. Do you have any videos breaking down how to use service nodes?
@TheShaggyDev
@TheShaggyDev Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
​@@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 Жыл бұрын
@@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 Жыл бұрын
@@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 Жыл бұрын
I'm trying to build a board game, there's a lot of overlap here. Thank you.
@Barldon
@Barldon Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
​@@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 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
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 ай бұрын
Great video! Is there any chance we could get a code template or project for this, would be super helpful.
@TheShaggyDev
@TheShaggyDev 9 ай бұрын
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 Жыл бұрын
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 Жыл бұрын
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 ;)
@ILiveintheZone
@ILiveintheZone Жыл бұрын
Bro the second game ❤ my boy made Quazimorph 🎉😂
@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.
@Thurasiz
@Thurasiz Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@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 Жыл бұрын
@@Thurasiz Yeah I got the indoor vs outdoor idea from this awesome talk some time back and it really makes sense: kzbin.info/www/bejne/gX6Zi4d3mNN4oac 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 Жыл бұрын
@@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 Жыл бұрын
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
@TheShaggyDev
@TheShaggyDev Жыл бұрын
Thank you!
@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 Жыл бұрын
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 7 күн бұрын
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
@thelegacyofgaming2928
@thelegacyofgaming2928 Жыл бұрын
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.
@justSomeOthaGuy
@justSomeOthaGuy Жыл бұрын
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
@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 ай бұрын
​@@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 Жыл бұрын
XCom 2!
@SiisKolkytEuroo
@SiisKolkytEuroo Жыл бұрын
@@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 Жыл бұрын
@@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 Жыл бұрын
@@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 Жыл бұрын
@@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 Жыл бұрын
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 Жыл бұрын
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.
@raidev_
@raidev_ Жыл бұрын
🤓
Programming a tactical strategy game in Godot 4
14:50
The Shaggy Dev
Рет қаралды 30 М.
How to make a tactics game in only two weeks
19:00
The Shaggy Dev
Рет қаралды 86 М.
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН
小丑教训坏蛋 #小丑 #天使 #shorts
00:49
好人小丑
Рет қаралды 54 МЛН
СИНИЙ ИНЕЙ УЖЕ ВЫШЕЛ!❄️
01:01
DO$HIK
Рет қаралды 3,3 МЛН
Optimizing my Game so it Runs on a Potato
19:02
Blargis
Рет қаралды 718 М.
the godot game development tutorials you need to watch
6:07
Deeteeee
Рет қаралды 16 М.
Giving Personality to Procedural Animations using Math
15:30
t3ssel8r
Рет қаралды 2,7 МЛН
How Do You Improve Turn Based Combat?
17:43
Design Doc
Рет қаралды 812 М.
Godot 4 - Tiled Dungeon Environment From Scratch
26:24
DevLogLogan
Рет қаралды 451 М.
We made Vampire Survivors BUT in 10 Lines of Code
7:08
PlayWithFurcifer
Рет қаралды 1 МЛН
3 DEVS Make a Real-time strategy game in UNITY, UNREAL & GODOT!
15:37
Blackthornprod
Рет қаралды 189 М.
The Problem With Procedural Generation
17:57
Acerola
Рет қаралды 306 М.
choosing a game engine is easy, actually
15:08
samyam
Рет қаралды 662 М.
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН