Open main menu
Fingolfin
Name Max Horn
Team Member since 2002-04-26
Working on SCUMM Engine, SDL backend,
infrastructure
Personal webpage/BLOG -
Email fingolfin AT scummvm DOT org

I am co-lead developer of ScummVM, together with Ender and Sev. I joined the project in April 2002. During this time I worked on the SCUMM engine, the SDL backend, the OSystem backend interface, the sound mixer, the GUI system, the general infrastructure of ScummVM, and many other things.

TODO

Usability

  • Check for the presence of all required data files in all games; or, as a somewhat less extensive measure, at least do this: For games which were shipped on multiple volumes (floppies, CDs), check for the presence of at least one file per volume.
  • Check for the presence of our external support files like kyra.dat, sky.cpt, etc., and also verify that they are up-to-date. For details, see FR #1520433
  • Add/unify "confirm exit" dialog, globally (see FR #1731025)

Web site

  • Add big (green?) shiny buttons in the middle of the page for (1) Donations and (2) Downloads ?
  • simplify screenshots: use a single screenshot "database" file, and use meaningful names on the screenshots, maybe even organize them in subdirs
  • Show "Release Date" on download page
  • Use AJAX for screenshot display?
  • Use AJAX to improve the downloads page, by only showing the most important ports/downloads by default, and then uncovering the rest upon a click by the user (with gracious fallback if Javascript is disabled).

GUI

  • The options dialog may show a button for configuring the savepath even on systems where it is fixed -> not good. This button should be hidden/removed for these systems
  • Highlight the "default" button in dialogs (e.g. the classic MacOS way, drawing a fat border around it; or by using different coloring; or a combination). This falls under "usability", too.
  • Global Main Menu
    • Allow engines to extend this more freely. E.g. for the SCUMM engine, we would want to add a "Help" button
    • Make it possible to reach the "key remapper" and "virtual keyboard" from the GMM, if available?
    • Sugar on the cake: In addition to the ScummVM logo and version, how about showing the engine name and game title at the top of the GMM?

OSystem

  • get to rid of the evil global gBitFormat!

Sound system

Mixer

  • document the semantics of sound handles and sound ids
  • cleanup the API:
    • get rid of the evil Mixer::setReady hack
    • We could make it possible to change the output sample rate the mixer uses on the fly (this would be a private API, only available to the backend, for backends which can change the output sample rate). This would essentially require changing the Channel::_converter objects
  • Are there backends which could benefit from a 'custom' mixer? If so, what would be required to implement such a thing? Needs talking to porters

Audio CD handling

  • add a "pause" feature to the AudioCDManager (might require us to extend the OSystem CD API, too). Useful to be able to fully pause the currently running engine

SCUMM

  • Once the new SaveFileManager::remove method is there, add a "remove" button to the save/load dialog
  • Work around actor (re)color bugs in Indy3 FM-TOWNS / VGA. See http://home.comcast.net/~ervind/ij3misc.html
  • Might also be nice to use the trick they used in AGI/Sarien to add custom recoloring to costumes at least for the EGA games. E.g. in MM, an actor with blue trousers working on a blue ground looks... stealthy :)

Misc

  • Follow some consistent naming patterns for functions/methods:
    • A method which return an object pointer and expects the calling code to delete the object after use, should be named makeFOO; so for example, FSNode::openForReading() would become FSNode::makeReadStream()
    • A method which is supposed to free/delete/dellocate something should have a consistent name. Maybe freeFOO? deallocFOO? destroyFOO?
  • Remove the 'addDefaultDirectory' calls from runGame in base/main.cpp. Reason: Their presence causes an asymmetry between the "detect a game" and "run a game" use cases, as different files are "seen" in each case. This can lead to subtle bugs, and also causes ugly code duplication in the AdvancedDetector code right now (there to work around asymmetries like this one)
  • add plugin API to fetch a fresh desc string for a given target ?!?
  • completely get rid of #pragma pack for increased portability (what I mean here is not to simply remove it, but rather to change code which relies on structs to be packed to not do so anymore)
  • rename scummsys.h; and/or split it (types.h, defs.h ... ?)
  • Implement a "Main" class, from which backends derive. The "Main" of each backend then would become:
int main() {
	Main *m = new MyCustomMain();
	int retval = MyCustomMain->run();
	delete MyCustomMain;
	return retval;
}

class Main {
	StringMap settings;
	String command;
	String specialDebug;
	
	OSystem *system;
public:
	virtual int run(int argc, const char *argv[]) {
		registerDefaults();
		parseCommandLine(argc, argv);
			// A port w/o command line would simply set settings to a more suitable value
	
		loadConfig();
		PluginManager::instance().loadPlugins();

		system.initBackend();

		system.setWindowCaption(gScummVMFullVersion);
	}

	int registerDefaults()
	int parseCommandLine(int argc, const char *argv[]);
	void loadConfig();
	int processSettings();
	
	int runLauncherDialog();

};

Wish list

ScummVM supports many many games. Not just that, it also supports many variants of each of these games. Unfortunately, often bugs will only occur in one specific variant of a game, so unless you happen to own that particular version, it is very difficult to fix the problem (think of surgery while being blindfolded, with one hand tied behind your back).

In particular, being from Germany, I often only own the german version of a given game. While that is on the one hand useful (we have quite a big user base in Germany, it seems), the drawback is that often I lack an english variant, making it that much harder to work on bugs reported by English users.

Due to all this, here is a list of games resp. game variants that I lack and which might be useful. If you have a spare copy of any of these, feel free to donate it. I am only interested in originals, though, no warez! In addition, I also try from time to time to obtain these games e.g. via Ebay, so make sure to ask me before sending me anything, just in case I bought it in the meantime :-)

  • SCUMM
    • Zak McKracken: FM-TOWNS (OK, I am probably being unrealistic here :-) ), classic (V1) English, any other languages
    • Indiana Jones and the last Crusade: EGA German
    • Loom: FM-TOWNS (see above), EGA German
    • Monkey Island: EGA (*any* language, English or German preferred)
    • Indiana Jones and the Fate of Atlantis: Mac version
    • Sam & Max: German PC
    • The Dig: Mac version
  • Others
    • Any AGI games


Dreams about what we might want to do one way

Redesigning the option dialogs in the GMM and the Launcher.

Reducing the size of the ScummVM executable

Excerpt from a mail on scummvm-devel, 2008-11-12, Subject: "Re: ScummVM binary size comparison"

  We are considering removing the XML parser altogether, and instead
  using an external tool to convert the theme XML (and later, the
  virtual keyboard XML) into a binary format, which would be a lot more
  compact than XML, and even could contain image data. Validation of
  the XML would be done externally,  too (using DTD / XML Scheme /
  RelaxNG). This would probably cut  50-100k from the current code
  size. The binary theme like would have  to be regenerated for new
  releases.

Things that bug me about some of our GUI dialogs

Excerpt from a mail on scummvm-devel, 2008-10-30, Subject: "Re: Fwd: PS2 backend - up & running (almost)"

Launcher options dialog:

  • Audio tab: the "Subtitle speed:" and "Text and Speech:" should IMO be aligned along the ":" with the other two labels.
  • Audio tab: The "Text and Speech" button should be wider, right now it display "ech and Subtit" for me, instead of "Speech and Subtitles" ;). Maybe turn that into "Speech & Subtitles", too, to save two chars
  • Volume tab: Align the three labels along their colon? (probably means setting them to be right aligned)
  • Misc tab: The rendered popup is not wide enough to display the full renderer name. But we could grow it a bit, by moving the label more to the left, that might be sufficient.

Launcher game edit dialog:

  • On the audio tab, if the Override checkbox is *not* active, all items are supposed to be grayed out. The popup button, however, is not.
  • Volume tab: See options dialog

GMM (global main menu), triggered right now via F6 in SCUMM and other games:

  • The "RTL" button is not wide enough to show its complete text -> could make it a lot wider, or shorten text?
  • the options dialog in there has a Speech & Subtitles which is not wide enough (like in the launcher)
  • also in the GMM options dialog, I would consider right-aligning the widget labels.


Nintendo DS backend + common build system

It should be possible to get the Nintendo DS backend to build using our common build system. This way, we could compile it with buildbot, too. And future work on a plugin version would be simplified.

The biggest obstacle right now is that it needs to compile C++ files with at least three different sets of options: 1) For ARM v7 2) For ARM v9, optimized for speed 3) For ARM v9, optimized for size (the default for most files) If the goal is simply to enable test compilation on the buildbot, this is not strictly necessary. But in order to compile actually usable binaries, support for this is mandatory. So we need to come up with a way. One idea: Allow overriding CXXFLAGS for arbitrary files by checking for CXXFLAGS-filename env vars, like "CXXFLAGS-foo/bar.cpp".

There are other issues... to be documented here, or resolved.