GameDevWare.Charon 2024.2.18

There is a newer version of this package available.
See the version list below for details.
dotnet add package GameDevWare.Charon --version 2024.2.18                
NuGet\Install-Package GameDevWare.Charon -Version 2024.2.18                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GameDevWare.Charon" Version="2024.2.18" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add GameDevWare.Charon --version 2024.2.18                
#r "nuget: GameDevWare.Charon, 2024.2.18"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install GameDevWare.Charon as a Cake Addin
#addin nuget:?package=GameDevWare.Charon&version=2024.2.18

// Install GameDevWare.Charon as a Cake Tool
#tool nuget:?package=GameDevWare.Charon&version=2024.2.18                

Charon - Game Data Editor

NuGet Version

<img width="894" alt="dashboard" src="https://raw.githubusercontent.com/gamedevware/charon/main/docs/assets/cover_github.png"/>

DocumentationDiscordWebsiteChangelogIssues

Plugins

<img width="100" alt="unity" src="https://raw.githubusercontent.com/gamedevware/charon/main/docs/assets/unity_logo.svg"/> <img width="100" alt="unreal engine" src="https://raw.githubusercontent.com/gamedevware/charon/main/docs/assets/unreal_engine_logo.svg"/>

Unity Unreal Engine

Standalone

How to start with custom game engineC#TypeScript

Summary

Charon is a powerful game development tool that streamlines the game development process. It provides a structured approach to designing and modeling game data, with automatic source code generation that reduces the load on programmers and eliminates human errors. Charon also offers support for working with text in multiple languages, with easy loading and unloading of translated text.

With Charon, game developers can focus on creating engaging gameplay experiences without worrying about the technical details of managing game data. It is available in three deployment variants, including a standalone/offline application, web application, Unity and Unreal Engine plugins.

What is Charon

It is a .NET 4.6 console application that can be used as a command-line tool for performing CRUD operations with your game data, or as an HTTP Server to provide a UI for modeling and editing your game data. There are plugins for Unity and Unreal Engine that provide a more integrated experience while using Charon.
As with any .NET application, it can be launched as is on Windows and via Mono on macOS and Linux.

How it works

You create an empty gamedata.json file when launching the Charon.exe application, which acts as an HTTP server. You edit your game data in the UI, then generate source code for your game engine. With this source code, you load gamedata.json into your game and use it in a safe and structured manner.

<img width="894" alt="scheme" src="https://raw.githubusercontent.com/gamedevware/charon/main/docs/assets/how_it_works.png"/>

If you use plugins for Unity or Unreal Engine, it is a little bit easier than shown in the diagram.

Editor's UI

<img width="894" alt="screenshot" src="https://raw.githubusercontent.com/gamedevware/charon/main/docs/assets/editor_screenshot.png"/>

C# Code Example

using System.IO;

using var fileStream = File.OpenRead("gamedata.json"); // or .gdjs
var gameData = new GameData(fileStream, new Formatters.GameDataLoadOptions { Format = Formatters.Format.Json });

var heroes = gameData.Heroes.AsList // -> IReadOnlyList<Hero>
// or
var heroById = gameData.AllHeroes.Find("Arbalest"); // -> Hero | null

C++ Code Example

#include "UGameData.h"

TSoftObjectPtr<UGameData> GameDataPtr = TEXT("/Game/Content/GameData");
auto GameData = GameDataPtr.LoadSynchronous(); // -> UGameData*

auto Heroes = GameData->Heroes; // -> TMap<FString,UHero*>
auto HeroById = GameData->Heroes.Find(TEXT("Arbalest")); // -> UHero**

TypeScript Code Example

import { GameData } from './game.data';
import { Formatters } from './formatters';

// Node.js
import { readFileSync } from 'fs';
const gameDataStream = readFileSync(gameDataFilePath);

// Blob or File
const gameDataStream = gameDataFileBlob.arrayBuffer();

// XMLHttpRequest (XHR)
// gameDataRequest.responseType -> "arraybuffer"
const gameDataStream = gameDataRequest.response;

const gameData = new GameData(gameDataStream, {
  format: Formatters.GameDataFormat.Json
});

let heroes = gameData.heroes; // -> readonly Hero[]
let hero = gameData.heroesAll.find("Arbalest"); // -> Hero | undefined

License

  • Generated Code - MIT
  • Plugins:
    • Unreal Engine - MIT
    • Unity - Unity Asset Store License
  • Charon - CC BY-ND - can freely use and can redistribute, as long as it is passed along unchanged and in whole.
Product Compatible and additional computed target framework versions.
.NET Framework net472 is compatible.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETFramework 4.7.2

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2024.4.3 75 12/19/2024
2024.3.6 268 10/18/2024
2024.3.4 190 10/2/2024
2024.2.22 150 7/9/2024
2024.2.18 189 7/1/2024
2024.2.6 136 6/11/2024
2024.2.5 116 6/10/2024
2024.1.13 331 5/6/2024
2024.1.6 434 3/3/2024
2024.1.4 265 2/20/2024
2024.1.1 256 1/15/2024
2024.1.0 236 1/4/2024
2023.4.22 263 12/13/2023
2023.4.16 256 11/14/2023
2023.4.14 331 10/30/2023
2023.4.4 316 10/15/2023
2023.4.1 239 10/5/2023
2023.4.0 257 10/3/2023
2020.1.1 2,167 3/1/2020
2020.1.0 618 1/22/2020
2019.4.3 590 12/23/2019
2019.3.10 628 11/12/2019
2019.3.9 591 10/28/2019
2019.3.8 597 10/8/2019
2019.3.5 623 9/15/2019
2019.3.1 997 7/22/2019
2019.2.3 1,182 5/5/2019
2019.2.0 634 4/24/2019

# 2024.2.17
## General
- Added Haxe source code generator.
- Changed patching logic to skip 'notes' while merging localization texts.
## Game Data Editing
- Fixed error while trying to add new Unique Time/Date properties to existing Schema.
- Fixed automatic `Id` property data type update when `IdGenerator` of parent schema is changed.
## User Interface
- Added explanation for 'stale' text.
- Added Haxe generation target in CLI and UI.
## Code Generation
- Added auto-cleanup of output directory option when generating code from CLI.
- Added disable `Document Id` enum switch to code generation optimizations.
- Added special merging logic for `ProjectSettings.Languages` field during applying patches. This will allow patch-in multiple localizations without breaking previous ones.
- Reduced generated file overwrite by skipping rewriting same files while re-generating source code.
- Implemented UE C++ patch applying logic in `MergeGameData()` method.
- Changed name of file in single file deployment for TypeScript code.
- Fixed C# document id with Date key compilation error.
- Fixed error with possible empty language in `GameData.SupportedLanguage` in all generation targets.
- Modified patch merge behavior to prevent merging partial document into a deleted one in `Document` typed field. The same behavior for document collections was already present.
## Web Application
- Added strict check for image format while uploading user/project/workspace pictures.