灵符lingfu

lingdev

↓ 0 downloads

LingDev: a Godot / Unity-style game editor written in Ling. 2-D and 3-D scenes, Flash-style timeline and cutscenes, HUDs over 3-D, Ling scripting, audio / music / MIDI, builds for Windows, Linux, macOS, web, Raspberry Pi and LingOS. Ships with Ling Agent (an N64-style spy FPS), Ling Breaker (a 3-D breakout) and Moko's Picture Book (a kawaii storybook platformer).

Windows · x86-64Linux · x86-64LingOS · x86-64LingOS · Pi 5 ARM64Web · WASM
Keywords game-engine, editor, 3d, 2d, cutscene, timeline, ling, lingos, raspberry-pi
lingfu install lingdev
LicenseApache-2.0 OR MIT
Authorsling-lin
READMECode / FilesVersionsDependency GraphDependentsSecurityBuildsSettings

Code / Files (136)

ling/demo_ssz.ling
# demo_ssz.ling - the scenes of projects/SoulSymphonyZH, the 2019 Soul Symphony (Panda3D) ported to
# Ling in `soul` mode (rt_soul.ling). The assets are imported by the project's tools/ssz_import.py
# from ../soul-symphony-zh; this builds the LingDev project around them: the title, the hub
# (level00, the ball dropped in to roll around and collect spinning notes) and the other six
# original levels, joined by portals.

fn ssz_root() { return p_join(st_get("app_root", "."), "projects/SoulSymphonyZH") }

fn demo_ssz_open() {
    if file_exists(p_join(ssz_root(), "lingdev.toml")) { return project_open_path(p_join(ssz_root(), "lingdev.toml")) }
    return demo_ssz_build()
}

fn ssz_levels() { return ["level00", "level01", "level02", "level03", "level04", "level05", "map00"] }
fn ssz_scene_of(lv) {
    if lv == "level00" { return "scenes/hub.lscene" }
    return "scenes/" + lv + ".lscene"
}

fn demo_ssz_build() {
    if !file_exists(p_join(ssz_root(), "assets/levels/level00.ltm")) {
        status("Soul Symphony (2019): run tools/ssz_import.py in projects/SoulSymphonyZH first (needs ../soul-symphony-zh and Panda3D)")
        return false
    }
    bind dir = p_join(st_get("app_root", "."), "projects")
    if !proj_create(dir, "SoulSymphonyZH", 0.0, 1280.0, 720.0) { return false }
    plat_delete(p_join(proj_root(), "scenes/level.lscene"))
    proj_remove_scene("scenes/level.lscene")
    st_set("proj_title", "灵魂交响乐 Soul Symphony (2019)")
    st_set("proj_author", "Ling Lin")
    bind warps = ""
    bind lv = ssz_levels()
    bind i = 0.0
    while i < len(lv) {
        if i > 0.0 { bind warps = warps + "," }
        bind warps = warps + ssz_scene_of(list_get(lv, i))
        bind i = i + 1.0
    }
    # title
    sc_new("Title", "3d")
    st_lclear("undo")
    st_lclear("redo")
    sel_clear()
    sc_set("bg", c_rgb(0.0, 0.0, 0.0))
    sc_set("ex", "mode=soul;screen=title;next=scenes/hub.lscene;blur=0.4")
    save_scene(p_join(proj_root(), "scenes/title.lscene"))
    # levels
    bind i = 0.0
    while i < len(lv) {
        bind name = list_get(lv, i)
        bind title = name
        if name == "level00" { bind title = "Hub (level00)" }
        sc_new(title, "3d")
        st_lclear("undo")
        st_lclear("redo")
        sel_clear()
        sc_set("bg", c_rgb(0.0, 0.0, 0.0))
        bind ex = "mode=soul;level=" + name + ";warps=" + warps + ";blur=0.55"
        if name == "level00" { bind ex = ex + ";hub=1" }
        sc_set("ex", ex)
        bind lvn = nd_add("empty", "Level " + name, 0.0)
        nd_set(lvn, "tag", "level")
        nd_set(lvn, "ex", "src=assets/levels/" + name + ".ltm")
        save_scene(p_join(proj_root(), ssz_scene_of(name)))
        bind i = i + 1.0
    }
    st_set("proj_start", "scenes/title.lscene")
    proj_save()
    gen_write_all()
    assets_mark_stale()
    open_scene(p_join(proj_root(), "scenes/hub.lscene"))
    status("Built Soul Symphony (2019): title, hub and 6 levels. F5 plays from the title.")
    return true
}

← Back to index