/*
FIFA 16 Combos
- Activate\Desactivate script by pressing XB1_VIEW and XB1_MENU
- press XB1_VIEW an XB1_RIGHT for next skill
- press XB1_VIEW an XB1_LEFT for previous skill
some combos are disabled due to MAX bytecode side limitation
so uncomment your combo if you want to use it and add it to ProcessCombos()
- Doubleclick XB1_LB (skill to the left side) or XB1_RB (skill to the right side) to execute the skill
********
* IMPORTANT INFORMATION
- Im not a fan of activating the skills via LB and RB doubleclicking
specially since FIFA16 the new feature called NO TOUCH DRIBBLING uses the LB button.
so sometimes when you want to execute some skills to the left side, your player will not execute it correctly.
i way to bypass this is by triple clicking the LB button or a better option assing the LEFT skills
to a different button.
maybe a solution to this problem is blocking the LB output to the console totally (send LB as unpress) when you doubleclick on it.
for testing purposes i have also assigned the XB1_RIGHT button to execute left side skills and the skills run just fine.
I use the XB1_LEFT an XB1_RIGHT you can use the one you like. just change the code bellow in line 121.
or someone else code a better doubleclick handler than me :D.
*************
- some skills only can be excecuted to one direction (HeelFlick, etc)
so it doesnt matter which button you doubleclick, you can use both buttons.
- Combo list
- each fifa 16 player has a STAR SKILL rating, so a 3 STAR PLAYER can only execute
1,2, and 3 STAR SKILLS. a 3 STAR PLAYER can not execute 4 and 5 STAR SKILL.
// standing skills not added.
1 STAR SKILLS
- KnockBall, FakeShot
2 STAR SKILLS
- BallRoll, BodyFeintCut, StepOverCut, ReversoStepOverCut, HeelFlick2
3 STAR SKILLS
- HeelFlick, FlickUP, Roulette, FakeAndGo
4 STAR SKILLS
- FakeShotBallHop, HeelToHeel(HeelFlick), Rainbow, AdvRainbow. FeintLeft/Right(FakeAndGo)
- Spin, StopAndTurn, ScoopTurn
5 STAR SKILLS
- Elastico(FakeAndGo), ReverseElastico(FakeAndGo), HocusPocus, TripleElastico
- BallRollFlick, TurnAndSpin(StopAndTurn), ElasticoChop, BolasieFlick
*/
define UP = 0;
define UP_RIGHT = 1;
define RIGHT = 2;
define DOWN_RIGHT = 3;
define DOWN = 4;
define DOWN_LEFT = 5;
define LEFT = 6;
define UP_LEFT = 7;
define MAX_SKILLS = 14; //21;
define FlickTime = 80;
define HoldTime = 300;
data
( 0, 100, 100, 100, 0, 156, 156, 156,
156, 156, 0, 100, 100, 100, 0, 156
);
int scriptON;
int mode;
int dblclick_timer;
int dblclick_count;
int dblclick_msecs;
int x, y, p;
int dTemp, dStart, dMid, dEnd;
// testing purposes. scripts already ON
init {
scriptON = 1;
mode = 1;
}
main {
// ACTIVE SKILLS
if (get_val(XB1_VIEW)) {
if (event_release(XB1_MENU)) {
set_val(XB1_MENU, 0);
scriptON = !scriptON;
}
//NEXT SKILL
if (event_release(XB1_RIGHT)) {
set_val(XB1_RIGHT, 0);
mode = mode + 1;
if (mode > MAX_SKILLS) {
mode = 0;
}
// PREVIOUS SKILL
} else if (event_release(XB1_LEFT)) {
set_val(XB1_LEFT, 0);
mode = mode - 1;
if (mode < 0) {
mode = MAX_SKILLS;
}
}
}
set_val(TRACE_1, scriptON);
set_val(TRACE_2, mode);
if (scriptON) {
if (dbl_clicked(XB1_LB)) {
ProcessCombos(RIGHT, LEFT);
} else if (dbl_clicked(XB1_RB)) {
ProcessCombos(LEFT, RIGHT);
}
// testing purposes for LEFT side combos.
if (event_press(XB1_RIGHT)) {
ProcessCombos(RIGHT, LEFT);
}
}
}
/*
***********
COMBO MACROS
***********
I was trying to decrease the max bytecode side by using repetitive code
on a single combo, but at the end i reached the max allow codeside anyways
so combos added after this doesnt contain hold_RStick, flick_RStick, move_RStick, etc
*/
combo hold_RStick {
calc_relative_xy(dEnd);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(HoldTime);
set_val(XB1_RX, 0);
set_val(XB1_RY, 0);
wait(50);
}
combo flick_RStick {
call(move_RStick)
set_val(XB1_RX, 0);
set_val(XB1_RY, 0);
wait(50);
}
combo move_RStick {
calc_relative_xy(dEnd);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(FlickTime);
}
combo RStick_HalfCircle {
calc_relative_xy(dStart);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(FlickTime);
calc_relative_xy(dMid);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(FlickTime);
calc_relative_xy(dEnd);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(FlickTime);
}
// 1 STAR SKILL
/*combo KnockOn {
dEnd = UP;
call(hold_RStick)// increase holdtime to knock the ball further
}
combo FakeShotStop {
set_val(XB1_LX, 0);
set_val(XB1_LY, 0);
set_val(XB1_B, 100);
wait(80);
set_val(XB1_LX, 0);
set_val(XB1_LY, 0);
set_val(XB1_A, 100);
set_val(XB1_B, 100);
wait(80);
set_val(XB1_LX, 0);
set_val(XB1_LY, 0);
set_val(XB1_A, 100);
set_val(XB1_B, 0);
wait(80);
set_val(XB1_LX, 0);
set_val(XB1_LY, 0);
set_val(XB1_A, 0);
}*/
// 2 START SKILLS
combo BallRoll{
call(hold_RStick);
}
combo BodyFeintCut {
dEnd = dStart
call(flick_RStick);
// uncomment code if you want 45 degree cut
// if (dTemp == RIGHT) dTemp = UP_RIGHT;
// if (dTemp == LEFT) dTemp = UP_LEFT;
// 90 degree cut - left side nerfed by fifa developers
calc_relative_xy(dTemp) //
set_val(XB1_LX, x)
set_val(XB1_LY, y)
wait(400) // 80 ms
}
/*combo StepOverCut {
calc_relative_xy(UP);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(80);
calc_relative_xy(dStart);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(80);
// uncomment code if you want 45 degree cut
// if (dEnd == RIGHT) dEnd = UP_RIGHT;
// if (dEnd == LEFT) dEnd = UP_LEFT;
// 90 degree cut - left side nerfed by fifa developers
calc_relative_xy(dEnd) //
set_val(XB1_LX, x)
set_val(XB1_LY, y)
wait(400)
}*/
combo ReversoStepOverCut {
calc_relative_xy(dStart);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(80);
calc_relative_xy(UP);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(80);
// 45 degree cut enabled
// for some strange reason if else block gives wrong result.
if (dEnd == RIGHT) dEnd = UP_RIGHT;
if (dEnd == LEFT) dEnd = UP_LEFT;
calc_relative_xy(dEnd) //
set_val(XB1_LX, x)
set_val(XB1_LY, y)
wait(400) // 80 ms
}
combo HeelFlick2 {
set_val(XB1_LT, 100);
set_val(XB1_B, 100);
wait(100);
set_val(XB1_LT, 100);
set_val(XB1_A, 100);
set_val(XB1_B, 100);
wait(50);
set_val(XB1_LT, 100);
set_val(XB1_A, 100);
set_val(XB1_B, 0);
wait(100);
set_val(XB1_LT, 100);
set_val(XB1_A, 0);
wait(100);
}
// 3 START SKILL
combo HeelFlick {
dEnd = UP;
call(flick_RStick);
dEnd = DOWN;
call(flick_RStick);
}
/*combo FlickUP {
dEnd = UP
call(flick_RStick)
call(flick_RStick)
call(flick_RStick)
}*/
combo Roulette {
dStart = DOWN
dMid = dEnd
dEnd = UP
call(RStick_HalfCircle)
}
combo FakeAndGo {
dMid = DOWN
call(RStick_HalfCircle)
}
// 4 START SKILL
/*combo FakeShotBallHop {
call(FakeShotStop);
set_val(XB1_RS, 100);
wait(200)
}*/
combo Rainbow {
dEnd = DOWN
call(flick_RStick)
dEnd = UP
call(flick_RStick)
call(flick_RStick)
}
/*combo AdvRainbow {
dEnd = DOWN
call(flick_RStick)
dEnd = UP
calc_relative_xy(UP);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(600);
set_val(XB1_RX, 0);
set_val(XB1_RY, 0);
wait(30);
call(flick_RStick)
}*/
combo Spin {
if (dEnd == RIGHT) dEnd = DOWN_RIGHT
else dEnd = DOWN_LEFT
call(flick_RStick)
call(flick_RStick)
}
combo StopAndTurn {
dEnd = UP
call(flick_RStick)
dEnd = dTemp
call(flick_RStick)
}
combo RonaldoChop {
// press RT (sprint button) to do
// a 90 degree fakeshot while running
calc_relative_xy(dEnd);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_LT, 100);
set_val(XB1_B, 100);
wait(100);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_LT, 100);
set_val(XB1_A, 100);
set_val(XB1_B, 100);
wait(50);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_LT, 100);
set_val(XB1_A, 100);
set_val(XB1_B, 0);
wait(100);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_LT, 100);
set_val(XB1_A, 0);
wait(100);
}
/*combo ScoopTurn {
// not the best one but seems to work. 80%
// if you have a better one share it :D
// 45 degree cut/turn
// if (dEnd == RIGHT) dEnd = UP_RIGHT;
// if (dEnd == LEFT) dEnd = UP_LEFT;
// little hack to slow player's speed
set_val(XB1_LT, 100);
wait(400);
calc_relative_xy(dEnd);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_B, 100);
set_val(XB1_LT, 100);
wait(100);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_A, 100);
set_val(XB1_B, 100);
set_val(XB1_LT, 100);
wait(100);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_A, 100);
set_val(XB1_B, 0);
set_val(XB1_LT, 100);
wait(100);
set_val(XB1_LX, x)
set_val(XB1_LY, y)
set_val(XB1_A, 0);
set_val(XB1_LT, 100);
wait(100);
// little hack to slow players speed and to avoid ronaldochop animation
set_val(XB1_LT, 100);
wait(400);
}
// 5 START SKILL
combo HocusPocusElastico {
calc_relative_xy(DOWN)
set_val(XB1_RX, x)
set_val(XB1_RY, y)
wait(FlickTime)
dMid = DOWN
dEnd = dTemp;
call(RStick_HalfCircle)
}*/
combo BallRollFlick {
dEnd = dStart
call(BallRoll)
dEnd = dTemp
// change dEnd to UP to flick the ball to the front
// if (mode == 13) dEnd = UP
call(move_RStick)
}
combo ElasticoChop {
dEnd = DOWN
call(flick_RStick)
dEnd = dTemp
call(flick_RStick)
}
combo BolasieFlick {
set_val(XB1_RB, 100);
calc_relative_xy(UP);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(80);
set_val(XB1_RB, 100);
set_val(XB1_RX, 0);
set_val(XB1_RY, 0);
wait(50);
set_val(XB1_RB, 100);
calc_relative_xy(dEnd);
set_val(XB1_RX, x);
set_val(XB1_RY, y);
wait(80);
}
function ProcessCombos(fromSide, toSide) {
if (mode) {
// dEnd = side for skill execution
// dTemp = copy of dEnd
// dStart = opposite side
// for example
// if dEnd = RIGHT then dStart = LEFT
// if dEnd = LEFT then dStart = RIGHT
dStart = fromSide;
dEnd = toSide;
dTemp = toSide;
if (mode == 1) combo_run(BallRoll)
else if (mode == 2) combo_run(BodyFeintCut)
else if (mode == 3) combo_run(ReversoStepOverCut)
else if (mode == 4) combo_run(HeelFlick2)
else if (mode == 5) combo_run(HeelFlick)
else if (mode == 6) combo_run(FakeAndGo)
else if (mode == 7) combo_run(Roulette)
else if (mode == 8) combo_run(Rainbow)
else if (mode == 9) combo_run(StopAndTurn)
else if (mode == 10) combo_run(Spin)
else if (mode == 11) combo_run(RonaldoChop)
else if (mode == 12) combo_run(BallRollFlick)
else if (mode == 13) combo_run(ElasticoChop)
else if (mode == 14) combo_run(BolasieFlick)
/* else if (mode == 1) combo_run(KnockOn)
else if (mode == 3) combo_run(StepOverCut)
else if (mode == 6) combo_run(FlickUP)
else if (mode == 2) combo_run(FakeShotStop)
else if (mode == 5) combo_run(FakeShotBallHop)
else if (mode == 9) combo_run(AdvRainbow)
else if (mode == 11) combo_run(ScoopTurn)
else if (mode == 13) combo_run(HocusPocusElastico)
*/
}
}
function calc_relative_xy(d) {
if(get_val(XB1_LX) >= 50) x = 100;
else if(get_val(XB1_LX) <= -50) x = -100;
else x = 0;
if(get_val(XB1_LY) >= 50) y = 100;
else if(get_val(XB1_LY) <= -50) y = -100;
else y = 0;
set_val(TRACE_1, x);
set_val(TRACE_2, y);
if(x != 0 || y != 0) {
p = 0; while(p < 8) {
if(dchar(p) == x && dchar(8 + p) == y) {
break;
} p = p + 1;
}
p = p + d;
if(p >= 8) p = p - 8;
x = dchar(p);
y = dchar(8 + p);
}
return;
}
function dbl_clicked(button) {
if (dblclick_timer) {
dblclick_msecs = dblclick_msecs + get_rtime();
if ( dblclick_msecs > 500 ) {
dblclick_count = 0;
dblclick_msecs = 0;
dblclick_timer = FALSE;
}
}
if (event_release(button) && get_ptime(button) < 150) {
if (dblclick_count == 0) {
dblclick_timer = TRUE;
} else if (dblclick_count == 1) {
dblclick_count = 0;
return 1;
}
dblclick_count = dblclick_count + 1;
}
}