Difference between revisions of "Advanced Engine Features"

Jump to navigation Jump to search
→‎Enhanced load/save support: Reaplace <source> with <syntaxhighlight>
(→‎Enhanced debug/error messages: Split implementation notes to be clearer)
(→‎Enhanced load/save support: Reaplace <source> with <syntaxhighlight>)
(39 intermediate revisions by 6 users not shown)
Line 1: Line 1:
In the following, some of the more advanced features a ScummVM Engine may implement are described. We describe what advantage each feature gives to the engine author respectively to engine users, and sketch how to implement support for it. Features are roughly grouped and sorted by mutual dependency.
In the following, some of the more advanced features a ScummVM Engine may implement are described. We describe what advantage each feature gives to the engine author respectively to engine users, and sketch how to implement support for it.<br>Features are roughly grouped and sorted by mutual dependency.


==Enhanced user interaction==
==Enhanced user interaction==
Line 18: Line 18:


'''Relevant Engine API'''
'''Relevant Engine API'''
<syntax type="C++">
<syntaxhighlight lang="cpp">
virtual void pauseEngineIntern(bool pause);
virtual void pauseEngineIntern(bool pause);
void pauseEngine(bool pause);
void pauseEngine(bool pause);
bool isPaused() const;
bool isPaused() const;
</syntax>
</syntaxhighlight>


'''Already implemented by:'''
'''Implemented by:'''
[[AGOS]], [[Draci]], [[Gob]], [[Kyra]], [[Lure]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sword2]], [[Toon]]
[[AGOS]], [[Draci]], [[Gob]], [[Kyra]], [[Lure]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sword2]], [[Toon]], [[ZVision]]


'''Not implemented by:'''
'''Not implemented by:'''
[[AGI]], [[Cine]], [[CruisE]], [[Drascula]], [[Groovie]], [[Hugo]], [[Lastexpress]], [[MADE]], [[Queen]], [[Sky]], [[Sword1]], [[Sword25]], [[Tinsel]], [[Touche]], [[Tucker]]
[[AGI]], [[Avalanche]], [[CGE]], [[Cine]], [[Composer]], [[CruisE]], [[Drascula]], [[Dreamweb]], [[Fullpipe]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Lastexpress]], [[MADE]], [[Neverhood]], [[Queen]], [[Sky]], [[Sword1]], [[Sword25]], [[Tinsel]], [[Toltecs]], [[Tony]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]]


'''Support not necessary:'''  
'''Support not necessary:'''  
Line 41: Line 41:


'''Relevant Engine API'''
'''Relevant Engine API'''
<syntax type="C++"> void quitGame();
<syntaxhighlight lang="cpp">
void quitGame();
bool shouldQuit() const;
bool shouldQuit() const;


kSupportsRTL feature flag</syntax>
kSupportsRTL feature flag
</syntaxhighlight>


'''Already implemented by:'''
'''Implemented by:'''
[[AGI]], [[AGOS]], [[Cine]], [[CruisE]], [[Draci]], [[Drascula]], [[Gob]], [[Groovie]], [[Hugo]], [[Kyra]], [[Lastexpress]], [[Lure]], [[MADE]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[TeenAgent]], [[Toon]], [[Touche]], [[Tucker]]
[[AGI]], [[AGOS]], [[CGE]], [[Cine]], [[Composer]], [[CruisE]], [[Draci]], [[Drascula]], [[Gob]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Lastexpress]], [[Lure]], [[MADE]], [[Mohawk]], [[Mortevielle]], [[Neverhood]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[TeenAgent]], [[Toltecs]], [[Tony]], [[Toon]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]


'''Not implemented by:'''
'''Not implemented by:''' [[Avalanche]], [[Dreamweb]], [[Fullpipe]], [[Tinsel]]
[[Tinsel]]


===Global options dialog support===
===Global options dialog support===
Line 60: Line 61:


'''Relevant Engine API'''
'''Relevant Engine API'''
<syntax type="C++"> virtual void syncSoundSettings();</syntax>
<syntaxhighlight lang="cpp">
virtual void syncSoundSettings();
</syntaxhighlight>


'''Already implemented by:'''
'''Implemented by:'''
[[AGOS]], [[CruisE]], [[Draci]], [[Gob]], [[Groovie]], [[Hugo]], [[Kyra]], [[Lure]], [[MADE]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sword1]], [[Sword2]], [[Touche]], [[Tucker]]
[[AGOS]], [[Cine]], [[CruisE]], [[Draci]], [[Gob]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Lastexpress]], [[Lure]], [[MADE]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[Toltecs]], [[Tony]], [[Touche]], [[TsAGE]], [[ZVision]]


'''Not implemented by:'''
'''Not implemented by:'''
[[Cine]], [[Drascula]], [[Lastexpress]], [[Mohawk]], [[Parallaction]], [[Pegasus]], [[Sky]], [[Sword25]]
[[Avalanche]], [[CGE]], [[Composer]], [[Drascula]], [[Dreamweb]], [[Fullpipe]], [[Mohawk]], [[Neverhood]], [[Parallaction]], [[Pegasus]], [[Sword25]], [[Tucker]], [[Wintermute]]


'''Support not necessary:''' [[AGI]], [[Mortevielle]], [[TeenAgent]], [[Tinsel]], [[Toon]]
'''Support not necessary:''' [[AGI]], [[Mortevielle]], [[TeenAgent]], [[Tinsel]], [[Toon]]
Line 83: Line 86:
None.
None.


'''Already implemented by:'''
'''Implemented by:'''
''not applicable''
''not applicable''


Line 98: Line 101:
'''What is this about?'''<br>
'''What is this about?'''<br>
With this feature, it is possible to build a list of available save slots for a given game target. This can be used by the user to list all saveslots from the command line, as the following example illustrates:
With this feature, it is possible to build a list of available save slots for a given game target. This can be used by the user to list all saveslots from the command line, as the following example illustrates:
<syntax type="Bash">$ ./scummvm --list-saves=monkey2
<syntaxhighlight lang="bash">
$ ./scummvm --list-saves=monkey2
Saves for target 'monkey2':
Saves for target 'monkey2':
   Slot Description                                           
   Slot Description                                           
Line 105: Line 109:
   1    Start
   1    Start
   2    Quicksave 2
   2    Quicksave 2
$</syntax>
$
</syntaxhighlight>
Furthermore, this is used by the load/save dialogs in the Launcher and the GMM to build the list of savestates they show visually to the user.
Furthermore, this is used by the load/save dialogs in the Launcher and the GMM to build the list of savestates they show visually to the user.


Line 118: Line 123:


'''Relevant MetaEngine API'''
'''Relevant MetaEngine API'''
<syntax type="C++"> virtual SaveStateList listSaves(const char *target) const;
<syntaxhighlight lang="cpp">
virtual SaveStateList listSaves(const char *target) const;
virtual int getMaximumSaveSlot() const;
virtual int getMaximumSaveSlot() const;


kSupportsListSaves feature flag</syntax>
kSupportsListSaves feature flag
</syntaxhighlight>


'''Already implemented by:'''
'''Implemented by:'''
[[AGI]], [[AGOS]], [[Cine]], [[Draci]], [[Groovie]], [[Hugo]], [[Kyra]], [[Lure]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[TeenAgent]], [[Tinsel]], [[Toon]], [[Touche]], [[Tucker]]
[[AGI]], [[AGOS]], [[Avalanche]], [[CGE]], [[Cine]], [[CruisE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Lure]], [[Mohawk]], [[Mortevielle]], [[Neverhood]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[Tinsel]], [[Toltecs]], [[Tony]], [[Toon]], [[Touche]], [[Tucker]], [[Wintermute]], [[ZVision]]


'''Not implemented by:'''
'''Not implemented by:'''
[[CruisE]], [[Drascula]], [[Gob]], [[Lastexpress]], [[MADE]]
[[Composer]], [[Fullpipe]], [[Gob]], [[Lastexpress]], [[MADE]], [[TeenAgent]], [[TsAGE]]


===Loading savestates via command line or Launcher===
===Loading savestates via command line or Launcher===
Line 137: Line 144:


'''Relevant MetaEngine API'''
'''Relevant MetaEngine API'''
<syntax type="C++"> save_slot ConfigMan setting
<syntaxhighlight lang="cpp">
save_slot ConfigMan setting


kSupportsLoadingDuringStartup feature flag</syntax>
kSupportsLoadingDuringStartup feature flag
</syntaxhighlight>


'''Already implemented by:'''
'''Implemented by:'''
[[AGI]], [[Cine]], [[Draci]], [[Groovie]], [[Hugo]], [[Kyra]], [[Lure]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[TeenAgent]], [[Tinsel]], [[Toon]], [[Touche]]
[[AGI]], [[Avalanche]], [[Cine]], [[CGE]], [[CruisE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Lure]], [[Mohawk]], [[Mortevielle]], [[Neverhood]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[TeenAgent]], [[Tinsel]], [[Toltecs]], [[Tony]], [[Toon]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]


'''Not implemented by:'''
'''Not implemented by:'''
[[AGOS]], [[CruisE]], [[Drascula]], [[Gob]], [[Lastexpress]], [[MADE]], [[Sword25]], [[Tucker]]
[[AGOS]], [[Composer]], [[Fullpipe]], [[Gob]], [[Lastexpress]], [[MADE]], [[Parallaction]], [[Sword25]]


===Deleting savestates via the Launcher and GMM===
===Deleting savestates via the Launcher and GMM===
Line 158: Line 167:


'''Relevant MetaEngine API'''
'''Relevant MetaEngine API'''
<syntax type="C++"> void removeSaveState(const char *target, int slot) const;
<syntaxhighlight lang="cpp">
void removeSaveState(const char *target, int slot) const;


kSupportsDeleteSave feature flag</syntax>
kSupportsDeleteSave feature flag
</syntaxhighlight>


'''Already implemented by:'''
'''Implemented by:'''
[[AGI]], [[Cine]], [[Draci]], [[Groovie]], [[Hugo]], [[Kyra]], [[Lure]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword2]], [[TeenAgent]], [[Tinsel]], [[Toon]], [[Touche]], [[Tucker]]
[[AGI]], [[Avalanche]], [[Cine]], [[CGE]], [[CruisE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Lure]], [[Mohawk]], [[Neverhood]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[TeenAgent]], [[Tinsel]], [[Toltecs]], [[Tony]], [[Toon]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]


'''Not implemented by:'''
'''Not implemented by:'''
[[AGOS]], [[CruisE]], [[Drascula]], [[Gob]], [[Lastexpress]], [[MADE]], [[Sword1]], [[Sword25]]
[[AGOS]], [[Composer]], [[Fullpipe]], [[Gob]], [[Lastexpress]], [[MADE]], [[Mortevielle]], [[Sword25]]


===Savestate metadata support===
===Savestate metadata support===
Line 178: Line 189:


'''Relevant MetaEngine API'''
'''Relevant MetaEngine API'''
<syntax type="C++"> virtual SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
<syntaxhighlight lang="cpp">
virtual SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;


kSavesSupportMetaInfo feature flag
kSavesSupportMetaInfo feature flag
kSavesSupportThumbnail feature flag
kSavesSupportThumbnail feature flag
kSavesSupportCreationDate feature flag
kSavesSupportCreationDate feature flag
kSavesSupportPlayTime feature flag</syntax>
kSavesSupportPlayTime feature flag
</syntaxhighlight>


'''Already implemented by:'''
'''Implemented by:'''
[[AGI]], [[Draci]], [[Hugo]], [[Kyra]], [[Mortevielle]], [[SAGA]], [[SCI]], [[SCUMM]], [[TeenAgent]], [[Toon]]
[[AGI]], [[Avalanche]], [[CGE]], [[CruisE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Mortevielle]], [[Neverhood]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sword1]], [[TeenAgent]], [[Toltecs]], [[Tony]], [[Toon]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]


'''Not implemented by:'''
'''Not implemented by:'''
[[AGOS]], [[Cine]], [[CruisE]], [[Drascula]], [[Gob]], [[Groovie]], [[Lastexpress]], [[Lure]], [[Mohawk]], [[MADE]], [[Parallaction]], [[Pegasus]], [[Queen]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[Touche]], [[Tinsel]], [[Tucker]]
[[AGOS]], [[Cine]], [[Composer]], [[Fullpipe]], [[Gob]], [[Lastexpress]], [[Lure]], [[Mohawk]], [[MADE]], [[Parallaction]], [[Pegasus]], [[Queen]], [[Sky]], [[Sword2]], [[Sword25]], [[Touche]], [[Tinsel]]


===Loading/Saving during run time===
===Loading/Saving during run time===
Line 204: Line 217:


'''Relevant Engine API'''
'''Relevant Engine API'''
<syntax type="C++"> virtual Common::Error loadGameState(int slot);
<syntaxhighlight lang="cpp">
virtual Common::Error loadGameState(int slot);
virtual bool canLoadGameStateCurrently();
virtual bool canLoadGameStateCurrently();
kSupportsLoadingDuringRuntime feature flag
</syntaxhighlight>
:'''Implemented by:''' [[AGI]], [[Avalanche]], [[Cine]], [[CGE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Mohawk]], [[Mortevielle]], [[Neverhood]], [[Pegasus]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[TeenAgent]], [[Tinsel]], [[Toltecs]], [[Tony]], [[Toon]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]
:'''Not implemented by:''' [[AGOS]], [[Composer]], [[CruisE]], [[Fullpipe]], [[Gob]], [[Groovie]], [[Lastexpress]], [[Lure]], [[MADE]], [[Parallaction]], [[Queen]], [[Sword2]], [[Sword25]]
<syntaxhighlight lang="cpp">
virtual Common::Error saveGameState(int slot, const Common::String &desc);
virtual Common::Error saveGameState(int slot, const Common::String &desc);
virtual bool canSaveGameStateCurrently();
virtual bool canSaveGameStateCurrently();


kSupportsLoadingDuringRuntime feature flag
kSupportsSavingDuringRuntime feature flag
kSupportsSavingDuringRuntime feature flag</syntax>
</syntaxhighlight>


'''Already implemented by:'''
:'''Implemented by:''' [[AGI]], [[Avalanche]], [[Cine]], [[CGE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Mohawk]], [[Mortevielle]], [[Neverhood]], [[Pegasus]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[TeenAgent]], [[Toltecs]], [[Tony]], [[Toon]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]
[[AGI]], [[Cine]], [[Draci]], [[Hugo]], [[Kyra]], [[Mohawk]], [[Mortevielle]], [[Pegasus]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Tinsel]] (loading only), [[TeenAgent]], [[Toon]], [[Touche]], [[Tucker]]


'''Not implemented by:'''
:'''Not implemented by:''' [[AGOS]], [[Composer]], [[CruisE]], [[Fullpipe]], [[Gob]], [[Groovie]], [[Lastexpress]], [[Lure]], [[MADE]], [[Parallaction]], [[Queen]], [[Sword2]], [[Sword25]], [[Tinsel]]
[[AGOS]], [[CruisE]], [[Drascula]], [[Gob]], [[Groovie]], [[Lastexpress]], [[Lure]], [[MADE]], [[Parallaction]], [[Queen]], [[Sword2]], [[Sword25]], [[Touche]], [[Tinsel]] (saving)


==Misc==
==Misc==
Line 230: Line 251:


'''Relevant Engine API'''
'''Relevant Engine API'''
<syntax type="C++"> virtual void errorString(const char *buf_input, char *buf_output, int buf_output_size);</syntax>
<syntaxhighlight lang="cpp">
virtual void errorString(const char *buf_input, char *buf_output, int buf_output_size);
</syntaxhighlight>


:'''Already implemented by:''' [[SCUMM]]
:'''Implemented by:''' [[SCUMM]]


:'''Not implemented by:''' [[AGI]], [[AGOS]], [[Cine]], [[CruisE]], [[Draci]], [[Drascula]], [[Gob]], [[Groovie]], [[Hugo]], [[Kyra]], [[Lastexpress]], [[Lure]], [[MADE]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[TeenAgent]], [[Tinsel]], [[Toon]], [[Touche]], [[Tucker]]
:'''Not implemented by:''' [[AGI]], [[AGOS]], [[Avalanche]], [[Cine]], [[CGE]], [[Composer]], [[CruisE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Fullpipe]], [[Gob]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Lastexpress]], [[Lure]], [[MADE]], [[Mohawk]], [[Mortevielle]], [[Neverhood]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[TeenAgent]], [[Tinsel]], [[Toltecs]], [[Tony]], [[Toon]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]


<syntax type="C++"> virtual GUI::Debugger *getDebugger();</syntax>
<syntaxhighlight lang="cpp">
    virtual GUI::Debugger *getDebugger();
</syntaxhighlight>


:'''Already implemented by:''' [[AGI]], [[AGOS]], [[Cine]], [[CruisE]], [[Draci]], [[Gob]], [[Groovie]], [[Hugo]], [[Kyra]], [[Lastexpress]], [[Lure]], [[MADE]], [[Mohawk]], [[Mortevielle]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[Toon]], [[Touche]], [[Tucker]]
:'''Implemented by:''' [[AGI]], [[AGOS]], [[Avalanche]], [[Cine]], [[CGE]], [[Composer]], [[CruisE]], [[Draci]], [[Drascula]], [[Dreamweb]], [[Fullpipe]], [[Gob]], [[Groovie]], [[Hopkins]], [[Hugo]], [[Kyra]], [[Lastexpress]], [[Lure]], [[MADE]], [[Mohawk]], [[Mortevielle]], [[Neverhood]], [[Parallaction]], [[Pegasus]], [[Queen]], [[SAGA]], [[SCI]], [[SCUMM]], [[Sky]], [[Sword1]], [[Sword2]], [[Sword25]], [[TeenAgent]], [[Tinsel]], [[Toltecs]], [[Toon]], [[Tony]], [[Touche]], [[TsAGE]], [[Tucker]], [[Wintermute]], [[ZVision]]


:'''Not implemented by:''' [[Drascula]], [[TeenAgent]], [[Tinsel]]
:'''Not implemented by:'''
TrustedUser
2,147

edits

Navigation menu