Difference between revisions of "SCI/TODO"

From ScummVM :: Wiki
< SCI
Jump to navigation Jump to search
Line 1: Line 1:
The following list is taken from Max's mails to -devel:
The following list is taken from Max's mails to -devel:
* Replace all uses of gint8, etc. by our native types, to get rid of the typedefs we use right now.
* Replace all uses of gint8, etc. by our native types, to get rid of the typedefs we use right now.
* check for places that use char or unsigned char for boolean values, and change those to use enum types whose value names express the intention (SearchOptions.RECURSIVE, GraphicsScaleOptions.2X, etc)
* check for places that use char or unsigned char for boolean values, and change those to bool. Even nicer would be to change it to use enum types whose value names express the intention (SearchOptions.RECURSIVE, GraphicsScaleOptions.2X, etc), but just going for bool will already be a big improvement.
* more formatting fixes: The SCI code puts return values on separate lines all over the place, e.g.
* more formatting fixes: The SCI code puts return values on separate lines all over the place, e.g.


Line 11: Line 11:
Take care of that and other formatting issues.
Take care of that and other formatting issues.


* change names of structs and how they are declare, e.g.
<syntax type="C++">
  typedef struct script_opcode_ {
      unsigned opcode;
      int arg1, arg2, arg3;
      int pos, size;
  } script_opcode;
</syntax>
->
<syntax type="C++">
  struct ScriptOpcode {
      unsigned opcode;
      int arg1, arg2, arg3;
      int pos, size;
  };
</syntax>
* Fixing all warnings
* change #define lists into enums
* change #define lists into enums
* Rearranging the files under engines/sci: I.e. get rid of include/ subdir (just move its contents to engines/sci, at some point at least)
* Rearranging the files under engines/sci: I.e. get rid of include/ subdir (just move its contents to engines/sci, at some point at least)
* Converting stuff from "C pseudo classes" to real classes
* Converting stuff from "C pseudo classes" to real classes
* Replacing various generic FreeSCI stuff by their ScummVM counterparts. E.g. don't bother to rewrite engines/sci/include/int_hashmap.h -- instead change code to use a HashMap<int, ...> etc.
* Replacing various generic FreeSCI stuff by their ScummVM counterparts.  
* Replace sci_gettime and sci_get_current_time by OSystem::getTimeAndDate and OSystem::getMillis
* Replace sci_gettime and sci_get_current_time by OSystem::getTimeAndDate and OSystem::getMillis
# You first need to find out which is used where: Des the code try to determine the current time? Use getTimeAndDate(). Does it try to measure something, regulate timing? Using getMillis. It is possible that some code actually really wants to get a higher resolution than milli seconds, in that case get back to us and let's discuss what to do.
# You first need to find out which is used where: Des the code try to determine the current time? Use getTimeAndDate(). Does it try to measure something, regulate timing? Using getMillis. It is possible that some code actually really wants to get a higher resolution than milli seconds, in that case get back to us and let's discuss what to do.

Revision as of 01:59, 24 February 2009

The following list is taken from Max's mails to -devel:

  • Replace all uses of gint8, etc. by our native types, to get rid of the typedefs we use right now.
  • check for places that use char or unsigned char for boolean values, and change those to bool. Even nicer would be to change it to use enum types whose value names express the intention (SearchOptions.RECURSIVE, GraphicsScaleOptions.2X, etc), but just going for bool will already be a big improvement.
  • more formatting fixes: The SCI code puts return values on separate lines all over the place, e.g.

<syntax type="C++">

 int
 _vocab_cmp_words(const void *word1, const void *word2) {

</syntax>

Take care of that and other formatting issues.

  • change #define lists into enums
  • Rearranging the files under engines/sci: I.e. get rid of include/ subdir (just move its contents to engines/sci, at some point at least)
  • Converting stuff from "C pseudo classes" to real classes
  • Replacing various generic FreeSCI stuff by their ScummVM counterparts.
  • Replace sci_gettime and sci_get_current_time by OSystem::getTimeAndDate and OSystem::getMillis
  1. You first need to find out which is used where: Des the code try to determine the current time? Use getTimeAndDate(). Does it try to measure something, regulate timing? Using getMillis. It is possible that some code actually really wants to get a higher resolution than milli seconds, in that case get back to us and let's discuss what to do.
  • Not specific to SCI, but: Replace "struct tm" in common/system.h (and places that implement/use it) by a custom struct, which would be a (partial) clone of struct tm, something like Common::OSystem::Time. That way, we wouldn't have to use <time.h> anymore anywhere.
  • Get rid of sci_sched_yield: This is used for two things:
  1. gfx/resource/sci_pic_0.cpp -> used here to make sure pic rendering doesn't starve the sound-playing thread(s), resulting in music/sound skipping
  2. ./sfx/mixer/soft.cpp to implement ACQUIRE_LOCK -> replace ACQUIRE_LOCK and RELEASE_LOCK by using our mutex API. (And on the long run, replace the SCI mixer by our mixer :-)
  • In fact: Do use File, SearchManager, FSNode etc. instead of paths, fopen, etc.
  • Don't use fstat
  • const correctness in engines/sci/engine/savegame.c (this is a generated file, so change the source or generator, whatever is necessary)
  • change the many nice existing function documentation comments to use doxygen syntax
  • Turn code into templates in following files (now they generate code via #defines):
    • gfx/gfx_pixmap_scale.cpp
    • gfx/gfx_line.cpp
    • gfx/gfx_crossblit.cpp
    • gfx/resource/sci_picfill.cpp
    • gfx/resource/sci_picfill_aux.cpp
  • Check old FreeSCI-scummvm branch / repos by Jordi for change that could be salvaged, e.g. the files sfx/device/scumm-midi.cpp and sfx/softseq/scumm-adlib.cpp, or the modifications to the SCI debugger to use the ScummVM console, and stuff.
  • Replace the SCI sound mixer by Audio::Mixer
  • I just made a big commit where I started to overhaul the file handling in SCI. It's incomplete, and may cause regressions, but it is a start. The biggest chunk left to take care of is engine/kfile.cpp, and in there mostly reading/writing from/to other files than regular savegames. This needs to be switched to the savefile API.
  • make the SCI tools compilable (to avoid bitrot, while we change code that they depend on), and finally usable again.