nvs / gem

Gem TD+: A Warcraft III Tower Defense
https://discord.gg/PxNNp77
26 stars 2 forks source link

Add feature to notify players of combinations. #450

Open tj-thornsberry opened 5 years ago

tj-thornsberry commented 5 years ago

I would like to have a feature that, after placement of the five random gems, would notify players, either through text or a possible UI of the combinations they are closest too. This would help with the players' selection when they're focused too much on one gem and don't realize they need a single gem for another combination. Or when you just fail at memorizing what combinations need what gem, before the timer runs out. I was originally going to add this myself, but am having troubles with Linux and Lua-stormlib. But from what I've gone through, something inside src/gem/combination.j/Gem_Combination__Register. Just check to see which combinations the five randoms are part of, and check to see how many gems the player has of those combinations, and use DisplayTextToPlayer to say call DisplayTextToPlayer (the_player, 0.00, 0.00, Color ("18d8db", {Combination}) + Color ("12aa12", {AlreadyHave}) + Color ("db182e", {NonSelected})) Of course, that string would need to be formatted better but that's a general idea.

nvs commented 5 years ago

This is similar to #333, but more specific to a single round of gems. As far as solutions to display general combination information, I see the following:

  1. Object tooltips. Best to hold off on this one until 1.31, for new natives. However, this will definitely be added at some point. This does require the player to check each individual gem, so it is not quite as user friendly as what you're describing, but the information would be there.
  2. Multiboard. Displaying combination information here is possible. Could use Esc to toggle between boards. Displaying underneath the player rankings is not an option, especially if more players become supported and the one gem per combination guarantee is broken (which it will be). Just not enough vertical lines.
  3. Text messages. This also suffers from the vertical lines issues, and another more pressing one. Text messages are simply pushed off the screen by newer messages. Overall, I'm not a fan of using them to display anything too important (even though there aren't many other options). They are best reserved for short informative messages, such as events like new levels, bouts of good luck, etc.
  4. Other UI. This requires 1.31. I haven't looked into the new UI related natives too much, but a lot is possible. Requires a bit of work, however.

About the only viable solution that is future proof that can be implemented in 1.30.4 is a separate multiboard. A new player will have to learn about how to toggle this board, but it would suffice. Colors could be used to indicate gems that one already has, those one is missing, and those that are available to select from.

Also, what timer are you talking about that runs out? The game timer increases, but there is no limitation imposed on players in terms time to select a gem. But yeah, if you're having issues with lua-stormlib, make an issue over there and perhaps I can assist.

tj-thornsberry commented 5 years ago

I apologize, the timer I was referring to is not included in this one as it is in the original Classic mode. Which I do hope to see come back in the future, it gave us sort of a rushed feel. As for the text messages, I did know about them being pushed off the screen, and we do want this to be future proof, the multi-board was my original idea, but I have very little knowledge when it comes to that. I can take a look into it though too, Gem TD has always been a favorite so I was happy to discover one being actively worked on here. I'm not too familiar with the functions, you said we're able to toggle boards, are we able to set the dimensions between toggles? If so, I'd suggest a board with a list of all combinations, and the gems required, change from red to green if the player has them, yellow if they are part of the randoms. Again I'm too unfamiliar with the Warcraft map creation itself, but I'll familiarize myself with it more over the next few weeks.

nvs commented 5 years ago

For the upcoming 1.6 release, I'm in the process of improving the UI, particularly for new players. I'll probably toss together the multiboard idea and see how I like it, at the very least. I'll go ahead and list my thoughts on how I plan to approach it.

There needs to be a way to toggle the board. And it needs to be quick and easy. An ability or item click on the builder would work, but is not quick enough. That leaves a key press (of which you can only detect the arrow keys or Esc). YouTD uses Esc to switch between boards, and it works okay enough.

But, basically the main board would be hidden locally for the player and their own personal combination board would be shown. This would utilize GetLocalPlayer () blocks. Code within these blocks is asynchronous and can cause desyncs. TL;DR on that is do not create handle objects inside these blocks. But, hiding and showing UI elements inside them is pretty safe.

Classic mode, yeah. I removed that a long time ago in this version. Ultimately, the vast majority of players on Battle.net playing Gem (even before the rise of bots years ago) only played Race. I think a lot of players considered Classic too slow. Once you get used to the combinations and selecting quickly, there is a lot of waiting in that mode.

nvs commented 5 years ago

Okay, I did a bit of thinking regarding this issue. The way I see it there are basically two separate issues going on here. First, the ability to see, at-a-glance, what gems a player already has. And, second, assistance in identifying which combinations the five placed gems can make.

The goal is to address both issues and help reinforce the learning process, but without crafting a solution that ultimately ends up being a crutch for players. A solution that combines or automates both issues would be far too much, I'm sorry to say.

For an at-a-glance view, I would propose a multiboard or custom UI frames solution. Most likely a custom UI would be ideal as it is the most flexible, but that cannot happen until 1.31. Shoving all potential information into a multiboard without it being cramped or requiring abbreviations would be difficult. It would only show the combination, the parts one possesses, and the parts one does not. Showing more would be too powerful; and, in a world with more combinations, would basically be an infodump. Not friendly for newer players.

To help assist in identifying which combinations the five placed gems can make, I would propose using object tooltips. These can be put directly on the gem's action buttons (i.e. Keep, Downgrade, Combine, etc.). This cannot happen until 1.31 (but, the natives it would rely on do not fully work on the PTR). However, in this case, I don't see an issue showing gems that one can get that round in another color. Consider the following, where a player has two Chipped Diamonds:

Combine (2x) [C]

This will make Flawed Diamond. This gem is used in the following combinations:

Silver
- Perfect Amethyst (Green)
- Flawless Amethyst (Green)
- Flawed Diamond (Yellow)

Cool New Combo
- Flawed Diamond (Yellow)
- Chipped Emerald (Grey)
- Chipped Ruby (Grey)

Yes, this requires a player to click each gem and look over the options, as opposed to looking at a quick pop up screen or mass of text messages. But there is far greater reinforcement in the process.

This is about the best I can do in terms of addressing your initial request, without automating too much of the process for players.