Accessibility: 4 Modes for One Handed Controllers

On-the-fly swapping of controller modes for a Consoles & Gadgets / Dragonplus RPG controller. Use SELECT + l-stick to change modes (standard, six-axis, touch-pad, swapped sticks). Use SELECT + L2 to (sometimes) muffle the rumble motors. SELECT + R2 to have them at full strength.
Version1.01
AuthorSpecialEffect
Publish DateMon, 5 Dec 2016 - 10:46
Last UpdateMon, 5 Dec 2016 - 11:01
Downloads80
RATE


0

0

Release Notes: Please consider supporting www.specialeffect.org.uk
Code: Select all
// SLOT 01 = One Handed Controller STANDARD (Swap sticks / PS4 modes and Rumble on/off feature)
 
// (HOLD SELECT + UP/DOWN)        = CHANGE SLOT
// (HOLD SELECT + L-STICK LEFT)   = LEFT-STICK MODE (blue LED)
// (HOLD SELECT + L-STICK UP)     = D-PAD MODE (black LED)
// (HOLD SELECT + L-STICK RIGHT)  = RIGHT-STICK MODE (red LED)
// (HOLD SELECT + L-STICK DOWN)   = SIX-AXIS MODE  (white LED - TESTED WITH FLOWER and parts of Everybody's Gone to the Rapture)
 
// (HOLD SELECT + L2) = RUMBLE MOTORS SOFT
// (HOLD SELECT + R2) = RUMBLE MOTORS LOUD
 
 
//     ____                __  __                __         __   __  ______                __ __ _ __            ___
//    / __ \____  ___     / / / /___ _____  ____/ /__  ____/ /  / / / / / /__________ _   / //_/(_) /_     _   _|__ \
//   / / / / __ \/ _ \   / /_/ / __ `/ __ \/ __  / _ \/ __  /  / / / / / __/ ___/ __ `/  / ,<  / / __/    | | / /_/ /

//  / /_/ / / / /  __/  / __  / /_/ / / / / /_/ /  __/ /_/ /  / /_/ / / /_/ /  / /_/ /  / /| |/ / /_      | |/ / __/
//  \____/_/ /_/\___/  /_/ /_/\__,_/_/ /_/\__,_/\___/\__,_/   \____/_/\__/_/   \__,_/  /_/ |_/_/\__/      |___/____/
 
//  OneSwitch.org.uk system to convert DragonPlus RPG type controllers for PS4 use.
//  November 2016
//  Please consider supporting www.SpecialEffect.org.uk
 
 
 
// JOYSTICK SENSITIVITY ADJUSTMENT
define SENSITIVITY = 100; // SENSITIVITY % (DEFAULT=100 - MAX=327).
define MID_POINT = 50; // INPUT MIDPOINT IS (DEFAULT=50  - MORE SENSITIVE=25).
define JOY_DEADZONE = 20; // (DEFAULT=20 - MAX=99 - FOR SENSITIVE TRY 35).
 
define TWEAK = 20; // will add to JOY-DEADZONE - normally useful for one-stick steering
define JOY_BUTTONS_DEADZONE = 80; // JOYSTICK ACTING AS BUTTONS - NEEDS A BIGGER DEADZONE TO AVOID ACCIDENTAL PRESSES
define Z_DEADZONE = 5; // TRIGGERS
define LSTICK_MAX = 100; // ANALOGUE CONTROLS MAXIMUM OUPUT (0-100%)
define RSTICK_MAX = 100;
define TRIGGERS_MAX = 100;
 
 
// MODES
define CLEAR_LED = 9;
define LEFTSTICK = 0;
define TOUCH = 1;
define RIGHTSTICK = 2;
define CUSTOM = 3;
 
define RESTRICTED = 0;          // 0 = OFF   1 = BLOCK MENU BUTTON
define EXTRA_RESTRICTIONS = 0// 0 = OFF   1 = BLOCK BACK/SELECT/SHARE/START/OPTIONS
 
define LOUD = 0;               
define QUIET = 1;
 
int rumble = QUIET;             // QUIET = rumble motors softened  LOUD = rumble motors full strength.
int profile = CLEAR_LED;
 
 
main {
 
// INITIALISE
        if(profile == CLEAR_LED) {profile = LEFTSTICK; colorled(1,0,0,0);}
 
 
// OPTIONAL RESTRICTIONS
        if(RESTRICTED) {set_val(PS3_PS, 0);}
        if(EXTRA_RESTRICTIONS) {set_val(PS4_TOUCH,0); set_val(PS3_START,0); set_val(PS3_SELECT,0);}
        if (rumble) {set_rumble(RUMBLE_A, 0); set_rumble(RUMBLE_B, 0); set_rumble(RUMBLE_LT, 0); set_rumble(RUMBLE_RT, 0);}
 
// SET SENSITIVITY
deadzone(PS3_LX, PS3_LY, DZ_CIRCLE, 0); sensitivity (PS3_LX, MID_POINT, SENSITIVITY);sensitivity (PS3_LY, MID_POINT, SENSITIVITY);
deadzone(PS3_RX, PS3_RY, DZ_CIRCLE, 0); sensitivity (PS3_RX, MID_POINT, SENSITIVITY);sensitivity (PS3_RY, MID_POINT, SENSITIVITY);
 
 
// IF "SELECT" HELD...
 
    if(get_val(PS3_SELECT)) {
 
        if(event_press(PS3_UP)) load_slot(1); // CHANGE SLOT (L1+UP/DOWN)
        else if(event_press(PS3_DOWN)) load_slot(1);
 
 
        if(event_press(PS3_L2)) {rumble = QUIET; combo_run(SOFT_BUZZ);}
        if(event_press(PS3_R2)) {rumble = LOUD; combo_run(LOUD_BUZZ);}
        if(get_val(PS3_CROSS) && !RESTRICTED) { set_val(PS3_PS, 100); set_val(PS3_CROSS, 0); }
 
 
        else if(get_val(PS3_LX) <= -JOY_BUTTONS_DEADZONE) { profile = LEFTSTICK; colorled(1,0,0,0); } // CHANGE SUB MODE VIA "L1" + STICK DIRECTION
        else if(get_val(PS3_LY) <= -JOY_BUTTONS_DEADZONE) { profile = TOUCH; colorled(0,0,0,0); }
        else if(get_val (PS3_LX) >= JOY_BUTTONS_DEADZONE) { profile = RIGHTSTICK; colorled(0,1,0,0); }
        else if(get_val(PS3_LY) >= JOY_BUTTONS_DEADZONE) { profile = CUSTOM; colorled(2,2,2,2); }
 
        set_val(TRACE_1, profile);
 
        set_val(PS3_UP, 0); set_val(PS3_DOWN, 0); // CLEAR CONTROLS
        set_val(PS3_SELECT, 0); set_val(PS3_START, 0);
        set_val(PS3_R1, 0); set_val(PS3_L2, 0); set_val(PS3_R2, 0); set_val(PS3_L3, 0); set_val(PS3_R3, 0);
        set_val(PS3_LX, 0); set_val(PS3_LY, 0); set_val(PS3_RX, 0); set_val(PS3_RY, 0);
 
    } else if(event_release(PS3_SELECT) && get_ptime(PS3_SELECT) < 300) {combo_run(SELECTap);}
 
 
 
 
 
// LEFT-STICK MODE (BLUE)
 
        if(profile == LEFTSTICK) {
 
        if(get_val(PS3_LX) <= JOY_DEADZONE && get_val(PS3_LX) >= JOY_DEADZONE*-1) set_val(PS3_LX,0); // DEAD-ZONE FILTER
        if(get_val(PS3_LY) <= JOY_DEADZONE && get_val(PS3_LY) >= JOY_DEADZONE*-1) set_val(PS3_LY,0);
        if(get_val(PS3_L2) <= Z_DEADZONE && get_val(PS3_L2) >= Z_DEADZONE*-1) set_val(PS3_L2,0);
 
        if(get_val(PS3_LX) >= LSTICK_MAX) {set_val(PS3_LX, LSTICK_MAX);} // MAXIMUM STRENGTH LIMITER
        if(get_val(PS3_LX) <= -LSTICK_MAX) {set_val(PS3_LX, -LSTICK_MAX);}
        if(get_val(PS3_LY) >= LSTICK_MAX) {set_val(PS3_LY, LSTICK_MAX);}
        if(get_val(PS3_LY) <= -LSTICK_MAX) {set_val(PS3_LY, -LSTICK_MAX);}
        if(get_val(PS3_L2) >= TRIGGERS_MAX) {set_val(PS3_L2, TRIGGERS_MAX);}
        }
 
 
 
// CUSTOM MODE (BLACK) - TOUCH PAD
 
        else if(profile == TOUCH) {
 
        deadzone(PS3_LX, PS3_LY, DZ_CIRCLE, 0); sensitivity (PS3_LX, 60, 100);sensitivity (PS3_LY, 60, 100);
        deadzone(PS3_RX, PS3_RY, DZ_CIRCLE, 0); sensitivity (PS3_RX, MID_POINT, SENSITIVITY);sensitivity (PS3_RY, MID_POINT, SENSITIVITY);
 
        if(get_val(PS3_CROSS) > 0) { set_val(PS4_TOUCH, 100); set_val(PS3_CROSS, 0); }
 
        if(abs(get_val(PS3_LY)) > 20 || abs(get_val(PS3_LX)) > 20) {ps4_set_touchpad(get_val(PS3_LX), get_val(PS3_LY));}
          set_val(PS3_L3, 0); set_val(PS3_LY, 0); set_val(PS3_LX, 0);
 
        if(get_val(PS3_L2) >= TRIGGERS_MAX) {set_val(PS3_L2, TRIGGERS_MAX);} // MAXIMUM STRENGTH LIMITER   
        }
 
 
 
// RIGHT-STICK MODE (RED)
 
        else if(profile == RIGHTSTICK) {
        swap(PS3_LX, PS3_RX); swap(PS3_LY, PS3_RY); // REMAPPING
 
        if(get_val(PS3_RX) <= JOY_DEADZONE && get_val(PS3_RX) >= JOY_DEADZONE*-1) set_val(PS3_RX,0); // DEAD-ZONE FILTER
        if(get_val(PS3_RY) <= JOY_DEADZONE && get_val(PS3_RY) >= JOY_DEADZONE*-1) set_val(PS3_RY,0);
        if(get_val(PS3_R2) <= Z_DEADZONE && get_val(PS3_R2) >= Z_DEADZONE*-1) set_val(PS3_R2,0);
 
        if(get_val(PS3_RX) >= RSTICK_MAX) {set_val(PS3_RX, RSTICK_MAX);} // MAXIMUM STRENGTH LIMITER
        if(get_val(PS3_RX) <= -RSTICK_MAX) {set_val(PS3_RX, -RSTICK_MAX);}
        if(get_val(PS3_RY) >= RSTICK_MAX) {set_val(PS3_RY, RSTICK_MAX);}
        if(get_val(PS3_RY) <= -RSTICK_MAX) {set_val(PS3_RY, -RSTICK_MAX);}
        if(get_val(PS3_L2) >= TRIGGERS_MAX) {set_val(PS3_L2, TRIGGERS_MAX);}
        }
 
 
// CUSTOM MODE (WHITE)
 
        else if(profile == CUSTOM) {
 
        if(get_val(PS3_LY) > 20) {set_val(PS3_ACCY, get_val(PS3_LY)/4); set_val(PS3_LY, 0);}
          else {set_val(PS3_ACCY, get_val(PS3_LY)/4); set_val(PS3_LY, 0);}
 
        if(get_val(PS3_LX) > 20) {set_val(PS4_ACCZ, -25);set_val(PS4_ACCX, get_val(PS3_LX)/4 * -1);set_val(PS4_GYROY, get_val(PS3_LX)/15 * -1);set_val(PS3_LX, 0);}
          else {set_val(PS4_ACCZ, -25); set_val(PS4_ACCX, get_val(PS3_LX)/4 * -1); set_val(PS4_GYROY, get_val(PS3_LX)/15 * -1); set_val(PS3_LX, 0);}
 
        if(get_val(PS3_L2) >= TRIGGERS_MAX) {set_val(PS3_L2, TRIGGERS_MAX);} // MAXIMUM STRENGTH LIMITER   
        }
}
 
 
combo SELECTap {set_val(PS3_SELECT, 100); wait(80);} // TAPPED "SELECT"
combo LOUD_BUZZ {set_val(PS3_L2, 0); set_rumble(RUMBLE_A, 100); set_rumble(RUMBLE_B, 100); wait(250); set_rumble(RUMBLE_A, 0); set_rumble(RUMBLE_B, 0)} // BUZZ RUMBLE MOTOR
combo SOFT_BUZZ {set_val(PS3_R2, 0); set_rumble(RUMBLE_A, 10); set_rumble(RUMBLE_B, 10); wait(80); set_rumble(RUMBLE_A, 0); set_rumble(RUMBLE_B, 0)}
 
 
// COLOR LED INDICATION for PS4 *NO NEED TO EDIT BELOW*
//--------------------------------------------------------------
function colorled(a,b,c,d) {
set_led(LED_1,a);
set_led(LED_2,b);
set_led(LED_3,c);
set_led(LED_4,d);
}
 
// colorled(0,0,0,0); // Off / No LED light
// colorled(1,0,0,0); // Dim Blue
// colorled(0,1,0,0); // Dim Red
// colorled(0,0,1,0); // Dim Lime/Green
// colorled(0,0,0,1); // Dim Fuchsia/Pink
// colorled(1,0,1,0); // Dim SkyBlue
// colorled(0,1,1,0); // Dim Yellow
// colorled(1,1,1,1); // Dim White
// colorled(2,0,0,0); // Blue 
// colorled(0,2,0,0); // Red
// colorled(0,0,2,0); // Lime/Green
// colorled(0,0,0,2); // Fuchsia/Pink
// colorled(2,0,2,0); // SkyBlue
// colorled(0,2,2,0); // Yellow
// colorled(2,2,2,2); // White
// colorled(3,0,0,0); // Bright Blue
// colorled(0,3,0,0); // Bright Red
// colorled(0,0,3,0); // Bright Lime/Green
// colorled(0,0,0,3); // Bright Fuchsia/Pink
// colorled(3,0,3,0); // Bright SkyBlue
// colorled(0,3,3,0); // Bright Yellow
// colorled(3,3,3,3); // Bright white
// ColorLed (1) Dim light
// ColorLed (2) LEFTSTICK/Medium
// ColorLed (3) Bright light
 
// Many thanks to Jefferson Koppe and others at the Console Tuner community for help with these scripts.
// Colour help via: http://www.consoletuner.com/gpclib/?s=897.
// Six-axis help via: http://www.consoletuner.com/gpclib/?s=209&r=p (CypherNova139)
// Contact [email protected] for more help