![Pufferfish's Skills [Fabric & Forge & NeoForge]](https://media.forgecdn.net/avatars/thumbnails/786/631/256/256/638138098303113835.png)
Design Concerns/Feature Requests
reuy opened this issue ยท 3 comments
My friend and I looked at the API for our own project. This looks great and is much more configurable than Reskillable, but we have a few suggestions or use cases we see missing here:
-
There appears to be no way to specify any additional requirements before you take on a perk; no ability to set explicit prerequisites like prior skills or gamestages, only point costs.
-
The tree seems bidirectional, with no way to specify one-way relationships. While this is pretty neat, it can also lead to players traversing some trees in the wrong direction. I recommend adding an optional Json field to every skill pair, specifying if the two skills' relationship is first-to-second, second-to-first, or bidirectional.
-
In cases where a perk is connected to two prior perks, doesn't look like you can specify if ALL the perks leading up to it must be unlocked before unlocking it, or if only one is necessary. I recommend making this an integer function for any given perk that serves as the minimum number of perks you need to have unlocked beforehand before you can get that perk.
-
There seems to be no ability to specify exclusive perks in a branching point on the tree, save for the at roots themselves. This precludes situations where you can force a player to specialize at a certain point in their progression. However, if we were able to dynamically specify more requirements, we could implement this ourselves - for instance, via mutually exclusive gamestages.
-
Reskillable worked by allowing players to buy skill points in a Category using XP. There is no way to implement this as there is no button function to allow players to do this. My own use case requires this; while it's cool that we can specify the ways each Category levels, some, including me, would like to have a system where players get to choose what Category they level by playing the game the way they want, rather than playing it the way that Category demands.
-
This one would be a nice stretch goal, but the ability to turn a perk on and off once you've unlocked it. I realize the actual code for a perk being "on" and "off" would have to be implemented by a user, but a nice option to allow a toggle on UI side would be great. For example, you can allow the configurer to run separate command(s) when the perk is unlocked, when it is enabled, and when it is disabled.
Thanks for a lot of great features. I need some time to think about the best way to implement them.
Here are my thought on some features.
The tree seems bidirectional, with no way to specify one-way relationships. While this is pretty neat, it can also lead to players traversing some trees in the wrong direction. I recommend adding an optional Json field to every skill pair, specifying if the two skills' relationship is first-to-second, second-to-first, or bidirectional.
I think two-way connections are easier for players. Adding one-way connections would require them to be visually different from two-way connections. I have also come up with an alternative solution to add an option that would make all connections in a category either one-way or two-way. While a visual difference would not be required, skills must be placed in a such way to clearly represent their order.
There seems to be no ability to specify exclusive perks in a branching point on the tree, save for the at roots themselves. This precludes situations where you can force a player to specialize at a certain point in their progression. However, if we were able to dynamically specify more requirements, we could implement this ourselves - for instance, via mutually exclusive gamestages.
I think that player should somehow be informed what skills/paths will become locked after certain skill is unlocked. However, I still haven't come up a way to visually indicate this.
Reskillable worked by allowing players to buy skill points in a Category using XP. There is no way to implement this as there is no button function to allow players to do this. My own use case requires this; while it's cool that we can specify the ways each Category levels, some, including me, would like to have a system where players get to choose what Category they level by playing the game the way they want, rather than playing it the way that Category demands.
Due to current user interface design, all categories must either have their own experience or share global experience. The problem is that someone might want to create categories that are available only for specific class/role or something. In that case it would be impossible to have experience configured differently for each class/role. This is because every category would use global experience.
Ideally it should be possible to share experience between certain categories only. I have no idea yet how to represent this in both config and user interface.
It is not that I don't want to add these features. I really want to, but they come with their own problems and concerns which have to be resolved before implementing these features.
Due to current user interface design, all categories must either have their own experience or share global experience. The problem is that someone might want to create categories that are available only for specific class/role or something. In that case it would be impossible to have experience configured differently for each class/role. This is because every category would use global experience. Ideally it should be possible to share experience between certain categories only. I have no idea yet how to represent this in both config and user interface.
My suggestion would be to have some kind of conditional availability to skill trees themselves. My idea being similar to game stages in that a player needs a certain tag to unlock skills in certain trees. Ideally this would also allow the use of these tags as a reward.
An example of how this might look is a core tree which you have multiple mutually exclusive or very far apart root skills which give a tag unlocking an additional tree.
Perhaps this could be taken a step further with having numerical data attached to the tag so that you can only level X number of skills in a certain tree or move X number of spaces away from your root skill. Such that you could have a core tree in which you level up the maximum capacity available in other class specific trees.
This way you could easily limit point usage between different classes to a highly flexible degree. It allows for not only class locked gameplay but opens the doors to more freeform class based progression systems.
rather than worrying about if XP or how points can be used interchangeably between trees I think it makes more sense to add the functionality needed to restrict certain trees themselves. that way.
One alternative option would be to have specific or "coloured" skill points. for example; you gain red skill points while fighting. the warrior tree only accepts red skill points. the general tree might accept any type of skill point. either different trees or different definitions might require different coloured skill points. Each colour of skill point used could be shown along the top bar next to eachother.
Coloured XP is very adaptable but would be hard to implement alongside Functional use of Vanilla XP and levels. to this end i think that it is the lesser of two options even though gameplay wise it allows for a greater number of interesting ways to tweak progression.
Edit: If using coloured xp/perk points they could be bought for whatever the next point's raw xp cost is in vanilla xp. this could be represented in the tooltip showing the raw cost in levels rounded up. ideally buying perks as such should cost the XP cost in raw XP rather than levels. this is to avoid diminishing returns at high enchanting level.