Jump to content
  • Advertisement
Sign in to follow this  
Robin S

Combat System concept

This topic is 4130 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Over the years there have been many complaints about the common HP-based combat system on the grounds that, while easy both to implement and to get used to in-game, it's not very realistic. My proposal does not attempt to replace the HP system, merely to provide an alternative to it. I consider it to be slightly more realistic, although it will require considerably more memory. If all goes well, I plan to implement a standalone model of this system over Easter, when I have a bit more time. First of all, I would like to apologize if my explanation is not very clear. I will be happy to clarify any points that people may have questions about. The basic idea is this: each individual player or NPC is taken to be composed of very many destructible components (a particularly useful analogy for games where combat is nanorobot-based, but it could equally be applied to, for example, the different tissues of an organism). The total number of components making up a character is called that character's "size". Each component works in the same way an individual character would in an ordinary HP-based game: it has a defence value, or "hitpoints", and an aggression value, or "damage" that it deals. Rather than listing the exact defence and aggression values of every component for each player, a bivariate distribution (in other words, a 2D array) is stored containing the relative numbers of components belonging to the player at each lattice point on the defence / aggression graph. The character's "size" is also stored. The computer then models, on a frame-by-frame basis, what happens when two characters fight. For example, if the size ratio of characters A and B is 1.2, and 10% of A's components have aggression >=20, then the percentage of B's components with defence 20 which are destroyed in the next frame will be proportional to 1.2*10%. It turns out that, as long as each character consists of very many components, it is possible for each individual component to have variable aggression and defence values (in other words, the amount of damage dealt by the component and the amount of damage required to destroy it are random variables with fixed probability distributions, rather than being a fixed constant for each component) and this will not alter the bivariate distribution model at all. In order to be able to gain "experience" in a game implementing this combat system, there are "controller" components (one per character) whose destruction will result in the death of the character as a whole. The defence value of the controller component is taken to be a random variable with the same probability distribution as the defence values of all of the character's components considered together. When a character dies, its remaining components are divided in equal parts between those characters which were fighting it. One advantage of this system is that as long as two NPCs have the same intentions, they can be modelled as the same character (though it might be necessary to calculate the mean-squared distance of these NPCs from the target player first, depending on other details of the game mechanic). Also, the algorithm needed to implement this system is computationally inexpensive. However, a lot of memory would be required to hold all the arrays (I would estimate upwards of 100MB for a 1024x1024 array). I've probably made this sound a lot more complicated than it actually is. Please, feel free to ask questions or offer suggestions. Thanks!

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!