{"id":78,"date":"2025-08-11T21:18:15","date_gmt":"2025-08-11T21:18:15","guid":{"rendered":"https:\/\/blogs.scummvm.org\/prime\/?p=78"},"modified":"2025-08-11T21:18:15","modified_gmt":"2025-08-11T21:18:15","slug":"week-10-queen-and-pink-engines","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/prime\/2025\/08\/11\/week-10-queen-and-pink-engines\/","title":{"rendered":"Week 10: Queen and Pink Engines"},"content":{"rendered":"<p data-start=\"194\" data-end=\"397\">This week I worked on adding keymapper support to the <strong data-start=\"270\" data-end=\"279\">Queen<\/strong> and <strong data-start=\"284\" data-end=\"292\">Pink<\/strong> engines. On top of that, I also got my <a href=\"https:\/\/github.com\/scummvm\/scummvm\/pull\/6832\"><strong data-start=\"332\" data-end=\"345\">Neverhood<\/strong><\/a>, <a href=\"https:\/\/github.com\/scummvm\/scummvm\/pull\/6841\"><strong data-start=\"347\" data-end=\"357\">Prince<\/strong><\/a>, and <a href=\"https:\/\/github.com\/scummvm\/scummvm\/pull\/6863\"><strong data-start=\"363\" data-end=\"372\">Queen<\/strong><\/a> keymapper PRs merged.<\/p>\n<hr data-start=\"399\" data-end=\"402\" \/>\n<h3 data-start=\"404\" data-end=\"422\">Queen Engine<\/h3>\n<p data-start=\"423\" data-end=\"709\">The Queen engine was <strong data-start=\"444\" data-end=\"470\">moderately challenging<\/strong>. It came with a good number of keys, but the real twist was the <strong data-start=\"535\" data-end=\"556\">variable keybinds<\/strong> for some actions. these depended on the language of the player\u2019s copy of the game. This was somewhat similar to what I encountered earlier in the Sherlock engine.<\/p>\n<p data-start=\"711\" data-end=\"1043\">Another tricky part was that the <strong data-start=\"740\" data-end=\"767\">keybind selection logic<\/strong> was embedded deep in the engine code. To make it compatible with the keymapper, I had to <strong data-start=\"857\" data-end=\"878\">refactor the code<\/strong> so that the language-based key selection happened in the keymapper section instead. This made it accessible for usage in the keymapper initialization.<\/p>\n<p data-start=\"1045\" data-end=\"1179\">Some sections of the game also needed <strong data-start=\"1070\" data-end=\"1092\">keymapper toggling. <\/strong>those were relatively straightforward to set up.<\/p>\n<hr data-start=\"1181\" data-end=\"1184\" \/>\n<h3 data-start=\"1186\" data-end=\"1203\">Pink Engine<\/h3>\n<p data-start=\"1204\" data-end=\"1321\">Pink, at first glance, seemed <strong data-start=\"1234\" data-end=\"1245\">simpler<\/strong>\u2014fewer than 10 keys in total. But as always, appearances can be deceiving.<\/p>\n<p data-start=\"1323\" data-end=\"1535\">In the game, you can\u2019t move your character freely. Movement only happens when you click an interactable object or character, at which point the character walks to the target and interacts with it automatically.<\/p>\n<p data-start=\"1537\" data-end=\"1664\">The key actions didn\u2019t just trigger standard gameplay\u2014they <strong data-start=\"1604\" data-end=\"1648\">altered this entire interaction sequence<\/strong>. For example:<\/p>\n<ul data-start=\"1665\" data-end=\"1850\">\n<li data-start=\"1665\" data-end=\"1721\">\n<p data-start=\"1667\" data-end=\"1721\">One action <strong data-start=\"1678\" data-end=\"1718\">skips the walking animation entirely<\/strong>.<\/p>\n<\/li>\n<li data-start=\"1722\" data-end=\"1794\">\n<p data-start=\"1724\" data-end=\"1794\">Another lets you walk to the target but <strong data-start=\"1764\" data-end=\"1791\">cancels the interaction<\/strong>.<\/p>\n<\/li>\n<li data-start=\"1795\" data-end=\"1850\">\n<p data-start=\"1797\" data-end=\"1850\">Yet another skips <strong data-start=\"1815\" data-end=\"1823\">both<\/strong> walking and interaction, simply teleporting you there.<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"1852\" data-end=\"2086\">There were also keys that <strong data-start=\"1878\" data-end=\"1943\">modified or skipped the sequence that plays when you interact<\/strong> with a target\u2014like skipping a conversation, skipping part of it, or even <strong data-start=\"2017\" data-end=\"2061\">restarting a dialog from the beginning<\/strong> if you missed something.<\/p>\n<p data-start=\"2088\" data-end=\"2228\">Identifying exactly what each key did was the hardest part here, but once that was figured out, mapping them to the keymapper went smoothly.<\/p>\n<hr data-start=\"2230\" data-end=\"2233\" \/>\n<h3 data-start=\"2235\" data-end=\"2248\">Wrap-Up<\/h3>\n<p data-start=\"2249\" data-end=\"2264\">This week, I:<\/p>\n<ul data-start=\"2265\" data-end=\"2451\">\n<li data-start=\"2265\" data-end=\"2327\">\n<p data-start=\"2267\" data-end=\"2327\">Added <strong data-start=\"2273\" data-end=\"2294\">keymapper support<\/strong> for the Queen and Pink engines<\/p>\n<\/li>\n<li data-start=\"2265\" data-end=\"2327\">\n<p data-start=\"2267\" data-end=\"2327\">Got my <a href=\"https:\/\/github.com\/scummvm\/scummvm\/pull\/6832\"><strong data-start=\"2395\" data-end=\"2408\">Neverhood<\/strong><\/a>, <a href=\"https:\/\/github.com\/scummvm\/scummvm\/pull\/6841\"><strong data-start=\"2410\" data-end=\"2420\">Prince<\/strong><\/a>, and <a href=\"https:\/\/github.com\/scummvm\/scummvm\/pull\/6863\"><strong data-start=\"2426\" data-end=\"2435\">Queen<\/strong><\/a> PRs merged \ud83c\udf89<\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This week I worked on adding keymapper support to the Queen and Pink engines. On top of that, I also got my Neverhood, Prince, and Queen keymapper PRs merged. Queen Engine The Queen engine was moderately challenging. It came with a good number of keys, but the real twist was the variable keybinds for some [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-78","post","type-post","status-publish","format-standard","hentry","category-week-10"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/posts\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":2,"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/posts\/78\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/posts\/78\/revisions\/80"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/media?parent=78"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/categories?post=78"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/prime\/wp-json\/wp\/v2\/tags?post=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}