//NEW PERSONAL GOD SONYA SCRIPT
//https://youtu.be/FN_A0VZXgyk copy and paste link in browser to learn how to use script
define BTN1 = 17; // TRIANGLE, Y
define BTN2 = 18; // CIRCLE, B
define BTN3 = 19; // CROSS, A
define BTN4 = 20; // SQUARE, X
define BTN5 = 3; // R1, RB
define BTN6 = 4; // R2, RT
define BTN7 = 6; // L1, LB
define BTN8 = 7; // L2, LT
define TOUCH = 27; // TOUCH PAD
define UP = 13; // DPAD UP
define DOWN = 14; // DPAD DOWN
define LEFT = 15; // DPAD LEFT
define RIGHT = 16; // DPAD RIGHT
define MOVE_X = 11; // LEFT ANALOG X
define MOVE_Y = 12; // LEFT ANALOG Y
//ACILSS---------------------------------------------
define BACK = 128; // BACK FLAG
define FORWARD = 129; // FORWARD FLAG



//ACILSS---------------------------------------------
define EOC = 254; // End of Combo
define EOD = 255; // End of Data Segment
//ACILSS---------------------------------------------


define overheadone = 0;
define over = 1;
define cornerover = 2;
define overcrush = 3;
define lowcorner = 4;
define lowsafe = 5;
define overr = 6;
define jumper = 7;
define overK = 8;
data(
overK,
1,DOWN,
9,
1,BACK,
6,
2,BACK,
BTN3,
8,
1,BTN3,
6,
EOC,


lowsafe,
1,BACK,
3,
2,BACK,
BTN4,
7,
1,BTN4,
1,
0,8,
1,BACK,
2,
2,BACK,
BTN2,
8,
1,BTN2,
3,
0,5,
1,FORWARD,
10,
2,FORWARD,
BTN4,
1,
1,BTN4,
10,
0,33,
1,BTN5,
14,
2,BTN5,
FORWARD,
6,
1,BTN5,
7,
2,BTN5,
FORWARD,
9,
1,BTN5,
6,
2,BTN5,
FORWARD,
4,
1,BTN5,
6,
2,BTN5,
FORWARD,
8,
1,BTN5,
5,
1,BACK,
2,
2,BACK,
BTN4,
5,
1,BACK,
8,
1,BTN1,
7,
0,16,
1,BTN3,
9,
0,94,
1,BTN3,
11,
0,41,
1,BTN3,
11,
0,41,
1,BTN3,
12,
0,41,
1,BTN3,
10,
0,5,
1,BTN3,
6,
0,4,
1,BTN3,
7,
0,5,
1,BACK,
11,
0,7,
1,FORWARD,
4,
2,FORWARD,
BTN1,
11,
1,FORWARD,
2,
EOC,
overheadone,
2,BACK,
BTN4,
6,
1,BACK,
5,
0,2,
1,BTN1,
9,
0,9,
1,BTN3,
8,
0,90,
1,FORWARD,
9,
2,FORWARD,
BTN2,
7,
1,BTN2,
4,
0,52,
1,BTN3,
11,
0,12,
1,BTN3,
9,
0,11,
1,BTN3,
9,
0,13,
1,DOWN,
6,
1,BACK,
7,
1,BTN1,
6,
0,40,
1,BTN5,
10,
0,7,
1,BTN5,
8,
0,58,
1,FORWARD,
7,
0,7,
1,FORWARD,
9,
0,6,
1,BTN3,
11,
0,7,
1,BTN3,
5,
0,7,
1,BACK,
7,
1,BACK,
2,
1,BACK,
1,
0,3,
1,FORWARD,
6,
2,FORWARD,
BTN1,
1,
1,BTN1,
6,
0,14,
1,BTN5,
12,
0,7,
1,BTN5,
9,
0,47,
1,BTN5,
12,
0,180,
1,FORWARD,
8,
0,6,
1,FORWARD,
10,
0,4,
1,FORWARD,
10,
0,6,
1,FORWARD,
8,
0,4,
1,FORWARD,
17,
0,21,
1,BTN1,
11,
0,7,
1,BTN4,
9,
0,7,
1,BTN1,
8,
0,6,
1,BTN1,
8,
0,9,
2,BTN3,
BTN4,
19,
1,BTN3,
1,
0,100,
EOC,
overr,
1,BACK,
4,
1,FORWARD,
4,
1,BTN4,
65,
EOC,


cornerover,
1,BACK,
3,
2,BACK,
BTN4,
7,
1,BACK,
6,
0,1,
1,BTN1,
6,
0,9,
1,BTN3,
11,
0,109,
1,BTN3,
9,
0,5,
1,BTN3,
9,
0,58,
1,BTN3,
7,
0,7,
1,BTN3,
7,
0,5,
1,BTN3,
8,
0,4,
1,DOWN,
13,
2,DOWN,
BACK,
6,
3,DOWN,
BACK,
BTN1,
3,
2,BACK,
BTN1,
5,
1,BTN1,
3,
0,33,
1,BTN5,
9,
0,9,
1,BTN5,
9,
0,6,
1,BTN5,
9,
0,84,
1,BTN3,
9,
0,7,
1,BTN3,
6,
0,5,
1,BTN3,
4,
2,BACK,
BTN3,
2,
1,BACK,
9,
2,UP,
BACK,
1,
1,BACK,
1,
0,1,
1,FORWARD,
6,
2,FORWARD,
BTN1,
6,
1,BTN1,
3,
0,100,
1,BTN5,
11,
EOC,
overcrush,
1,BACK,
4,
2,BACK,
BTN4,
5,
1,BACK,
7,
0,1,
1,BTN1,
9,
0,7,
1,BTN3,
12,
0,69,
1,FORWARD,
10,
2,UP,
FORWARD,
20,
1,UP,
1,
2,UP,
BTN4,
1,
1,BTN4,
11,
0,6,
1,DOWN,
4,
2,BTN7,
DOWN,
9,
1,BTN7,
2,
0,24,
1,BTN5,
9,
0,43,
1,FORWARD,
3,
2,UP,
FORWARD,
19,
1,UP,
2,
1,BTN4,
9,
2,BACK,
BTN4,
2,
1,BACK,
3,
2,UP,
BACK,
4,
1,UP,
1,
2,FORWARD,
BTN4,
6,
1,FORWARD,
2,
0,5,
1,BTN5,
7,
0,7,
1,BTN5,
7,
EOC,
lowcorner,
1,FORWARD,
3,
2,FORWARD,
BTN2,
12,
1,FORWARD,
1,
0,9,
2,BTN3,
BTN4,
1,
2,BTN3,
BTN4,
6,
2,BTN3,
BTN4,
3,
1,BTN3,
3,
1,BTN3,
1,
0,12,
2,BTN3,
BTN4,
11,
0,10,
1,BTN1,
8,
0,6,
1,BTN1,
6,
0,6,
1,BTN1,
8,
0,5,
1,BTN1,
7,
0,6,
1,BTN1,
5,
0,4,
1,BTN1,
7,
0,4,
1,BTN1,
8,
0,5,
1,BTN1,
6,
0,5,
1,BTN1,
8,
0,7,
1,BTN1,
8,
0,5,
1,BTN1,
7,
0,6,
1,BTN1,
7,
0,6,
1,BTN1,
8,
0,6,
1,BTN1,
10,
0,5,
1,BTN1,
9,
0,5,
1,BTN1,
10,
0,5,
1,BTN1,
9,
0,6,
1,BTN1,
9,
0,6,
1,BTN1,
7,
0,7,
1,BTN1,
9,
0,6,
1,BTN1,
9,
0,5,
1,BTN1,
11,


EOC,
jumper,
1,DOWN,
2,
2,DOWN,
BTN3,
10,
1,DOWN,
10,
2,DOWN,
BTN4,
14,
1,DOWN,
10,
2,DOWN,
BTN4,
13,
1,DOWN,
22,
0,10,
1,BACK,
2,
2,BACK,
BTN1,
13,
1,BACK,
1,
0,1,
1,FORWARD,
4,
2,FORWARD,
BTN4,
10,
1,BTN4,
2,
0,1,
1,BTN5,
71,
EOC,
EOD );
int i = -1, b, v;
int back = LEFT, forward = RIGHT;
int button_1, button_2, button_3, button_4, button_5;
int value_1, value_2, value_3, value_4, value_5;
int wait_time;
int switch;
int delay_t;
int RUMBLE_TYPE=RUMBLE_A;
int cancel;
int EndOfCombo;
int CanStart;
unmap PS4_LY
main {



// Determine Back and Forward
if(get_val(RIGHT) || get_val(MOVE_X) >= 30) {
back = LEFT; forward = RIGHT;
} else if(get_val(LEFT) || get_val(MOVE_X) <= -30) {
back = RIGHT; forward = LEFT;
}//ACILSS--------------------------------------



// If there is a combo to be executed
if(i >= 0 && delay_t<=0) {
// Execute the combo step-by-step
if(!combo_running(execute_step)) {
if(get_step_values()) {
if(wait_time == 0) {
combo_run(execute_step_no_wait);
} else {
combo_run(execute_step);
}
} else { // the combo finished
i = -1;
}
}

// RS X and Y are in rest - cancel the combo
if ( (abs(get_val(9)) <= 20 && abs(get_val(10)) <= 20) && (abs(get_val (11)) <= 20 && abs(get_val (12)) <= 20) && (!get_val(5) && !get_val(8))) {
i = -1;
combo_stop(execute_step);
}
//CANCEL ----------------------------------------------------------



// Make sure the user inputs does not interfere in the combo
set_val(BTN1 , 0);
set_val(BTN2 , 0);
set_val(BTN3 , 0);
set_val(BTN4 , 0);
set_val(BTN5 , 0);
set_val(BTN6 , 0);
set_val(BTN7 , 0);
set_val(BTN8 , 0);
set_val(UP , 0);
set_val(DOWN , 0);
set_val(LEFT , 0);
set_val(RIGHT , 0);
set_val(MOVE_X , 0);
set_val(MOVE_Y , 0);

// if no combo execute - look for combo activation
} else {
// EDIT THIS PART OF SCRIPT for combo run ---------------------------
//////////////////////////////////////////////////////////////////////////
// Right Stick RIGHT
if (get_val (9) >= 60) { //combo overheadone
i = get_combo_index(overheadone);
}
// Right Stick LEFT
if (get_val (9) <= -60) { //combo over
i = get_combo_index(overheadone);
}
// Right Stick UP
if (get_val (10) <= -60) { //Combo overcrush
i = get_combo_index(overcrush);
}
// Right Stick DOWN
if (get_val (10) >= 60) { //Combo lowsafe
i = get_combo_index(lowsafe);
}
// Left Stick RIGHT
if (get_val (11) >= 60) { //combo cornerover
i = get_combo_index(cornerover);
}
// Left Stick DOWN
if (get_val (12) >= 60) { //Combo lowcorner
i = get_combo_index(lowcorner);
}
// Left Stick LEFT
if (get_val (11) <= -60) {
i = get_combo_index(cornerover);
}
// Left Stick UP
if (get_val (12) <= -80) {
cancel=1;
i = get_combo_index(jumper);
}
if (get_val (PS4_R3)) {
cancel=2;
i = get_combo_index(overr);
}
if (get_val (PS4_L3)) {
cancel=2;
i = get_combo_index(overK);
}
// end editing here --------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////////
}// <combo activation> end
}//<main> block end

// This combo will run a step with wait
combo execute_step {
set_buttons_values();
wait(wait_time);
set_buttons_values();
}

// This combo will run a step without wait
combo execute_step_no_wait {
set_buttons_values();
}


combo RUMBLE_NOTIFICATION {
set_rumble(RUMBLE_TYPE, 100);
wait(300);
reset_rumble ();
}

// Returns the starting index of a combo
function get_combo_index(combo_id) {
i = 0;
while(TRUE) {//ACILSS---------------
v = dbyte(i);
if(v == combo_id) {
return(i + 1);
} else {//====================
while(v != EOC && v != EOD) {//#
i = i + 1;
v = dbyte(i);
}//#
if(v == EOD) break;
else i = i + 1;
}//=============================
}//ACILSS---------------------------
return(-1);
}

// Set the buttons, values and wait time of a step
function get_step_values() {
b = dbyte(i); i = i + 1;
if(b > 5) return(FALSE);

if(b >= 1) {
button_1 = convert_back_forward(dbyte(i)); i = i + 1;
value_1 = 100;
} else { button_1 = -1; value_1 = 0; }

if(b >= 2) {
button_2 = convert_back_forward(dbyte(i)); i = i + 1;
value_2 = 100;
} else { button_2 = -1; value_2 = 0; }

if(b >= 3) {
button_3 = convert_back_forward(dbyte(i)); i = i + 1;
value_3 = 100;
} else { button_3 = -1; value_3 = 0; }

if(b >= 4) {
button_4 = convert_back_forward(dbyte(i)); i = i + 1;
value_4 = 100;
} else { button_4 = -1; value_4 = 0; }

if(b >= 5) {
button_5 = convert_back_forward(dbyte(i)); i = i + 1;
value_5 = 100;
} else { button_5 = -1; value_5 = 0; }

wait_time = dbyte(i); i = i + 1;
wait_time = (wait_time - 1) * 10;
if(wait_time < 0) wait_time = 0;

return(TRUE);
}

// If the step has FORWARD and BACK buttons, set the correct value.
function convert_back_forward(button) {
if(button == FORWARD) {
return(forward);
} else if(button == BACK) {
return(back);
}
return(button);
}

// Set the buttons and values, function used on the combos.
function set_buttons_values() {
if(button_1 != -1) set_val(button_1, value_1);
if(button_2 != -1) set_val(button_2, value_2);
if(button_3 != -1) set_val(button_3, value_3);
if(button_4 != -1) set_val(button_4, value_4);
if(button_5 != -1) set_val(button_5, value_5);
}