Skip to main content

Overview

The FgcMode is designed for traditional fighting games using a hitbox-style layout. It maps all directional inputs to D-Pad buttons (no analog stick movement) and provides an 8-button action layout matching arcade stick conventions.

Constructor

FgcMode()
Creates a new FgcMode instance with default settings.
return
FgcMode
A new mode instance ready for use

Button Layout

Directional Inputs (D-Pad)

Movement

All directional inputs map to D-Pad digital outputs:
  • Left: LF3
  • Right: LF1
  • Down: LF2
  • Up: LT1
Unlike platform fighter modes, FgcMode uses LT1 for Up instead of RF4, providing a more ergonomic left-hand directional cluster.

Action Buttons

Standard fighting game bottom row (typically light buttons):
  • A (Light Punch): RF1
  • B (Light Kick): RF2
  • RT (Right Trigger): RF3
  • LT (Left Trigger): RF4

Button Layout Visualization

Right Hand Layout:

Top Row:     [X]  [Y]  [RB] [LB]
            RF5  RF6  RF7  RF8

Bottom Row:  [A]  [B]  [RT] [LT]
            RF1  RF2  RF3  RF4

Left Hand Layout:

            [Up]
            LT1

[Left] [Down] [Right]
 LF3    LF2     LF1

System Buttons

  • Start: MB1
  • Select: RT3
  • Home: RT2
  • Left Stick Click: LT2
  • Right Stick Click: RT1

Analog Behavior

FgcMode disables all analog stick movement. The analog outputs are centered:
  • Left Stick X: 128 (neutral)
  • Left Stick Y: 128 (neutral)
  • Right Stick X: 128 (neutral)
  • Right Stick Y: 128 (neutral)
  • Left Trigger: 0 or 255 (digital)
  • Right Trigger: 0 or 255 (digital)
This ensures clean digital inputs for fighting game precision.

SOCD Configuration

FgcMode uses SOCD_NEUTRAL (Simultaneous Opposite Cardinal Direction cleaning) by default:
  • Left + Right → Neutral (no input)
  • Down + Up → Neutral (no input)
This is the standard for most fighting game tournaments and matches hitbox conventions.
GameModeConfig config = {
    .mode_id = MODE_FGC,
    .socd_pairs_count = 2,
    .socd_pairs = {
        SocdPair { .button_dir1 = BTN_LF3, .button_dir2 = BTN_LF1, .socd_type = SOCD_NEUTRAL },
        SocdPair { .button_dir1 = BTN_LF2, .button_dir2 = BTN_LT1, .socd_type = SOCD_NEUTRAL },
    },
};
Note the Up button is BTN_LT1 in FgcMode, not BTN_RF4 like in Smash modes.

Button Remapping

FgcMode often benefits from button remapping for the Up button. Example configuration:
GameModeConfig config = {
    .mode_id = MODE_FGC,
    .button_remapping_count = 1,
    .button_remapping = {
        ButtonRemap { .physical_button = BTN_RT4, .activates = BTN_LT1 },
    },
};
This remaps RT4 to also activate the Up input (LT1), providing an alternative Up button placement.

Example Usage

#include "modes/FgcMode.hpp"

// Create FGC mode instance
FgcMode fgc_mode;

// Configure with SOCD neutral
GameModeConfig config = {
    .mode_id = MODE_FGC,
    .socd_pairs_count = 2,
    .socd_pairs = {
        SocdPair { .button_dir1 = BTN_LF3, .button_dir2 = BTN_LF1, .socd_type = SOCD_NEUTRAL },
        SocdPair { .button_dir1 = BTN_LF2, .button_dir2 = BTN_LT1, .socd_type = SOCD_NEUTRAL },
    },
    .button_remapping_count = 1,
    .button_remapping = {
        ButtonRemap { .physical_button = BTN_RT4, .activates = BTN_LT1 },
    },
};

fgc_mode.SetConfig(config);

Game-Specific Mappings

FgcMode works well with various fighting games:
ButtonAction
A (RF1)Light Punch
B (RF2)Light Kick
RT (RF3)Medium Punch
LT (RF4)Medium Kick
X (RF5)Heavy Punch
Y (RF6)Heavy Kick
RB (RF7)3P Macro
LB (RF8)3K Macro

Features

Pure Digital Input

Digital Precision

FgcMode provides:
  • No analog stick drift
  • Frame-perfect directional inputs
  • Consistent motion inputs
  • Tournament-legal SOCD handling

Eight-Button Layout

Arcade Standard

The 8-button layout (2 rows of 4) matches:
  • Arcade stick button placement
  • Hitbox-style controllers
  • Traditional fighting game conventions
  • Easy muscle memory transfer

No Modifiers

FgcMode intentionally has no modifier buttons or analog coordinates. All inputs are direct digital mappings for maximum simplicity and consistency.

Differences from Platform Fighter Modes

Key Differences

FeatureFgcModeMelee/Ultimate
Directional outputD-Pad onlyAnalog stick
Up buttonLT1RF4
SOCD handlingNeutral2IP / 2IP No Reac
Action buttons8 (2 rows of 4)7 + triggers
ModifiersNoneMX/MY
Analog coordinatesDisabledComplex system

Source Code

  • Header: include/modes/FgcMode.hpp
  • Implementation: src/modes/FgcMode.cpp

Build docs developers (and LLMs) love