{"id":446,"date":"2026-03-09T01:04:30","date_gmt":"2026-03-09T01:04:30","guid":{"rendered":"https:\/\/sites.wsagames.com\/jz15n24\/?p=446"},"modified":"2026-03-09T01:04:30","modified_gmt":"2026-03-09T01:04:30","slug":"mechanic-design-implementation-summary","status":"publish","type":"post","link":"https:\/\/sites.wsagames.com\/jz15n24\/2026\/03\/09\/mechanic-design-implementation-summary\/","title":{"rendered":"Mechanic Design &amp; Implementation Summary"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This post is mainly a mid-stage summary of the mechanic design work and related code implementation I have done so far.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When working on gameplay mechanics and coding, most of my energy usually goes into simply making things work first. Every time I solve a problem, it often feels like finishing a full day of fieldwork\u2014from early morning until late at night\u2014and still needing to write a report afterward. Because of that, many small details never made it into a proper blog post.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To make it clearer what parts I have actually implemented so far, I decided to collect and organize the pieces of work that were previously scattered across different stages of development.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u201cPress E\u201d Interaction System<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implemented the logic for showing \/ hiding the \u201cPress E\u201d prompt when the player enters or leaves a trigger area<\/li>\n\n\n\n<li>Tested the basic interaction flow with NPCs and interactable objects<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Dialogue System (Ink + DialogueManager)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Responsible for importing Ink JSON files into Unity and calling them through the DialogueManager<\/li>\n\n\n\n<li>Debugged the calling order of Continue() to ensure dialogue text appears correctly<\/li>\n\n\n\n<li>Used story.currentChoices to test multiple dialogue choices, and investigated why sometimes only a single option appeared<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Early Design of Reputation \/ Choice Logic<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Drafted the basic reputation design in documentation (for example: which choices affect which characters, and how they might influence different endings). However, due to current scope considerations, these details cannot yet be finalized<\/li>\n\n\n\n<li>Explored whether reputation should be stored as numerical values or flags, and how it should be read and referenced during dialogue<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Item Acquisition Flow (e.g.\uff1a Sierra\u2019s Bracelet)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Designed and partially experimented with different acquisition methods in the design document, such as:\n<ul class=\"wp-block-list\">\n<li>obtaining items from NPCs<\/li>\n\n\n\n<li>opening chests<\/li>\n\n\n\n<li>finding tools before unlocking certain objects<\/li>\n\n\n\n<li>or being guided by a \u201cghost\u201d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>The main considerations here include:\n<ul class=\"wp-block-list\">\n<li>exploration paths<\/li>\n\n\n\n<li>player effort vs reward<\/li>\n\n\n\n<li>whether the design should include backtracking<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Wwise Integration Tests (Audio as Feedback)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implemented a simple AudioTrigger script in Unity to test whether Wwise Events can be triggered properly on in-game objects<\/li>\n\n\n\n<li>Recorded and processed simple UI sounds and looping footstep audio, and solved issues where loops did not connect smoothly<\/li>\n\n\n\n<li>Encountered issues such as Unity failing to detect SoundBanks and UI sounds being overridden by footstep sounds, and attempted to troubleshoot event settings and loading paths<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reputation Manager \u2013 Basic Framework<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Built a simple Reputation Manager system to record key choices made by the player during dialogue<\/li>\n\n\n\n<li>Currently the system can maintain and update reputation values on the Unity side, but integration with Ink is still incomplete.<br>My script is currently unable to properly read custom data attached in Ink (tags \/ extra data), so further research into the Ink API and data transfer methods will be required.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Dialogue Portrait Brightness System (Collaborating with Kevin)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Designed and attempted to implement a portrait brightness adjustment system during dialogue:\n<ul class=\"wp-block-list\">\n<li>the speaking character is highlighted<\/li>\n\n\n\n<li>non-speaking characters are dimmed<br>This helps players quickly identify the current speaker in multi-character conversations.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>I built the initial concept and partial implementation, while Kevin is now continuing with optimization and further development of the system.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Some Typical Bug Cases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Example 1: Dialogue choices exist but are invisible in the UI<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a period of time, when the dialogue reached a choice point, the game would appear to freeze\u2014no new text appeared and no options were visible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The debugging process went roughly like this:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inside DisplayChoices(), I used Debug.Log to print story.currentChoices.Count, and found that the number was correct for example, 3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This meant that Ink had already successfully passed the three choices to Unity, so the issue was not on the Ink side.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Later I discovered that the UI layout of the choices was incorrect. The buttons were actually positioned outside the dialogue panel, so the player could not see or click them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During this process I also learned the importance of switching between game view and scene view while testing UI problems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In other words:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The logic layer was working, but the UI layer was completely invisible \u2192 which meant the player was effectively stuck forever.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After adjusting the UI layout (anchors, alignment, and container size), the choices displayed correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This bug may look stupid, but it illustrates something important:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">sometimes the mechanics and logic are working perfectly, but the problem lies in the presentation layer. If either layer breaks, the player simply experiences it as \u201cthe game is broken.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Example 2: Subsequent dialogue choices fail to appear<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another issue occurred when the player selected the first dialogue choice successfully, the dialogue continued, but the next set of choices never appeared, causing the game to stall again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Through debugging logs I confirmed that:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ink still had remaining dialogue content<\/li>\n\n\n\n<li>But Unity never entered the choice-display logic again<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The bug was eventually fixed at the time, but to be honest, I can no longer remember the exact cause.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It was most likely related to call order or state not being properly reset.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What this bug revealed was:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When I was focused on \u201cjust fixing the problem first\u201d, I failed to document the debugging process in time<\/li>\n\n\n\n<li>Looking back now, I only know where the issue once occurred, but I lack a complete record of how it was solved<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is also why I later felt the need to write a summary like this, to compensate for my past habit of simply fixing an issue and then closing the laptop without documenting the process.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post is mainly a mid-stage summary of the mechanic design work and related code implementation I have done so far. When working on gameplay mechanics and coding, most of my energy usually goes into simply making things work first. Every time I solve a problem, it often feels like finishing a full day of [&hellip;]<\/p>\n","protected":false},"author":61,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[],"class_list":["post-446","post","type-post","status-publish","format-standard","hentry","category-weekly-reflection"],"_links":{"self":[{"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/posts\/446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/users\/61"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/comments?post=446"}],"version-history":[{"count":1,"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/posts\/446\/revisions"}],"predecessor-version":[{"id":447,"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/posts\/446\/revisions\/447"}],"wp:attachment":[{"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/media?parent=446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/categories?post=446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sites.wsagames.com\/jz15n24\/wp-json\/wp\/v2\/tags?post=446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}