If MSG_CONFIRM_CARDS is sent just to refresh the knowledge of that player to perform a selection immediately afterwards, (for example confirming 3 cards from the deck so that the opponent can konw what they're choosing), wait before showing it until the next message is parsed, if the first message (ignoring selection hint messages) is a selection message where the cards to be choosen from are the exact same as the ones previously confirmed, proceed directly to the selection, otherwise show the card confirm panel and then proceed with the message parsing.
If a duel ended/restarted while choosing lingering effects to apply, such flag wouldn't have been reset until another lingering effect selection was performed, thus showing ``???`` instead of the location/sequence in each subsequent card selection
Make the race selection dialog no longer use an hardcoded max amount of checkboxes and update its drawing so that all the options are put one after the other rather than having big gaps between the available ones.
Add DuelInfo::HasFieldFlag and DuelInfo::GetPzoneIndex to simplify code flow, no longer use DuelInfo::duel_field where it could be replaced with a check of a specific duel flag, update some variable names to give them more meaning
In b6d8cbde94, specialized ``format`` functions to work for fmt 9.x.x were put in the fmt namespace, avoid possible undefined behaviour and instead redefine those functions to the epro namespace
Reorder the elements of the multi dimensional arrays so that the last 2 elements are the player and the sequence (when present), so that the values are more contiguous in memory and allow simplifying some code. Also keep track of the current field status and store the right values coresponding to the "field" and "speed" values and retrieve them via getters
Implement a 2d topdown duel view, at the moment the only way to toggle that is by using the f9 key or directly edit the config file. Toggling it with the f9 key will also automatically enable the option to retain the field's aspect ratio (as a stretched topdown view isn't very pleasing). Like for the topdown option the aspect ratio toggle for now can only be properly set by manually editing the config file if the keyboard function keys are not available.
Remove ReplayPacket and only use CoreUtils::Packet that will now have the same behaviour as ReplayPacket , that being storing the message as an uint_8 in its structure, and storing the data **without** the packet in its vector.
Depending on the timing they were refreshed, they might have been refreshed while other drawing operations were performed that affected the view projection matrix.
Add an unique lock parameter to WaitFrameSignal, to allow the function being called with an already locked mutex that will then be handled by the condition variable.
Replaces most of the instances of manual lock/unlock with unique_lock(s) and lock_guard(s)