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Күн бұрын
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Ай бұрын
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_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.
@uidsea2 ай бұрын
You condensed entire series into this video and made it much more understandable. Thank you so much.
@novisiononmeАй бұрын
this idea with "separation" method is something beyond, 1000 times better than screen notification nodes etc. THANKS !!!
@renebouda2533Ай бұрын
This is really fun. Please keep going and don't stop!🐼
@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Ай бұрын
Amazing tutorial, thank you as always
@ssangkal1069Ай бұрын
you my hero thanks!
@7_rlz_71423 күн бұрын
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
@16bitdev23 күн бұрын
@@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.
@Lansamatv2 ай бұрын
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
@uidsea21 күн бұрын
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?
@16bitdev21 күн бұрын
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.
@uidsea21 күн бұрын
@@16bitdev Ah cool, thanks. I'll keep playing with it
@annoyed56720 күн бұрын
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
@uidsea20 күн бұрын
@@annoyed567 Oooo thanks, might be something I play with.
@KirayBov23 күн бұрын
at 12:13 you mention that you could also multiply health and damage, how would you go about doing that?
@16bitdev23 күн бұрын
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Ай бұрын
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Ай бұрын
@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Ай бұрын
@@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
@vikramthewrench2 ай бұрын
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.
@16bitdev2 ай бұрын
@@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.
@vikramthewrench2 ай бұрын
@@16bitdev Thank you for your response.
@romainguegan52802 ай бұрын
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.
@vikramthewrench2 ай бұрын
@@romainguegan5280 after this , enemies running crazy everywhere not even targeting player
@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Ай бұрын
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Ай бұрын
@@16bitdev I'm The tutorial is very good. I am grateful. 🙏🏻
@Sea_Frieren2 ай бұрын
thank you
@howfishhaoАй бұрын
I want animated sprites to use as my enemies. What should I replace Texture2D for, if any?
@howfishhaoАй бұрын
Never mind, i figured it out! :)
@maximilienbernede3191Ай бұрын
@@howfishhao you could give the answers for those who wonder haha, i guess sprite2D ?
@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...
@reiinn48472 ай бұрын
Hello, Can you make a boss fight tutorial in a platformer game?
@zhoukanshan21 күн бұрын
master tutorial
@Khaia-angQuang2 ай бұрын
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
@16bitdev2 ай бұрын
@@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-angQuang2 ай бұрын
@@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
@16bitdev2 ай бұрын
do this get_tree() dot get_nodes_in_group("Enemy").size() see all the SceneTree methods from godot docs for futher reference
@annoyed5679 күн бұрын
@@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
@16bitdev9 күн бұрын
@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
@KorathiHeatwave2 ай бұрын
Thx Master
@abdullahsamy12 ай бұрын
Make how can I make laser gun please
@romainguegan52802 ай бұрын
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?
@annoyed56725 күн бұрын
he covers a simple one in an earlier space shooter video. may give you some insight
@romainguegan528022 күн бұрын
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Ай бұрын
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)
@truonghai99992 ай бұрын
oh ok nice series :))
@machkiboaiak19982 ай бұрын
😍
@Tacoman072 ай бұрын
W channel
@KirayBovАй бұрын
which godot version do you use?
@16bitdevАй бұрын
4.3
@braveblade872 күн бұрын
How to animate enemies?
@16bitdev2 күн бұрын
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
@braveblade872 күн бұрын
@@16bitdev Should I do that with the Enemy.tscn? or the Enemy.tres?
@16bitdev2 күн бұрын
@@braveblade87 resource tres put texture & size over there
@moonnight94742 ай бұрын
series ?
@16bitdev2 ай бұрын
@@moonnight9474 yes it is, i will be covering a lot of stuff in this series 👍🏻
@Sea_Frieren2 ай бұрын
will have player stats ?
@16bitdev2 ай бұрын
@@Sea_Frieren yes it will, in the upcoming videos 👍🏻