• Advertisement
Sign in to follow this  

Java RPG Stats System

This topic is 2062 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

I have been thinking this for a while and I'm not sure if there is already a solution out there. I did not find anything from Google. What I am wondering is how can I create a system that is easy to use for RPG games that uses stats for characters. It is not simply "Str", "Dex" and use some number to scale "attack" or "attack speed", but instead, a system that would nicely integrate effects into the game that is EASILY EXTENDABLE. Effects are things such as "decrease 10 hp per frame" or "increase 1.5 mana per frame". I'm thinking that each Entity in the game would keep at least two list of effects. Each effect maybe once time applied or per frame applied. During each frame, we simply loop through these lists and apply each effect. We remove the ones that are applied once and keep the ones that are applied over time. Anyone got any good polymorphic object oriented design?

Thanks,
CXD

Share this post


Link to post
Share on other sites
Advertisement
off the top of my head, i would create a class called Effect with an abstract method called perform()

then make other classes that define each particular effect, for example, you could create a strengthBuff class or whatever
and implement the perform method to give it whatever logic you want.

perform could also take parameters if needed, like perform(Actor actor) etc.

I did something like this for my Pokemon clone game, each move (like ember for example) not only deals damage to the other pokemon,
but it also has a chance of contaminating the other pokemon with a lingering effect (in case of ember, it was damage over time)
so each move had an effect attached to it, and i simply implemented the perform method for each individual move, (sand attack lowers accuracy, etc)

Share this post


Link to post
Share on other sites
Thanks for the reply! I did try that but I had problem doing things that remove effects right away. Do you use an Abstract class that automatically apply the effect and have all "Entity" implement "Effectable" ?

CXD


off the top of my head, i would create a class called Effect with an abstract method called perform()

then make other classes that define each particular effect, for example, you could create a strengthBuff class or whatever
and implement the perform method to give it whatever logic you want.

perform could also take parameters if needed, like perform(Actor actor) etc.

I did something like this for my Pokemon clone game, each move (like ember for example) not only deals damage to the other pokemon,
but it also has a chance of contaminating the other pokemon with a lingering effect (in case of ember, it was damage over time)
so each move had an effect attached to it, and i simply implemented the perform method for each individual move, (sand attack lowers accuracy, etc)

Share this post


Link to post
Share on other sites
Before discussing about the best design possible, you should probably look more closely to your problem. What kind of effects do you want/need/plan to implement? What kind of operations on effects do you want/need/plan to support? You may for example be interested in knowing if an effect is positive or negative or what stats are changed by the effect. You may be interested if the effect should be applied once (e.g. add 2 points to dexterity) or every frame (or every n milliseconds). You may want to know if the effect is "invertible" (i.e. if the result of the effect should be removed when the effect is removed) or if it is permanent. You may want to know if the effect has a duration or if it is linked to some object. You should then decide what's data and what's code (e.g. the two effects "+2 dex for 2min" and "+5 int for 30s" may be implemented as two instances of the same effect). Finally, you should also probably try to understand how those effects will be used by your system.

Share this post


Link to post
Share on other sites

Before discussing about the best design possible, you should probably look more closely to your problem. What kind of effects do you want/need/plan to implement? What kind of operations on effects do you want/need/plan to support? You may for example be interested in knowing if an effect is positive or negative or what stats are changed by the effect. You may be interested if the effect should be applied once (e.g. add 2 points to dexterity) or every frame (or every n milliseconds). You may want to know if the effect is "invertible" (i.e. if the result of the effect should be removed when the effect is removed) or if it is permanent. You may want to know if the effect has a duration or if it is linked to some object. You should then decide what's data and what's code (e.g. the two effects "+2 dex for 2min" and "+5 int for 30s" may be implemented as two instances of the same effect). Finally, you should also probably try to understand how those effects will be used by your system.


Okay, I'll make a list of the things I want and try to come up with an OOP design such that it is easy to mix and extend the effects. Thanks!

Share this post


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

  • Advertisement