-1
\$\begingroup\$

I went through many websites explaining fighting game systems, frames, hitboxes, but I couldn't find the answer so I ask here.

Basically fighting game hitbox system works like this :

  1. Player A starts attack (startup frame). *No hitbox exists yet.

  2. Startup frame finishes, Attack frame hitbox collides Player B and B takes damage(active frame) *Hitbox exists now.

  3. Player A performs attack finishing move (recovery frame) *No hitbox exists now.

What I'm curious about is, on step 2, let's suppose the total number of active frames is 3, so then B will get punched 3 times in a row, which is unconvincing...

Maybe adding some invincibility frames for Player B will solve the problem, but because Player A's active frame counts will vary between moves(normally fighting games have so many attack moves), calculating the right number of invincible frames per moves will be pain (or not? I haven't tried this method yet :P).

I wonder how other fighting (or action) games solve this kind of problem.

\$\endgroup\$
3
  • \$\begingroup\$ Fighting game mechanics can be implemented in various ways. You seem to be quite specific about yours; what are you basing this on? \$\endgroup\$ Apr 15, 2014 at 10:24
  • \$\begingroup\$ Basically i'm planning on XBLA's The Dishwasher style 2d hack&slash game. I wanted to implement more precise fighting system so I took a lot of systems from fighting games. \$\endgroup\$ Apr 15, 2014 at 11:28
  • \$\begingroup\$ You should edit your question to specify that, because questions asking how other games did something are off-topic here. \$\endgroup\$
    – user1430
    Apr 15, 2014 at 15:16

2 Answers 2

2
\$\begingroup\$

Easy solution 1 : you can mark each attack move with a unique identifier that is regenerated every move, and mark each character with the identifier of last hit received. If during a frame collision the last hit received id matches the attack id, do not count it as a hit. In case there are more than 2 characters, one attack can still hit multiple opponents.

Easy solution 2 : Mark each attack with a boolean flag of “effectiveness”, i.e. whether the hit was delivered to someone or not. When a collision occurs, checks if the flag is set. If it is unset, proceed to perform the hit, and set the flag. If the flag is set, just skip the collision. In case there are more than 2 characters, one attack can hit at most one opponent.

Less easy solution 3 : If there is a hit, consider the next attack frame to be finishing moves frames, without any hitting box. Can hit multiple opponents, but only at the same frame.

\$\endgroup\$
3
  • \$\begingroup\$ Solution 1 seems reasonable to me cause i'm planning a hack&slash style 2d game. Thank you for the answer! \$\endgroup\$ Apr 15, 2014 at 10:18
  • \$\begingroup\$ You're welcome. I failed to mention that in solution 1 you must regenerate the unique id every attack. \$\endgroup\$
    – Lærne
    Apr 15, 2014 at 11:16
  • \$\begingroup\$ Oh i see. Just make an integer variable on runtime and increment it for each attack, and assign it as attack id would be enough i guess. \$\endgroup\$ Apr 15, 2014 at 12:07
1
\$\begingroup\$

I am also working on a fighting game and I am doing this by having a Move structure which contains different parameters of an attack (or neutral move) including active frames if any. I keep the active frames in a container which I can delete from. Each frame I reset the properties of every hitbox of my character to default, and after that I activate each one of them, which is needed if there is an active frame currently.
If a hit occurs then I remove the current active frame from the Move containing it. I also remove every active frame if my animation finished has ran through it. An active frame can also have a maximum hit count counter which depletes if it hit once and the frame only gets removed if it is depleted.

(This is a method which works for me for the time being, but the game is not fully developed so there may be problems arising from this later (but I hope not))

\$\endgroup\$
3
  • \$\begingroup\$ Thank you for the answer, it's a bit complicated but sounds reasonable for complex fighting game. I'll give a shot if system gets more complex. Thanks! \$\endgroup\$ Apr 15, 2014 at 10:21
  • \$\begingroup\$ It is not that complex if you think about it, the focus is just to remove the active frame if it hit. If you got that working you can extend the system further. ;) \$\endgroup\$ Apr 15, 2014 at 11:54
  • \$\begingroup\$ Oh thats more simple and easy explanation, i understand your point. Thanks:) \$\endgroup\$ Apr 15, 2014 at 12:08

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .