- General:
- Fixed login spinner not spinning
- Fixed wrong page showing when selecting your name on character leaderboards
- Fixed leaderboards not loading after searching in a tome
- Fixed interacting with score sheet when main menu is open
- Fixed some score sheet elements rendering above main menu
- Fixed slow downs after saving or loading state multiple times
- Editor:
- Fixed colour picker rendering behind other UI
- Fixed clicking other UI through colour picker
- Fixed dust/spike brush flickering with vsync off
- Fixed dust/spike brush size changing when zooming in and out with space
- Fixed menus not updating when changing script trigger/enemy type
- Fixed not being able to reselect end flags
- Fixed editor UI fading when a textbox has focus
- Fixed entities added in
on_level_start
not being removed when restarting or entering edit mode on the first frame - Fixed drawing an off-screen quad deleting the last quad that was drawn
- Prop scale displayed in bottom left while holding Ctrl + Alt
- Added sublayer tooltips when hovering sublayer numbers
- Moving end flags
- Deathzones and checkpoints are now selectable with the selection tool
- Increased editor trigger list height
- Script enemies can be selected with the trigger tool
- Colour inputs accept hex shorthand (
RGB
=>RRGGBB
) - Colour picker to change fog colour for all sublayers. (Shift to update all layers)
- Tools:
- Fixed camera paths not drawn when Show Camera is on
- Fixed submitting multiple replays with frame advance level end key
- Debug zoom disabled while the dustmod menu is open
- Multiple save states
- 0-9 to load, Alt + 0-9 to save
- Save/load modifier + Mouse wheel to change save set for up to 100 save slots
- It's possible to rebind the save and load modifiers in the tools menu
- Save and load shortcuts operate on the last used slot
- Added "Show AI" tool option
- Visualises various aspects of enemy AI, such line of sight.
- AI paths now use this option instead of "Show Hitboxes"
- Debug drag camera - When frame advance is on
- Use Right mouse to move, and Middle click to reset
- Added custom key bindings for most Dustmod options
- Notifications when saving/loading state, debug zoom or speed changes, or toggling tools
- Checkpoint and proxy end flag areas shown when "Show Hitbox" is on
- Hit box colour options in Tools/Colour
- Added separate show super hitbox option
- Tool symbol displayed when "don't send" or "don't validate" replays is on
- The Dustmod menu is accessible while any debug tool is on
- Settings (excluding mods and plugins) are not stored with save states anymore
- Improved iteration order rendering - AI and hitboxes are prefixed, and rendered at different offsets to help avoid overlap
- Skill combo shown in debug data
- Allow using frame advance takeover during nexus script playback
- Debug data frame counter incremented in nexus
- Script API:
class editor_api {
bool hide_panels_gui();
void hide_panels_gui(bool hide);
bool hide_toolbar_gui();
void hide_toolbar_gui(bool hide);
bool hide_layers_gui();
void hide_layers_gui(bool hide);
/* Returns the selected trigger. */
entity@ get_selected_trigger();
/* Returns the selected entity. */
entity@ get_selected_entity();
/* Returns the selected layer. */
int get_selected_layer();
/* Sets the selected layer. */
void set_selected_layer(int layer);
/* Returns true if the given layer is visible. */
bool get_layer_visible(int layer);
/* Sets the visibility of the given layer. */
void set_layer_visible(int layer, bool visible);
/* Returns true if the given layer is locked. */
bool get_layer_locked(int layer);
/* Sets the locked state of the given layer. */
void set_layer_locked(int layer, bool visible);
/* Returns true if the given layer is visible and not locked. */
bool check_layer_filter(int layer);
/* Polls the keyboard for one frame, blocking editor shortcuts such as
* frame advance */
bool poll_keyboard();
/* Force the editor to act as if the mouse is inside of the GUI menu for the
* remainder of the frame */
void force_mouse_in_gui();
}
class scene {
/* Convenience method for get_entitiy_collision_index that tries to return a
* controllable. */
controllable@ get_controllable_collision_index(uint index);
/* Convenience method for get_entitiy_collision_index that tries to return a
* dustman. */
dustman@ get_dustman_collision_index(uint index);
/* Convenience method for get_entitiy_collision_index that tries to return a
* hitbox. */
hitbox@ get_hitbox_collision_index(uint index);
/* Convenience method for get_entitiy_collision_index that tries to
* return a script trigger. */
scripttrigger@ get_scripttrigger_collision_index(uint index);
/* Convenience method for get_entitiy_collision_index that tries to
* return a script enemy. */
scriptenemy@ get_scriptenemy_collision_index(uint index);
}
class user_script {
/* Convenience method for entity_by_id that tries to return a controllable. */
controllable@ controllable_by_id(uint id);
/* Convenience method for entity_by_id that tries to return a dustman. */
dustman@ dustman_by_id(uint id);
/* Convenience method for entity_by_id that tries to return a hitbox. */
hitbox@ hitbox_by_id(uint id);
/* Convenience method for entity_by_id that tries to return a script
* trigger. */
scripttrigger@ scripttrigger_by_id(uint id);
/* Convenience method for entity_by_id that tries to return a script
* enemy. */
scriptenemy@ scriptenemy_by_id(uint id);
/* Get the current microseconds. */
int get_time_us();
}
class entity {
/* Has this entity been removed from the scene. */
bool destroyed();
}