We've been doing internal builds for private beta testing, but since they are getting more stable we are now opening them up to the public. Feel free to test and report any problems, but ensure that you supply the correct version number.

Once the downloads are made "official" (replacing the BYOND 4.0 Beta download on the main page), they'll be uploaded to the BYOND update hub so that you can auto-update through the pager.

*** Fixes for build 964 ***

  • Line breaks in grids weren't working properly. (Hazman)
  • When using a custom skin and the game's official skin had an update, choosing not to update would do so anyway. (Pirion, Jeff8500, et al)
  • In Dream Maker, when editing a control far off the right or bottom edge of the screen, the edit popup would not appear. (Body)
  • Conversation popups in the pager had stopped working correctly in build 401. They popped up a new window for every message. (digitalmouse)
  • Receiving an unexpected page would cause the pager to crash.

    *** New features for build 964 ***
  • When connecting to a server running version 402 (build 964) or later, Dream Seeker will wait for the resources to be download before it completes login of the user.
  • For the sake of those who wanted to use a low max-lines setting in output controls, the overflow which is used to reduce flickering has been changed from up to 50 lines to 5% of max-lines. In a 1000-line control, this will allow 1050 lines before trimming back to 1000 lines occurs. In a 1-line control, trimming will happen on every line.

    * Non-looping animations are now supported for DMIs, via a setting in the movie-editor. An animation can be set to loop for a fixed number of iterations or indefintely as before. Fixed-looping animations start playing when the corresponding area, obj, mob, missile, or image is created, and freeze on the last frame. Note: due to the way turfs are represented (as pieces of the map rather than runtime objects), this feature will not work for them. (TheMonkeyDidIt, UnknownDuelist)
  • GIF files now correctly interpret the looping state for the above feature. By default, GIFs are actually defined to only play once, although almost all available GIFs have the "indefinite" loop set. As such, this may alter existing games that use GIFs directly.
  • The grid control now supports a shorthand to output() to a particular cell. Example:
usr << output("Arr!", "chart:1,3") // output to cell 1,3


*** Fixes for build 965 ***

  • The default BYOND skin accidentally included a macro for the 's' key (build 964 only). (The Original Name)
  • Icons were getting corrupted in some situations. (Android Data, others)
  • The pager wasn't always preserving style formatting.

    *** New features for build 965 ***
  • When an input control has keyboard focus, macros that would prevent regular typing are disabled.

*** Fixes for build 966 ***

  • In build 403.965, macros on the number pad were sometimes treated as ordinary characters instead of macros.
  • A project with no resources being hosted in by build 402 or 403 can't complete login. This bug will continue to exist for 402/403 servers so all users should upgrade to build 404 when it is available.

(re-released from 405.968, which had a common crasher)
(re-re-released from 405.969, which had an issue with the input control)

*** Fixes for build 970 ***

  • The Ctrl+arrow combo in input controls was not repeating properly when held down.
  • The "Chat" button (default skin) was incorrectly saving its status on world reboot. reboot the world. (Audeuro)
  • When first connecting to a game hosted in BYOND 402-404, the preload_rsc setting would not be handled properly, making clients continue downloading resources until the entire set was received. (Unknown Duelist)
  • "Unrecognized file type" errors have been fixed for .gif and .rsc files.
  • Setting focus=false for some controls could cause Dream Seeker to enter an infinite loop and stop responding. (Jamesburrow)
  • Visibility changes were sometimes being saved to host-security by Dream Daemon.
  • When first hosting an invisible world, the world would still appear briefly on the pager.

    *** New features for build 970 ***
  • The Input control now has text and multi-line parameters. Changes to the multi-line parameter at runtime will not affect its behavior.
  • The multi-line parameter for Info and Tab controls can now be set properly in Dream Maker.
  • Keyboard behavior is more intuitive in multi-line edit controls now. Macros are ignored if a multi-line edit has the focus.
  • The layout toolbar/menu in Dream Maker now has an auto-anchor button for auto-anchoring controls quickly. (Digijager)

*** Fixes for build 971 ***

  • In version 405, initial login could occur twice. (Kaiochao2536)
  • In versions 402 through 405, rebooting a world with a custom skin that used images would cause the reboot to fail. (Cheetoz)
  • After prompting to save a DMIv3 icon as DMIv4, the editor would not always realize the new format was in effect, so it would repeat the prompt for every save. (Moleboy)

*** Fixes for build 972 ***

  • In version 406, connecting to a remote server would not complete the login properly in certain cases. (Hellonagol)

    *** New features for build 972 ***
  • Client reboots no longer popdown the window in most cases.
  • The pager has options (in Preferences/Alerts) to toggle taskbar-alerts (popup balloons) for friends, games, and updates (Slurm).

*** Fixes for build 973 ***

  • If a pane (not a window) was marked as a default, it could cause unusual behavior in Dream Seeker, especially when trying to close DS, if it came before the default window or if no default window was specified. Panes now ignore the is-default setting when loaded. (Bandock)
  • Attempting to edit a tab control's appearance in Dream Maker would crash the program. (Mikau)
  • Menus and macros that were changed at runtime did not reset when rebooting the world. (Quaddw)

*** Fixes for build 974 ***

  • Windows was handling Enter and Esc keys incorrectly if a Child control had keyboard focus, causing it to disappear. (Narmanb)
  • The default skin's "Save Screenshot" menu command was bringing up the Options & Messages window instead.

*** Fixes for build 975 ***

  • Large file uploads (eg, via "as file") were sometimes causing crashes. Hopefully this is the cause of the elusive upload file bug that has been present for so long.
  • mob.sight was overriding object invisibility settings. (Claviarm)
  • Objects with pixel-offsets (including moving objects) were ignoring invisibility settings. (Claviarm)
  • Objects in unlit areas were clickable. (Dragonn)

    *** New features for build 975 ***
  • Icons now take their visibility from the tile they are on (the "base" tile), rather than the pixel location they may be partially or wholly offset onto. (This is how it used to work prior to version 402.) For example, if you have an icon that uses pixel_x/y to partially display on an adjacent, lit, tile, and the base tile is unlit, the entire icon will be invisible. The main reason for restoring this as the default (aside from backwards compatibility issues with 3.5 games) is that the verb-accessibility calculations, such as 'set src in view(), are always computed from the base tile.

    Note that this may cause some undesirable behavior for objects that are "smooth moving" into unlit areas, since they will flicker out of existence the moment they start to move. To have the visibility account for pixel offsets, you may set the new mob.sight flag: SEE_PIXELS. (Hazman)
  • The Options & Menus dialog now includes better support for the progress bar for file uploads/downloads.
  • The Options & Menus dialog can now be maximized. (DivineO'peanut)
  • The file dialog uses the new 2000/XP style when available.

*** Fixes for build 976 ***

  • The icon-editor wasn't allowing the user to override the mask color. (Android Data, D4RK3 54B3R)
  • Upon install and first key download, BYOND was incorrectly reporting "Cannot read key file!" (Audeuro)
  • The SEE_SELF sight flag wasn't taking precedence over the BLIND flag. (Masterdan)
  • In certain cases DS was incorrectly prompting the user to override the custom skin.
  • Pushboxes, checkboxes, and radio buttons did not behave properly inside of panes.
  • The Options & Messages box wasn't always appearing if there was a freeze or a crash early on in program execution.

    *** New features for build 976 ***
  • The "bin" directory now contains a file called "trace.bat" which simply calls "byond.exe -trace" (run it from cmd if you have problems executing via double-click). Games executed when the pager is in this mode will be run with trace-profiling. When they freeze or crash, click on the supplied link in the pager to view the trace.txt file, and report it in the Bug Report forum. Occasionally this will provide information that can help us isolate a bug.
  • The "exit" option has been removed from the pager's taskbar menu, since it was easily mis-clicked and is available from the system menu anyway. (Audeuro)
  • The browser component in the default byond skin file (byond.dmf) now displays the history-arrows, to preserve functionality in some old games.
  • In the icon-editor, if you import an icon and assign a non-native size (eg, importing a 64x64 icon into as 32x32), the states will be assigned "1", "2", etc. (Pyro_dragons)
In response to Tom
411 has been made the official download at, and the linux version has been released as well. This version includes some special debugging features for those of you experiencing crashes. From the notes:

* The unix DreamDaemon now will provide a stack trace if they crash, to assist in debugging. Please provide this info in bug reports.

* The unix DreamDaemon can be invoked with a "-trace" argument (eg "DreamDaemon test.dmb -trace) to output a trace.txt file, also useful for debugging.

*** Fixes for build 977 ***

  • The trace.bat file released in 976 wasn't allowing DS to properly startup.
  • Found an unlikely, but theoretically possible source of crashes upon user login. Will do a linux build shortly. (Masterdan)
  • "/" wasn't clearing the command text as it did in pre-4.0 versions of BYOND. (Xooxer)
  • Maps that were not visible from the outset when a skin loaded did not appear properly until certain settings (hardware mode, text mode, etc.) changed. (Audeuro)
  • File selection input boxes did not properly stay above the main window. (Audeuro)
  • Using \n to separate two commands had stopped working in old macros. Now it works in new macros as well.
  • Dream Daemon ignored the port parameter, unless it was supplied manually as -port ####. (Audeuro)
  • In DreamMaker, after editing one movie in an icon file, editing a different movie could change the movie's settings so that when it was next opened or saved, the loop count (or lack thereof) would be incorrect. (Pyro_dragons)

    *** New features for build 977 ***
  • If a browse() window is made with size=0x0, its titlebar will be turned off by default. If can_resize=0, then it will be totally hidden. (Shadowdarke)
  • When DS fails to close properly, the user will be prompted on next bootup to do some diagnostic routines (currently this just removes the cache file, whose corruption is a common source of crashes... we may add more schemes as needed).
  • Fallback behavior for movement states is now more logical. Previously, if a moving atom's icon had a specific state name matching its icon_state but no movement state, and also had a default movement state, the default movement state was preferred over the specific non-moving state.
    Contrary to reports this same behavior occurred in BYOND 3.5. (Pyro_dragons)
    The Alt button has been restored to the default interface. Now, if you set an input box's default command to ".alt " it will treat any single-character keys like R or 3 as if the Alt key is also pressed, so Alt+R or Alt+3 macros will run. A similar mode has been set up for ".ctrl " as a default command, to use the Ctrl key along with the key that was pressed.

.winset "input.command=\"!.alt \""

  • Checkable buttons will execute their commands when the skin is loaded. This allows any changes that depend on the saved is-checked state to be enacted.
We're finally back to BYOND software development. Expect more releases shortly. This one has some pretty big changes, so please test out thoroughly so we can ensure stability before we move it to the main download page:

NOTE: as expected, 413 is a little buggy, so please check the Bug Reports forum before posting issues.


*** Fixes for build 978 ***

  • The compiler was producing bogus "too many vars in program" errors when a project had >=65535 lines of code. Although, frankly, that's way too much code! (zackla21)
  • Movement was not working while the ALT button was down in the default skin. (Yakuto)
  • client/Command() was not resetting client.inactivity to zero. (Tiberath)
  • world/Topic() could intermittently crash for child servers created via startup(). The master argument may also correctly read as 1 now in some cases (possibly not all) where it was incorrectly set to 0.
  • BYOND limited background procs, including any proc waiting for results from input(), alert(), winset(), winget(), etc., to just over 65000 and did not account for the procs being finished. This caused behavior like no new input() or alert() boxes popping up.
  • When using multiple lines (not merely wrapping text) in a label control, the background color would appear over the background image within the rectangle where text is drawn. (Foomer)
  • When using a background image larger than the label itself, the image could overdraw other parts of the window.
  • Non-repeating key macros would cause focus to shift to the default input control if the key was held down. (ACWraith)
  • Key-up macros were still handled while an input control had focus even if the input control should normally handle them instead. (ACWraith)
  • Key-up macros could be received more than once in certain cases.
  • Commands received within a short time of each other, which commonly happened when receiving key-down and key-up macros close together, could sometimes cause the parser to ignore the second command. (Foomer)
  • Objects in statpanels and grids would always face south if object was not on map or in HUD. (ExAdv1)
  • Objects fitting the above criteria would also face south if their actual direction was the default for that obj type and did not get manually changed: (Crispy)
dir = WEST


if(!OW) OW = new

  • Moving or resizing controls in a minimized window (often triggered by browse() in older games) would cause the interface to resize elements incorrectly when restored.
  • In software rendering mode, icons that had been loaded were not properly cleared, so they would randomly replace other icons when drawn on the map. This problem became noticeable and got worse after successive reboots.
  • Software-mode wasn't rendering alpha values correctly (eg, in the map-editor or on the client, when hardware-mode was disabled).
  • Software-mode wasn't displaying icons with transparency or alpha on 16-bit displays.
  • The Options & Messages box would not pop up the first time a new error message came in, even if the checkbox telling it to do so was checked. If closed, subsequent messages would make it pop up normally.
  • The Options & Messages box would resize when new messages came in.
  • Users would occasionally get a bogus "visa expired" message.

    *** New features for build 978 ***
  • Updated some outdated pager & client links to the old website.
  • The 5-minute garbage collection cycle has been removed. Garbage collection due to reference counting should still work normally, so this cycle was probably redundant and eating processor time for no good reason.
  • The client command queue behaves more intelligently for repeating keys. Practically speaking, the major difference here is that you can now use key-up macros with any key-down macro regardless of whether the macro is set to repeat. The old, somewhat annoying behavior of "overshooting" a desired tile when holding down movement keys (due to the repeating movement commands being received late) is also gone.
  • The client now respects world.tick_lag, so you'll get faster client refreshes when using a lower tick_lag (like 0.5). Good for single-player games.
  • Error messages now also appear in the default output control, if any. Please note: The default skin now has a style for the output control:
.system {color:#FF0000;}

If you want error messages to appear in red like in older BYOND versions, add this or something like it to the default output on your game's skin.

  • Setting a control's new flash parameter can make it flash. Currently this is only implemented for windows.
// Example

// flash 3 times
winset(usr, "main", "flash=3")

// stop flashing
winset(usr, "main", "flash=0")

// flash forever and make your players hate you
winset(usr, "main", "flash=-1")

  • By popular request, there are now client.pixel_x and client.pixel_y vars, for pixel-level adjustments to the player's view. Example code follows:
// 1-second shake
for(var/i=1, i<=10, ++i)
client.pixel_x = rand(-8, 8)
client.pixel_y = rand(-8, 8)

  • Dantom.DB can now be access MySQL databases on windows (or unix). On windows, libmysql.dll must be available to system programs (eg, in C:\WINDOWS\system).
  • call() can now be used to access third-party libraries (.DLL files on windows, .SO files on unix), as long as the server is run in -trusted mode or permission is granted at runtime. These functions must be prototyped in the DLL as:
extern "C" char *func(int argc, char *argv[]) 
// argc = #arguments, argv[] = array of arguments

(const expressions are fine-- all that matters is the byte count)

The call() function works the same way as the proc/obj call(), with the first two arguments being the library name and the function name. Example:

[test.dll, a win32 C++ library compiled in VC++]:
#include <string.h>
// This is an example of an exported function.
// windows requires __declspec(dllexport) to be used to
// declare public symbols
extern "C" __declspec(dllexport) char *merge(int n, char *v[])
static char buf[100];
for(int i=0;i<n;i++) {
return buf;

DM code to use test.dll:
usr << call("test.dll","merge")("fee","fi","foe")

As with the other call() versions, arglist() may be used to do runtime arguments:
var/L = list("fee","fi","foe")
usr << call("test.dll","func")(arglist(L))

As the library prototype is char**, the call() arguments must be strings. Other types (like numbers) will be passed as the empty string ("") into the library function.

*** Fixes for build 979 ***

  • Software-mode alpha values were incorrect for modes < 32x32 (eg, the map-editor, menu, and small-icon views). (Foomer)
  • Runtime changes to menus now update immediately, instead of when the mouse moves. (Foomer)
  • In certain cases, some combinations of pixel offsets could lead to a crash on the client. (Foomer)
  • For some pixel offsets and conditions, the map would not update correctly or even at all.
  • The input.text parameter, which was only ever intended for use at runtime, was not made a runtime-only value. As a result it could conflict with input.command when the !command notation was used. (Jtgibson)
  • MySQL for windows wasn't working correctly due to an incorrect DLL calling convention. (Keeth)
  • Whenever a host in Dream Daemon sent a message to a player, Options & Messages would inappropriately pop up even though the message had been sent to a default output control.
  • Holding down the #frames spinner in Dream Maker's icon movie editor until it reached 99 caused a crash when the icon was next opened. (Latoma)

*** Fixes for build 980 ***

  • We accidentally made 413-414 require an updated client to play old games hosted on new builds. 415 is much more lax in this regard, so hopefully we won't be spammed by "where's the update???" messages.
  • New movement foo was broken in the release builds of 413-414, causing held-down keys to be inserted into a buffer incorrectly.
  • Ctrl+key and Alt+key macros did not work properly if the key was a character and an input control had focus.
  • client.pixel_x/y could cause crashes in some situations. This was most visible during world reboots. (Foomer, Theodis)
  • The limit on winclone()- and browse()-created windows was too conservative, since it didn't always account for windows that weren't in use. To avoid extra complexity, we've tentatively removed the limit for now. (Xooxer)
  • Setting border=1 in browse() had no effect. Now a sunken border will appear around the browser control in a popup window. (Unknown Person)
  • Savefiles containing infinite numbers could not be imported as text. DM is now capable of parsing 1.#INF as infinity, and -1.#INF as negative infinity. (Xooxer)
  • Deleted objects that were later recreated could, in certain cases, show up incorrectly (or not at all) on the map until that part of the map was refreshed by leaving the area and coming back. (This is probably the same bug which caused invisible mobs in some games, as reported by Leftley and others.) (Xooxer)
  • The Reboot query in the UI was sometimes automatically processed (incorrectly). (Polantaris)
  • Downloading a very very large .zip file from the hub, containing a great many smaller files, could cause a stack overflow that crashed the pager. (Vegettassj9)
  • Extracting a single dir or animation frame from an icon could cause a crash if the dir and/or frame did not exist for some of the states within the icon.
  • In the window editor in Dream Maker, when changing the ID of the currently selected control, the ID would not update in the editor panel. (Audeuro)
  • Controls that overlap within a window should (in theory) respect their Z order when painting, avoiding some annoying issues like controls appearing to move in front of other controls.

    *** New features for build 980 ***
  • You can now start a game in single-player mode without launching your BYOND pager and logging in. If the pager is already online, your key will be used, but otherwise you will play as Guest. (If you need to access a savefile or something using your regular key, don't use this feature.) In Guest mode you can't host a game or join a game that is online. To always use the old behavior instead and auto-launch your pager when you start a game, you can change this setting in your preferences in DS (or the Games tab in the pager preferences).
  • The command ".command" can be used to input a command just like using the Client | Command menu item in Options & Messages. A box will pop up, prompting you for a command. Any kind of command will work in this window, including the commands like .click and .reboot you can no longer run via input controls. This command can also be run via winset().
  • The input control now has an is-password parameter that can be used to mask passwords with an asterisk. Reading the contents from the input.text parameter will still work, but the Ctrl+C copy operation (and associated menu item) is blocked.
  • Setting the client.control_freak var to 1 at compile time will disable the Options & Messages window and most commands within (those commands can still be used by the skin itself), local user-defined macros, user-customized skins, and the default F2 screenshot macro.
  • Built-in commands like .click or .winset can't be entered into an input control, but can still be used in macros, menus, buttons, etc. and in the Client | Command menu item in Options & Messages.
  • world.Export() has an optional (currently undocumented) third argument: "flags". Currently the only flag is 1 (tentatively WORLD_PERSIST), eg:

    usr << world.Export("",null,1) // pass a "0" in a subsequent call to this address to close the connection

    When this is set, the server will keep the connection open so that subsequent world.Export() calls to that address are more efficient. For now, this doesn't work with HTTP world.Export() calls. It also doesn't support a convenient way for the recipient server to communicate back to the host server through the persistent connection (outside of the world.Topic() return value). For now, if the recipient wants to contact the host at an arbitrary time, it must open a separate connection through a world.Export() to the host's port. Yes, this is stupid.

    In theory, this system can be used to communicate between BYOND and outside (eg, C++/Java/etc) servers. We'll document the communication protocol to make this easier.

*** Fixes for build 981 ***

  • Input controls no longer sent raw commands to client/Command().
  • The Options & Messages box was failing to close in certain cases (fix not entirely confirmed... please test!)
In response to Tom
Due to two bugs, 417 has been re-released under the new 983 build:

417.983 (Notes)
418.984 (Notes)

This is a very minor update. It's the first in a while to use the auto-updater system: you should get an announcement about this when you next bootup your byond.exe, so try updating through that instead of through the full-installer.
Page: 1 2 3 ... 25 26 27