FFXIV Game Plugin
Relevant source files
The following files were used as context for generating this wiki page:
The FFXIV Game Plugin provides specialized logic to authenticate and launch Final Fantasy XIV within the El'Garnan plugin architecture. It manages secure session acquisition, server status verification, and provides a custom graphical interface for the launcher.
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:41-45, Plugins/FFXIV/Elgarnan.xml:184-188
Architecture and Components
The plugin inherits from GamePluginBase and implements the IGamePlugin interface. It operates as a modular component loaded dynamically by the CoreFunctions system. The plugin relies on reflection to interact with underlying libraries like ImGui.NET and CoreLibLaunchSupport.
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:17, El'GarnanPluginSystem/CoreFunctions.cs:100-110, El'GarnanPluginSystem/Interfaces/pluginbase.cs:15
Component Relationship
The following diagram illustrates the relationship between the FFXIV Plugin and the core system:
The plugin defines specific metadata used by the loader for identification and dependency management.
| Property | Value |
|---|---|
| PluginId | ffxiv-launcher |
| Name | FFXIV Game Launcher |
| TargetApplication | ffxiv_dx11.exe |
| SupportsImGui | true |
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:51-57
Authentication and Launch Logic
The plugin executes a multi-step sequence to launch the game. You must provide valid environment variables for the process to succeed. It verifies server availability before attempting to acquire a session.
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:646-655
Launch Sequence Flow
The following sequence diagram describes the interaction between the plugin and the network logic:
Security and Credentials
The plugin retrieves credentials from GameLaunchParameters.EnvironmentVariables. It expects the following keys:
FFXIV_USERNAMEFFXIV_PASSWORDFFXIV_OTP
If any credential is missing, the plugin throws an ArgumentException.
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:657-670, Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:696-702
Graphical User Interface (ImGui)
The plugin uses ImGui.NET to render a custom launcher window. Because it is a dynamically loaded plugin, it initializes ImGui bindings through reflection to ensure compatibility with the host application's memory space.
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:72-132
Initialization Process
- Load Assemblies: The plugin loads
ImGui.NETandSystem.Numericsinto thePluginLoadContext. - Find Methods: It locates static methods such as
Begin,End,Text, andSetNextWindowPos. - Initialize Flags: It converts integer bitmasks to
ImGuiWindowFlagsenums.
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:208-250
Window Rendering Logic
The RenderImGui method defines the visual layout. It performs the following actions:
- Calculates the window center based on the
DisplaySizeretrieved fromImGui.IO. - Sets window flags to disable the title bar, resizing, and collapsing.
- Checks the gate and login server status via
networklogic. - Renders a custom background using
AddRectFilledon theWindowDrawList. - Renders an animated loading spinner using
AddArcwith time-based angles.
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:282-310, Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:575-635
Dependencies
The plugin specifies strict version requirements for its operation. The CoreFunctions loader validates these dependencies before initialization.
| Dependency | Minimum Version |
|---|---|
| CoreLibLaunchSupport | 1.0.0 |
| LibDalamud | 1.0.0 |
| ImGui.NET | 1.89.4 |
| Veldrid | 4.9.0 |
Sources: Gameplugins.Plugin.FFXIV/FFXIVGamePlugin.cs:60-65, El'GarnanPluginSystem/CoreFunctions.cs:133-145
Summary
The FFXIV Game Plugin serves as the specialized interface between the El'Garnan launcher and the Final Fantasy XIV service. It abstracts complex authentication flows—including SID acquisition and hash-checking—into a standard plugin interface. By utilizing reflection-based ImGui rendering, it provides a consistent user experience while maintaining strict isolation from the host application.