Hello everyone.

My name is Emanuele and I’m extremely excited to be a contributor for this year’s GSOC. I first heard about ScummVM on CppCast and when someone mentioned GSOC to me this year it was one of the first organizations I looked at. My project involves porting the HPL1 engine with the goal of making the Penumbra: Overture game available on ScummVM. I’ve never played the game until recently (horror games are generally not my thing), but the task looked interesting on a technical level. The reason I started programming was to get into the game’s industry and trough my journey I’ve found that computer graphics is one of the things that interests me the most. Although I don’t yet have a lot of skills in this area, in the summer of last year I tried to learn OpenGL but I have yet to do anything with it other than some toy projects, and this felt like the perfect opportunity to finally do something cool that I hope can be useful to someone.


  • 13/06 – 27/06: Replace I/O and implement game detection. The first includes file opening and writing (done in multiple places), getting file and directory status and logging. The engine also supports some other system dependent I/O functions that are only supported on some platforms. For the most part these can be removed with little work (eg. OpenBrowserWindow is only used by the game to open the publisher’s website in case of errors).
    The time required to complete this task is going to be spent finding, replacing and patching I/O, and understanding and implementing game detection.
  • 27/06 – 18/07 Replace graphics functionality. This includes:
    • turn CG shaders into GLSL and replace the related shader class
    • replace SDL image loading (supported formats are BMP, LBM, PCX, GIF, JPEG, PNG, TGA, TIFF, but the game assets use JPEG, TGA, GIF, BMP and PNG), and SDL_Surface usage present in the classes SDLBitmap2D, SDLTexture and LowLevelResourcesSDL.
    • replace font loading. The engine supports both TrueType (through SDL_ttf) and FNT but the games only use the latter. This feature is implemented in SDLFontData
    • replace context creation and management. This is found mainly in the LowLevelGraphicsSDL class

    This looks to be the biggest task since it involves a lot of systems.

  • 18/07 – 01/08 Integrate physics and scripting systems. The engine uses the Newton dynamics library for physics and anglescript for scripting which are going to have to be included in the main repository since they are not readily available. The first is wrapped by multiple classes present in the impl folders (*Newton) and needs to be modified for portability. The main problem is that the library uses threading, but it has options to turn it off (here I’m talking about the older version 3.13 of the library, the newest one uses GPU acceleration through vulkan). The scripting library on the other hand is not a problem, it offers some non portable features but these can be turned off, and this looks to be already done by the engine on some platforms.
    Both of the libraries have no other external dependencies. Also, for both some work will be done to remove unused files.
  • 01/08 – 08/08 Replace input and get the game in a working state (without audio). The first is managed by the classes LowLevelInputSDL, KeyboardSDL and MouseSDL which implement and use a simple event queue. The second involves reimplementing the entry points and testing.
  • 08/08 – 22/08 Replace audio systems. The engine currently uses OpenAL through an open source wrapper library developed by the same company that supports loading vorbis data. I have never worked with audio so the time required to complete this task is mostly going to be spent understanding the necessary systems.
  • 29/08 – 05/09 Replace standard library containers. These are used throughout the project and require some care.


In the remaining time before the official start, I will begin to work on the first task, setting up the environment and look into implementing game detection.

Thanks for reading.

Leave a Reply

Your email address will not be published. Required fields are marked *