Modify Halo 2 Classic script

GPC2 script programming for Titan Two. Code examples, questions, requests.

Modify Halo 2 Classic script

Postby Squidward » Tue Sep 01, 2020 7:32 am

Is there someone who would be able to modify this script I've been using for Halo 2 Classic? It's an interactive config script. I'm hoping that someone would be able to add an option to the interactive config to set the button layout (I had to manually set it to Universal Reclaimer) and I'm hoping someone might be able to add the option to choose which button triggers the Fire Mode. I'd like it to be on Left Bumper since that goes unused on Universal Reclaimer but figured it would be best to be able to just choose which button it is with the interactive config.

Code: Select all
/* --------------------------------------------------------------------------
 *  Halo 2 Classic Custom Script
 * -------------------------------------------------------------------------- */

 
/*** shortdesc
<shortdesc>
Halo 2 Classic Custom Script<br>
Titan Two conversion<br>
<br>
<br>
 
Features:
<ul>
<li>Interactive configuration</li>
<li>Fiveshot</li>
<li>Doubleshot with melee</li>
<li>Rapid Fire (left & right)</li>
<li>Melee</li>
<li>Quick Reload</li>
</ul>
 
Notes: You'll find more information in the Interactive Configuration or click the DOC link.
</shortdesc>
***/

 
/*** keywords and docurl
<keywords>Halo 2, rapid fire, quick reload, doubleshot</keywords>
 
<docurl>https://www.consoletuner.com/forum/viewtopic.php?f=23&t=6910</docurl>
 
***/

 
/** Interactive configuration
<cfgdesc>
[Halo 2]
control   = info
shortdesc    = <<<MULTILINE
Halo 2 Classic Custom Script<br>
Titan Two Conversion
MULTILINE
 
[Save changes]
byteoffset    = 100
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Save changes
shortdesc   = If enabled, the script will save changes made in-game to any of the options below.
 
 
[Firemode]
byteoffset    = 0
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Firemode
shortdesc   = In-game on/off: <b>DPAD-Up + RT</b>
 
 
[Firemode Type]
byteoffset    = 1
bitsize        = 8
control        = combobox
default        = 0
item            = Fiveshot
item            = RRXYY
item            = XSV 261
item            = XSV 271
shortdesc   = Initial Firemode <br>In-game cycle: <b>DPAD-Left + RT</b>
 
 
[Fiveshot Timing]
collapsible = 2
control     = info
shortdesc   = <<<MULTILINE
Time Adjustments for Firemode:Fiveshot Combo
Presets:
MULTILINE
 
 
[Fiveshot Pre]
group     = true
color            = #008000
control   = config
item      = J2kbr Firemode . Fiveshot Timing : #01:00#0A:145A148200F01414
item      = Old Firemode . Fiveshot Timing : #01:00#0A:1446148200D21414
 
 
[Fiveshot Right Fire PRESS]
group       = true
byteoffset  = 10
bitsize     = 8                   
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <<<MULTILINE
 
<b>Firemode . Fiveshot</b> Fire Button Press Time
MULTILINE
 
[Fiveshot Fiveshot Right Fire RELEASE]
group       = true
byteoffset  = 11
bitsize     = 8                   
control     = spinbox
default     = 90
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Fire Button Release Time
 
[Fiveshot Fiveshot Reload PRESS]   
group       = true
byteoffset  = 12
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Reload Button Press Time
 
[Fiveshot Fiveshot Reload RELEASE]   
group       = true
byteoffset  = 13
bitsize     = 8       
control     = spinbox
default     = 130
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Reload Button Release Time
 
[Fiveshot Fiveshot Wait After YY]
group       = true
byteoffset  = 14
bitsize     = 16       
control     = spinbox
default     = 240
minimum     = 10
maximum     = 500
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Wait Time after YY call
 
[Fiveshot YY B_Weapon PRESS]
group       = true
byteoffset  = 16
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot : YY</b> B_Weapon Button Press Time
 
[Fiveshot YY B_Weapon RELEASE]       
group       = true
byteoffset  = 17
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot : YY</b> B_Weapon Button Release Time
 
 
 
[RRXYY Timing]
collapsible = 2
control     = info
shortdesc   = <<<MULTILINE
Time Adjustments for Firemode:RRXYY Combo
 
Presets:
MULTILINE
 
 
[RRXYY Pre]
group     = true
color            = #008000
control   = config
item      = Slow Firemode . RRXYY Timing : #14:5A50648C029E465A3C02A8
item      = Mid   Firemode . RRXYY Timing : #14:5A4664820140465A1E01F4
item      = Fast Firemode . RRXYY Timing : #14:5A50506E01B846503C01EA
item      = Old   Firemode . RRXYY Timing : #14:642D3C3C008C14141400D2
 
[RRXYY_R11]
group       = true
byteoffset  = 20
bitsize     = 8                   
control     = spinbox
default     = 100
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <<<MULTILINE
 
<b>Firemode . RRXYY 1:</b> Fire Button Press Time
MULTILINE
 
[RRXYY_R10]
group       = true
byteoffset  = 21
bitsize     = 8                   
control     = spinbox
default     = 45
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 2:</b> Fire Button Release Time
 
[FRRXYY_R21]   
group       = true
byteoffset  = 22
bitsize     = 8       
control     = spinbox
default     = 60
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 3:</b> Fire Button Press Time
 
[RRXYY_X11]   
group       = true
byteoffset  = 23
bitsize     = 8       
control     = spinbox
default     = 60
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 4:</b> Reload Button Press Time
 
[RRXYY_X10]
group       = true
byteoffset  = 24
bitsize     = 16       
control     = spinbox
default     = 140
minimum     = 10
maximum     = 1000
step        = 1
shortdesc   = <b>Firemode . RRXYY 5:</b> Reload Button Release Time
 
[RRXYY_B11]
group       = true
byteoffset  = 26
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 6:</b> Weapon Button Press Time
 
[RRXYY_B10]       
group       = true
byteoffset  = 27
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 7:</b> Weapon Button Release Time
 
[RRXYY_B21]       
group       = true
byteoffset  = 28
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 8:</b> Weapon Button Press Time
 
[RRXYY_B20]       
group       = true
byteoffset  = 29
bitsize     = 16
control     = spinbox
default     = 210
minimum     = 10
maximum     = 1000
step        = 1
shortdesc   = <b>Firemode . RRXYY 9:</b> Weapon Button Release Time
 
 
[Left Rapid Fire]
byteoffset    = 2                   
bitsize        = 1                     
bitoffset = 0                     
control        = checkbox
default        = 0
item            = Enable Left Rapid Fire
shortdesc   = In-game on/off: <b>DPAD-Up + LT</b>
 
[Right Rapid Fire]
byteoffset    = 3
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Right Rapid Fire
shortdesc   = In-game on/off: <b>DPAD-Up + Y</b>
 
[Melee Mode]
byteoffset    = 4
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Melee Mode
shortdesc   = In-game on/off: <b>DPAD-Up + RB</b>
 
[Doubleshot Melee]
byteoffset    = 5
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Doubleshot Melee combo. Usage: Button A
shortdesc   = In-game on/off: <b>DPAD-Up + A</b>
 
 
[Fast Reload]
byteoffset    = 6
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Fast Reload
shortdesc   = In-game on/off: <b>DPAD-Up + B</b>
 
</cfgdesc>
 
**/

 
#include <xb1.gph>
 
#define FIVESHOT                             1
#define RRXYY                                2
#define XSV_261                              3
#define XSV_271                              4
 
// Button Layout                            - Universal Reclaimer
#define B_RFIRE                              XB1_RT
#define B_LFIRE                              XB1_LT
#define B_WEAPON                             XB1_Y
#define B_RELOAD                             XB1_X
#define B_MELEE                              XB1_RB
#define B_CROUCH                             XB1_LS
#define B_JUMP                               XB1_A
#define B_FLASHLIGHT                         XB1_LB
#define B_A                                     XB1_A
 
/**
// Button Layout                            - Universal Bump & Jump
#define B_RFIRE                              XB1_RT
#define B_LFIRE                              XB1_LT
#define B_WEAPON                             XB1_Y
#define B_RELOAD                             XB1_B
#define B_MELEE                              XB1_RB
#define B_CROUCH                             XB1_LS
#define B_JUMP                               XB1_LB
#define B_FLASHLIGHT                         XB1_RIGHT
#define B_A                                     XB1_A
**/

 
// MOD1 Button
//define B_MOD1                               = XB1_RB;
 
// Enable/Disable MODs
#define RIGHT_RAPIDFIRE                      FALSE
#define LEFT_RAPIDFIRE                       FALSE
#define MOD1_ENABLED                         FALSE // ?? swaps Down & RB
//#define MOD2_ENABLED                         TRUE
#define DOUBLESHOTMELEE                      FALSE
#define MELEE_ENABLED                        FALSE
#define QUICK_RELOAD                         FALSE
 
// Set inital fire mode (FIVESHOT or RRXYY or XSV_261 or XSV_271)
uint8 FIRE_MODE = FIVESHOT;
 
// -----------------------------------------------------------------------------
//  The actual script starts from here. The code below does not need be changed.
// -----------------------------------------------------------------------------
#define MOD_TOGGLE                           XB1_UP // Individual MODs toogle
#define FIVESHOT_MODE_TOGGLE                 XB1_LEFT // Individual MODs toogle
 
bool RapidfireRight_OnOff = RIGHT_RAPIDFIRE;
bool RapidfireLeft_OnOff  = LEFT_RAPIDFIRE;
bool FireMode_OnOff       = FALSE;
//bool FlagDouble_Toogle    = FALSE;
bool QuickReload_OnOff      = QUICK_RELOAD;
bool Melee_OnOff              = MELEE_ENABLED;
bool DblShotMelee_OnOff      = DOUBLESHOTMELEE;
 
bool SAVE_CHANGES = FALSE;
 
// five shot timings                                 // j2kbr timings // v1.00 timings
uint8   FSHOT_RiFiPWait;    // right fire press wait  : wait(20);       wait(20);
uint8   FSHOT_RiFiRWait;    // right fire release wait: wait(90);       wait(70);
uint8   FSHOT_ReloadPWait;  // reload press wait      : wait(20);       wait(20);
uint8   FSHOT_ReloadRWait;  // reload release wait    : wait(130);      wait(130);
uint16  YYAwait;            // YY-Combo Wait after    : wait(240);      wait(210); // fiveshot
 
 
// rrxyy timings   // org timings
uint8   RRXYY_R11; // 100
uint8   RRXYY_R10; //  45
uint8   RRXYY_R21; //  60
uint8   RRXYY_X11; //  60
uint16  RRXYY_X10; // 140
uint8   RRXYY_Y11; //  20
uint8   RRXYY_Y10; //  20
uint8   RRXYY_Y21; //  20
uint16  RRXYY_Y20; // 210
 
// YY timings                     // same as old timings, no changes
uint8 YY_BWPWait;       //  B_Weapon press wait  : wait(20);           
uint8 YY_RWPWait;       //  B_Weapon release wait: wait(20);           
 
// helper variables
uint8 iRumble=0;    // Rumble 1,2,3 or 4 times
uint8 iwait=0;    // wait value for overriding unnecessary waits
bool ICUpdate = FALSE; // if the interactive configuration window should get an update
uint32 ICULast = system_time(); // time tracker for last UI update
bool PMSaveNow = FALSE; // if the pmem should be written to the memory
uint32 PMSLast = system_time(); // time tracker for last PMEM Save operation
// record rrxyy timing during play
uint8 Record=0;
 
init {
    pmem_load();
    FireMode_OnOff = pmem_read(0);
    FIRE_MODE = pmem_read(1);
    FIRE_MODE++;
    RapidfireLeft_OnOff = pmem_read(2);
    RapidfireRight_OnOff = pmem_read(3);
    Melee_OnOff = pmem_read(4);
    DblShotMelee_OnOff = pmem_read(5);
    QuickReload_OnOff = pmem_read(6);
 
  pmem_read(10,&FSHOT_RiFiPWait);
  pmem_read(11,&FSHOT_RiFiRWait)
  pmem_read(12,&FSHOT_ReloadPWait);
  pmem_read(13,&FSHOT_ReloadRWait);
  pmem_read(14,&YYAwait);    //uint16
 
  pmem_read(16,&YY_BWPWait);
  pmem_read(17,&YY_RWPWait);
 
  pmem_read(20,&RRXYY_R11); // 100
  pmem_read(21,&RRXYY_R10); //  45
  pmem_read(22,&RRXYY_R21); //  60
  pmem_read(23,&RRXYY_X11); //  60
  pmem_read(24,&RRXYY_X10); // 140
  pmem_read(26,&RRXYY_Y11); //  20
  pmem_read(27,&RRXYY_Y10); //  20
  pmem_read(28,&RRXYY_Y21); //  20
  pmem_read(29,&RRXYY_Y20); // 210
 
    SAVE_CHANGES = pmem_read(100);
}
 
main {
    // MOD 1 BUTTON
    if(MOD1_ENABLED) {
       swap(XB1_DOWN, XB1_RB);
    }
 
    // Rapidfire Right toggle
    if(get_val(MOD_TOGGLE) && event_active(B_WEAPON)) {
        RapidfireRight_OnOff = !RapidfireRight_OnOff;
         if (RapidfireRight_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(3,RapidfireRight_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
    // If rapidfire right is enabled
    if(!FireMode_OnOff && RapidfireRight_OnOff && get_val(B_RFIRE)) {
        combo_run(RapidfireRight);
    } else combo_stop(RapidfireRight);
 
 
    // Rapidfire Left toggle
    if(get_val(MOD_TOGGLE) && event_active(B_LFIRE)) {
        RapidfireLeft_OnOff = !RapidfireLeft_OnOff;
         if (RapidfireLeft_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(2,RapidfireLeft_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
    // If rapidfire left is enabled
    if(RapidfireLeft_OnOff && get_val(B_LFIRE)) {
        combo_run(RapidfireLeft);
    }
 
    // Fiveshot Master toggle
    if(get_val(MOD_TOGGLE) && event_active(B_RFIRE)) {
        FireMode_OnOff = !FireMode_OnOff;
         if (FireMode_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(0,FireMode_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
     // Fiveshot type toggle
     if (get_val(FIVESHOT_MODE_TOGGLE) && event_active(B_RFIRE)) {
        if ( FIRE_MODE < 4 ) FIRE_MODE++;
        else FIRE_MODE = 1;
        iRumble = FIRE_MODE;
        combo_run(cmbRumble);
        pmem_write(1,(FIRE_MODE-1));
        PMSaveNow = TRUE; ICUpdate = TRUE;
     }
 
    // If fiveshot is enabled
    if(FireMode_OnOff && get_val(B_RFIRE)) {
        if(FIRE_MODE == FIVESHOT) {
            combo_run(_FIVESHOT);
        } else
        if(FIRE_MODE == RRXYY && Record == 0) {
            combo_run(_RRXYY);
        } else
        if(FIRE_MODE == XSV_261) {
            combo_run(_XSV_261);
        }else
        if(FIRE_MODE == XSV_271) {
            combo_run(_XSV_271);
        }
    }
 
    // MOD 1 /FLAGCARRY
    //if(MOD1_ENABLED) {
        // Flagcarry toggle
        //if(get_val(XB1_UP) && event_active(XB1_DOWN)) {
        //    FlagDouble_Toogle = !FlagDouble_Toogle;
        //}
    //}
 
    // Melee enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_MELEE)) {
        Melee_OnOff = !Melee_OnOff;
         if (Melee_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(4,Melee_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
 
    // Melee
     if(Melee_OnOff) {
         if(get_val(B_MELEE)) {
            combo_run(Crouch);
            combo_run(BXB);
        }
     }
 
 
 
    // Quick Reload enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_RELOAD)) {
        QuickReload_OnOff = !QuickReload_OnOff;
         if (QuickReload_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(6,QuickReload_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
    // QUICK RELOAD
    if(QuickReload_OnOff) {
        if(event_release(B_RELOAD) && time_active(B_RELOAD) < 200) {
            combo_run(FastReload);
        }
    }
 
 
     // Doubleshot & melee enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_A)) {
        DblShotMelee_OnOff = !DblShotMelee_OnOff;
         if (DblShotMelee_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(5,DblShotMelee_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
    // Doubleshot with melee
    if(DblShotMelee_OnOff) {
        if(get_val(B_A)) {
            combo_run(RRBx);
        }
    }
 
    // Make sure user inputs does not interfere with the running combo
    if((_FIVESHOT) || (_RRXYY)  || (_XSV_261) || (_XSV_271)) {
        set_val(B_RFIRE, 0);
        set_val(B_LFIRE, 0);
        set_val(B_WEAPON, 0);
        set_val(B_RELOAD, 0);
        set_val(B_MELEE, 0);
        set_val(B_CROUCH, 0);
    }
 
  RecordRRXYY();
 
     // write the pmem changes down
    PMSave();
    // Refresh interactive configuration window
    ICRefresh();
}
 
void RecordRRXYY() {
  // hold L3 & R3 for 3 seconds to activate recording mode
  static bool bRecStart=FALSE;
  static bool oldRecord=0;
 
  uint8 mask[]{NULL,_1_,_2_,_3_,_4_,_5_,_6_,_7_,_8_,_9_,_0_|BOTTOM_DOT,_1_|BOTTOM_DOT,_2_|BOTTOM_DOT };
 
  if (check_active(BUTTON_9,3000) && check_active(BUTTON_6,3000) && bRecStart==FALSE) {
    if (FIRE_MODE == RRXYY) {
      bRecStart=TRUE;
      Record=1;
      ColorLEDVM('A',150,150,-1);
    }
  }
 
  if (Record > 0) {
    if (Record==1  && event_active(B_RFIRE) ) Record=2;
    if (Record==2  && event_release(B_RFIRE)) { RRXYY_R11=time_active(B_RFIRE);  Record=3; };
    if (Record==3  && event_active(B_RFIRE) ) { RRXYY_R10=time_release(B_RFIRE); Record=4; };
    if (Record==4  && event_release(B_RFIRE)) { RRXYY_R21=time_active(B_RFIRE);  Record=5; };
    if (Record==5  && event_active(B_RELOAD))   Record=6;
    if (Record==6  && event_release(B_RELOAD)){ RRXYY_X11=time_active(B_RELOAD); Record=7; };
    if (Record==7  && event_active(B_WEAPON)) { RRXYY_X10=time_release(B_RELOAD);Record=8; };
    if (Record==8  && event_release(B_WEAPON)){ RRXYY_Y11=time_active(B_WEAPON); Record=9; };
    if (Record==9  && event_active(B_WEAPON)) { RRXYY_Y10=time_release(B_WEAPON);Record=10;};
    if (Record==10 && event_release(B_WEAPON)){ RRXYY_Y21=time_active(B_WEAPON); Record=11;};
    // end recording with next press of fire
    if (Record==11 && event_active(B_RFIRE))  { RRXYY_Y20=time_release(B_WEAPON);Record=12;};
  }
 
  if (Record==12) {
    RRXYY_R11=clamp(RRXYY_R11,0,250);
    pmem_write(20,RRXYY_R11);
    RRXYY_R10=clamp(RRXYY_R10,0,250);
    pmem_write(21,RRXYY_R10);
    RRXYY_R21=clamp(RRXYY_R21,0,250);
    pmem_write(22,RRXYY_R21);
    RRXYY_X11=clamp(RRXYY_X11,0,250);
    pmem_write(23,RRXYY_X11);
    RRXYY_X10=clamp(RRXYY_X10,0,1000);
    pmem_write(24,RRXYY_X10);
    RRXYY_Y11=clamp(RRXYY_Y11,0,250);
    pmem_write(26,RRXYY_Y11);
    RRXYY_Y10=clamp(RRXYY_Y10,0,250);
    pmem_write(27,RRXYY_Y10);
    RRXYY_Y21=clamp(RRXYY_Y21,0,250);
    pmem_write(28,RRXYY_Y21);
    RRXYY_Y20=clamp(RRXYY_Y20,0,1000);
    pmem_write(29,RRXYY_Y20);
    Record=0; bRecStart=FALSE;
    led_reset();
    PMSaveNow = TRUE; ICUpdate = TRUE;
  }
 
  if (oldRecord != Record) {
    oldRecord = Record;
    printf("record position: %d",Record);
    display_overlay(mask[Record],1000);
  }
 
}
 
 
void swap(uint8 ida, uint8 idb) {
    fix32 val_ida = get_val(ida);
    set_val(ida, get_val(idb));
    set_val(idb, val_ida);
    return;
}
 
// Update the interactive configuration window, but not faster than every 1 second
void ICRefresh() {
    if (ICUpdate && ICULast < system_time()) {
        //printf("ic update");
        printf("GCMD:InteractiveConfiguration.Refresh");
        ICUpdate = FALSE;
        ICULast = system_time() + 1000;
    }
}
 
// Update the persistent memory, but not faster than every 10 seconds
void PMSave() {
    if (PMSaveNow && PMSLast < system_time()) {
        //printf("gespeichert");
        PMSaveNow = FALSE;
        PMSLast = system_time() + 10000;
        if (! SAVE_CHANGES) return; // don't save if checkbox is not checked
        pmem_save();
    }
}
 
combo RapidfireRight {
    set_val(B_RFIRE, 100);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(10);
    set_val(B_RFIRE, 0);
}
 
combo RapidfireLeft {
    set_val(B_LFIRE, 100);
    wait(30);
    set_val(B_LFIRE, 0);
    wait(10);
    set_val(B_LFIRE, 0);
}
 
 
combo _FIVESHOT {
    set_val(B_RFIRE, 100);
    wait(FSHOT_RiFiPWait);    // right fire press wait 
    wait(FSHOT_RiFiRWait);    // right fire release wait
    set_val(B_RFIRE, 100)
    wait(FSHOT_RiFiPWait);    // right fire press wait 
    set_val(B_RELOAD, 100);
    wait(FSHOT_ReloadPWait)// reload press wait     
    wait(FSHOT_ReloadRWait)// reload release wait   
    call(YY);                 // YY-Combo
    wait(YYAwait);            // YY-Combo Wait after   
}
 
 
// fire/fire/reload/weaponchange/weaponchange
combo _RRXYY {
    set_val(B_RFIRE, 100.00);
    wait(130);
    set_val(B_RFIRE, 0.00);
    wait(40);
    set_val(B_RFIRE, 100.00);
    wait(20);
    set_val(B_RELOAD, 100.00);
    wait(90);
    set_val(B_RFIRE, 0.00);
    set_val(B_RELOAD, 0.00);
    wait(130);
    call(YY);
}
 
//XSV 261 Timing
combo _XSV_261 {
    set_val(B_MELEE, 100);
    wait(11);
    set_val(B_MELEE, 0);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(311);
     set_val(B_RFIRE, 100);
    wait(90);
    set_val(B_RFIRE, 0);
    wait(60);
    set_val(B_RFIRE, 100);
    wait(40);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(20);
    set_val(B_RFIRE, 0);
    wait(261);
}
 
//XSV 271 Timing
combo _XSV_271 {
    set_val(B_MELEE, 100);
    wait(11);
    set_val(B_MELEE, 0);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(311);
     set_val(B_RFIRE, 100);
    wait(90);
    set_val(B_RFIRE, 0);
    wait(60);
    set_val(B_RFIRE, 100);
    wait(40);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(20);
    set_val(B_RFIRE, 0);
    wait(271);
}
 
combo YY {
    set_val(B_WEAPON, 100);
    wait(YY_BWPWait);       //  B_Weapon press wait 
    wait(YY_RWPWait);       //  B_Weapon release wait
    set_val(B_WEAPON, 100);
    wait(YY_BWPWait);       //  B_Weapon press wait 
}
 
combo Crouch {
    set_val(XB1_LX, 0);
    set_val(XB1_LY, 0);
    set_val(B_CROUCH, 100);
}
 
combo BXB {
    set_val(B_MELEE, 100);
    wait(200); wait(50);
    set_val(B_RELOAD, 100);
    wait(50); wait(400);
    set_val(B_MELEE, 100);
    wait(50);
    set_val(B_MELEE, 100);
    wait(400);
}
 
combo FastReload {
    set_val(B_RELOAD, 100);
    wait(400); wait(600);
    call(YY);
}
 
combo RRBx {
    set_val(B_RFIRE, 100.00);
    wait(130);
    set_val(B_RFIRE, 0.00);
    wait(40);
    set_val(B_RFIRE, 100.00);
    wait(10);
    set_val(B_MELEE, 100);
    wait(50);wait(200);
    set_val(B_RELOAD, 100);
    wait(60);
    set_val(B_RFIRE, 0.00);
    set_val(B_RELOAD, 0.00);
    wait(130);
    call(YY);
    wait(300);
}
 
combo cmbRumble {
    iwait=0;
    if ( iRumble == 4 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 3 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 2 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 1 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
}
 
 
// LED Color 'C'olor , blink duration on , blink duration off, blink count
void ColorLEDVM(char Color, uint16 DurOn, uint16 DurOff, int Count) {
  //if ( DurOff == 0 ) DurOn = 100;
    int Color1, Color2, Color3, Color4;
 
    if(Color == 'B'){Color1 = 1; Color2 = 0; Color3 = 0; Color4 = 0;}
    if(Color == 'R'){Color1 = 0; Color2 = 1; Color3 = 0; Color4 = 0;}
    if(Color == 'G'){Color1 = 0; Color2 = 0; Color3 = 1; Color4 = 0;}
    if(Color == 'P'){Color1 = 0; Color2 = 0; Color3 = 0; Color4 = 1;}
    if(Color == 'C'){Color1 = 1; Color2 = 0; Color3 = 1; Color4 = 0;}
    if(Color == 'A'){Color1 = 0; Color2 = 1; Color3 = 1; Color4 = 0;}
    if(Color == 'W'){Color1 = 1; Color2 = 1; Color3 = 1; Color4 = 1;}
    led_reset();
  if (Color1) if (DurOff > 0) led_vmset(LED_1, DurOn, DurOff, Count); else led_set(LED_1,(fix32)DurOn,0);
    if (Color2) if (DurOff > 0) led_vmset(LED_2, DurOn, DurOff, Count); else led_set(LED_2,(fix32)DurOn,0);
    if (Color3) if (DurOff > 0) led_vmset(LED_3, DurOn, DurOff, Count); else led_set(LED_3,(fix32)DurOn,0);
    if (Color4) if (DurOff > 0) led_vmset(LED_4, DurOn, DurOff, Count); else led_set(LED_4,(fix32)DurOn,0);
}
User avatar
Squidward
Lieutenant
Lieutenant
 
Posts: 397
Joined: Tue Dec 23, 2014 4:39 pm

Re: Modify Halo 2 Classic script

Postby J2Kbr » Tue Sep 01, 2020 2:37 pm

Please check if this is what you want. ;)
Code: Select all
/* --------------------------------------------------------------------------
 *  Halo 2 Classic Custom Script
 * -------------------------------------------------------------------------- */

 
/*** shortdesc
<shortdesc>
Halo 2 Classic Custom Script<br>
Titan Two conversion<br>
<br>
<br>
 
Features:
<ul>
<li>Interactive configuration</li>
<li>Fiveshot</li>
<li>Doubleshot with melee</li>
<li>Rapid Fire (left & right)</li>
<li>Melee</li>
<li>Quick Reload</li>
</ul>
 
Notes: You'll find more information in the Interactive Configuration or click the DOC link.
</shortdesc>
***/

 
/*** keywords and docurl
<keywords>Halo 2, rapid fire, quick reload, doubleshot</keywords>
 
<docurl>https://www.consoletuner.com/forum/viewtopic.php?f=23&t=6910</docurl>
 
***/

 
/** Interactive configuration
<cfgdesc>
[Halo 2]
control   = info
shortdesc    = <<<MULTILINE
Halo 2 Classic Custom Script<br>
Titan Two Conversion
MULTILINE
 
[Save changes]
byteoffset    = 100
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Save changes
shortdesc   = If enabled, the script will save changes made in-game to any of the options below.
 
[Button Layout]
byteoffset  = 50
bitsize     = 8
control     = radiobox
default     = 0
item        = Universal Reclaimer
item        = Universal Bump & Jump
 
[Firemode]
byteoffset    = 0
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Firemode
shortdesc   = In-game on/off: <b>DPAD-Up + RT</b>
 
 
[Firemode Type]
byteoffset    = 1
bitsize        = 8
control        = combobox
default        = 0
item            = Fiveshot
item            = RRXYY
item            = XSV 261
item            = XSV 271
shortdesc   = Initial Firemode <br>In-game cycle: <b>DPAD-Left + RT</b>
 
 
[Fiveshot Timing]
collapsible = 2
control     = info
shortdesc   = <<<MULTILINE
Time Adjustments for Firemode:Fiveshot Combo
Presets:
MULTILINE
 
 
[Fiveshot Pre]
group     = true
color            = #008000
control   = config
item      = J2kbr Firemode . Fiveshot Timing : #01:00#0A:145A148200F01414
item      = Old Firemode . Fiveshot Timing : #01:00#0A:1446148200D21414
 
 
[Fiveshot Right Fire PRESS]
group       = true
byteoffset  = 10
bitsize     = 8                   
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <<<MULTILINE
 
<b>Firemode . Fiveshot</b> Fire Button Press Time
MULTILINE
 
[Fiveshot Fiveshot Right Fire RELEASE]
group       = true
byteoffset  = 11
bitsize     = 8                   
control     = spinbox
default     = 90
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Fire Button Release Time
 
[Fiveshot Fiveshot Reload PRESS]   
group       = true
byteoffset  = 12
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Reload Button Press Time
 
[Fiveshot Fiveshot Reload RELEASE]   
group       = true
byteoffset  = 13
bitsize     = 8       
control     = spinbox
default     = 130
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Reload Button Release Time
 
[Fiveshot Fiveshot Wait After YY]
group       = true
byteoffset  = 14
bitsize     = 16       
control     = spinbox
default     = 240
minimum     = 10
maximum     = 500
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Wait Time after YY call
 
[Fiveshot YY B_Weapon PRESS]
group       = true
byteoffset  = 16
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot : YY</b> B_Weapon Button Press Time
 
[Fiveshot YY B_Weapon RELEASE]       
group       = true
byteoffset  = 17
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot : YY</b> B_Weapon Button Release Time
 
 
 
[RRXYY Timing]
collapsible = 2
control     = info
shortdesc   = <<<MULTILINE
Time Adjustments for Firemode:RRXYY Combo
 
Presets:
MULTILINE
 
 
[RRXYY Pre]
group     = true
color            = #008000
control   = config
item      = Slow Firemode . RRXYY Timing : #14:5A50648C029E465A3C02A8
item      = Mid   Firemode . RRXYY Timing : #14:5A4664820140465A1E01F4
item      = Fast Firemode . RRXYY Timing : #14:5A50506E01B846503C01EA
item      = Old   Firemode . RRXYY Timing : #14:642D3C3C008C14141400D2
 
[RRXYY_R11]
group       = true
byteoffset  = 20
bitsize     = 8                   
control     = spinbox
default     = 100
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <<<MULTILINE
 
<b>Firemode . RRXYY 1:</b> Fire Button Press Time
MULTILINE
 
[RRXYY_R10]
group       = true
byteoffset  = 21
bitsize     = 8                   
control     = spinbox
default     = 45
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 2:</b> Fire Button Release Time
 
[FRRXYY_R21]   
group       = true
byteoffset  = 22
bitsize     = 8       
control     = spinbox
default     = 60
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 3:</b> Fire Button Press Time
 
[RRXYY_X11]   
group       = true
byteoffset  = 23
bitsize     = 8       
control     = spinbox
default     = 60
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 4:</b> Reload Button Press Time
 
[RRXYY_X10]
group       = true
byteoffset  = 24
bitsize     = 16       
control     = spinbox
default     = 140
minimum     = 10
maximum     = 1000
step        = 1
shortdesc   = <b>Firemode . RRXYY 5:</b> Reload Button Release Time
 
[RRXYY_B11]
group       = true
byteoffset  = 26
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 6:</b> Weapon Button Press Time
 
[RRXYY_B10]       
group       = true
byteoffset  = 27
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 7:</b> Weapon Button Release Time
 
[RRXYY_B21]       
group       = true
byteoffset  = 28
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 8:</b> Weapon Button Press Time
 
[RRXYY_B20]       
group       = true
byteoffset  = 29
bitsize     = 16
control     = spinbox
default     = 210
minimum     = 10
maximum     = 1000
step        = 1
shortdesc   = <b>Firemode . RRXYY 9:</b> Weapon Button Release Time
 
 
[Left Rapid Fire]
byteoffset    = 2                   
bitsize        = 1                     
bitoffset = 0                     
control        = checkbox
default        = 0
item            = Enable Left Rapid Fire
shortdesc   = In-game on/off: <b>DPAD-Up + LT</b>
 
[Right Rapid Fire]
byteoffset    = 3
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Right Rapid Fire
shortdesc   = In-game on/off: <b>DPAD-Up + Y</b>
 
[Melee Mode]
byteoffset    = 4
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Melee Mode
shortdesc   = In-game on/off: <b>DPAD-Up + RB</b>
 
[Doubleshot Melee]
byteoffset    = 5
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Doubleshot Melee combo. Usage: Button A
shortdesc   = In-game on/off: <b>DPAD-Up + A</b>
 
 
[Fast Reload]
byteoffset    = 6
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Fast Reload
shortdesc   = In-game on/off: <b>DPAD-Up + B</b>
 
</cfgdesc>
 
**/

 
#include <xb1.gph>
#include <display.gph>
 
#define FIVESHOT                             1
#define RRXYY                                2
#define XSV_261                              3
#define XSV_271                              4
 
// Button Layout
uint8 B_RFIRE;
uint8 B_LFIRE;
uint8 B_WEAPON;
uint8 B_RELOAD;
uint8 B_MELEE;
uint8 B_CROUCH;
uint8 B_JUMP;
uint8 B_FLASHLIGHT;
uint8 B_A;
 
// MOD1 Button
//define B_MOD1                               = XB1_RB;
 
// Enable/Disable MODs
#define RIGHT_RAPIDFIRE                      FALSE
#define LEFT_RAPIDFIRE                       FALSE
#define MOD1_ENABLED                         FALSE // ?? swaps Down & RB
//#define MOD2_ENABLED                         TRUE
#define DOUBLESHOTMELEE                      FALSE
#define MELEE_ENABLED                        FALSE
#define QUICK_RELOAD                         FALSE
 
// Set inital fire mode (FIVESHOT or RRXYY or XSV_261 or XSV_271)
uint8 FIRE_MODE = FIVESHOT;
 
// -----------------------------------------------------------------------------
//  The actual script starts from here. The code below does not need be changed.
// -----------------------------------------------------------------------------
#define MOD_TOGGLE                           XB1_UP // Individual MODs toogle
#define FIVESHOT_MODE_TOGGLE                 XB1_LEFT // Individual MODs toogle
 
bool RapidfireRight_OnOff = RIGHT_RAPIDFIRE;
bool RapidfireLeft_OnOff  = LEFT_RAPIDFIRE;
bool FireMode_OnOff       = FALSE;
//bool FlagDouble_Toogle    = FALSE;
bool QuickReload_OnOff      = QUICK_RELOAD;
bool Melee_OnOff              = MELEE_ENABLED;
bool DblShotMelee_OnOff      = DOUBLESHOTMELEE;
 
bool SAVE_CHANGES = FALSE;
 
// five shot timings                                 // j2kbr timings // v1.00 timings
uint8   FSHOT_RiFiPWait;    // right fire press wait  : wait(20);       wait(20);
uint8   FSHOT_RiFiRWait;    // right fire release wait: wait(90);       wait(70);
uint8   FSHOT_ReloadPWait;  // reload press wait      : wait(20);       wait(20);
uint8   FSHOT_ReloadRWait;  // reload release wait    : wait(130);      wait(130);
uint16  YYAwait;            // YY-Combo Wait after    : wait(240);      wait(210); // fiveshot
 
 
// rrxyy timings   // org timings
uint8   RRXYY_R11; // 100
uint8   RRXYY_R10; //  45
uint8   RRXYY_R21; //  60
uint8   RRXYY_X11; //  60
uint16  RRXYY_X10; // 140
uint8   RRXYY_Y11; //  20
uint8   RRXYY_Y10; //  20
uint8   RRXYY_Y21; //  20
uint16  RRXYY_Y20; // 210
 
// YY timings                     // same as old timings, no changes
uint8 YY_BWPWait;       //  B_Weapon press wait  : wait(20);           
uint8 YY_RWPWait;       //  B_Weapon release wait: wait(20);           
 
// helper variables
uint8 iRumble=0;    // Rumble 1,2,3 or 4 times
uint8 iwait=0;    // wait value for overriding unnecessary waits
bool ICUpdate = FALSE; // if the interactive configuration window should get an update
uint32 ICULast = system_time(); // time tracker for last UI update
bool PMSaveNow = FALSE; // if the pmem should be written to the memory
uint32 PMSLast = system_time(); // time tracker for last PMEM Save operation
// record rrxyy timing during play
uint8 Record=0;
 
init {
    pmem_load();
    FireMode_OnOff = pmem_read(0);
    FIRE_MODE = pmem_read(1);
    FIRE_MODE++;
    RapidfireLeft_OnOff = pmem_read(2);
    RapidfireRight_OnOff = pmem_read(3);
    Melee_OnOff = pmem_read(4);
    DblShotMelee_OnOff = pmem_read(5);
    QuickReload_OnOff = pmem_read(6);
 
    switch(pmem_read(50)) {
        case 0: { // Universal Reclaimer
            B_RFIRE = XB1_RT;
            B_LFIRE = XB1_LT;
            B_WEAPON = XB1_Y;
            B_RELOAD = XB1_X;
            B_MELEE = XB1_RB;
            B_CROUCH = XB1_LS;
            B_JUMP = XB1_A;
            B_FLASHLIGHT = XB1_LB;
            B_A = XB1_A;
        } break;
        case 1: { // Universal Bump & Jump
            B_RFIRE = XB1_RT;
            B_LFIRE = XB1_LT;
            B_WEAPON = XB1_Y;
            B_RELOAD = XB1_B;
            B_MELEE = XB1_RB;
            B_CROUCH = XB1_LS;
            B_JUMP = XB1_LB;
            B_FLASHLIGHT = XB1_RIGHT;
            B_A = XB1_A;
        } break;
    }
 
  pmem_read(10,&FSHOT_RiFiPWait);
  pmem_read(11,&FSHOT_RiFiRWait)
  pmem_read(12,&FSHOT_ReloadPWait);
  pmem_read(13,&FSHOT_ReloadRWait);
  pmem_read(14,&YYAwait);    //uint16
 
  pmem_read(16,&YY_BWPWait);
  pmem_read(17,&YY_RWPWait);
 
  pmem_read(20,&RRXYY_R11); // 100
  pmem_read(21,&RRXYY_R10); //  45
  pmem_read(22,&RRXYY_R21); //  60
  pmem_read(23,&RRXYY_X11); //  60
  pmem_read(24,&RRXYY_X10); // 140
  pmem_read(26,&RRXYY_Y11); //  20
  pmem_read(27,&RRXYY_Y10); //  20
  pmem_read(28,&RRXYY_Y21); //  20
  pmem_read(29,&RRXYY_Y20); // 210
 
    SAVE_CHANGES = pmem_read(100);
}
 
main {
    // MOD 1 BUTTON
    if(MOD1_ENABLED) {
       swap(XB1_DOWN, XB1_RB);
    }
 
    // Rapidfire Right toggle
    if(get_val(MOD_TOGGLE) && event_active(B_WEAPON)) {
        RapidfireRight_OnOff = !RapidfireRight_OnOff;
         if (RapidfireRight_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(3,RapidfireRight_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
    // If rapidfire right is enabled
    if(!FireMode_OnOff && RapidfireRight_OnOff && get_val(B_RFIRE)) {
        combo_run(RapidfireRight);
    } else combo_stop(RapidfireRight);
 
 
    // Rapidfire Left toggle
    if(get_val(MOD_TOGGLE) && event_active(B_LFIRE)) {
        RapidfireLeft_OnOff = !RapidfireLeft_OnOff;
         if (RapidfireLeft_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(2,RapidfireLeft_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
    // If rapidfire left is enabled
    if(RapidfireLeft_OnOff && get_val(B_LFIRE)) {
        combo_run(RapidfireLeft);
    }
 
    // Fiveshot Master toggle
    if(get_val(MOD_TOGGLE) && event_active(B_RFIRE)) {
        FireMode_OnOff = !FireMode_OnOff;
         if (FireMode_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(0,FireMode_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
     // Fiveshot type toggle
     if (get_val(FIVESHOT_MODE_TOGGLE) && event_active(B_RFIRE)) {
        if ( FIRE_MODE < 4 ) FIRE_MODE++;
        else FIRE_MODE = 1;
        iRumble = FIRE_MODE;
        combo_run(cmbRumble);
        pmem_write(1,(FIRE_MODE-1));
        PMSaveNow = TRUE; ICUpdate = TRUE;
     }
 
    // If fiveshot is enabled
    if(FireMode_OnOff && get_val(B_RFIRE)) {
        if(FIRE_MODE == FIVESHOT) {
            combo_run(_FIVESHOT);
        } else
        if(FIRE_MODE == RRXYY && Record == 0) {
            combo_run(_RRXYY);
        } else
        if(FIRE_MODE == XSV_261) {
            combo_run(_XSV_261);
        }else
        if(FIRE_MODE == XSV_271) {
            combo_run(_XSV_271);
        }
    }
 
    // MOD 1 /FLAGCARRY
    //if(MOD1_ENABLED) {
        // Flagcarry toggle
        //if(get_val(XB1_UP) && event_active(XB1_DOWN)) {
        //    FlagDouble_Toogle = !FlagDouble_Toogle;
        //}
    //}
 
    // Melee enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_MELEE)) {
        Melee_OnOff = !Melee_OnOff;
         if (Melee_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(4,Melee_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
 
    // Melee
     if(Melee_OnOff) {
         if(get_val(B_MELEE)) {
            combo_run(Crouch);
            combo_run(BXB);
        }
     }
 
 
 
    // Quick Reload enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_RELOAD)) {
        QuickReload_OnOff = !QuickReload_OnOff;
         if (QuickReload_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(6,QuickReload_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
    // QUICK RELOAD
    if(QuickReload_OnOff) {
        if(event_release(B_RELOAD) && time_active(B_RELOAD) < 200) {
            combo_run(FastReload);
        }
    }
 
 
     // Doubleshot & melee enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_A)) {
        DblShotMelee_OnOff = !DblShotMelee_OnOff;
         if (DblShotMelee_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(5,DblShotMelee_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
    // Doubleshot with melee
    if(DblShotMelee_OnOff) {
        if(get_val(B_A)) {
            combo_run(RRBx);
        }
    }
 
    // Make sure user inputs does not interfere with the running combo
    if((_FIVESHOT) || (_RRXYY)  || (_XSV_261) || (_XSV_271)) {
        set_val(B_RFIRE, 0);
        set_val(B_LFIRE, 0);
        set_val(B_WEAPON, 0);
        set_val(B_RELOAD, 0);
        set_val(B_MELEE, 0);
        set_val(B_CROUCH, 0);
    }
 
  RecordRRXYY();
 
     // write the pmem changes down
    PMSave();
    // Refresh interactive configuration window
    ICRefresh();
}
 
void RecordRRXYY() {
  // hold L3 & R3 for 3 seconds to activate recording mode
  static bool bRecStart=FALSE;
  static bool oldRecord=0;
 
  uint8 mask[]{NULL,_1_,_2_,_3_,_4_,_5_,_6_,_7_,_8_,_9_,_0_|BOTTOM_DOT,_1_|BOTTOM_DOT,_2_|BOTTOM_DOT };
 
  if (check_active(BUTTON_9,3000) && check_active(BUTTON_6,3000) && bRecStart==FALSE) {
    if (FIRE_MODE == RRXYY) {
      bRecStart=TRUE;
      Record=1;
      ColorLEDVM('A',150,150,-1);
    }
  }
 
  if (Record > 0) {
    if (Record==1  && event_active(B_RFIRE) ) Record=2;
    if (Record==2  && event_release(B_RFIRE)) { RRXYY_R11=time_active(B_RFIRE);  Record=3; };
    if (Record==3  && event_active(B_RFIRE) ) { RRXYY_R10=time_release(B_RFIRE); Record=4; };
    if (Record==4  && event_release(B_RFIRE)) { RRXYY_R21=time_active(B_RFIRE);  Record=5; };
    if (Record==5  && event_active(B_RELOAD))   Record=6;
    if (Record==6  && event_release(B_RELOAD)){ RRXYY_X11=time_active(B_RELOAD); Record=7; };
    if (Record==7  && event_active(B_WEAPON)) { RRXYY_X10=time_release(B_RELOAD);Record=8; };
    if (Record==8  && event_release(B_WEAPON)){ RRXYY_Y11=time_active(B_WEAPON); Record=9; };
    if (Record==9  && event_active(B_WEAPON)) { RRXYY_Y10=time_release(B_WEAPON);Record=10;};
    if (Record==10 && event_release(B_WEAPON)){ RRXYY_Y21=time_active(B_WEAPON); Record=11;};
    // end recording with next press of fire
    if (Record==11 && event_active(B_RFIRE))  { RRXYY_Y20=time_release(B_WEAPON);Record=12;};
  }
 
  if (Record==12) {
    RRXYY_R11=clamp(RRXYY_R11,0,250);
    pmem_write(20,RRXYY_R11);
    RRXYY_R10=clamp(RRXYY_R10,0,250);
    pmem_write(21,RRXYY_R10);
    RRXYY_R21=clamp(RRXYY_R21,0,250);
    pmem_write(22,RRXYY_R21);
    RRXYY_X11=clamp(RRXYY_X11,0,250);
    pmem_write(23,RRXYY_X11);
    RRXYY_X10=clamp(RRXYY_X10,0,1000);
    pmem_write(24,RRXYY_X10);
    RRXYY_Y11=clamp(RRXYY_Y11,0,250);
    pmem_write(26,RRXYY_Y11);
    RRXYY_Y10=clamp(RRXYY_Y10,0,250);
    pmem_write(27,RRXYY_Y10);
    RRXYY_Y21=clamp(RRXYY_Y21,0,250);
    pmem_write(28,RRXYY_Y21);
    RRXYY_Y20=clamp(RRXYY_Y20,0,1000);
    pmem_write(29,RRXYY_Y20);
    Record=0; bRecStart=FALSE;
    led_reset();
    PMSaveNow = TRUE; ICUpdate = TRUE;
  }
 
  if (oldRecord != Record) {
    oldRecord = Record;
    printf("record position: %d",Record);
    display_overlay(mask[Record],1000);
  }
 
}
 
 
void swap(uint8 ida, uint8 idb) {
    fix32 val_ida = get_val(ida);
    set_val(ida, get_val(idb));
    set_val(idb, val_ida);
    return;
}
 
// Update the interactive configuration window, but not faster than every 1 second
void ICRefresh() {
    if (ICUpdate && ICULast < system_time()) {
        //printf("ic update");
        printf("GCMD:InteractiveConfiguration.Refresh");
        ICUpdate = FALSE;
        ICULast = system_time() + 1000;
    }
}
 
// Update the persistent memory, but not faster than every 10 seconds
void PMSave() {
    if (PMSaveNow && PMSLast < system_time()) {
        //printf("gespeichert");
        PMSaveNow = FALSE;
        PMSLast = system_time() + 10000;
        if (! SAVE_CHANGES) return; // don't save if checkbox is not checked
        pmem_save();
    }
}
 
combo RapidfireRight {
    set_val(B_RFIRE, 100);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(10);
    set_val(B_RFIRE, 0);
}
 
combo RapidfireLeft {
    set_val(B_LFIRE, 100);
    wait(30);
    set_val(B_LFIRE, 0);
    wait(10);
    set_val(B_LFIRE, 0);
}
 
 
combo _FIVESHOT {
    set_val(B_RFIRE, 100);
    wait(FSHOT_RiFiPWait);    // right fire press wait 
    wait(FSHOT_RiFiRWait);    // right fire release wait
    set_val(B_RFIRE, 100)
    wait(FSHOT_RiFiPWait);    // right fire press wait 
    set_val(B_RELOAD, 100);
    wait(FSHOT_ReloadPWait)// reload press wait     
    wait(FSHOT_ReloadRWait)// reload release wait   
    call(YY);                 // YY-Combo
    wait(YYAwait);            // YY-Combo Wait after   
}
 
 
// fire/fire/reload/weaponchange/weaponchange
combo _RRXYY {
    set_val(B_RFIRE, 100.00);
    wait(130);
    set_val(B_RFIRE, 0.00);
    wait(40);
    set_val(B_RFIRE, 100.00);
    wait(20);
    set_val(B_RELOAD, 100.00);
    wait(90);
    set_val(B_RFIRE, 0.00);
    set_val(B_RELOAD, 0.00);
    wait(130);
    call(YY);
}
 
//XSV 261 Timing
combo _XSV_261 {
    set_val(B_MELEE, 100);
    wait(11);
    set_val(B_MELEE, 0);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(311);
     set_val(B_RFIRE, 100);
    wait(90);
    set_val(B_RFIRE, 0);
    wait(60);
    set_val(B_RFIRE, 100);
    wait(40);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(20);
    set_val(B_RFIRE, 0);
    wait(261);
}
 
//XSV 271 Timing
combo _XSV_271 {
    set_val(B_MELEE, 100);
    wait(11);
    set_val(B_MELEE, 0);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(311);
     set_val(B_RFIRE, 100);
    wait(90);
    set_val(B_RFIRE, 0);
    wait(60);
    set_val(B_RFIRE, 100);
    wait(40);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(20);
    set_val(B_RFIRE, 0);
    wait(271);
}
 
combo YY {
    set_val(B_WEAPON, 100);
    wait(YY_BWPWait);       //  B_Weapon press wait 
    wait(YY_RWPWait);       //  B_Weapon release wait
    set_val(B_WEAPON, 100);
    wait(YY_BWPWait);       //  B_Weapon press wait 
}
 
combo Crouch {
    set_val(XB1_LX, 0);
    set_val(XB1_LY, 0);
    set_val(B_CROUCH, 100);
}
 
combo BXB {
    set_val(B_MELEE, 100);
    wait(200); wait(50);
    set_val(B_RELOAD, 100);
    wait(50); wait(400);
    set_val(B_MELEE, 100);
    wait(50);
    set_val(B_MELEE, 100);
    wait(400);
}
 
combo FastReload {
    set_val(B_RELOAD, 100);
    wait(400); wait(600);
    call(YY);
}
 
combo RRBx {
    set_val(B_RFIRE, 100.00);
    wait(130);
    set_val(B_RFIRE, 0.00);
    wait(40);
    set_val(B_RFIRE, 100.00);
    wait(10);
    set_val(B_MELEE, 100);
    wait(50);wait(200);
    set_val(B_RELOAD, 100);
    wait(60);
    set_val(B_RFIRE, 0.00);
    set_val(B_RELOAD, 0.00);
    wait(130);
    call(YY);
    wait(300);
}
 
combo cmbRumble {
    iwait=0;
    if ( iRumble == 4 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 3 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 2 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 1 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
}
 
 
// LED Color 'C'olor , blink duration on , blink duration off, blink count
void ColorLEDVM(char Color, uint16 DurOn, uint16 DurOff, int Count) {
  //if ( DurOff == 0 ) DurOn = 100;
    int Color1, Color2, Color3, Color4;
 
    if(Color == 'B'){Color1 = 1; Color2 = 0; Color3 = 0; Color4 = 0;}
    if(Color == 'R'){Color1 = 0; Color2 = 1; Color3 = 0; Color4 = 0;}
    if(Color == 'G'){Color1 = 0; Color2 = 0; Color3 = 1; Color4 = 0;}
    if(Color == 'P'){Color1 = 0; Color2 = 0; Color3 = 0; Color4 = 1;}
    if(Color == 'C'){Color1 = 1; Color2 = 0; Color3 = 1; Color4 = 0;}
    if(Color == 'A'){Color1 = 0; Color2 = 1; Color3 = 1; Color4 = 0;}
    if(Color == 'W'){Color1 = 1; Color2 = 1; Color3 = 1; Color4 = 1;}
    led_reset();
  if (Color1) if (DurOff > 0) led_vmset(LED_1, DurOn, DurOff, Count); else led_set(LED_1,(fix32)DurOn,0);
    if (Color2) if (DurOff > 0) led_vmset(LED_2, DurOn, DurOff, Count); else led_set(LED_2,(fix32)DurOn,0);
    if (Color3) if (DurOff > 0) led_vmset(LED_3, DurOn, DurOff, Count); else led_set(LED_3,(fix32)DurOn,0);
    if (Color4) if (DurOff > 0) led_vmset(LED_4, DurOn, DurOff, Count); else led_set(LED_4,(fix32)DurOn,0);
}
ConsoleTuner Support Team
User avatar
J2Kbr
General of the Army
General of the Army
 
Posts: 20323
Joined: Tue Mar 18, 2014 1:39 pm

Re: Modify Halo 2 Classic script

Postby Squidward » Wed Sep 02, 2020 3:29 am

J2Kbr wrote:Please check if this is what you want. ;)
Code: Select all
/* --------------------------------------------------------------------------
 *  Halo 2 Classic Custom Script
 * -------------------------------------------------------------------------- */

 
/*** shortdesc
<shortdesc>
Halo 2 Classic Custom Script<br>
Titan Two conversion<br>
<br>
<br>
 
Features:
<ul>
<li>Interactive configuration</li>
<li>Fiveshot</li>
<li>Doubleshot with melee</li>
<li>Rapid Fire (left & right)</li>
<li>Melee</li>
<li>Quick Reload</li>
</ul>
 
Notes: You'll find more information in the Interactive Configuration or click the DOC link.
</shortdesc>
***/

 
/*** keywords and docurl
<keywords>Halo 2, rapid fire, quick reload, doubleshot</keywords>
 
<docurl>https://www.consoletuner.com/forum/viewtopic.php?f=23&t=6910</docurl>
 
***/

 
/** Interactive configuration
<cfgdesc>
[Halo 2]
control   = info
shortdesc    = <<<MULTILINE
Halo 2 Classic Custom Script<br>
Titan Two Conversion
MULTILINE
 
[Save changes]
byteoffset    = 100
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Save changes
shortdesc   = If enabled, the script will save changes made in-game to any of the options below.
 
[Button Layout]
byteoffset  = 50
bitsize     = 8
control     = radiobox
default     = 0
item        = Universal Reclaimer
item        = Universal Bump & Jump
 
[Firemode]
byteoffset    = 0
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Firemode
shortdesc   = In-game on/off: <b>DPAD-Up + RT</b>
 
 
[Firemode Type]
byteoffset    = 1
bitsize        = 8
control        = combobox
default        = 0
item            = Fiveshot
item            = RRXYY
item            = XSV 261
item            = XSV 271
shortdesc   = Initial Firemode <br>In-game cycle: <b>DPAD-Left + RT</b>
 
 
[Fiveshot Timing]
collapsible = 2
control     = info
shortdesc   = <<<MULTILINE
Time Adjustments for Firemode:Fiveshot Combo
Presets:
MULTILINE
 
 
[Fiveshot Pre]
group     = true
color            = #008000
control   = config
item      = J2kbr Firemode . Fiveshot Timing : #01:00#0A:145A148200F01414
item      = Old Firemode . Fiveshot Timing : #01:00#0A:1446148200D21414
 
 
[Fiveshot Right Fire PRESS]
group       = true
byteoffset  = 10
bitsize     = 8                   
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <<<MULTILINE
 
<b>Firemode . Fiveshot</b> Fire Button Press Time
MULTILINE
 
[Fiveshot Fiveshot Right Fire RELEASE]
group       = true
byteoffset  = 11
bitsize     = 8                   
control     = spinbox
default     = 90
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Fire Button Release Time
 
[Fiveshot Fiveshot Reload PRESS]   
group       = true
byteoffset  = 12
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Reload Button Press Time
 
[Fiveshot Fiveshot Reload RELEASE]   
group       = true
byteoffset  = 13
bitsize     = 8       
control     = spinbox
default     = 130
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Reload Button Release Time
 
[Fiveshot Fiveshot Wait After YY]
group       = true
byteoffset  = 14
bitsize     = 16       
control     = spinbox
default     = 240
minimum     = 10
maximum     = 500
step        = 1
shortdesc   = <b>Firemode . Fiveshot</b> Wait Time after YY call
 
[Fiveshot YY B_Weapon PRESS]
group       = true
byteoffset  = 16
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot : YY</b> B_Weapon Button Press Time
 
[Fiveshot YY B_Weapon RELEASE]       
group       = true
byteoffset  = 17
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . Fiveshot : YY</b> B_Weapon Button Release Time
 
 
 
[RRXYY Timing]
collapsible = 2
control     = info
shortdesc   = <<<MULTILINE
Time Adjustments for Firemode:RRXYY Combo
 
Presets:
MULTILINE
 
 
[RRXYY Pre]
group     = true
color            = #008000
control   = config
item      = Slow Firemode . RRXYY Timing : #14:5A50648C029E465A3C02A8
item      = Mid   Firemode . RRXYY Timing : #14:5A4664820140465A1E01F4
item      = Fast Firemode . RRXYY Timing : #14:5A50506E01B846503C01EA
item      = Old   Firemode . RRXYY Timing : #14:642D3C3C008C14141400D2
 
[RRXYY_R11]
group       = true
byteoffset  = 20
bitsize     = 8                   
control     = spinbox
default     = 100
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <<<MULTILINE
 
<b>Firemode . RRXYY 1:</b> Fire Button Press Time
MULTILINE
 
[RRXYY_R10]
group       = true
byteoffset  = 21
bitsize     = 8                   
control     = spinbox
default     = 45
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 2:</b> Fire Button Release Time
 
[FRRXYY_R21]   
group       = true
byteoffset  = 22
bitsize     = 8       
control     = spinbox
default     = 60
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 3:</b> Fire Button Press Time
 
[RRXYY_X11]   
group       = true
byteoffset  = 23
bitsize     = 8       
control     = spinbox
default     = 60
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 4:</b> Reload Button Press Time
 
[RRXYY_X10]
group       = true
byteoffset  = 24
bitsize     = 16       
control     = spinbox
default     = 140
minimum     = 10
maximum     = 1000
step        = 1
shortdesc   = <b>Firemode . RRXYY 5:</b> Reload Button Release Time
 
[RRXYY_B11]
group       = true
byteoffset  = 26
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 6:</b> Weapon Button Press Time
 
[RRXYY_B10]       
group       = true
byteoffset  = 27
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 7:</b> Weapon Button Release Time
 
[RRXYY_B21]       
group       = true
byteoffset  = 28
bitsize     = 8       
control     = spinbox
default     = 20
minimum     = 10
maximum     = 250
step        = 1
shortdesc   = <b>Firemode . RRXYY 8:</b> Weapon Button Press Time
 
[RRXYY_B20]       
group       = true
byteoffset  = 29
bitsize     = 16
control     = spinbox
default     = 210
minimum     = 10
maximum     = 1000
step        = 1
shortdesc   = <b>Firemode . RRXYY 9:</b> Weapon Button Release Time
 
 
[Left Rapid Fire]
byteoffset    = 2                   
bitsize        = 1                     
bitoffset = 0                     
control        = checkbox
default        = 0
item            = Enable Left Rapid Fire
shortdesc   = In-game on/off: <b>DPAD-Up + LT</b>
 
[Right Rapid Fire]
byteoffset    = 3
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Right Rapid Fire
shortdesc   = In-game on/off: <b>DPAD-Up + Y</b>
 
[Melee Mode]
byteoffset    = 4
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Melee Mode
shortdesc   = In-game on/off: <b>DPAD-Up + RB</b>
 
[Doubleshot Melee]
byteoffset    = 5
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Doubleshot Melee combo. Usage: Button A
shortdesc   = In-game on/off: <b>DPAD-Up + A</b>
 
 
[Fast Reload]
byteoffset    = 6
bitsize        = 1
bitoffset = 0
control        = checkbox
default        = 0
item            = Enable Fast Reload
shortdesc   = In-game on/off: <b>DPAD-Up + B</b>
 
</cfgdesc>
 
**/

 
#include <xb1.gph>
#include <display.gph>
 
#define FIVESHOT                             1
#define RRXYY                                2
#define XSV_261                              3
#define XSV_271                              4
 
// Button Layout
uint8 B_RFIRE;
uint8 B_LFIRE;
uint8 B_WEAPON;
uint8 B_RELOAD;
uint8 B_MELEE;
uint8 B_CROUCH;
uint8 B_JUMP;
uint8 B_FLASHLIGHT;
uint8 B_A;
 
// MOD1 Button
//define B_MOD1                               = XB1_RB;
 
// Enable/Disable MODs
#define RIGHT_RAPIDFIRE                      FALSE
#define LEFT_RAPIDFIRE                       FALSE
#define MOD1_ENABLED                         FALSE // ?? swaps Down & RB
//#define MOD2_ENABLED                         TRUE
#define DOUBLESHOTMELEE                      FALSE
#define MELEE_ENABLED                        FALSE
#define QUICK_RELOAD                         FALSE
 
// Set inital fire mode (FIVESHOT or RRXYY or XSV_261 or XSV_271)
uint8 FIRE_MODE = FIVESHOT;
 
// -----------------------------------------------------------------------------
//  The actual script starts from here. The code below does not need be changed.
// -----------------------------------------------------------------------------
#define MOD_TOGGLE                           XB1_UP // Individual MODs toogle
#define FIVESHOT_MODE_TOGGLE                 XB1_LEFT // Individual MODs toogle
 
bool RapidfireRight_OnOff = RIGHT_RAPIDFIRE;
bool RapidfireLeft_OnOff  = LEFT_RAPIDFIRE;
bool FireMode_OnOff       = FALSE;
//bool FlagDouble_Toogle    = FALSE;
bool QuickReload_OnOff      = QUICK_RELOAD;
bool Melee_OnOff              = MELEE_ENABLED;
bool DblShotMelee_OnOff      = DOUBLESHOTMELEE;
 
bool SAVE_CHANGES = FALSE;
 
// five shot timings                                 // j2kbr timings // v1.00 timings
uint8   FSHOT_RiFiPWait;    // right fire press wait  : wait(20);       wait(20);
uint8   FSHOT_RiFiRWait;    // right fire release wait: wait(90);       wait(70);
uint8   FSHOT_ReloadPWait;  // reload press wait      : wait(20);       wait(20);
uint8   FSHOT_ReloadRWait;  // reload release wait    : wait(130);      wait(130);
uint16  YYAwait;            // YY-Combo Wait after    : wait(240);      wait(210); // fiveshot
 
 
// rrxyy timings   // org timings
uint8   RRXYY_R11; // 100
uint8   RRXYY_R10; //  45
uint8   RRXYY_R21; //  60
uint8   RRXYY_X11; //  60
uint16  RRXYY_X10; // 140
uint8   RRXYY_Y11; //  20
uint8   RRXYY_Y10; //  20
uint8   RRXYY_Y21; //  20
uint16  RRXYY_Y20; // 210
 
// YY timings                     // same as old timings, no changes
uint8 YY_BWPWait;       //  B_Weapon press wait  : wait(20);           
uint8 YY_RWPWait;       //  B_Weapon release wait: wait(20);           
 
// helper variables
uint8 iRumble=0;    // Rumble 1,2,3 or 4 times
uint8 iwait=0;    // wait value for overriding unnecessary waits
bool ICUpdate = FALSE; // if the interactive configuration window should get an update
uint32 ICULast = system_time(); // time tracker for last UI update
bool PMSaveNow = FALSE; // if the pmem should be written to the memory
uint32 PMSLast = system_time(); // time tracker for last PMEM Save operation
// record rrxyy timing during play
uint8 Record=0;
 
init {
    pmem_load();
    FireMode_OnOff = pmem_read(0);
    FIRE_MODE = pmem_read(1);
    FIRE_MODE++;
    RapidfireLeft_OnOff = pmem_read(2);
    RapidfireRight_OnOff = pmem_read(3);
    Melee_OnOff = pmem_read(4);
    DblShotMelee_OnOff = pmem_read(5);
    QuickReload_OnOff = pmem_read(6);
 
    switch(pmem_read(50)) {
        case 0: { // Universal Reclaimer
            B_RFIRE = XB1_RT;
            B_LFIRE = XB1_LT;
            B_WEAPON = XB1_Y;
            B_RELOAD = XB1_X;
            B_MELEE = XB1_RB;
            B_CROUCH = XB1_LS;
            B_JUMP = XB1_A;
            B_FLASHLIGHT = XB1_LB;
            B_A = XB1_A;
        } break;
        case 1: { // Universal Bump & Jump
            B_RFIRE = XB1_RT;
            B_LFIRE = XB1_LT;
            B_WEAPON = XB1_Y;
            B_RELOAD = XB1_B;
            B_MELEE = XB1_RB;
            B_CROUCH = XB1_LS;
            B_JUMP = XB1_LB;
            B_FLASHLIGHT = XB1_RIGHT;
            B_A = XB1_A;
        } break;
    }
 
  pmem_read(10,&FSHOT_RiFiPWait);
  pmem_read(11,&FSHOT_RiFiRWait)
  pmem_read(12,&FSHOT_ReloadPWait);
  pmem_read(13,&FSHOT_ReloadRWait);
  pmem_read(14,&YYAwait);    //uint16
 
  pmem_read(16,&YY_BWPWait);
  pmem_read(17,&YY_RWPWait);
 
  pmem_read(20,&RRXYY_R11); // 100
  pmem_read(21,&RRXYY_R10); //  45
  pmem_read(22,&RRXYY_R21); //  60
  pmem_read(23,&RRXYY_X11); //  60
  pmem_read(24,&RRXYY_X10); // 140
  pmem_read(26,&RRXYY_Y11); //  20
  pmem_read(27,&RRXYY_Y10); //  20
  pmem_read(28,&RRXYY_Y21); //  20
  pmem_read(29,&RRXYY_Y20); // 210
 
    SAVE_CHANGES = pmem_read(100);
}
 
main {
    // MOD 1 BUTTON
    if(MOD1_ENABLED) {
       swap(XB1_DOWN, XB1_RB);
    }
 
    // Rapidfire Right toggle
    if(get_val(MOD_TOGGLE) && event_active(B_WEAPON)) {
        RapidfireRight_OnOff = !RapidfireRight_OnOff;
         if (RapidfireRight_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(3,RapidfireRight_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
    // If rapidfire right is enabled
    if(!FireMode_OnOff && RapidfireRight_OnOff && get_val(B_RFIRE)) {
        combo_run(RapidfireRight);
    } else combo_stop(RapidfireRight);
 
 
    // Rapidfire Left toggle
    if(get_val(MOD_TOGGLE) && event_active(B_LFIRE)) {
        RapidfireLeft_OnOff = !RapidfireLeft_OnOff;
         if (RapidfireLeft_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(2,RapidfireLeft_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
    // If rapidfire left is enabled
    if(RapidfireLeft_OnOff && get_val(B_LFIRE)) {
        combo_run(RapidfireLeft);
    }
 
    // Fiveshot Master toggle
    if(get_val(MOD_TOGGLE) && event_active(B_RFIRE)) {
        FireMode_OnOff = !FireMode_OnOff;
         if (FireMode_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(0,FireMode_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
     // Fiveshot type toggle
     if (get_val(FIVESHOT_MODE_TOGGLE) && event_active(B_RFIRE)) {
        if ( FIRE_MODE < 4 ) FIRE_MODE++;
        else FIRE_MODE = 1;
        iRumble = FIRE_MODE;
        combo_run(cmbRumble);
        pmem_write(1,(FIRE_MODE-1));
        PMSaveNow = TRUE; ICUpdate = TRUE;
     }
 
    // If fiveshot is enabled
    if(FireMode_OnOff && get_val(B_RFIRE)) {
        if(FIRE_MODE == FIVESHOT) {
            combo_run(_FIVESHOT);
        } else
        if(FIRE_MODE == RRXYY && Record == 0) {
            combo_run(_RRXYY);
        } else
        if(FIRE_MODE == XSV_261) {
            combo_run(_XSV_261);
        }else
        if(FIRE_MODE == XSV_271) {
            combo_run(_XSV_271);
        }
    }
 
    // MOD 1 /FLAGCARRY
    //if(MOD1_ENABLED) {
        // Flagcarry toggle
        //if(get_val(XB1_UP) && event_active(XB1_DOWN)) {
        //    FlagDouble_Toogle = !FlagDouble_Toogle;
        //}
    //}
 
    // Melee enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_MELEE)) {
        Melee_OnOff = !Melee_OnOff;
         if (Melee_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(4,Melee_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
 
    // Melee
     if(Melee_OnOff) {
         if(get_val(B_MELEE)) {
            combo_run(Crouch);
            combo_run(BXB);
        }
     }
 
 
 
    // Quick Reload enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_RELOAD)) {
        QuickReload_OnOff = !QuickReload_OnOff;
         if (QuickReload_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(6,QuickReload_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
    // QUICK RELOAD
    if(QuickReload_OnOff) {
        if(event_release(B_RELOAD) && time_active(B_RELOAD) < 200) {
            combo_run(FastReload);
        }
    }
 
 
     // Doubleshot & melee enable/disable
    if(get_val(MOD_TOGGLE) && event_active(B_A)) {
        DblShotMelee_OnOff = !DblShotMelee_OnOff;
         if (DblShotMelee_OnOff) { iRumble = 2; combo_run(cmbRumble); }
         else { iRumble = 1; combo_run(cmbRumble); }
         pmem_write(5,DblShotMelee_OnOff);
         PMSaveNow = TRUE; ICUpdate = TRUE;
    }
 
    // Doubleshot with melee
    if(DblShotMelee_OnOff) {
        if(get_val(B_A)) {
            combo_run(RRBx);
        }
    }
 
    // Make sure user inputs does not interfere with the running combo
    if((_FIVESHOT) || (_RRXYY)  || (_XSV_261) || (_XSV_271)) {
        set_val(B_RFIRE, 0);
        set_val(B_LFIRE, 0);
        set_val(B_WEAPON, 0);
        set_val(B_RELOAD, 0);
        set_val(B_MELEE, 0);
        set_val(B_CROUCH, 0);
    }
 
  RecordRRXYY();
 
     // write the pmem changes down
    PMSave();
    // Refresh interactive configuration window
    ICRefresh();
}
 
void RecordRRXYY() {
  // hold L3 & R3 for 3 seconds to activate recording mode
  static bool bRecStart=FALSE;
  static bool oldRecord=0;
 
  uint8 mask[]{NULL,_1_,_2_,_3_,_4_,_5_,_6_,_7_,_8_,_9_,_0_|BOTTOM_DOT,_1_|BOTTOM_DOT,_2_|BOTTOM_DOT };
 
  if (check_active(BUTTON_9,3000) && check_active(BUTTON_6,3000) && bRecStart==FALSE) {
    if (FIRE_MODE == RRXYY) {
      bRecStart=TRUE;
      Record=1;
      ColorLEDVM('A',150,150,-1);
    }
  }
 
  if (Record > 0) {
    if (Record==1  && event_active(B_RFIRE) ) Record=2;
    if (Record==2  && event_release(B_RFIRE)) { RRXYY_R11=time_active(B_RFIRE);  Record=3; };
    if (Record==3  && event_active(B_RFIRE) ) { RRXYY_R10=time_release(B_RFIRE); Record=4; };
    if (Record==4  && event_release(B_RFIRE)) { RRXYY_R21=time_active(B_RFIRE);  Record=5; };
    if (Record==5  && event_active(B_RELOAD))   Record=6;
    if (Record==6  && event_release(B_RELOAD)){ RRXYY_X11=time_active(B_RELOAD); Record=7; };
    if (Record==7  && event_active(B_WEAPON)) { RRXYY_X10=time_release(B_RELOAD);Record=8; };
    if (Record==8  && event_release(B_WEAPON)){ RRXYY_Y11=time_active(B_WEAPON); Record=9; };
    if (Record==9  && event_active(B_WEAPON)) { RRXYY_Y10=time_release(B_WEAPON);Record=10;};
    if (Record==10 && event_release(B_WEAPON)){ RRXYY_Y21=time_active(B_WEAPON); Record=11;};
    // end recording with next press of fire
    if (Record==11 && event_active(B_RFIRE))  { RRXYY_Y20=time_release(B_WEAPON);Record=12;};
  }
 
  if (Record==12) {
    RRXYY_R11=clamp(RRXYY_R11,0,250);
    pmem_write(20,RRXYY_R11);
    RRXYY_R10=clamp(RRXYY_R10,0,250);
    pmem_write(21,RRXYY_R10);
    RRXYY_R21=clamp(RRXYY_R21,0,250);
    pmem_write(22,RRXYY_R21);
    RRXYY_X11=clamp(RRXYY_X11,0,250);
    pmem_write(23,RRXYY_X11);
    RRXYY_X10=clamp(RRXYY_X10,0,1000);
    pmem_write(24,RRXYY_X10);
    RRXYY_Y11=clamp(RRXYY_Y11,0,250);
    pmem_write(26,RRXYY_Y11);
    RRXYY_Y10=clamp(RRXYY_Y10,0,250);
    pmem_write(27,RRXYY_Y10);
    RRXYY_Y21=clamp(RRXYY_Y21,0,250);
    pmem_write(28,RRXYY_Y21);
    RRXYY_Y20=clamp(RRXYY_Y20,0,1000);
    pmem_write(29,RRXYY_Y20);
    Record=0; bRecStart=FALSE;
    led_reset();
    PMSaveNow = TRUE; ICUpdate = TRUE;
  }
 
  if (oldRecord != Record) {
    oldRecord = Record;
    printf("record position: %d",Record);
    display_overlay(mask[Record],1000);
  }
 
}
 
 
void swap(uint8 ida, uint8 idb) {
    fix32 val_ida = get_val(ida);
    set_val(ida, get_val(idb));
    set_val(idb, val_ida);
    return;
}
 
// Update the interactive configuration window, but not faster than every 1 second
void ICRefresh() {
    if (ICUpdate && ICULast < system_time()) {
        //printf("ic update");
        printf("GCMD:InteractiveConfiguration.Refresh");
        ICUpdate = FALSE;
        ICULast = system_time() + 1000;
    }
}
 
// Update the persistent memory, but not faster than every 10 seconds
void PMSave() {
    if (PMSaveNow && PMSLast < system_time()) {
        //printf("gespeichert");
        PMSaveNow = FALSE;
        PMSLast = system_time() + 10000;
        if (! SAVE_CHANGES) return; // don't save if checkbox is not checked
        pmem_save();
    }
}
 
combo RapidfireRight {
    set_val(B_RFIRE, 100);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(10);
    set_val(B_RFIRE, 0);
}
 
combo RapidfireLeft {
    set_val(B_LFIRE, 100);
    wait(30);
    set_val(B_LFIRE, 0);
    wait(10);
    set_val(B_LFIRE, 0);
}
 
 
combo _FIVESHOT {
    set_val(B_RFIRE, 100);
    wait(FSHOT_RiFiPWait);    // right fire press wait 
    wait(FSHOT_RiFiRWait);    // right fire release wait
    set_val(B_RFIRE, 100)
    wait(FSHOT_RiFiPWait);    // right fire press wait 
    set_val(B_RELOAD, 100);
    wait(FSHOT_ReloadPWait)// reload press wait     
    wait(FSHOT_ReloadRWait)// reload release wait   
    call(YY);                 // YY-Combo
    wait(YYAwait);            // YY-Combo Wait after   
}
 
 
// fire/fire/reload/weaponchange/weaponchange
combo _RRXYY {
    set_val(B_RFIRE, 100.00);
    wait(130);
    set_val(B_RFIRE, 0.00);
    wait(40);
    set_val(B_RFIRE, 100.00);
    wait(20);
    set_val(B_RELOAD, 100.00);
    wait(90);
    set_val(B_RFIRE, 0.00);
    set_val(B_RELOAD, 0.00);
    wait(130);
    call(YY);
}
 
//XSV 261 Timing
combo _XSV_261 {
    set_val(B_MELEE, 100);
    wait(11);
    set_val(B_MELEE, 0);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(311);
     set_val(B_RFIRE, 100);
    wait(90);
    set_val(B_RFIRE, 0);
    wait(60);
    set_val(B_RFIRE, 100);
    wait(40);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(20);
    set_val(B_RFIRE, 0);
    wait(261);
}
 
//XSV 271 Timing
combo _XSV_271 {
    set_val(B_MELEE, 100);
    wait(11);
    set_val(B_MELEE, 0);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(30);
    set_val(B_RFIRE, 0);
    wait(311);
     set_val(B_RFIRE, 100);
    wait(90);
    set_val(B_RFIRE, 0);
    wait(60);
    set_val(B_RFIRE, 100);
    wait(40);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 100);
    wait(90);
    set_val(B_RFIRE, 100);
    set_val(B_RELOAD, 0);
    wait(20);
    set_val(B_RFIRE, 0);
    wait(271);
}
 
combo YY {
    set_val(B_WEAPON, 100);
    wait(YY_BWPWait);       //  B_Weapon press wait 
    wait(YY_RWPWait);       //  B_Weapon release wait
    set_val(B_WEAPON, 100);
    wait(YY_BWPWait);       //  B_Weapon press wait 
}
 
combo Crouch {
    set_val(XB1_LX, 0);
    set_val(XB1_LY, 0);
    set_val(B_CROUCH, 100);
}
 
combo BXB {
    set_val(B_MELEE, 100);
    wait(200); wait(50);
    set_val(B_RELOAD, 100);
    wait(50); wait(400);
    set_val(B_MELEE, 100);
    wait(50);
    set_val(B_MELEE, 100);
    wait(400);
}
 
combo FastReload {
    set_val(B_RELOAD, 100);
    wait(400); wait(600);
    call(YY);
}
 
combo RRBx {
    set_val(B_RFIRE, 100.00);
    wait(130);
    set_val(B_RFIRE, 0.00);
    wait(40);
    set_val(B_RFIRE, 100.00);
    wait(10);
    set_val(B_MELEE, 100);
    wait(50);wait(200);
    set_val(B_RELOAD, 100);
    wait(60);
    set_val(B_RFIRE, 0.00);
    set_val(B_RELOAD, 0.00);
    wait(130);
    call(YY);
    wait(300);
}
 
combo cmbRumble {
    iwait=0;
    if ( iRumble == 4 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 3 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 2 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
 
    iwait=0;
    if ( iRumble == 1 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(iwait);wait(0);
}
 
 
// LED Color 'C'olor , blink duration on , blink duration off, blink count
void ColorLEDVM(char Color, uint16 DurOn, uint16 DurOff, int Count) {
  //if ( DurOff == 0 ) DurOn = 100;
    int Color1, Color2, Color3, Color4;
 
    if(Color == 'B'){Color1 = 1; Color2 = 0; Color3 = 0; Color4 = 0;}
    if(Color == 'R'){Color1 = 0; Color2 = 1; Color3 = 0; Color4 = 0;}
    if(Color == 'G'){Color1 = 0; Color2 = 0; Color3 = 1; Color4 = 0;}
    if(Color == 'P'){Color1 = 0; Color2 = 0; Color3 = 0; Color4 = 1;}
    if(Color == 'C'){Color1 = 1; Color2 = 0; Color3 = 1; Color4 = 0;}
    if(Color == 'A'){Color1 = 0; Color2 = 1; Color3 = 1; Color4 = 0;}
    if(Color == 'W'){Color1 = 1; Color2 = 1; Color3 = 1; Color4 = 1;}
    led_reset();
  if (Color1) if (DurOff > 0) led_vmset(LED_1, DurOn, DurOff, Count); else led_set(LED_1,(fix32)DurOn,0);
    if (Color2) if (DurOff > 0) led_vmset(LED_2, DurOn, DurOff, Count); else led_set(LED_2,(fix32)DurOn,0);
    if (Color3) if (DurOff > 0) led_vmset(LED_3, DurOn, DurOff, Count); else led_set(LED_3,(fix32)DurOn,0);
    if (Color4) if (DurOff > 0) led_vmset(LED_4, DurOn, DurOff, Count); else led_set(LED_4,(fix32)DurOn,0);
}


Thanks. That does work. Do you think you could add the option to the interactive config to choose which button triggers the Fire Mode? Like what I'm talking about is I'd like to be able to have my normal fire on RT still, but have my Fire Mode only fire when I press the Fire Mode button. For example, I will set LB to be Fire Mode button in the interactive config.

Also, I currently have the script rumble notify whenever I enable/disable any of the mods with their respective controller shortcuts. How it's set up currently is it rumbles longer whenever I enable any mod and rumbles shorter whenever I disable any mod. But here's how I would like it instead:

Enable mod - Rumble notify twice with the same rumble duration as the current, long rumble
Disable mod - Rumble notify once with the same rumble duration as the current, long rumble

Do you think you could make this change for me as well?
User avatar
Squidward
Lieutenant
Lieutenant
 
Posts: 397
Joined: Tue Dec 23, 2014 4:39 pm

Re: Modify Halo 2 Classic script

Postby J2Kbr » Wed Sep 02, 2020 1:28 pm

Related with the rumble, you have the wait(0); in the wrong order, change it should have the behavior you want:
Code: Select all
combo cmbRumble {
    iwait=0;
    if ( iRumble == 4 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
 
    iwait=0;
    if ( iRumble == 3 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
 
    iwait=0;
    if ( iRumble == 2 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
 
    iwait=0;
    if ( iRumble == 1 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
}

As for you other request, I will check as soon as I have some free time. ;)
ConsoleTuner Support Team
User avatar
J2Kbr
General of the Army
General of the Army
 
Posts: 20323
Joined: Tue Mar 18, 2014 1:39 pm

Re: Modify Halo 2 Classic script

Postby Squidward » Wed Sep 02, 2020 1:40 pm

J2Kbr wrote:Related with the rumble, you have the wait(0); in the wrong order, change it should have the behavior you want:
Code: Select all
combo cmbRumble {
    iwait=0;
    if ( iRumble == 4 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
 
    iwait=0;
    if ( iRumble == 3 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
 
    iwait=0;
    if ( iRumble == 2 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
 
    iwait=0;
    if ( iRumble == 1 ) {
        ffb_set(FFB_1, 100.0, 140);
        iwait=400;
        iRumble--;
    }
    wait(0);wait(iwait);
}

As for you other request, I will check as soon as I have some free time. ;)


That fix for the rumble works great! Thank you. I can't wait to see how the other modification you make is gonna turn out. I appreciate your help. :smile0517:
User avatar
Squidward
Lieutenant
Lieutenant
 
Posts: 397
Joined: Tue Dec 23, 2014 4:39 pm

Re: Modify Halo 2 Classic script

Postby Squidward » Fri Sep 18, 2020 8:34 am

J2Kbr wrote:As for you other request, I will check as soon as I have some free time. ;)


Any luck with this yet?

--------

Also, I've been having a strange intermittent issue ever since you fixed my rumble timings and stuff... Usually 2 or 3 times per match, my controller will start to disconnect (I use the Xbox One Wireless adapter with my T2). I suspect it has to do with the rumbles since it wasn't an issue till you fixed the rumble timings for me. And by the way, I have rumble disabled in game.
User avatar
Squidward
Lieutenant
Lieutenant
 
Posts: 397
Joined: Tue Dec 23, 2014 4:39 pm


Return to GPC2 Script Programming

Who is online

Users browsing this forum: Google [Bot] and 121 guests