{"id":21,"date":"2023-01-25T14:02:17","date_gmt":"2023-01-25T14:02:17","guid":{"rendered":"https:\/\/retrofitproductions.com\/?p=21"},"modified":"2023-01-27T15:00:03","modified_gmt":"2023-01-27T15:00:03","slug":"c64-hunchback-remaster-part-2","status":"publish","type":"post","link":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/","title":{"rendered":"C64 Hunchback \u2013 Remaster Part 2"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Design Overview<\/strong><\/h2>\n\n\n\n<p>I wanted to start with a basic overview of the game design, so using the reversed engineered code for <a href=\"http:\/\/www.ajordison.co.uk\/\">CBM Prg Studio<\/a> as mentioned in <a href=\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-1\/\">part 1<\/a>, the basic flow of the game is as follows:<\/p>\n\n\n\n<ul>\n<li>Initialise (Entry point $1000)<\/li>\n\n\n\n<li>Menu_DisplayTitleScreen<\/li>\n\n\n\n<li>Menu_DisplayHiScores<\/li>\n\n\n\n<li>Menu_DemoMode\n<ul>\n<li>If &#8216;F1&#8217; pressed\n<ul>\n<li>Menu_DisplayTitleScreen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If &#8216;Space&#8217; pressed\n<ul>\n<li>Menu_SelectControls<\/li>\n\n\n\n<li>Level_InitialiseGame<\/li>\n\n\n\n<li>Level_GetReady<\/li>\n\n\n\n<li>Level_GameLoop<\/li>\n\n\n\n<li>If level complete\n<ul>\n<li>Level_Complete<\/li>\n\n\n\n<li>Level_GetReady<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If princess rescued\n<ul>\n<li>Quasi_RescueEsmerelda<\/li>\n\n\n\n<li>Level_GetReady (Game continues)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If life lost\n<ul>\n<li>Level_LifeLost<\/li>\n\n\n\n<li>If lives remaining\n<ul>\n<li>Level_GetReady<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Else\n<ul>\n<li>Player_GameOver<\/li>\n\n\n\n<li>Player_EnterHiScoreName (if hi-score)<\/li>\n\n\n\n<li>Menu_DisplayTitleScreen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>For the key presses in the title screen and demo mode, it sets up a simple IRQ:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        sei\n        lda #&lt;IRQ_MenuOptionSelect\n        sta sysIntVectorLo\n        lda #&gt;IRQ_MenuOptionSelect\n        sta sysIntVectorHi\n        cli<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>IRQ_MenuOptionSelect\n        lda sysKeyPress\n        cmp #KEY_F1\n        beq .DisplayInstructionsSelected\n        cmp #KEY_SPACE\n        beq .StartGameSelected\n\n        jmp krnINTERRUPT\n.DisplayInstructionsSelected\n        jmp Menu_DisplayInstructions\n.StartGameSelected\n        jmp Menu_SelectControls<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Level Builder<\/strong><\/h4>\n\n\n\n<p>The levels are derived from a list of bits which define the type of level and the type of obstacles on the level:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;-------------------------------------------------------------------------------\n; LEVEL DATA\n;\n; Level Types:\n; $01 = Knight Pit\n; $02 = Empty Pit\n; $04 = Row of Bells\n; $08 = Rope Pit\n; $10 = Esmerelda's Tower\n; $20 = Wall\n;\n; Obstacle Types:\n; $01 = Rope\n; $02 = Hi Fireball R-L\n; $04 = Lo Fireball L-R\n; $08 = Lo Fireball R-L\n; $10 = Double Arrow HiLo R-L\n; $20 = Double Arrow HiLo L-R\n; $40 = Double Fireball Lo L+R\n; $80 = Double Arrow HiLo L+r\n;-------------------------------------------------------------------------------\ntbl_LevelType           byte $20, $28, $22, $21, $21, $22, $28, $21\n                        byte $21, $2c, $22, $22, $21, $21, $2c, $31\n                        byte $21, $21, $2c, $28, $22, $21, $21, $22\n                        byte $21, $22, $21, $2c, $22, $28, $21, $31\n                        byte $21, $22, 208, $21, $21, $21, $21, $2c\n                        byte $2c, $22, $21, $22, $28, $2c, $21, $31\n\ntbl_LevelObstacleType   byte $08, $01, $00, $00, $02, $04, $01, $08\n                        byte $10, $08, $20, $40, $20, $40, $80, $40\n                        byte $20, $10, $08, $01, $20, $20, $40, $40\n                        byte $20, $20, $40, $80, $40, $01, $40, $40\n                        byte $20, $40, $01, $10, $20, $08, $10, $08\n                        byte $80, $20, $10, $40, $01, $80, $40, $40<\/code><\/pre>\n\n\n\n<p>So for level 01 (index 0), tbl_LevelType will be $20 (Wall) and tbl_LevelObstacleType = $08 (Lo Fireball R-L)<\/p>\n\n\n\n<p>These bits can be combined, so level 02 for instance is $28, so has a Wall ($20) and a Rope Pit ($08).<\/p>\n\n\n\n<p>When building the level it has a list of Lo-Hi pointers to the drawing routine for the relevant Level Types:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;-------------------------------------------------------------------------------\n; CHARACTER BLOCK &amp; COLOUR DATA\n;-------------------------------------------------------------------------------\ntbl_LevelCharBlockLo    byte &lt;Screen_BuildKnights, &lt;Screen_BuildPits, &lt;Screen_BuildRowOfBells\n                        byte &lt;Screen_BuildRopePit, &lt;Screen_BuildEsmereldaTower, &lt;Screen_BuildWall\n\ntbl_LevelCharBlockHi    byte &gt;Screen_BuildKnights, &gt;Screen_BuildPits, &gt;Screen_BuildRowOfBells\n                        byte &gt;Screen_BuildRopePit, &gt;Screen_BuildEsmereldaTower, &gt;Screen_BuildWall<\/code><\/pre>\n\n\n\n<p>The screen builder will get the tbl_levelType for the current level and setup the zero page pointers to call the correct screen drawing routine, very nice:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        lda tbl_LevelCharBlockLo,Y\n        sta zpLow\n        lda tbl_LevelCharBlockHi,Y\n        sta zpHigh\n        jmp (zpLow)\n<\/code><\/pre>\n\n\n\n<p>For most levels it builds the Wall first and has char block drawing routines to replace certain parts of the screen e.g. the pits (some empty, some with knights), and these blocks are defined in memory and once the rows (ldy), height (ldx) and char pointers have been setup, the block drawing routine is called.<\/p>\n\n\n\n<p>For example to draw an empty pit (note wall is already drawn):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        ldx #4\n        ldy #3\n        lda #20\n        stx charRows\n        sty charWidth\n        sta colourOffset\n        ldx #&lt;tbl_EmptyPitChars\n        ldy #&gt;tbl_EmptyPitChars\n        lda #&lt;scn_TemporaryScreen+$0199\n        sta zpScnPtrLo\n        lda #&gt;scn_TemporaryScreen+$0199\n        sta zpScnPtrHi\n        jsr Screen_DrawCharBlocks<\/code><\/pre>\n\n\n\n<p> It uses a temporary off screen memory buffer to build the screen, as this eliminates any flicker and also used when scrolling the intro.  It actually builds the screen as it goes, so the intro builds level 15, shows it, builds the next level (9), scrolls it and so on:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;-------------------------------------------------------------------------------<br>; SELECT SCREENS TO SHOW DURING INTRO SEQUENCE<br>;-------------------------------------------------------------------------------<br>Screen_IntroScrollSelect<br>ldx #9<br>stx currentLevel<br>jsr Screen_BuildScreen<br>jsr Screen_IntroScroll<br>ldx #8<br>stx currentLevel<br>jsr Screen_BuildScreen<br>jsr Screen_IntroScroll<br>ldx #0<br>stx currentLevel<br>jsr Screen_BuildScreen<br>jsr Screen_IntroScroll<br>rts<\/code><\/pre>\n\n\n\n<p>This screenshot below from the debugger shows the off-screen buffer of the next screen to be scrolled, ignore the colours as these can&#8217;t be buffered:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"540\" src=\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/debug1-995x1024.jpg?resize=525%2C540&#038;ssl=1\" alt=\"\" class=\"wp-image-41\" srcset=\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/debug1.jpg?resize=995%2C1024&amp;ssl=1 995w, https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/debug1.jpg?resize=292%2C300&amp;ssl=1 292w, https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/debug1.jpg?resize=768%2C790&amp;ssl=1 768w, https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/debug1.jpg?w=1182&amp;ssl=1 1182w, https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/debug1.jpg?w=1050 1050w\" sizes=\"(max-width: 525px) 100vw, 525px\" data-recalc-dims=\"1\" \/><figcaption class=\"wp-element-caption\">Off-screen buffer at $8400<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Scrolling<\/h4>\n\n\n\n<p>As I mentioned earlier the scrolling is jerky and that&#8217;s because it scrolls at 1 character at a time, then feeds the next column from the off-screen buffer, and not to be confused with double buffer scrolling, we get onto that later.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Sprites<\/h4>\n\n\n\n<p>Nothing exciting to mention here, Quasi is sprite 0 and the other sprites are used for the obstacles like arrows, fireballs and even the rope.  The animated rope is made up of two sprites across 16 frames (8 swinging left, 8 right) so a large chunk, but done quite well I think.  Only on the Esmeralda level are all 8 sprites used.<\/p>\n\n\n\n<p>Quasi is a little blocky and I&#8217;ve seen in others games where they have used two sprites to create a hi-res outline and a multi-colour body, so would like to attempt this in another chapter.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Collision<\/h4>\n\n\n\n<p>The collision detection makes use of the hardware collision registers, so if a sprite-sprite collision occurs it checks the relevant bits to see if Quasi was involved and generally that means he dies.<\/p>\n\n\n\n<p>For sprite-character collision it varies between level types, but checks if a collision has occurred and because the character objects are static can quite easily cross-reference the x position of Quasi to see what he has collided with.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Enemies<\/h4>\n\n\n\n<p>The enemies are defined by the obstacle type for each level, and at the start of each level loads the relevant sprites into place.  The &#8216;Enemy_Select&#8217; routine decides which type of objects need to be updated per frame, like moving an arrow, and made quite flexible by using the tbl_LevelObstacleType table, so different levels can reuse a type of enemy\/obstacle.<\/p>\n\n\n\n<p>A simple IRQ runs to update the enemies:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;-------------------------------------------------------------------------------\n; IRQ TO UPDATE ENEMY AND OBSTACLES DURING GAME\n;-------------------------------------------------------------------------------\nIRQ_EnemyUpdate\n        jsr Enemy_Select\n        jsr Level_DisplayHeart\n        jsr Enemy_MoveKnight\n        jsr Level_UpdateRope\n        jmp krnINTERRUPT<\/code><\/pre>\n\n\n\n<p>That&#8217;s a very high level view of the game and shows the dynamic drawing mechanism of displaying the levels which I think was very clever back in 1983, it could have quite easily handled hundreds of different levels using this technique, but I imagine other games must have used this approach.<\/p>\n\n\n\n<p>Now the basics are out of the way, let&#8217;s move on to making some changes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In part 2 we delve into the game design and level builder<\/p>\n","protected":false},"author":1,"featured_media":13,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,2],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C64 Hunchback \u2013 Remaster Part 2 - Retrofit Productions<\/title>\n<meta name=\"description\" content=\"C64 Hunchback remastered with an attempt to add smooth scrolling and some other subtle changes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C64 Hunchback \u2013 Remaster Part 2 - Retrofit Productions\" \/>\n<meta property=\"og:description\" content=\"C64 Hunchback remastered with an attempt to add smooth scrolling and some other subtle changes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Retrofit Productions\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-25T14:02:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-27T15:00:03+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"175\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"alanobee71\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"alanobee71\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/\"},\"author\":{\"name\":\"alanobee71\",\"@id\":\"https:\/\/retrofitproductions.com\/#\/schema\/person\/ca2b7d199f9a9305bd4537e4ca06d77d\"},\"headline\":\"C64 Hunchback \u2013 Remaster Part 2\",\"datePublished\":\"2023-01-25T14:02:17+00:00\",\"dateModified\":\"2023-01-27T15:00:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/\"},\"wordCount\":712,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/retrofitproductions.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1\",\"articleSection\":[\"c64\",\"c64hunch\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/\",\"url\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/\",\"name\":\"C64 Hunchback \u2013 Remaster Part 2 - Retrofit Productions\",\"isPartOf\":{\"@id\":\"https:\/\/retrofitproductions.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1\",\"datePublished\":\"2023-01-25T14:02:17+00:00\",\"dateModified\":\"2023-01-27T15:00:03+00:00\",\"description\":\"C64 Hunchback remastered with an attempt to add smooth scrolling and some other subtle changes.\",\"breadcrumb\":{\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1\",\"width\":400,\"height\":175},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/retrofitproductions.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C64 Hunchback \u2013 Remaster Part 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/retrofitproductions.com\/#website\",\"url\":\"https:\/\/retrofitproductions.com\/\",\"name\":\"Retrofit Productions\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/retrofitproductions.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/retrofitproductions.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/retrofitproductions.com\/#organization\",\"name\":\"Retrofit Productions\",\"url\":\"https:\/\/retrofitproductions.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/retrofitproductions.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/cropped-logo-xlarge.png?fit=2000%2C331&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/cropped-logo-xlarge.png?fit=2000%2C331&ssl=1\",\"width\":2000,\"height\":331,\"caption\":\"Retrofit Productions\"},\"image\":{\"@id\":\"https:\/\/retrofitproductions.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/retrofitproductions.com\/#\/schema\/person\/ca2b7d199f9a9305bd4537e4ca06d77d\",\"name\":\"alanobee71\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/retrofitproductions.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4057a9e1e6237aad2289c20a96c88de7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4057a9e1e6237aad2289c20a96c88de7?s=96&d=mm&r=g\",\"caption\":\"alanobee71\"},\"sameAs\":[\"http:\/\/retrofitproductions.com\"],\"url\":\"https:\/\/retrofitproductions.com\/index.php\/author\/alanobee71\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C64 Hunchback \u2013 Remaster Part 2 - Retrofit Productions","description":"C64 Hunchback remastered with an attempt to add smooth scrolling and some other subtle changes.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/","og_locale":"en_GB","og_type":"article","og_title":"C64 Hunchback \u2013 Remaster Part 2 - Retrofit Productions","og_description":"C64 Hunchback remastered with an attempt to add smooth scrolling and some other subtle changes.","og_url":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/","og_site_name":"Retrofit Productions","article_published_time":"2023-01-25T14:02:17+00:00","article_modified_time":"2023-01-27T15:00:03+00:00","og_image":[{"width":400,"height":175,"url":"http:\/\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png","type":"image\/png"}],"author":"alanobee71","twitter_card":"summary_large_image","twitter_misc":{"Written by":"alanobee71","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#article","isPartOf":{"@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/"},"author":{"name":"alanobee71","@id":"https:\/\/retrofitproductions.com\/#\/schema\/person\/ca2b7d199f9a9305bd4537e4ca06d77d"},"headline":"C64 Hunchback \u2013 Remaster Part 2","datePublished":"2023-01-25T14:02:17+00:00","dateModified":"2023-01-27T15:00:03+00:00","mainEntityOfPage":{"@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/"},"wordCount":712,"commentCount":0,"publisher":{"@id":"https:\/\/retrofitproductions.com\/#organization"},"image":{"@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1","articleSection":["c64","c64hunch"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/","url":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/","name":"C64 Hunchback \u2013 Remaster Part 2 - Retrofit Productions","isPartOf":{"@id":"https:\/\/retrofitproductions.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage"},"image":{"@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1","datePublished":"2023-01-25T14:02:17+00:00","dateModified":"2023-01-27T15:00:03+00:00","description":"C64 Hunchback remastered with an attempt to add smooth scrolling and some other subtle changes.","breadcrumb":{"@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#primaryimage","url":"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1","contentUrl":"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1","width":400,"height":175},{"@type":"BreadcrumbList","@id":"https:\/\/retrofitproductions.com\/index.php\/2023\/01\/25\/c64-hunchback-remaster-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/retrofitproductions.com\/"},{"@type":"ListItem","position":2,"name":"C64 Hunchback \u2013 Remaster Part 2"}]},{"@type":"WebSite","@id":"https:\/\/retrofitproductions.com\/#website","url":"https:\/\/retrofitproductions.com\/","name":"Retrofit Productions","description":"","publisher":{"@id":"https:\/\/retrofitproductions.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/retrofitproductions.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/retrofitproductions.com\/#organization","name":"Retrofit Productions","url":"https:\/\/retrofitproductions.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/retrofitproductions.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/cropped-logo-xlarge.png?fit=2000%2C331&ssl=1","contentUrl":"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/cropped-logo-xlarge.png?fit=2000%2C331&ssl=1","width":2000,"height":331,"caption":"Retrofit Productions"},"image":{"@id":"https:\/\/retrofitproductions.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/retrofitproductions.com\/#\/schema\/person\/ca2b7d199f9a9305bd4537e4ca06d77d","name":"alanobee71","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/retrofitproductions.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4057a9e1e6237aad2289c20a96c88de7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4057a9e1e6237aad2289c20a96c88de7?s=96&d=mm&r=g","caption":"alanobee71"},"sameAs":["http:\/\/retrofitproductions.com"],"url":"https:\/\/retrofitproductions.com\/index.php\/author\/alanobee71\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/retrofitproductions.com\/wp-content\/uploads\/2023\/01\/hunch.png?fit=400%2C175&ssl=1","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/posts\/21"}],"collection":[{"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":28,"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":78,"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/posts\/21\/revisions\/78"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/media\/13"}],"wp:attachment":[{"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/retrofitproductions.com\/index.php\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}