A plugin editor for endless sky.

Overview

Editor

This is a proof of concept plugin editor for Endless Sky. It uses Dear ImGui to render the UI on top of the game and as such it is technically a fork.

  • Create, load and save plugins.
  • Modify game objects and see the result immediately1.
  • Has a map editor to easily modify systems.
  • Respects your plugin's file structure and definition order inside files.
  • Doesn't remove any unrecognized nodes from your plugin.
  • You can choose between 5 themes.
  • It doesn't support everything yet (more complicated nodes like mission, conversation, event, ... are missing).

You can build this editor like the game (same build instructions) or download it here (click on "Assets").

editor-showcase


1: More or less. Example: If you are flying in a system and you modify a stellar object's sprite, you'll see it change immediately. On the other hand, if you modify the system's haze, it will update when you reenter the system.

You might also like...
This is a plan9 port of the vim editor.

This is a plan9 port of the vim editor.

A simple Defold extension to get the project root dir when running from the editor

Defold Project Directory extension This is a small native extension that makes it so that you can get the project directory of a game that is being ru

Let's make a text editor like in the 70's
Let's make a text editor like in the 70's

baracle Let's make a text editor like in the 70's Installation Arch Linux and derivatives (AUR) Stable package: baracle Use an AUR helper or git clone

A mini tilemap editor
A mini tilemap editor

minitile A mini tilemap editor. Features Small: a compact editor great for prototyping maps Simple-to-use Export functionality: design your maps and e

Hermite Curve Editor Tool
Hermite Curve Editor Tool

Hermite Curves Editor An editing tool for Cubic Hermite Splines Table of Contents About the Project Built With Getting Started Prerequisites Installat

This repository is for my coding practice, making a text editor from scratch in C.

text-editor-practice This repository will contain my coding practice, making a text editor from scratch. I based this practice from this wonderful res

A visual, musical editor for delay effects
A visual, musical editor for delay effects

DelayArchitect A visual, musical editor for delay effects Download development builds 32-bit Windows VST3 64-bit Windows VST3 64-bit GNU/Linux VST3 ma

te is a small text editor with emacs keybindings.

te - a tiny emacs te is a small text editor with emacs keybindings. Here are söme Ümlautß! Oh no. Come, you spirits That tend on mortal thoughts, unse

yedit - A text editor made with ncurses and C++
yedit - A text editor made with ncurses and C++

yedit A text editor made with ncurses and C++ dependencies ∙ ncurses in Debian you can install dependencies with this command: # apt install libncurse

Comments
  • Web

    Web

    Here's the big version! I don't know that the deploy works yet, I've got very slow upload here so it failed a couple times for me. Posting so you can take a look now, but feel free to wait until I can show a working version.

    Note the last commit, it's got junk that there might be better ways to fix or at least we could use ifdef __EMSCRIPTEN__ or ifdef ES_GLES for.

    opened by thomasballinger 9
  • macOS Bug: Editor crashes

    macOS Bug: Editor crashes

    I was using the ES editor when it crashed. Here is the technical details.

    Reproduction (might not crash on windows/linux)

    Open the ES editor. Create a new system. Create an object. Collapse the objects list. Attempt to create an object.

    Apple crash logs

    Path:                  /Applications/Editor.app/Contents/MacOS/Editor
    Identifier:            Editor
    Version:               0.9.14 (1)
    Code Type:             X86-64 (Native)
    Parent Process:        ??? [1]
    Responsible:           Editor [2076]
    User ID:               [redacted]
    
    Date/Time:             2021-10-02 15:19:52.652 +0800
    OS Version:            macOS 11.4 (20F71)
    Report Version:        12
    Anonymous UUID:        137C695F-6B92-A9E2-014E-D27861C6AC2E
    
    
    Time Awake Since Boot: 4900 seconds
    
    System Integrity Protection: enabled
    
    Crashed Thread:        0  Dispatch queue: com.apple.main-thread
    
    Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
    Exception Codes:       EXC_I386_GPFLT
    Exception Note:        EXC_CORPSE_NOTIFY
    
    Termination Signal:    Segmentation fault: 11
    Termination Reason:    Namespace SIGNAL, Code 0xb
    Terminating Process:   exc handler [2076]
    
    Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
    0   Editor                        	0x00000001015342e0 Sprite::Frames() const + 4
    1   Editor                        	0x00000001014ba252 Body::HasSprite() const + 18
    2   Editor                        	0x000000010157478a StellarObject::RealRadius() const + 14
    3   Editor                        	0x00000001016bd201 MainEditorPanel::Draw() + 923
    4   Editor                        	0x0000000101462967 UI::DrawAll() + 85
    5   Editor                        	0x0000000101511a73 GameLoop(PlayerInfo&, Conversation const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) + 2707
    6   Editor                        	0x000000010150f934 main + 1716
    7   libdyld.dylib                 	0x00007fff205cff5d start + 1
    
    Thread 1:
    0   libsystem_kernel.dylib        	0x00007fff20581cde __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff205b4e49 _pthread_cond_wait + 1298
    2   libc++.1.dylib                	0x00007fff2051dd72 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   Editor                        	0x00000001014d441d SpriteQueue::operator()() + 285
    4   Editor                        	0x00000001014d4b51 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, std::__1::reference_wrapper<SpriteQueue> > >(void*) + 42
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 2:
    0   libsystem_kernel.dylib        	0x00007fff20581cde __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff205b4e49 _pthread_cond_wait + 1298
    2   libc++.1.dylib                	0x00007fff2051dd72 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   Editor                        	0x00000001014d441d SpriteQueue::operator()() + 285
    4   Editor                        	0x00000001014d4b51 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, std::__1::reference_wrapper<SpriteQueue> > >(void*) + 42
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 3:
    0   libsystem_kernel.dylib        	0x00007fff20581cde __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff205b4e49 _pthread_cond_wait + 1298
    2   libc++.1.dylib                	0x00007fff2051dd72 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   Editor                        	0x00000001014d441d SpriteQueue::operator()() + 285
    4   Editor                        	0x00000001014d4b51 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, std::__1::reference_wrapper<SpriteQueue> > >(void*) + 42
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 4:
    0   libsystem_kernel.dylib        	0x00007fff20581cde __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff205b4e49 _pthread_cond_wait + 1298
    2   libc++.1.dylib                	0x00007fff2051dd72 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   Editor                        	0x00000001014d441d SpriteQueue::operator()() + 285
    4   Editor                        	0x00000001014d4b51 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, std::__1::reference_wrapper<SpriteQueue> > >(void*) + 42
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 5:: AMCP Logging Spool
    0   libsystem_kernel.dylib        	0x00007fff2057f2f6 semaphore_wait_trap + 10
    1   com.apple.audio.caulk         	0x00007fff286658da caulk::mach::semaphore::wait_or_error() + 16
    2   com.apple.audio.caulk         	0x00007fff28652836 caulk::semaphore::timed_wait(double) + 110
    3   com.apple.audio.caulk         	0x00007fff28652784 caulk::concurrent::details::worker_thread::run() + 30
    4   com.apple.audio.caulk         	0x00007fff28652502 void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*> > >(void*) + 45
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 6:: com.apple.audio.IOThread.client
    0   libsystem_kernel.dylib        	0x00007fff2057f2ba mach_msg_trap + 10
    1   libsystem_kernel.dylib        	0x00007fff2057f62c mach_msg + 60
    2   com.apple.audio.CoreAudio     	0x00007fff220898f5 HALB_MachPort::SendSimpleMessageWithSimpleReply(unsigned int, unsigned int, int, int&, bool, unsigned int) + 111
    3   com.apple.audio.CoreAudio     	0x00007fff21f2c3ed invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext(unsigned int, unsigned int) + 3367
    4   com.apple.audio.CoreAudio     	0x00007fff220c80c4 HALB_IOThread::Entry(void*) + 72
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 7:
    0   libsystem_kernel.dylib        	0x00007fff20581cde __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff205b4e49 _pthread_cond_wait + 1298
    2   libc++.1.dylib                	0x00007fff2051dd72 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   Editor                        	0x0000000101598f20 Music::Decode() + 1004
    4   Editor                        	0x00000001015999c9 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (Music::*)(), Music*> >(void*) + 59
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 8:
    0   libsystem_kernel.dylib        	0x00007fff20581cde __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff205b4e49 _pthread_cond_wait + 1298
    2   libc++.1.dylib                	0x00007fff2051dd72 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   Editor                        	0x0000000101598f20 Music::Decode() + 1004
    4   Editor                        	0x00000001015999c9 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (Music::*)(), Music*> >(void*) + 59
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 9:: com.apple.NSEventThread
    0   libsystem_kernel.dylib        	0x00007fff2057f2ba mach_msg_trap + 10
    1   libsystem_kernel.dylib        	0x00007fff2057f62c mach_msg + 60
    2   com.apple.CoreFoundation      	0x00007fff206adb5f __CFRunLoopServiceMachPort + 316
    3   com.apple.CoreFoundation      	0x00007fff206ac23f __CFRunLoopRun + 1328
    4   com.apple.CoreFoundation      	0x00007fff206ab64c CFRunLoopRunSpecific + 563
    5   com.apple.AppKit              	0x00007fff2303268a _NSEventThread + 124
    6   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    7   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 10:
    0   libsystem_kernel.dylib        	0x00007fff20581cde __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff205b4e49 _pthread_cond_wait + 1298
    2   libc++.1.dylib                	0x00007fff2051dd72 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   Editor                        	0x000000010159a888 Engine::ThreadEntryPoint() + 88
    4   Editor                        	0x00000001015a9671 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (Engine::*)(), Engine*> >(void*) + 59
    5   libsystem_pthread.dylib       	0x00007fff205b48fc _pthread_start + 224
    6   libsystem_pthread.dylib       	0x00007fff205b0443 thread_start + 15
    
    Thread 11:
    0   libsystem_pthread.dylib       	0x00007fff205b0420 start_wqthread + 0
    
    Thread 12:
    0   libsystem_pthread.dylib       	0x00007fff205b0420 start_wqthread + 0
    
    Thread 13:
    0   libsystem_pthread.dylib       	0x00007fff205b0420 start_wqthread + 0
    
    Thread 0 crashed with X86 Thread State (64-bit):
      rax: 0x00007fae6a2e3000  rbx: 0x00007fae6a9e88e0  rcx: 0x0000000000000000  rdx: 0x0000000000000002
      rdi: 0x900007fae6a9c523  rsi: 0x00007fae6ab3edb0  rbp: 0x00007ffeee7c6c90  rsp: 0x00007ffeee7c6c90
       r8: 0x00007ffeee7c6c01   r9: 0x0000000000000005  r10: 0x00007fae654c1628  r11: 0x0000000000000002
      r12: 0x00007fae6ab3edb0  r13: 0x00007fae6ab3ec00  r14: 0x0000000000000001  r15: 0x0000000000000005
      rip: 0x00000001015342e0  rfl: 0x0000000000010282  cr2: 0x000000010924d000
      
    Logical CPU:     0
    Error Code:      0x00000000
    Trap Number:     13
    
    Thread 0 instruction stream:
      48 8b 7d d0 e8 3b cd 1a-00 48 89 df e8 3b cb 1a  H.}..;...H...;..
      00 0f 0b 90 55 48 89 e5-53 50 48 89 fb 48 8d 77  ....UH..SPH..H.w
      18 bf 02 00 00 00 e8 47-cf 1a 00 31 c0 48 89 43  .......G...1.H.C
      20 48 89 43 18 c7 43 28-00 00 00 00 48 83 c4 08   H.C..C(....H...
      5b 5d c3 90 55 48 89 e5-f3 0f 10 47 20 5d c3 90  []..UH.....G ]..
      55 48 89 e5 f3 0f 10 47-24 5d c3 90 55 48 89 e5  UH.....G$]..UH..
     [8b]47 28 5d c3 90 55 48-89 e5 53 48 83 ec 18 f3  .G(]..UH..SH....	<==
      0f 5a 47 20 f2 0f 10 15-7c e1 1a 00 f2 0f 59 c2  .ZG ....|.....Y.
      f3 0f 5a 4f 24 f2 0f 59-ca 48 8d 5d e0 48 89 df  ..ZO$..Y.H.].H..
      e8 d3 7a f4 ff f2 0f 10-03 f2 0f 10 4b 08 48 83  ..z.........K.H.
      c4 18 5b 5d c3 90 55 48-89 e5 53 50 48 89 fb e8  ..[]..UH..SPH...
      52 d0 07 00 84 c0 74 07-8b 43 1c 85 c0 75 03 8b  R.....t..C...u..
      
    Thread 0 last branch register state not available.```
    bug 
    opened by a-random-lemurian 1
  • Don't create /saves if it already exists

    Don't create /saves if it already exists

    an oversight because I didn't test actually starting the game after adding mkdir('/saves') so that save games were accessible without starting the game.

    opened by thomasballinger 1
  • Rudimentry plugin upload and download

    Rudimentry plugin upload and download

    Upload plugins via drag and drop or file upload dialog (only possible before Endless Sky proper starts) and download plugins as zipfiles.

    I can put this up at https://play-endless-web.com/editor this evening when I'm not ✈️.

    Not included:

    • better plugin download UI / file manager UI
    • uploading zipfiles
    • preserve empty directories (like with git, these currently disappear on upload)
    • automatically downloading on Save All or popping a download prompt on Save All
    • preserving file modification dates
    • check that round-tripping works for non-trivial plugins, checking both upload codepaths
    • try on Windows
    opened by thomasballinger 0
Releases(continuous)
Owner
null
Simple text editor in C++ - Simple editor built upon kilo editor.

GUMBO editor Simple editor built upon kilo editor. Still big work in progress although this is just fun side project to learn more C/C++. From 0.0.2->

Filip Ivanušec 3 Sep 15, 2021
Renders sky colors with Rayleigh and Mie scattering.

glsl-atmosphere Renders sky colors with Rayleigh and Mie scattering. Demo Install npm install glsl-atmosphere Example Javascript var quad = Geometry(g

Rye Terrell 507 Dec 27, 2022
Vimb - the vim like browser is a webkit based web browser that behaves like the vimperator plugin for the firefox and usage paradigms from the great editor vim.

Vimb - the vim like browser is a webkit based web browser that behaves like the vimperator plugin for the firefox and usage paradigms from the great editor vim. The goal of vimb is to build a completely keyboard-driven, efficient and pleasurable browsing-experience.

Daniel Carl 1.2k Dec 30, 2022
mini-plugin host as plugin

DISTRHO Ildaeil DISTRHO Ildaeil is mini-plugin host working as a plugin, allowing one-to-one plugin format reusage. Load a VST2 plugin inside a LV2 ho

DISTRHO 58 Dec 12, 2022
Jittey - A public domain text editor written in C and Win32

Jittey (Jacob's Terrific Text Editor) is a single-file basic text editor written in pure C and Win32, there is no real reason to use it, but it

Jakub Šebek 29 Dec 15, 2022
Super simple code editor designed for students.

HamroCode Super simple code editor designed for students of Nepal. Language Supported JavaScript C C++ QBASIC Downloading Click Here Demo Created & Ma

Hamro Code 5 Mar 30, 2021
A very minimal & simple text editor written in C with only Standard C Library.

Texterm Text Editor A very minimal & simple text editor written in C with only Standard Library. Syntax highlighting supported for C JavaScript Python

Biraj 40 Dec 8, 2022
MINCE is an Emacs-like text editor from Mark of the Unicorn, Inc.

MINCE Is Not Complete[ly] EMACS Overview MINCE is an Emacs-like text editor from Mark of the Unicorn, Inc. Versions were available for many oper

Jeffrey H. Johnson 20 Nov 5, 2022
Dramatic EDitor

Dramatic EDitor Quick Start POSIX

Tsoding 78 Dec 29, 2022
C.impl is a small portable C interpreter integrated with a line text editor

C.impl C.impl is a small portable C interpreter integrated with a line text editor, originally developed for the ELLO 1A computer: http://ello.cc The

KnivD 22 Nov 21, 2022