Home

Awesome

<div align="center"><img src='Assets/Image/logo.png' alt='Dora SSR' width='200px'/></div>

Dora SSR (多萝珍奇引擎)

English | 中文

Dora SSR is a game engine for rapid development of games on various devices. It has a built-in easy-to-use Web IDE development tool chain that supports direct game development on mobile phones, open source handhelds and other devices.

CategoryBadges
Provided Game Dev ToolsStatic Badge Static Badge
Supported LanguagesStatic Badge Static Badge Static Badge Static Badge Static Badge Static Badge
Supported PlatformsAndroid Linux Windows macOS iOS
<div align='center'><img src='Docs/static/img/3.png' alt='Playground' width='500px'/></div>

Table of Contents

<br>

Key Features

FeatureDescription
Cross-PlatformSupported native architectures:<br>Android (x86_64, armv7, arm64)<br>Windows (x86)<br>Linux (x86_64, arm64)<br>iOS (arm64)<br>macOS (x86_64, arm64)
Node BasedManages game scenes based on tree node structure.
ECSEasy-to-use ECS module for efficient game entity management.
Multi-threadedAsynchronous processing of file read and write, resource loading and other operations.
LuaUpgraded Lua binding with support for inheriting and extending low-level C++ objects.
YueScriptSupports YueScript language, strong expressive and concise Lua dialect.
TealSupports for the Teal language, a statically typed dialect for Lua.
TypeScriptSupports TypeScript, a statically typed superset of JavaScript that adds powerful type checking (with TSTL).
TSXSupports TSX, allows embedding XML/HTML-like text within scripts, used with TypeScript.
RustSupports the Rust language, running on the built-in WASM runtime with Rust bindings.
2D Animation2D skeletal animations support with Spine2D, DragonBones and a builtin system.
2D Physics2D physics engine support with PlayRho.
Web IDEBuilt-in out-of-the-box Web IDE, providing file management, code inspection, completion, highlighting and definition jump. <br><br><div align='center'><img src='Docs/static/img/dora-on-android.jpg' alt='LSD' width='500px'/></div>
DatabaseSupports asynchronous operation of SQLite for real-time query and managing large game configuration data.
ExcelSupports reading Excel spreadsheet data and synchronizing it to SQLite tables.
CSS LayoutProvides the function of adaptive Flex layout for game scenes through CSS (with Yoga).
Effect SystemSupport the functions of Effekseer game effects system.
TilemapSupports the Tiled Map Editor TMX map file parsing and rendering.
Yarn SpinnerSupports the Yarn Spinner language, making it easy to write complex game story systems.
MLBuilt-in machine learning algorithm framework for innovative gameplay.
Vector GraphicsProvides vector graphics rendering API, which can directly render SVG format files without CSS (with NanoVG).
ImGuiBuilt-in ImGui, easy to create debugging tools and UI interface.
AudioSupports FLAC, OGG, MP3 and WAV multi-format audio playback.
True TypeSupports True Type font rendering and basic typesetting.
2D PlatformerBasic 2D platformer game functions, including game logic and AI development framework.
L·S·DProvides open art resources and game IPs that can be used to create your own games - "Luv Sense Digital".<br><br><div align='center'><img src='Docs/static/img/LSD.jpg' alt='LSD' width='300px'/></div>
<br>

Example Projects

<div align='center'><img src='Docs/static/img/LoliWar.gif' alt='Loli War' width='400px'/></div> <br> <div align='center'><img src='Docs/static/img/ZombieEscape.png' alt='Zombie Escape' width='800px'/></div> <br> <div align='center'><img src='Docs/static/img/Dismentalism.png' alt='Dismentalism' width='800px'/></div> <br> <div align='center'><img src='Docs/static/img/LuvSenseDigital.png' alt='Luv Sense Digital' width='800px'/></div> <br>

Installation

Android

Windows

macOS

Linux

Game engine development

For the installation and configuration of Dora SSR project development, see Official Documents for details.

<br>

Quick Start

local _ENV = Dora

local sprite = Sprite("Image/logo.png")
sprite:once(function()
  for i = 3, 1, -1 do
    print(i)
    sleep(1)
  end
  print("Hello World")
  sprite:perform(Sequence(
    Scale(0.1, 1, 0.5),
    Scale(0.5, 0.5, 1, Ease.OutBack)
  ))
end)
local sleep <const> = require("sleep")
local Ease <const> = require("Ease")
local Scale <const> = require("Scale")
local Sequence <const> = require("Sequence")
local Sprite <const> = require("Sprite")

local sprite = Sprite("Image/logo.png")
if not sprite is nil then
  sprite:once(function()
    for i = 3, 1, -1 do
      print(i)
      sleep(1)
    end
    print("Hello World")
    sprite:perform(Sequence(
      Scale(0.1, 1, 0.5),
      Scale(0.5, 0.5, 1, Ease.OutBack)
    ))
  end)
end
_ENV = Dora

with Sprite "Image/logo.png"
   \once ->
     for i = 3, 1, -1
       print i
       sleep 1
     print "Hello World!"
     \perform Sequence(
       Scale 0.1, 1, 0.5
       Scale 0.5, 0.5, 1, Ease.OutBack
     )
import {Sprite, Ease, Scale, Sequence, sleep} from 'Dora';

const sprite = Sprite("Image/logo.png");
if (sprite) {
  sprite.once(() => {
    for (let i of $range(3, 1, -1)) {
      print(i);
      sleep(1);
    }
    print("Hello World");
    sprite.perform(Sequence(
      Scale(0.1, 1, 0.5),
      Scale(0.5, 0.5, 1, Ease.OutBack)
    ))
  });
}
import {React, toNode, toAction, useRef} from 'DoraX';
import {Ease, Sprite, once, sleep} from 'Dora';

const sprite = useRef<Sprite.Type>();

const onUpdate = once(() => {
  for (let i of $range(3, 1, -1)) {
    print(i);
    sleep(1);
  }
  print("Hello World");
  sprite.current?.perform(toAction(
    <sequence>
      <scale time={0.1} start={1} stop={0.5}/>
      <scale time={0.5} start={0.5} stop={1} easing={Ease.OutBack}/>
    </sequence>
  ));
});

toNode(
  <sprite
    ref={sprite}
    file='Image/logo.png'
    onUpdate={onUpdate}
  />
);
use dora_ssr::*;

fn main () {
  let mut sprite = match Sprite::with_file("Image/logo.png") {
    Some(sprite) => sprite,
    None => return,
  };
  let mut sprite_clone = sprite.clone();
  sprite.schedule(once(move |mut co| async move {
    for i in (1..=3).rev() {
      p!("{}", i);
      sleep!(co, 1.0);
    }
    p!("Hello World");
    sprite_clone.perform_def(ActionDef::sequence(&vec![
      ActionDef::scale(0.1, 1.0, 0.5, EaseType::Linear),
      ActionDef::scale(0.5, 0.5, 1.0, EaseType::OutBack),
    ]));
  }));
}

For more detailed tutorials, please check official documents.

<br>

Documentation

<br>

Community

<br>

Contribute

Welcome to participate in the development and maintenance of Dora SSR. Please see Contributing Guidelines to learn how to submit Issues and Pull Requests.

<br>

Dora SSR Joins the Open Atom Foundation

We are delighted to announce that the Dora SSR project has officially become a donation and incubation project under the Open Atom Foundation. This new stage of development signifies our steadfast commitment to building a more open and collaborative gaming development environment.

About the Open Atom Foundation

The Open Atom Foundation is a non-profit organization dedicated to supporting and promoting the development of open-source technologies. Within this foundation's community, Dora SSR will utilize broader resources and community support to propel the project's development and innovation. For more information, please visit the foundation's official website.

<div align='center'><img src='Docs/static/img/cheer.png' alt='Playground' width='500px'/></div> <br>

License

Dora SSR uses the MIT License.

[!NOTE] Please note that Dora SSR integrates the Spine Runtime library, which is a commercial software. The use of Spine Runtime in your projects requires a valid commercial license from Esoteric Software. For more details on obtaining the license, please visit the official Spine website.<br> Make sure to comply with all licensing requirements when using Spine Runtime in your projects. Alternatively, you can use the integrated open-source DragonBones system as an animation system replacement. If you only need to create simpler animations, you may also explore the Model animation module provided by Dora SSR to see if it meets your needs.