Overview
Follow these best practices to create mods that are stable, compatible, and easy to maintain.Project Organization
File Naming
Directory Structure
Organize your modding workspace:Version Control
Using Git
Using Git
Track your projects with Git:.gitignore for mods:
Commit Messages
Commit Messages
Write clear commit messages:✅ Good:❌ Avoid:
Branching Strategy
Branching Strategy
Use branches for major changes:
Asset Modification
Texture Best Practices
- Format Selection
- Resolution
- Mipmaps
Choose appropriate texture formats:
| Use Case | Format | Notes |
|---|---|---|
| Color (no alpha) | BC1 | 6:1 compression |
| Color + alpha | BC3 | Good quality |
| High quality | BC7 | Best quality, larger |
| Normal maps | BC5 | Optimized for normals |
| HDR lighting | BC6H | High dynamic range |
Mesh Best Practices
Topology
Topology
Maintain good mesh topology:
- Quad-based: Use quads where possible
- Triangulate: Triangulate before export
- No N-gons: Avoid faces with >4 sides
- Clean geometry: Remove doubles, fix normals
- Proper UVs: No overlapping (unless intentional)
Polygon Count
Polygon Count
Match or slightly improve original counts:High poly counts hurt performance, especially for multiple instances.
Vertex Data
Vertex Data
Preserve vertex channel requirements:Required Channels:
- Position (always)
- Normal (always)
- UV0 (almost always)
- Tangent/Bitangent (for normal maps)
- Vertex Colors (if original had them)
- Additional UVs (match original count)
- Max bones per vertex: Match original
- Normalize weights
- Remove unused influences
Material Assignment
Material Assignment
Keep materials organized:
- Use descriptive material names
- Match original material count
- Preserve material IDs
- Don’t create unnecessary materials
EBX Property Editing
- Safe Changes
- Risky Changes
- Testing
Generally safe to modify:
- Numeric values: Damage, range, speed
- Boolean flags: Enable/disable features
- Strings: Names, descriptions
- Colors: RGB values
- Asset references: Swap textures/meshes
Compatibility
Mod Conflicts
Minimize Conflicts
Reduce chances of conflicts:
- Modify only what’s needed: Don’t change unnecessary assets
- Avoid popular assets: Commonly modded assets conflict more
- Provide alternatives: Offer compatible versions
- Document changes: List all modified assets
Test with Popular Mods
Before release, test with:
- Top 10 most downloaded mods
- Mods in same category
- Known overhaul mods
- Different load orders
Game Version Compatibility
Version Tracking
Version Tracking
Track which game version your mod targets:
- Project file: Stores game version (head revision)
- Description: Document game version in mod description
- Updates: Test after game patches
- Changelog: Note when updating for new game version
Handling Updates
Handling Updates
When game updates:
- Wait for Frosty update: Ensure toolsuite supports new version
- Test existing mod: Check if still works
- Update if needed: Fix broken assets
- Increment version: Update mod version number
- Notify users: Announce compatibility
Performance Optimization
Resource Size
Runtime Performance
Texture Streaming
Texture Streaming
Be mindful of texture streaming:
- Mipmap chains: Ensure proper mipmap generation
- Chunk ranges: Don’t break texture chunk data
- FirstMip value: Maintain for streaming textures
- LogicalOffset/Size: Required for proper loading
Mesh Optimization
Mesh Optimization
Optimize mesh rendering:
- LOD levels: Provide multiple detail levels
- Polygon budget: Stay within reasonable limits
- Vertex cache: Optimize vertex order
- Material count: Minimize draw calls
Bundle Organization
Bundle Organization
Organize assets efficiently:
- Related assets: Keep in same bundle
- Streaming: Use appropriate bundle types
- Size balance: Don’t create massive bundles
Documentation
Mod Description Template
Screenshots
Testing
Pre-Release Testing
Functional Testing
Verify core functionality:
- All modified assets load
- No crashes during normal gameplay
- Visual changes appear correctly
- Gameplay changes work as intended
- No console errors
Compatibility Testing
Test with other mods:
- Works alone
- Works with popular mods
- No conflicts in multiple load orders
- Performance acceptable
Edge Case Testing
Test unusual scenarios:
- Quick save/load
- Long play sessions (memory leaks)
- Different graphics settings
- Minimum spec hardware (if possible)
Bug Reporting Template
Provide users with a bug report template:Release Process
Final Testing
Before release:
- Full playthrough test
- Clean game install test
- Performance profiling
- Asset validation
Prepare Release
Package for distribution:
- Export final .fbmod
- Write/update README
- Create changelog
- Gather screenshots
- Record demonstration video (optional)
Upload
Publish to platforms:
- Choose appropriate category
- Add descriptive tags
- Include all screenshots
- Link to documentation
- Set correct game version
Maintenance
Update Strategy
Version Numbering
Version Numbering
Use semantic versioning:Format: MAJOR.MINOR.PATCH
- MAJOR: Breaking changes, incompatible
- MINOR: New features, backwards compatible
- PATCH: Bug fixes only
1.0.0→1.0.1: Bug fix1.0.1→1.1.0: New feature1.1.0→2.0.0: Major overhaul
Changelog Format
Changelog Format
Maintain detailed changelogs:
Deprecation
Deprecation
When retiring features:
- Announce early: Warn users in advance
- Provide alternatives: Suggest replacements
- Gradual removal: Mark deprecated first
- Archive old versions: Keep available for existing users
Community
Being a Good Mod Author
Licensing
Consider your mod’s license:- Open Source: Allow others to learn/modify
- Restrictive: Prevent unauthorized use
- Credits Required: Ensure attribution
- Commercial Use: Allow/disallow monetization
- MIT: Very permissive
- CC BY 4.0: Requires attribution
- CC BY-NC-SA 4.0: Non-commercial, share-alike
- All Rights Reserved: Most restrictive
Resources
Create Mods
Start creating your first mod
Asset Modification
Learn to edit different asset types
Package Mods
Export and distribute your mods
Install Mods
Use Frosty Mod Manager