{"id":368,"date":"2025-04-10T04:01:46","date_gmt":"2025-04-10T04:01:46","guid":{"rendered":"https:\/\/projects.etc.cmu.edu\/expression\/?p=368"},"modified":"2025-04-30T16:17:14","modified_gmt":"2025-04-30T16:17:14","slug":"week-12-soft-opening","status":"publish","type":"post","link":"https:\/\/projects.etc.cmu.edu\/expression\/week-12-soft-opening\/","title":{"rendered":"Week 12: Soft Opening"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Narrative &amp; Design: Affection System and Endings<\/strong><\/h2>\n\n\n\n<p>Last week, we drafted the <strong>affection point system<\/strong> along with the <strong>courtroom dialogue<\/strong>. While the overall structure is now in place, many of the dialogue branches and choice options still need polishing and expansion.<\/p>\n\n\n\n<p>In designing the affection system, we wanted to align it with the game&#8217;s core message. On one hand, we don\u2019t want to encourage players to blindly side with one extreme; on the other, we don\u2019t want them to over-strategize by artificially balancing points just to min-max. Ideally, reaching the best ending should not feel overly difficult\u2014but it should reward players who understand each character\u2019s emotional logic and pacing.<\/p>\n\n\n\n<p>Originally, we planned five endings. Each character has a total of 20 affection points.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Endings 1\u20133 are \u201cbad endings.\u201d\n<ul class=\"wp-block-list\">\n<li>If one character\u2019s affection >14, and there\u2019s a difference of \u22658 points between them and the others, the player gets that character\u2019s ending.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Ending 4 is the \u201ctrue ending,\u201d where affection points of all three characters are above 12, and the difference between them is &lt;5.<\/li>\n\n\n\n<li>Ending 5 is a \u201cfalse unity,\u201d where affection scores are balanced (difference &lt;5) but none are above 12.<\/li>\n<\/ul>\n\n\n\n<p>However, we realized that Poli, by design, needed special treatment. The court event is largely driven by conflict between Lawrence and Norma, while Poli is positioned as a neutral figure. Initially, we wondered whether Poli even needed a unique ending. Statistically, she has just as many scoring opportunities as the other two, though her gains tend to be moderate and scattered\u2014making it hard to reach the affection threshold organically.<\/p>\n\n\n\n<p>Rather than cut her route, we chose to merge Poli&#8217;s path with the neutral ending: if the player fails to reach the True Ending but Poli&#8217;s affection is still >14, then the player gets Poli\u2019s individual ending. This reinforces our intent to reward thoughtful engagement without encouraging passive neutrality or \u201cplaying it safe.\u201d<\/p>\n\n\n\n<p>After finalizing the endings and court dialogue, we discovered another issue:<br>What if a player consistently sides with Norma, but picks Lawrence in the final choice? Would that create a mismatch between <strong>narrative intent<\/strong> and <strong>affection point logic<\/strong>?<\/p>\n\n\n\n<p>We discussed this and decided that endings should ultimately be determined by affection points, as this is still a \u201cdating sim\u201d at its core. However, the in-court verdict (i.e., whether to invite the controversial speaker back) would reflect the final choice and be thematically explained in the ending. For example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you choose Lawrence and his affection is highest \u2192 Speaker is conditionally re-invited; Ending 1.<\/li>\n\n\n\n<li>If you choose Lawrence but Norma\u2019s affection is higher \u2192 Speaker is not re-invited; still Ending 1.<\/li>\n\n\n\n<li>If no character meets the individual threshold, the court decision is based on whether Norma or Lawrence has higher affection.<\/li>\n<\/ul>\n\n\n\n<p>All affection calculations and dialogue outcomes are now finalized. A chart of the theoretical outcome probabilities is included here:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"653\" src=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/output-1024x653.png\" alt=\"\" class=\"wp-image-369\" srcset=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/output-1024x653.png 1024w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/output-300x191.png 300w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/output-768x490.png 768w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/output-1536x980.png 1536w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/output-2048x1307.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><br>Further testing will confirm whether these distributions feel satisfying in practice.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>UI &amp; Interaction<\/strong><\/h2>\n\n\n\n<p>Jiwon implemented several meaningful updates to improve the player experience.<\/p>\n\n\n\n<p>First, in the Day 1 afternoon character event, the previous build used avatars on the map to signal invitations\u2014but this wasn\u2019t clear, and players didn\u2019t realize they could only choose one. This week, Jiwon designed a text-message invitation interface, which replaces the old map interaction and directly conveys the player\u2019s choice limit.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"820\" src=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/messageui.png\" alt=\"\" class=\"wp-image-370\" srcset=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/messageui.png 910w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/messageui-300x270.png 300w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/messageui-768x692.png 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"1024\" src=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/forumui-1-414x1024.png\" alt=\"\" class=\"wp-image-372\" style=\"width:203px;height:auto\" srcset=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/forumui-1-414x1024.png 414w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/forumui-1-121x300.png 121w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/forumui-1.png 439w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>She also refined the map interaction UI, combining location names and clickable buttons to reduce visual confusion. Additionally, she worked with Moe to update the forum section of the in-game phone, helping with layout and presentation. Anticipating players who explore before story events unlock, she also added locks to certain phone features, guiding player progression more clearly.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Art &amp; Cutscenes<\/strong><\/h2>\n\n\n\n<p>Lutong completed the background for the courtroom scene, while Enn revised inconsistencies in the character sprites\u2014most notably, adding a fencing outfit for Lawrence to match new narrative elements. Some additional sprites are still needed for the latest story beats, which we\u2019ll add post-Soft.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/Assembly_room-1024x576.jpg\" alt=\"\" class=\"wp-image-373\" srcset=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/Assembly_room-1024x576.jpg 1024w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/Assembly_room-300x169.jpg 300w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/Assembly_room-768x432.jpg 768w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/Assembly_room-1536x864.jpg 1536w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/Assembly_room-2048x1152.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Moe and Enn also teamed up to create a cutscene intro for the court event, and sketched out five unique ending CGs. These are currently minimal but functional; we plan to add detail or additional frames based on post-Soft priorities.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" data-id=\"376\" src=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8332-1024x1024.png\" alt=\"\" class=\"wp-image-376\" srcset=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8332-1024x1024.png 1024w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8332-300x300.png 300w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8332-150x150.png 150w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8332-768x768.png 768w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8332.png 1034w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" data-id=\"377\" src=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8333-1024x1024.png\" alt=\"\" class=\"wp-image-377\" srcset=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8333-1024x1024.png 1024w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8333-300x300.png 300w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8333-150x150.png 150w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8333-768x768.png 768w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8333.png 1034w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" data-id=\"375\" src=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8331-1024x1024.png\" alt=\"\" class=\"wp-image-375\" srcset=\"https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8331-1024x1024.png 1024w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8331-300x300.png 300w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8331-150x150.png 150w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8331-768x768.png 768w, https:\/\/projects.etc.cmu.edu\/expression\/wp-content\/uploads\/2025\/04\/IMG_8331.png 1034w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Sound<\/strong><\/h2>\n\n\n\n<p>We finally gave sound the attention it deserves. Our early builds only had two short BGM loops\u2014one upbeat for daytime scenes, and one mellow for dorm interiors. However, feedback pointed out tonal mismatches\u2014like how the bright morning music didn\u2019t suit the tension of the Heckler\u2019s Veto scene.<\/p>\n\n\n\n<p>This week, we added several ambient and scene-specific tracks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Background audio for the Veto protest,<\/li>\n\n\n\n<li>Soft scoring for the character meetups,<\/li>\n\n\n\n<li>New music for the courtroom,<\/li>\n\n\n\n<li>Ending BGMs.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Programming<\/strong><\/h2>\n\n\n\n<p>Once again, Jack powered through an intense week. The narrative flow in Day 2 includes significantly more conditional logic than Day 1.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Midway through the day, the character with the highest affection will send a message thanking the player, giving a sense of feedback and progression.<\/li>\n\n\n\n<li>The ending sequence itself includes complex branching\u2014from affection checks to final-choice consequences, sprite handling, background placement, music, and UI transitions.<\/li>\n<\/ul>\n\n\n\n<p>Jack also worked with Jiwon to polish several interaction flows. One of the most valuable features completed this week was the skip dialogue button. It might seem minor, but skipping through already-seen content dramatically improves replayability and pacing, especially for a text-heavy game. We&#8217;re relieved this made it in before Soft.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Soft Build &amp; Final Sprint<\/strong><\/h2>\n\n\n\n<p>This week marks the creation of our first complete build. While it\u2019s not fully polished, all key systems are in place. Due to time constraints, there\u2019s limited room for testing or perfecting small details\u2014but we believe the strong research foundation laid earlier in the semester gave us the clarity to build with confidence.<\/p>\n\n\n\n<p>Next week, we officially begin the final polish sprint:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cleaning up and coloring cutscenes<\/li>\n\n\n\n<li>Refining character sprites and background art<\/li>\n\n\n\n<li>Proofreading and fine-tuning dialogue<\/li>\n\n\n\n<li>Adding final SFX and transitions<\/li>\n\n\n\n<li>Reworking the title screen<\/li>\n\n\n\n<li>Composing more background music<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s the last stretch. Let\u2019s make it shine. \ud83d\udcab<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Narrative &amp; Design: Affection System and Endings Last week, we drafted the affection point system along with the courtroom dialogue. While the overall structure is now in place, many of the dialogue branches and choice options still need polishing and expansion. In designing the affection system, we wanted to align it with the game&#8217;s core [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":416,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-368","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/posts\/368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/comments?post=368"}],"version-history":[{"count":1,"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/posts\/368\/revisions"}],"predecessor-version":[{"id":378,"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/posts\/368\/revisions\/378"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/media\/416"}],"wp:attachment":[{"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/media?parent=368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/categories?post=368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/expression\/wp-json\/wp\/v2\/tags?post=368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}