ScummVM
Todo List
File anim.cpp
Make resource manager class and make load* functions its members
Class Audio::MidiPlayer
Document origin of this class. It is based on code shared by several engines (e.g. DRACI says it copied it from MADE, which took it from SAGE).
Member Audio::MidiPlayer::isPlaying () const
There is a subtle difference between the semantics of this in various subclasses, related to paused music: Namely, should this function return true or false if a MIDI song is currently loaded, but paused? In the base implementation of pause/resume, "false" will be returned (that is, it is not possible to distinguish between nothing being played, and an active but paused MIDI tune). But in several subclasses (e.g. in HUGO), there is a separate _paused variable, which is used to pause playback, and for these, "true" will be returned. And in SAGA, isPlaying is overwritten to return the value of _parser->isPlaying() (which should amount to "true" in the described situation). We really should unify this and clearly define the desired semantics of this method.
Member Audio::MidiPlayer::setVolume (int volume)
This method currently does not do anything if the new volume matches the old volume. But some engines always update the volume (Parallaction, Tinsel, Touche, ...). This is why this method is currently virtual. We really should figure which way to do it, and then make this the default, and make this method non-virtual again.
Member Audio::Mixer::isReady () const =0
get rid of this?
Member Cine::addOverlay (uint16 objIdx, uint16 type)
Why are x, y, width and color left uninitialized?
Member Cine::addPlayerCommandMessage (int16 cmd)
Why are x, y, width and color left uninitialized?
Member Cine::FWRenderer::loadBg16 (const byte *bg, const char *name, unsigned int idx=0)
Combine with OSRenderer's version of loadBg16
Class Cine::FWScript
Rewrite _globalVars initialization
Member Cine::FWScript::o1_break ()
Make sure it works
Member Cine::FWScript::o1_displayBackground ()
Implement this instruction
Member Cine::FWScript::o1_endScript ()
Make sure it works
Member Cine::FWScript::o1_op71 ()
Implement this instruction's Amiga part (PC part already done) In PC versions of Future Wars and Operation Stealth this instruction does nothing else but read the parameters.
Member Cine::FWScript::o1_op72 ()
Implement this instruction's Amiga part (PC part already done) In PC versions of Future Wars and Operation Stealth this instruction does nothing else but read the parameters.
Member Cine::FWScript::o1_op73 ()
Implement this instruction's Amiga part (PC part already done) In PC versions of Future Wars and Operation Stealth this instruction does nothing else but read the parameters.
Member Cine::FWScript::o1_setScreenDimensions ()
Implement this instruction
Member Cine::FWScript::o2_gotoIfDiffNearest ()
The assert may produce false positives and requires testing
Member Cine::FWScript::o2_gotoIfEquNearest ()
The assert may produce false positives and requires testing
Member Cine::FWScript::o2_gotoIfInfEquNearest ()
The assert may produce false positives and requires testing
Member Cine::FWScript::o2_gotoIfInfNearest ()
The assert may produce false positives and requires testing
Member Cine::FWScript::o2_gotoIfSupEquNearest ()
The assert may produce false positives and requires testing
Member Cine::FWScript::o2_gotoIfSupNearest ()
The assert may produce false positives and requires testing
Member Cine::FWScript::o2_isSeqRunning ()
Check whether this opcode's name is backwards (i.e.
Member Cine::FWScript::o2_op81 ()
Implement this instruction
Member Cine::FWScript::o2_op9B ()
Implement this instruction
Member Cine::FWScript::o2_op9C ()
Implement this instruction
Member Cine::FWScript::o2_op9F ()
Implement this instruction
Member Cine::getObjectUnderCursor (uint16 x, uint16 y)
Fix displaced type 1 objects
Member Cine::loadPrc (const char *pPrcName)

Is script size of 0 valid?

Fix script dump code

Member Cine::loadRel (char *pRelName)

Is script size of 0 valid?

Fix script dump code

Member Cine::loadResource (const char *resourceName, int16 idx, int16 frameIndex)
Implement loading of all resource types
Member Cine::loadResourcesFromSave (Common::SeekableReadStream &fHandle, enum CineSaveGameFormat saveGameFormat)
Add Operation Stealth savefile support
Member Cine::OSRenderer::loadBg16 (const byte *bg, const char *name, unsigned int idx=0)
Combine with FWRenderer's version of loadBg16
Member Cine::OSRenderer::renderOverlay (const Common::List< overlay >::iterator &it)
Add handling of type 22 overlays
Member Cine::OSRenderer::savePalette (Common::OutSaveFile &fHandle)
Add support for saving the palette in the 16 color version of Operation Stealth. Possibly combine with FWRenderer's savePalette-method?
Member Cine::purgeGlobalScripts ()
Remove global scripts with script index of -1 (Not script position, but script index!).
Member Cine::purgeObjectScripts ()
Remove object scripts with script index of -1 (Not script position, but script index!).
Member Cine::removeGfxElement (int16 objIdx, int16 param, int16 type)
Check that it works
Member Cine::resetGfxEntityEntry (uint16 objIdx)
Check this function for correctness (Wasn't very easy to reverse engineer so there may be errors)
Member Cine::setupOpcodes ()
replace with script subsystem
Class Common::ConfigManager
Implement the callback based notification system (outlined below) which sends out notifications to interested parties whenever the value of some specific (or any) configuration key changes.
Member Common::ErrorCode
Adjust all error codes to comply with these conventions.
Member Common::EventType
Merge EVENT_LBUTTONDOWN, EVENT_RBUTTONDOWN and EVENT_WHEELDOWN; likewise EVENT_LBUTTONUP, EVENT_RBUTTONUP, EVENT_WHEELUP. To do that, we just have to add a field to the Event which indicates which button was pressed.
Member Common::FSNode::getChild (const String &name) const
If createWriteStream() (or a hypothetical future mkdir() method) is used, this should affect what exists/isDirectory/isReadable/isWritable return for existing nodes. However, this is not the case for many existing FSNode implementations. Either fix those, or document that FSNodes can become 'stale'...
Member Common::FSNode::isDirectory () const
Currently we assume that a node that is not a directory automatically is a file (ignoring things like symlinks or pipes). That might actually be OK... but we could still add an isFile method. Or even replace isDirectory by a getType() method that can return values like kDirNodeType, kFileNodeType, kInvalidNodeType.
Member Common::normalizePath (const String &path, const char sep)
remove double dot components: /foo/baz/../bar -> /foo/bar
Class Common::SeekableReadStream
Get rid of SEEK_SET, SEEK_CUR, or SEEK_END, use our own constants
Class Common::Serializer

Maybe rename this to Synchronizer?

One feature the SCUMM code has but that is missing here: Support for syncing arrays of a given type and fixed size; and also support for when the array size changed between versions. Also, support for 2D-arrays.

Proper error handling!

Member Common::Serializer::syncString (String &str, Version minVersion=0, Version maxVersion=kLastVersion)
Replace this method with a special Syncer class for Common::String
Member Engine::syncSoundSettings ()
find a better name for this
Class Graphics::Font
Maybe move the high-level methods (drawString etc.) to a separate FontRenderer class? That way, we could have different variants... ?
Class MidiDriver
Rename MidiDriver to MusicDriver
Member MidiDriverFlags
Rename MidiDriverFlags to MusicDriverFlags
Member OSystem::addSysArchivesToSearchSet (Common::SearchSet &s, int priority=0)
Come up with a better name. This one sucks.
Namespace Sci
give a concrete list of supported games. Could also list future games, with status for each.
Member Sci::readPMachineInstruction (const byte *src, byte &extOpcode, int16 opparams[4])
How about changing opparams from int16 to int / int32 to preserve unsigned 16bit words as read for Script_Word? In the past, this was irrelevant as only a debug opcode used Script_Word. But with SCI32 we are now using Script_Word for more opcodes. Maybe this is just a mistake and those opcodes should used Script_SWord – but if not then we definitely should change this to int, else we might run into trouble if we encounter high value words. If those exist at all.
Member Sword25::Polygon::crossProduct (const Vertex &v1, const Vertex &v2, const Vertex &v3) const
This method would be better as a method of the BS_Vertex class
Member Tinsel::MemoryAllocFixed (long size)
We really should keep track of the allocated pointers, so that we can discard them later on, when the engine quits.
Member Video::VideoDecoder::setRate (const Common::Rational &rate)
This currently does not implement backwards playback, but will be implemented soon.