buildat/design.txt
2014-09-17 23:22:00 +03:00

66 lines
1.8 KiB
Plaintext

Buildat
=======
A Minecraft clone with vast extendability.
License: MIT
Client
------
Built using Polycode C++.
Module code is transfered from the server and run in a safe Lua sandbox.
Server
------
Built using C++ with most functionality in RCC++.
C++ modules can interface with each other by using Cereal.
Module structure
----------------
module
|-- client
| `-- init.lua << Client-side code
|-- server
| `-- init.cpp << Server-side code
|-- include
| `-- api.h << Structures for interfacing between modules
`-- data
`-- media.png << Data files
Module behavior
---------------
No script or data transfer to the client is initiated by the core. The
module/client/init.lua file is a convention followed by the built-in modules.
Modules can be unloaded at runtime. Handling of client-side state is left up to
the C++ modules themselves.
The first module to be loaded is called __loader. It loads all other modules.
C++ modules can use the core/ and interface/ headers. Everything else is
considered unstable.
C++ modules are run in threads, and everything they can officially access is
thread-safe.
C++ modules can provide direct library functionality inlined in their include/
files. They cannot export any internally defined functions directly, but they
can provide convenience wrappers for event-based interfaces.
Startup sequence and what the module should do:
- constructor : Initialize everything you can here
- init() : Subscribe to events
- "core:start" event : Start doing whatever the module wants to actively do
Network protocol
----------------
(Type, length, data) tuples on TCP. In the future TLS can be taken into use. A
name->type registry is used for determining numeric packet types.
Data is freeform. Types 0...99 are reserved for initialization.
Core uses cereal's portable binary serialization.