[{"content":"\u003cp\u003eEver heard the phrase \u0026ldquo;bull in a china shop?\u0026rdquo; These five words were the inspiration behind \u003cem\u003eBreakaBull\u003c/em\u003e, a VR game where you play as a bull running a tea shop.\u003c/p\u003e\n\u003cimg src=\"breakabull-main.png\" alt=\"Promotional splash screen\"\u003e\u003ch2 id=\"why-breakabull\"\u003eWhy BreakaBull?\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eBreakaBull\u003c/em\u003e is a cozy game, but it also has a unique level of difficulty to it. Since you play as a bull, you have to do everything with your hooves. This can range from making tea and serving customers to sweeping and doing soothing chores around the tea shop. Seems simple enough, right? But the difficulty lies with the hooves— without the luxury of opposable thumbs, every task requires careful consideration and grace. Gameplay is focused on navigating a world that isn\u0026rsquo;t built for you, but without any stressful stakes. Do your best to appease the clientele— or don\u0026rsquo;t. We won\u0026rsquo;t tell.\nEvery day, customers will come into the tea shop. They\u0026rsquo;re unique, too— each customer has their own backstory and will talk to you about their day, their past, their hopes and dreams\u0026hellip; every one of them is their own \u003cdel\u003eperson\u003c/del\u003e animal.\u003c/p\u003e\n\u003ch2 id=\"my-contributions\"\u003eMy Contributions\u003c/h2\u003e\n\u003cp\u003eI was onboarded onto the team halfway through development. My main job was to work as the narrative programmer, designing and implementing the systems that brought our characters to life. I mainly focused on new systems for dialogue, friendship, and the bagged tea tutorial. However, I was also in charge of adding smaller details related to characters, such as order preferences and spawning conditions.\u003c/p\u003e\n\u003ch3 id=\"order-preferences\"\u003eOrder Preferences\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-csharp\" data-lang=\"csharp\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 1\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003erand\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eUnityEngine\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eRandom\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eRange\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 2\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erand\u003c/span\u003e \u003cspan class=\"p\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 3\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 4\u003c/span\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emOrder\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eTeaTypes\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBlackTea\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 5\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 6\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erand\u003c/span\u003e \u003cspan class=\"p\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 7\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 8\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emOrder\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eTeaTypes\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eGreenTea\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 9\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e10\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003emOrder\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eTeaTypes\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHibiscusTea\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e11\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e12\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emOrder\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etemp\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eTeaTemp\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHot\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e13\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emOrder\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esize\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eTeaSize\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSmall\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"coffee-break\"\u003e\n  \u003ch4\u003eTea Orders\u003c/h4\u003e\n  \u003cp\u003e\nThe code above was from the initial addition of order preferences to the game. There were only three possible options: black tea, green tea, or hibiscus tea. Since then, we've added 5 new types of tea!\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003ch3 id=\"narrative\"\u003eNarrative\u003c/h3\u003e\n\u003cp\u003eIn addition to being our designated narrative programmer, I also contributed to some of \u003cem\u003eBreakaBull\u003c/em\u003e\u0026rsquo;s story writing as well! I mainly worked on writing the Salamander, the Deer, and the Tortoise.\u003c/p\u003e\n\u003cimg src=\"sammyGIF.gif\" alt=\"Sammy the salamander\"\u003e\u003ch4 id=\"the-salamander\"\u003eThe Salamander\u003c/h4\u003e\n\u003cp\u003eWhen designing the Salamander\u0026rsquo;s backstory, I really wanted to have him seem very carefree and silly. Sammy the salamander\u0026rsquo;s tea order is always 100% random, making them the only customer to not have any specific preference when ordering. This means he can end up with some truly horrific orders, but his laid-back nature allows him to laugh it off and drink it anyway.\nDespite Sammy being a silly, lighthearted character on the outside, they have a lot of feelings. When I started writing his story, I knew I wanted his main arc to focus on themes of community and belonging, and his story pieced itself together from there.\u003c/p\u003e\n\u003cdiv class=\"coffee-break\"\u003e\n  \u003ch4\u003eNames\u003c/h4\u003e\n  \u003cp\u003e\nPicking names for our characters took some time— Sammy could've ended up as Finn, Monty, or Flavio instead!\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003ch4 id=\"the-deer\"\u003eThe Deer\u003c/h4\u003e\n\u003cp\u003eThe Deer was one of the original four customers, created before I was onboarded onto the team. He was described as \u0026ldquo;creepy\u0026rdquo; and \u0026ldquo;unsettling,\u0026rdquo; so I took that and rolled with it. Duncan the deer ended up becoming a robotic, yet lovable character. When you first encounter him, he\u0026rsquo;s quiet, and talking with him can feel a bit awkward. After getting to know him, however, he likes to talk about his interests and what\u0026rsquo;s going on in his life.\u003c/p\u003e\n\u003ch4 id=\"the-tortoise\"\u003eThe Tortoise\u003c/h4\u003e\n\u003cp\u003eEdith the tortoise was easy to characterize— she\u0026rsquo;s an old lady who wants to talk about her grandchildren. Her character came together quickly from there, and soon enough, Edith had a whole family. She loves to tell the player all about her grandbabies and what they\u0026rsquo;ve been up to. Edith the tortoise loves a cozy, decorated store, and will frequently compliment the player on their decor as well!\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003eBreakaBull\u003c/em\u003e can be found on Steam and itch.io!\u003c/p\u003e\n\u003cp\u003eSteam- \u003ca href=\"https://store.steampowered.com/app/4453020/BreakaBull/\"\u003ehttps://store.steampowered.com/app/4453020/BreakaBull/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eitch- \u003ca href=\"https://maddilovessmiles.itch.io/breakabull\"\u003ehttps://maddilovessmiles.itch.io/breakabull\u003c/a\u003e\u003c/p\u003e\n","date":"2026-04-19","dateFormatted":"2026-04-19","excerpt":"\u003cp\u003eEver heard the phrase \u0026ldquo;bull in a china shop?\u0026rdquo; These five words were the inspiration behind \u003cem\u003eBreakaBull\u003c/em\u003e, a VR game where you play as a bull running a tea shop.\u003c/p\u003e\n\u003cimg src=\"breakabull-main.png\" alt=\"Promotional splash screen\"\u003e\u003ch2 id=\"why-breakabull\"\u003eWhy BreakaBull?\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eBreakaBull\u003c/em\u003e is …\u003c/p\u003e","featured":true,"mood":"Cozy","permalink":"http://panby34.github.io/river-ranz/posts/breakabull/","readingTime":4,"slug":"index","subtitle":"The cozy VR game about making tea","summary":"\u003cp\u003eEver heard the phrase \u0026ldquo;bull in a china shop?\u0026rdquo; These five words were the inspiration behind \u003cem\u003eBreakaBull\u003c/em\u003e, a VR game where you play as a bull running a tea shop.\u003c/p\u003e\n\u003cimg src=\"breakabull-main.png\" alt=\"Promotional splash screen\"\u003e\u003ch2 id=\"why-breakabull\"\u003eWhy BreakaBull?\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eBreakaBull\u003c/em\u003e is a cozy game, but it also has a unique level of difficulty to it. Since you play as a bull, you have to do everything with your hooves. This can range from making tea and serving customers to sweeping and doing soothing chores around the tea shop. Seems simple enough, right? But the difficulty lies with the hooves— without the luxury of opposable thumbs, every task requires careful consideration and grace. Gameplay is focused on navigating a world that isn\u0026rsquo;t built for you, but without any stressful stakes. Do your best to appease the clientele— or don\u0026rsquo;t. We won\u0026rsquo;t tell.\nEvery day, customers will come into the tea shop. They\u0026rsquo;re unique, too— each customer has their own backstory and will talk to you about their day, their past, their hopes and dreams\u0026hellip; every one of them is their own \u003cdel\u003eperson\u003c/del\u003e animal.\u003c/p\u003e","tags":["VR","Programming","Narrative","AI","Unity","3D"],"title":"BreakaBull","url":"http://panby34.github.io/river-ranz/posts/breakabull/","wordCount":644},{"content":"\u003cp\u003e\u003cem\u003eHeart of the Cards\u003c/em\u003e was born from the intersection of dating sims and deckbuilders. For this 3-month project, our team worked to bring the idea to life. Unfortunately, things fell through, and in the end, the project ended up feeling incomplete. We had plans to have 3 characters for our alpha build, but we ended up with only one.\u003c/p\u003e\n\u003cimg src=\"hotc-premium.png\" alt=\"Image of a laptop screen asking the player to upgrade to premium\"\u003e\u003ch2 id=\"our-intention\"\u003eOur Intention\u003c/h2\u003e\n\u003cp\u003eWe wanted to create something that hadn\u0026rsquo;t been done before. The team was heavy on narrative specialists, and so we absolutely needed to have fun characters and an interesting story. Our game idea was formed fairly quickly, and the team was excited about the prospect of \u003cem\u003eHeart of the Cards\u003c/em\u003e.\u003c/p\u003e\n\u003ch2 id=\"my-role\"\u003eMy Role\u003c/h2\u003e\n\u003cp\u003eWhile I never had the official title of lead programmer, I ended up filling that role for the entire length of the project. I handled task distribution for our programming team and answered questions from other disciplines while also working on the project. I handled the majority of our UI, and \u003cem\u003eHeart of the Cards\u003c/em\u003e is a very UI-heavy game.\u003c/p\u003e\n\u003cimg src=\"hotc-ui.png\" alt=\"Image of the UI layout for the date portion of the game, cards omitted\"\u003e\u003cp\u003eIn addition to the UI, I also handled all of the card mechanics. We had 5 main types of cards, each with their own type of effect. There was a lot of math behind the scenes to make all the cards work as intended!\u003c/p\u003e\n\u003cimg src=\"hotc-cards.png\" alt=\"Image of a hand of cards\"\u003e\u003ch2 id=\"so-what-happened\"\u003eSo\u0026hellip; What Happened?\u003c/h2\u003e\n\u003cp\u003eTo make a long story short, the design scope was too much. We had only 2 designers on the team, and with all the mechanics and card types available in \u003cem\u003eHeart of the Cards\u003c/em\u003e, they were stretched too thin. I joined some of the design meetings as a faux designer, but by that point in development, it was already too late. This resulted in a lot of half-baked ideas and unexplained mechanics, which made the game confusing and nearly impossible to understand. Additionally, because the design scope was so high, progress on programming had to be pushed back, resulting in a very intense programming crunch toward the end of the project. \u003cem\u003eHeart of the Cards\u003c/em\u003e was eventually cancelled, and the team disbanded.\u003c/p\u003e\n\u003ch3 id=\"what-was-learned\"\u003eWhat Was Learned?\u003c/h3\u003e\n\u003cp\u003eThe main programming challenge in \u003cem\u003eHeart of the Cards\u003c/em\u003e was data management. Because there are so many ways to categorize cards, we had to be careful with the way we organized them. There were a lot of things that had to be considered during development, and it was easy for wires to get crossed with all the different UI elements we were using. Additionally, because programming process was pushed back, we had to settle for functionality over organization, and as a result, the project scripts ended up messy and confusingly organized.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-csharp\" data-lang=\"csharp\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 1\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eCard\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 2\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 3\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"kt\"\u003estring\u003c/span\u003e \u003cspan class=\"n\"\u003ecardName\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;null\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 4\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"kt\"\u003estring\u003c/span\u003e \u003cspan class=\"n\"\u003ecardDescription\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 5\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eSprite\u003c/span\u003e \u003cspan class=\"n\"\u003ecardSprite\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eResources\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eLoad\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eSprite\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Sprites/card\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 6\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eactionValue\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 7\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eGameManager\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCardTypes\u003c/span\u003e \u003cspan class=\"n\"\u003ecardType\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 8\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eSprite\u003c/span\u003e \u003cspan class=\"n\"\u003ecardDesign\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e 9\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e10\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003echarmValue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecringeValue\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e11\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eChillMechanic\u003c/span\u003e \u003cspan class=\"n\"\u003echill\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e12\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eBoostMechanic\u003c/span\u003e \u003cspan class=\"n\"\u003eboost\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e13\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eAddActionsMechanic\u003c/span\u003e \u003cspan class=\"n\"\u003eaddActions\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e14\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"n\"\u003eDrawCardMechanic\u003c/span\u003e \u003cspan class=\"n\"\u003edrawCards\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e15\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e16\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"kt\"\u003estring\u003c/span\u003e \u003cspan class=\"n\"\u003equestionResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e17\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"kt\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e[]\u003c/span\u003e \u003cspan class=\"n\"\u003ecardResponse\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"kt\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e[]\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e18\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e19\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"kt\"\u003ebool\u003c/span\u003e \u003cspan class=\"n\"\u003ecanBeDiscarded\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\"\u003e20\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"coffee-break\"\u003e\n  \u003ch4\u003eClass Constructors\u003c/h4\u003e\n  \u003cp\u003e\nConstructors are an easy way to create a class object. The card class constructor has been omitted from the code snippet above to be succinct, but it was a crucial part of the game's functionality!\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cp\u003eHowever, I do believe I learned a lot of new skills during my time on the \u003cem\u003eHeart of the Cards\u003c/em\u003e team. Being part of design meetings allowed me to learn some new game design skills, but also allowed me to work on decision-making and team management. Working with the other programmer on the team gave me the chance to practice my leadership skills, divvying up tasks and checking in periodically during development. I also acted as the sound designer, which was a new discipline for me, but I managed to edit together some free sound assets in a way that fits the game\u0026rsquo;s feel decently well.\u003c/p\u003e\n\u003ch3 id=\"what-would-i-do-differently\"\u003eWhat Would I Do Differently?\u003c/h3\u003e\n\u003cp\u003eIf I were to do it all again, I think I would\u0026rsquo;ve tried to take on more of a leadership role earlier on in the project. I would\u0026rsquo;ve attended more of the early design meetings, gotten those mechanics ironed out, and implemented them. Organization would definitely come more into play— clean, properly named files, and more detailed comments in the code. I also think pushing for the designers to get in-engine would\u0026rsquo;ve helped with development, especially once the mechanics were decided on and fleshed out. Adding a real tutorial earlier in development also would\u0026rsquo;ve provided a lot in terms of player comprehension, something \u003cem\u003eHeart of the Cards\u003c/em\u003e was sorely lacking.\u003c/p\u003e\n\u003cp\u003eWhile \u003cem\u003eHeart of the Cards\u003c/em\u003e isn\u0026rsquo;t the most impressive project I\u0026rsquo;ve been a part of, I\u0026rsquo;m still grateful for the experience and all I learned from it. I believe that working on this game taught me a lot and has given me more foresight for scope problems and potential crunch time. I feel more capable in my leadership abilities and teamwork skills as well. I understand how to navigate difficult situations and how to communicate better with teammates about issues that arise during development. Ultimately, \u003cem\u003eHeart of the Cards\u003c/em\u003e was a helpful learning experience for me, and I\u0026rsquo;m hopeful that I will be able to use my knowledge to improve any future teams I work with.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003eHeart of the Cards\u003c/em\u003e can be found on my itch.io! \u003ca href=\"https://across-violet-skies.itch.io/heart-of-the-cards\"\u003ehttps://across-violet-skies.itch.io/heart-of-the-cards\u003c/a\u003e\u003c/p\u003e\n","date":"2025-11-09","dateFormatted":"2025-11-09","excerpt":"\u003cp\u003e\u003cem\u003eHeart of the Cards\u003c/em\u003e was born from the intersection of dating sims and deckbuilders. For this 3-month project, our team worked to bring the idea to life. Unfortunately, things fell through, and in the …\u003c/p\u003e","featured":null,"mood":"Analytical","permalink":"http://panby34.github.io/river-ranz/posts/heartofthecards/","readingTime":5,"slug":"index","subtitle":"A dating sim with strategy","summary":"\u003cp\u003e\u003cem\u003eHeart of the Cards\u003c/em\u003e was born from the intersection of dating sims and deckbuilders. For this 3-month project, our team worked to bring the idea to life. Unfortunately, things fell through, and in the end, the project ended up feeling incomplete. We had plans to have 3 characters for our alpha build, but we ended up with only one.\u003c/p\u003e\n\u003cimg src=\"hotc-premium.png\" alt=\"Image of a laptop screen asking the player to upgrade to premium\"\u003e\u003ch2 id=\"our-intention\"\u003eOur Intention\u003c/h2\u003e\n\u003cp\u003eWe wanted to create something that hadn\u0026rsquo;t been done before. The team was heavy on narrative specialists, and so we absolutely needed to have fun characters and an interesting story. Our game idea was formed fairly quickly, and the team was excited about the prospect of \u003cem\u003eHeart of the Cards\u003c/em\u003e.\u003c/p\u003e","tags":["Programming","UI","Unity","2D"],"title":"Heart of the Cards","url":"http://panby34.github.io/river-ranz/posts/heartofthecards/","wordCount":900},{"content":"\u003cp\u003eIf there\u0026rsquo;s one thing the \u003cem\u003eNest Quest\u003c/em\u003e team loved, it was ducks. We knew from the start that our game needed to involve them in some way, and it didn\u0026rsquo;t take long after that for our concept to come together. We decided to aim for something both children and adults could enjoy, with bright colors, cute sounds, and adorable mechanics. And with that, \u003cem\u003eNest Quest\u003c/em\u003e was born.\u003c/p\u003e\n\u003cimg src=\"nestQuest-nest.png\" alt=\"Image of the nest around mid to late game\"\u003e\u003ch2 id=\"my-role\"\u003eMy Role\u003c/h2\u003e\n\u003cp\u003eAs one of two programmers for \u003cem\u003eNest Quest\u003c/em\u003e, I worked on a number of mechanics for the game. I implemented design ideas, tested them, and fixed bugs as they arose. We only had 3 months to complete this project, and thus it was important to focus on functionality and appearances to give the illusion of what the player expects.\u003c/p\u003e\n\u003ch3 id=\"creative-solutions\"\u003eCreative Solutions\u003c/h3\u003e\n\u003cp\u003eMid-development, the team decided we wanted to add swimming to the game. However, water physics can get complicated, and with our deadline fast approaching, there was no time to risk on potential bug fixing. Instead, I created an invisible platform under the water\u0026rsquo;s surface and animated it with a slow, wave-like motion. When the player gets in the water, it simulates the slow bobbing motion you would expect from swimming, but without any extra physics or mechanics involved.\u003c/p\u003e\n\u003cimg src=\"nestQuest-water.gif\" alt=\"Gif of the mother duck bobbing in water\"\u003e\u003ch3 id=\"duckling-ai\"\u003eDuckling AI\u003c/h3\u003e\n\u003cp\u003eOne of the things we knew we wanted was a gaggle of little ducklings to follow the player around. After collecting a duckling, it would start to follow the player, just like in real life! Designing the pathfinding and navigation AI for the duckling was my task, and it proved to be more difficult than expected. I was new to Unreal Engine and 3D game development, but with a ton of research and more trial-and-error than I\u0026rsquo;d like to admit, the current duckling AI was born. It has some flaws, but I implemented several features to help mitigate that.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eTeleportation\u003c/strong\u003e. The player, as an adult duck, can move faster than the ducklings. Usually, this isn\u0026rsquo;t much of an issue, but if the player chooses to sprint constantly, ducklings are likely to get left behind. Not only that, but being so small, they easily get caught on obstacles and and unable to free themselves. This issue proved difficult, so I added in that ducklings could teleport to the player if they got too far away. This way, there\u0026rsquo;s no more lost ducklings!\u003c/li\u003e\n\u003c/ul\u003e\n\u003cimg src=\"nestQuest-teleport.gif\" alt=\"Gif of the ducklings teleporting to the player\"\u003e\u003chr\u003e\n\u003cp\u003e\u003cem\u003eNest Quest\u003c/em\u003e can be found on itch.io! \u003ca href=\"https://maddilovessmiles.itch.io/nest-quest\"\u003ehttps://maddilovessmiles.itch.io/nest-quest\u003c/a\u003e\u003c/p\u003e\n","date":"2025-04-19","dateFormatted":"2025-04-19","excerpt":"\u003cp\u003eIf there\u0026rsquo;s one thing the \u003cem\u003eNest Quest\u003c/em\u003e team loved, it was ducks. We knew from the start that our game needed to involve them in some way, and it didn\u0026rsquo;t take long after that for our concept to …\u003c/p\u003e","featured":null,"mood":"Hopeful","permalink":"http://panby34.github.io/river-ranz/posts/nestquest/","readingTime":2,"slug":"index","subtitle":"A cute, child-friendly game.","summary":"\u003cp\u003eIf there\u0026rsquo;s one thing the \u003cem\u003eNest Quest\u003c/em\u003e team loved, it was ducks. We knew from the start that our game needed to involve them in some way, and it didn\u0026rsquo;t take long after that for our concept to come together. We decided to aim for something both children and adults could enjoy, with bright colors, cute sounds, and adorable mechanics. And with that, \u003cem\u003eNest Quest\u003c/em\u003e was born.\u003c/p\u003e\n\u003cimg src=\"nestQuest-nest.png\" alt=\"Image of the nest around mid to late game\"\u003e\u003ch2 id=\"my-role\"\u003eMy Role\u003c/h2\u003e\n\u003cp\u003eAs one of two programmers for \u003cem\u003eNest Quest\u003c/em\u003e, I worked on a number of mechanics for the game. I implemented design ideas, tested them, and fixed bugs as they arose. We only had 3 months to complete this project, and thus it was important to focus on functionality and appearances to give the illusion of what the player expects.\u003c/p\u003e","tags":["Programming","Narrative","Unreal Engine","3D"],"title":"Nest Quest","url":"http://panby34.github.io/river-ranz/posts/nestquest/","wordCount":399},{"content":"\u003cp\u003e\u003cem\u003eHeartbrook\u003c/em\u003e is a short dating sim developed in just under a month. It offers 3 unique characters, each with different stories and various endings. As the player, you make choices and talk to these characters, eventually ending in a date with one of them (if you\u0026rsquo;re lucky)! This was a project I was excited to work on since dialogue is one of my narrative specialties.\u003c/p\u003e\n\u003cimg src=\"heartbrook-kerrick.png\" alt=\"Image of Kerrick greeting the player\"\u003e\u003cp\u003eSince \u003cem\u003eHeartbrook\u003c/em\u003e was a passion project, I didn\u0026rsquo;t have a team to fall back on. I collaborated with an artist friend of mine, and she drew the characters and their various expressions, but everything else was my responsibility. I designed, wrote, and programmed the entirety of the game, and I also drew the backgrounds. Art isn\u0026rsquo;t one of my strong suits, but I\u0026rsquo;d say it works well enough for a short narrative game!\u003c/p\u003e\n\u003cimg src=\"heartbrook-fisk.png\" alt=\"Image of Fisk on the beach\"\u003e\u003ch2 id=\"characters\"\u003eCharacters\u003c/h2\u003e\n\u003cp\u003eBecause I was the only writer and designer on \u003cem\u003eHeartbrook\u003c/em\u003e, I only had enough time to include 3 characters. For those characters, I wanted to include a lot of variety. The citizens of \u003cem\u003eHeartbrook\u003c/em\u003e are a mix of various mythical creatures and humans. For the initial release, we had Fisk, a merman, Aitana, an orc, and Kerrick, a human with an affinity for magical potions. Each is very different in personality— Fisk is grumpy and guarded, Aitana is brash and kind, and Kerrick is sweet and clueless. It was important to me that they were each their own distinct character, especially since there were only 3 to choose from.\u003c/p\u003e\n\u003cimg src=\"heartbrook-aitana.png\" alt=\"Image of Aitana apologizing to the player\"\u003e\u003ch2 id=\"expansion-plans\"\u003eExpansion Plans\u003c/h2\u003e\n\u003cp\u003eWhile \u003cem\u003eHeartbrook\u003c/em\u003e is currently a full game, it could benefit from more content. I have plans to add more characters and endings eventually. This project is on the back burner for now, unfortunately, but I do want to add more to it someday. I have 2 new character designs planned for the next update already!\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003eHeartbrook\u003c/em\u003e can be found on my itch.io! \u003ca href=\"https://across-violet-skies.itch.io/heartbrook\"\u003ehttps://across-violet-skies.itch.io/heartbrook\u003c/a\u003e\u003c/p\u003e\n","date":"2024-11-10","dateFormatted":"2024-11-10","excerpt":"\u003cp\u003e\u003cem\u003eHeartbrook\u003c/em\u003e is a short dating sim developed in just under a month. It offers 3 unique characters, each with different stories and various endings. As the player, you make choices and talk to these …\u003c/p\u003e","featured":null,"mood":"Passionate","permalink":"http://panby34.github.io/river-ranz/posts/heartbrook/","readingTime":2,"slug":"index","subtitle":"A dating sim developed in a month.","summary":"\u003cp\u003e\u003cem\u003eHeartbrook\u003c/em\u003e is a short dating sim developed in just under a month. It offers 3 unique characters, each with different stories and various endings. As the player, you make choices and talk to these characters, eventually ending in a date with one of them (if you\u0026rsquo;re lucky)! This was a project I was excited to work on since dialogue is one of my narrative specialties.\u003c/p\u003e\n\u003cimg src=\"heartbrook-kerrick.png\" alt=\"Image of Kerrick greeting the player\"\u003e\u003cp\u003eSince \u003cem\u003eHeartbrook\u003c/em\u003e was a passion project, I didn\u0026rsquo;t have a team to fall back on. I collaborated with an artist friend of mine, and she drew the characters and their various expressions, but everything else was my responsibility. I designed, wrote, and programmed the entirety of the game, and I also drew the backgrounds. Art isn\u0026rsquo;t one of my strong suits, but I\u0026rsquo;d say it works well enough for a short narrative game!\u003c/p\u003e","tags":["Narrative","visual novel","RenPy","2D"],"title":"Heartbrook","url":"http://panby34.github.io/river-ranz/posts/heartbrook/","wordCount":313},{"content":"\u003cp\u003e\u003cem\u003eWith Love\u003c/em\u003e is a short visual novel developed over the course of 3 weeks. You take yourself on a solo roadtrip around either New England or New York state, visiting 5 locations in any order. During these stops, there\u0026rsquo;s no dialogue or character interactions. Instead, the story unfolds through postcards you write from each location, personalized for the specific decisions you make on your trip. Each postcard has an air of sadness to it, lightly masked by humor and a lighthearted, informal writing style.\u003c/p\u003e\n\u003cimg src=\"withLove-postcard.png\" alt=\"Image of an in-game postcard\"\u003e\u003ch3 id=\"player-projection\"\u003ePlayer Projection\u003c/h3\u003e\n\u003cp\u003eWhen I started writing the player character (PC), I knew I wanted them to be easy for a wide variety of people to project onto. To achieve this, I aimed for a characterization that was, for the most part, relatable to the general public. To achieve this, I first made sure the PC was entirely gender-neutral. There\u0026rsquo;s no use of any gendered pronouns in the game, which makes their gender whatever the player decides they are. This way, players are more likely to think of the PC as the same gender as them, making the storyline feel more personalized.\u003c/p\u003e\n\u003cp\u003eNow, gender isn\u0026rsquo;t the only thing that makes a character feel relatable. Behavior and personality play a huge role in this as well. To work with this, I wrote the narration as fairly general, but still customizable. Players have the option to make a few simple decisions during their trip that play a role in narration later on. For example, towards the beginning of the game, the player can choose whether to double-check their bags or just leave the house. This decision doesn\u0026rsquo;t affect the ending at all, but at a specific point in the game, they\u0026rsquo;ll either discover that they forgot something (getting some mildly frustrated narration) or they\u0026rsquo;ll get to use the item they remembered to grab. I wanted to use this as a narrative technique to give the player a little extra freedom to make choices, and ended up turning it into something to further help players identify with the PC.\u003c/p\u003e\n\u003cimg src=\"withLove-sunglasses.gif\" alt=\"Player narration, affected by a previous choice\"\u003e\u003cp\u003eLast, but certainly not least, is name customization. When starting the game, players can put in any name of their choice. Of course, not every player is going to input their actual name, but the hope is that players who do use their name, or at least something they identify with, will find it satisfying to have each postcard signed by them. Custom names are a really simple way to add that extra touch of personalization to a game, and that was crucial for \u003cem\u003eWith Love\u003c/em\u003e.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003eWith Love\u003c/em\u003e can be found on itch.io! \u003ca href=\"https://across-violet-skies.itch.io/with-love\"\u003ehttps://across-violet-skies.itch.io/with-love\u003c/a\u003e\u003c/p\u003e\n","date":"2024-04-29","dateFormatted":"2024-04-29","excerpt":"\u003cp\u003e\u003cem\u003eWith Love\u003c/em\u003e is a short visual novel developed over the course of 3 weeks. You take yourself on a solo roadtrip around either New England or New York state, visiting 5 locations in any order. During …\u003c/p\u003e","featured":null,"mood":"Contemplative","permalink":"http://panby34.github.io/river-ranz/posts/withlove/","readingTime":3,"slug":"index","subtitle":"A short visual novel with unique storytelling","summary":"\u003cp\u003e\u003cem\u003eWith Love\u003c/em\u003e is a short visual novel developed over the course of 3 weeks. You take yourself on a solo roadtrip around either New England or New York state, visiting 5 locations in any order. During these stops, there\u0026rsquo;s no dialogue or character interactions. Instead, the story unfolds through postcards you write from each location, personalized for the specific decisions you make on your trip. Each postcard has an air of sadness to it, lightly masked by humor and a lighthearted, informal writing style.\u003c/p\u003e","tags":["Narrative","visual novel","RenPy","2D"],"title":"With Love","url":"http://panby34.github.io/river-ranz/posts/withlove/","wordCount":433}]