Gracefully exit to Home on fatal error in a game (e.g., DED/resource error)
There are many conditions that can cause plugins to crash. While none of these are actually bugs (but rather may be caused by user error -- e.g. loading definitions with missing data, etc...), the plugin experience an error will cause the entire engine to gracefully exit.
While this behaviour can be expected and is consistent when running the specific plugin from the command line via a launch parameter, it is not a consistent user experience when the user launches the plugin from RingZero, especially now that Snowberry is slated for removal in favor of an entirely native launcher.
Where as the behaviour may have been expected when launching from snowberry (for the same reason as it is when specifying a plugin at launch time), it can be a potential source of confusion or frustration for the user -- especially if they are trying to make an addon work.
I would propose that, in the even of a recoverable plugin error that, should the plugin wish to halt that it should gracefully clean up those resources that it needs to, and then notify the Doomsday platform. Upon notification by the plugin, the platform could then prepare to return the to launcher (RingZero) and also present a bug reporting workflow or dialogue for the user to complete should they believe the error to have been caused by the plugin and not an external item. In cases that the source of the error can be traced to an external item -- such as a WAD or addon package, it could be beneficial to display a formatted list of those items to the user so that they may disable them (if possible).
#4 Updated by skyjake almost 5 years ago
In the wiki there is actually an old proposal about this: http://dengine.net/dew/index.php?title=Reduce_use_of_fatal_errors
#5 Updated by rhargrave almost 5 years ago
That's an interesting proposal and gave me some thoughts.
Perhaps we could have most errors placed in the top-left warning list. If an error recurs constantly, it would be ignored after so many times (in the case of an error caused by the map or resources that occurs every time a sprite advances to the next frame).