I made a Fighting Game Frame Data System for my Indie Game!

preview_player
Показать описание


What's up, Gamers?
This video is a breakdown of my slick new Frame Data system for making cool attacks in my indie game! Hope you like it!

The game that I'm developing as an indie game dev is called Isadora's Edge! A 2D Pixel Art platformer game, that I'm developing in the Godot Game Engine! If you're new to Godot or have any questions about Godot or game dev in general, feel free to ask me!

=== THE LOVELY AND TALENTED INSANDIO ===

=== HASHTAGS ===
#GameDev #IndieGame #Godot #GodotEngine #IndieGameDev #Vimjam #8BitsToInfinity #Vimlark #VimJam2 #VimJam2021 #Vimjam2021 #Devlog #GameDevlog #GameJam #GameJamDevlog #Jam #GMTK #GMTKJam2021 #GMTKJAM2022 #Indie #Game #Dev #IndieDev
Рекомендации по теме
Комментарии
Автор

As someone who's in the works of fighting games, this was really fun to learn and see!

miwiarts
Автор

I love in-depth gamedev content, even though I only play games, never made anything serious. It's just so cool to know the thinking and engenering that goes into it. Makes me appreciate the game more.

RRak
Автор

as far as stretch goals, DO NOT UNDER ANY CIRCUMSTANCES do any physical rewards for your stretch goals. Alex Preston from Heart Machine in an interview mentioned that he regretted doing physical rewards for his stretch goals

jayegamer
Автор

Internal demon: You should be sexier.
Isadora: Fuck that, I'm slaying mushroom infected monsters!

Deadlock-art
Автор

I find it extremely funny that this video came out literally THE DAY that I am implementing hitboxes in a fighting game I'm working on. I gotta say that I really love your videos and specifically, that they provide a bit of insight in how professional game devs go about implementing certain systems. I find it tough that so much of game dev tutorials and such target absolute beginners, and often have solutions that are easy to understand, yet don't scale well with actual game development, so i've actually been looking toward this channel specifically for help in the conceptual aspects of implementing systems like this! :)

fmpo
Автор

Worth noting that fighting games apply hitstop on a per-entity basis, not for the whole game e.g if you block a projectile, only character blocking and the projectile itself are affected not the opponent who threw the projectile, some games change the amount of hitstop based on special properties e.g. in Guilty Gear hitting a Counter Hit will apply more hitstop to the enemy than to the player.

MrMoczan
Автор

Im working in my indie game and I always watched your vids for fun. Its now in a new light because its fun and informative for my game dev. Thanks for the great videos 👍

NathanSmithSkits
Автор

i have a friend that is making a fighting platformer to, different style and stuff but ive send him almost every single one of your videos because they are so informative on the subject

eikhylleberg
Автор

As someone who's just starting to learn godot and starting my solo dev journey, this is super helpful and has me motivated to explore this method. I love and appreciate the attention to detail in your videos!

codywiles
Автор

Regarding proration and risc gain, Someone's probably mentioned this already but I haven't seen a comment.

Proration is a system that drops the amount of damage the next attack in a combo does so that you can deal decent damage with stray hits without the combos nuking people's health bars. The lower the proration the less damage. (Idk the exact math of how it works)

Risc is a system in guilty gear that builds up when you block an attack. Different attacks and characters build different amounts of risc. Once the guage is full the next hit is a counter hit (very sorry I miswrote this I initially put "immediately breaks you out of blocking" instead oops), basically a system to stop people from standing there and blocking for too long.

Ashurion-Neonix
Автор

This is cool! I'm looking into improving my own attack frame system, soon! I'm in Unity + Aseprite, so I've got a pretty different set of solutions, but it seems like our workflows end up largely similar.

Happy to hear your demo and and Kickstarter are coming along, that's so exciting! I'm still months away from even thinking about those things, but I'm looking into the potential of dev vlogging eventually, and find myself taking notes when watching you, so thank you!

grumpkingames
Автор

I really appreciate your explanations on creating your systems. This is an area of development that I struggle with and have been trying to improve on.

ethancodes
Автор

Amazing video. Your shorts was one of the reasons I started to get into game development... So thanks and I wish you the best.

Gabreil-oe
Автор

Dang G you're doing so much in so little time, great job staying focused on your game's development!

eagleeyeedit
Автор

Great video! But I just wanted to point out a few things that you should be careful with this type of hitbox system.

One problem that may arise is "going through attacks without getting hit". Is similar to the problem of movement collisions going through walls. This is usually fixed by either automatically interpolating hitboxes (Smash bros does this) or simply covering the space of the frame that came before with the hitbox.

Another problem that is similar is how the attack looks v.s. how it feels. Using your example of the frog kick, think that the legs didn't just teleport from the ground to that elevated position, they moved there, so in theory if I stand next to the legs before they kick, I should be kicked by the strong part. However, with the example you showed, if there is a sweetspot on the tip but not on the legs and the animation is so fast it only happens in 1 or 2 frames, the chartacter may only be hit by the weak part even though it feels like it should have been hit by the strong one, which feels wrong.

Basically what I'm trying to say is, look at how hitboxes are placed in games and you will notice they don't "look right" frame by frame, but when you are playing, they "feel right", because the whole is greater than the sum of its parts (the attack is more than each individual frame). Some attack hitboxes are very simple and work great.


Also, smash hitboxes have a priority system so that if you happen to be hit by more than one hitbox of the same attack in the same frame, only one of them will be the one that deals the hit, useful for when you have sweet and sour spots so it is easier/harder to be hit by those (and the obvious one of not dealing more damage than intended). Also also, maybe consider giving the hitboxes their unique player invincibility value so, for example, you can make weak attacks grant less invincibility and stronger attacks more, allowing you to make attacks that can hit you multiple times in quick succession without the invincibility messing it up or, like you mentioned, balancing the fact that players could take the weak hit to gain long invincibility frames.

Sorry if my message was too long and overwhelming or it feels as if I'm badly criticizing or the comment simply sounds rude, I hope your game is a great success!

(Final) also, a question, since you are handling this frame by frame (and sorry if you have already answered this in a video I haven't watched), is your game always going to run at the same frame rate? if not, how are you going to handle frame data if the game runs at 15 fps in my PC? or at 144? Fighting games are designed to always run at a fixed frame rate exactly because everything is measured in frames. I may be wrong but I think Smash is an exception, however as I mentioned before they interpolate the hitboxes so it doesn't really become a problem (and only runs in a console so they know 99% of the time it will run at its intended frame rate).

Kai_Vega
Автор

Man I’ve just started game dev and really want to make just a simple fighting game like smash but you explaining it makes me realize how far I am from that

salmonbamminfish
Автор

This was a fantastic breakdown and there are many helpful comments! If you improve upon this system I would love to see an update video :)

anathema
Автор

On the bit about running tool scripts on the animation player, why not do the opposite.

Create a tool script that reads the animation data, list it down and play it on the inspector scene.
Kind of like an "animation inspection" tool.

I already saw a bunch of games that do this, including games i've worked on.

This was based in unity, but we got the animator and read the animation state machine state by state, layer by layer, and created an array of all the animations of that animator, listing it on scene view. We could then click on the animation name to play it on the model in the inspection view.

I think it's possible to fuse a system like that to your frame data system.

trayhl
Автор

Nice work! Consider to open source the frame data system as a Godot addon!

ricardopitta
Автор

I love your channel and thanks for your videos! They're a great source of motivation and I can't wait to play your game one day

RainRecoded