Godot Tutorial - Isometric Autotiles
12:10
Пікірлер
@SpecialSoldier109
@SpecialSoldier109 Күн бұрын
nice tutorial!
@gk98s
@gk98s 11 күн бұрын
in godot 4 they have introduced unreliable_ordered. Would removing the timestamp and just using unreliable ordered save bandwidth and still do the job? Also thank you for this amazing tutorial series
@GameDevelopmentCenter
@GameDevelopmentCenter 11 күн бұрын
That would get real janky I'm afraid. Could test it, but I wouldn't use it personally.
@gk98s
@gk98s 11 күн бұрын
​@@GameDevelopmentCenter thank you, I will stick to using just unreliable + timestamps then.
@mplay1203
@mplay1203 12 күн бұрын
Godot 4.3 i need to connect like this: for i in get_tree().get_nodes_in_group("build_buttons"): i.pressed.connect(initiate_build_mode.bind(i.name)) Otherwise I get an error: " Invalid type in function 'connect' in base 'Signal'. Cannot convert argument 1 from Nil to Callable.
@fernandomarturet2486
@fernandomarturet2486 18 күн бұрын
bro I don't think you understand how much of an absolute gangster you are, thank you so much for these videos. If my game takes off I will be donating big time!
@GameDevelopmentCenter
@GameDevelopmentCenter 17 күн бұрын
I have heard a lot of the years, but gangster is a first, hehehe. Glad you're liking the videos :)
@Corie3269
@Corie3269 29 күн бұрын
Your tutorial is extremely helpful until this very day. Thank you very much. The way you explain is also very good!
@GameDevelopmentCenter
@GameDevelopmentCenter 29 күн бұрын
Thanks :)
@zonatradingAcademy
@zonatradingAcademy Ай бұрын
podrias colocar traduccion al video
@Piszczek_
@Piszczek_ Ай бұрын
Great tutorial! Wouldn't it be better to use dictionary to store and get player nodes? Was it used just for simplicity, or is there other reason?
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
Why would it be better?
@Piszczek_
@Piszczek_ Ай бұрын
@@GameDevelopmentCenter It seems to be faster, isn't it?
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
@@Piszczek_ That's not how this work. You can't come up with an alternative and ask me to test if you are right. If you believe so, test it. This tutorial doesn't say 'this is the way', there is rarely one way that is right in gamedev.
@SafriteSincere
@SafriteSincere Ай бұрын
I was having some problems with the code on Godot 4.2.2. I'm a complete beginner so proceed with your own caution. I hope these lines of code are helpful: new_enemy.connect("base_damage", on_base_damage) if progress_*ratio* == 1.0: #progress is new offset and progress is the pixel amount when ratio goes from 0 to 1. I was getting error because signal and var were the same: base_damage. So I fixed it like this. Maybe you could add the properties to the top on the signal: base_damage(damage) but I don't know about it? delete: var base_damage = 21 change: emit_signal("base_damage", base_damage) to -> emit_signal("base_damage", 21) I was getting huge delay from end of game to MainMenu, so I added: if base_health <= 21: preload("res://Scenes/UIScenes/MainMenu.tscn") (before the line) if base_health <= 0: game_finished.emit("game_finished") Other peoples comments were also really helpful. Thanks for the awesome and easy to follow guide! Because I faced so many bugs and errors, I learned tremendously. Luckily I didn't give up even though at times, it looked like there was no hope. Some problems at the beginning took like hours to figure out because everything was new, now at the end I fixed many minor bugs in an hour or two!
@Lezerald
@Lezerald Ай бұрын
For those that get an error on the line "var new_impact = projectile_impact.instance()" the solution for Godot 4 is "var new_impact = projectile_impact.instantiate()". Also if you're getting an error on the line "get_node("KinematicBody2D").queue_free()", change that part of the code to "if kinematic_body: (new line here) kinematic_body.queue_free()" and also add "@onready var kinematic_body = get_node("KinematicBody2D")" beneath the other @onready variables.
@SafriteSincere
@SafriteSincere Ай бұрын
So... I had to change the script for firing to this for it to work on my Godot 4.2.2 or maybe I did some mistake somewhere *await (get_tree().create_timer(GameData.tower_data[type]["rof"]).timeout)* Then I was getting this error -> Member "ready" redefined (original in native class 'Node2D') So I changed all the ready words to ready_ready starting from the "var ready = true" to other places and now it works. If you have tips to make some sense of this, I would appreciate it :)
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
Not really tips, Godot 4 is a major upgrade from Godot 3. A lot of things have changed making this tutorial less relevant as a direct-teaching video, but still useful as somewhat of a guide to a small scoped starter project.
@SafriteSincere
@SafriteSincere Ай бұрын
@@GameDevelopmentCenter Yes, as a complete beginner, I have found this tutorial really useful especially with the help from comments that help people using Godot 4.
@Lezerald
@Lezerald Ай бұрын
@@GameDevelopmentCenter Despite being outdated, I also really like the tutorial and your teaching style. I don't know if it's within your plans, but I'd love to see more tutorials from you. :)
@juandagarcial
@juandagarcial Ай бұрын
I've been working on this tutorial with 4.2.2 and yes, there are a lot of things that have changed a lot (like the tile map, which will receive big changes on 4.3 again, hehe). But it's still a great place to start because it'll help you learn how to navigate the documentation and forums too. Great series!
@SafriteSincere
@SafriteSincere Ай бұрын
PausePlay -> Process -> Mode -> *Always* (since process option doesn't exist on GODOT 4.2.2)
@SafriteSincere
@SafriteSincere Ай бұрын
If you're on newer version of GODOT and it's not working, try these lines of code: GameScene: await (get_tree().create_timer(0.2).timeout) var new_enemy = load("res://Scenes/Enemies/" + i[0] + ".tscn").instantiate() await (get_tree().create_timer(i[1])).timeout And with BlueTank: set_progress(get_progress() + speed * delta ) I just compiled these from comments, props to them. I added the .instantiate() line of code because it was not mentioned under this video comments.
@SafriteSincere
@SafriteSincere Ай бұрын
I have a problem with TowerExclusion tilemap. I'm using GODOT 4.2.2. Here's the code: if map_node.get_node("TowerExclusion").get_cell_source_id(0, current_tile): result: Godot applies the rule for the specific item that has ID:0. I tried to change it to different ID but didn't work -> result: you can place on every tile. Is there a way to make that code apply to all tiles in TowerExclusion. I tried before to create a whole new TowerExclusion tilemap following the instructions again but nothing. Atm, I'm using additional layer where I place that one tile-item so that player cant place turrets on it. I feel I have to fix this now so that it doesn't bring up problems later. Thanks for help!
@SafriteSincere
@SafriteSincere Ай бұрын
yeah, on Part 5 also to not build on top of another turret, the code for me needs to be: map_node.get_node("TowerExclusion").set_cell(0, build_tile, 0, Vector2(1, 0)) instead of ID-value of 5: map_node.get_node("TowerExclusion").set_cell(0, build_tile, 5, Vector2(1, 0)) feels manageable until I figure it out later. Help appreciated. :)
@tebogokolobe9535
@tebogokolobe9535 Ай бұрын
Good luck to everyone who has made it to the end of this video, im about to run this for the first time and already know that I have some debugging to do, the good thing is that I know where everything is and what it does. Thank you GDC
@darkhunter777
@darkhunter777 Ай бұрын
Where DELETE item from bag ? 🤣🤣🤣
@cuchilloc
@cuchilloc Ай бұрын
You can set an alias to your godot executable and then just 3.5: `godot --no-window` or 4+: `godot --headless` for the server, you can do just `godot` in your `client` to fire up more clients that do not interfere with the debugging bus/ports
@DubbleKoi
@DubbleKoi Ай бұрын
Export Sheet Data is blocked by google. Apparently this is not something I can turn off or work around. How do I get the app anyway, or are there any alternatives that do the same thing? This tool looks really useful and google took a fat L with this policy. *edit; de-capitalized the G in google, they don't deserve the respect of having a proper noun
@Gravelezz
@Gravelezz Ай бұрын
under strech, you choose 2D, but in the new version i just downloaded, doesnt have that. should i keep mode as "Disabled" or "Canvas_items" or "viewport"
@sampling666
@sampling666 Ай бұрын
Dont follow this tutorial, if you don't want to end in a complete frustration. THIS IS NOT SUTABLE FOR GODOT 4
@airsoftbeast11234
@airsoftbeast11234 Ай бұрын
I tried this out in Godot 4. Running server and 1 client on my Mac, and another client on a windows machine on same network. I notice that quite quickly the windows machine gets out of sync, after 5 minutes or so, the client clock seems to be a few seconds behind. This forces me to reset the clock to the server time + latency every few seconds. Is this expected when working with clients on separate Operating systems?
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
Not at all, please take note of the new time functions within Godot 4, the standard function no longer goes in milliseconds, but seconds, which can cause time artifacts such as you are experiencing.
@airsoftbeast11234
@airsoftbeast11234 Ай бұрын
@@GameDevelopmentCenterI have already accounted for this by multiplying the system time by 1000
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
@@airsoftbeast11234 That's probably your problem. Multiplying by 1000 doesn't give you the precision of milliseconds. Now your time only knows 1000, 2000, 3000 etc.
@airsoftbeast11234
@airsoftbeast11234 Ай бұрын
@@GameDevelopmentCenter get system your returns with 4 decimal points, so multiplying by 1000 should give me granularity per millisecond no?
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
@@airsoftbeast11234 If you use that time function, yes. My bad for making assumption without seeing anything :)
@PikaBubbles
@PikaBubbles Ай бұрын
Very small tip for anyone using Godot4 because we are using set_position instead of rect_position we don't need the line "range_texture.position = Vector2(32,32)" also we can add the range_texture as a child to the drag_tower saving one line of code in our update_tower_preview function.
@Fin_DevLog
@Fin_DevLog 21 күн бұрын
Can u copy your code and put it here
@alfred.clement
@alfred.clement Ай бұрын
I wonder if this could be done in Godot 4.x
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
Of course, if anything, it is easier. Core 2d features in a game engines aren't going to be removed...
@hoangtruong8072
@hoangtruong8072 Ай бұрын
thanks
@PikaBubbles
@PikaBubbles Ай бұрын
Thank you, even though godot 4.0 is different many of the setting are still there just under a different location or name. I was able to figure it out and prob learned godot a bit better this way.
@beast714mode
@beast714mode Ай бұрын
I am about to start my first attempt at a multiplayer game with a goal of around 60-100 players in any particular map with bullet hell physics and PvP. Is this tutorial still relevant for Godot 4 and this large of a player pool?
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
Should be, even folk from Unity find this tutorial helpful due to the concepts it explains. Godot 4 has some new syntax for multiplayer, but the concepts haven't changed much in the past 15 years.
@juan7829
@juan7829 Ай бұрын
You are the best man! Thank you very much from Argentina!
@MrKondie
@MrKondie 2 ай бұрын
1:35 there was in fact no link above as to how the animations were made :(
@MrKondie
@MrKondie 2 ай бұрын
At 10:47 doesn't it seem like a really bad idea to take the position of the ice spear from the player? I'd assume you want that to spawn in on the server and be relative to the calling peer's position
@GameDevelopmentCenter
@GameDevelopmentCenter 2 ай бұрын
Depends on the pace, when taking the player's suggested position you would have to verify it. When taking the server position you will run into latency artifacts, especially with fast paced games. Personally prefer server side verification of player suggested location.
@MrKondie
@MrKondie Ай бұрын
@@GameDevelopmentCenter Hm, it seems slightly more complicated than the other approach I see recommended/the one I took. Something like "player presses attack -> spawn ice spear locally AND send attack request to server to spawn ice spear". Then you periodically synchronize the full state of all entities. So if the ice spear is slightly off on your local box and hits a player, the server would synchronize back to you the correct ice spear position and the correct player health So rather than having to find some way to validate the position, it was spawned in relative to the player's position on the server and will be correctly synchronized back This is how games like Overwatch do it supposedly, according to their GDC talk kzbin.info/www/bejne/jWTEmph-n96BrNk
@GameDevelopmentCenter
@GameDevelopmentCenter Ай бұрын
@@MrKondie Yeah I know. You don't have to explain how it works. If you prefer that method/if that method suits your project more, go for it :)
@kichi536
@kichi536 2 ай бұрын
guh-dow
@lennartschneider1710
@lennartschneider1710 2 ай бұрын
The top level setting has to be set like this in Godot 4.2.2: get_node("HealthBar").set_as_top_level(true) With an extra underscore.
@SafriteSincere
@SafriteSincere Ай бұрын
Thanks, this works as well as you've said. health_bar.set_as_top_level(true)
@lennartschneider1710
@lennartschneider1710 2 ай бұрын
The merge from scene option was removed, but you can simply copy paste the Range node from the gunT1, click on the missilet1 node and paste it in there
@lennartschneider1710
@lennartschneider1710 2 ай бұрын
In the spawn_enemies function the new_enemy call ends with the .instance() function which is in the current 4.2.2 version .instantiate() var new_enemy = load("res://Scenes/Enemies/"+ i[0]+".tscn").instantiate()
@DakotaMills
@DakotaMills 2 ай бұрын
where is the first video i should be watching? im so lost. i cant find the video that starts the singleplayer part
@GameDevelopmentCenter
@GameDevelopmentCenter 2 ай бұрын
There isn't. Authoritative Multiplayer is incredibly complex. Unless you have 2 years of game dev experience you shouldn't be attempting a dedicated multiplayer project. As such, this advanced tutorial assumes you know how to create such a scene.
@DakotaMills
@DakotaMills 2 ай бұрын
@@GameDevelopmentCenter oh yeah. lost that sub
@SpicyChilii
@SpicyChilii 2 ай бұрын
Great tutorial! Very straightforward and works awesome. Had to make a few adjustments for Godot 4 as things like changing font color and tweens are a bit different but still works perfectly.
@shrippie-4214
@shrippie-4214 2 ай бұрын
(Edit) In Godot 4 its "var node_name = i.get_name().to_int()" thanks GDKing on the Godot Forums
@dumbase17
@dumbase17 2 ай бұрын
Awesome tutorial!
@yuvalkrispin
@yuvalkrispin 2 ай бұрын
Good luck with the game development Thanks for the answer I’m tried of searching how to set up my server, this was the closest thing Waiting for your next video
@SerPodrick
@SerPodrick 2 ай бұрын
ERROR: Invalid operands 'int' and 'String' in operator '==' at: if enemy.state == "Attack" or enemy.state == "Search"
@morganp7238
@morganp7238 3 ай бұрын
Well done. A pity you did not make more vids. You are a good communicator. Thank you.
@postaldude8705
@postaldude8705 3 ай бұрын
For anyone struggling thinking you'll never figure it out I literally had that thought like 3 times for this and the last video took a break and figured it out my problems in less in 10-40 mintues I had some issues because I did a few thnigs my way
@JoshuaTrinh1611
@JoshuaTrinh1611 3 ай бұрын
hi, the inventory is not responsive when the scene size is changed do you know how to fix it
@sampling666
@sampling666 3 ай бұрын
cant finde the Node Position2D in the catual version
@FxTR22
@FxTR22 3 ай бұрын
tutorial outdated, stuff like saving custom tileset does not work anymore, godot says it cant recognise dungeon.tres
@RskSmiles
@RskSmiles 2 ай бұрын
It was made 4 years ago 😂
@drtt1gg3r1
@drtt1gg3r1 3 ай бұрын
when I create the project the application just closes
@morganp7238
@morganp7238 3 ай бұрын
It's a real pity this channel has not been updated for 2 years. You explain everything so well.
@theusbat
@theusbat 3 ай бұрын
Can you share your tileset configuration for each set? I'm trying to add the wall but it has multiple tiles with 256x128 dimension, how can I make one tile as you did?
@morganp7238
@morganp7238 3 ай бұрын
Pity this is not for Godot 4.2.2, particularly the tilesets and tilemaps. Anyway, great effort. Thank you very much. You got a new sub. Good karma to you.
@shrippie-4214
@shrippie-4214 3 ай бұрын
For those using Godot 4 use set_texture_normal() instead of the of set_normal_texture
@biggusdickus6704
@biggusdickus6704 3 ай бұрын
Thanks for the insights sir! Sub'd!
@ceedeeFN88
@ceedeeFN88 3 ай бұрын
How do I make it so I can fall off the map?
@GameDevelopmentCenter
@GameDevelopmentCenter 3 ай бұрын
Check on movement if the tile there character stands on is an air tile or no-tile, block input, animation character down, flip character to be drawn behind tilemap.
@ceedeeFN88
@ceedeeFN88 3 ай бұрын
@@GameDevelopmentCenter tried that, the detection to see if the player is on or not on the tiles is glitching.