The ProjectM mode in HayBox includes specialized options to handle differences between Project M/Project+ and Melee mechanics, particularly around Z button behavior and movement options.
HayBox provides the true_z_press option to control Z button behavior:
// ProjectM.cpp - Lines 26-31if (_options.true_z_press || inputs.lt1) { outputs.buttonR = inputs.rf3; // Send actual Z press} else { outputs.a = inputs.rt1 || inputs.rf3; // Send A press instead}
Default (true_z_press = false)
True Z Press (true_z_press = true)
Behavior: Z button sends Lightshield + A macro
// When Z (rf3) is pressed:outputs.a = inputs.rt1 || inputs.rf3; // A button output// Lightshield is added via trigger analog:if (inputs.rf3 && !(inputs.lt1 || _options.true_z_press)) { outputs.triggerRAnalog = 49; // Lightshield analog value}
Advantages:
Safe L-canceling without tech lockout
Consistent behavior with Melee muscle memory
No need to change L-cancel timing
Limitations:
Cannot use tether/grapple attacks
Cannot grab items with Z
Cannot use Z for aerial grabbing
Behavior: Z button sends actual Z input to the game
outputs.buttonR = inputs.rf3; // True Z press
Advantages:
Can use tether/grapple attacks (Link, Samus, Ivysaur, etc.)
const Config default_config = { // ... .project_m_options = { .true_z_press = true, // Set to false for lightshield + A macro .disable_ledgedash_socd_override = false, }, // ...};
This setting in /HAL/pico/include/config_defaults.hpp controls the default behavior on plugin.Default value: true (actual Z press for full functionality)
When left and right are both held (horizontal SOCD)
No vertical direction is held
No shield button is pressed
The stick outputs a perfect 1.0 cardinal (value 100 from center)
Purpose: Provides maximum horizontal jump trajectory for ledgedashing, regardless of modifiers held.
Note the difference from Melee: Project M’s ledgedash override uses coordinate value 100 (10000 in game units) compared to Melee’s 80 (8000). This is because PM/P+ uses extended stick range.