<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Projects on Left Jun</title>
        <link>/en/projects/</link>
        <description>Recent content in Projects on Left Jun</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sat, 28 Mar 2026 10:00:00 +0800</lastBuildDate><atom:link href="/en/projects/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Wireless Remote-Control System for a Wind-Powered Smart Boat Model</title>
            <link>/en/projects/smart-boat/</link>
            <pubDate>Sat, 28 Mar 2026 10:00:00 +0800</pubDate>
            <guid>/en/projects/smart-boat/</guid>
            <description>&lt;img src=&#34;/&#34; alt=&#34;Featured image of post Wireless Remote-Control System for a Wind-Powered Smart Boat Model&#34; /&gt;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&lt;p&gt;This is a complete software-hardware project. The core goal was to build a wireless control system consisting of a handheld remote and an onboard boat receiver.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-role&#34;&gt;My role&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Served as team lead, main programmer, and hardware designer.&lt;/li&gt;&#xA;&lt;li&gt;Independently completed software and hardware development and debugging for the remote controller and receiver.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;technical-implementation&#34;&gt;Technical implementation&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Implemented SPI, ADC, PWM, and related drivers based on STM32F103C8T6 and HAL.&lt;/li&gt;&#xA;&lt;li&gt;Designed the PCB with JLC EDA and completed soldering.&lt;/li&gt;&#xA;&lt;li&gt;Optimized power ripple and joystick jitter with parallel capacitors and software filtering.&lt;/li&gt;&#xA;&lt;li&gt;Completed input sampling, PWM mapping, and a version that could operate on water.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;screenshots-and-engineering-details&#34;&gt;Screenshots and Engineering Details&#xA;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/projects/smart-boat/screenshot-stm32-pinout.png&#34;&#xA;&#x9;width=&#34;1126&#34;&#xA;&#x9;height=&#34;1000&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;STM32CubeMX pinout configuration&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;112&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;270px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The pinout is built around the STM32F103C8T6, including ADC input, SPI communication, USART debugging, and basic GPIO output.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/smart-boat/screenshot-schematic.png&#34;&#xA;&#x9;width=&#34;1575&#34;&#xA;&#x9;height=&#34;983&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Receiver schematic&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;160&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;384px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The schematic includes 3.3V regulation, power filtering, crystal oscillator, nRF24L01 communication module, status LED, and external connectors.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/smart-boat/screenshot-code.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1599&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;STM32CubeIDE code debugging&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;160&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;384px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The code side handles ADC sampling, throttle and steering mapping, nRF24L01 data transmission, and LED feedback, forming the control chain from remote input to onboard actuation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;result&#34;&gt;Result&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Became one of the few teams to finish the race and reached the final stage.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item><item>
            <title>Asherah&#39;s Lament</title>
            <link>/en/projects/ashe-lament/</link>
            <pubDate>Fri, 20 Mar 2026 10:00:00 +0800</pubDate>
            <guid>/en/projects/ashe-lament/</guid>
            <description>&lt;img src=&#34;/&#34; alt=&#34;Featured image of post Asherah&#39;s Lament&#34; /&gt;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&lt;p&gt;Asherah&amp;rsquo;s Lament is a 2D platformer and resource-management game created for the Tencent University Game Extreme Development Competition, Chengdu site. The player becomes the last &amp;ldquo;root speaker&amp;rdquo; in a dying world sustained by Asherah, the Mother Tree. To delay the final silence, the player travels between underground roots and the surface trunk, gathers remaining spirit energy, builds shortcuts, climbs upward, and tries to return the last power to the heart of the world before their own energy runs out.&lt;/p&gt;&#xA;&lt;p&gt;The project is not only about moving quickly or jumping precisely. Its central challenge is management: time, resources, risk, and route planning all compete with each other.&lt;/p&gt;&#xA;&lt;h2 id=&#34;worldbuilding&#34;&gt;Worldbuilding&#xA;&lt;/h2&gt;&lt;p&gt;The story takes place during the Great Withering. Asherah was once the source of life: her roots reached into the earth, her crown touched the stars, and spirit energy flowed through her like a living cycle. As that energy dries up, forests lose color, civilizations scatter, and the Mother Tree enters a long final decline.&lt;/p&gt;&#xA;&lt;p&gt;The player is the last root speaker and the final manager of this fading world. There are no legendary heroes left, only concrete decisions: collect a little more energy or return before it is too late, spend bones to build a shortcut or save them for later, move faster through a risky form or preserve spirit energy for the ending.&lt;/p&gt;&#xA;&lt;p&gt;In this setting, &amp;ldquo;management&amp;rdquo; is not an abstract theme. It is the last attempt to maintain order inside an irreversible collapse.&lt;/p&gt;&#xA;&lt;h2 id=&#34;core-gameplay&#34;&gt;Core Gameplay&#xA;&lt;/h2&gt;&lt;p&gt;The game is built around two connected loops.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Underground exploration: the player enters root-like spaces under strict time pressure, using platforming skills to collect spirit energy and bones.&lt;/li&gt;&#xA;&lt;li&gt;Surface climbing: the player spends gathered resources to climb the dead trunk of the Mother Tree, build shortcuts, and reduce the difficulty of later attempts.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Spirit energy functions as health, action fuel, time pressure, and ending resource at once. It naturally drains over time and can be consumed faster through risky actions. The amount of spirit energy delivered at the end determines the ending, directly connecting resource management to narrative outcome.&lt;/p&gt;&#xA;&lt;h2 id=&#34;screenshots-and-systems&#34;&gt;Screenshots and Systems&#xA;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-notice-board.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Gameplay notice board&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The notice board explains spirit energy, bones, the timer, enhanced form, and shortcut construction in one screen, helping players understand the resource pressure before entering the main loop.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-dialogue.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Story dialogue box&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The dialogue system carries both progression and worldbuilding. Qizhi, the remaining echo of the Mother Tree&amp;rsquo;s will, introduces rules and gives emotional guidance during the journey.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-underground.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Enhanced form and underground collection&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The underground area focuses on time pressure and execution efficiency. The player can enter an enhanced form to move more effectively, but spirit energy drains faster, forcing a tradeoff between reward and risk.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-shortcut.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1438&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Surface climbing and shortcut construction&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;427px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The surface phase is more about long-term planning. Players can spend resources to build shortcuts, turning underground collection results into route advantages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-speed-board.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Spirit-energy prompt&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Process prompts are layered directly into the scene, giving strong feedback when player actions consume or change core resources.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-ending.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Ending screen&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Different endings are triggered by the final amount of delivered spirit energy, connecting the player&amp;rsquo;s resource-management performance to the narrative conclusion.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-epilogue.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Epilogue screen&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The epilogue visualizes a new pulse after decay, echoing the game&amp;rsquo;s themes of cycle, sacrifice, and renewal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/ashe-lament/screenshot-staff.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Staff roll&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The staff screen records the team roles and gives the 72-hour collaboration a clear closing note.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-role&#34;&gt;My Role&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Served as team lead, main programmer, gameplay designer, and music producer.&lt;/li&gt;&#xA;&lt;li&gt;Designed and implemented core movement, dual-state switching, spirit energy consumption, collection loops, shortcut construction, and multi-ending checks.&lt;/li&gt;&#xA;&lt;li&gt;Coordinated the overall flow from underground collection to surface climbing to ending feedback.&lt;/li&gt;&#xA;&lt;li&gt;Worked with writing and art teammates to translate concepts such as the Mother Tree, root speaker, Great Withering, and spirit energy into scenes, UI, and progression.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;technical-implementation&#34;&gt;Technical Implementation&#xA;&lt;/h2&gt;&lt;p&gt;The game was developed in Unity, with the main challenge being to build a complete and adjustable system under a short production window.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Implemented movement, jumping, dashing, wall detection, respawn, area triggers, and dual-state switching.&lt;/li&gt;&#xA;&lt;li&gt;Built a spirit-energy system that unifies health, time pressure, action cost, and ending conditions.&lt;/li&gt;&#xA;&lt;li&gt;Implemented underground safe time, surface climbing rhythm, resource collection, bone spending, and shortcut construction.&lt;/li&gt;&#xA;&lt;li&gt;Used asynchronous scene loading and area triggers to connect underground and surface phases with less friction.&lt;/li&gt;&#xA;&lt;li&gt;Designed tunable thresholds for multiple endings so that the player&amp;rsquo;s management performance could be clearly resolved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;system-structure&#34;&gt;System Structure&#xA;&lt;/h2&gt;&lt;p&gt;To keep the 72-hour project manageable, I separated the scripts into five main modules:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Player control: &lt;code&gt;PlayerMove&lt;/code&gt;, &lt;code&gt;PlayerJump&lt;/code&gt;, &lt;code&gt;PlayerDash&lt;/code&gt;, &lt;code&gt;GroundCheck&lt;/code&gt;, &lt;code&gt;WallCheck&lt;/code&gt;, and &lt;code&gt;Respawn&lt;/code&gt; for the platforming feel.&lt;/li&gt;&#xA;&lt;li&gt;Form and spirit-energy systems: &lt;code&gt;MaskControl&lt;/code&gt;, &lt;code&gt;EnergyManager&lt;/code&gt;, &lt;code&gt;EnergyDrainController&lt;/code&gt;, and &lt;code&gt;SafetyTimer&lt;/code&gt; for normal/enhanced states, energy drain, and underground safety time.&lt;/li&gt;&#xA;&lt;li&gt;Level interaction: &lt;code&gt;CheckPoint&lt;/code&gt;, &lt;code&gt;PlatformMove&lt;/code&gt;, &lt;code&gt;TrapCheck&lt;/code&gt;, and &lt;code&gt;ShortcutBuilder&lt;/code&gt; for checkpoints, moving platforms, hazards, and shortcut construction.&lt;/li&gt;&#xA;&lt;li&gt;Dialogue and UI: &lt;code&gt;SimpleDialogue&lt;/code&gt;, &lt;code&gt;AdvancedText&lt;/code&gt;, &lt;code&gt;UIManager&lt;/code&gt;, and &lt;code&gt;ChoicePanel&lt;/code&gt; for text display, interaction, and feedback.&lt;/li&gt;&#xA;&lt;li&gt;Presentation and endings: &lt;code&gt;BackgroundSwitcher&lt;/code&gt;, &lt;code&gt;CharacterLightController&lt;/code&gt;, &lt;code&gt;MusicManager&lt;/code&gt;, and &lt;code&gt;EndingManager&lt;/code&gt; for background changes, lighting, music, and ending logic.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The core flow links player input to movement, jump, dash, collision checks, state switching, energy updates, safety timers, interaction feedback, and ending resolution. This structure helped the gameplay, resource management, dialogue, and presentation systems stay readable under a short production window.&lt;/p&gt;&#xA;&lt;h2 id=&#34;design-highlights&#34;&gt;Design Highlights&#xA;&lt;/h2&gt;&lt;p&gt;The strongest part of Asherah&amp;rsquo;s Lament is the way theme, mechanics, and narrative share the same center. Spirit energy draining represents the world&amp;rsquo;s decay. Underground exploration creates pressure. Surface planning gives the player room to think. Multiple endings reflect the long-term results of the player&amp;rsquo;s management decisions.&lt;/p&gt;&#xA;&lt;p&gt;As a result, each jump and each resource cost carries more than mechanical weight. It also asks whether anything can still be saved before the world goes silent.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Relativity of a Dot</title>
            <link>/en/projects/relativity-of-a-dot/</link>
            <pubDate>Tue, 10 Feb 2026 10:00:00 +0800</pubDate>
            <guid>/en/projects/relativity-of-a-dot/</guid>
            <description>&lt;img src=&#34;/&#34; alt=&#34;Featured image of post Relativity of a Dot&#34; /&gt;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&lt;p&gt;This is a 2D / 3D switching puzzle prototype. I used it to test whether the same level could produce different solutions under different spatial rules.&lt;/p&gt;&#xA;&lt;p&gt;The idea came from the keyword &amp;ldquo;dot.&amp;rdquo; A dot can be a point in one dimension, a mark on a 2D plane, or a projection inside 3D space. I turned that idea into a spatial prototype where the player switches between 2D projection and 3D space to understand the same level through different rules.&lt;/p&gt;&#xA;&lt;h2 id=&#34;screenshots-and-mechanics&#34;&gt;Screenshots and Mechanics&#xA;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/projects/relativity-of-a-dot/screenshot-2d-view.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;2D view&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In 2D mode, the player sees a side-view projection of the level. Movement is constrained to one plane, and obstacles behave more like a traditional 2D puzzle.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/relativity-of-a-dot/screenshot-3d-view.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;3D view&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;After switching to 3D, the camera and movement rules change together. Structures that look like blockers in 2D can be reinterpreted through spatial depth.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-role&#34;&gt;My role&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Designed the mechanic and developed the prototype independently.&lt;/li&gt;&#xA;&lt;li&gt;Rapidly verified dimension switching, camera switching, and object-behavior synchronization.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;technical-implementation&#34;&gt;Technical implementation&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Used &lt;code&gt;DimensionManager&lt;/code&gt; to control dimension state, camera switching, and object behavior.&lt;/li&gt;&#xA;&lt;li&gt;Allowed the same player object to switch movement rules between 2D and 3D.&lt;/li&gt;&#xA;&lt;li&gt;Used collider switching and projected-position correction to make one scene support multiple solutions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;system-structure&#34;&gt;System Structure&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Dimension switching: &lt;code&gt;DimensionManager&lt;/code&gt; controls 2D/3D state and synchronizes Cinemachine camera priority.&lt;/li&gt;&#xA;&lt;li&gt;Player control: &lt;code&gt;PlayerMove&lt;/code&gt;, &lt;code&gt;PlayerJump&lt;/code&gt;, &lt;code&gt;GroundCheck2D&lt;/code&gt;, and &lt;code&gt;GroundCheck3D&lt;/code&gt; handle movement, jumping, and grounded checks under two spatial rules.&lt;/li&gt;&#xA;&lt;li&gt;Spatial object rules: &lt;code&gt;DimensionObject&lt;/code&gt; enables different colliders depending on the current dimension and corrects projected player position in 2D mode.&lt;/li&gt;&#xA;&lt;li&gt;Menu and flow: start menu, pause menu, and basic flow control keep the prototype playable as a complete loop.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The prototype focuses on validating one clear chain: pressing &lt;code&gt;Tab&lt;/code&gt; changes the dimension state, switches the camera, changes movement axes, updates collision rules, and creates a new spatial solution inside the same level.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Emotion Mask</title>
            <link>/en/projects/emotion-mask/</link>
            <pubDate>Sun, 25 Jan 2026 10:00:00 +0800</pubDate>
            <guid>/en/projects/emotion-mask/</guid>
            <description>&lt;img src=&#34;/&#34; alt=&#34;Featured image of post Emotion Mask&#34; /&gt;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&lt;p&gt;Emotion Mask is a 2D platformer-puzzle game centered on emotion switching. It was my solo entry for Global Game Jam 2026, responding to the theme &amp;ldquo;Mask.&amp;rdquo; The player controls a boy wearing a blank mask and switches between three emotional states: Calm, Joy, and Anger. Each state changes how the character moves, reads the world, and interacts with obstacles.&lt;/p&gt;&#xA;&lt;p&gt;The project was later published on TapTap. For me, it was not only a game jam prototype, but also my first complete practice of turning a small game into a public-facing portfolio piece with a store page, screenshots, tags, platform information, and a playable build.&lt;/p&gt;&#xA;&lt;h2 id=&#34;core-gameplay&#34;&gt;Core Gameplay&#xA;&lt;/h2&gt;&lt;p&gt;The mask works as a bridge between character ability and level solution. Each emotion is tied to a distinct gameplay function rather than being a simple visual change.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Calm reveals hidden paths and clues, helping the player understand the level.&lt;/li&gt;&#xA;&lt;li&gt;Joy improves mobility with higher, lighter jumps.&lt;/li&gt;&#xA;&lt;li&gt;Anger grants destructive force and dash-based obstacle breaking.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The level design encourages players to keep switching states. The strongest solution is rarely staying in one mode; it is choosing the right emotional state for the current problem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;screenshots-and-mechanics&#34;&gt;Screenshots and Mechanics&#xA;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/projects/emotion-mask/screenshot-neutral-platform.png&#34;&#xA;&#x9;width=&#34;1250&#34;&#xA;&#x9;height=&#34;565&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Platforms visible under the Calm mask&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;221&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;530px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the Calm state, certain hidden platforms become visible, allowing the player to observe the level and choose a safer route.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/emotion-mask/screenshot-happy-platform.png&#34;&#xA;&#x9;width=&#34;1269&#34;&#xA;&#x9;height=&#34;541&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;The same platform logic under the Joy mask&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;234&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;562px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;After switching to Joy, the same platform is no longer visible, but the character gains faster movement. This contrast shows the core idea: masks are not simple buffs; they change how the level can be read.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/emotion-mask/screenshot-level.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Platforming and state switching inside the level&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The level combines spikes, walls, moving platforms, and mask states so the player keeps switching between execution and decision-making.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/emotion-mask/screenshot-mask-tutorial.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Mask-switching tutorial area&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The tutorial area explains the three mask abilities: Calm reveals moving platforms, Joy is faster, and Anger can destroy obstacles.&lt;/p&gt;&#xA;&lt;h2 id=&#34;theme&#34;&gt;Theme&#xA;&lt;/h2&gt;&lt;p&gt;The game explores the idea that emotions are not mistakes to be removed, but different ways of responding to the world. Calm, Joy, and Anger each have value: observation, movement, and breakthrough.&lt;/p&gt;&#xA;&lt;p&gt;In that sense, the mask is both a mechanic and a metaphor. It turns inner emotional shifts into readable rules, actions, failures, and retries.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-role&#34;&gt;My Role&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Independently handled game design, programming, level design, art integration, sound integration, and release preparation.&lt;/li&gt;&#xA;&lt;li&gt;Designed three emotional mask states and connected them to movement parameters, dash logic, visual feedback, and level interactions.&lt;/li&gt;&#xA;&lt;li&gt;Completed a playable loop within the 48-hour jam window, including menu flow, level progression, death and respawn, collectible fragments, and ending feedback.&lt;/li&gt;&#xA;&lt;li&gt;Prepared the public TapTap and Global Game Jam pages with descriptions, tags, platform information, and presentation material.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;technical-implementation&#34;&gt;Technical Implementation&#xA;&lt;/h2&gt;&lt;p&gt;The game was built in Unity with C#, with a focus on responsive character control and fast iteration.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Implemented movement, variable jumping, double jump, dash, wall detection, death, and respawn.&lt;/li&gt;&#xA;&lt;li&gt;Used a state-machine structure to drive emotion-specific abilities, visual changes, movement tuning, and scene feedback.&lt;/li&gt;&#xA;&lt;li&gt;Connected hidden platforms, breakable obstacles, and emotion fragments to the state system so that ability switching becomes the core puzzle language.&lt;/li&gt;&#xA;&lt;li&gt;Prioritized a minimal but complete gameplay loop under game jam time pressure, making sure the prototype had readable feedback and a finishable flow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;system-structure&#34;&gt;System Structure&#xA;&lt;/h2&gt;&lt;p&gt;The scripts are mainly organized into five modules:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Player control: &lt;code&gt;PlayerMove&lt;/code&gt;, &lt;code&gt;PlayerJump&lt;/code&gt;, &lt;code&gt;PlayerDash&lt;/code&gt;, &lt;code&gt;GroundCheck&lt;/code&gt;, &lt;code&gt;WallCheck&lt;/code&gt;, &lt;code&gt;HurtCheck&lt;/code&gt;, and &lt;code&gt;Respawn&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Mask switching and presentation: &lt;code&gt;MaskControl&lt;/code&gt;, &lt;code&gt;MaskAnimator&lt;/code&gt;, &lt;code&gt;EmotionalPlatform&lt;/code&gt;, and &lt;code&gt;MusicManager&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Level interaction: &lt;code&gt;CheckPoint&lt;/code&gt;, &lt;code&gt;PlatformMove&lt;/code&gt;, &lt;code&gt;TrapCheck&lt;/code&gt;, and &lt;code&gt;CollectibleRotation&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Flow and settlement: &lt;code&gt;GameManager&lt;/code&gt;, &lt;code&gt;GameTimer&lt;/code&gt;, and &lt;code&gt;PlayerCheckpoints&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Menu and UI: start menu, pause menu, and basic interface feedback.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The three masks change more than character stats. They also affect platform visibility, obstacle handling, background state, and music feedback. Player input flows through movement, jumping, dashing, mask switching, character-parameter updates, scene-state changes, platform logic, and final settlement.&lt;/p&gt;&#xA;&lt;h2 id=&#34;release&#34;&gt;Release&#xA;&lt;/h2&gt;&lt;p&gt;Emotion Mask was published on TapTap and submitted to Global Game Jam 2026. The TapTap page presents the game description, platform requirements, developer note, and player rating, while the GGJ page records the jam year, theme, site, platform, tools, and project links.&lt;/p&gt;&#xA;&lt;p&gt;This project helped me understand that finishing a prototype is only one part of showing a game. Screenshots, cover art, tags, store copy, download links, and external pages all affect how the work is perceived.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Echoes of Time</title>
            <link>/en/projects/time-echo/</link>
            <pubDate>Thu, 20 Nov 2025 10:00:00 +0800</pubDate>
            <guid>/en/projects/time-echo/</guid>
            <description>&lt;img src=&#34;/&#34; alt=&#34;Featured image of post Echoes of Time&#34; /&gt;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&lt;p&gt;Echoes of Time is a 2D narrative puzzle-platformer created for the 2025 Autumn Sanjiao Cup Game Jam. The player controls a cat-like mythical creature inspired by Huan from ancient Chinese mythology, traveling through ancient, modern, and future versions of the same place. Across the journey, the player collects instruments and melodies, eventually bringing the echoes of three eras into a future where music has disappeared.&lt;/p&gt;&#xA;&lt;p&gt;The central question of the project is: why does music matter, and what do humans lose when music vanishes? Our answer was expressed through both narrative and mechanics: music is not only sound, but also emotion, memory, cultural identity, and one of the most direct forms of human connection.&lt;/p&gt;&#xA;&lt;h2 id=&#34;world-and-theme&#34;&gt;World and Theme&#xA;&lt;/h2&gt;&lt;p&gt;The story takes place in a future where music has died. Technology has built towers higher and higher, while humans have gradually lost their sensitivity to their own inner lives. As a time-traveling Huan, the player returns to the past and the present to recover awe, remembrance, and the last hope of the future.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;ldquo;echo&amp;rdquo; in the title has two meanings. It refers to music traveling across eras, and also to the way choices made in the past reshape the future. The protagonist does not simply save the world; they help people remember how to listen again.&lt;/p&gt;&#xA;&lt;h2 id=&#34;core-gameplay&#34;&gt;Core Gameplay&#xA;&lt;/h2&gt;&lt;p&gt;The game is built around three timelines of the same location. The ancient, modern, and future maps correspond spatially, but buildings, trees, roads, and towers change as time passes.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ancient era: cross the lake, enter the bamboo forest, collect Echo Bamboo, bring it to the ancient musician, craft a flute, and learn the melody of awe.&lt;/li&gt;&#xA;&lt;li&gt;Modern era: travel to a recent past, use nutrient fluid to save a dying tree, return to the present, climb the revived tree to reach a rooftop, collect a wooden guitar, and learn the melody of remembrance.&lt;/li&gt;&#xA;&lt;li&gt;Future era: search a cyberpunk wasteland tower for a robot core, repair the damaged robot, receive a tuner, climb to the top, and perform the final movement.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The platforming layer uses wall jumps, conditional double jumps, and timeline switching. Players need to read what changes and what remains in different eras, then alter the past to open paths in the present and future.&lt;/p&gt;&#xA;&lt;h2 id=&#34;screenshots-and-scenes&#34;&gt;Screenshots and Scenes&#xA;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;/projects/time-echo/screenshot-opening.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1438&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Opening setup&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;427px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The opening image introduces the world in a quiet tone: music is disappearing together with humanity, and the protagonist Huan is the last guardian of sound.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/time-echo/screenshot-ancient-dialogue.png&#34;&#xA;&#x9;width=&#34;1586&#34;&#xA;&#x9;height=&#34;678&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Ancient musician dialogue&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;233&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;561px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The ancient act connects the flute and musician to the theme of awe, tying music to nature, mountains, and older memories.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/time-echo/screenshot-ancient-platforming.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Ancient platforming scene&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The ancient level uses ink-wash mountains, bamboo, clouds, and light platforms to create a poetic sense of movement.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/time-echo/screenshot-modern-scene.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1439&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Modern scene with guitarist&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;177&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;426px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The modern act places the park, fountain, guitarist, and time gate in one scene, carrying the melody of remembrance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/projects/time-echo/screenshot-future-platforming.png&#34;&#xA;&#x9;width=&#34;2559&#34;&#xA;&#x9;height=&#34;1430&#34;&#xA;&#x9;loading=&#34;lazy&#34;&#xA;&#x9;&#xA;&#x9;&#x9;alt=&#34;Future tower platforming&#34;&#xA;&#x9;&#xA;&#x9;&#xA;&#x9;&#x9;class=&#34;gallery-image&#34; &#xA;&#x9;&#x9;data-flex-grow=&#34;178&#34;&#xA;&#x9;&#x9;data-flex-basis=&#34;429px&#34;&#xA;&#x9;&#xA;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The future act shifts into a darker cyberpunk space. Platforms and pipes create a colder, more oppressive contrast with the earlier eras.&lt;/p&gt;&#xA;&lt;h2 id=&#34;narrative-structure&#34;&gt;Narrative Structure&#xA;&lt;/h2&gt;&lt;p&gt;The three acts correspond to three forms of musical memory.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ancient musician and flute: music as awe, the first act of listening to nature and life.&lt;/li&gt;&#xA;&lt;li&gt;Modern guitarist Su Wang and wooden guitar: music as remembrance, connecting people with cities, old trees, and personal emotion.&lt;/li&gt;&#xA;&lt;li&gt;Future robot and tuner: music as hope, the last protocol left after civilization has nearly lost its voice.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In the ending, the ancient musician, modern songwriter, and future robot symbolically join the protagonist on top of the tower. The sounds of the past travel across the future city, awakening a heart that has gone cold.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-role&#34;&gt;My Role&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Served as lead designer and team coordinator, building the world setting, three-act structure, core mechanics, and level flow.&lt;/li&gt;&#xA;&lt;li&gt;Wrote the main design document, post-jam revised design document, character dialogue, ending narration, and art requirement documents.&lt;/li&gt;&#xA;&lt;li&gt;Translated the idea of &amp;ldquo;one place across three eras&amp;rdquo; into executable level layouts and asset lists.&lt;/li&gt;&#xA;&lt;li&gt;Coordinated programmers, artists, and musicians by clarifying character actions, scene assets, interactive props, and performance needs.&lt;/li&gt;&#xA;&lt;li&gt;Participated in debugging, map design, partial art support, and flow integration.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;technical-and-production-design&#34;&gt;Technical and Production Design&#xA;&lt;/h2&gt;&lt;p&gt;The project used Godot as the development environment. My design work focused on turning a complex time-travel concept into a structure that programmers and artists could implement quickly.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Broke down character behavior for programming: movement, wall jump, roll, conditional double jump, interaction triggers, and timeline switching.&lt;/li&gt;&#xA;&lt;li&gt;Broke down layered art assets: distant backgrounds, tileable ground, temporary platforms, characters, NPCs, key props, and interactive buildings.&lt;/li&gt;&#xA;&lt;li&gt;Designed transformation rules for the same location across eras, such as an ancient house becoming a modern villa and later a future tower.&lt;/li&gt;&#xA;&lt;li&gt;Built the &amp;ldquo;save the tree&amp;rdquo; puzzle as the core example: the player changes the tree&amp;rsquo;s fate in the past, returns to the present, and uses the revived branches to reach a previously inaccessible rooftop.&lt;/li&gt;&#xA;&lt;li&gt;Planned the final performance sequence: three instruments sound in order, echoes of past musicians appear, the robot joins with future electronic music, and the ending resolves into an orchestral finale.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;design-highlights&#34;&gt;Design Highlights&#xA;&lt;/h2&gt;&lt;p&gt;The most important design attempt in Echoes of Time was to make time travel feel like understanding the history of one place rather than simply loading three unrelated maps. The player sees a single space grow, change, and lose its voice across eras.&lt;/p&gt;&#xA;&lt;p&gt;The ancient lake and bamboo forest, the modern park and tree, and the future tower and robot form one emotional curve: awe in nature, remembrance in the city, and hope in a future ruin. Music ties these moments together as the thread between time, place, and human feeling.&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
