XIM4 Battlefield 4 Antirecoil - the best i tested so far
Posted: Thu Feb 18, 2016 2:42 pm
Hi, heres my script which im using on PS4 with Battlefied 4 and XIM4. It has enable/disable option including antirecoil and rapidfire - so you can adjust it for different weapons in battlefield. For example M16A4 needs autofire, but AEK971 doesnt.
Also i have 180 rotation and quick auto spot ;)
Please adjust antirecoil force to value you need (its different for different weapons of course)
Enjoy!
Also i have 180 rotation and quick auto spot ;)
Please adjust antirecoil force to value you need (its different for different weapons of course)
Enjoy!
- Code: Select all
define RAPIDFIRE_ENABLE = TRUE; // TRUE or FALSE
define ANTIRECOIL_ENABLE = TRUE; // TRUE or FALSE
// --
define SPEED = 100;
define TIME = 250;
define BUTTON = PS4_TOUCH;
define XIM4_MIN_VAL = 20;
// The force needed is different when ADS or hip firing
define ANTIRECOIL_FORCE = 5;
define RAPIDFIRE_BUTTON = PS4_R2;
define RATE_OF_FIRE = 15; // Range: 1 to 25 RPS (Round/s)
// Values higher than 25 would be so fast that the
// game probably will not detect 100% of the events.
int tmp, rsf, xcmp;
int hold_time, rest_time;
init {
block_rumble();
rsf = 10000 / (100 - XIM4_MIN_VAL);
hold_time = 500 / RATE_OF_FIRE;
rest_time = hold_time - 10;
if(rest_time < 0) rest_time = 0;
}
main {
if(ANTIRECOIL_ENABLE) {
// AIM down side + aiming and shooting but not moving - enable antirecoil
// AIM down side + aiming and shooting AND moving left or right (i mean aiming) - not walking left or right - disable the antirecoil?
if(get_val(PS4_L2) && get_val(PS4_R2) && isqrt(pow(get_val(PS4_RX), 2) + pow(get_val(PS4_RY), 2)) <= 30) {
//if(get_val(PS4_R2) && (get_ptime(PS4_R2) <= 50 || get_ptime(PS4_R2) >= 100)) {
if(abs(PS4_RX) < 25) {
// Rescale XIM4 aim Y axis
if(get_val(PS4_RY) >= XIM4_MIN_VAL) {
set_val(PS4_RY, get_val(PS4_RY)-XIM4_MIN_VAL);
sensitivity(PS4_RY, NOT_USE, rsf);
} else if(get_val(PS4_RY) <= -XIM4_MIN_VAL) {
set_val(PS4_RY, get_val(PS4_RY)+XIM4_MIN_VAL);
sensitivity(PS4_RY, NOT_USE, rsf);
} else set_val(PS4_RY, 0);
// Rescale XIM4 aim X axis
if(get_val(PS4_RX) >= XIM4_MIN_VAL) {
set_val(PS4_RX, get_val(PS4_RX)-XIM4_MIN_VAL);
sensitivity(PS4_RX, NOT_USE, rsf);
} else if(get_val(PS4_RX) <= -XIM4_MIN_VAL) {
set_val(PS4_RX, get_val(PS4_RX)+XIM4_MIN_VAL);
sensitivity(PS4_RX, NOT_USE, rsf);
} else set_val(PS4_RX, 0);
// X movements compensation
tmp = ANTIRECOIL_FORCE - 3 * abs(get_val(PS4_RX));
// Apply the anti-recoil
if(tmp <= 0) tmp = 1;
tmp = get_val(PS4_RY) + tmp;
if(tmp > 100) tmp = 100;
else if(tmp < -100) tmp = -100;
set_val(PS4_RY, tmp);
// Re-apply deadzone;
deadzone(PS4_RX, PS4_RY, XIM4_MIN_VAL, XIM4_MIN_VAL);
}
}
}
// RAPIDFIRE
if(RAPIDFIRE_ENABLE) {
if(get_val(RAPIDFIRE_BUTTON)) {
combo_run(RapidFire);
} else if(combo_running(RapidFire)) {
combo_stop(RapidFire);
}
}
// HOLD BREATH
if(get_val(PS4_L2) >= 95) {
set_val(PS4_L3, 100);
}
// AUTO SPOT WHEN ADSING (SCOPING)
if(get_val(PS4_L2)) {
combo_run(AutoSpot);
} else combo_stop(AutoSpot);
// ROTATION 180
if(event_press(BUTTON)) {
combo_run(Rotation180);
}
block(BUTTON, 500);
}
combo AutoSpot {
set_val(PS4_R1, 100);
wait(40); wait(240);
}
combo RapidFire {
set_val(RAPIDFIRE_BUTTON, 100);
wait(hold_time);
set_val(RAPIDFIRE_BUTTON, 0);
wait(rest_time);
set_val(RAPIDFIRE_BUTTON, 0);
}
combo Rotation180 {
set_val(PS4_RX, SPEED);
wait(TIME);
}