{"id":37,"date":"2025-02-09T14:18:51","date_gmt":"2025-02-09T14:18:51","guid":{"rendered":"https:\/\/sites.wsagames.com\/violetsdates\/?page_id=37"},"modified":"2025-05-14T19:58:15","modified_gmt":"2025-05-14T19:58:15","slug":"programming","status":"publish","type":"page","link":"https:\/\/sites.wsagames.com\/violetsdates\/development-of-violets-dates\/programming\/","title":{"rendered":"Programming"},"content":{"rendered":"\n<p class=\"has-text-align-center has-medium-font-size wp-block-paragraph\">Below you will find the final scripts and the overall final look of the game. I have added a clip of the gameplay as well as some screenshots and the link to the game!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2501\u2501\u2501\u2501\u2501\u2501\u2219\u22c6\u22c5\u22c6\u2219\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2219\u22c6\u22c5\u22c6\u2219\u2501\u2501\u2501\u2501\u2501\u2501<\/p>\n\n\n\n<p class=\"has-text-align-center has-x-large-font-size wp-block-paragraph\"><strong>Game clips and Screenshots <\/strong><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-57-1024x576.png\" alt=\"\" class=\"wp-image-388\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-57-1024x576.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-57-300x169.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-57-768x432.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-57-1536x863.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-57.png 1916w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-59-1024x550.png\" alt=\"\" class=\"wp-image-390\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-59-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-59-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-59-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-59-1536x825.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-59.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"549\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-61-1024x549.png\" alt=\"\" class=\"wp-image-392\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-61-1024x549.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-61-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-61-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-61-1536x824.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-61.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-63-1024x550.png\" alt=\"\" class=\"wp-image-394\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-63-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-63-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-63-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-63-1536x825.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-63.png 1918w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-65-1024x551.png\" alt=\"\" class=\"wp-image-396\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-65-1024x551.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-65-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-65-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-65-1536x827.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-65.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-67-1024x550.png\" alt=\"\" class=\"wp-image-398\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-67-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-67-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-67-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-67-1536x825.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-67.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"549\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-69-1024x549.png\" alt=\"\" class=\"wp-image-400\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-69-1024x549.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-69-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-69-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-69-1536x824.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-69.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-71-1024x550.png\" alt=\"\" class=\"wp-image-402\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-71-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-71-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-71-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-71-1536x825.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-71.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-73-1024x551.png\" alt=\"\" class=\"wp-image-404\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-73-1024x551.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-73-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-73-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-73-1536x826.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-73.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-75-1024x550.png\" alt=\"\" class=\"wp-image-406\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-75-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-75-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-75-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-75-1536x824.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-75.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-205123-wecompress.com_-1024x539.png\" alt=\"\" class=\"wp-image-408\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-205123-wecompress.com_-1024x539.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-205123-wecompress.com_-300x158.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-205123-wecompress.com_-768x404.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-205123-wecompress.com_-1536x809.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-205123-wecompress.com_.png 1915w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-77-1024x551.png\" alt=\"\" class=\"wp-image-410\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-77-1024x551.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-77-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-77-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-77-1536x826.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-77.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-79-1024x550.png\" alt=\"\" class=\"wp-image-412\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-79-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-79-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-79-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-79-1536x824.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-79.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"549\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-58-1024x549.png\" alt=\"\" class=\"wp-image-389\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-58-1024x549.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-58-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-58-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-58-1536x823.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-58.png 1918w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-60-1024x550.png\" alt=\"\" class=\"wp-image-391\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-60-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-60-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-60-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-60-1536x825.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-60.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-62-1024x551.png\" alt=\"\" class=\"wp-image-393\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-62-1024x551.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-62-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-62-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-62-1536x826.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-62.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-64-1024x551.png\" alt=\"\" class=\"wp-image-395\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-64-1024x551.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-64-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-64-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-64-1536x827.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-64.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-66-1024x576.png\" alt=\"\" class=\"wp-image-397\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-66-1024x576.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-66-300x169.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-66-768x432.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-66-1536x864.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-66.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-68-1024x550.png\" alt=\"\" class=\"wp-image-399\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-68-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-68-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-68-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-68-1536x824.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-68.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"549\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-70-1024x549.png\" alt=\"\" class=\"wp-image-401\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-70-1024x549.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-70-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-70-768x412.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-70-1536x824.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-70.png 1918w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-72-1024x551.png\" alt=\"\" class=\"wp-image-403\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-72-1024x551.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-72-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-72-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-72-1536x826.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-72.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-74-1024x576.png\" alt=\"\" class=\"wp-image-405\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-74-1024x576.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-74-300x169.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-74-768x432.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-74-1536x864.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-74.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-204944-wecompress.com_-1024x550.png\" alt=\"\" class=\"wp-image-407\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-204944-wecompress.com_-1024x550.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-204944-wecompress.com_-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-204944-wecompress.com_-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-204944-wecompress.com_-1536x825.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Screenshot-2025-05-14-204944-wecompress.com_.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-76-1024x551.png\" alt=\"\" class=\"wp-image-409\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-76-1024x551.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-76-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-76-768x413.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-76-1536x827.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-76.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-78-1024x576.png\" alt=\"\" class=\"wp-image-411\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-78-1024x576.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-78-300x169.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-78-768x432.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-78-1536x864.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-78.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"549\" src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-80-1024x549.png\" alt=\"\" class=\"wp-image-413\" srcset=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-80-1024x549.png 1024w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-80-300x161.png 300w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-80-768x411.png 768w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-80-1536x823.png 1536w, https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/image-80.png 1919w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"720\" style=\"aspect-ratio: 1280 \/ 720;\" width=\"1280\" controls src=\"https:\/\/sites.wsagames.com\/violetsdates\/wp-content\/uploads\/sites\/37\/2025\/05\/Untitled-video-Made-with-Clipchamp-4-1.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"has-text-align-center has-x-large-font-size wp-block-paragraph\"><strong>Annotated Final Scripts<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size wp-block-paragraph\"><strong>Main Script<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># The script of the game goes in this file.\n\n# Declare characters used by this game. The color argument colorizes the\n# name of the character.\n\n\n# The game starts here.\n\nimage violet think = \"violet think.png\"\n    # Declare an image that can be used in scenes (e.g., character expression)\ndefine e = Character (\"Violet\")\n    # Define a character with their display name and (optionally) a custom textbox or style\ndefine y = Character(\"Yami\")  # Normal Yami\n    # Define a character with their display name and (optionally) a custom textbox or style\ndefine y_alt = Character(\"Yami\", screen=\"alt_say\")  # Custom textbox version\n    # Define a character with their display name and (optionally) a custom textbox or style\ndefine m = Character(None, what_italic=True)\n    # Define a character with their display name and (optionally) a custom textbox or style\ndefault affection = 0.5\n    # Set a default value for a variable (affection) that tracks relationship status or progress\n\nscreen choice(items):\n    # Define a custom screen for presenting choices to the player\n    vbox:\n    # Vertical layout box to stack UI elements (buttons in this case)\n        style_prefix \"choice\"\n        xalign 0.95  # Align to the right side of the screen\n        yalign 0.5   # Vertically center\n        spacing 15\n\n        for i in items:\n            button:\n    # Each choice is rendered as a button with its own action\n                action i.action\n                xsize 650  # Smaller width for each button\n    # Each choice is rendered as a button with its own action\n                text i.caption style \"choice_text\"\n    # Set the label of the button using the defined text style\n\nstyle choice_text:\n    # Define the text style for choice buttons\n    size 30\n    color \"#FFFFFF\"\n    \n\n\nscreen affection_bar():\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    $ total_height = 600\n    $ bar_width = 900\n    $ fill_height = int(total_height * affection)\n    # Calculate the fill height of the affection bar based on the affection value\n\n    fixed:\n    # 'fixed' layout used to manually control placement of child elements\n        xpos -250\n        ypos 100\n\n        add \"bar_bg.png\" size (bar_width, total_height)\n\n\n        add \"bar_fill.png\" at Transform(anchor=(0.0, 1.0)):\n            size (bar_width, fill_height)\n            xpos 0\n            ypos total_height      \n        \n\n\nlabel start:\n    \n    show bg start\n\n\n    show violet think\n\n    m \"You find yourself walking aimlessly in a sparse forest, the sun rays dancing around onto the lush blades of grass and the strong aroma of an assortment of wildflowers infiltrates your nose.\"\n    m \"As you wander further into the forest, a tall, slender figure emerges from the trees and extends a welcoming hand out to you.\"\n    m \"You could immediately feel the warmth that radiated from his smile. His attire displays an impression of importance and regality, a red velvet cape follows his shadow.\"\n    m \"He approaches you with such gentle poise and introduces himself as your-\"\n    hide violet think\n    show violet head sleep onlayer over_screens\n    \"Violet\" \"Prince Charming...\"\n    hide violet head sleep onlayer over_screens\n    play sound \"audio\/phone alarmm.mp3\" volume 0.8\n    scene bg bedroom\n    show violet head sleep onlayer over_screens\n    \"Violet\" \"AGH!\"\n    play music \"audio\/bedroom music.mp3\" volume 0.5 fadein 1.0\n    hide violet head sleep onlayer over_screens\n    m \"You spring up from bed, half awake and notice that you have 2 missed calls and an ongoing call from your friend Elijah.\"\n    show phone call\n    show violet head sleep onlayer over_screens\n    \"Violet\" \"G-Good morning! Sorry I\u2019m almost there Eli! Aha...\"\n    hide violet head sleep onlayer over_screens\n    m \"You leap out of the comfort of your sheets and stumble towards your dresser.\"\n    \"Elijah\" \"Girl, I know damn well you just woke up now. You really need to fix that sleep schedule because passing out at 3AM can\u2019t be that good for you.\"\n    show violet head sleep onlayer over_screens\n    \"Violet\" \"This is the last time I promise! Sortaaaaa\u2026 I was finishing up the 5th to last episode of this romance series about a princess locked away and escaping to find her prince. Just 5 more episodes to go and I can go back to doing whatever again!\"\n    hide violet head sleep onlayer over_screens\n    \"Elijah\" \"That\u2019s another fat lie, you\u2019re gonna click on another series and start this cycle again.\"\n    show violet head sleep onlayer over_screens\n    \"Violet\" \"Hehe-\"\n    hide violet head sleep onlayer over_screens\n    \"Elijah\" \"Anyways, what are you wearing for today?\"\n    hide phone call\n\nlabel choices:\n    \"What are you wearing today?\"\n\n\nmenu:\n    \"Casual- I\u2019m wearing my green shirt and a miniskirt.\":\n                                                         jump choices1_a\n\n    \"Doll yourself up- I\u2019m gonna attempt to look nice today, I have a new dress I wanna try on but I think it\u2019s a bit too short\u2026\":\n                                                                                                                                 jump choices1_b\n                                                 \nlabel choices1_a:\n    \"You feel cute and comfortable in this outfit.\"\n    jump choices1_common\n\nlabel choices1_b:\n    \"You feel confident, but weary about this outfit.\"\n    jump choices1_common\n\nlabel choices1_common:\n    m \"Just as you open the door, you can\u2019t help but have a bad feeling about today.\"\n    stop music fadeout 1.5\n\nlabel start_2:\n    call screen mapScreen\n\nlabel myScreens_2:\n\n\nscreen mapScreen:\n    add \"bg map.png\"\n    \n    #room2\n    imagebutton:\n    # Declare an image that can be used in scenes (e.g., character expression)\n        xpos 630\n        ypos 200\n        xysize (246, 215) \n        idle \"cafe_idle.png\"\n        hover \"cafe_hover.png\"\n        action Jump (\"room2\")\n\nlabel room1:\n    scene bg bedroom\n    \"Welcome to Violet's bedroom!\"\n\nlabel room2:\n    scene bg cafe exterior\n    with fade\n    play music \"audio\/outside cafe.mp3\" volume 1 fadein 0.5\n    m \"Hopefully Eli isn\u2019t here already, I really need to start going to bed earlier.\"\n    m \"You look around at the beautiful scenery around you, the smell of cakes and pastries fills the air...\"\n    m \"Ugh, I can\u2019t wait to see Eli, it's been ages, and the thought of those cakes right now is irresistible...\"\n    play sound \"audio\/exit.mp3\" volume 0.5 \n\n    scene bg cafe interior\n    with fade\n    stop sound\n    play music \"audio\/soft cafe music.mp3\" volume 0.5 fadein 1.5\n    m \"A few minutes go by as you sit and stare at the hot chocolate in front of you going cold. You try to distract yourself from the fact that Elijah is late once again\u2026\"\n    m \"Looking around you see all the yummy pastries just waiting on the side, wishing they were in your belly right now, some cute little jellyfish lights which look so magical and\u2026\"\n    play sound \"audio\/phone buzzing.mp3\" volume 0.8\n    show violet head onlayer over_screens\n    \"Violet\" \"AGH! Oh, um...\"\n    hide violet head onlayer over_screens\n    m \"You blush, hoping no one just heard you letting out that yelp. You look down to see messages from Elijah.\"\n\nlabel start_3:\n    call screen phoneScreen\n\nlabel myScreens:\n\nscreen phoneScreen:\n    add \"phone home.png\"\n\n    #texts\n    imagebutton:\n    # Declare an image that can be used in scenes (e.g., character expression)\n        xpos 800\n        ypos 750\n        xysize (246, 215) \n        idle \"text_idle.png\"\n        hover \"text_hover.png\"\n        action Jump (\"texts\")\n\n\nlabel texts:\n    show phone blank\n    show text one\n    show text two\n    show text three\n    show text four\n    show text five\n    play sound \"audio\/sigh.mp3\" volume 0.6\n    show violet head onlayer over_screens\n    \"Violet\" \"Why, Eli???\"\n    hide violet head onlayer over_screens\n    m \"As you debate whether or not to leave the cafe you hear a voice.\"\n    play sound \"audio\/footsteps.mp3\" volume 0.8\n\n\n \n\n\nlabel start_4:\n    hide phone blank\n    hide text one\n    hide text two\n    hide text three\n    hide text four\n    hide text five\n    show yami standing\n    show screen affection_bar\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    \"???\" \"You must be the famous Violet.\"\n    \"You look up from your phone to be met with this random stranger smirking at you.\"\n    show violet head onlayer over_screens\n    \"Violet\" \"Ugh, yes, sorry, who are you?\"\n    hide violet head onlayer over_screens\n    show yami head onlayer over_screens\n    \"???\" \"Name\u2019s Yami.\"\n    hide yami head onlayer over_screens\n    show yami neutral\n    show coffee single\n    m \"Before you can say anything more, Yami sits down in front of you, placing his coffee down and looking up at you... You can already feel the intensity from his gaze.\"\n    show yami neutral\n    show coffee single\n    show violet head onlayer over_screens\n    \"Violet\" \"Well, nice to meet you Yami. Sorry, I was not prepared for this at all.\"\n    hide violet head onlayer over_screens\n    show yami head onlayer over_screens\n    \"Yami\" \"Don\u2019t worry about that. We\u2019re here now, that\u2019s all that matters.\"\n    hide yami head onlayer over_screens\n    show violet head onlayer over_screens\n    \"Violet\" \"Yeah. Anyways, as you know my name is Vio-\"\n    hide violet head onlayer over_screens\n    show yami mad\n    show yami head onlayer over_screens\n    \"Yami\" \"I was standing here alone for 10 minutes, I was worried I was going to be stood up! Can you imagine how embarrassing that would\u2019ve been for me?\"\n    \"Yami\" \"So, how are you?\"\n    hide yami head onlayer over_screens\n    show yami happy\n    \"Yami lets out a light chuckle.\"\n    m \"Did he just interrupt me? Rude, but okay, maybe it\u2019s just first date nerves.\"\n\nlabel choices_2:\n    \n\nmenu:\n    \"Good, now that you\u2019re here.\":\n                                 jump choices2_a\n\n    \"I\u2019m good, thank you, you?\":\n                               jump choices2_b\n\n\n    \"Well, I have been better but I\u2019m fine.\":\n                                            jump choices2_c\n\nlabel choices2_a:\n    show yami smirk\n    $ affection += 0.0625\n    jump choices2_common\n\nlabel choices2_b:\n    show yami distracted\n    $ affection += 0\n    jump choices2_common\n\nlabel choices2_c:\n    show yami mad\n    $ affection -= 0.0625\n    jump choices2_common\n\nlabel choices2_common:\n    show yami head onlayer over_screens\n    \"Yami\" \"I\u2019ve had a bit of a morning, you know when you look this good you have all these agencies trying to book you.\"\n    hide yami head onlayer over_screens\n    show yami neutral\n\nlabel start_5:\n    \"He looks at you waiting for a response, but before you can even say a word he continues.\"\n    show yami head onlayer over_screens\n    \"Yami\" \"I mean you probably wouldn\u2019t know, but that\u2019s okay, we all start somewhere.\"\n    hide yami head onlayer over_screens\n    show yami happy\n    m \"You frown, annoyed by the comment. You decide to dismiss the comment and try to keep a straight face, but you\u2019ll keep this in mind when he next says anything.\"\n    show yami head onlayer over_screens\n    \"Yami\" \"I\u2019m joking, pretty lady, just relax.\"\n    hide yami head onlayer over_screens\n    show yami neutral\n\nlabel choices_3:\n    \n\nmenu:\n    \"Awhh, so you do think I\u2019m pretty.\":\n                                       jump choices3_a\n\n    \"I\u2019m all relaxed, don\u2019t you worry.\":\n                                       jump choices3_b\n\n    \"Oh, so now you think I\u2019m pretty? Funny way of showing it.\":\n                                                               jump choices3_c\n\n\nlabel choices3_a:\n      show yami happy\n      $ affection += 0.0625\n      jump choices3_common\n\nlabel choices3_b:\n      show yami neutral\n      $ affection += 0\n      jump choices3_common\n\nlabel choices3_c:\n      show yami mad\n      $ affection -= 0.0625\n      jump choices3_common\n\nlabel choices3_common:\n    show yami head onlayer over_screens\n    \"Yami\" \"So what do you think of me?\"\n    hide yami head onlayer over_screens\n    m \"Oh god, is he really asking me this?\"\n\nlabel choices_4:\n\nmenu:\n    \"I\u2019m not surprised you\u2019re a model, look at you.\":\n                                                    jump choices4_a\n\n    \"You seem very nice.\":\n                         jump choices4_b\n\n    \"Don\u2019t think you need me to inflate your ego anymore.\":\n                                                          jump choices4_c\n\nlabel choices4_a:\n    show yami smirk\n    $ affection += 0.0625\n    jump choices4_common\n\nlabel choices4_b:\n    show yami happy\n    $ affection += 0\n    jump choices4_common\n\nlabel choices4_c:\n    show yami mad\n    $ affection -= 0.0625\n    jump choices4_common\n\nlabel choices4_common:\n    m \"You take a closer look at Yami, his long, sweeping eyelashes complimenting his androgynous features. There's a subtle elegance in each flick of his lashes framing his slender eyes, yet a glint of undying certitude emanates.\"\n\n\nlabel start_6:\n    m \"The dappled light filters through the seashell-peppered drapes, casting a soft glow on his golden brown stylishly cut layers.\"\n    m \"You take a quick glance at his attire and notice that he's decked out in designer brands, each piece adding to his powerful presence.\"\n    m \"It's like you're living two completely different worlds. His looks are otherworldly, almost mesmerising. It\u2019s no wonder he\u2019s a model, but there's one thing that you can't get over-\"\n    show yami head onlayer over_screens\n    \"Yami\" \"Like what you see? I don't blame you, if I could make money off my looks, I would- oh wait, I do!\"\n    hide yami head onlayer over_screens\n    show yami smirk\n    m \"He's totally full of himself!\"\n    m \"All of a sudden, the waiter brings over the yummiest cake and places it down in front of you. You look at Yami wondering if he had ordered as a little gift, but he looks at you just as confused. The waiter catches onto the confused expressions.\"\n\nlabel start_11:\n    call screen dessertScreen\n\nlabel myScreens_3:\n\nscreen dessertScreen:\n     add \"dessert blank.png\"\n\n     #desserthint\n     imagebutton:\n    # Declare an image that can be used in scenes (e.g., character expression)\n         xpos 0\n         ypos 0\n         idle \"dessert_idle.png\"\n         hover \"dessert_hover.png\"\n         action Jump (\"desserthint\")\n\nlabel desserthint:\n    \"1\/4 hints unlocked!\"\n\nlabel start_10:  \n    show yami neutral\n    show waiter head onlayer over_screens\n    \"Waiter\" \"Sorry, I think there\u2019s been a mix-up.\"\n    hide dessert idle\n    hide waiter head onlayer over_screens\n    m \"The waiter picks up the cake and takes it off.\"\n    show violet head onlayer over_screens\n    \"Violet\" \"That was odd, aha-\"\n    hide violet head onlayer over_screens\n    show yami head onlayer over_screens\n    \"Yami\" \"You should have said it was yours.\"\n    hide yami head onlayer over_screens\n    show yami smirk\n    show violet head onlayer over_screens\n    \"Violet\" \"I could never, that was someone else\u2019s ord-\"\n    hide violet head onlayer over_screens\n    show yami head onlayer over_screens\n    \"Yami\" \"I would have.\"\n    hide yami head onlayer over_screens\n    show yami happy\n    m \"It goes silent for a second as this is the SECOND time he\u2019s interrupted you.\"\n    play sound \"audio\/sigh.mp3\" volume 0.6\n    show yami neutral\n    show yami head onlayer over_screens\n    \"Yami\" \"Have I done something?\"\n    hide yami head onlayer over_screens\n    show violet head onlayer over_screens\n    \"Violet\" \"No, no, don\u2019t worry...\"\n    hide violet head onlayer over_screens\n    show yami distracted\n    show yami head onlayer over_screens\n    \"Yami\" \"Hm, okay, I didn\u2019t think so.\"\n    hide yami head onlayer over_screens\n    show yami neutral\n    m \"Wow, I didn\u2019t think he could get anymore ignorant but wait, he just did. The urge to roll my eyes is unbearable right now.\"\n    show yami happy\n    show yami head onlayer over_screens\n    \"Yami\" \"You\u2019ll never guess what I got asked to do this week.\"\n    hide yami head onlayer over_screens\n    show violet head onlayer over_screens\n    \"Violet\" \"Um, wha-\"\n    hide violet head onlayer over_screens\n    show yami head onlayer over_screens\n    \"Yami\" \"I got asked to model for IMG models, pretty impressive, am I right?\"\n    hide yami head onlayer over_screens\n    show yami smirk\n    m \"Ugh, is he only going to talk about himself on this date...\"\n\nlabel choices_5:\n    \n\nmenu:\n    \"That\u2019s amazing, clearly you\u2019re a hot shot.\":\n                                                jump choices5_a\n\n    \"Oh, that\u2019s cool! Well done.\":\n                                 jump choices5_b\n\n    \"I guess so.\":\n                 jump choices5_c\n\nlabel choices5_a:\n    show yami smirk\n    $ affection += 0.0625\n    jump choices5_common\n\nlabel choices5_b:\n    show yami happy\n    $ affection += 0\n    jump choices5_common\n\nlabel choices5_c:\n    show yami mad\n    $ affection -= 0.0625\n    jump choices5_common\n\nlabel choices5_common:\n    show violet head onlayer over_screens\n    \"Violet\" \"I actually really like fashion, maybe you could give me some tips?\"\n    show yami happy\n    hide violet head onlayer over_screens\n\nlabel start_7:\n    show yami head onlayer over_screens\n    \"Yami\" \"I thought you\u2019d never ask.\" \n    show yami smirk\n    \"Yami\" \"To be honest though, some people just get fashion and, well, others just don't\u2026\"\n    show yami neutral\n    \"Yami\" \"But, I guess if I had to give you some tips, it would be to figure out your own colour palette, whether you're cold, warm or neutral tones, always helps.\"\n    \"Yami\" \"And then there\u2019s a whole other route of finding out what season you are, in colour terms of course.\"\n    hide yami head onlayer over_screens\n    m \"Hmm, so he can actually be helpful... If only he was like this the whole time...\"\n    show violet head onlayer over_screens\n    \"Violet\" \"Well, thank you very much, mister top model.\"\n    hide violet head onlayer over_screens\n    show yami smirk\n    show yami head onlayer over_screens\n    \"Yami\" \"What can I say, I\u2019m an all-rounder.\"\n    hide yami head onlayer over_screens\n    show yami neutral\n    play sound \"audio\/sigh.mp3\" volume 0.6\n    show violet head onlayer over_screens\n    \"Violet\" \"I feel like I\u2019ve gotten to know about you, soo... How about I tell you a little about me?\"\n    hide violet head onlayer over_screens\n    show yami head onlayer over_screens\n    \"Yami\" \"I guess...\"\n    hide yami head onlayer over_screens\n    show violet head onlayer over_screens\n    \"Violet\" \"Well, I loveeee, and I mean LOVE, watching classic romance films.\"\n    hide violet head \n    show yami distracted\n    show yami head onlayer over_screens\n    \"Yami\" \"Oh yeah?\"\n    hide yami head onlayer over_screens\n    m \"Wow, okay, last time I ever talk about myself, geez-\"\n    show violet head onlayer over_screens\n    \"Violet\" \"Anyway... What do you like to watch?\"\n    hide violet head onlayer over_screens\n    show yami neutral \n    show yami head onlayer over_screens\n    \"Yami\" \"Oh, I don\u2019t like to waste my time watching films, I\u2019d much rather be starring in them, you know, because I\u2019m a model, I could easily land myself an acting role.\"\n    hide yami head onlayer over_screens\n    show yami smirk\n\nlabel choices_6:\n    \n\nmenu:\n    \"I could definitely see you in a romance film, the hot, sexy model.\":\n                                                                        jump choices6_a\n    \"I\u2019m sure you\u2019d do great!\":\n                              jump choices6_b\n\n    \"You know not everything has to involve you, right?\":\n                                                        jump choices6_c\n\nlabel choices6_a:\n    show yami smirk\n    $ affection += 0.0625\n    jump choices6_common\n\nlabel choices6_b:\n    show yami happy\n    $ affection += 0\n    jump choices6_common\n\nlabel choices6_c:\n    show yami mad\n    $ affection -= 0.0625\n    jump choices6_common\n\nlabel choices6_common:\n    show violet head onlayer over_screens\n    \"Violet\" \"Sooo, what you drinking? It looks nice.\"\n    hide violet head onlayer over_screens\n\nlabel start_8:\n    show yami smirk\n    show yami head onlayer over_screens\n    \"Yami\" \"It\u2019s a latte with sugar-free vanilla. Sophisticated, but have to watch the calories. Can\u2019t be ruining a hot bod like mine.\"\n    show yami neutral\n    \"Yami\" \"What about yours? It looks like something a kid would order... And all that sugar...\"\n    hide yami head onlayer over_screens\n\nlabel choices_7:\n    \n\nmenu:\n    \"Yeah, I guess you\u2019re right. I never thought about it like that.\":\n                                                                     jump choices7_a\n\n    \"Oh, I always get a hot chocolate.\":\n                                       jump choices7_b\n\n    \"Lighten up a bit, it\u2019s only a hot chocolate with whipped cream and marshmallows, geez-\":\n                                                                                            jump choices7_c\n                                                                            \nlabel choices7_a:\n    show yami happy\n    $ affection += 0.0625\n    jump choices7_common\n\nlabel choices7_b:\n    show yami neutral\n    $ affection += 0\n    jump choices7_common\n\nlabel choices7_c:\n    show yami mad\n    $ affection -= 0.0625\n    jump choices7_common\n\nlabel choices7_common:\n    m \"At this point I don\u2019t even know why HE, let alone myself, agreed to go on this date\u2026\"\n    show yami smirk\n\nlabel start_9:\n    show yami head onlayer over_screens\n    \"Yami\" \"You know, I don\u2019t normally do this but you\u2019re actually quite pretty, you\u2019d definitely look good on the side of me.\"\n    hide yami head onlayer over_screens\n    m \"Oh... I was not expecting that, but also on the side? So he can just disregard me when he\u2019s done??\" \n    m \"But why did that lowkey give me butterflies...?\"               \n    m \"You begin to enter daydream land where he would sweep you off your feet and off into the sunset\u2026\"\n    show yami neutral\n    show yami head onlayer over_screens\n    \"Yami\" \"Earth to miss princess over there?\"\n    hide yami head onlayer over_screens\n    m \"You snap back into reality and feel yourself blushing a nice shade of rouge...\"\n    show violet head onlayer over_screens\n    \"Violet\" \"Oh my God, sorry, aha...\"\n    hide violet head onlayer over_screens\n    show yami mad\n    show yami head onlayer over_screens\n    \"Yami\" \"I mean, you should be sorry, you're over there in daydream land when you have a literal god in front of you, money is time, sweetheart, and I\u2019m on a tight schedule.\"\n    hide yami head onlayer over_screens\n    m \"Well, that didn\u2019t last very long, did it\u2026\"\n\n\nlabel start_12:\n    scene bg evil cafe\n    show yami glitch\n    show screen affection_bartwo\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    with hpunch\n    hide screen affection_bar\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    play sound \"audio\/glitch cut.mp3\" volume 0.8\n    play music \"audio\/scary.mp3\" volume 0.8 fadein 1.0\n    $ y_alt = Character(\"Yami\", screen=\"alt_say\", what_style=\"alt_say_dialogue\", who_style=\"alt_say_label\")\n    show yami evil head onlayer over_screens\n    y_alt \"You know you should be careful with people like me, you really shouldn\u2019t be meeting with random strangers you don\u2019t know\"\n    hide yami evil head onlayer over_screens\n    stop sound \n\nlabel choices_9:\n    \n\nmenu:\n    \"Oh, you play too much, aha, you're a big softy, really.\":\n                                                                     jump choices9_a\n\n    \"Um... Aha, I don't think that you should say that on a first date...\":\n                                       jump choices9_b\n\n    \"What the hell? Who do you think you are talking to me like that!\":\n                                                                                            jump choices9_c\n                                                                            \nlabel choices9_a:\n    show yami happy\n    $ affection += 0.0625\n    jump choices9_common\n\nlabel choices9_b:\n    show yami neutral\n    $ affection += 0\n    jump choices9_common\n\nlabel choices9_c:\n    show yami mad\n    $ affection -= 0.0625\n    jump choices9_common\n\nlabel choices9_common:\n    hide screen affection_bartwo\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    show screen affection_bar\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    show bg cafe interior\n    with fade\n    play music \"audio\/soft cafe music.mp3\" volume 0.5 fadein 1.5\n\n    m \"WHAT ON EARTH WAS THAT?!!!\"\n    show yami neutral\n    \"Yami...\" \"Is something the matter, beautiful?\"\n    m \"No way, is he acting like nothing just happened? I literally saw that with my own two eyes.\"\n    m \"Your eyes dart around the room to see if anyone else witnessed what you just did but alas nothing, just couples enjoying their cakes and drinks.\"\n    m \"I really need to start going to bed earlier.\"\n    \"Violet.\" \"Uh- oh... no, nothing, don\u2019t worry, just lack of sleep.\"\n    show yami smirk\n    \"yami\" \"No worries, maybe we should wrap this up?\"\n    \"Violet\" \"Yeah, maybe that would be for the best.\"\n    \"Yami\" \"Violet, before you go\u2026 I have something to ask you.\"\n    m \"Oh god, not another thing, just let me goooo-\"\n    \"Violet\" \"Yes, Yami?\"\n    \"Yami\" \"I was thinking, me, you, another date?\"\n    show yami smirk\n\n    label choices_10:\n    \n\nmenu:\n    \"I mean, sure, why not, it couldn't hurt to do so.\":\n                                                                     jump choices10_a\n\n    \"It's going to have to be a no... you were just not it.\":\n                                       jump choices10_b\n\n    \n                                                                            \nlabel choices10_a:\n    show yami happy\n    \"See you next time then, Violet.\"\n    hide yami happy\n    with fade\n    play sound \"audio\/exit.mp3\" volume 0.5 \n    hide screen affection_bar\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    scene bg bad ending \n    with slideleft\n    stop sound\n    m \"After your second date with Yami you are left absolutely drained, physically and mentally. You decided it\u2019s way better to rot in bed watching rom coms than trying to be in one yourself!\"\n    hide screen affection_bar\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    jump credits\n\nlabel choices10_b:\n    show yami mad\n    with vpunch\n    hide yami mad \n    with dissolve\n    play sound \"audio\/exit.mp3\" volume 0.5 \n    hide screen affection_bar\n    # Create a custom screen that visually displays the affection value as a vertical bar\n    scene bg good ending\n    with slideleft\n    stop sound\n    \"After your date with Yami you couldn\u2019t shake the weird occurrence that happened and so your first protocol was to of course debrief Eli.\"\n    jump credits\n\nlabel credits:\n    $ quick_menu = False\n    window hide\n    $ credits_speed = 7.0 \n    scene bg pink\n    show credits image\n    # Declare an image that can be used in scenes (e.g., character expression)\n    $ renpy.pause(credits_speed + 2.0)\n\n \n \n    return<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size wp-block-paragraph\"><strong>Screens Script<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>################################################################################\n## Initialization\n################################################################################\n\ninit offset = -1\n\n\n################################################################################\n## Styles\n################################################################################\n\ninit python:\n    def hide_all_heads():\n        renpy.hide(\"yami head\")\n        renpy.hide(\"violet head\")\n        renpy.hide(\"waiter head\")\n\n\ntransform hide_all:\n    alpha 0.0\n\n\nstyle default:\n    properties gui.text_properties()\n    language gui.language\n\nstyle input:\n    properties gui.text_properties(\"input\", accent=True)\n    adjust_spacing False\n\nstyle hyperlink_text:\n    properties gui.text_properties(\"hyperlink\", accent=True)\n    hover_underline True\n\nstyle gui_text:\n    properties gui.text_properties(\"interface\")\n\n\nstyle button:\n    properties gui.button_properties(\"button\")\n\nstyle button_text is gui_text:\n    properties gui.text_properties(\"button\")\n    yalign 0.5\n\n\nstyle label_text is gui_text:\n    properties gui.text_properties(\"label\", accent=True)\n\nstyle prompt_text is gui_text:\n    properties gui.text_properties(\"prompt\")\n\n\nstyle bar:\n    ysize gui.bar_size\n    left_bar Frame(\"gui\/bar\/left.png\", gui.bar_borders, tile=gui.bar_tile)\n    right_bar Frame(\"gui\/bar\/right.png\", gui.bar_borders, tile=gui.bar_tile)\n\nstyle vbar:\n    xsize gui.bar_size\n    top_bar Frame(\"gui\/bar\/top.png\", gui.vbar_borders, tile=gui.bar_tile)\n    bottom_bar Frame(\"gui\/bar\/bottom.png\", gui.vbar_borders, tile=gui.bar_tile)\n\nstyle scrollbar:\n    ysize gui.scrollbar_size\n    base_bar Frame(\"gui\/scrollbar\/horizontal_&#091;prefix_]bar.png\", gui.scrollbar_borders, tile=gui.scrollbar_tile)\n    thumb Frame(\"gui\/scrollbar\/horizontal_&#091;prefix_]thumb.png\", gui.scrollbar_borders, tile=gui.scrollbar_tile)\n\nstyle vscrollbar:\n    xsize gui.scrollbar_size\n    base_bar Frame(\"gui\/scrollbar\/vertical_&#091;prefix_]bar.png\", gui.vscrollbar_borders, tile=gui.scrollbar_tile)\n    thumb Frame(\"gui\/scrollbar\/vertical_&#091;prefix_]thumb.png\", gui.vscrollbar_borders, tile=gui.scrollbar_tile)\n\nstyle slider:\n    ysize gui.slider_size\n    base_bar Frame(\"gui\/slider\/horizontal_&#091;prefix_]bar.png\", gui.slider_borders, tile=gui.slider_tile)\n    thumb \"gui\/slider\/horizontal_&#091;prefix_]thumb.png\"\n\nstyle vslider:\n    xsize gui.slider_size\n    base_bar Frame(\"gui\/slider\/vertical_&#091;prefix_]bar.png\", gui.vslider_borders, tile=gui.slider_tile)\n    thumb \"gui\/slider\/vertical_&#091;prefix_]thumb.png\"\n\n\nstyle frame:\n    padding gui.frame_borders.padding\n    background Frame(\"gui\/frame.png\", gui.frame_borders, tile=gui.frame_tile)\n\n\n\n################################################################################\n## In-game screens\n################################################################################\n\n\n## Say screen ##################################################################\n##\n## The say screen is used to display dialogue to the player. It takes two\n## parameters, who and what, which are the name of the speaking character and\n## the text to be displayed, respectively. (The who parameter can be None if no\n## name is given.)\n##\n## This screen must create a text displayable with id \"what\", as Ren'Py uses\n## this to manage text display. It can also create displayables with id \"who\"\n## and id \"window\" to apply style properties.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#say\n\nscreen say(who, what):\n\n    window:\n        id \"window\"\n\n        if who is not None:\n\n            window:\n                id \"namebox\"\n                style \"namebox\"\n                text who id \"who\"\n\n        text what id \"what\"\n\nscreen alt_say(who, what):\n    fixed:\n        add \"gui\/textbox_two.png\"\n\n        # \u2705 Side image inside fixed\n        if not renpy.variant(\"small\"):\n            add SideImage() xalign 0.0 yalign 1.0\n\n        vbox:\n            xalign 0.55  # Adjust until it fits your box\n            yalign 0.8\n            spacing 5\n\n            if who:\n                text who id \"who\" style \"alt_say_label\" xalign 0.0 xoffset 210 yoffset 30\n\n            text what id \"what\" style \"alt_say_dialogue\" xalign 0.0\n\n           \ninit -1:\n    style alt_say_label is say_label\n    style alt_say_label:\n        color \"#808080\"\n        size 45\n\ninit -1:\n    style alt_say_dialogue is say_dialogue\n    style alt_say_dialogue:\n        color \"#000000\"\n        size 40\n\n\n\n## Make the namebox available for styling through the Character object.\ninit python:\n    config.character_id_prefixes.append('namebox')\n\nstyle window is default\nstyle say_label is default\nstyle say_dialogue is default\nstyle say_thought is say_dialogue\n\nstyle namebox is default\nstyle namebox_label is say_label\n\n\nstyle window:\n    xalign 0.5\n    xfill True\n    yalign gui.textbox_yalign\n    ysize gui.textbox_height\n\n    background Image(\"gui\/textbox.png\", xalign=0.5, yalign=1.0)\n\nstyle namebox:\n    xpos 685\n    xanchor gui.name_xalign\n    xsize gui.namebox_width\n    ypos -35\n    ysize gui.namebox_height\n\n    background Frame(\"gui\/namebox.png\", gui.namebox_borders, tile=gui.namebox_tile, xalign=gui.name_xalign)\n    padding gui.namebox_borders.padding\n\nstyle say_label:\n    properties gui.text_properties(\"name\", accent=True)\n    xalign gui.name_xalign\n    yalign 0.5\n\nstyle say_dialogue:\n    properties gui.text_properties(\"dialogue\")\n\n    xpos 500\n    xsize 1000\n    ypos 50\n\n    adjust_spacing False\n\n## Input screen ################################################################\n##\n## This screen is used to display renpy.input. The prompt parameter is used to\n## pass a text prompt in.\n##\n## This screen must create an input displayable with id \"input\" to accept the\n## various input parameters.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#input\n\nscreen input(prompt):\n    style_prefix \"input\"\n\n    window:\n\n        vbox:\n            xanchor gui.dialogue_text_xalign\n            xpos gui.dialogue_xpos\n            xsize gui.dialogue_width\n            ypos gui.dialogue_ypos\n\n            text prompt style \"input_prompt\"\n            input id \"input\"\n\nstyle input_prompt is default\n\nstyle input_prompt:\n    xalign gui.dialogue_text_xalign\n    properties gui.text_properties(\"input_prompt\")\n\nstyle input:\n    xalign gui.dialogue_text_xalign\n    xmaximum gui.dialogue_width\n\n\n## Choice screen ###############################################################\n##\n## This screen is used to display the in-game choices presented by the menu\n## statement. The one parameter, items, is a list of objects, each with caption\n## and action fields.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#choice\n\nscreen choice(items):\n    style_prefix \"choice\"\n\n    vbox:\n        for i in items:\n            textbutton i.caption action i.action\n\n\nstyle choice_vbox is vbox\nstyle choice_button is button\nstyle choice_button_text is button_text\n\nstyle choice_vbox:\n    xalign 0.5\n    ypos 405\n    yanchor 0.5\n\n    spacing gui.choice_spacing\n\nstyle choice_button is default:\n    properties gui.button_properties(\"choice_button\")\n\nstyle choice_button_text is default:\n    properties gui.text_properties(\"choice_button\")\n\n\n## Quick Menu screen ###########################################################\n##\n## The quick menu is displayed in-game to provide easy access to the out-of-game\n## menus.\n\nscreen quick_menu():\n\n    ## Ensure this appears on top of other screens.\n    zorder 100\n\n    if quick_menu:\n\n        hbox:\n            style_prefix \"quick\"\n\n            xalign 0.5\n            yalign 1.0\n\n            textbutton _(\"Back\") action Rollback()\n            textbutton _(\"History\") action ShowMenu('history')\n            textbutton _(\"Skip\") action Skip() alternate Skip(fast=True, confirm=True)\n            textbutton _(\"Auto\") action Preference(\"auto-forward\", \"toggle\")\n            textbutton _(\"Save\") action ShowMenu('save')\n            textbutton _(\"Q.Save\") action QuickSave()\n            textbutton _(\"Q.Load\") action QuickLoad()\n            textbutton _(\"Prefs\") action ShowMenu('preferences')\n\n\n## This code ensures that the quick_menu screen is displayed in-game, whenever\n## the player has not explicitly hidden the interface.\ninit python:\n    config.overlay_screens.append(\"quick_menu\")\n\ndefault quick_menu = True\n\nstyle quick_button is default\nstyle quick_button_text is button_text\n\nstyle quick_button:\n    properties gui.button_properties(\"quick_button\")\n\nstyle quick_button_text:\n    properties gui.text_properties(\"quick_button\")\n\n\n################################################################################\n## Main and Game Menu Screens\n################################################################################\n\n## Navigation screen ###########################################################\n##\n## This screen is included in the main and game menus, and provides navigation\n## to other menus, and to start the game.\n\nscreen navigation():\n\n    vbox:\n        style_prefix \"navigation\"\n\n        xpos gui.navigation_xpos\n        yalign 0.5\n\n        spacing gui.navigation_spacing\n\n        if main_menu:\n\n            textbutton _(\"Start\") action Start()\n\n        else:\n\n            textbutton _(\"History\") action ShowMenu(\"history\")\n\n            textbutton _(\"Save\") action ShowMenu(\"save\")\n\n        textbutton _(\"Load\") action ShowMenu(\"load\")\n\n        textbutton _(\"Preferences\") action ShowMenu(\"preferences\")\n\n        if _in_replay:\n\n            textbutton _(\"End Replay\") action EndReplay(confirm=True)\n\n        elif not main_menu:\n\n            textbutton _(\"Main Menu\") action MainMenu()\n\n        textbutton _(\"About\") action ShowMenu(\"about\")\n\n        if renpy.variant(\"pc\") or (renpy.variant(\"web\") and not renpy.variant(\"mobile\")):\n\n            ## Help isn't necessary or relevant to mobile devices.\n            textbutton _(\"Help\") action ShowMenu(\"help\")\n\n        if renpy.variant(\"pc\"):\n\n            ## The quit button is banned on iOS and unnecessary on Android and\n            ## Web.\n            textbutton _(\"Quit\") action Quit(confirm=not main_menu)\n\n\nstyle navigation_button is gui_button\nstyle navigation_button_text is gui_button_text\n\nstyle navigation_button:\n    size_group \"navigation\"\n    properties gui.button_properties(\"navigation_button\")\n\nstyle navigation_button_text:\n    properties gui.text_properties(\"navigation_button\")\n\n\n## Main Menu screen ############################################################\n##\n## Used to display the main menu when Ren'Py starts.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#main-menu\n\nscreen main_menu():\n\n    ## This ensures that any other menu screen is replaced.\n    tag menu\n\n    add gui.main_menu_background\n\n    ## This empty frame darkens the main menu.\n    frame:\n        style \"main_menu_frame\"\n\n    ## The use statement includes another screen inside this one. The actual\n    ## contents of the main menu are in the navigation screen.\n    use navigation\n\n    if gui.show_name:\n\n        vbox:\n            style \"main_menu_vbox\"\n\n            text \"&#091;config.name!t]\":\n                style \"main_menu_title\"\n\n            text \"&#091;config.version]\":\n                style \"main_menu_version\"\n\n\nstyle main_menu_frame is empty\nstyle main_menu_vbox is vbox\nstyle main_menu_text is gui_text\nstyle main_menu_title is main_menu_text\nstyle main_menu_version is main_menu_text\n\nstyle main_menu_frame:\n    xsize 420\n    yfill True\n\n    background \"gui\/overlay\/main_menu.png\"\n\nstyle main_menu_vbox:\n    xalign 1.0\n    xoffset -30\n    xmaximum 1200\n    yalign 1.0\n    yoffset -30\n\nstyle main_menu_text:\n    properties gui.text_properties(\"main_menu\", accent=True)\n\nstyle main_menu_title:\n    properties gui.text_properties(\"title\")\n\nstyle main_menu_version:\n    properties gui.text_properties(\"version\")\n\n\n## Game Menu screen ############################################################\n##\n## This lays out the basic common structure of a game menu screen. It's called\n## with the screen title, and displays the background, title, and navigation.\n##\n## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\".\n## This screen is intended to be used with one or more children, which are\n## transcluded (placed) inside it.\n\nscreen game_menu(title, scroll=None, yinitial=0.0, spacing=0):\n\n    style_prefix \"game_menu\"\n\n    if main_menu:\n        add gui.main_menu_background\n    else:\n        add gui.game_menu_background\n\n    frame:\n        style \"game_menu_outer_frame\"\n\n        hbox:\n\n            ## Reserve space for the navigation section.\n            frame:\n                style \"game_menu_navigation_frame\"\n\n            frame:\n                style \"game_menu_content_frame\"\n\n                if scroll == \"viewport\":\n\n                    viewport:\n                        yinitial yinitial\n                        scrollbars \"vertical\"\n                        mousewheel True\n                        draggable True\n                        pagekeys True\n\n                        side_yfill True\n\n                        vbox:\n                            spacing spacing\n\n                            transclude\n\n                elif scroll == \"vpgrid\":\n\n                    vpgrid:\n                        cols 1\n                        yinitial yinitial\n\n                        scrollbars \"vertical\"\n                        mousewheel True\n                        draggable True\n                        pagekeys True\n\n                        side_yfill True\n\n                        spacing spacing\n\n                        transclude\n\n                else:\n\n                    transclude\n\n    use navigation\n\n    textbutton _(\"Return\"):\n        style \"return_button\"\n\n        action Return()\n\n    label title\n\n    if main_menu:\n        key \"game_menu\" action ShowMenu(\"main_menu\")\n\n\nstyle game_menu_outer_frame is empty\nstyle game_menu_navigation_frame is empty\nstyle game_menu_content_frame is empty\nstyle game_menu_viewport is gui_viewport\nstyle game_menu_side is gui_side\nstyle game_menu_scrollbar is gui_vscrollbar\n\nstyle game_menu_label is gui_label\nstyle game_menu_label_text is gui_label_text\n\nstyle return_button is navigation_button\nstyle return_button_text is navigation_button_text\n\nstyle game_menu_outer_frame:\n    bottom_padding 45\n    top_padding 180\n\n    background \"gui\/overlay\/game_menu.png\"\n\nstyle game_menu_navigation_frame:\n    xsize 420\n    yfill True\n\nstyle game_menu_content_frame:\n    left_margin 60\n    right_margin 30\n    top_margin 15\n\nstyle game_menu_viewport:\n    xsize 1380\n\nstyle game_menu_vscrollbar:\n    unscrollable gui.unscrollable\n\nstyle game_menu_side:\n    spacing 15\n\nstyle game_menu_label:\n    xpos 75\n    ysize 180\n\nstyle game_menu_label_text:\n    size gui.title_text_size\n    color gui.accent_color\n    yalign 0.5\n\nstyle return_button:\n    xpos gui.navigation_xpos\n    yalign 1.0\n    yoffset -45\n\n\n## About screen ################################################################\n##\n## This screen gives credit and copyright information about the game and Ren'Py.\n##\n## There's nothing special about this screen, and hence it also serves as an\n## example of how to make a custom screen.\n\nscreen about():\n\n    tag menu\n\n    ## This use statement includes the game_menu screen inside this one. The\n    ## vbox child is then included inside the viewport inside the game_menu\n    ## screen.\n    use game_menu(_(\"About\"), scroll=\"viewport\"):\n\n        style_prefix \"about\"\n\n        vbox:\n\n            label \"&#091;config.name!t]\"\n            text _(\"Version &#091;config.version!t]\\n\")\n\n            ## gui.about is usually set in options.rpy.\n            if gui.about:\n                text \"&#091;gui.about!t]\\n\"\n\n            text _(\"Made with {a=https:\/\/www.renpy.org\/}Ren'Py{\/a} &#091;renpy.version_only].\\n\\n&#091;renpy.license!t]\")\n\n\nstyle about_label is gui_label\nstyle about_label_text is gui_label_text\nstyle about_text is gui_text\n\nstyle about_label_text:\n    size gui.label_text_size\n\n\n## Load and Save screens #######################################################\n##\n## These screens are responsible for letting the player save the game and load\n## it again. Since they share nearly everything in common, both are implemented\n## in terms of a third screen, file_slots.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#save https:\/\/\n## www.renpy.org\/doc\/html\/screen_special.html#load\n\nscreen save():\n\n     tag menu\n\n     use file_slots(_(\"Save\"))\n\nscreen load():\n\n    tag menu\n\n    use file_slots(_(\"Load\"))\n\n\nscreen file_slots(title):\n\n    default page_name_value = FilePageNameInputValue(pattern=_(\"Page {}\"), auto=_(\"Automatic saves\"), quick=_(\"Quick saves\"))\n\n    use game_menu(title):\n\n        fixed:\n\n            ## This ensures the input will get the enter event before any of the\n            ## buttons do.\n            order_reverse True\n\n            ## The page name, which can be edited by clicking on a button.\n            button:\n                style \"page_label\"\n\n                key_events True\n                xalign 0.5\n                action page_name_value.Toggle()\n\n                input:\n                    style \"page_label_text\"\n                    value page_name_value\n\n            ## The grid of file slots.\n            grid gui.file_slot_cols gui.file_slot_rows:\n                style_prefix \"slot\"\n\n                xalign 0.5\n                yalign 0.5\n\n                spacing gui.slot_spacing\n\n                for i in range(gui.file_slot_cols * gui.file_slot_rows):\n\n                    $ slot = i + 1\n\n                    button:\n                        action FileAction(slot)\n\n                        has vbox\n\n                        add FileScreenshot(slot) xalign 0.5\n\n                        text FileTime(slot, format=_(\"{#file_time}%A, %B %d %Y, %H:%M\"), empty=_(\"empty slot\")):\n                            style \"slot_time_text\"\n\n                        text FileSaveName(slot):\n                            style \"slot_name_text\"\n\n                        key \"save_delete\" action FileDelete(slot)\n\n            ## Buttons to access other pages.\n            vbox:\n                style_prefix \"page\"\n\n                xalign 0.5\n                yalign 1.0\n\n                hbox:\n                    xalign 0.5\n\n                    spacing gui.page_spacing\n\n                    textbutton _(\"&lt;\") action FilePagePrevious()\n                    key \"save_page_prev\" action FilePagePrevious()\n\n                    if config.has_autosave:\n                        textbutton _(\"{#auto_page}A\") action FilePage(\"auto\")\n\n                    if config.has_quicksave:\n                        textbutton _(\"{#quick_page}Q\") action FilePage(\"quick\")\n\n                    ## range(1, 10) gives the numbers from 1 to 9.\n                    for page in range(1, 10):\n                        textbutton \"&#091;page]\" action FilePage(page)\n\n                    textbutton _(\"&gt;\") action FilePageNext()\n                    key \"save_page_next\" action FilePageNext()\n\n                if config.has_sync:\n                    if CurrentScreenName() == \"save\":\n                        textbutton _(\"Upload Sync\"):\n                            action UploadSync()\n                            xalign 0.5\n                    else:\n                        textbutton _(\"Download Sync\"):\n                            action DownloadSync()\n                            xalign 0.5\n\n\nstyle page_label is gui_label\nstyle page_label_text is gui_label_text\nstyle page_button is gui_button\nstyle page_button_text is gui_button_text\n\nstyle slot_button is gui_button\nstyle slot_button_text is gui_button_text\nstyle slot_time_text is slot_button_text\nstyle slot_name_text is slot_button_text\n\nstyle page_label:\n    xpadding 75\n    ypadding 5\n\nstyle page_label_text:\n    textalign 0.5\n    layout \"subtitle\"\n    hover_color gui.hover_color\n\nstyle page_button:\n    properties gui.button_properties(\"page_button\")\n\nstyle page_button_text:\n    properties gui.text_properties(\"page_button\")\n\nstyle slot_button:\n    properties gui.button_properties(\"slot_button\")\n\nstyle slot_button_text:\n    properties gui.text_properties(\"slot_button\")\n\n\n## Preferences screen ##########################################################\n##\n## The preferences screen allows the player to configure the game to better suit\n## themselves.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#preferences\n\nscreen preferences():\n\n    tag menu\n\n    use game_menu(_(\"Preferences\"), scroll=\"viewport\"):\n\n        vbox:\n\n            hbox:\n                box_wrap True\n\n                if renpy.variant(\"pc\") or renpy.variant(\"web\"):\n\n                    vbox:\n                        style_prefix \"radio\"\n                        label _(\"Display\")\n                        textbutton _(\"Window\") action Preference(\"display\", \"window\")\n                        textbutton _(\"Fullscreen\") action Preference(\"display\", \"fullscreen\")\n\n                vbox:\n                    style_prefix \"check\"\n                    label _(\"Skip\")\n                    textbutton _(\"Unseen Text\") action Preference(\"skip\", \"toggle\")\n                    textbutton _(\"After Choices\") action Preference(\"after choices\", \"toggle\")\n                    textbutton _(\"Transitions\") action InvertSelected(Preference(\"transitions\", \"toggle\"))\n\n                ## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be\n                ## added here, to add additional creator-defined preferences.\n\n            null height (4 * gui.pref_spacing)\n\n            hbox:\n                style_prefix \"slider\"\n                box_wrap True\n\n                vbox:\n\n                    label _(\"Text Speed\")\n\n                    bar value Preference(\"text speed\")\n\n                    label _(\"Auto-Forward Time\")\n\n                    bar value Preference(\"auto-forward time\")\n\n                vbox:\n\n                    if config.has_music:\n                        label _(\"Music Volume\")\n\n                        hbox:\n                            bar value Preference(\"music volume\")\n\n                    if config.has_sound:\n\n                        label _(\"Sound Volume\")\n\n                        hbox:\n                            bar value Preference(\"sound volume\")\n\n                            if config.sample_sound:\n                                textbutton _(\"Test\") action Play(\"sound\", config.sample_sound)\n\n\n                    if config.has_voice:\n                        label _(\"Voice Volume\")\n\n                        hbox:\n                            bar value Preference(\"voice volume\")\n\n                            if config.sample_voice:\n                                textbutton _(\"Test\") action Play(\"voice\", config.sample_voice)\n\n                    if config.has_music or config.has_sound or config.has_voice:\n                        null height gui.pref_spacing\n\n                        textbutton _(\"Mute All\"):\n                            action Preference(\"all mute\", \"toggle\")\n                            style \"mute_all_button\"\n\n\nstyle pref_label is gui_label\nstyle pref_label_text is gui_label_text\nstyle pref_vbox is vbox\n\nstyle radio_label is pref_label\nstyle radio_label_text is pref_label_text\nstyle radio_button is gui_button\nstyle radio_button_text is gui_button_text\nstyle radio_vbox is pref_vbox\n\nstyle check_label is pref_label\nstyle check_label_text is pref_label_text\nstyle check_button is gui_button\nstyle check_button_text is gui_button_text\nstyle check_vbox is pref_vbox\n\nstyle slider_label is pref_label\nstyle slider_label_text is pref_label_text\nstyle slider_slider is gui_slider\nstyle slider_button is gui_button\nstyle slider_button_text is gui_button_text\nstyle slider_pref_vbox is pref_vbox\n\nstyle mute_all_button is check_button\nstyle mute_all_button_text is check_button_text\n\nstyle pref_label:\n    top_margin gui.pref_spacing\n    bottom_margin 3\n\nstyle pref_label_text:\n    yalign 1.0\n\nstyle pref_vbox:\n    xsize 338\n\nstyle radio_vbox:\n    spacing gui.pref_button_spacing\n\nstyle radio_button:\n    properties gui.button_properties(\"radio_button\")\n    foreground \"gui\/button\/radio_&#091;prefix_]foreground.png\"\n\nstyle radio_button_text:\n    properties gui.text_properties(\"radio_button\")\n\nstyle check_vbox:\n    spacing gui.pref_button_spacing\n\nstyle check_button:\n    properties gui.button_properties(\"check_button\")\n    foreground \"gui\/button\/check_&#091;prefix_]foreground.png\"\n\nstyle check_button_text:\n    properties gui.text_properties(\"check_button\")\n\nstyle slider_slider:\n    xsize 525\n\nstyle slider_button:\n    properties gui.button_properties(\"slider_button\")\n    yalign 0.5\n    left_margin 15\n\nstyle slider_button_text:\n    properties gui.text_properties(\"slider_button\")\n\nstyle slider_vbox:\n    xsize 675\n\n\n## History screen ##############################################################\n##\n## This is a screen that displays the dialogue history to the player. While\n## there isn't anything special about this screen, it does have to access the\n## dialogue history stored in _history_list.\n##\n## https:\/\/www.renpy.org\/doc\/html\/history.html\n\nscreen history():\n\n    tag menu\n\n    ## Avoid predicting this screen, as it can be very large.\n    predict False\n\n    use game_menu(_(\"History\"), scroll=(\"vpgrid\" if gui.history_height else \"viewport\"), yinitial=1.0, spacing=gui.history_spacing):\n\n        style_prefix \"history\"\n\n        for h in _history_list:\n\n            window:\n\n                ## This lays things out properly if history_height is None.\n                has fixed:\n                    yfit True\n\n                if h.who:\n\n                    label h.who:\n                        style \"history_name\"\n                        substitute False\n\n                        ## Take the color of the who text from the Character, if\n                        ## set.\n                        if \"color\" in h.who_args:\n                            text_color h.who_args&#091;\"color\"]\n\n                $ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)\n                text what:\n                    substitute False\n\n        if not _history_list:\n            label _(\"The dialogue history is empty.\")\n\n\n## This determines what tags are allowed to be displayed on the history screen.\n\ndefine gui.history_allow_tags = { \"alt\", \"noalt\", \"rt\", \"rb\", \"art\" }\n\n\nstyle history_window is empty\n\nstyle history_name is gui_label\nstyle history_name_text is gui_label_text\nstyle history_text is gui_text\n\nstyle history_label is gui_label\nstyle history_label_text is gui_label_text\n\nstyle history_window:\n    xfill True\n    ysize gui.history_height\n\nstyle history_name:\n    xpos gui.history_name_xpos\n    xanchor gui.history_name_xalign\n    ypos gui.history_name_ypos\n    xsize gui.history_name_width\n\nstyle history_name_text:\n    min_width gui.history_name_width\n    textalign gui.history_name_xalign\n\nstyle history_text:\n    xpos gui.history_text_xpos\n    ypos gui.history_text_ypos\n    xanchor gui.history_text_xalign\n    xsize gui.history_text_width\n    min_width gui.history_text_width\n    textalign gui.history_text_xalign\n    layout (\"subtitle\" if gui.history_text_xalign else \"tex\")\n\nstyle history_label:\n    xfill True\n\nstyle history_label_text:\n    xalign 0.5\n\n\n## Help screen #################################################################\n##\n## A screen that gives information about key and mouse bindings. It uses other\n## screens (keyboard_help, mouse_help, and gamepad_help) to display the actual\n## help.\n\nscreen help():\n\n    tag menu\n\n    default device = \"keyboard\"\n\n    use game_menu(_(\"Help\"), scroll=\"viewport\"):\n\n        style_prefix \"help\"\n\n        vbox:\n            spacing 23\n\n            hbox:\n\n                textbutton _(\"Keyboard\") action SetScreenVariable(\"device\", \"keyboard\")\n                textbutton _(\"Mouse\") action SetScreenVariable(\"device\", \"mouse\")\n\n                if GamepadExists():\n                    textbutton _(\"Gamepad\") action SetScreenVariable(\"device\", \"gamepad\")\n\n            if device == \"keyboard\":\n                use keyboard_help\n            elif device == \"mouse\":\n                use mouse_help\n            elif device == \"gamepad\":\n                use gamepad_help\n\n\nscreen keyboard_help():\n\n    hbox:\n        label _(\"Enter\")\n        text _(\"Advances dialogue and activates the interface.\")\n\n    hbox:\n        label _(\"Space\")\n        text _(\"Advances dialogue without selecting choices.\")\n\n    hbox:\n        label _(\"Arrow Keys\")\n        text _(\"Navigate the interface.\")\n\n    hbox:\n        label _(\"Escape\")\n        text _(\"Accesses the game menu.\")\n\n    hbox:\n        label _(\"Ctrl\")\n        text _(\"Skips dialogue while held down.\")\n\n    hbox:\n        label _(\"Tab\")\n        text _(\"Toggles dialogue skipping.\")\n\n    hbox:\n        label _(\"Page Up\")\n        text _(\"Rolls back to earlier dialogue.\")\n\n    hbox:\n        label _(\"Page Down\")\n        text _(\"Rolls forward to later dialogue.\")\n\n    hbox:\n        label \"H\"\n        text _(\"Hides the user interface.\")\n\n    hbox:\n        label \"S\"\n        text _(\"Takes a screenshot.\")\n\n    hbox:\n        label \"V\"\n        text _(\"Toggles assistive {a=https:\/\/www.renpy.org\/l\/voicing}self-voicing{\/a}.\")\n\n    hbox:\n        label \"Shift+A\"\n        text _(\"Opens the accessibility menu.\")\n\n\nscreen mouse_help():\n\n    hbox:\n        label _(\"Left Click\")\n        text _(\"Advances dialogue and activates the interface.\")\n\n    hbox:\n        label _(\"Middle Click\")\n        text _(\"Hides the user interface.\")\n\n    hbox:\n        label _(\"Right Click\")\n        text _(\"Accesses the game menu.\")\n\n    hbox:\n        label _(\"Mouse Wheel Up\")\n        text _(\"Rolls back to earlier dialogue.\")\n\n    hbox:\n        label _(\"Mouse Wheel Down\")\n        text _(\"Rolls forward to later dialogue.\")\n\n\nscreen gamepad_help():\n\n    hbox:\n        label _(\"Right Trigger\\nA\/Bottom Button\")\n        text _(\"Advances dialogue and activates the interface.\")\n\n    hbox:\n        label _(\"Left Trigger\\nLeft Shoulder\")\n        text _(\"Rolls back to earlier dialogue.\")\n\n    hbox:\n        label _(\"Right Shoulder\")\n        text _(\"Rolls forward to later dialogue.\")\n\n    hbox:\n        label _(\"D-Pad, Sticks\")\n        text _(\"Navigate the interface.\")\n\n    hbox:\n        label _(\"Start, Guide, B\/Right Button\")\n        text _(\"Accesses the game menu.\")\n\n    hbox:\n        label _(\"Y\/Top Button\")\n        text _(\"Hides the user interface.\")\n\n    textbutton _(\"Calibrate\") action GamepadCalibrate()\n\n\nstyle help_button is gui_button\nstyle help_button_text is gui_button_text\nstyle help_label is gui_label\nstyle help_label_text is gui_label_text\nstyle help_text is gui_text\n\nstyle help_button:\n    properties gui.button_properties(\"help_button\")\n    xmargin 12\n\nstyle help_button_text:\n    properties gui.text_properties(\"help_button\")\n\nstyle help_label:\n    xsize 375\n    right_padding 30\n\nstyle help_label_text:\n    size gui.text_size\n    xalign 1.0\n    textalign 1.0\n\n\n\n################################################################################\n## Additional screens\n################################################################################\n\n\n## Confirm screen ##############################################################\n##\n## The confirm screen is called when Ren'Py wants to ask the player a yes or no\n## question.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#confirm\n\nscreen confirm(message, yes_action, no_action):\n\n    ## Ensure other screens do not get input while this screen is displayed.\n    modal True\n\n    zorder 200\n\n    style_prefix \"confirm\"\n\n    add \"gui\/overlay\/confirm.png\"\n\n    frame:\n\n        vbox:\n            xalign .5\n            yalign .5\n            spacing 45\n\n            label _(message):\n                style \"confirm_prompt\"\n                xalign 0.5\n\n            hbox:\n                xalign 0.5\n                spacing 150\n\n                textbutton _(\"Yes\") action yes_action\n                textbutton _(\"No\") action no_action\n\n    ## Right-click and escape answer \"no\".\n    key \"game_menu\" action no_action\n\n\nstyle confirm_frame is gui_frame\nstyle confirm_prompt is gui_prompt\nstyle confirm_prompt_text is gui_prompt_text\nstyle confirm_button is gui_medium_button\nstyle confirm_button_text is gui_medium_button_text\n\nstyle confirm_frame:\n    background Frame(&#091; \"gui\/confirm_frame.png\", \"gui\/frame.png\"], gui.confirm_frame_borders, tile=gui.frame_tile)\n    padding gui.confirm_frame_borders.padding\n    xalign .5\n    yalign .5\n\nstyle confirm_prompt_text:\n    textalign 0.5\n    layout \"subtitle\"\n\nstyle confirm_button:\n    properties gui.button_properties(\"confirm_button\")\n\nstyle confirm_button_text:\n    properties gui.text_properties(\"confirm_button\")\n\n\n## Skip indicator screen #######################################################\n##\n## The skip_indicator screen is displayed to indicate that skipping is in\n## progress.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#skip-indicator\n\nscreen skip_indicator():\n\n    zorder 100\n    style_prefix \"skip\"\n\n    frame:\n\n        hbox:\n            spacing 9\n\n            text _(\"Skipping\")\n\n            text \"\u25b8\" at delayed_blink(0.0, 1.0) style \"skip_triangle\"\n            text \"\u25b8\" at delayed_blink(0.2, 1.0) style \"skip_triangle\"\n            text \"\u25b8\" at delayed_blink(0.4, 1.0) style \"skip_triangle\"\n\n\n## This transform is used to blink the arrows one after another.\ntransform delayed_blink(delay, cycle):\n    alpha .5\n\n    pause delay\n\n    block:\n        linear .2 alpha 1.0\n        pause .2\n        linear .2 alpha 0.5\n        pause (cycle - .4)\n        repeat\n\n\nstyle skip_frame is empty\nstyle skip_text is gui_text\nstyle skip_triangle is skip_text\n\nstyle skip_frame:\n    ypos gui.skip_ypos\n    background Frame(\"gui\/skip.png\", gui.skip_frame_borders, tile=gui.frame_tile)\n    padding gui.skip_frame_borders.padding\n\nstyle skip_text:\n    size gui.notify_text_size\n\nstyle skip_triangle:\n    ## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE\n    ## glyph in it.\n    font \"DejaVuSans.ttf\"\n\n\n## Notify screen ###############################################################\n##\n## The notify screen is used to show the player a message. (For example, when\n## the game is quicksaved or a screenshot has been taken.)\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#notify-screen\n\nscreen notify(message):\n\n    zorder 100\n    style_prefix \"notify\"\n\n    frame at notify_appear:\n        text \"&#091;message!tq]\"\n\n    timer 3.25 action Hide('notify')\n\n\ntransform notify_appear:\n    on show:\n        alpha 0\n        linear .25 alpha 1.0\n    on hide:\n        linear .5 alpha 0.0\n\n\nstyle notify_frame is empty\nstyle notify_text is gui_text\n\nstyle notify_frame:\n    ypos gui.notify_ypos\n\n    background Frame(\"gui\/notify.png\", gui.notify_frame_borders, tile=gui.frame_tile)\n    padding gui.notify_frame_borders.padding\n\nstyle notify_text:\n    properties gui.text_properties(\"notify\")\n\n\n## NVL screen ##################################################################\n##\n## This screen is used for NVL-mode dialogue and menus.\n##\n## https:\/\/www.renpy.org\/doc\/html\/screen_special.html#nvl\n\n\nscreen nvl(dialogue, items=None):\n\n    window:\n        style \"nvl_window\"\n\n        has vbox:\n            spacing gui.nvl_spacing\n\n        ## Displays dialogue in either a vpgrid or the vbox.\n        if gui.nvl_height:\n\n            vpgrid:\n                cols 1\n                yinitial 1.0\n\n                use nvl_dialogue(dialogue)\n\n        else:\n\n            use nvl_dialogue(dialogue)\n\n        ## Displays the menu, if given. The menu may be displayed incorrectly if\n        ## config.narrator_menu is set to True.\n        for i in items:\n\n            textbutton i.caption:\n                action i.action\n                style \"nvl_button\"\n\n    add SideImage() xalign 0.0 yalign 1.0\n\n\nscreen nvl_dialogue(dialogue):\n\n    for d in dialogue:\n\n        window:\n            id d.window_id\n\n            fixed:\n                yfit gui.nvl_height is None\n\n                if d.who is not None:\n\n                    text d.who:\n                        id d.who_id\n\n                text d.what:\n                    id d.what_id\n\n\n## This controls the maximum number of NVL-mode entries that can be displayed at\n## once.\ndefine config.nvl_list_length = gui.nvl_list_length\n\nstyle nvl_window is default\nstyle nvl_entry is default\n\nstyle nvl_label is say_label\nstyle nvl_dialogue is say_dialogue\n\nstyle nvl_button is button\nstyle nvl_button_text is button_text\n\nstyle nvl_window:\n    xfill True\n    yfill True\n\n    background \"gui\/nvl.png\"\n    padding gui.nvl_borders.padding\n\nstyle nvl_entry:\n    xfill True\n    ysize gui.nvl_height\n\nstyle nvl_label:\n    xpos gui.nvl_name_xpos\n    xanchor gui.nvl_name_xalign\n    ypos gui.nvl_name_ypos\n    yanchor 0.0\n    xsize gui.nvl_name_width\n    min_width gui.nvl_name_width\n    textalign gui.nvl_name_xalign\n\nstyle nvl_dialogue:\n    xpos gui.nvl_text_xpos\n    xanchor gui.nvl_text_xalign\n    ypos gui.nvl_text_ypos\n    xsize gui.nvl_text_width\n    min_width gui.nvl_text_width\n    textalign gui.nvl_text_xalign\n    layout (\"subtitle\" if gui.nvl_text_xalign else \"tex\")\n\nstyle nvl_thought:\n    xpos gui.nvl_thought_xpos\n    xanchor gui.nvl_thought_xalign\n    ypos gui.nvl_thought_ypos\n    xsize gui.nvl_thought_width\n    min_width gui.nvl_thought_width\n    textalign gui.nvl_thought_xalign\n    layout (\"subtitle\" if gui.nvl_text_xalign else \"tex\")\n\nstyle nvl_button:\n    properties gui.button_properties(\"nvl_button\")\n    xpos gui.nvl_button_xpos\n    xanchor gui.nvl_button_xalign\n\nstyle nvl_button_text:\n    properties gui.text_properties(\"nvl_button\")\n\n\n## Bubble screen ###############################################################\n##\n## The bubble screen is used to display dialogue to the player when using speech\n## bubbles. The bubble screen takes the same parameters as the say screen, must\n## create a displayable with the id of \"what\", and can create displayables with\n## the \"namebox\", \"who\", and \"window\" ids.\n##\n## https:\/\/www.renpy.org\/doc\/html\/bubble.html#bubble-screen\n\nscreen bubble(who, what):\n    style_prefix \"bubble\"\n\n    window:\n        id \"window\"\n\n        if who is not None:\n\n            window:\n                id \"namebox\"\n                style \"bubble_namebox\"\n\n                text who:\n                    id \"who\"\n\n        text what:\n            id \"what\"\n\nstyle bubble_window is empty\nstyle bubble_namebox is empty\nstyle bubble_who is default\nstyle bubble_what is default\n\nstyle bubble_window:\n    xpadding 30\n    top_padding 5\n    bottom_padding 5\n\nstyle bubble_namebox:\n    xalign 0.5\n\nstyle bubble_who:\n    xalign 0.5\n    textalign 0.5\n    color \"#000\"\n\nstyle bubble_what:\n    align (0.5, 0.5)\n    text_align 0.5\n    layout \"subtitle\"\n    color \"#000\"\n\ndefine bubble.frame = Frame(\"gui\/bubble.png\", 55, 55, 55, 95)\ndefine bubble.thoughtframe = Frame(\"gui\/thoughtbubble.png\", 55, 55, 55, 55)\n\ndefine bubble.properties = {\n    \"bottom_left\" : {\n        \"window_background\" : Transform(bubble.frame, xzoom=1, yzoom=1),\n        \"window_bottom_padding\" : 27,\n    },\n\n    \"bottom_right\" : {\n        \"window_background\" : Transform(bubble.frame, xzoom=-1, yzoom=1),\n        \"window_bottom_padding\" : 27,\n    },\n\n    \"top_left\" : {\n        \"window_background\" : Transform(bubble.frame, xzoom=1, yzoom=-1),\n        \"window_top_padding\" : 27,\n    },\n\n    \"top_right\" : {\n        \"window_background\" : Transform(bubble.frame, xzoom=-1, yzoom=-1),\n        \"window_top_padding\" : 27,\n    },\n\n    \"thought\" : {\n        \"window_background\" : bubble.thoughtframe,\n    }\n}\n\ndefine bubble.expand_area = {\n    \"bottom_left\" : (0, 0, 0, 22),\n    \"bottom_right\" : (0, 0, 0, 22),\n    \"top_left\" : (0, 22, 0, 0),\n    \"top_right\" : (0, 22, 0, 0),\n    \"thought\" : (0, 0, 0, 0),\n}\n\n\n\n################################################################################\n## Mobile Variants\n################################################################################\n\nstyle pref_vbox:\n    variant \"medium\"\n    xsize 675\n\n## Since a mouse may not be present, we replace the quick menu with a version\n## that uses fewer and bigger buttons that are easier to touch.\nscreen quick_menu():\n    variant \"touch\"\n\n    zorder 100\n\n    if quick_menu:\n\n        hbox:\n            style_prefix \"quick\"\n\n            xalign 0.5\n            yalign 1.0\n\n            textbutton _(\"Back\") action Rollback()\n            textbutton _(\"Skip\") action Skip() alternate Skip(fast=True, confirm=True)\n            textbutton _(\"Auto\") action Preference(\"auto-forward\", \"toggle\")\n            textbutton _(\"Menu\") action ShowMenu()\n\n\nstyle window:\n    variant \"small\"\n    background \"gui\/phone\/textbox.png\"\n\nstyle radio_button:\n    variant \"small\"\n    foreground \"gui\/phone\/button\/radio_&#091;prefix_]foreground.png\"\n\nstyle check_button:\n    variant \"small\"\n    foreground \"gui\/phone\/button\/check_&#091;prefix_]foreground.png\"\n\nstyle nvl_window:\n    variant \"small\"\n    background \"gui\/phone\/nvl.png\"\n\nstyle main_menu_frame:\n    variant \"small\"\n    background \"gui\/phone\/overlay\/main_menu.png\"\n\nstyle game_menu_outer_frame:\n    variant \"small\"\n    background \"gui\/phone\/overlay\/game_menu.png\"\n\nstyle game_menu_navigation_frame:\n    variant \"small\"\n    xsize 510\n\nstyle game_menu_content_frame:\n    variant \"small\"\n    top_margin 0\n\nstyle pref_vbox:\n    variant \"small\"\n    xsize 600\n\nstyle bar:\n    variant \"small\"\n    ysize gui.bar_size\n    left_bar Frame(\"gui\/phone\/bar\/left.png\", gui.bar_borders, tile=gui.bar_tile)\n    right_bar Frame(\"gui\/phone\/bar\/right.png\", gui.bar_borders, tile=gui.bar_tile)\n\nstyle vbar:\n    variant \"small\"\n    xsize gui.bar_size\n    top_bar Frame(\"gui\/phone\/bar\/top.png\", gui.vbar_borders, tile=gui.bar_tile)\n    bottom_bar Frame(\"gui\/phone\/bar\/bottom.png\", gui.vbar_borders, tile=gui.bar_tile)\n\nstyle scrollbar:\n    variant \"small\"\n    ysize gui.scrollbar_size\n    base_bar Frame(\"gui\/phone\/scrollbar\/horizontal_&#091;prefix_]bar.png\", gui.scrollbar_borders, tile=gui.scrollbar_tile)\n    thumb Frame(\"gui\/phone\/scrollbar\/horizontal_&#091;prefix_]thumb.png\", gui.scrollbar_borders, tile=gui.scrollbar_tile)\n\nstyle vscrollbar:\n    variant \"small\"\n    xsize gui.scrollbar_size\n    base_bar Frame(\"gui\/phone\/scrollbar\/vertical_&#091;prefix_]bar.png\", gui.vscrollbar_borders, tile=gui.scrollbar_tile)\n    thumb Frame(\"gui\/phone\/scrollbar\/vertical_&#091;prefix_]thumb.png\", gui.vscrollbar_borders, tile=gui.scrollbar_tile)\n\nstyle slider:\n    variant \"small\"\n    ysize gui.slider_size\n    base_bar Frame(\"gui\/phone\/slider\/horizontal_&#091;prefix_]bar.png\", gui.slider_borders, tile=gui.slider_tile)\n    thumb \"gui\/phone\/slider\/horizontal_&#091;prefix_]thumb.png\"\n\nstyle vslider:\n    variant \"small\"\n    xsize gui.slider_size\n    base_bar Frame(\"gui\/phone\/slider\/vertical_&#091;prefix_]bar.png\", gui.vslider_borders, tile=gui.slider_tile)\n    thumb \"gui\/phone\/slider\/vertical_&#091;prefix_]thumb.png\"\n\nstyle slider_vbox:\n    variant \"small\"\n    xsize None\n\nstyle slider_slider:\n    variant \"small\"\n    xsize 900\n\nstyle alt_say_label is say_label\nstyle alt_say_label:\n    color \"#808080\"  \n\nstyle alt_say_dialogue is say_dialogue\nstyle alt_say_dialogue:\n    color \"#000000\"  \n \nscreen affection_bartwo():\n    frame:\n        xalign 0.5\n        yalign 0.1\n        has vbox\n\n        text \"Affection Level\" xalign 0.5\n        bar value VariableValue(\"affection\", 0, 100) style \"affection_bartwo\"\n\nstyle affection_bar:\n    xmaximum 400  \n    ymaximum 30\n\nscreen affection_bartwo():\n\n    frame:\n        style \"affection_frame\"\n        align ( 0.615, 0.8)\n        has vbox\n\n        text \"Affection Level\" xalign 0.5\n\n        # Show the custom heart overlay image above the bar\n        add \"images\/vertical_heart.png\" xalign 0.5\n\n        # Vertical affection bar\n        bar value VariableValue(\"affection\", 0, 100) style \"affection_bar\"\n\nstyle affection_bar is bar:\n    xmaximum 30\n    ymaximum 300\n\nstyle affection_frame is frame\nstyle affection_frame:\n    padding (10, 10)\n    background None<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size wp-block-paragraph\"><strong>Options Script<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## This file contains options that can be changed to customize your game.\n##\n## Lines beginning with two '#' marks are comments, and you shouldn't uncomment\n## them. Lines beginning with a single '#' mark are commented-out code, and you\n## may want to uncomment them when appropriate.\n\n\n## Basics ######################################################################\n\n## A human-readable name of the game. This is used to set the default window\n## title, and shows up in the interface and error reports.\n##\n## The _() surrounding the string marks it as eligible for translation.\n\ndefine config.name = _(\"playtest 2\")\n\ndefine config.layers = &#091; 'master', 'transient', 'screens', 'over_screens', 'overlay' ]\n## Determines if the title given above is shown on the main menu screen. Set\n## this to False to hide the title.\n\ndefine gui.show_name = True\n\n\n## The version of the game.\n\ndefine config.version = \"1.0\"\n\n\n## Text that is placed on the game's about screen. Place the text between the\n## triple-quotes, and leave a blank line between paragraphs.\n\ndefine gui.about = _p(\"\"\"\n\"\"\")\n\n\n## A short name for the game used for executables and directories in the built\n## distribution. This must be ASCII-only, and must not contain spaces, colons,\n## or semicolons.\n\ndefine build.name = \"playtest2\"\n\n\n## Sounds and music ############################################################\n\n## These three variables control, among other things, which mixers are shown\n## to the player by default. Setting one of these to False will hide the\n## appropriate mixer.\n\ndefine config.has_sound = True\ndefine config.has_music = True\ndefine config.has_voice = True\n\n\n## To allow the user to play a test sound on the sound or voice channel,\n## uncomment a line below and use it to set a sample sound to play.\n\n# define config.sample_sound = \"sample-sound.ogg\"\n# define config.sample_voice = \"sample-voice.ogg\"\n\n\n## Uncomment the following line to set an audio file that will be played while\n## the player is at the main menu. This file will continue playing into the\n## game, until it is stopped or another file is played.\n\n# define config.main_menu_music = \"main-menu-theme.ogg\"\n\n\n## Transitions #################################################################\n##\n## These variables set transitions that are used when certain events occur.\n## Each variable should be set to a transition, or None to indicate that no\n## transition should be used.\n\n## Entering or exiting the game menu.\n\ndefine config.enter_transition = dissolve\ndefine config.exit_transition = dissolve\n\n\n## Between screens of the game menu.\n\ndefine config.intra_transition = dissolve\n\n\n## A transition that is used after a game has been loaded.\n\ndefine config.after_load_transition = None\n\n\n## Used when entering the main menu after the game has ended.\n\ndefine config.end_game_transition = None\n\n\n## A variable to set the transition used when the game starts does not exist.\n## Instead, use a with statement after showing the initial scene.\n\n\n## Window management ###########################################################\n##\n## This controls when the dialogue window is displayed. If \"show\", it is always\n## displayed. If \"hide\", it is only displayed when dialogue is present. If\n## \"auto\", the window is hidden before scene statements and shown again once\n## dialogue is displayed.\n##\n## After the game has started, this can be changed with the \"window show\",\n## \"window hide\", and \"window auto\" statements.\n\ndefine config.window = \"auto\"\n\n\n## Transitions used to show and hide the dialogue window\n\ndefine config.window_show_transition = Dissolve(.2)\ndefine config.window_hide_transition = Dissolve(.2)\n\n\n## Preference defaults #########################################################\n\n## Controls the default text speed. The default, 0, is infinite, while any other\n## number is the number of characters per second to type out.\n\ndefault preferences.text_cps = 0\n\n\n## The default auto-forward delay. Larger numbers lead to longer waits, with 0\n## to 30 being the valid range.\n\ndefault preferences.afm_time = 15\n\n\n## Save directory ##############################################################\n##\n## Controls the platform-specific place Ren'Py will place the save files for\n## this game. The save files will be placed in:\n##\n## Windows: %APPDATA\\RenPy\\&lt;config.save_directory&gt;\n##\n## Macintosh: $HOME\/Library\/RenPy\/&lt;config.save_directory&gt;\n##\n## Linux: $HOME\/.renpy\/&lt;config.save_directory&gt;\n##\n## This generally should not be changed, and if it is, should always be a\n## literal string, not an expression.\n\ndefine config.save_directory = \"playtest2-1743073636\"\n\n\n## Icon ########################################################################\n##\n## The icon displayed on the taskbar or dock.\n\ndefine config.window_icon = \"gui\/window_icon.png\"\n\n\n## Build configuration #########################################################\n##\n## This section controls how Ren'Py turns your project into distribution files.\n\ninit python:\n\n    ## The following functions take file patterns. File patterns are case-\n    ## insensitive, and matched against the path relative to the base directory,\n    ## with and without a leading \/. If multiple patterns match, the first is\n    ## used.\n    ##\n    ## In a pattern:\n    ##\n    ## \/ is the directory separator.\n    ##\n    ## * matches all characters, except the directory separator.\n    ##\n    ## ** matches all characters, including the directory separator.\n    ##\n    ## For example, \"*.txt\" matches txt files in the base directory, \"game\/\n    ## **.ogg\" matches ogg files in the game directory or any of its\n    ## subdirectories, and \"**.psd\" matches psd files anywhere in the project.\n\n    ## Classify files as None to exclude them from the built distributions.\n\n    build.classify('**~', None)\n    build.classify('**.bak', None)\n    build.classify('**\/.**', None)\n    build.classify('**\/#**', None)\n    build.classify('**\/thumbs.db', None)\n\n    ## To archive files, classify them as 'archive'.\n\n    # build.classify('game\/**.png', 'archive')\n    # build.classify('game\/**.jpg', 'archive')\n\n    ## Files matching documentation patterns are duplicated in a mac app build,\n    ## so they appear in both the app and the zip file.\n\n    build.documentation('*.html')\n    build.documentation('*.txt')\n\n\n## A Google Play license key is required to perform in-app purchases. It can be\n## found in the Google Play developer console, under \"Monetize\" &gt; \"Monetization\n## Setup\" &gt; \"Licensing\".\n\n# define build.google_play_key = \"...\"\n\n\n## The username and project name associated with an itch.io project, separated\n## by a slash.\n\n# define build.itch_project = \"renpytom\/test-project\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Below you will find the final scripts and the overall final look of the game. I have added a clip of the gameplay as well as some screenshots and the link to the game! \u2501\u2501\u2501\u2501\u2501\u2501\u2219\u22c6\u22c5\u22c6\u2219\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2219\u22c6\u22c5\u22c6\u2219\u2501\u2501\u2501\u2501\u2501\u2501 Game clips and Screenshots Annotated Final Scripts Main Script Screens Script Options Script<\/p>\n","protected":false},"author":25,"featured_media":0,"parent":70,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-37","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/pages\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":7,"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/pages\/37\/revisions"}],"predecessor-version":[{"id":418,"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/pages\/37\/revisions\/418"}],"up":[{"embeddable":true,"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/pages\/70"}],"wp:attachment":[{"href":"https:\/\/sites.wsagames.com\/violetsdates\/wp-json\/wp\/v2\/media?parent=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}