ID:2966223
 
516 spent a long time in alpha (thanks mainly to server migration) and had a quick beta, but it's feature packed. Here's a quick list of what's included.

Be sure to check out the reference for all of the new features below.

Version 516:
  • Breaking changes
    • Browser code designed around Internet Explorer may need to be updated for WebView2 (based on Edge)
      • The <meta> tag for using updated IE 11 behavior is no longer necessary and may be detrimental, but <!DOCTYPE html> at the top should still be used
      • A Microsoft bug allowing use of IndexedDB for local storage no longer exists in the new browser (see byondStorage below)
    • The equivalence operator now takes associated values into consideration for lists
    • Icons within KEEP_TOGETHER groups will now sort amongst each other as they would if they were on the map, i.e. taking position and bounds into account for modes like SIDE_MAP.
    • Icons now anchor their bottom left corner to the bottom left of their bounding box after client.dir rotation, not to the southwest (in isometric this is the left corner)
    • Wherever render_source is used, the replacement icon is anchored to the bottom left of the icon it replaces, always
      • This means any plane master relays in client.screen should be anchored at the new SCREEN_SOUTHWEST instead of SOUTHWEST (see below)
    • bound_x/y are no longer preferred for bounds; they're subtracted from pixel_w/z to mimic old behavior
    • Byondapi now only creates temporary references on the main thread, which get removed via ByondValue_DecTempRef() if you want to remove them early; off-thread calls create persistent references that must be removed via ByondValue_DecRef()
  • Browser
    • The internal browser has been upgraded to WebView2 to replace the old embedded Internet Explorer
    • Calling winset() with no control and a browser-options parameter allows use of various browser options like devtools, built-in Find, zoom, etc.
    • A new byondStorage option has been added for JavaScript (it must be enabled via browser-options): the hubStorage, serverStorage, and domainStorage objects work very much like localStorage
    • A BYOND JavaScript object has been added to pages served via BYOND, for easier access to winget/winset
  • Language features
    • A vector primitive has been added, which is a 2D or 3D number; use of this has been built until movement code as well
      • Vectors can be constructed using vector() as well as some math operations
      • Generator objects and particles can use vectors instead of lists now
      • Vectors can be used as the location argument for Move()
    • A pixloc primitive has been added, which combines a turf with step offsets
      • Pixlocs can be constructed using pixloc() as well as some math operations
      • A new atom.pixloc var can read (and for movables, set) a pixloc
      • bound_pixloc() retrieves the pixloc for a corner, edge, or center of the atom's bounding box
      • Pixlocs can be used as the location argument for Move()
    • Associative-only lists are available with the new alist() proc and /alist type; these are more performant for cases where indexed lists aren't needed
      • Numbers can be used as keys in an alist, since accessing the Nth item isn't possible
      • Duplicate keys in the list are not allowed
    • Procs have new caller and callee (the proc itself) vars that return a reference to the running proc
      • The returned values are a new /callee primitive type
      • Callee objects can interact with arguments and some of the local vars of the procs they reference
      • The most obvious use case of this is generating your own call stack in a custom error handler
    • A new <=> comparator operator has been added; it returns 1 if the first operand is greater, -1 if it's less, and 0 if the operands are equal
    • for(k,v in list) syntax has been added for looping through associative lists
    • astype() is similar to istype() but returns either the object being tested or null; this pairs very well with the ?. operator
    • sign() was tragically overlooked in 515's new math procs, so it's been added now
    • lerp() interpolates between values; currently this supports numbers, vectors, pixlocs (and turfs), and /matrix values
    • load_ext() can load up an external proc's info to make call_ext() faster
    • #pragma syntax now exists, allowing C-like syntax for for() loops and the switch() statement
    • Several new convenience procs have been added for associative lists to do rapid calculations: values_sum(), values_product(), values_dot(), values_cut_over(), and values_cut_under(); more may be added in the future
  • Animation
    • Named animation sequences are now supported; using a new tag argument for the first step in a sequence will give it a name
    • The new command parameter will run a command on the client when an animation step completes, allowing better synchronization with animation events
    • A new ANIMATION_END_LOOP flag tells the animation to finish any looping sequences before either superseding or ending them
  • Filters
    • Named filters are now supported; a filter can be given a name argument, and it can be looked up in an appearance's filter list by name (which must be unique to that filter list)
    • Angular and radial blur filters now have an offset parameter
  • Display
    • icon_w and icon_z vars have been added for all appearances; these define the anchor point of the icon (i.e., they act as negative pixel_w/z offsets) but are not inherited by any overlays
    • New SCREEN_dir keywords have been added for screen_loc, such as SCREEN_SOUTHWEST, simplifying positioning issues related to the breaking changes listed above
    • screen_loc now supports a MIDDLE keyword similar to CENTER; it acts as LEFT+50%, BOTTOM+50%, or both
  • Sound
    • Sounds can now be linked to atoms so they move with you automatically without needing the server to send updates
    • A new .sound command is available on the client, so skin elements and animations can trigger sounds
  • Byondapi
    • Byond_PixLoc() and Byond_BoundPixloc() have been added
    • Byond_CRASH() has been added for throwing a runtime error; note that this will not unwind your own library's stack properly so you should do it at the end of your own lib's called function
    • ByondValue_DecTempRef() has been added to immediately clean up temporary references; as noted above, ByondValue_DecRef() should no longer be used for temporary references, and must be called for persistent references created by off-thread Byondapi calls
  • User interface
    • All controls now have read-only mouse-pos parameters, which also have inner-mouse-pos (equivalent to mouse-pos) and outer-mouse-pos versions
    • A new dpi parameter exists, globally and also for windows (per-window DPI is not currently supported), which returns the DPI scaling relative to a normal value of 1
  • Input
    • DMS aliases now properly handle embedded wingets
    • Mouse xbuttons are now supported
  • Compiler
    • dm.exe and Dream Maker both show compilation progress now
    • Object tree generation in Dream Maker is much faster
love u fr this system is my happiest memory
Is ALL dependence on IE completely gone now? As in, will BYOND finally be able to be launched on Steam Deck?
In response to Lunaofthemoon
I think some library dependencies are still compiled in that I'll be removing, but I'm not aware of what Steam Deck's limitations are.
Okay, thanks for the update. I'm glad BYOND is still going. I got laid off otherwise I'd re-up my membersip.