BYOND 5.0 Version 515 Release Notes
Build 515.1647
Fixes (More Info)
Dream Daemon
- Animations initiated by verbs (without sleeping at least a tick first) didn't send until after the map tick, resulting in them seeming to have started earlier. This was mainly noticeable in games with higher client.fps than world.fps. (F0lak)
- trimtext() resolving to an empty string would return null instead. (Jimmyl)
Dream Seeker
- Dream Seeker was crashing when used as a telnet client. (Laboredih123)
- Objects with render_source were drawn incorrectly when the render source overflowed its bounds to the left or top. (Niezan)
Build 515.1646
Fixes (More Info)
Dream Daemon
- Regression: Pathfinding changes in the previous version prevented walkers from reaching their targets in certain movement modes. (KashL)
- Too large a tick count in sleep() could break the proc scheduler. (Niezan)
Dream Maker
- Surrounding an expression with parentheses inside of a ternary operator did not correctly reset the parsing context, resulting in confusion about how to handle the : operator. (PowerfulBacon)
Dream Seeker
- Mouse hit bounds were incorrect for render_source objects. (Niezan)
- Turfs in visual contents had the wrong mouse hit identifier. (Niezan)
- Regression: Mouse macros called manually with missing arguments caused a crash. (Awwlie)
- When a maximized window was minimized, using winset on it could cause the is-maximized parameter to reset to false. (Bearman400)
Build 515.1645
Fixes (More Info)
Dream Daemon
- Built-in pathfinding had multiple issues, and a fallback designed to avoid choking the server in worst-case scenarios was persisting across reboots. (Ter13)
Dream Seeker
- Alpha filters' y position was accidentally inverted when it came to mouse hits, when using icons rather than render sources as the mask. (Maxsc)
- When maptext changed styles before a space and that space was gobbled up by a line break, the style change didn't carry over to the new line. (Niezan)
Build 515.1644
Fixes (More Info)
Dream Daemon
- When catching exceptions in a catch block, the stack wasn't reset to the size before try, causing problems with certain situations like for() loops using the to keyword. (Anticept)
Dream Maker
- Putting a proc call inside initial() didn't produce a compiler error. (Waterpig)
- The __PROC__ pseudomacro sometimes resolved prematurely, causing compilation errors in some cases. (Zephyrtfa)
- Integers beyond the limit of 32-bit ints were compiled incorrectly, capping them out at 2**31 instead of compiling as an approximated floating point number. (Zewaka)
- Changes to the way /mutable_appearance is compiled prevented New() from being overridden on it. (HarryOB)
Dream Seeker
- Alpha mask position could be incorrect when the MASK_SWAP flag was used. (Ter13)
Build 515.1643
Fixes (More Info)
Dream Daemon
- time2text() was incorrectly altering the current date when given a value of 0. (Azizonkg)
Dream Maker
- The mutable_appearance type, which is defined under /image as a mere convenience, didn't properly reflect the vars available to it that are available to objs but not images (e.g., vis_flags). The compiler now recognizes mutable_appearance as a more distinct type, and not only handles non-image vars properly but also correctly complains about vars that mutable appearances shouldn't have (e.g. loc, x/y/z, contents) as well as procs like Cross() which are nonsensical to call. (Baiomu)
- When re-compiling a map after the path-fix dialog pops up, parsing errors such as "inconsistent indentation" could occur. (Lummox JR)
Dream Seeker
- Setting map zoom to a high value and having HUD objects outside of normal bounds (e.g. screen_loc="0,0", screen_loc="EAST+2,NORTH+1") caused the non-HUD part of the map to clip incorrectly when the map was zoomed in enough to overflow the control. (Lummox JR)
Features (More Info)
DM Language
- The displace filter now accepts a flags argument, with FILTER_OVERLAY as the only supported flag. If used, the displaced pixels will be overlaid on top of the original image.
- The outline filter can now accept a negative size for an inset overlay.
Build 515.1642
Fixes (More Info)
Dream Daemon
- if(movable in turf) checks were incorrect for movables overhanging a turf that was not their direct loc, even though the turf was in their locs list. Looping through movables in a turf's contents via for() however worked correctly. (Kaiochao)
- Case-insensitive comparison of UTF-8 characters was not done correctly, which resulted in some odd discrepancies when using find and replace. (ROdenFL)
- Byondapi: Byond_ReadList() and Byond_ReadListAssoc() didn't properly increment reference counts. (Absolucy)
- Some more area updates in view didn't get sent to clients correctly. (Feli Rose)
- mutable_appearance.invisibility was read incorrectly. (James)
Dream Seeker
- Mouse macros and skin-initiated commands did not parse newline characters for multiple commands correctly, as keyboard macros did. (Albro1)
- Displacement maps could sometimes behave incorrectly when their position was shifted in certain directions. (Vallat)
Build 515.1641
Fixes (More Info)
Dream Daemon
- typesof() could include multiple bogus siblings of /turf and other turfs that were added by map compilation. Those bogus types were used internally only for startup purposes but were not actually valid at runtime, which could result in bizarre behavior if they were used. (Lummox JR)
- Areas were being removed from clients' lists of known areas prematurely, resulting in some areas not updating visually when they should. (Konlet)
- Datum vars were readable via datum[varname], which was nonsensical. (Kozuma3)
- The parent_type var didn't return the correct low-level type in many cases. This resulted in weird situations where atom.parent_type wasn't exactly equal to /datum. (Ter13)
Dream Maker
- Chained assignments didn't work in local var declarations without surrounding them with parentheses, resulting in weird syntax errors. (Albro1)
- Undo in the skin editor was badly broken, often resulting in a crash. (Meme01)
Dream Seeker
- When dragging the mouse outside of the window, the screen-loc parameter would send a message with the position where the mousedown first occurred, when instead the screen-loc should've been blank. (Kaiochao)
- Hash links didn't work correctly in browser controls. (Meme01)
Features (More Info)
Dream Daemon
- text2path() info for all prototypes (but not currently for procs) is now pre-cached on world start. This avoids an O(n) lookup when text2path() is first used for a type string that hasn't been cached yet.
Build 515.1640
Fixes (More Info)
Dream Daemon
- Proc calls from Byondapi libraries were incorrectly incrementing the refcount of the proc result. (Y0SH1_M4S73R)
Dream Seeker
- javascript: links in the browser were breaking subsequent topic links when those links began with ? instead of byond://? like they should. IMPORTANT NOTE: The workaround letting users get away with starting URLs with ? as a shortcut for byond://? in the browser will be going away in BYOND 516, except for legacy projects. Update your HTML accordingly. (Sovexe)
Build 515.1639
Fixes (More Info)
Dream Daemon
- A new warning for ..() when the parent proc does nothing was not correctly catching cases where procs like New() were overridden. The warning has been disabled until it can be done right. (Lige)
Dream Seeker
- The is-fullscreen parameter behaved incorrectly when the window was maximized beforehand. (Maxsc)
Build 515.1638
Fixes (More Info)
Dream Daemon
- Objects with VIS_HIDE didn't update their appearance on the client after being reintroduced via visual contents, which could cause the flag not to apply correctly. (Lige)
Dream Maker
- Regression in 515.1531: Tabs in the editor couldn't be reordered. (Dayoak)
Dream Seeker
- Images in a browser with query strings, such as those using the new icon extraction format, caused those query strings to generate a Topic() call. This was incorrect behavior for non-blank URIs. (Ter13)
- Embedded winget using "as json" produced malformed output for string parameters. (Amy-debug)
Features (More Info)
Dream Seeker
- A new sound parameter on-preempt has been added, for when a sound is preempted by another sound on the same channel. The on-end event will only fire for preempted sounds if on-preempt is not included.
Build 515.1637
Fixes (More Info)
Dream Daemon
- time2text() was imprecise with world.timeofday values. (Inuyashaisbest)
- Multiple types of calls requiring procs to wait for a client response could sit around forever (until world reboot) if the client was deleted. (LemonInTheDark)
Dream Seeker
- Many skin events with [[*]] in their command were parsed on a rudimentary level that didn't make use of improvements to the embedded winget syntax. This has been fixed. (Lummox JR)
- An object in visual contents with VIS_INHERIT_DIR didn't inherit the parent's dir during a flick() on the child object. (Drathek)
- The over_location argument of mouse verbs for drag and drop was incorrect. This was also applicable to embedded winget info in custom mouse macros. (LordAndrew)
- MouseExited() events on a map didn't fire when another control interposed itself on top. (Ter13)
- The on-size command should now fire for windows in more situations than it used to. (NSBR)
Build 515.1636
Fixes (More Info)
Dream Daemon
- Certain operations like flick() on a just-recycled object ID could confuse the server into not sending info that the old object had been deleted. (Vallat)
- The server will now more aggressively prune .rsc batches it has prepared if they go unused for too long. Previously, it would leave them open which led to an overabundance of open file handles. (Azizonkg)
Dream Maker
- The parser was confused by proc return types joining two primitives, e.g. "as num|text". (WorkersOfTheWorld)
- The world preview in the map editor was being regenerated even for scrolling and small changes. (Vallat)
Build 515.1635
Fixes (More Info)
Dream Maker
- In projects with corrupt .rsc files that affected old-style DMI files, object tree generation could crash. (Naruto 5292)
Dream Seeker
- In certain unusual situations, images could cause an infinite loop that hung the client. (Drathek)
Build 515.1634
Fixes (More Info)
Dream Daemon
- Blank strings were being saved in savefiles as null values. (Spevacus)
- When an object ID was recycled, animations on the new object sometimes didn't get sent to clients that had the old object still in their sent-object info. (RootAbyss)
- time2text() showed altered behavior with the newer runtime libraries when using negative values. (KashL)
Dream Maker
- Selecting the 4th control in the Controls menu for the skin editor opened help instead. (Ter13)
- In the map editor, when only certain layers were selectable but all layers were visible, the arrow tool could still select any type of object. (Lummox JR)
- Clicking blank grid squares in the map editor's Variants tab rearranged the variants. (Vallat)
- Attempting to paste a map selection too large for the current map caused a crash. (Vallat)
- The map editor's world preview didn't update when changing the displayable layers. (Vallat)
- In the icon editor, dragging from a movie frame to the delay row caused a crash. (NinjaPikachushka)
- Compiling a project where the .dme was renamed to another extension could cause some files (skins, maps) not to be included correctly, and produce odd output. (Zewaka)
Dream Seeker
- Certain instances of using visual contents in images could cause client crashes. (Ter13)
- VIS_UNDERLAY was causing positioning artifacts by inappropriately marking icons as HUD icons, and could cause crashes in some cases. (Devourer Of Souls Alter)
Features (More Info)
Dream Maker
- The map editor's properties pane now has an easy-access dialog for selecting files. This works for the icon var, and will also work for vars declared with "as sound", "as icon", or "as file". If null is also included in the as clause, the dialog will include a None option for a null file.
- Right-clicking on the map editor will now include objects that are not strictly on that tile, but overlap from another tile. They are marked separately with their x,y,z coordinates for clarity. Additionally, turf underlays are now properly marked as underlays in the menu.
- Map editor: Alt+click with most tools will select the clicked object so its properties can be edited.
Dream Seeker
- Now browser controls can use images with a src of \ref[icon]?... where the query string can contain the following items:
- sheet - display as a sprite sheet; without this the first matching frame is chosen
- state=S - specific state; use url_encode on the state
- moving=M - choose between non-moving and moving states
- dir=D - choose a specific dir
- frame=F - choose a specific frame (starting with 1)
Build 515.1633
Fixes (More Info)
Dream Daemon
- Regression: An attempt to fix an issue with complex icon operations caused simpler operations to fail when they shouldn't have. (Niezan)
Dream Maker
- Changing pixel offsets in Classic map editor mode could cause pixel offsets to change on other objects of the same instance. (RootAbyss)
- Map editor: Making a new selection with the select tool after pasting a previous selection didn't update the undo stack properly, making it impossible to undo the paste. (Randy Sandy)
Build 515.1632
Fixes (More Info)
Dream Daemon
- In some rare cases, resolving icon operations on the server (which itself usually requires a large sequence of operations) could cause reentry into a routine that wasn't allowing it and keep trying to load a component icon repeatedly in an infinite loop. (Kapu1178)
Dream Maker
- When editing an icon's pixels and then backing out and going to edit a different state's pixels, the wrong icon was highlighted in the movie section of the editor. This caused edits made to the frame to affect the wrong frame, and those edits wouldn't appear until selecting a different frame. This may have led to some crashes as well. (Jeannn)
Dream Seeker
- browse_rsc() was failing to write extracted icon files properly. (Vladisvell)
- render_target slate sizes were calculated incorrectly for plane masters. (LemonInTheDark)
Build 515.1631
Fixes (More Info)
Dream Daemon
- Reusing mutable_appearance could sometimes result in certain appearances being deallocated early, leading to a crash. (WorkersOfTheWorld)
- When world.movement_mode was set to a value besides LEGACY_MOVEMENT_MODE, a false result from turf.Enter() could result in Bump(null) if the turf and its contents were non-dense. (F0lak)
- datum.vars wasn't counted as a valid reference in Byondapi, resulting in bogus results from functions that interacted with the list. (Y0SH1_M4S73R)
- At some point, a change in the C libraries caused text2num() to parse "NaN", which was a change from previous versions. This has been deemed undesirable behavior, so text2num() will no longer parse NaN or infinity; it will return null in those cases like it used to. (Drathek)
- Certain events related to client initialization, like sending the client appearance (and therefore client verbs) did not trigger until client/New() ended. This has been changed so that now as soon as the default client/New() ends, that behavior is triggered even if more code has been added to a client/New() override after the default call. (Albro1)
Dream Maker
- Setting an active object (opening properties pane) in the map editor while another map editor tab already had an active object caused corruption. Now the active object is deselected whenever the tab is changed. (Pixel Realms)
- Compiling while an object was selected in the map editor, and then a different tab was active, caused a crash after switching back to the map. (InsidPro)
- The "no parent call" warning for ..() was inappropriately generated for operator overloads. This has been changed for all overloads, although currently it only really matters for the << and >> operators. (Aregrued)
Dream Seeker
- MouseMove macros were firing even when over empty space, contrary to specified behavior. Additionally, several parsing problems with explicit null reference arguments have been fixed. (Ter13)
- Using \ref to view atom or appearance icons in a browser caused a file handle leak that eventually prevented icons from being shown that way at all. (Vallat)
- Map position was incorrect in isometric mode with SOUTH and WEST client.dir. (Tony WK)
- Text-mode map displays were vertically flipped. (Inuyashaisbest)
- Macro changes resulted in the Any macro for the `/~ key to report as ~ instead of ` as it used to. (General Do-Nothing)
Features (More Info)
Dream Seeker
- Multiple skin parameters have been added for windows: inner-pos, outer-pos, screen-pos, screen-size, and is-fullscreen.
- A new "as raw" format has been added for embedded wingets. This will not add any additional escaping or quotes, assuming the value is correct as-is for parsing.
Build 515.1630
Fixes (More Info)
Dream Seeker
- Regression: Macros defined for character keys were taking precedence even when an input control was focused. (MrStonedOne)
Build 515.1629
Fixes (More Info)
Dream Seeker
- Regression: The Any key macro now reported A as lowercase, which caused problems for some games. (MrStonedOne)
Build 515.1628
Fixes (More Info)
Dream Daemon
- RenderIcon() didn't wait until the map tick to send icon requests for objects that were known to the player but whose appearance or related info had changed. (F0lak)
Dream Seeker
- RenderIcon() was adding extra space to the tops of icons due to a positioning error. (Vallat)
- Icons in SIDE_MAP could "tie" in the topological sort order under certain conditions, leading to cases where the sort might rearrange the icons in an arbitrary order. These ties are no longer possible, so the sort order should be consistent, barring any topological cycles. (Ter13)
- Certain overlays on areas could cause a client crash. (MrStonedOne)
- Keyboard macros have gone back to assuming a US layout for purposes of mapping key codes to letter names, because trying to use Windows' internal functionality for this was causing problems with winset-defined macros for Russian users. (T6751)
Build 515.1627
Fixes (More Info)
Dream Seeker
- The client could send some messages while still negotiating the connection, which resulted in the connection failing. (MrStonedOne)
- Changing the view size or scrolling offsets (as in changes to client pixel offsets) could cause an intermittent crash depending on the verbs available. (Drathek)
Features (More Info)
Dream Seeker
- Instant verbs will no longer get stuck in a queue behind non-instant ones.
Build 515.1626
Fixes (More Info)
Dream Daemon
- Regression: Proc calls with underscores were broken. (MrStonedOne)
Dream Seeker
- Some changes to SIDE_MAP sorting in an earlier build resulted in some incorrect sorts in some cases. (Kumorii)
Build 515.1625
Fixes (More Info)
Dream Seeker
- Regression: Areas with multiple icons often caused an infinite loop on the client. (MrStonedOne)
Build 515.1624
Fixes (More Info)
Dream Daemon
- World initialization of proc lists for each prototype got considerably slower and used more memory in 515.1611, which mainly impacted large projects. This process has been streamlined, and should now be an improvement in both memory and speed over even the earlier versions. (MrStonedOne)
- splittext() was handling its Start and End parameters incorrectly. The intention was that splits should only count between Start and End, but it was trimming the string also, and when splitting by regular expressions it trimmed incorrectly. Going forward, splittext() does not trim the string, and the documentation has been clarified. If you want to trim a string before splitting it, call copytext() with the Start and End parameters and you can send that to splittext(). (Amylizzlep)
Dream Maker
- The map editor's selection tool once again allows using Ctrl+click to choose the far corner of a selection rectangle after clicking the first corner. (James)
- The :: operator, when used in var overrides, could produce an "expected a constant expression" error even when the definition being referenced was in fact constant, especially in the case of deeply nested type trees. (Drathek)
Dream Seeker
- Mouse drags would sometimes produce a MouseDrop() call even when dropping over the same object as when the drag began, which was incorrect. This happened subsequent to other drags where the MouseDrop() was correctly treated as a Click() instead. (Meme01)
- Non-square client.view behaved incorrectly with sideways client.dir values. (Taitz)
Features (More Info)
Dream Maker
- The properties pane now allows you to sort vars alphabetically again with a new toggle.
Build 515.1623
Fixes (More Info)
Dream Seeker
- Quick fix: A typo in some otherwise minor changes caused major view issues in some projects. (General Do-Nothing)
Build 515.1622
Fixes (More Info)
Dream Seeker
- Particles did not work correctly on objects using VIS_INHERIT_ID, since the wrong object was being looked up for the particle stream info. (Maxsc)
- Sending output to a browser control via output() was broken. (Albro1)
- Particles with negative growth would continue to grow into the negatives and flip their icons. Now they will disappear when their scale reaches zero on either axis. (Cadis E. Di Raizel)
- The old "tree root hack" altering physical bounds for display purposes in SIDE_MAP has been removed. It was causing problems for sorting and was no longer relevant since the topological sort was added. Further issues with SIDE_MAP sorting remain and will be addressed in the next major version. (Ter13)
- Using an object with a render_target that had a filter with the same render_source caused a crash. (Ter13)
Build 515.1621
Fixes (More Info)
Dream Daemon
- Byondapi: Temporary references created for calls from other threads expired too quickly. (Absolucy)
- Byondapi: ByondValue_IsTrue() wasn't exported properly. (A-112)
Dream Daemon & Dream Seeker
- client.pixel_w was handled incorrectly on both the client and server. (RencaJuniorOwnsLibtards2018)
Dream Maker
- In some large projects, when a map tab was the last selected tab from a previous session, opening the project again caused the object tree to display a message that there were errors in the compilation. This was due to a race condition where the .dme file was being altered by the interface while the "update" compilation was underway. (Lummox JR)
- Saving in the map editor semi-cleared the current selection, leaving the selection rectangle visible but clearing the properties pane. The properties pane will now remain active, like it's supposed to. (Randy Sandy)
- Certain expressions with the :: operator didn't compile correctly as constants. (Kapu1178)
- Windows was incorrectly applying case-sensitive behavior to detecting relative file paths, which was exacerbated when mixing slashes and backslashes in the DME path. (MrStonedOne)
- Typing in a hex color in the color selection dialog didn't update the color preview. (Inuyashaisbest)
- The find and replace dialog in the map editor didn't correctly delete turfs or areas. (FKI)
- Trying to compile type::var caused an infinite recursion. (LemonInTheDark)
Dream Seeker
- Attempting to load a nonexistent client-side savefile caused a crash on the client. (FKI)
- Visual contents with icon/state inheritance did not inherit the last-changed time from the parent atom, resulting in incorrect timing for looped icon states. (ForwardslashN)
- Using edge-relative screen_loc values like BOTTOM and LEFT interacted incorrectly with render_target in certain situations. This was caused by the fix to id:2829744 which dealt with a similar issue. (Anturke)
- When popup browsers were closed, the default browser's on-show command was inappropriately triggered. (General Do-Nothing)
Features (More Info)
Dream Daemon
- Byondapi: Byond_ReadListAssoc() has been added for reading associative lists as key,value pairs, avoiding the need to make individual Byond_ReadListIndex() calls.
Build 515.1620
Fixes (More Info)
Dream Maker
- Double-clicking in the output pane after a Find All when the line in the source code was very long could cause a crash. (Aregrued)
Features (More Info)
Dream Daemon
- Breaking change: Byondapi has been overhauled significantly prior to 515 moving to the stable channel. The quick version of this is:
- CByondValue is now a POD (plain old data) struct; it never contains a copy of string data and therefore doesn't need init/free/copy/move routines, which have been removed. This significantly simplifies working with data values to avoid a lot of problems, and also avoids costly conversions when they aren't needed.
- Byond_GetStr() has been removed in favor of Byond_ToString(), since string data is no longer directly in CByondValue. ByondValue_SetStr() still works, although it's mostly an alias for the new Byond_AddGetStrId().
- CByondValueList has been removed.
- For reading list and string data, allocations for the copied data are handled by the end user. See the byondapi.h header for details.
- A few new functions have been added, most notably ByondValue_IsTrue() and Byond_ThreadSync().
- C++ wrappers have been similarly updated, and there's some support for using STL strings and vectors for ease of use.
- The byondapi.h header has new Doxygen-style comments for all its functions and structures.
Byondapi projects that don't manipulate strings or lists might not actually need to change their code at all for the new API, but it's assumed most will be affected in some way.
Build 515.1619
Fixes (More Info)
Dream Daemon
- Regression: get_dist() was broken, returning infinity when it should have returned a positive number. (General Do-Nothing)
Build 515.1618
Fixes (More Info)
Dream Daemon
- The server could crash on reboot or shutdown in some cases. (General Do-Nothing)
- Procs defined under world didn't operate correctly due to a broken lookup. (General Do-Nothing)
Dream Maker
- The warning for no parent call on ..() appeared incorrectly in cases where the proc's definition appeared later in the source. (General Do-Nothing)
Build 515.1617
Fixes (More Info)
Dream Daemon
- Byondapi: Byond_New() double-decref'd its arguments, resulting in runtime errors. (Absolucy)
Dream Maker
- Releasing the middle button in the map editor didn't work correctly. (Marekssj3)
Dream Seeker
- There was no obvious way to turn off the global sound environment once it was set. Now setting environment to a number below -1 will turn it off. (Kumorii)
- Nested uses of VIS_UNDERLAY didn't work correctly. (Ter13)
- Changing an object's plane while it was animating did not show the plane change. A few other appearance vars were affected as well. (General Do-Nothing)
- Using the RESET_ALPHA flag but not RESET_COLOR when inheriting a color matrix caused junk data to be used instead. (Cadis E. Di Raizel)
Features (More Info)
Dream Daemon
- Byondapi: Byond_CallGlobalProc and Byond_CallGlobalProcByStrId have been added.
- get_dist() can now return values over 127. If one or both atoms isn't on the map, infinity is returned instead.
Note that the maximum distance allowed for verbs' "set src" and for verb arguments is still shy of 127.
Dream Maker
- Calling ..() when there's no supercall available now produces a compiler warning. This has been added in advance of a planned new feature in BYOND 516 to optimize ..() calls.
Build 515.1616
Fixes (More Info)
Dream Daemon
- Calling overlays.Cut() resulted in an incorrect "index out of bounds" runtime error. (Aregrued)
Dream Maker
- Regression: Including a .dms file from within a library generated a compiler error. (Zagros5000)
Dream Seeker
- Dream Seeker crashed when entering software rendering mode. (General Do-Nothing)
Build 515.1615
Fixes (More Info)
Dream Daemon
- The new block() syntax was incorrectly handling values at the upper bounds of the map, cutting off at maxx+1 instead of at maxx, and likewise for maxy and maxz. (Luber)
- Calling world.Export() to contact a server that did not respond never returned. (FKI)
- Overlays and underlays lists didn't respect the numeric indexes supplied in Cut(), choosing to remove items from the end of the array. (Pali6)
- The server didn't send appearance updates for objects in visual contents whose VIS_HIDE flag was turned on. (Cadis E. Di Raizel)
Dream Maker
- Using #include to add a skin/script/map file to the project within a .dm file in a subdirectory could confuse the compiler into thinking the included file wasn't present. (Ter13)
- Copying and pasting a selection of turfs in the map editor could cause weird duplication of movables in certain cases, and interacted strangely with the right-click menu. (Inuyashaisbest)
- Using "Replace All" on multiple code files caused only the first character of the first file to appear in the output pane (due to incorrectly mixing UTF-8 and Unicode). (Aregrued)
- Icon editor main page context menus were broken, causing a crash. (Kumorii)
- The map editor reset to a default scroll position after compiling. (Kumorii)
- Debug information was incorrect for the last line of files that didn't end with a line break. (Kumorii)
Dream Seeker
- Deleting a client-side savefile didn't work if it had already been read in the same session. (SandPoot)
- OpenType files weren't recognized as fonts on the client to be automatically loaded. (Multiverse7)
- Positioning of render_source plane masters was incorrect in some cases. (Ter13)
- The client wasn't properly requesting atoms it hadn't seen when they were used in a \ref macro. (James)
- Sending an img tag to output with a \ref macro as the src could cause a crash. (James)
- Creating skin controls at runtime via the JavaScript winset caused a spurious error message in Options & Messages about the control.id parameter not being found. (Luber)
Features (More Info)
Dream Maker
- The tile under the mouse in the map editor now shows an outline.
Build 515.1614
Fixes (More Info)
Dream Daemon
- world.cache_lifespan is no longer included as a hard var in the world.vars list, since it can't be read at runtime. Its inclusion in the list was leading to runtime errors when trying to output world.vars or use it in json_encode(). (Inuyashaisbest)
- Map sending was recursing too much into visual contents even when VIS_HIDE was set. (Taitz)
Dream Maker
- Changing the palette in the icon editor could cause future drawing not to appear on the canvas. (Inuyashaisbest)
Dream Seeker
- Mouse hit detection was wrong in text mode. (Higoten)
- Maptext with embedded images didn't behave correctly after a reconnect or reboot. (NinjaPikachushka)
Build 515.1613
Fixes (More Info)
Dream Daemon
- Recursion protection for vis_contents didn't take VIS_HIDE into account. (Taitz)
Dream Maker
- Trying to replace an atom on the map with nothing (empty "Replace With" field) did not delete the atom. (Kumorii)
Dream Seeker
- vis-y mouse coordinates were incorrect for screen objects anchored to the map edge via TOP or BOTTOM. (Ter13)
- Another cause of icons not resetting properly on reconnect, resulting in wrong icons being displayed, was discovered. (InsidPro)
- Prompts (input, alert, etc.) didn't reset correctly during some reboots/reconnects, causing new prompts not to appear. (Ter13)
Build 515.1612
Fixes (More Info)
Dream Maker
- Regression: Code editor selections in reverse order displayed incorrectly. (Aregrued)
Build 515.1611
Fixes (More Info)
Dream Daemon
- Using Copy() on a vars list did not create an associative list. (Inuyashaisbest)
- Statpanels did not use the text overload for datums unless switching to that panel for the first time, causing the datum's stat line not to update. (Inuyashaisbest)
- url_encode() and list2params() didn't correctly skip BYOND format characters. (Spookerton)
- new/area(loc) returned the path of the area if the area already existed. This did not apply to situations where loc was omitted or null, which always results in a new area being created. (Redmooogle)
- Byondapi: Byond_CallProc() needed the verbified name of a proc to call it correctly. Although this is how things work internally with regular proc calls, call() actually uses a better method. This has been changed to work like call() instead, which is the intended behavior anyway. (Loanselot)
Dream Maker
- world.Export() to an external link could fail to wake the calling proc from sleep in certain cases where the link failed. (Meme01)
- Starting a text selection in the code editor, and then moving the selection back toward the original point using the keyboard, caused the selection to reset except with Shift+Left and Shift+Right. (Kaiochao)
Dream Seeker
- Filters requiring more than 2 passes were producing incorrect results, often resulting in objects disappearing or using an old appearance. (InsidPro)
- HUDs extending beyond normal map bounds were causing the map to draw in an incorrect position. (SugarBone)
- Sometimes a reboot or reconnect of a world would cause the icons to scramble. This was due to the client not properly unloading some internal icon info. (Taitz)
Features (More Info)
Dream Daemon
- Byondapi: New functions have been added to access built-in procs:
- length()
- block()
- locate()
- new()
- refcount()
- Conversion to text string
- Get the x,y,z coordinates of an atom
Build 515.1610
Fixes (More Info)
Dream Daemon
- Byondapi: Byond_ReadPointer() and Byond_WritePointer() didn't function as intended. (Tigercat2000)
- turn() didn't work correctly with generator objects. (Chaoko99)
- call_ext() with older-style string-only calls was passing null pointers to the external library in some cases instead of blank strings, which caused problems for libraries that expected non-blank strings. (MrStonedOne)
Dream Maker
- Compilation could screw up icon display in the map editor. (Ter13)
- Map editor palette behavior was badly broken and could result in crashes in some situations after a compile. (Ter13)
- Using a null color in an outline filter at compile time crashed the compiler. (Niezan)
- Copying a selection in the map editor with the area layer disabled could cause a ghost "default" area to be pasted that wasn't editable. (Randy Sandy)
- Defloating selections in the map editor could corrupt the undo stack, leading to crashes and other odd behavior. (Randy Sandy)
Dream Seeker
- Map controls turned black and stayed that way on reboot/reconnect. (Taitz)
Features (More Info)
Dream Daemon
- Byond_ToString() has been added to Byondapi.
Build 515.1609
Fixes (More Info)
Dream Daemon
- When the :: operator was used with a built-in var that hadn't been overridden (e.g., parent_type::appearance_flags), it didn't compile as a constant value. This has been corrected wherever feasible. (Kaiochao)
- list.RemoveAll() didn't remove associated values. (Kaiochao)
- RenderIcon() handled /image objects incorrectly on the server, causing a crash. (HindyMinte)
- fcopy() crashed when copying a nonexistent file in Linux. (LT3)
Dream Maker
- Packaging source files did not work correctly, even after a compile. (Kaiochao)
- In a switch() block, a single-line statement after an else (on the same level of indentation as the else) could compile incorrectly without producing any compiler error. (Ter13)
- (/datum)::parent_type compiled incorrectly, resulting in runtime errors that could crash the server. (Null-FFFFFF)
- Expressions such as var1::var2 were being compiled as if var1 were its type instead of as initial(var1.var2). (Luber)
Dream Seeker
- The position of the displacement filter was wrong when using a render source for the displacement. (F0lak)
- Secondary map controls didn't have the right internal size info when they were re-created after previously being used, and would stay broken until something caused a HUD update. (Itsmeowdev)
Features (More Info)
DM Language
- Byondapi is now available. This is a set of structures and functions, that can be extended in the future, for greatly improved communication with native code in external libraries. call_ext() can call functions in the new format by prefacing their name with "byond:", which means no more having to convert everything to and from strings. Byondapi is capable of operations like reading and writing vars, calling procs, and more. An example project for your own external libraries is included in the BYOND distribution.
Dream Daemon
- call_ext() no longer requires you to use the .dll or .so extension in an external library. If the extension is omitted, it will use the appropriate extension whether you're on Windows or Linux.
- Multi-threaded map sending has been enabled again after a long absence. The default number of threads can be set with the map-threads value in cfg/daemon.txt, or as a command line option for Dream Daemon.
Dream Seeker
- You can now clear a control on the client side using the .output command followed by the control name and no text.
Build 515.1608
Fixes (More Info)
Dream Maker
- Mixing embedded strings and the deprecated text() proc could cause a compiler crash. Best practice is to use embedded strings entirely and never use text() explicitly (embedded strings compile as the text() proc anyway), but the crash has still been fixed. (MrStonedOne)
Build 515.1607
Fixes (More Info)
Dream Maker
- Using #undef right after a string that used embedded expressions with a #define macro could cause the macro not to be processed properly. (GinjaNinja32)
Dream Seeker
- Changing the count for particles with gradients could cause a client crash. (Sovexe)
Features (More Info)
DM Language
- A new __IMPLIED_TYPE__ pseudomacro has been added. This can be used in situations similar to those the new() and locate() procs use.
Dream Daemon
- The interactive console in dd.exe and Linux DreamDaemon now has to be explicitly enabled with the -console option. This is because there was no reliable way to tell if the Linux version was started in daemon mode where the console was not relevant.
Dream Maker
- The compiler will now include relative path info in the __FILE__ macro and debugging information.
Build 515.1606
Fixes (More Info)
Dream Daemon
- Servers could sometimes crash during the new loop intended to fix the area appearance issue (id:2842865). (Lummox JR)
Build 515.1605
Fixes (More Info)
Dream Daemon
- Visually updating areas that were in view didn't necessarily update them on the client until their mob moved over the area. This was a problem with the server not properly sending the changes. (Higoten)
Features (More Info)
Dream Daemon
- The dd.exe console will now output memory stats to the console when the "memory" console command is used, instead of sending it to world.log.
Build 515.1604
Fixes (More Info)
Dream Daemon
- Internal view() flags didn't reset correctly in some cases, resulting in incorrect view/hearers/etc. lists. (Itsmeowdev)
- Input command expansion could hang if the list of potential arguments was too huge. (Crossedfall)
Dream Maker
- The command-line version of Dream Maker (also used by Linux) could cause strange results with very large maps (over 6.5M turfs), placing objects in the wrong position. (James)
Dream Seeker
- A race condition in the threading implementation, which was rare enough that it mostly occurred on systems where hyperthreading was disabled, caused intermittent crashes when threads were applied to hashing icon frames. That threading was introduced in a recent build. (Lummox JR)
- Parallel animations of color matrices could jump to the end of the matrix animation in some cases. (Mr. Moriarty)
- Statpanels and grid controls were not respecting line break characters or wrapping text naturally. (LeonAsakura)
Build 515.1603
Fixes (More Info)
Dream Daemon
- The result of json_encode() had too high a reference count, resulting in memory leaks. (MrStonedOne)
Dream Maker
- Bogus type paths could be accessed by the parser under some circumstances, including an internal variable. (Kapu1178)
- Using __TYPE__ in a global proc didn't correctly compile as null, but caused the compiler to pass out. (Ike709)
Dream Seeker
- RenderIcon() incorectly included extra HUD tiles in its size calculations. (HindyMinte)
- Applying two filters successively could sometimes cause them to fail to render. (LemonInTheDark)
- Certain malformed DM-CSS could crash the engine. (Devourer Of Souls)
- Several icon operations were altering frames in the original icon they weren't supposed to touch. (S34N_W)
Features (More Info)
Dream Daemon
- Creation of a ref() string (not including string tree lookup) is an order of magnitude faster than before.
Build 515.1602
Fixes (More Info)
Dream Maker
- The compiler wasn't throwing duplicate definition errors for duplicated var names. (Spevacus)
Dream Seeker
- Embedded wingets didn't work correctly with command prefixes in input controls. (Ter13)
Features (More Info)
DM Language
- fexists() can now be used inside of an #if preprocessor conditional expression.
- Individual compiler warnings can be suppressed, or elevated to errors, through the use of new #pragma directives as well as command-line switches.
- A new preprocessor directive, #pragma multiple, will allow a file to be included more than once.
- Two new pseudo-macros, __TYPE__ and __PROC__, have been added. __TYPE__ compiles as the current type path, or as null within a global proc. __PROC__ compiles as a reference to the current proc, which will pair well with nameof().
Dream Daemon
- When calling new() with an instantiated object instead of a type path, the error message was confusing because it printed out the type path of the object. The error message has been improved for these cases.
Dream Maker
- The default compiler error limit has been increased from a paltry 100 to 10K.
Build 515.1601
Fixes (More Info)
Dream Maker
- Segments in the map editor weren't respecting their minimum sizes, which was causing the world preview to turn black if it got too small. (Khunkurisu)
- The first time Dream Maker was opened, the map editor's layout was proportioned incorrectly with most controls at a zero size. (Khunkurisu)
Features (More Info)
Dream Seeker
- The client could stutter when loading icons with a large number of frames. This has been improved (but not eliminated) by adding threading support.
Build 515.1600
Fixes (More Info)
Dream Daemon
- json_decode() was allocating way too much space for strings, which was more apparent with large files. (AffectedArc07)
Dream Maker
- The map editor would crash when in classic instance editing mode, if you selected a turf type that existed twice in the same tile anywhere on the map. (Higoten)
- Expanding the map in the editor didn't set the default turfs/areas properly so they were not selectable. (Higoten)
- When the map editor's properties pane was hidden by default, clicking an atom could cause the map to shift because of the pane briefly appearing. (Higoten)
- Positioning the map editor toolbar in certain places could cause most editor elements not to be redrawn properly. (Higoten)
- In classic instance editing mode, selecting a different turf with the same instance as one that's already selected would do nothing. (Higoten)
- Range cases in switch() didn't throw a compiler error when given non-constant or non-numeric values. (Ike709)
Build 515.1599
Fixes (More Info)
Dream Daemon
- Internal savefile indices were thought to still exist in some cases where they didn't, causing read/write failures. (Depressedmistake)
- The -trusted flag didn't work with the Windows command-line version of Dream Daemon (dd.exe). (AffectedArc07)
Dream Maker
- The map editor didn't visually update immediately when deleting atoms. (Vallat)
- Nudging an atom on the map with the arrow keys didn't visually update immediately. (Penot1971)
- The nameof() operator didn't work correctly for vars that weren't built in. (WorkersOfTheWorld)
Dream Seeker
- Several longstanding causes of poor statpanel performance have been addressed and improved. (Luber)
- Certain maps could cause the topological sort in SIDE_MAP mode to go berserk, resulting in an out-of-memory condition. This occurred in the new map editor as well. (Khunkurisu)
- Some text in statpanels wrapped onto two lines when it shouldn't have. (Lummox JR)
- On the default BYOND game skin, the browser pane appeared by default and covered up most of the buttons. This was due to a problem with conditional winset interpretation. (Depressedmistake)
Features (More Info)
Dream Maker
- The map editor has a new layout mode where you can rearrange major parts of the interface, as well as the ability to hide the world preview and auto-hide the properties pane.
Build 515.1598
Fixes (More Info)
Dream Daemon
- The world.Profile() proc was not behaving correctly, resulting in runtime errors. (Jaredfogle)
- In certain types of assign-with-side-effect operations, the chained dot and null-conditional dot operators would result in the wrong values being accessed. (Amylizzlep)
Dream Maker
- The object palette in the map editor didn't update its icons after recompiling. (Ter13)
- Atoms' physical bounds were not set correctly in the map editor, resulting in major sorting errors that made certain icons disappear. (Magicbeast20)
- When an atom used an icon that had no default state, and did not define an icon_state of its own, the map editor fell back on displaying the first state in the file rather than showing nothing. (Higoten)
Dream Seeker
- The [[x]] and [[y]] embedded wingets for GamepadLeftAnalog and GamepadRightAnalog macros were not correctly marked as numbers, impacting how they were expanded in the command by default. (Ter13)
- Physical bounds for objects on the client were not properly set when they were outside the normal map area, confusing the sort for SIDE_MAP and ISOMETRIC_MAP. (NSBR)
- Links in maptext were not working. (James)
- Closing popup browser windows with the "window" parameter in browse() could accidentally also close the default browser control in the skin. (Comicao1)
- Maptext whose atom had a color value would swap red and blue channels in certain situations. (Rotem12)
- Particles only displayed on every other frame. (Cadis E. Di Raizel)
Features (More Info)
Dream Daemon
- A command-line version of Dream Daemon is now available for Windows. This includes a limited console where some commands can be entered (e.g., to get a memory report or reboot). In the future the console's capabilities will be expanded.
Dream Maker
- The first iteration of the map editor overhaul was helpful in some ways to some users, but detrimental in others. Multiple changes have been made so far to address those shortcomings.
- There is a new menu option for classic editing where altering an instance alters all copies of that instance.
- The first tab in the palette control is a Variants tab for known variations on the selected type (e.g., other icon states).
- Palette autofill has been removed.
- Palette tabs have been changed from primitive types to customizable.
- The pop palette is global across all map windows and persists between sessions. It is saved in a human-readable .dmm-pal file.
- Drawing movable atoms will continue painting more of them unless you use a modifier key such as Shift or Ctrl to place it in an exact spot.
- The map can be zoomed with Ctrl+wheel.
Build 515.1597
Fixes (More Info)
Dream Daemon
- rgb2num() did not allow null to be used as a color, even though that may be returned by atom.color. (Pali6)
- The server was not sending missile messages correctly in most cases. (Higoten)
- Non-zero blend_mode values couldn't be changed. (Exxion)
Dream Maker
- Changing an atom's icon, icon_state or other appearance-impacting vars in the properties pane of the map editor did not necessarily show the change right away on the map. (Lummox JR)
- Atoms' icon var couldn't be changed to null in the map editor. (Higoten)
- Trying to load a map with invalid variables would result in a crash. (Higoten)
- Mouse coordinates were not properly sanitized to stay within the map editor's bounds if the map was wider than it was tall, resulting in really strange bugs with the rectangular selection tool. (Higoten)
- Changing type paths of movables on the map could cause the map editor to crash after making post-compile corrections. (Higoten)
- The auto-scroll behavior when a partially visible tile was clicked was too aggressive, resulting in unintended dragging of turfs. (Higoten)
- When turfs were made invisible via the Layers menu of the map editor, underlays still appeared. (Higoten)
- Using the Find and Replace dialog in the map editor and clicking Find Next did not find any instances beyond the first two matches. (Higoten)
- The "Add to Palette" option in the right-click popup for the map editor has been removed, and "Make Active Object" now selects the atom in the palette. (Zagros5000)
Dream Seeker
- Images added to areas before the areas were known to the client never properly resolved. (Higoten)
- Plane masters interacted weirdly with RenderIcon(). (Exxion)
Features (More Info)
Dream Maker
- The command-line compiler now has a -D switch to inline #define, as -DMYDEFINE or -DMYDEFINE=MYVAL.
Build 515.1596
Fixes (More Info)
Dream Maker
- The grid space allotted for text in the properties pane was incorrect for some values. (Ter13)
- The "delete topmost turf" option in the map editor caused a hang. (Higoten)
- When a turf replaced another turf in the map editor, the undo action was sometimes incorrect, restoring the default world.turf instead. (Higoten)
- Find and replace didn't work corectly in some cases when using the single Replace instead of Replace All option. (Higoten)
- Rectangular selections that were deleted set the area and turf info in the old region incorrectly, which resulted in weird behavior when adding turfs over that region. (Higoten)
- Pasting a rectangular selection in the map editor couldn't be undone. (Higoten)
- Compiling while a turf or area was open for editing in the map editor's properties pane could cause a crash when selecting a tile after compilation. (Higoten)
- Doing a Find All in the map editor on any scope broader than the current file would hang Dream Maker. (Higoten)
- The compiler sometimes compiled with a minimum world version that was incorrect if it also did not require that client version. (Anturke)
- Attempting to reconcile path changes to a map after a compilation with errors brought up the "Pending Map Errors" dialog could cause a crash. (Higoten)
- Changing a movable's pixel or step offsets in the properties pane of the map editor offset it by the new value instead of using that value directly. (Depressedmistake)
- The eraser tool didn't work on movables in the map editor. (Higoten)
- Find and replace didn't work correctly for movables in the map editor. (Higoten)
- Adding movables to the map could give them incorrect pixel/step offsets, and outright crash if clicking on a part of the map where only the background shows through. (Higoten)
Dream Seeker
- Objects with big icons would sometimes disappear if the turf they were on was only just barely out of view to the north or east. (Zagros5000)
- The black tiles for SEE_PIXELS and SEE_BLACKNESS were on the wrong plane and at the wrong position. (Exxion)
Build 515.1595
Fixes (More Info)
Dream Daemon
- The built-in pathfinding had some strange behavior directly next to the target, which wasn't apparent until get_steps_to() was added. (Kozuma3)
Dream Maker
- New optimizations for for(atom in range()) and similar procs were compiling incorrectly. (Anturke)
- Deleting a rectangular selection and then compiling caused a crash. (Higoten)
- Using find and replace in the map editor could sometimes cause a hang. (Higoten)
Dream Seeker
- Text-mode map display was messed up. (Kozuma3)
- Trying to use RenderIcon() or its related features with mapless interfaces caused a crash. (Kozuma3)
Build 515.1594
Fixes (More Info)
Dream Daemon
- Turf changes on the eastern or northern edges of a player's turf view range did not send any appearance changes to the client. (Taitz)
- Calling gradient(list, index) with a non-constant list as the first argument resulted in a "bad gradient" runtime error. (Lummox JR)
- Gradients in hue-based color spaces were calculated incorrectly. (Redmooogle)
- The server did not properly recognize when an object ID had been reused in RenderIcon(), causing old information to be used in some cases. (Kozuma3)
Dream Maker
- Find and replace could hang or crash the map editor. (RootAbyss)
Features (More Info)
DM Language
- A new nameof() proc, operating only at compile-time, can be used to convert a proc reference into the name of the proc, solving a dilemma faced by multiple Space Station 13 codebases.
Build 515.1593
Fixes (More Info)
Dream Daemon
- Another hang issue similar to the one fixed in the last build occurred when a movable overlapped the east edge of the map, instead of the north edge. (RootAbyss)
Dream Maker
- An expression *varname could compile incorrectly in certain cases, causing an implied src prefix before the var to be lost and resulting in runtime errors. (Niezan)
- Deleting a rectangular selection did not create a correct undo action. Additionally, dragging a turf that was not previously selected did not create an undo action. (RootAbyss)
- Compiling while an object was selected in the map editor's palette could cause a crash. (RootAbyss)
- Actions that caused the DirectX device to be lost, such as hitting Ctrl+Alt+Del, would prevent the world preview in the map editor from redrawing correctly. (RootAbyss)
Dream Seeker
- Atoms drawn to a render target drew in an incorrect position within the slate if they had a screen_loc with one of the screen-edge keywords (e.g. LEFT, BOTTOM). (Ter13)
- RenderIcon() kept the results of previous renders visible instead of clearing them, causing transparent pixels in the second image to show the previous image. (Anturke)
Build 515.1592
Fixes (More Info)
Dream Daemon
- Movable atoms with icons bigger than the world tile size could hang the server when their top edge overhung the northern edge of the map. (Lummox JR)
- Trying to read from a prototype's vars list caused a crash instead of a runtime error or null. (Luber)
- Bounding box calculations for the turf map were incorrect near the north and east edges of the map. (RootAbyss)
Dream Maker
- Undo levels in the map editor were being cleared by compiling. (Lummox JR)
- Resizing the map could crash the editor. (RootAbyss)
- Sometimes icons in the icon editor did not show their changes visually until leaving the pixel editor screen or doing some operations such as deleting a pixel with the select tool. (RootAbyss)
- Deleting atoms from the map and then re-compiling did not remove them. (RootAbyss)
Dream Seeker
- Stopping a sound on a channel that wasn't playing anything crashed the client. (S34N_W)
Build 515.1591
Fixes (More Info)
Dream Maker
- The Undo command in the map editor didn't repaint correctly after fully replacing turfs. (Lummox JR)
- Trying to generate instances from an icon states or directions in the map editor from an object without an icon could cause a crash. (Rickoshay)
- Implicit return types in procs such as operator+= could be incorrect in some situations, intermittently spitting out errors about undefined vars. (Niezan)
- Map files were being read with underlay turfs displaying in the reverse order, and saving also reversed the order of underlay turfs. (Hydrugen)
- After a failed compilation, checking or unchecking files in the file tree didn't update the .dme file on subsequent compilations. (Niezan)
- Mouse wheel events weren't handled properly in the map editor. (Francinum)
Dream Seeker
- Flicked icons could appear in the wrong place if they weren't the same size as the default. (RootAbyss)
- Replacing reference strings with images in browser and output controls was done too aggressively, mangling some attributes like links. (Exxion)
- Browser handling of CSS files was incorrect, causing CSS not to load in some situations. (Anturke)
- mouse_opacity was incorrectly set for objects in visual contents outside of a KEEP_TOGETHER group. (Kozuma3)
- A change to the pre-render step messed up some map gliding calculations. (Hydrugen)
Build 515.1590
Fixes (More Info)
Dream Daemon
- Attempting to access an invalid var for lists at runtime will now throw an error, whereas in the past it failed silently. This applies only to worlds compiled in version 515 or later. (DamianQ)
- Attempting to access an invalid var under world at runtime will now throw an error, whereas in the past it failed silently. This applies only to worlds compiled in version 515 or later. (DamianQ)
Dream Maker
- The compiler will now correctly throw an error when trying to access proc-local vars such as src or usr inside of a static var declaration. This is because the related bug id:2798255 caused world.init to throw runtime errors. (This is a breaking change for some games, especially several variants of Space Station 13. For cases where this is being done to confirm a var is valid, use type::varname (the literal word "type") instead.) (DamianQ)
Features (More Info)
DM Language
- json_encode() and json_decode() now have a second argument for flags that influence their behavior. This can be used to produce pretty-printed JSON as well as decide how string decoding needs to be.
- Savefiles now have byond_version and byond_build vars that can be used for maintaining compatibility. This can be defined at compile-time as a default for all savefiles. New functionality has also been added to savefiles for saving appearances and matrices in a better way. If you want to avoid savefiles updating to the new version during beta testing, you can set savefile/byond_version=514 for the time being.
- Prior to maps being sent to clients on every tick, the server will now call an optional user-defined world.Tick() proc. This can be used for various housekeeping needs.
- call_ext() is now used for all external library calls, in place of call(), to clarify the difference between calling DM code and calling external code. This is a breaking change for some games, although it won't have any impact on games compiled prior to BYOND 515. Trying to call() an external library will either produce a compiler warning if the library name is a constant string, or a runtime error otherwise.
- A new %% operator, and %%= as its companion, allows modulo to be done with fractional operands. The old % operator always truncates the operands to integers, and that behavior remains the same for backwards compatibility.
- A new scope :: operator has been added. This has many uses:
- ::varname and ::procname(...) can be used as a shorthand for global.varname and global.procname(...), respectively.
- /thing::staticvar can be used to disambiguate var names when a static and local var have the same name.
- Most commonly, A::B is a shorthand for initial(A.B), but can be used where A is a constant type path, e.g. /foo::bar.
- In an object's var declarations, and static var declarations, type::varname and parent_type::varname are valid, so an expression like HP = parent_type::HP + 20 is allowed.
- /mytype::procname() can provide a reference to a specific proc for use with call().
- The operations x**2, x**-1, and x*x have been optimized with new instructions that should be moderately faster. In this case, x is any expression that doesn't have a side effect (no proc calls, no ++ operator, etc.). Therefore an expression like (x1-x2)*(x1-x2) gets compiled as a faster form of (x1-x2)**2 which also has the advantage of not having to calculate x1-x2 twice.
- A new syntax for block() is available that avoids the need for calling locate(). This syntax is block(x1,y1,z1, x2=x1,y2=y1,z2=z1). This will also alleviate the need to try to trim the x,y values to valid values.
- trimtext() returns a copy of a string with any leading or trailing space characters removed.
- An expected return type can be specified when you define a proc, by following the proc declaration with "as /mytype", "as num", "as list", etc. The main purpose of this is to allow the . operator to check for the validity of vars and procs after a proc call in an expression such as myproc().foo = bar.
- "Pointers" are now supported in the DM language. Preceding any writable var, list item, etc. with the & operator will create a pointer, and that pointer can be read and written to by preceding it with the * operator. Proc-local vars are allowed to be used as pointer targets, so a sleeping proc's values can be altered in this way.
- In order to make animations simpler to manage, a new ANIMATION_CONTINUE flag has been added to animate(). With this flag, the object argument does not have to be omitted to continue an animation chain. This should make it easier to build animations with soft code.
- The sound datum now has a pitch var that can be used to shift the pitch of a sound up or down (currently limited to 3 octaves of change). This also allows a sound to be time-stretched by setting frequency to the inverse of pitch.
- refcount() has been added to the language, which will return the number of references for a given object. If that object does not use reference counting, the result is zero.
- ftime() can be used to check the creation or modification time of a file on the server.
- get_steps_to() uses the built-in pathfinding to return a list of directions to follow for the entire path. In this way, a movable atom can cache its pathfinding and call get_step_to() less often.
- Several new math procs have been added:
- floor(x): the value of x, rounded down to the nearest integer; this is an alias for round(x) with no second argument
- ceil(x): the value of x, rounded up to the nearest integer
- trunc(x): the value of x rounded toward zero to an integer; that is, the integer part of the number
- fract(x): the fractional part of x
- isnan(x): true of x is a numeric type but is an invalid number (NaN)
- isinf(x): true if x is a positive or negative infinity
- The read-only world.process var returns the process ID in the operating system of the current server.
- noise_hash() has been introduced, allowing a built-in way to get procedural noise.
- Two new features have been added to animate() to simplify the construction of more complex animations and to preview them. First, a delay argument has been added, so the first step in a sequence can be pushed forward or back in time, relative to when animate() is called; this for instance allows a later animation sequence to happen without having to sleep(). Additionally, a new ANIMATION_SLICE flag has been added for previewing a portion of an animation; see the reference for more details.
- list.RemoveAll() has been added. This is basically a faster version of while(list.Remove(item)); that won't choke on huge lists when the number of removals is relatively high.
- A new sound.params var can be used to set up skin-related interactions with the sound. Currently the only parameter supported is on-end, which can call a command when a sound is finished.
- A special proc called operator"" can be defined for objects, altering how they get converted to text when embedded in a string via brackets. It is important to note this will NOT affect how the object is seen by clients.
- client.RenderIcon() can now be used to create an icon file from an appearance, leveraging the client's rendering capabilities. Additionally, appearance reference strings (from the ref() proc or \ref operator) should be usable in outputs and browser controls.
- The sound datum's offset var can now be used to specify a start time (in seconds), or to change the sound's position when using the SOUND_UPDATE flag.
Dream Daemon
- for(thing in list) loops are now optimized to better handle cases where the list is range, orange, viewers, oviewers, hearers, or ohearers. Previously view() and block() were the only lists that were optimized in this way.
Dream Maker
- The map editor has undergone a huge overhaul, making editing easier going forward. (Those who didn't work with the alpha builds are encouraged to make backup copies of their maps.)
- Rendering is now done using the same engine Dream Seeker uses, which allows effects to appear that couldn't before and also should make everything draw faster.
- The object palette is much more useful than before.
- Objects on the map can be live-edited with a new properties pane on the right-hand side of the editor window.
- Atom vars are sorted by their depth in the type tree, making it easier to find the properties you want to change. These levels are also collapsible.
- The editor tools and shortcuts have been revamped for improved ease of use.
Dream Seeker
- num-lock, caps-lock, and scroll-lock are now valid in commands using the double-bracket embedded winget syntax.
514 Release Notes | View All