{"id":496,"date":"2026-10-29T15:48:32","date_gmt":"2026-10-29T15:48:32","guid":{"rendered":"https:\/\/sites.wsagames.com\/yh9g25\/?page_id=496"},"modified":"2026-10-29T21:36:03","modified_gmt":"2026-10-29T21:36:03","slug":"game-design-05","status":"publish","type":"page","link":"https:\/\/sites.wsagames.com\/yh9g25\/game-design-05\/","title":{"rendered":"Game design 05"},"content":{"rendered":"<nav class=\"has-large-font-size is-responsive items-justified-right wp-block-navigation is-content-justification-right is-layout-flex wp-container-core-navigation-is-layout-0ca25c3d wp-block-navigation-is-layout-flex\" aria-label=\"GD\" \n\t\t data-wp-interactive=\"core\/navigation\" data-wp-context='{\"overlayOpenedBy\":{\"click\":false,\"hover\":false,\"focus\":false},\"type\":\"overlay\",\"roleAttribute\":\"\",\"ariaLabel\":\"Menu\"}'><button aria-haspopup=\"dialog\" aria-label=\"Open menu\" class=\"wp-block-navigation__responsive-container-open\" \n\t\t\t\tdata-wp-on--click=\"actions.openMenuOnClick\"\n\t\t\t\tdata-wp-on--keydown=\"actions.handleMenuKeydown\"\n\t\t\t><svg width=\"24\" height=\"24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 7.5h16v1.5H4z\"><\/path><path d=\"M4 15h16v1.5H4z\"><\/path><\/svg><\/button>\n\t\t\t\t<div class=\"wp-block-navigation__responsive-container\"  id=\"modal-1\" \n\t\t\t\tdata-wp-class--has-modal-open=\"state.isMenuOpen\"\n\t\t\t\tdata-wp-class--is-menu-open=\"state.isMenuOpen\"\n\t\t\t\tdata-wp-watch=\"callbacks.initMenu\"\n\t\t\t\tdata-wp-on--keydown=\"actions.handleMenuKeydown\"\n\t\t\t\tdata-wp-on--focusout=\"actions.handleMenuFocusout\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t>\n\t\t\t\t\t<div class=\"wp-block-navigation__responsive-close\" tabindex=\"-1\">\n\t\t\t\t\t\t<div class=\"wp-block-navigation__responsive-dialog\" \n\t\t\t\tdata-wp-bind--aria-modal=\"state.ariaModal\"\n\t\t\t\tdata-wp-bind--aria-label=\"state.ariaLabel\"\n\t\t\t\tdata-wp-bind--role=\"state.roleAttribute\"\n\t\t\t>\n\t\t\t\t\t\t\t<button aria-label=\"Close menu\" class=\"wp-block-navigation__responsive-container-close\" \n\t\t\t\tdata-wp-on--click=\"actions.closeMenuOnClick\"\n\t\t\t><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m13.06 12 6.47-6.47-1.06-1.06L12 10.94 5.53 4.47 4.47 5.53 10.94 12l-6.47 6.47 1.06 1.06L12 13.06l6.47 6.47 1.06-1.06L13.06 12Z\"><\/path><\/svg><\/button>\n\t\t\t\t\t\t\t<div class=\"wp-block-navigation__responsive-container-content\" \n\t\t\t\tdata-wp-watch=\"callbacks.focusFirstElement\"\n\t\t\t id=\"modal-1-content\">\n\t\t\t\t\t\t\t\t<ul class=\"wp-block-navigation__container has-large-font-size is-responsive items-justified-right wp-block-navigation\"><li data-wp-context=\"{ &quot;submenuOpenedBy&quot;: { &quot;click&quot;: false, &quot;hover&quot;: false, &quot;focus&quot;: false }, &quot;type&quot;: &quot;submenu&quot;, &quot;modal&quot;: null, &quot;previousFocus&quot;: null }\" data-wp-interactive=\"core\/navigation\" data-wp-on--focusout=\"actions.handleMenuFocusout\" data-wp-on--keydown=\"actions.handleMenuKeydown\" data-wp-on--pointerenter=\"actions.openMenuOnHover\" data-wp-on--pointerleave=\"actions.closeMenuOnHover\" data-wp-watch=\"callbacks.initMenu\" tabindex=\"-1\" class=\"wp-block-navigation-item has-child open-on-hover-click wp-block-navigation-submenu has-large-font-size\"><a class=\"wp-block-navigation-item__content\" href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design01\/\"><span class=\"wp-block-navigation-item__label\">Game design<\/span><\/a><button data-wp-bind--aria-expanded=\"state.isSubmenuOpen\" data-wp-on--click=\"actions.toggleMenuOnClick\" aria-label=\"Game design submenu\" class=\"wp-block-navigation__submenu-icon wp-block-navigation-submenu__toggle\" ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M1.50002 4L6.00002 8L10.5 4\" stroke-width=\"1.5\"><\/path><\/svg><\/button><ul data-wp-on--focus=\"actions.openMenuOnFocus\" class=\"wp-block-navigation__submenu-container wp-block-navigation-submenu has-large-font-size\"><li class=\"wp-block-navigation-item wp-block-navigation-link\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design01\/\"><span class=\"wp-block-navigation-item__label\">Game design 01<\/span><\/a><\/li><li class=\"wp-block-navigation-item wp-block-navigation-link\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design02\/\"><span class=\"wp-block-navigation-item__label\">Game design 02<\/span><\/a><\/li><li class=\"wp-block-navigation-item wp-block-navigation-link\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design-03\/\"><span class=\"wp-block-navigation-item__label\">Game design 03<\/span><\/a><\/li><li class=\"wp-block-navigation-item wp-block-navigation-link\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design-04\/\"><span class=\"wp-block-navigation-item__label\">Game design 04<\/span><\/a><\/li><li class=\"wp-block-navigation-item wp-block-navigation-link\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design-05\/\"><span class=\"wp-block-navigation-item__label\">Game design 05<\/span><\/a><\/li><li class=\"wp-block-navigation-item wp-block-navigation-link\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design-06\/\"><span class=\"wp-block-navigation-item__label\">Game design 06<\/span><\/a><\/li><li class=\"wp-block-navigation-item wp-block-navigation-link\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/sites.wsagames.com\/yh9g25\/game-design-07\/\"><span class=\"wp-block-navigation-item__label\">Game design 07<\/span><\/a><\/li><\/ul><\/li><\/ul>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div><\/nav>\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-35f06ea7 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/migao01.itch.io\/game-design\" target=\"_blank\" rel=\"noopener\">click here go to the Prototype webpage<\/a><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<figure class=\"wp-block-pullquote has-xx-large-font-size\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;margin-right:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\"><blockquote><p><strong>Prototype version &#8211; bar0<\/strong>4<\/p><cite>playtest name &#8211; <strong>Bar1860PT04-pc<\/strong><\/cite><\/blockquote><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Game prototype crit<\/h2>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">I attended this week&#8217;s game crit and had the chance to see other students&#8217; game prototypes. It was interesting to see how everyone had different ideas and approaches to game design. I also presented my own game and received some useful feedback and suggestions. These gave me a better idea of what I could improve. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Feedback I get:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/cfd199e6e4c8afac0f0145d0e8a3768c-1.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"649\" src=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/cfd199e6e4c8afac0f0145d0e8a3768c-1-1024x649.png\" alt=\"\" class=\"wp-image-510\" srcset=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/cfd199e6e4c8afac0f0145d0e8a3768c-1-1024x649.png 1024w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/cfd199e6e4c8afac0f0145d0e8a3768c-1-300x190.png 300w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/cfd199e6e4c8afac0f0145d0e8a3768c-1-767x486.png 767w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/cfd199e6e4c8afac0f0145d0e8a3768c-1-1536x973.png 1536w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/cfd199e6e4c8afac0f0145d0e8a3768c-1.png 1885w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Based on the feedback I received, I decided to focus on improving the bartending interactions, story branches and gameplay loop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, I want to make bartending more interactive and allow different choices to have a clearer impact on the story. I also want to improve the overall gameplay flow, making the connections between bartending, dialogue and story progression feel more natural and consistent.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Drink Attribute System<\/h2>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">I decided to keep the original four drink attributes: strength, sourness, sweetness and warmth. Each customer will still have their own preferences and dislikes, so this part of the design will stay the same. What I mainly want to change is how the values are calculated, so that different drink choices can lead to more noticeable reactions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"368\" src=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-53-1024x368.png\" alt=\"\" class=\"wp-image-514\" srcset=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-53-1024x368.png 1024w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-53-300x108.png 300w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-53-766x275.png 766w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-53.png 1515w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">During playtesting, I realised that I hadn&#8217;t balanced the drink attributes very well. Some ingredients didn&#8217;t affect the final values in a reasonable way, meaning different drink combinations could produce similar results.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To improve the balance of my drink attributes, I looked at the bartending system in <em>VA-11 HALL-A<\/em> and how different ingredients and proportions affect the final drink.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-54.png\"><img decoding=\"async\" width=\"1024\" height=\"492\" src=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-54-1024x492.png\" alt=\"\" class=\"wp-image-515\" srcset=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-54-1024x492.png 1024w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-54-300x144.png 300w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-54-766x368.png 766w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-54.png 1114w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Water:<\/strong> Dilutes the other attributes. In a Hot Toddy, it counts as hot water and contributes warmth.<\/li>\n\n\n\n<li><strong>Ice:<\/strong> Slightly dilutes the drink and reduces warmth to 0.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These are the ingredients\u2019 base values. <strong>The finished drink\u2019s values are calculated from the proportions of its ingredients<\/strong>, rather than adding 10 points per measure.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\" \/>\n\n\n\n<p class=\"wp-block-paragraph\">After setting the values for each available ingredient, I also created formulas to calculate the four drink attributes: strength, sourness, sweetness and warmth. This allows the system to calculate the final drink&#8217;s attributes based on the ingredients and proportions chosen by the player, and use the results to determine how customers react.<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\" open><summary>I referred to data from <em>Mixed Spirits Bartender<\/em> and adjusted them to fit the four attributes in my own game.<\/summary>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/store.steampowered.com\/app\/3891400\/%E8%B0%83%E9%85%92%E5%B8%88%E6%A8%A1%E6%8B%9F%E5%99%A8\/?l=schinese\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"498\" src=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-55-1024x498.png\" alt=\"\" class=\"wp-image-516\" srcset=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-55-1024x498.png 1024w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-55-300x146.png 300w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-55-767x373.png 767w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-55-1536x747.png 1536w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-55.png 1810w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/details>\n\n\n\n<p class=\"wp-block-paragraph\">My Version<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-56.png\"><img loading=\"lazy\" decoding=\"async\" width=\"987\" height=\"373\" src=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-56.png\" alt=\"\" class=\"wp-image-518\" srcset=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-56.png 987w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-56-300x113.png 300w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-56-767x290.png 767w\" sizes=\"(max-width: 987px) 100vw, 987px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After setting up these values and formulas, I found it much easier to design drink preferences and conditions for different customers. I could use the four attributes to decide which drinks would suit each customer&#8217;s tastes and how they would react to different drinks.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-57.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"592\" src=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-57-1024x592.png\" alt=\"\" class=\"wp-image-521\" srcset=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-57-1024x592.png 1024w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-57-300x173.png 300w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-57-766x443.png 766w, https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/image-57.png 1429w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group has-accent-1-background-color has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<h4 class=\"wp-block-heading\">Evaluation Code: <\/h4>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Basic properties of materials<\/summary>\n<pre class=\"wp-block-code\"><code>INGREDIENT_TASTE = {\n    'Whisky': {'strength': 10},\n    'Gin': {'strength': 10},\n    'Brandy': {'strength': 10},\n    'Rum': {'strength': 10},\n    'Water': {},\n    'Coffee': {'warmth': 10},\n    'Lemon': {'sourness': 10},\n    'Sugar': {'sweetness': 10},\n}<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Calculate the four values \u200b\u200bfor the beverage<\/summary>\n<pre class=\"wp-block-code\"><code>def drink_properties(parts, ice, name=None):\n    # \u53ea\u8ba1\u7b97\u6709\u6548\u4e14\u6570\u91cf\u5927\u4e8e\u96f6\u7684\u6750\u6599\n    clean = {\n        key: value\n        for key, value in parts.items()\n        if key in INGREDIENT_TASTE and value &gt; 0\n    }\n\n    total = sum(clean.values())\n\n    # \u52a0\u51b0\u540e\uff0c\u8ba1\u7b97\u7528\u7684\u603b\u91cf\u589e\u52a0 10%\uff0c\u6a21\u62df\u7a00\u91ca\n    denominator = total * (1.1 if ice else 1.0)\n\n    axes = ('strength', 'sweetness', 'sourness', 'warmth')\n    taste = {axis: 0.0 for axis in axes}\n\n    if not total:\n        return taste\n\n    for axis in axes:\n        units = sum(\n            INGREDIENT_TASTE&#091;key].get(axis, 0) * value\n            for key, value in clean.items()\n        )\n\n        # \u70ed\u6258\u8fea\u4e2d\u7684\u6c34\u6309\u70ed\u6c34\u5904\u7406\n        if axis == 'warmth' and identify_drink(clean, ice) == 'Hot Toddy':\n            units += 10 * clean.get('Water', 0)\n\n        # \u9650\u5236\u5728 0\u201310\uff0c\u5e76\u4fdd\u7559\u4e00\u4f4d\u5c0f\u6570\n        taste&#091;axis] = round(\n            max(0.0, min(10.0, units \/ denominator)),\n            1\n        )\n\n    # \u52a0\u51b0\u540e\u4e0d\u518d\u6709\u6e29\u6696\u611f\n    if ice:\n        taste&#091;'warmth'] = 0.0\n\n    return taste<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Does the customer like this drink<\/summary>\n<pre class=\"wp-block-code\"><code>TASTE_PROFILES = {\n    'balanced': {\n        'strength': (2, 6),\n        'sweetness': (0, 3),\n        'sourness': (0, 3),\n    },\n\n    'bold': {\n        'strength': (6, 10),\n        'sweetness': (0, 1),\n        'sourness': (0, 2),\n    },\n\n    # \u949f\u8868\u5320\u4f7f\u7528\u8fd9\u4e00\u7ec4\u504f\u597d\u3002\n    'sweet': {\n        'strength': (1, 5),\n        'sweetness': (1.5, 4),\n        'sourness': (0, 2.5),\n    },\n\n    'comfort': {\n        'strength': (0, 4),\n        'sweetness': (0, 4),\n        'sourness': (0, 2),\n    },\n}<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Assessment and Determination of Trustworthiness<\/summary>\n<pre class=\"wp-block-code\"><code>preferences = TASTE_PROFILES&#091;profile]\n\n# \u70c8\u5ea6\u3001\u751c\u5ea6\u3001\u9178\u5ea6\uff1a\n# \u5728\u63a5\u53d7\u533a\u95f4\u5185 +1\uff0c\u5426\u5219 -1\nscore = sum(\n    1 if preferences&#091;key]&#091;0] &lt;= properties&#091;key] &lt;= preferences&#091;key]&#091;1]\n    else -1\n    for key in ('strength', 'sweetness', 'sourness')\n)\n\n# \u559c\u6b22\u6e29\u70ed\u996e\u54c1\uff0c\u6216\u5f53\u524d\u89c9\u5f97\u51b7\uff1a\n# \u6e29\u6696\u611f\u8fbe\u5230 4\uff0c\u52a0 2 \u5206\uff1b\u5426\u5219\u51cf 2 \u5206\nwarmth_bonus = (\n    properties&#091;'warmth'] &gt;= 4\n    and (profile == 'comfort' or mood == 'cold')\n)\n\nif warmth_bonus:\n    score += 2\nelif profile == 'comfort' or mood == 'cold':\n    score -= 2\n\n# \u70e6\u8e81\u72b6\u6001\u4e0b\uff0c\u70c8\u5ea6\u8fbe\u5230 4 \u52a0\u5206\uff0c\u5426\u5219\u51cf\u5206\nif mood == 'restless':\n    score += 1 if properties&#091;'strength'] &gt;= 4 else -1\n\n# \u6700\u7ec8\u8bc4\u4ef7\nkind = (\n    'liked' if score &gt;= 2\n    else 'disliked' if score &lt;= -1\n    else 'neutral'\n)\n\n# \u559c\u6b22 +1 \u4fe1\u4efb\uff0c\u4e0d\u559c\u6b22 -1\uff0c\u666e\u901a\u4e0d\u53d8\ndelta = 1 if kind == 'liked' else -1 if kind == 'disliked' else 0\n\n# \u4fe1\u4efb\u5ea6\u9650\u5236\u5728 0\u20135\nnext_trust = max(0, min(5, trust + delta))<\/code><\/pre>\n<\/details>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">With these values in place, I can create more story branches.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Character Preferences<\/h2>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">During playtesting, one player mentioned that customers&#8217; preferences were not displayed on screen, which made it easy to forget what each customer liked. They had to keep checking previous information. This made me realise that although I had designed different preferences for each customer, the information was not easy enough for players to access during gameplay.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To fix this, I added some code that allows the Customer Notebook to read the interactions between the player and customers after each round and automatically update their preferences.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The result is shown in the video below\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1056\" style=\"aspect-ratio: 1904 \/ 1056;\" width=\"1904\" controls src=\"https:\/\/sites.wsagames.com\/yh9g25\/wp-content\/uploads\/sites\/91\/2026\/10\/20261029-1610-04.3031464.mp4\"><\/video><\/figure>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Evaluation Code<\/summary>\n<pre class=\"wp-block-code\"><code>if section == \"preferences\":\n    for entry in customer_preference_lines(customer_note_selection):\n        text entry color PAPER_INK size 20\n\ndef customer_preference_lines(customer_id):\n    known = set(\n        store.customer_notes\n        .get(customer_id, {})\n        .get('preferences', &#091;])\n    )\n\n    groups = CUSTOMER_PREFERENCE_GROUPS.get(customer_id, {})\n    separator = '\u3001' if persistent.ui_language == 'zh' else ', '\n    lines = &#091;]\n\n    for heading in ('Likes', 'Can accept', 'Dislikes'):\n        items = &#091;\n            tr(text)\n            for key, text in groups.get(heading, ())\n            if key in known\n        ]\n\n        content = separator.join(items) if items else tr('Not yet known.')\n\n        lines.append(\n            tr(heading + ': {items}').format(items=content)\n        )\n\n    return lines<\/code><\/pre>\n<\/details>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Future Plans<\/h2>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Continued improving my game based on the feedback I had received, mainly focusing on bartending interactions, story branches and the overall gameplay loop. I also started thinking about adding new mechanics that would allow players to influence the story through choices other than just making drinks.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\" open><summary>Use of AI Tools<\/summary>\n<p class=\"wp-block-paragraph\">Google translate<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Youdao translate<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chat GPT drawing, code debugging.<\/p>\n<\/details>\n","protected":false},"excerpt":{"rendered":"<p>Prototype version &#8211; bar04 playtest name &#8211; Bar1860PT04-pc Game prototype crit I attended this week&#8217;s game crit and had the chance to see other students&#8217; game prototypes. It was interesting to see how everyone had different ideas and approaches to game design. I also presented my own game and received some useful feedback and suggestions. [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-496","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/pages\/496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/comments?post=496"}],"version-history":[{"count":22,"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/pages\/496\/revisions"}],"predecessor-version":[{"id":646,"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/pages\/496\/revisions\/646"}],"wp:attachment":[{"href":"https:\/\/sites.wsagames.com\/yh9g25\/wp-json\/wp\/v2\/media?parent=496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}