BYOND 4.0 Version 490.1113 Release Notes
Fixes (more info)
- Worlds with large maps took a much longer time to startup than they should have. (Lummox JR)
- locate(/atom/movable) behaved exactly like locate(/obj), and would ignore any mobs present. (Lummox JR)
- icon_states() returned incorrect results for big icons, in projects compiled prior to BYOND 4.0. (Lummox JR)
- The == and != operators returned incorrect results when comparing 0 and -0, where -0 could result from some calculations. (Popisfizzy)
- Changing the type dropdown for a new file did not update the file extension. (Higoten)
- Macros will now fire if extra modifier keys (shift/ctrl/alt) are pressed. That is, shift+arrow will now behave like a regular arrow key in most games. Also, when changing from one repeating macro to another using the same key but different modifiers, the original repeater's key-up macro will fire. (Mega fart cannon)
- The focus attribute for a skin control only returned "true" in winget() if the focus was on the actual control itself. Now it also returns true if the focus is contained by the control. (E.g., window.focus is now true if the focus is on an input box in that window.) (Mikau)
- Macro commands starting with .key, like a user-defined .key_down verb, failed. (Jp)
- If repeat macros were defined for both key and Shift+key (or some other modifier combo), pressing or releasing the modifier keys did not change which command was being repeated. Now the command will change as long as the new modifiers match a different repeating macro. (Stevenw9)
- Saved skin parameters were loaded even when they had no corresponding entry in their control's saved-params value. (Aaiko)
- Objects with pixel offsets outside of the -127 to +127 range could incorrectly show the pixel offset when added to client.screen instead of using the offsets from screen_loc. (Kajika)
- Mouse commands were not regarded as "set instant=1", which caused delays in running them. (Forum_account)
- Output controls flickered when clearing them. (Resonence)
- The calculation for network delay was too aggressive, while not dropping network delay back down quickly enough after conditions improved. (Bravo1)
- Mobs and objs with an initial pixel offset did not show correctly, until they updated, when older clients connected to a server running version 489. (SilkWizard)
Features (more info)
- In previous versions, icon animation delay was dependent wholly on tick_lag. Now it is expressed in terms of 1/10s instead of ticks, so a delay of 1 is always 0.1s.
- Native pixel movement has been implemented. The following major changes have been made:
- All movables have a bounding box (bound_x/y/width/height) and can be positioned with the new step_x/y vars. By default, all atoms still use the old tile system.
- Movables have a step_size var that says how fast they move. The step and walk procs have been updated to take a speed argument as well, but default to the mover's step_size.
- A new var, locs, says which turfs a movable is actually covering with its bounding box. If a turf is in a movable's locs, that movable is also in the turf's contents.
- The Move() proc now takes two new arguments, the target step_x and step_y. A move can now "slide" or "jump", and if it slides then it can succeed even after a Bump(). A slide returns the number of pixels moved if successful; jumps return 1 if successful.
- Within Move(), the Enter() and Exit() procs (and family) can all be called for multiple turfs now.
- A new family of procs has been added to cover cases of movables trying to overlap each other. They are Cross(), Uncross(), Crossed(), and Uncrossed(). They are similar to Enter(), Exit(), Entered(), and Exited().
- turf.Enter() no longer pays any attention to items in its contents that do not cover the entire tile. Items that cover the whole tile still count, so old games will work the same.
- Bump() will only swap two mobs in the same group if neither one of them uses pixel movement. If either one uses pixel movement, Cross() will allow them to overlap instead.
- New procs have been added to ease the use of working with bounding boxes: bounds(), obounds(), and bounds_dist().
- Gliding has been deprecated. It only occurs now when atoms do not use pixel movement and move by full tile increments.
- world.fps has been added as a convenient shortcut for world.tick_lag. They both act on the same internal value. world.fps rounds to the nearest whole number.
- The Shift, Ctrl, and Alt keys can now be used independently as macros. +Up macros for these keys will work as well, but key-repeat macros will not.
489 Release Notes | View All