besteon / Ironmon-Tracker

A Lua script for the Bizhawk/mGBA emulator compatible with Pokemon Fire Red, Leaf Green, Ruby, Sapphire, and Emerald that tracks relevant data for the IronMon challenge.
MIT License
128 stars 45 forks source link

During battle, have a log or history of moves used by enemy Pokémon #184

Open UTDZac opened 2 years ago

UTDZac commented 2 years ago

Version: 0.6.1

Currently "Last Damage Taken" is the only useful battle history shown. While this is often useful enough as-is, ideally the user should be able to click on this box to see more information about the current battle, effectively a full history log of what attacks have occurred thus far.

Implementing this to show just moves that dealt damage is probably straightforward, but having it show all moves and what Pokémon used them might be a bit harder. Would also need to considered fighting two of the same Pokémon species back-to-back and how we'd want to show that in the log. Or does it make sense to only show a simple history log of just the current Pokémon you are fighting?

I suppose the best, fullest feature is to have all information for all Pokémon and the moves they used and the damage they did (if any), all for a single battle.

jtigues commented 2 years ago

Thoughts:

  1. User clicks on the Last Move Damage section; it takes you to a new screen
  2. New Screen shows all 6 pokemon (enemy team by default?) in the upper section, with the current active pokemon selected by default (Double Battles, haha). Can page between your team and the enemy team. Selected pokemon is highlighted, slots are numbered 1-6 (pretend the mock up is not lazy), and the current active pokemon has some additional marker; a pokeball, something. Can click on the different pokemon to toggle between their move history
  3. Lower section of the screen shows a move history. Can probably fit 5, and then have similar paging to show beyond that. Maybe want to include reminder text also that it goes from most recent to least recent. Could change color of the moves based on whether they hit or missed/failed. Would need to think about absorb type abilities though
  4. Could even track more data and display it here. Not just moves used, but damage taken from all sources (weather, confusion, statuses, rough skin, bind)
  5. Screen closes automatically when battle ends. Otherwise back button returns to the tracker screen for the active pokemon of whichever team is being viewed in the Battle History. MoveHistory
jtigues commented 2 years ago

Also obviously if it's an allied pokemon's move we don't show them the damage. Not really sure what you might actually want to see for an ally as far as moves actually, maybe we only need to show the enemy's history? But for allies you would want to select them to see the damage taken

UTDZac commented 2 years ago

Nice mock-up and good thoughts on how to go about showing this information. I think being able to select your own Pokemon team seems like something we don't really need here, given we can't know the damage numbers we deal.

I'm trying to think about other use-cases for this feature as a whole. Being able to click on each individual Pokemon on the enemy's team seems like overkill here. I'm imagining that often you'd just want to know what the last 3-5 moves were. This way you can "remember" just a bit more information to help with the current battle.

Here's one vision I had for the feature (assume no borders with the table, just using for formatting). The most recently used move is at the top, and fills out below.

BATTLE HISTORY (a title/header similar to our menu titles)

Move Damage
S Sacred Fire 22
S Sacred Fire
N Tail Glow
(Swap out)
P DynamicPunch 31 crit!
... ...

Replace the S/P/N with the appropriate symbols for the move category. I know we have the information on the move name, category, and the damage. If the move does not deal damage, then the "Last Damage" stuff doesn't currently track it. So this would need to be updated to somehow include all moves. The "Swap out" I feel is somewhat important as it helps separate what's been going on in the battle. The "crit!" is something we don't have, and unsure if it's worth the extra memory read every 10 frames.

Am interested if another column for other info makes sense here? I expect to be able to fit quite a few moves in this list. I do not expect we need to allow for pagination to see everything; only the last eight or so, or whatever fits really, is adequate.

Also leaving a note here for whoever tackles this (could still be me, I will eventually), to be sure to color the move names just like on the main tracker screen, so this would include the color bar stuff too. Which means, this chart needs to use the Lower box background color. Additionally, the user should be able to click on a move name to lookup information about it. This probably means we want to create the move name itself as a Button and eventually incorporate this into how the main moves are handled (it's currently messy within Input.lua). We can save the main move stuff on the main screen for later when we better handle Battle info to be dynamic or whatever, so don't worry about that here.

jtigues commented 2 years ago

Just mentioning that with the recent ability tracking overhaul, the move tracking framework is in place to capture the information for this screen. Currently it is only being used to see when skillswap/transform/role play are successfully used, but it can easily be added onto. Just need to move the move missed/failed check to inside

jtigues commented 2 years ago

Important information to capture: Action (attack, switch, item) Attack (sword icon): Move name (color with type) Damage (if applicable; color for STAB, maybe have effectiveness carats also) Crit (if applicable) Missed/Failed Move type(symbol; physical, special, status) Source and Target mons (icons with arrows?)

Item (bottle icon): Item name Mon used on Pokeball wiggles??

Switch (pokeball icon): Previous and current mon