{"id":1,"date":"2022-05-21T06:38:32","date_gmt":"2022-05-21T06:38:32","guid":{"rendered":"https:\/\/blogs.scummvm.org\/grisenti\/?p=1"},"modified":"2022-06-20T07:29:34","modified_gmt":"2022-06-20T07:29:34","slug":"introduction","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/grisenti\/2022\/05\/21\/introduction\/","title":{"rendered":"Introduction"},"content":{"rendered":"<p>Hello everyone.<\/p>\n<p>My name is Emanuele and I\u2019m extremely excited to be a contributor for this year\u2019s 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\u2019ve 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\u2019s industry and trough my journey I\u2019ve found that computer graphics is one of the things that interests me the most. Although I don\u2019t 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.<\/p>\n<h4>Schedule<\/h4>\n<ul>\n<li>13\/06 &#8211; 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. <code>OpenBrowserWindow<\/code> is only used by the game to open the publisher&#8217;s website in case of errors).<br \/>\nThe time required to complete this task is going to be spent finding, replacing and patching I\/O, and understanding and implementing game detection.<\/li>\n<li>27\/06 &#8211; 18\/07 Replace graphics functionality. This includes:\n<ul>\n<li>turn CG shaders into GLSL and replace the related shader class<\/li>\n<li>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 <code>SDL_Surface<\/code> usage present in the classes <code>SDLBitmap2D<\/code>, <code>SDLTexture<\/code> and <code>LowLevelResourcesSDL<\/code>.<\/li>\n<li>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 <code>SDLFontData<\/code><\/li>\n<li>replace context creation and management. This is found mainly in the <code>LowLevelGraphicsSDL<\/code> class<\/li>\n<\/ul>\n<p>This looks to be the biggest task since it involves a lot of systems.<\/li>\n<li>18\/07 &#8211; 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 (<code>*Newton<\/code>) 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&#8217;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.<br \/>\nBoth of the libraries have no other external dependencies. Also, for both some work will be done to remove unused files.<\/li>\n<li>01\/08 &#8211; 08\/08 Replace input and get the game in a working state (without audio). The first is managed by the classes <code>LowLevelInputSDL<\/code>, <code>KeyboardSDL<\/code> and <code>MouseSDL<\/code> which implement and use a simple event queue. The second involves reimplementing the entry points and testing.<\/li>\n<li>08\/08 \u2013 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.<\/li>\n<li>29\/08 \u2013 05\/09 Replace standard library containers. These are used throughout the project and require some care.<\/li>\n<\/ul>\n<h4>Conclusion<\/h4>\n<p>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.<\/p>\n<p>Thanks for reading.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello everyone. My name is Emanuele and I\u2019m extremely excited to be a contributor for this year\u2019s 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 [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/comments?post=1"}],"version-history":[{"count":9,"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":28,"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/posts\/1\/revisions\/28"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/media?parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/categories?post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/grisenti\/wp-json\/wp\/v2\/tags?post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}