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 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

Login to reply.