Add "faststart" plugin to make DF start faster
In particular, it makes the game's "Loading..." screen animate as quickly as possible, shortening it from around 10 seconds to slightly more than 1 second. A conditional build setting makes it skip the animation as well, making it slightly faster yet. Ideally, this should become part of the Tweak plugin, but we're not building that right now.develop
parent
1ed25cdd72
commit
8d40ca8be6
@ -0,0 +1,18 @@
|
||||
faststart
|
||||
=========
|
||||
|
||||
.. dfhack-tool::
|
||||
:summary: Makes the main menu appear sooner.
|
||||
:tags: interface
|
||||
:no-command:
|
||||
|
||||
This plugin accelerates the initial "Loading..." screen that appears when the
|
||||
game first starts, so you don't have to wait as long before the Main Menu
|
||||
appears and you can start playing.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
::
|
||||
|
||||
enable faststart
|
@ -0,0 +1,69 @@
|
||||
// Fast Startup tweak
|
||||
|
||||
#include "Core.h"
|
||||
#include <Console.h>
|
||||
#include <Export.h>
|
||||
#include <PluginManager.h>
|
||||
#include <MiscUtils.h>
|
||||
#include <VTableInterpose.h>
|
||||
|
||||
#include "df/viewscreen_initial_prepst.h"
|
||||
#include <vector>
|
||||
|
||||
using namespace DFHack;
|
||||
using namespace df::enums;
|
||||
using std::vector;
|
||||
|
||||
// Uncomment this to make the Loading screen as fast as possible
|
||||
// This has the side effect of removing the dwarf face animation
|
||||
// (and briefly making the game become unresponsive)
|
||||
|
||||
//#define REALLY_FAST
|
||||
|
||||
DFHACK_PLUGIN("faststart");
|
||||
DFHACK_PLUGIN_IS_ENABLED(is_enabled);
|
||||
|
||||
struct prep_hook : df::viewscreen_initial_prepst
|
||||
{
|
||||
typedef df::viewscreen_initial_prepst interpose_base;
|
||||
|
||||
DEFINE_VMETHOD_INTERPOSE(void, logic, ())
|
||||
{
|
||||
#ifdef REALLY_FAST
|
||||
while (breakdown_level != interface_breakdown_types::STOPSCREEN)
|
||||
{
|
||||
render_count++;
|
||||
INTERPOSE_NEXT(logic)();
|
||||
}
|
||||
#else
|
||||
render_count = 4;
|
||||
INTERPOSE_NEXT(logic)();
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_VMETHOD_INTERPOSE(prep_hook, logic);
|
||||
|
||||
DFhackCExport command_result plugin_enable(color_ostream &out, bool enable)
|
||||
{
|
||||
if (enable != is_enabled)
|
||||
{
|
||||
if (!INTERPOSE_HOOK(prep_hook, logic).apply(enable))
|
||||
return CR_FAILURE;
|
||||
|
||||
is_enabled = enable;
|
||||
}
|
||||
|
||||
return CR_OK;
|
||||
}
|
||||
|
||||
DFhackCExport command_result plugin_init ( color_ostream &out, vector <PluginCommand> &commands)
|
||||
{
|
||||
return CR_OK;
|
||||
}
|
||||
|
||||
DFhackCExport command_result plugin_shutdown ( color_ostream &out )
|
||||
{
|
||||
INTERPOSE_HOOK(prep_hook, logic).remove();
|
||||
return CR_OK;
|
||||
}
|
Loading…
Reference in New Issue