Overview
TheProjectM mode is specifically designed for Project M and Project+ with coordinates optimized for their physics engines. It features wider analog stick ranges (28-228 vs 48-208), adjusted modifier values, and a configurable Z-button behavior.
Constructor
A new mode instance ready for configuration
Configuration
SetConfig
Base configuration including SOCD pairs and button remapping
Project M-specific configuration options
ProjectMOptions
TheProjectMOptions struct configures mode-specific behavior:
When true, RF3 sends true Z (R button). When false, RF3 sends lightshield + A macro (except when Mod X is held).
Disable horizontal SOCD override for ledgedash maximum jump trajectory
Enable custom airdodge angle instead of default (82, 35)
Custom X-axis coordinate for MX + diagonal + R (0-100)
Custom Y-axis coordinate for MX + diagonal + R (0-100)
Button Layout
Digital Outputs
Action Buttons
- A: RT1 (or RT1 + RF3 if Z macro enabled)
- B: RF1
- X: RF2
- Y: RF6
- L: LF4 (or Nunchuk Z when connected)
- R: RF5 (or RF3 if true_z_press enabled)
- Z: RF3 (behavior depends on configuration)
- Start: MB1
- D-Up: RF8 (or via MX+MY layer)
RF3 behavior is configurable:
- true_z_press = false (default): Lightshield (49) + A button macro
- true_z_press = true: True Z press (R button)
- With Mod X held: Always sends true Z regardless of setting
Directional Inputs
Movement
- Left: LF3
- Right: LF1
- Down: LF2
- Up: RF4
C-Stick
- C-Left: RT3
- C-Right: RT5
- C-Down: RT2
- C-Up: RT4
Modifiers
Modifier Buttons
- Mod X: LT1
- Mod Y: LT2
- Lightshield: RF7 (49 analog)
D-Pad Layer
Activate by holding Mod X + Mod Y or Nunchuk C:- D-Up: RT4 (also available as RF8 standalone)
- D-Down: RT2
- D-Left: RT3 (or MB3)
- D-Right: RT5 (or MB2)
Analog Stick Range
Extended Range
Project M uses wider analog stick ranges than Melee:
- Minimum: 28 (vs 48 in Melee)
- Neutral: 128 (same)
- Maximum: 228 (vs 208 in Melee)
Modifier Coordinates
Mod X (LT1)
- Cardinal Directions
- Diagonal Angles
- Angled C-Stick
| Input | Coordinates | Offset | Usage |
|---|---|---|---|
| MX + Left/Right | 128 ± 70 | 70 | Horizontal tilt |
| MX + Up/Down | 128 ± 60 | 60 | Vertical positioning |
Mod Y (LT2)
- Cardinal Directions
- Diagonal Angles
| Input | Coordinates | Offset | Usage |
|---|---|---|---|
| MY + Left/Right | 128 ± 35 | 35 | Slow walk |
| MY + Up/Down | 128 ± 70 | 70 | High vertical |
Default Coordinates
No Modifiers
| Input | Coordinates | Offset | Usage |
|---|---|---|---|
| Cardinal | 128 ± 100 | 100 | Full range |
| Q1/Q2 Diagonal | (83, 93) | 83, 93 | Upper quadrants |
Special Features
SOCD Configuration
Z-Button Macro System
The Z-button (RF3) has flexible behavior:- Lightshield + A Macro (Default)
- True Z Press
When
true_z_press = false:- Sends A button + lightshield (49 analog) simultaneously
- Useful for Z-canceling and lightshield techniques
- Override: Hold Mod X to send true Z instead
Ledgedash SOCD Override
When horizontal SOCD is detected and:- No vertical direction is held
- No shield button is pressed (LF4 or RF7)
disable_ledgedash_socd_overrideis false
C-Stick ASDI Slideoff
With C-Left/Right + C-Down (but not C-Up + C-Left/Right):- Coordinates: (35, 98) = 3000, 9875
- Optimized for PM/P+ slideoff mechanics
- Preserves C-stick nair possibility with up+horizontal
D-Pad Up Standalone
Unique to ProjectM: RF8 always maps to D-Pad Up, even outside the MX+MY layer. This is combined with any existing D-Pad Up input from the layer.
Nunchuk Support
When a Wii Nunchuk is connected:
- Z button → L trigger
- C button → D-Pad layer activation
- Analog stick → Overrides left stick completely
Example Usage
Differences from Melee Modes
Key Differences
| Feature | ProjectM | Melee20Button |
|---|---|---|
| Analog range | 28-228 (±100) | 48-208 (±80) |
| Z-button | Configurable macro | Direct Z |
| D-Up button | RF8 standalone | Via layer only |
| Default diagonal | (83, 93) Q1/Q2 | (56, 56) all |
| MX horizontal | ±70 | ±53 |
| MY vertical | ±70 | ±59 |
Related Modes
- Melee20Button - Vanilla Melee optimized coordinates
- Melee18Button - 18-button Melee variant
Source Code
- Header:
include/modes/ProjectM.hpp - Implementation:
src/modes/ProjectM.cpp
