/DMapGodot

DMapGodot is a Godot 4.4 plugin that imports DMAP archive files (game map files) into the Godot engine

Primary LanguageC#

DMapGodot - DMAP to Godot 4.4 Integration

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.

Overview

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.

Key Features

  • 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

Technical Approach

  • 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)

Architecture

Technology Stack

  • 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

Project Structure

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

Getting Started

Prerequisites

  • Godot 4.4+ with .NET support
  • .NET 8.0 SDK
  • NuGet package manager

Installation

  1. Clone the repository
  2. Open in Godot 4.4+
  3. Build the project (dotnet build)
  4. Enable the DMAP Importer plugin in Project Settings

Quick Start

  1. Import a DMAP file by dragging it into the FileSystem dock
  2. The importer automatically creates a scene with DMapRenderer node
  3. Use the DMAP Editor dock to modify tile properties
  4. Save changes back to DMAP format using the export tools

Testing

Run the test suite using GdUnit4Net:

# Run all tests
dotnet test

# Run specific test
dotnet test --filter "TestName"

Performance Targets

  • Map Loading: < 2 seconds for 1000x1000 tiles
  • Rendering: 60+ FPS with full map visible
  • Memory Usage: < 500MB for large maps

Contributing

This project uses Task Master for development workflow. See the task dashboard below for current development status and priorities.

License

[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-readme command.