OpenTasks/Generic/Extend plugin system

From ScummVM :: Wiki
< OpenTasks
Revision as of 19:44, 25 March 2011 by Sev (talk | contribs) (Added new task)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Open Task
Task Name IExtend plugin system
Technical Contact(s) Eugene Sandulenko
Subsystem Generic


ScummVM uses plugins for different engines. Due to binary size constraints some of our ports feature several ScummVM builds supporting only subset of the engines. This leads to situation when supported games are not detected when they're in different build, and inexperienced users have difficult time with understanding which build to use. From the other hand in order to detect game and sometimes for querying GUI options core loads and unloads engines frequently which has impact on performance.

Thus it would be good if our engines could be split in two parts: detection and the engine itself. Then detection part should be compiled in regardless of the engine presence, and the engine part would be dynamically loaded when needed. Majority of our engines are based on AdvancedDetector which narrows down the code which requires enhancement.

Another part of the task deals with scalers. There is a constant demand of having support for more scalers, and we are reluctant with adding them because it would bloat the core size and have problem with hot key conflict. It would be nice if the scalers also have plugin interface and thus we could emerge more of them and give users more freedom of choice.

The Task:

  • Split our engine plugin code into 2 parts: static with all detection code and dynamic with rest of the engine
  • Modify all existing engines to use new interface
  • Create new lightweight plugin interface and use it for all existing scalers

The code should be portable, and it includes our Makefile building system. It should require only minimal if any enhancement of our existing low level dynamic loading backend code.

Required Skills:

  • Good C++ skills.
  • Excellent Makefile skills.