{"id":17,"date":"2011-09-11T16:31:51","date_gmt":"2011-09-11T16:31:51","guid":{"rendered":"https:\/\/blogs.scummvm.org\/littleboy\/?p=17"},"modified":"2022-05-24T16:33:17","modified_gmt":"2022-05-24T16:33:17","slug":"ring-engine-status-update-september-2011","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/littleboy\/2011\/09\/11\/ring-engine-status-update-september-2011\/","title":{"rendered":"Ring engine status update (September 2011)"},"content":{"rendered":"<p>Since the first commit at the end of January 2011, the <a href=\"https:\/\/github.com\/Littleboy\/scummvm\/tree\/ring\" target=\"_blank\" rel=\"noopener\">ring engine<\/a> has come a long way. Most of the shared engine code for Ring and Faust has been implemented, along with the whole logic for Ring and a sizable chunk of logic for Faust.<\/p>\n<p>The main game view (the 360\u00b0 view) is not yet implemented, but there is enough display code present to show the game menu in Ring (as well as several submenus). As you can see in the screenshot, there is some image corruption present, due to problems with the image decompression.<\/p>\n<p><a href=\"https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/ScummVM-The-Ring.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-19\" src=\"https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/ScummVM-The-Ring.png\" alt=\"\" width=\"686\" height=\"549\" srcset=\"https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/ScummVM-The-Ring.png 686w, https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/ScummVM-The-Ring-300x240.png 300w\" sizes=\"auto, (max-width: 686px) 100vw, 686px\" \/><\/a>And that brings us to the compression algorithms used by the engine: one thing is clear, the original developers loved coming up with new compression types (I\u2019m thinking there was a bet on how many such algorithms they could fit in a single engine). BMP, TGA, WAV (compressed as a whole or streamed), CNM (movies), AQC (360\u00b0 view data) each use a different variation of the algorithm (with a large amount of duplicated code of course of course, it wouldn\u2019t be fun otherwise!).<\/p>\n<p>And for the next games in the series, they decided to share a single compression format for all images in archives. So in addition to the old compression formats from Ring, Faust introduces a new format, also used for movies\u2026<\/p>\n<p><a href=\"https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/standards.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-20\" src=\"https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/standards.png\" alt=\"\" width=\"500\" height=\"283\" srcset=\"https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/standards.png 500w, https:\/\/blogs.scummvm.org\/littleboy\/wp-content\/uploads\/sites\/25\/2011\/09\/standards-300x170.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>The new compression code also uses floating point, which makes it quite a bit harder to reverse-engineer. And since most images are inside archives, Faust and the following games are not displaying anything yet.<\/p>\n<p>I\u2019m currently working on implementing the new set of \u201cwidgets\u201d used by Pompei and Jerusalem. It includes a dialog selection widget (mostly done) and a hyperlinked encyclopedia (only started reverse-engineering in IDA).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Since the first commit at the end of January 2011, the ring engine has come a long way. Most of the shared engine code for Ring and Faust has been implemented, along with the whole logic for Ring and a sizable chunk of logic for Faust. The main game view (the 360\u00b0 view) is not [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":2,"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":21,"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/posts\/17\/revisions\/21"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/littleboy\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}