
Minutes before our pitch, every character in our game stopped talking.
The 3D world still loaded. The player could still move. The relationship system was still there. But the deployed backend had lost the secret it needed to reach the AI model, so none of the characters could answer.
Rahbab and I were at UTM Kuala Lumpur. We had rehearsed for roughly thirty minutes. I was running on almost no sleep and had been unable to keep food down since the night before.
We restored the connection. There was no comfortable test window afterward.
We had to present.

1. The idea
The Tencent Cloud × UTM Hackathon 2026 Game Track asked teams to build an AI-powered game for practising communication and social skills.
We wanted something different.
THRESHOLD was a small social world that remembered how you treated people. You could explore the neighbourhood, approach a character, understand the situation, and respond in your own words. The conversation would then alter the relationship. Trust and respect could rise or fall, characters could remember what you said and did, and the next encounter would begin from what happened before.
There was no red WRONG ANSWER screen. A badly handled conversation became part of the relationship instead.
Those memories did not remain trapped inside separate conversations. They could travel between characters through gossip and word of mouth, shaping what other people knew about you and how they responded. Together, those connections formed a living relationship graph: one conversation could change more than the person standing in front of you.

2. Building the thing
At the time of writing this, I'm nineteen and primarily a backend developer. My normal work involved APIs, automation, and AI integrations. I had not seriously made a game since I was eleven.
Rahbab Chowdhury was much closer to the visual side. He shaped much of THRESHOLD's art direction, interface, and world presentation, while I focused on the game systems, backend, and deployment. Together, we competed as Untitled Team Name.
Our first direction used Three.js. It could produce the 3D browser game we imagined, but hand-positioning models, lights, cameras, and collisions through coordinates quickly became its own form of punishment.
We moved to Phaser. It was browser-native, easier to deploy, and probably the sensible choice. But that came at its own cost... it made the project look flatter than the social world we wanted to show.
Godot finally gave us a proper 3D editor and tools built for making games. Then we abandoned it because we thought its browser export would not meet the Tencent Cloud deployment requirement.
That requirement did not exist.
The game only needed to be accessible online, so we returned to Godot. Three.js was too ambitious, Phaser was practical but visually underwhelming, and Godot solved the right problem after being cancelled for the wrong reason.
By then, most of the comfortable schedule was gone.
The repository that became the final game started on 3 August, only days before submission. Tencent Cloud had given participants access to CodeBuddy, its AI coding tool. I asked it to scaffold the backend for conversations, memories, relationships, and progression.
I expected JavaScript. It returned Python and FastAPI.
The scaffold worked, so instead of starting again, I adapted everything around it. We connected the Godot game to the Python service, deployed the browser build and API, and tried to keep the project stable while continuing to add characters, locations, UI, and an accidentally enormous avatar-customisation system.
At some point, the Git history stopped pretending everything was under control:
IDK WHAT THIS DOES? IT WORKS SOMEHOW AND IM NOT COMPLAINING.
I still stand by that commit.
3. The important technical decision
The easiest way to make an AI character is to give a language model the player's message and let it produce everything: the reply, the score, the new relationship value, and whatever the character supposedly remembers.
That is flexible, but it also means the model controls the rules. A confident generated response can award the wrong points, change trust inconsistently, or invent a new version of what happened.
THRESHOLD separated those responsibilities.
The AI interpreted the player's free-text response and generated the character's voice. It could consider the current situation, the character's personality, recent events, and the state of the relationship.
A separate game system owned the consequences. It evaluated qualities such as clarity, empathy, politeness, and expression, then updated relationship values, progression, and authoritative game state. It also controlled how memories propagated through the relationship graph, kept a journal of encounters, and tracked repeated communication patterns.
The AI interprets the moment. The engine owns the consequence.
That distinction mattered because the relationship was the game. The character could speak naturally without being allowed to rewrite reality.
If trust fell during one encounter, the next conversation inherited that result. If another character learned what had happened, that knowledge could affect their relationship with you too. The AI supplied flexibility; the engine supplied continuity.
Real life does not reset.
4. The final 24 hours
The night before Demo Day, the accumulated lack of sleep finally caught up with me. I could not eat and started throwing up, although there was almost nothing left to throw up.
Our bus from Johor Bahru to Kuala Lumpur was due around midnight.
We got on it anyway.
After reaching Kuala Lumpur, we went to the UTM library, opened our laptops, and continued fixing the game. We still had bugs, a pitch to prepare, and a deployed build that had not spent nearly enough time sitting still.
Scope control stopped being a project-management technique. It became an act of survival.
Rahbab and I rehearsed for about thirty minutes. We memorised the main beats rather than a complete script: training exercises normally reset; THRESHOLD remembered; the AI handled language while the game controlled the consequences.
Then, inside the final half-hour before our turn, the game stopped connecting properly to its own backend.
I checked our remaining model quota. That was not the problem. We retried the deployment and worked through the likely causes while moving around the venue and preparing to go onstage. Eventually, we found the missing environment secret and restored the connection.
Shortly before the pitch, I took two sips of water and threw them back up.
Then our name was called.
The second I started speaking, the nerves disappeared. The room was listening, the judges were following the idea, and we finally had to stop thinking about everything that could break.
We explained why the relationships persisted. We showed how the player could type a response, how the character reacted, and how the game remembered the outcome.

Then we opened the demo.
The game loaded.
The backend connected.
The characters answered.
Nothing crashed.
Starts at 1h 27m 48s5. We won
After the Game Track presentations, we waited through lunch, the second competition track, and the beginning of the award ceremony.
We had reasons to think we had done well. That was not the same as knowing.
Then the announcer reached the Game Track champion.
"Untitled Team Name."
That was us.

We had won the Malaysia Game Track and qualified to represent the country at the international grand final in Shenzhen, China.

The organisers interviewed us shortly afterward. When they asked how winning felt, I could not give them a polished answer. It had not registered yet.
Congratulations to Untitled Team Name, the champion of Tencent Cloud × UTM Hackathon 2026 Game Track! 🎮 Watch their post-win interview on creating THRESHOLD.
6. What's next
Winning was not the end of THRESHOLD. It gave the game a larger stage and gave us a new deadline: prepare it to represent Malaysia in Shenzhen.
The result showed that the central idea connected with people: an AI character could be more than a chatbot with a face, and practising communication became more meaningful when the player had to live with what happened afterward.
You can play THRESHOLD, explore the source code on GitHub, view the official competition recognition write-up, or read the shorter version of this story on LinkedIn.
Winning happened at the end of a chain of engine changes, late-night rebuilds, bad commits, deployment failures, and one presentation that had no right to go as smoothly as it did.
The game was called THRESHOLD.
For once, the name was accurate.
