Lets Make a Rogue-like (Vampire Survivor) in Godot 4

  Рет қаралды 5,927

16BitDev

16BitDev

Күн бұрын

Пікірлер: 72
@juunair5546
@juunair5546 2 ай бұрын
I started learning godot and making pixel art a few months ago. I like how these videos give me a sense of how a more experienced person uses Godot
@braveblade87
@braveblade87 Күн бұрын
What I love about this "How to make (Vampire Survivors Like) game tutorial" from the rest is the OPTIMIZATION. ❤ I have to to start from scratch cause I haven't found a tutorial on how to limit testing and optimization.
@Road_to_Dawn
@Road_to_Dawn Ай бұрын
You are the first one I've seen to do a tutorial on Vampire Survivors and talk about things like a looping world and spawn caps. THANK YOU. This is exactly the information I was looking for!
@murifox_
@murifox_ 2 ай бұрын
I did one of these a while ago, and made some weird architecture choices. Your approach was really great on some points. Thx for the video! Also, repeating again, probably one of the best Godot channels out there.
@uidsea
@uidsea 2 ай бұрын
You condensed entire series into this video and made it much more understandable. Thank you so much.
@novisiononme
@novisiononme Ай бұрын
this idea with "separation" method is something beyond, 1000 times better than screen notification nodes etc. THANKS !!!
@renebouda2533
@renebouda2533 Ай бұрын
This is really fun. Please keep going and don't stop!🐼
@iamsleepy
@iamsleepy Ай бұрын
Loving this, great job! One thing to note: you don't need to add the * delta in your move_and_collide() call because that function automatically calculates delta when called.
@Kindersonde
@Kindersonde Ай бұрын
Amazing tutorial, thank you as always
@ssangkal1069
@ssangkal1069 Ай бұрын
you my hero thanks!
@7_rlz_714
@7_rlz_714 23 күн бұрын
I have an error when I use the sprite2d reference instead of using $sprite2d in var type: Enemy: set(value): type = value $Sprite2D.texture = value.texture Invalid assignment of property or key 'texture' with value of type 'CompressedTexture2D' on a base object of type 'Nil'. only using $sprite2d does not cause the error
@16bitdev
@16bitdev 23 күн бұрын
@@7_rlz_714 I think the node is not ready that's why that reference is returning null, that's the only node I encounter this problem with, so I just always use $Sprite2D only for this node.
@Lansamatv
@Lansamatv 2 ай бұрын
Excellent video, could you look at the battle mechanics of the classic Axies Infinity game. Which is RPG Turn Card and could you bring a video explaining step by step how to make that battle system please and I look forward to this series of this survival vampire games tutorial
@uidsea
@uidsea 21 күн бұрын
Would your enemy class system allow for multiple sprites or like making specific enemy scenes besides the resources you make with the spawner? Or even just to animate the enemies?
@16bitdev
@16bitdev 21 күн бұрын
You can make an array of Texture2D to hold multiple sprite frames and animate them by looping over that array. I used one frame just for the placeholder. In the future, I will be refactoring a lot of stuff.
@uidsea
@uidsea 21 күн бұрын
@@16bitdev Ah cool, thanks. I'll keep playing with it
@annoyed567
@annoyed567 20 күн бұрын
i changed texture2d in the resourse to Nodepath which allows me to spawn in previous iterations of 16bitDevs minions with there own state machine. it has its problems, as the world scene needs existing enemy nodes on load to pick from for this method to work, if your savy enough you could get a script to spawn in the nodes you want for the resource file to utilise nodepath
@uidsea
@uidsea 20 күн бұрын
@@annoyed567 Oooo thanks, might be something I play with.
@KirayBov
@KirayBov 23 күн бұрын
at 12:13 you mention that you could also multiply health and damage, how would you go about doing that?
@16bitdev
@16bitdev 23 күн бұрын
I meant Multiplicative damage formula, so instead of health + armor - incoming_damage, do health - (damage * constant/ (damage + armor)), so higher the armor lower will be the damage taken.
@pinkowl9752
@pinkowl9752 Ай бұрын
Awesome vid! Very much looking forward to more in the series! I'm running into an issue where the mini knockback you've applied to get the swarm movement gets an error when there are objects that don't have the knockback value, lets say a wall. How would you go about masking non enemy collision objects? The exact error I'm getting is: Invalid assignment of property or key "knockback" with value of type 'Vector2' on a base object of type 'TileMapLayer'. On the line: collider.get_collider().knockback = (collider.get_collider().global_position - global_position).normalized() * 50 The tilemap I'm using has walls, as in my game the world is just a box. Hope you can help, and thanks again!
@16bitdev
@16bitdev Ай бұрын
@pinkowl9752 set tilemap on different, you can check the type of object its colliding with so its the collision is TimeMap the return the function. Walls will remain intact. hint: if collider. get_collider() is TimeMapLayer: return, else set knockback
@pinkowl9752
@pinkowl9752 Ай бұрын
@@16bitdev Thanks, that works! I wasn't aware that you could call nodes like that. Awesome :) For anyone interested, my code looks like this. You can of course add any other node instead of TileMapLayer: var collider = move_and_collide(velocity * delta) if collider: if collider.get_collider() is TileMapLayer: return else: collider.get_collider().knockback = (collider.get_collider().global_position - global_position).normalized() * 50
@vikramthewrench
@vikramthewrench 2 ай бұрын
I'm trying to implement avoidance and Surround player from all direction ,when enemies coming from same direction, but they keep stuck one after another in a line. I tried steering behaviour, random range movements. all not working like i wanted to. i want enemies to occupy empty space near enemy i tried ray cast to check if it its collied with Circle collision of Player. But enemies still acts same no variation. how can i fix this.
@16bitdev
@16bitdev 2 ай бұрын
@@vikramthewrench You can fix it by implementing boid mechanism / flocking algorithm, but its resource heavy so you have to turn down the enemy count a little in order to implement that.
@vikramthewrench
@vikramthewrench 2 ай бұрын
@@16bitdev Thank you for your response.
@romainguegan5280
@romainguegan5280 2 ай бұрын
Copilot gave me this: var separation = Vector2.ZERO #group behavior, repel each other for enemy in get_tree().get_nodes_in_group("Enemies"): if enemy == self: continue var distance = global_position.distance_to(enemy.global_position) if distance < separation_distance: separation -= (enemy.global_position - global_position).normalized() / distance velocity += separation * separation_force It makes enemies act as a group, like bees. Of course, it's not optimal but it's a start.
@vikramthewrench
@vikramthewrench 2 ай бұрын
@@romainguegan5280 after this , enemies running crazy everywhere not even targeting player
@Barbichenko
@Barbichenko Ай бұрын
I couldn't identify how to solve a bug. Have 4 types of monsters, from the moment the 4th type spawns, the next type always repeats itself to the last one in the array. and other types of monsters never appear
@16bitdev
@16bitdev Ай бұрын
its a 30 minute game with 30 enemies, if player survives the entire round, then they win, you can add as many enemies you want, if the enemy types are less than the minute required then rest of the game will just spawn the final enemy of the list, in your case its the 4th enemy, adding more enemies will solve the issue. 👍🏻
@Barbichenko
@Barbichenko Ай бұрын
@@16bitdev I'm The tutorial is very good. I am grateful. 🙏🏻
@Sea_Frieren
@Sea_Frieren 2 ай бұрын
thank you
@howfishhao
@howfishhao Ай бұрын
I want animated sprites to use as my enemies. What should I replace Texture2D for, if any?
@howfishhao
@howfishhao Ай бұрын
Never mind, i figured it out! :)
@maximilienbernede3191
@maximilienbernede3191 Ай бұрын
@@howfishhao you could give the answers for those who wonder haha, i guess sprite2D ?
@howfishhao
@howfishhao Ай бұрын
@@maximilienbernede3191 oh sure, there should another type of texture called AnimatedTexture2D or something like it, and it should give a dropdown where it asks how many frames you want this to be. You can then just insert your frames. Have not found a way to just place a gif yet...
@reiinn4847
@reiinn4847 2 ай бұрын
Hello, Can you make a boss fight tutorial in a platformer game?
@zhoukanshan
@zhoukanshan 21 күн бұрын
master tutorial
@Khaia-angQuang
@Khaia-angQuang 2 ай бұрын
Hello, currently, my gotdot4.2 version doesn't support get_tree_node_count_in_group() in the spawn script, I tried to find another solution but it doesn't work, I need help to replace this command, thanks
@16bitdev
@16bitdev 2 ай бұрын
@@Khaia-angQuang there is a dot after get_tree(), its not a single function, also its same in 4.2, nothing changed for groups in 4.3
@Khaia-angQuang
@Khaia-angQuang 2 ай бұрын
@@16bitdev Invalid call. Nonexistent function 'get_node_count_in_group' in base 'SceneTree'. this is the response i got, i am really confused, does group need to be called globally right
@16bitdev
@16bitdev 2 ай бұрын
do this get_tree() dot get_nodes_in_group("Enemy").size() see all the SceneTree methods from godot docs for futher reference
@annoyed567
@annoyed567 9 күн бұрын
​@@16bitdev i dunno if im having a similar issue but , this line of code if get_tree().get_node_count_in_group("Enemy") < 700: has this error Invalid call. Nonexistent function 'get_node_count_in_group' in base 'SceneTree'. so i found documentation and have gone with this, i feel like such a trained ape with a typewriter , sometimes during this. func _physics_process(_delta): if get_tree().get_nodes_in_group("Enemy").size(): if enemy_types.size() < 700 : can_spawn = true else: can_spawn = false
@16bitdev
@16bitdev 9 күн бұрын
@annoyed567 if you are using previous that function might not be available, i think that method was recently introduced in 4.3, read the documentation about SceneTree for 4.3, there is a workaround solution which is getting all the nodes in that group, and get size() of that array that way you can find number of enemies available
@KorathiHeatwave
@KorathiHeatwave 2 ай бұрын
Thx Master
@abdullahsamy1
@abdullahsamy1 2 ай бұрын
Make how can I make laser gun please
@romainguegan5280
@romainguegan5280 2 ай бұрын
I was working on this for months, now I'll have to redo my spawner, yours is way more optimized... Do you have suggestion for adding a wave system?
@annoyed567
@annoyed567 25 күн бұрын
he covers a simple one in an earlier space shooter video. may give you some insight
@romainguegan5280
@romainguegan5280 22 күн бұрын
Actually I just updated my existing system with his. 2 timers do the trick: 1 for wave duration, another one enabling the process and checking if enemies are still alive. If not, spawning = false, timer stops. Next wave starts, wave timer starts.
@Ocape
@Ocape Ай бұрын
Hi, i know you are busy lately but you are my only hope i can't find tutorial about how to make really GOOD flying mechanic like superman and the cape flying around with air force and some good camera movement if you can help ill really appreciate that (if someone sees this feel free to help)
@truonghai9999
@truonghai9999 2 ай бұрын
oh ok nice series :))
@machkiboaiak1998
@machkiboaiak1998 2 ай бұрын
😍
@Tacoman07
@Tacoman07 2 ай бұрын
W channel
@KirayBov
@KirayBov Ай бұрын
which godot version do you use?
@16bitdev
@16bitdev Ай бұрын
4.3
@braveblade87
@braveblade87 2 күн бұрын
How to animate enemies?
@16bitdev
@16bitdev 2 күн бұрын
replace single sprite with sprite sheet that has animation cycle, set hframe & vframe and increase frame count by 1 for every 10 physic process cycle or you can use timer too
@braveblade87
@braveblade87 2 күн бұрын
@@16bitdev Should I do that with the Enemy.tscn? or the Enemy.tres?
@16bitdev
@16bitdev 2 күн бұрын
@@braveblade87 resource tres put texture & size over there
@moonnight9474
@moonnight9474 2 ай бұрын
series ?
@16bitdev
@16bitdev 2 ай бұрын
@@moonnight9474 yes it is, i will be covering a lot of stuff in this series 👍🏻
@Sea_Frieren
@Sea_Frieren 2 ай бұрын
will have player stats ?
@16bitdev
@16bitdev 2 ай бұрын
@@Sea_Frieren yes it will, in the upcoming videos 👍🏻
@ben18066
@ben18066 2 ай бұрын
add skill for character , Thx
@HayasakaAi-wj4zb
@HayasakaAi-wj4zb 2 ай бұрын
system save file for game :)
@wolfHKS
@wolfHKS 2 ай бұрын
😀
@Furina-lc9dl
@Furina-lc9dl 2 ай бұрын
save , load for game 16bitdev , thank you
@moonnight9474
@moonnight9474 2 ай бұрын
😄
@Stalagmit1
@Stalagmit1 2 ай бұрын
Updated github please
Making Vampire Survivor in Godot 4 - Weapon System
14:10
16BitDev
Рет қаралды 3 М.
We made Vampire Survivors BUT in 10 Lines of Code
7:08
PlayWithFurcifer
Рет қаралды 1 МЛН
World’s strongest WOMAN vs regular GIRLS
00:56
A4
Рет қаралды 45 МЛН
FOREVER BUNNY
00:14
Natan por Aí
Рет қаралды 17 МЛН
Random Emoji Beatbox Challenge #beatbox #tiktok
00:47
BeatboxJCOP
Рет қаралды 68 МЛН
Making the FASTEST Creature in Spore.
14:19
BogBoy
Рет қаралды 544 М.
Minecraft's Terraria Mod is Incredibly Fun!
21:29
ChippyGaming
Рет қаралды 538 М.
I Made the Same Game in 8 Engines
12:34
Emeral
Рет қаралды 4,2 МЛН
13 ADDONS to SPEED UP your game creation in GODOT!
11:23
MrEliptik
Рет қаралды 110 М.
How Games Make VFX (Demonstrated in Godot 4)
5:46
PlayWithFurcifer
Рет қаралды 359 М.
Stats, Item & Evolution - Roguelike Mechanic in Godot 4
20:48
The Four Horsemen of Physics
29:40
MAKiT
Рет қаралды 14 М.
I made a retro Roguelike in Godot in a day!
17:59
SDG Games
Рет қаралды 945
Coding Adventure: Portals
16:06
Sebastian Lague
Рет қаралды 1,3 МЛН
Make Your Own Vampire Survivors-Like in Unity (No DOTS)
6:28
World’s strongest WOMAN vs regular GIRLS
00:56
A4
Рет қаралды 45 МЛН