A 2D game block building inspired by Everybody Edits. Code structure inspired by Minetest practices.
The project direction can be found in doc/DIRECTION.md.
Account management
- Any specified username is automatically converted to uppercase.
GUESTxxx
usernames are treated as temporary.- Registration is nethier needed nor possible.
- The account registration is rate limited by IP.
Hotkeys
- W/A/S/D or arrow keys: move player
- Space: Jump
- LMB: Place the selected block
- RMB or Shift+LMB: Block eraser
- RMB + Ctrl: Select clicked block including params
- Mouse scroll: Zoom in/out
- Warning: Rendering performs pretty badly. Do not scroll out too far.
- 1-9: Hotbar block selector
- Use RMB to drag & drop a block from the selector into the hotbar
/
or T or Enter: Open chat box- Enter: Submit
- ESC: Cancel and close
- Tab: Nickname autocompletion
- Up/Down: Previous chat message / empty chat message
- E: Toggle block selector
- G: Toggle god mode
- M: Toggle minimap
- F1: Toggle debug information
Chat commands
- See
/help
and/help COMMAND
(in-game)
Permission/player flag examples:
/fset FOOBAR tmp-edit-draw
temporary edit access (until rejoin)/fset FOOBAR godmode
persistent god mode access (after the world is saved)/fdel FOOBAR owner
removes all persistent access except for "banned"/ffilter
lists all players with any specified flags
Command line arguments
--version
outputs the current game version--unittest
runs the included tests to sanity check--server
starts a server-only instance without GUI--setrole USERNAME ROLE
ROLE
can be one of:normal
,moderator
,admin
.- Can be executed while a server is already running.
--go USERNAME PASSWORD(FILE) [WORLD_ID]
- Starts a local server and joins the world ID (if provided)
Environment variables
OE_DEBUG=+foo,-bar,+all
override the default log levels+
prefix: verbose logging-
prefix: ignore anything below error levelall
: Changes all loggers- Specific log level overrides take priority over
all
.
World import/export
*.eelvl
files inworlds/imports/
are listed by the server as playable read-only worlds- Helpful level archive: https://archive.offlinee.com/
- Clients may use
.export FILENAME
to export the current world toworlds/exports/
- See
worlds/README.txt
for further information
- Extract the archive to any location
- Run
AppRun.sh
- In case of issues: run with
gdb
. Debug symbols are included.
- Extract the archive to any location
- Run the executable
- In case of issues: use a debugger such as x64dbg
- CMake (cmake-gui recommended for desktops)
- Irrlicht-Mt : GUI/rendering library
- enet : networking library
- LuaJIT or Lua 5.1 : (WIP) server-defined scripts
- SQLite3 : auth & world saving
- Threads (pthread?)
- zlib: world compression (including EELVL import/export)
- OpenAL-soft: sound (for GUI builds only)
Dependency tree:
OpenEdits
├── enet
├── irrlicht-mt (server)
├── irrlicht-mt (client)
│ ├── libjpeg
│ ├── libpng
│ │ └── zlib
│ └── zlib
├── openal-soft (client, optional)
└── sqlite3
└── zlib
Debian/Ubuntu:
sudo apt install libenet-dev libopenal-dev libsqlite3-dev zlib1g-dev
Windows:
- C99 standard library is required. msvcrt uses C89, thus MinGW or Clang are recommended over MSVC.
Project compiling:
cmake -S . -B build
cd build
make -j
Headless server compiling
- Install the minimal required libraries
- Put the IrrlichtMt headers (include directory) somewhere
cmake -S . -B build -DBUILD_CLIENT=0 -DIRRLICHTMT_BUILD_DIR="/path/to/irrlicht/include/"
cd build
-> buildmake -j
-> start./OpenEdits-server
Distributing (simplified)
cd build
make install
bash ../misc/pack.sh
Code: LGPL 2.1+
Imported code
- minimp3 (CC 0), used in GUI builds only
- SHA3IUF (MIT)
- FindENet.cmake (GPL 2)
- FindLuaJIT.cmake (LGPL 2.1+)
DejaVu Sans bitmaps (Bitstream Vera license, extended MIT)
- Converted with https://github.com/kahrl/irrtum
Images that are not listed below were created by SmallJoker (CC BY 4.0).
DailyYouth (CC BY 3.0)
IconMarket (CC BY 3.0)
icon_minimap.png
(desaturated)
ZUMMACO (CC BY 3.0)
Sounds that are not listed below were created by SmallJoker (CC BY 4.0).
Piotr Barcz (CC 0)