Before You Start
Prerequisites
-
Familiarity with the tools
- IDA Pro, Ghidra, or Binary Ninja
- Basic understanding of x64 assembly
- Knowledge of C/C++ structures and classes
-
Setup complete
- Scripts installed and working
- data.yml successfully applied to your disassembly
- Git and GitHub account configured
-
Current game version
- Working with the latest FFXIV patch
- Fresh analysis of ffxiv_dx11.exe
What to Contribute
Valuable contributions include:- New classes and structures not yet documented
- Virtual function names for existing classes
- Member function discoveries and their purposes
- Global variables and singletons
- Signatures for important functions
- Fixes for incorrect or outdated information
- Documentation improvements and comments
Research Workflow
1. Choose a Target
Good starting points:- Follow the code from known UI addons to find new structures
- Trace game features you understand well
- Examine vtables with unnamed virtual functions
- Look for patterns in constructor functions
- Search for strings related to game features
2. Document Your Findings
As you explore, keep notes:3. Verify Your Findings
Before submitting:- Cross-reference addresses in multiple functions
- Test function signatures with SigScanner/sigmaker
- Verify vtable sizes match class hierarchy
- Check inheritance makes logical sense
- Confirm addresses haven’t already been documented
4. Update data.yml
Add your findings to data.yml following the data.yml format.Example Addition
5. Test Your Changes
- Run ffxiv_idarename.py (or equivalent for your tool)
- Check console output for errors
- Navigate to renamed symbols in the disassembler
- Verify names applied correctly
- Check for conflicts with existing entries
6. Generate Signatures (If Applicable)
For important functions that plugins might need: Using SigScanner (Ghidra):- Place cursor on function’s first instruction
- Press
Ctrl+Alt+S - Signature copied to clipboard
- Follow the tool’s instructions
- Generate signature for the function
Submitting Your Contribution
Fork and Clone
- Fork the FFXIVClientStructs repository on GitHub
- Clone your fork:
- Add upstream remote:
Create a Branch
feature/addon-partylistfix/framework-vtable-sizeupdate/exd-module-vfuncsdocs/improve-data-yml-comments
Make Your Changes
-
Edit data.yml:
-
Update version if needed:
- Add your findings following the format guidelines
- Test thoroughly as described above
Commit Your Changes
Good Commit Messages
- Descriptive: Explain what was added/changed
- Concise: One line summary
- Detailed: Add multi-line description if needed
Push to Your Fork
Create a Pull Request
- Navigate to your fork on GitHub
- Click “Pull Request” or “Compare & pull request”
-
Write a clear title:
-
Provide detailed description:
- Submit the pull request
Review Process
What to Expect
- Review time: Usually within a few days to a week
- Feedback: Maintainers may request changes or clarifications
- Testing: Others may verify your findings on their setups
- Iteration: Be prepared to make adjustments
Common Review Feedback
“Can you verify this address in patch X.XX?”- Maintainer wants confirmation for a specific version
- Re-check the address and confirm
- Address or name already in use
- Investigate and resolve the conflict
- Include comments explaining what the function does
- Add parameter information if known
- Important function that should have a signature
- Use SigScanner or sigmaker to create one
Responding to Feedback
-
Make requested changes:
- Reply to comments on GitHub to explain your changes
- Be patient and collaborative - reviews help ensure quality
Best Practices
Quality Over Quantity
- One well-documented class is better than ten half-researched ones
- Verify addresses thoroughly before submitting
- Add comments to explain non-obvious findings
- Test changes in your disassembler first
Stay Organized
- One pull request per feature when possible
- Group related changes (e.g., all UI::Agent classes together)
- Keep commits atomic (one logical change per commit)
- Update version only once per PR
Documentation
- Comment tricky findings in data.yml
- Explain your methodology in the PR description
- Link to related structures when relevant
- Note uncertainties if you’re not 100% sure
Communication
- Ask questions if you’re unsure about something
- Join discussions on existing PRs to learn
- Share knowledge about your research process
- Be respectful of others’ work and feedback
Common Contribution Scenarios
Scenario 1: Found a New Addon Class
- Identify the class name (from strings or context)
- Find its vtable address (from constructor)
- Determine base class (compare vtable layout)
- Name visible virtual functions (especially Update/Draw)
- Find constructor and key member functions
- Add to data.yml and submit PR
Scenario 2: Named Virtual Functions in Existing Class
- Find the class definition in data.yml
- Add your vfunc discoveries:
- Submit PR with explanations of what each function does
Scenario 3: Found Global Variables
- Identify the variable’s purpose
- Determine its type if possible
- Add to globals section:
- Submit PR
Scenario 4: Fixed Incorrect Data
- Document the error (wrong address, wrong name, etc.)
- Provide correct information
- Explain how you verified the fix:
Scenario 5: Updated for New Patch
- Compare old and new game versions
- Use version tracking tools if available
- Update changed addresses:
- Update version field
- Submit PR noting which addresses changed
Advanced Topics
Working with RTTI Data
The classinformer.csv file contains historical RTTI data:- Validate class hierarchies against old builds
- Find historical names for classes
- Understand inheritance relationships
Cross-Referencing with Lumina
When working with Exd-related code:- Check sheet definitions in Lumina
- Match sheet indices to names
- Document getter functions accordingly
Using Version Control History
Learn from past contributions:Troubleshooting
My PR was closed without merging
Possible reasons:- Already documented by someone else
- Incorrect information that couldn’t be verified
- Out of date with current game version
- Doesn’t follow contribution guidelines
I found a conflict during git pull
Someone else edited the same part of data.yml:Script errors after my changes
Common issues:-
Syntax error in YAML:
- Check indentation (use spaces, not tabs)
- Verify colons and formatting
- Validate with a YAML linter
-
Invalid address:
- Ensure 0x prefix on all addresses
- Check address is in valid range
- Verify address exists in executable
-
Missing base class:
- Add placeholder entry for base class
- Or remove base reference if incorrect
-
Duplicate entry:
- Search data.yml for existing address/name
- Resolve conflict or remove duplicate
Getting Help
Resources
- GitHub Issues: Ask questions about the project
- Pull Request Comments: Get feedback on your contribution
- Discord/Community: Join FFXIV modding communities
- Documentation: Review all RE documentation pages
Asking Good Questions
- Be specific: “How do I find vtable addresses?” not “How does this work?”
- Show your work: Share what you’ve tried already
- Provide context: Game version, tool used, error messages
- Include examples: Screenshots or code snippets help
Recognition
Contributors are credited through:- Git commit history preserves your authorship
- Pull request discussions show your contributions
- Community recognition from helping advance the project
Next Steps
- Review the data.yml format in detail
- Practice with IDA scripts or Ghidra scripts
- Study existing data.yml entries to learn patterns
- Start with small contributions and work your way up
- Join the community and learn from other reverse engineers