{"id":407,"date":"2011-01-17T17:24:48","date_gmt":"2011-01-17T16:24:48","guid":{"rendered":"http:\/\/drmccoy.de\/gobsmacked\/?p=407"},"modified":"2011-01-18T04:13:31","modified_gmt":"2011-01-18T03:13:31","slug":"all-beauty-must-end","status":"publish","type":"post","link":"https:\/\/drmccoy.de\/gobsmacked\/?p=407","title":{"rendered":"All Beauty Must End"},"content":{"rendered":"<p>Yesterday, I implemented the last remaining bit Urban Runner needed for 16bit graphics support, making all my <a href=\"?p=16\">dithering exploits<\/a> useless. \ud83d\ude42<!--more--><\/p>\n<p>After ScummVM got 16bit support for <a href=\"http:\/\/code.google.com\/soc\/\">GSoC<\/a> 2009, I chose to wait a bit before adapting the gob engine, since a lot of other code was entangled into the problem, including the CoktelVideo classes and the Indeo3 decoder.<br \/>\nBut then <a href=\"http:\/\/clone2727.blogspot.com\/\">clone2727<\/a> came along and completely revamped the VideoDecoder interface, making it 16bit-ready. So I rewrote the <a href=\"http:\/\/wiki.multimedia.cx\/index.php?title=IMD\">IMD<\/a>\/<a href=\"http:\/\/wiki.multimedia.cx\/index.php?title=VMD\">VMD<\/a> classes to fit that interface accordingly. Next, I rewrote the gob engine drawing functions to support 16bit surfaces as well, and plugged everything together to get Urban Runner&#8217;s Indeo3 VMDs running in 16bit colour mode.<\/p>\n<p>Unfortunately, I then hit a road block. One big thing still missing for a full 16bit Urban Runner experience was still high-color non-Indeo3&#8217;d VMD videos. I tried several approaches, but after the CoktelDecoder rewrite, they either didn&#8217;t work anymore or were dead-ugly. Becoming frustrated quickly, I started several other projects, handled some RL problems, etc., basically stopping working on it completely for several months.<\/p>\n<p>Until yesterday. I found a way to implement the missing pieces, fixed a few smaller issue, and can now lay all that all to rest. So, I officially declare my <a href=\"http:\/\/drmccoy.de\/gobsmacked\/?tag=dithering\">dithering &#8220;series&#8221;<\/a> dead :P.<\/p>\n<p>Now, what&#8217;s next?<br \/>\nFirst of all, the one big problem in Urban Runner, the hotel lock-up, is still present. However, a guy by the handle of <a href=\"http:\/\/sourceforge.net\/users\/sylvaintv\/\">SylvainTV<\/a> took a good look and gave me some valuable hints: The videos are supposed to play &#8220;in the background&#8221;, while the script execution continues. According to him, he hacked in a small proof of concept, and with that, the lock-up is gone. Of course, I need to find the proper way of hooking that into the engine, otherwise I invite all hell of strange bugs :P. I already have a few suspicious I need to check out.<\/p>\n<p>Another glitch that&#8217;s bugging me is how the sprites aren&#8217;t completely correct yet. All sprite data in Urban Runner is in <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/en\/wiki\/YUV\">YUV<\/a> (or YUV840, I guess you&#8217;d call it, since each 4&#215;4 block of Y has one U and V value) and I apparently haven&#8217;t figured the exact format out yet. As you can see in the following screenshot, it looks like one colour channel is a bit offset to the lower right. The original does not feature that glitch, so it&#8217;s obviously my fault. \ud83d\ude1b<\/p>\n<figure id=\"attachment_414\" aria-describedby=\"caption-attachment-414\" style=\"width: 373px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-414 \" style=\"border: 1px solid black;\" title=\"Urban Runner menu, 3x\" src=\"http:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv.png\" alt=\"Urban Runner menu, 3x magnified, showing a colour channel glitch\" width=\"373\" height=\"171\" srcset=\"https:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv.png 373w, https:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv-300x137.png 300w\" sizes=\"(max-width: 373px) 100vw, 373px\" \/><\/a><figcaption id=\"caption-attachment-414\" class=\"wp-caption-text\">Urban Runner menu, 3x magnified<\/figcaption><\/figure>\n<p style=\"text-align: center;\">\n<p>Anyone who might me interested in looking over my code and fiddling a bit with it, please contact me. \ud83d\ude42<\/p>\n<p><strong>UPDATE<\/strong>: Thanks, again, to SylvainTV, the YUV glitch is fixed. \ud83d\ude42<\/p>\n<figure id=\"attachment_428\" aria-describedby=\"caption-attachment-428\" style=\"width: 372px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv_fixed.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-428\" title=\"Urban Runner menu, 3x, fixed\" src=\"http:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv_fixed.png\" alt=\"Urban Runner menu, 3x magnified, showing no colour channel glitch\" width=\"372\" height=\"168\" srcset=\"https:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv_fixed.png 372w, https:\/\/drmccoy.de\/gobsmacked\/wp-content\/uploads\/2011\/01\/urban_menu_yuv_fixed-300x135.png 300w\" sizes=\"(max-width: 372px) 100vw, 372px\" \/><\/a><figcaption id=\"caption-attachment-428\" class=\"wp-caption-text\">Urban Runner menu, 3x magnified, fixed<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Yesterday, I implemented the last remaining bit Urban Runner needed for 16bit graphics support, making all my dithering exploits useless. \ud83d\ude42<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,61,12],"tags":[7,17,4,62,24,37],"_links":{"self":[{"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=\/wp\/v2\/posts\/407"}],"collection":[{"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=407"}],"version-history":[{"count":20,"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=\/wp\/v2\/posts\/407\/revisions"}],"predecessor-version":[{"id":424,"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=\/wp\/v2\/posts\/407\/revisions\/424"}],"wp:attachment":[{"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/drmccoy.de\/gobsmacked\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}