Difference between revisions of "Gob/TODO"

From ScummVM :: Wiki
< Gob
Jump to navigation Jump to search
(map.cpp was converted by joostp)
(the engine now runs on BE systems)
Line 1: Line 1:
 
== Status ==
 
== Status ==
Game is completable. There are occasonal minor graphical glitches. The code is not endian-safe, JoostP is looking into this as time permits.
+
Game is completable. There are occasonal minor graphical glitches.
  
 
== Problematic places ==
 
== Problematic places ==
Line 6: Line 6:
  
 
* data_readData(). Same as above.
 
* data_readData(). Same as above.
 
* int32 *gob_curGobStateVarPtr and all gob_*Ptr variables. They all map directly into data, and have to be fixed.
 
 
* All structs directly mapped to memory that are not trivially replaced (such as 'scen_animations'). Currently use (or should use - this is still WIP) READ_LE_* functions to read most member variables which are known to be in LE format and only read from - NOT written to. Later, when the data is hopefully converted to native format during loading, these READ_LE_* calls should obviously go.
 
  
 
== Bugs ==
 
== Bugs ==
Line 41: Line 37:
  
 
=== video.cpp ===
 
=== video.cpp ===
'''Assignee:''' JoostP is working on these
 
 
* Implement <strike>pDrawSprite</strike>, <strike>pFillRect</strike>, pDrawLine, <strike>pPutPixel</strike>, <strike>pDrawletter</strike>, <strike>pDrawPackedSprite</strike> functions from the VGA driver (lvga.gdr)
 
* Implement <strike>pDrawSprite</strike>, <strike>pFillRect</strike>, pDrawLine, <strike>pPutPixel</strike>, <strike>pDrawletter</strike>, <strike>pDrawPackedSprite</strike> functions from the VGA driver (lvga.gdr)
 
* Add support for other rendering modes (EGA/CGA/Hercules) lega.gdr, l360.gdr, lcga.gdr
 
* Add support for other rendering modes (EGA/CGA/Hercules) lega.gdr, l360.gdr, lcga.gdr

Revision as of 22:48, 11 April 2005

Status

Game is completable. There are occasonal minor graphical glitches.

Problematic places

  • map_loadDataFromAvo() in map.cpp. These are plain calls to memcpy() so all read data is not endian safe and moreover it could read wrong size if sizeof(structure) is used in length calcualtion. All structures should be unwind, i,e, read element by element and FROM_LE_XX wraps applied.
  • data_readData(). Same as above.

Bugs

  • It hangs on "please wait" screen in EGA version when screen is completed or switched by code
  • Keyboard input is buggy as some keypressed get ignored. Particularly noticeable when entering screen code
  • When game calls delay() screen doesn't get redrawn. Noticeable at "please wait" screen and especially cutscenes (try screen #5 FTWKFEN)
  • Demo doesn't handle last screen properly. It hangs instead of printing ordering info

Main and long-term goals

  • Convert it to C++ classes. This should be done on per-file basis and keep in mind that we should make it to resemble original code al little as possible.
  • Endianness fixes

File-specific tasks

gob.cpp

  • Write proper game detection. (MD5-based?)

interp.cpp

  • Since neither VGA nor CD versions have protection screen we may skip it in EGA version too


sound.cpp

  • Has yet to be written from sound.asm
  • Support Red Book audio in CD versions

text.cpp

  • This file should be removed and is not currently required for compilation but we need to inspect which variables does it set and to which values and convert them to our Config Manager. We should support all video outputs and at least PC speaker and Adlib.

util.cpp

  • Get rid of rand() and use RandomSource

video.cpp

  • Implement pDrawSprite, pFillRect, pDrawLine, pPutPixel, pDrawletter, pDrawPackedSprite functions from the VGA driver (lvga.gdr)
  • Add support for other rendering modes (EGA/CGA/Hercules) lega.gdr, l360.gdr, lcga.gdr