From c735ad5c6e51679c904a1d5365b801169b43072e Mon Sep 17 00:00:00 2001
From: sidschingis <SijingYou92@gmail.com>
Date: Thu, 9 Jul 2020 20:35:44 +0200
Subject: [PATCH] Add Bowser UpB Workaround (#109)

* Add Bowser UpB Workaround

Bowser uses a different status during upB for some reason

* Use Constants
---
 src/training/mash.rs | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/training/mash.rs b/src/training/mash.rs
index dc7547c..9e285a5 100644
--- a/src/training/mash.rs
+++ b/src/training/mash.rs
@@ -386,14 +386,32 @@ unsafe fn get_flag(
     status: i32,
     action_flag: i32,
 ) -> i32 {
-    if StatusModule::status_kind(module_accessor) == status {
+    let current_status = StatusModule::status_kind(module_accessor);
+    if current_status == status {
         // Reset Buffer
         reset();
     }
 
+    // Workaround for Bowser upB
+    check_bowser_up_b(current_status);
+
     return action_flag;
 }
 
+fn check_bowser_up_b(current_status: i32) {
+    // Grounded up B
+    if current_status == *FIGHTER_KOOPA_STATUS_KIND_SPECIAL_HI_G {
+        reset();
+        return;
+    }
+
+    // Aerial up B
+    if current_status == *FIGHTER_KOOPA_STATUS_KIND_SPECIAL_HI_A {
+        reset();
+        return;
+    }
+}
+
 pub unsafe fn perform_defensive_option() {
     reset();