Skip to content

Differences Between OpenDream and BYOND

ike709 edited this page Apr 1, 2022 · 36 revisions

This is a work-in-progress guide describing the major differences between OpenDream and BYOND. Things are added/removed as development progresses, and this list is non-exhaustive.


Breaking Changes

Various things cannot or will not be reconciled between OpenDream and BYOND.

Note that all unsupported procs should throw a compile-time warning if you try to use them in your DM code.

Hub Support

Since OpenDream does not have an equivalent to the BYOND hub, no procs or vars related to the hub will be functional, such as GetMedal().

BYOND Membership

Since we are not affiliated with BYOND, all users are treated as if they are not members. Procs like IsByondMember() will always return false.

External DLLs

All DLLs made for BYOND games are compiled targeting 32-bit. OpenDream targets 64-bit and DLLs will need to be recompiled.

Text Encoding

BYOND uses UTF-8, while C# uses UTF-16. As a result, length() and other text procs may return a different value for some strings.


Enhancements

The point of OpenDream is not just to provide an open-source implementation of Dream Maker, but to improve on it. These enhancements are currently a very low priority compared to improving BYOND compatibility.

Instantaneous Hard Deletions

There are two types of deletions in BYOND: hard and soft. Soft deletion occurs automatically when a datum's reference count is zero. Hard deletions occur when del() is explicitly called with a datum that has a non-zero ref count. BYOND's garbage collector has to spend a large chunk of time finding and clearing the remaining refs.

OpenDream implements instantaneous hard deletions with no time wasted doing ref searching. The only downsides are that the memory is not actually freed until the .NET garbage collector runs, and hard deletions have a small amount of memory overhead. A dedicated page with more information on our del() implementation is coming soon™.

Native Linux Support

All aspects of OpenDream natively support Linux including the client.

Chromium Embedded Framework

OpenDream ships with CEF, providing a more modern and feature-filled alternative to BYOND's Internet Explorer 11 (or IE8 on WINE).

64-bit

OpenDream targets 64-bit operating systems, enabling developers to completely ignore memory efficiency on a level not seen since Minecraft.

Multi-threaded Map Updates

BYOND wastes a significant percentage of each tick just sending map updates (see world.map_cpu). Robust Toolbox's PVS is multithreaded and largely won't have any detrimental effects on other game processing.

Proc Static Typing (Unmerged Proof-of-Concept)

An unmerged proof-of-concept for proc static typing has been written. More details here.

Clone this wiki locally