#pragma METAINFO("BO4 BLACKOUT", 1, 0, "bonefisher")
#include <display.gph>
#define wait(a) wait((int)a);
#define float fix32
float rf_active, rf_release;
uint8 bUseAntiRecoil = 1;
uint16 ARecoilDelay = 0;
float MinARecoilPercent = 18.0;
float StickNoise = 6.50;
int psv;
int arv;
int i;
int b;
const fix32 wcfg[] =
{
/*rf_active| rf_release*/
76.0, 0.0, //blink 0
37.5, 37.5, //blink 1
64.0, 16.3, //blink 2
40.5, 120.0,//blink 3
60.0, 120.0,//blink 4
80.0, 120.0,//blink 5
240.0, 40.0,//blink 6
340.0, 80.0,//blink 7
540.0, 80.0 //blink 8
};
const fix32 warcfg[] =
{ //anti_recoil
/*vertical| horizontal*/
16.0, 0.0,//blink 0
20.0, 0.0,//blink 1
24.0, 0.0,//blink 2
26.0, 0.0,//blink 3
28.0, 0.0,//blink 4
30.0, 0.0,//blink 5
32.0, 0.0,//blink 6
36.0, 0.0,//blink 7
40.0, 0.0 //blink 8
};
init
{
psv = 0;
i = 0;
arv = 0;
b = 0;
}
main {
// - WEAPON TRACKING - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define WEAPON_PRIMARY 0
#define WEAPON_SECONDARY 1
static uint8 weapon;
if(event_active(BUTTON_5) && time_release(BUTTON_5) <= 200) {
weapon = WEAPON_SECONDARY;
display_overlay(_P_, 500);
} else if(event_release(BUTTON_5)) {
weapon = WEAPON_PRIMARY;
display_overlay(_S_, 500);
}
if(is_active(BUTTON_8))
{
set_val(BUTTON_10, 0.0);
if(event_active(BUTTON_10)){
psv = psv + 1;
i = i + 1;
if(psv > 8) psv = 0;
if(i > 8) i = 0;
pmem_write(1, psv);
pmem_write(18, i);
pmem_save();
Blink(i);
}
}
// - RAPIDFIRE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if(get_actual(BUTTON_5)) {
if(weapon) { // SECONDARY
if(event_active(BUTTON_5)) {
rf_active = 37.5;
rf_release = 37.5;
} combo_run(Rapidfire);
} else { // PRIMARY
if(event_active(BUTTON_5)) {
rf_active = wcfg[2*psv+0];
rf_release = wcfg[2*psv+1];
} combo_run(Rapidfire);
}
} else combo_stop(Rapidfire);
// - ANTI RECOIL - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if(is_active(BUTTON_8))
{
set_val(BUTTON_11, 0.0);
if(event_active(BUTTON_11)){
arv = arv + 1;
b = b + 1;
if(arv > 8) arv = 0;
if(b > 8) b = 0;
pmem_write(5, arv);
pmem_write(22, b);
pmem_save();
Blinks(b);
}
}
if (get_actual(BUTTON_5) && time_active(BUTTON_5) >= ARecoilDelay)
{
if (abs(get_actual(STICK_1_X)) < StickNoise) set_val(STICK_1_X, 0.0);
if (abs(get_actual(STICK_1_Y)) < StickNoise) set_val(STICK_1_Y, 0.0);
if (abs(get_actual(STICK_2_X)) < StickNoise) set_val(STICK_2_X, 0.0);
if (abs(get_actual(STICK_2_Y)) < StickNoise) set_val(STICK_2_Y, 0.0);
if (bUseAntiRecoil == 1)
{
if (get_actual(BUTTON_8) && get_val(BUTTON_5))
{
AntiRecoil(STICK_1_Y, warcfg[2*arv+0]);
AntiRecoil(STICK_1_X, warcfg[2*arv+1]);
}
}
}
// - COMMON MODS - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if(get_actual(BUTTON_5)) {
set_val(BUTTON_5, 100.0); // HAIR TRIGGGER
}
if(get_actual(BUTTON_8)) {
if(get_actual(BUTTON_8) && time_active(BUTTON_8)>= 140) {
set_val(BUTTON_9, 100.0); // HOLD BREATH
}
set_val(BUTTON_8, 100.0); // HAIR TRIGGGER
}
// - SPRINT MOD - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define SPRINT_OFF 0
#define SPRINT_ON 1
static uint8 sprint;
if(event_active(BUTTON_16)|| event_active(BUTTON_5)||
event_active(BUTTON_9)|| is_active(STICK_2_Y)
&& time_release(STICK_2_Y) < 250)
{
sprint = SPRINT_ON;
goto SPRINT_LIGHTBAR;
}
else if(event_active(BUTTON_8)|| event_active(BUTTON_15)||
event_active(BUTTON_17))
{
if(sprint || !sprint)
{
switch(sprint)
{
case SPRINT_OFF: sprint = SPRINT_ON; break;
case SPRINT_ON: sprint = SPRINT_OFF; break;
}
} else sprint = SPRINT_OFF;
SPRINT_LIGHTBAR:
led_reset();
switch(sprint)
{
case SPRINT_OFF: display_overlay(_0_, 500); break;
case SPRINT_ON: display_overlay(_1_, 500); break;
}
}
if(sprint == SPRINT_ON && get_actual(STICK_2_Y) < -95.0){
combo_run(easy_sprint);
}
if(sprint == SPRINT_OFF){
set_val(STICK_2_X, get_val(STICK_2_X) / 1.1);
set_val(STICK_2_Y, get_val(STICK_2_Y) / 1.1);
}
if(get_actual(STICK_2_Y) < -75.0 &&
event_release(BUTTON_15) && time_active(BUTTON_15) < 160)
{
combo_run(BO4_Slide);
}
}
combo Rapidfire
{
set_val(BUTTON_5, 100.0);
wait(rf_active);
set_val(BUTTON_5, rf_release ? 0.0 : 100.0);
wait(rf_release);
set_val(BUTTON_5, rf_release ? 0.0 : 100.0);
}
combo easy_sprint
{
set_val(BUTTON_9, 0.0);
wait(200);
set_val(BUTTON_9, 100.0);
wait(80);
set_val(BUTTON_9, 100.0);
}
combo BO4_Slide
{
set_val(STICK_2_Y,-100.0);
wait(20);
set_val(STICK_2_Y,-100.0);
set_val(BUTTON_9,100.0);
wait(50);
set_val(STICK_2_Y,-100.0);
set_val(BUTTON_15,100.0);
wait(200);
set_val(STICK_2_Y,-100.0);
wait(300);
}
void AntiRecoil(uint8 AxisToApply, float ARecoilToApply)
{
float CurrentX = get_val(STICK_1_X);
float CurrentY = get_val(STICK_1_Y);
float MinARecoilFactor = MinARecoilPercent / 100.0;
float MinARecoilToApply = MinARecoilFactor * ARecoilToApply;
//This sets the ARecoil to be dependent on both X and Y axis movement. With more emphasis on Y
float MovementARecoilToApply = (1.0 - MinARecoilFactor) * ((ARecoilToApply * (100.0 - sqrt(CurrentX*CurrentX + CurrentY*CurrentY))) / (100.0 + abs(CurrentX) + (CurrentY*CurrentY*0.5)));
set_val(AxisToApply, MinARecoilToApply + MovementARecoilToApply + get_val(AxisToApply));
}
bool blinking;
void Blink(uint8 no) {
led_reset();
if(no) led_vmset(LED_1, 150, 500, i+1);
blinking = 1;
}
bool blinker;
void Blinks(uint8 nos) {
led_reset();
if(nos) led_vmset(LED_1, 150, 500, b+1);
blinker = 1;
}
main {
if(blinking && !led_vmget(LED_1)) {
led_reset();
blinking = 0;
}
if(blinker && !led_vmget(LED_1)) {
led_reset();
blinker = 0;
}
}
ADS DELAY
https://www.consoletuner.com/forum/viewtopic.php?f=26&t=11291
merging scripts:
https://www.consoletuner.com/forum/viewtopic.php?f=26&t=11528
SLIDE MELEE
https://www.consoletuner.com/forum/viewtopic.php?f=26&t=11310
AUTOSTRAFE
https://www.consoletuner.com/forum/viewtopic.php?f=26&t=11222
main {
if(get_val(BUTTON_8) && event_active(BUTTON_5)) {
combo_run(AutoStrafe);
}
}
combo AutoStrafe {
set_val(STICK_2_Y, -100.0);
wait(50);
set_val(STICK_2_Y, -100.0);
set_val(BUTTON_9, 100.0);
wait(50);
set_val(STICK_2_Y, -100.0);
wait(50);
set_val(STICK_2_Y, -100.0);
set_val(BUTTON_15, 100.0);
wait(50);
}