diff --git a/source/script_replacement.hpp b/source/script_replacement.hpp
index dc548e9..a331a34 100644
--- a/source/script_replacement.hpp
+++ b/source/script_replacement.hpp
@@ -47,6 +47,7 @@ u64 appeal_lw_replace(L2CAgent* l2c_agent, void* variadic) {
 				"NONE",
 				"MASH\nAIRDODGE",
 				"MASH\nJUMP",
+				"MASH\nATTACK",
 				"INFINITE\nSHIELD",
 				"HOLD\nSHIELD",
 				"LEDGE\nOPTION"
@@ -93,6 +94,21 @@ u64 appeal_s_replace(L2CAgent* l2c_agent, void* variadic) {
 				};
 
 				print_string(acmd.module_accessor, LEDGE_strings[LEDGE_STATE]);
+			} else if (TOGGLE_STATE == MASH_ATTACK) {
+				ATTACK_STATE = (ATTACK_STATE + 1) % NUM_ATTACK_STATES;
+				const char* ATTACK_strings[NUM_ATTACK_STATES] = {
+					"NAIR",
+					"FAIR",
+					"BAIR",
+					"UPAIR",
+					"DAIR",
+					"NEUTRAL B",
+					"SIDE B",
+					"UP B",
+					"DOWN B"
+				};
+
+				print_string(acmd.module_accessor, ATTACK_strings[ATTACK_STATE]);
 			} else {
 				DI_STATE = (DI_STATE + 1) % NUM_DI_STATES;
 				const char* DI_strings[NUM_DI_STATES] = {
diff --git a/source/taunt_toggles.h b/source/taunt_toggles.h
index 2c089df..3fac09e 100644
--- a/source/taunt_toggles.h
+++ b/source/taunt_toggles.h
@@ -16,6 +16,20 @@ int DI_STATE = NONE;
 #define DI_RANDOM_IN_AWAY 9
 #define NUM_DI_STATES 10
 
+/* Attack Option */
+#define MASH_NAIR 0
+#define MASH_FAIR 1
+#define MASH_BAIR 2
+#define MASH_UPAIR 3
+#define MASH_DAIR 4
+#define MASH_NEUTRAL_B 5
+#define MASH_SIDE_B 6
+#define MASH_UP_B 7
+#define MASH_DOWN_B 8
+
+int ATTACK_STATE = MASH_NAIR;
+#define NUM_ATTACK_STATES 9
+
 /* Ledge Option */
 #define RANDOM_LEDGE 0
 #define NEUTRAL_LEDGE 1
@@ -29,11 +43,12 @@ int LEDGE_STATE = RANDOM_LEDGE;
 // Down Taunt
 #define MASH_AIRDODGE 1
 #define MASH_JUMP 2
-#define INFINITE_SHIELD 3
-#define HOLD_SHIELD 4
-#define LEDGE_OPTION 5
+#define MASH_ATTACK 3
+#define INFINITE_SHIELD 4
+#define HOLD_SHIELD 5
+#define LEDGE_OPTION 6
 
 int TOGGLE_STATE = NONE;
-#define NUM_TOGGLE_STATES 6
+#define NUM_TOGGLE_STATES 7
 
 #endif // TAUNT_TOGGLES_H
diff --git a/source/training_mods.hpp b/source/training_mods.hpp
index 0d2cf90..25ed054 100644
--- a/source/training_mods.hpp
+++ b/source/training_mods.hpp
@@ -142,6 +142,30 @@ namespace app::lua_bind {
 					if (TOGGLE_STATE == MASH_JUMP)
 						if (category == FIGHTER_PAD_COMMAND_CATEGORY1)
 							flag |= FIGHTER_PAD_CMD_CAT1_FLAG_JUMP_BUTTON;
+
+					if (TOGGLE_STATE == MASH_ATTACK)
+						if (category == FIGHTER_PAD_COMMAND_CATEGORY1) {
+							switch (ATTACK_STATE) {
+								case MASH_NAIR:
+									flag |= 0x80; break; // FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_AIR_N
+								case MASH_FAIR:
+									flag |= 0x100; break; // FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_AIR_F
+								case MASH_BAIR:
+									flag |= 0x200; break; // FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_AIR_B
+								case MASH_UPAIR:
+									flag |= 0x400; break; // FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_AIR_HI
+								case MASH_DAIR:
+									flag |= 0x800; break; // FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_AIR_LW
+								case MASH_NEUTRAL_B:
+									flag |= FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_N; break;
+								case MASH_SIDE_B:
+									flag |= FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_S; break;
+								case MASH_UP_B:
+									flag |= FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_HI; break;
+								case MASH_DOWN_B:
+									flag |= FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_LW; break;
+							}
+						}
 				}
 			}