If you find this project helpful, consider supporting via Afdian (China) or Ko-fi (International)!
[ English | 中文 ]
A high-performance, systematic, and intuitive level editing proxy development library for rhythm game developers, independent of any game engine.
Development progress is tracked here.
Examples can be found here.
RhythmBase ← Core library (NuGet package)
├── Global/ ← Public interfaces, types, serialization infrastructure
│ ├── Components/ ← Color, EnumCollection, TickTime interface, Level interface...
│ ├── Events/ ← IEvent, IDurationEvent, IFileEvent, IForwardEvent...
│ ├── Converters/ ← MetadataJsonConverter, MemberConverter, TypeConverterRegistry...
│ └── Extensions/ ← LINQ queries, event navigation...
RhythmBase.Generator ← Source generator (Roslyn Incremental SourceGenerator)
└── Auto-generates: EventTypeRegistry / EventConverterMap / EnumConverterExtensions
RhythmBase.RhythmDoctor ← Rhythm Doctor adapter
RhythmBase.Adofai ← A Dance of Fire and Ice adapter
RhythmBase.BeatBlock ← BeatBlock adapter
RhythmBase.Rizline ← Rizline adapter
Serialization system: The core library provides MetadataJsonConverter<T> (handles compound objects like Level, Settings, Row, etc.) and MemberConverter<T> (reads/writes event properties field by field). The source generator automatically produces converters and type-enum mappings for each event class based on declarations in AssemblyInfo.cs, eliminating the need to write serialization code by hand. See Tutorial Part 2 for details.
Supported level formats:
| Game | Single file | Multi-file directory | Archive | JSON read/write |
|---|---|---|---|---|
| Rhythm Doctor | .rdlevel |
- | .rdzip .zip |
✅ |
| A Dance of Fire and Ice | .adofai |
- | .zip |
✅ |
| BeatBlock | - | manifest.json + level.json + chart |
.bbz .zip |
- |
| Rizline | - | metadata.json + chart |
.rlz .zip |
- |
- Project maintenance
- Sponsors
| Project | Description | Status | Link |
|---|---|---|---|
| RhythmBase | Core level editing proxy library. | Maintained | You are here |
| RhythmBase.RhythmDoctor | Rhythm Doctor implementation. | Maintained | You are here |
| RhythmBase.Adofai | Adofai implementation. | Maintained | You are here |
| RhythmBase.BeatBlock | BeatBlock implementation. | Maintained | You are here |
| RhythmBase.Rizline | Rizline implementation. | Maintained | You are here |
| RhythmBase.View | Renders all Rhythm Doctor events. (incl. TypeScript DOM version) | In development | Go |
| RhythmBase.Addition | Extends the core library. | In development | Go |
| RhythmBase.Interact | Interacts with game level editors. | Private | - |
| RhythmBase.Hospital | Level review, hints, and assistance. | Private | - |
| RhythmBase.Lite | Lightweight version of RhythmBase. | In development | Go |
| RhythmBase.Control | UI control library for level proxy. | Private | - |
- Complete event system support
Provides strongly-typed event models for rhythm games, compatible with future new event models. - Smart event handling
Flexible LINQ queries, automatic relationship management, and built-in timeline generation tools. - RichText and dialogue components
Full rich text syntax parsing and code generation for dialogue and title events. - Source generator driven serialization
AOT-compatible JSON serialization with no reflection; converters for event types are automatically generated by the Roslyn source generator. - Bitmap enum collections
High-performanceEnumCollection<T>/ReadOnlyEnumCollection<T>for event type classification and filtering. - Cross-platform
Based on .NET Standard 2.0 / .NET 8.0, supporting Windows, Linux, macOS. - AOT compatible
No reflection calls, fully supports AOT compilation.
dotnet add package RhythmBase.RhythmDoctorusing RhythmBase.RhythmDoctor.Components;
using RhythmBase.RhythmDoctor.Events;
// Load level
using var level = Level.FromFile("level.rdlevel");
// Add event
level.Add(new Comment() { Text = "hello", Tab = Tab.Windows, Y = 2 });
// Save
level.SaveToFile("out.rdlevel");- Full Tutorial (English)
- Implementing a New Level Type (English)
- Contributing Guide (English)
- 完整使用教程 (中文)
- 贡献指南 (中文)
The following aspects of this project's development used AI assistance tools (such as GitHub Copilot, ChatGPT, etc.).
- Code completion
- API documentation lookup
- Algorithm design and optimization suggestions
- XML comment writing
- Documentation translation (original language is Simplified Chinese)
This project was originally named
RhythmToolkit, aiming to develop small tools to simplify level processing for Rhythm Doctor.
As the project matured, its direction shifted toward becoming a foundational framework for other tools, and it expanded to support the A Dance of Fire and Ice (Adofai) level model.
For this reason, the project was renamed
RhythmBase, and tool-oriented content was migrated to other repositories. Of course, you can also call it RDTK!
