A comprehensive Godot 4.4 plugin that enables direct loading, rendering, and editing of Conquer Online DMAP files, preserving all unique features while leveraging Godot's powerful editor and C# support.
DMapGodot bridges the gap between Conquer Online's DMAP format and modern game development with Godot 4.4. This plugin provides native editor integration for importing, rendering, and editing DMAP files without requiring conversion through intermediate formats like Tiled.
- Direct DMAP Import: Native support for .dmap, .7z, and .zmap files
- Isometric Rendering: High-performance rendering using Godot's TileMap system
- Live Editing: Real-time tile property editing within Godot editor
- Complete Feature Preservation: Portals, covers, scenes, and all DMAP features
- Bidirectional Save/Load: Export back to DMAP format with full fidelity
- Maximum Code Reuse: ~70% of existing C# parsing code used directly
- Native Integration: Seamless Godot editor workflow
- Type Safety: Full C# 8.0+ features with .NET 8
- Performance: Optimized for real-time editing (60+ FPS target)
- Godot 4.4 with C# support
- .NET 8.0 runtime
- GdUnit4Net for comprehensive testing
- SharpCompress for archive handling (replaces SevenZipSharp)
- BCnEncoder.Net for DDS texture conversion
- Original C# DMAP Code from Tiled2Dmap as reference
dmapgodot/
├── project.godot
├── DMapGodot.csproj
├── addons/
│ └── dmap_importer/ # Main plugin
│ ├── Core/ # Direct copy from Tiled2Dmap
│ ├── Importers/ # EditorImportPlugin implementation
│ ├── Nodes/ # DMapRenderer and custom nodes
│ └── Editor/ # Editor integration
├── tests/ # GdUnit4Net test suite
├── Game/5017/ # Game client assets for testing
└── Tiled2Dmap/ # Original C# reference implementation
- Godot 4.4+ with .NET support
- .NET 8.0 SDK
- NuGet package manager
- Clone the repository
- Open in Godot 4.4+
- Build the project (
dotnet build) - Enable the DMAP Importer plugin in Project Settings
- Import a DMAP file by dragging it into the FileSystem dock
- The importer automatically creates a scene with DMapRenderer node
- Use the DMAP Editor dock to modify tile properties
- Save changes back to DMAP format using the export tools
Run the test suite using GdUnit4Net:
# Run all tests
dotnet test
# Run specific test
dotnet test --filter "TestName"- Map Loading: < 2 seconds for 1000x1000 tiles
- Rendering: 60+ FPS with full map visible
- Memory Usage: < 500MB for large maps
This project uses Task Master for development workflow. See the task dashboard below for current development status and priorities.
[Add license information]
🎯 Taskmaster Export - 2025-08-20 20:57:35 UTC 📋 Export: with subtasks • Status filter: none 🔗 Powered by Task Master
| Project Dashboard | |
|---|---|
| Task Progress | ████████████████████ 100% |
| Done | 15 |
| In Progress | 0 |
| Pending | 0 |
| Deferred | 0 |
| Cancelled | 0 |
| - | - |
| Subtask Progress | ████████████████████ 100% |
| Completed | 85 |
| In Progress | 0 |
| Pending | 0 |
| ID | Title | Status | Priority | Dependencies | Complexity |
|---|---|---|---|---|---|
| 1 | Install Required NuGet Packages | ✓ done | high | None | N/A |
| 1.1 | Update DMapGodot.csproj with complete package references | ✓ done | - | None | N/A |
| 1.2 | Run dotnet restore to install packages | ✓ done | - | None | N/A |
| 1.3 | Verify SharpCompress installation | ✓ done | - | None | N/A |
| 1.4 | Verify BCnEncoder.Net installation | ✓ done | - | None | N/A |
| 1.5 | Verify GdUnit4Net testing framework | ✓ done | - | None | N/A |
| 1.6 | Build project to verify compilation | ✓ done | - | None | N/A |
| 1.7 | Document common installation issues | ✓ done | - | None | N/A |
| 2 | Copy Core DMAP Parsing Classes | ✓ done | high | 1 | N/A |
| 2.1 | Create Core directory structure | ✓ done | - | None | N/A |
| 2.2 | Copy core DMAP parsing classes | ✓ done | - | None | N/A |
| 2.3 | Copy Extensions classes | ✓ done | - | None | N/A |
| 2.4 | Copy Utility classes | ✓ done | - | None | N/A |
| 2.5 | Copy additional scene classes | ✓ done | - | None | N/A |
| 2.6 | Update namespaces | ✓ done | - | None | N/A |
| 2.7 | Verify compilation | ✓ done | - | None | N/A |
| 2.8 | Create basic unit tests | ✓ done | - | None | N/A |
| 3 | Adapt DmapFile Class for SharpCompress | ✓ done | high | 2 | N/A |
| 3.1 | Copy DmapFile.cs to Core/Dmap Directory | ✓ done | - | None | N/A |
| 3.2 | Update Using Statements for SharpCompress | ✓ done | - | None | N/A |
| 3.3 | Replace Archive Extraction Logic | ✓ done | - | None | N/A |
| 3.4 | Add Error Handling for Archive Operations | ✓ done | - | None | N/A |
| 3.5 | Verify Existing API Compatibility | ✓ done | - | None | N/A |
| 3.6 | Test with Game Client DMAP Files | ✓ done | - | None | N/A |
| 3.7 | Validate Data Integrity | ✓ done | - | None | N/A |
| 3.8 | Update Project Dependencies | ✓ done | - | None | N/A |
| 4 | Implement DMapImporter EditorImportPlugin | ✓ done | high | 3 | N/A |
| 4.1 | Implement core EditorImportPlugin methods | ✓ done | - | None | N/A |
| 4.2 | Implement import options and settings | ✓ done | - | None | N/A |
| 4.3 | Implement core _Import method logic | ✓ done | - | None | N/A |
| 4.4 | Implement PackedScene creation and configuration | ✓ done | - | None | N/A |
| 4.5 | Implement comprehensive error handling | ✓ done | - | None | N/A |
| 4.6 | Test editor integration and file format support | ✓ done | - | None | N/A |
| 5 | Create DMapRenderer Node | ✓ done | high | 4 | N/A |
| 5.1 | Create DMapRenderer class structure | ✓ done | - | None | N/A |
| 5.2 | Initialize three-layer architecture | ✓ done | - | None | N/A |
| 5.3 | Configure isometric TileMap settings | ✓ done | - | None | N/A |
| 5.4 | Implement coordinate conversion system | ✓ done | - | None | N/A |
| 5.5 | Add custom data layers for tile properties | ✓ done | - | None | N/A |
| 5.6 | Implement LoadFromDMap method | ✓ done | - | None | N/A |
| 5.7 | Test with Game/5017/map/ data | ✓ done | - | None | N/A |
| 6 | Implement Isometric TileSet Creation | ✓ done | medium | 5 | N/A |
| 6.1 | Create DMapRenderer Node Class Structure | ✓ done | - | None | N/A |
| 6.2 | Implement CreateTerrainTileSet Method with Isometric Configuration | ✓ done | - | 1 | N/A |
| 6.3 | Add Custom Data Layers for Tile Properties | ✓ done | - | 2 | N/A |
| 6.4 | Implement CreatePuzzleTileSet Method for Background Layer | ✓ done | - | 2 | N/A |
| 6.5 | Integrate TileSet Creation with Layer System and Texture Sources | ✓ done | - | 3, 4 | N/A |
| 7 | Implement DDS Texture Conversion | ✓ done | medium | 6 | N/A |
| 8 | Update Plugin Entry Point | ✓ done | medium | 4, 5 | N/A |
| 8.1 | Create plugin.cfg configuration file | ✓ done | - | None | N/A |
| 8.2 | Implement DMapImporterPlugin class structure | ✓ done | - | None | N/A |
| 8.3 | Implement _EnterTree() method with component registration | ✓ done | - | None | N/A |
| 8.4 | Implement _ExitTree() method with cleanup procedures | ✓ done | - | None | N/A |
| 8.5 | Add plugin icon and resource references | ✓ done | - | None | N/A |
| 9 | Implement Portal System | ✓ done | medium | 5 | N/A |
| 9.1 | Create DMapPortal class structure | ✓ done | - | None | N/A |
| 9.2 | Implement visual components | ✓ done | - | None | N/A |
| 9.3 | Implement interaction logic | ✓ done | - | None | N/A |
| 9.4 | Implement portal positioning system | ✓ done | - | None | N/A |
| 9.5 | Add Portal.cs integration | ✓ done | - | None | N/A |
| 9.6 | Create portal icon resource | ✓ done | - | None | N/A |
| 10 | Create Editor Dock UI | ✓ done | low | 8 | N/A |
| 11 | Setup GdUnit4Net Testing Framework | ✓ done | medium | 1 | N/A |
| 11.1 | Install GdUnit4Net NuGet packages | ✓ done | - | None | N/A |
| 11.2 | Create .runsettings configuration file | ✓ done | - | None | N/A |
| 11.3 | Setup test project structure | ✓ done | - | None | N/A |
| 11.4 | Configure GODOT_BIN environment variable | ✓ done | - | None | N/A |
| 11.5 | Implement sample logic tests | ✓ done | - | None | N/A |
| 11.6 | Implement Godot-dependent tests | ✓ done | - | None | N/A |
| 11.7 | Setup data-driven coordinate tests | ✓ done | - | None | N/A |
| 11.8 | Create integration test framework | ✓ done | - | None | N/A |
| 11.9 | Validate test discovery and execution | ✓ done | - | None | N/A |
| 12 | Implement Save/Export Functionality | ✓ done | low | 3, 5 | N/A |
| 12.1 | Implement Core Save/Export Methods | ✓ done | - | None | N/A |
| 12.2 | Implement Binary DMAP Writing | ✓ done | - | None | N/A |
| 12.3 | Implement SharpCompress Archive Creation | ✓ done | - | None | N/A |
| 12.4 | Implement Coordinate Conversion for Export | ✓ done | - | None | N/A |
| 12.5 | Implement Data Integrity Validation | ✓ done | - | None | N/A |
| 12.6 | Implement Comprehensive Error Handling | ✓ done | - | None | N/A |
| 12.7 | Implement Individual Data Section Writers | ✓ done | - | None | N/A |
| 12.8 | Add File Format Options and Configuration | ✓ done | - | None | N/A |
| 13 | Implement Scene and Cover Object Rendering | ✓ done | low | 5, 7 | N/A |
| 13.1 | Parse SceneFile and ScenePart Data | ✓ done | - | None | N/A |
| 13.2 | Implement Cover Object Rendering | ✓ done | - | None | N/A |
| 13.3 | Create Scene Layer Management System | ✓ done | - | None | N/A |
| 13.4 | Implement Y-Sorting for Depth Ordering | ✓ done | - | None | N/A |
| 13.5 | Integrate 3D Object Placement | ✓ done | - | None | N/A |
| 13.6 | Create ObjectLayer Integration | ✓ done | - | None | N/A |
| 13.7 | Implement Scene Object Texture Loading | ✓ done | - | None | N/A |
| 13.8 | Test with Game Assets | ✓ done | - | None | N/A |
| 14 | Optimize Rendering Performance | ✓ done | low | 5, 13 | N/A |
| 14.1 | Implement Chunk Loading System | ✓ done | - | None | N/A |
| 14.2 | Develop Texture Atlasing System | ✓ done | - | None | N/A |
| 14.3 | Implement LOD (Level of Detail) System | ✓ done | - | None | N/A |
| 14.4 | Create Object Pooling System | ✓ done | - | None | N/A |
| 14.5 | Add Viewport Culling | ✓ done | - | None | N/A |
| 14.6 | Performance Testing and Benchmarking | ✓ done | - | None | N/A |
| 14.7 | Integration with Existing Systems | ✓ done | - | None | N/A |
| 14.8 | Performance Documentation and Monitoring | ✓ done | - | None | N/A |
| 15 | Create Comprehensive Test Suite | ✓ done | medium | 11 | N/A |
📋 End of Taskmaster Export - Tasks are synced from your project using the
sync-readmecommand.