7 years+ working as game developer. Expert at using Unity and C#. Mostly developing game in Android Platform including mobile and also TV devices. Proficient at optimizing game for low end devices. Competent using plain javascript to create function and mechanic for server side. Already developed several multiplayer games with different network communication such as Netcode for Gameobject, Websocket and also WebRTC. Experience creating AI for NPC using Behaviour AI.
Portfolio
Every game project that I developed throughout my professional career.
Perfect Position
Monkeyland Battleground
Trivia
Food Express
Neon Jump
Idle Fruit
Tepok Nyamuk
Glory or Destruction
Esports King
Noktah
Perfect Position
Around this time Polytron want to create a local multiplayer that can be played in tv with handphone for controller. So Ayo Main is created. In Ayo Main, player can choose different game that Polytron created and play it directly in their TV. Our team responsible to create the game, and another team for backend server stuff. For now only Polytron TV can download Ayo Main app.
We use websocket for data transfering and JSON as data structure. In testing the connection when wifi is same between TV and handphone give decent result. However, for highly competitive game that need instant input the lag is noticeably recognizable. So we try to balance the creation of the game, some slow game like card game or turn based, and versus game that need instant input. There will always be lag compared to playing with real controller.
This game is like moving out, but the furniture is moving in from outside to inside the house. There is marker to help player determine where to put the furniture. There are two types of furniture, small and big. Small furniture can be grabbed and lifted by player. Big furniture however need two player to be moved. If only one player grab that furniture, the furniture is still moving, but the velocity is lower compared when two player grab that furniture.
There is also enemy that will patrol certain area. Enemy has visual detection, so when player enters it will try to attack. If player is within range of attack, enemy will attack and player will be stunned. But after some time enemy target still outside his range of attack, enemy will come back to his patrol range. Player can also attack enemy to make it stunned and come back to its patrol range. Enemy cannot be killed.
Date: Feb - Dec 2022
Associated with: Polytron Indonesia
Platform: TV (Ayo Main)
Engine: Unity
Monkeyland Battleground
At this time our team have 3 programmer and want to further challenge ourself. Come birth this game, Monkeyland Battleground. It is a competitive teamwork 3v3 online multiplayer for mobile android with active ragdoll. Let’s break it down.
It is an online game with synchronous network something like gang beast. It is a very very difficult project because first never before we create an online synchronous game like this. Second active ragdoll is such a fun to look at but hard to replicate it. Third how the game server will be replicated in our own server.
For typical online game there are three network model: peer-to-peer, client host, and client server. We want this game to be played for all player in the world so peer-to-peer is out. That leave us to client host or client server. The difference is for client host, the room master will host the game inside their game and another player will join into that device. The advantage is we didn’t need server for hosting so it is essentially free. The advantage again is it’s relatively more simple compared to client server. The disadvantage is the connection is based on the room master. When the room master has bad connection, all player in the room will have bad ping. Also room master will always have the fastest network, because the hosting is in their device.
The client server on the another hand will have the most stable connection and more fair connection for all player. Furthermore it is more difficult to temper the game state because all command come from server, client simply render state from server and send input. After much discussion we pick client server architecture and the server will be hosted in Polytron own server.
Our own original timeline is 6 month to build this game. Can you believe it? 6 month! How naive we was. The final build is close to 1.5 years with the help from another team for backend and server deployment. Fortunately our own boss like the game so it’s all good.
Soon after Food Express project enter finishing phase, Polytron need quiz app for internal event. Our team took the task to create a trivia game with randomize question for each player. Question and anwer will be put in server so the changes in question can be made without repetitive build. After player answer question, there is a NPC that will react based on user answer.
This is a simple game, the challenge is this is a first game that I create in WebGL. There is also some feature for example when player disconnect, because we want to create seamless experience, so when that player connect again it will display last question or last state. Game will receive that info from URL when player open app.
Date: Jul - Dec 2020
Associated with: Polytron Indonesia
Platform: Mobile
Engine: Unity
Food Express
Fourth game in Polytron. Now we want to push for performance when depolying into tv device. We already learn some mistake from Neon Jump project and create best practice how to approach it. The most obvious one is no post processing, tv device especially low-end cannot handle it. Second limit vertices for each object so dynamic batching can kick in. In the docs the limit is 300 vertices, so artist have many things to adjust. Third use sprite atlas for UI so draw call is reduced. Finally use static batching for static object that didn’t move. Altough dynamic batching is more optimize than static batching, but for big object that have many vertice that we cannot reduce anymore static batching does help reduce CPU usage.
Food Express is like dinner dash, but we use swipe gesture in mobile or arrow from remote tv to control waitresses turn. The waitresses itself will move automatically, we cannot stop it. Customer will come to restaurant, sit and order automatically. The waitresses must take the matching order from kitchen and bring it to the customer. If the order is the same, the customer will eat and go home with a happy emotion. Is the order is wrong, the customer will reject it and wait for their order. For each table, there is meter to measure their happiness. The more this meter is remaining, the more score you will get, the more Nagih Coin you will get.
Late in the game, sometimes some customer will disturb your work and make you down. There is a customer that will throw banana peel that will make you fall. Fortunately there is a power up to help mitigate this problem. Ice powerup can be used to freeze disturbance for some time. When the distubance is freezing, you can get pass them without fall. This game also has life mechanic, for everytime you fall one heart is reducted. For each game player have 3 hearts, so be careful.
Now we move into 3D Game! Wohooo! After last two game in Polytron is in 2D, this time we, again, challenge ourself to a more difficult project. This is the time we will develop our game for android tv, especially Polytron TV.
This game is such a challenge because we want to have a glow effect like a neon lamp (hence the name has neon in it), but because the target device is a low-end device we cannot have any post processing in it. So after more iteration, we decided to give glow effect just from the texture itself.
There are 3 stages in this game: City, Space and Volcano with each theme will order sequentially and recursively. There is random mechanism for obstacle. We have more than 10 set of obstacle that will spawn randomly in each theme. Each obstacle is graded easy, normal and hard. So when start, only easy obstacle that appear. More and more distance player has, more difficult obstacle will appear more easily.
Also this time, we introduce Nagih Coin. Nagih Coin can be used to buy item from across the game that tied to google play account. So when playing game A player acquired 100 Nagih Coin. When playing game B player already have 100 Nagih Coin that they can use to buy in game item. This system is developed by another team, I just call the API to get the data and shown them on screen
After much success from the first game, we wanted to highlight the financial side or in another words how to get money from game. We decided to use ads and created an idle game.
This game is about upgrading your farm and earn money every second. The money earned is calculated based on your level of farm. There are 5 types of fruit that you can unlock with money. There is also bulk upgrade feature, so player can upgrade in 10 or 100 multipler or max upgrade. Max upgrade will try to upgrade the farm to max level, if your money is not enough it will upgrade to a level that you cannot upgrade again.
There is also a laboratory, to upgrade money earned for each type of fruit. There is also a robot and drone to help you grow you farm and earn even more money.
This project created when I was in Polytron. Me myself as a sole programmer and 2 other people working on this. For a new team, this project aim to bring communication, teamwork and synergy and to test skill of each member.
In this game, there is a card and a number text. Each time, a card is draw from the deck and the number on text is increasing each time. To earn score, we must tap the card when the number shown on card and number on text is match. To win you must get highest score.
Another feature is save and get data from remote server. This is the first time for me, but I make a decent working code out of it. There is also “online” mode, where you get to play with other people. Why the quote? because it’s not really synchonous. By other people we mean get data from other player that match the skill of player, created an online persona and add them to AI. So essentially player still match againts AI, the different is, when the data that gathered from server is a skilled player, the AI will match that and vice versa.
This game is created when I was in Melon Gaming. Now I’m a full fledge Game Developer. Right now I’m using javascript with melonjs library to create web games. I read some books about javascript and do training in melonjs for 1 month. After that I develop this game with 2 other people. Melonjs has an editor, but the editor itself is still in developed at the time. So I frequently use the good old plain javascript.
The game mechanic is like Summoners War. You can summon and army with some mana that regen over time. You must destroy enemy base, and defend yours. There are many variation of army, solider, sniper, drone, and tower. The soldier attack melee has high hp but cannot attack flying unit. Sniper attack range has low hp but can attack all unit. Drone is flying and has low hp with medium attack. Tower attack range but cannot move. Each unit is moved with AI.
Date: Sep 2018 - Jun 2019
Associated with: Melon Gaming
Platform: Web
Engine: javascript, melonjs
Esports King
This game is created when I was still a junior game programmer in Agate International with 2 other programmers. ESports King is divided into 2 section, House and Game. House is where you build your team, buy furniture, plan strategy, equip items, see quests and many more. Your team member itself is visible in the House. Your team member will move automatically like the sims. They have needs, like hunger, sleep, etc and will move to furniture to relinquish their need or move random inside the House. My responsibility is in the House.
The biggest challenge of course is the team member. I created the Artificial Intellegence using Behaviour AI. Every tick they check their need. For example check if they need sleep. If they do, they will locate furniture that can replenish sleep. If said furniture is located and if that furniture is not operated by anyone, they will move to furniture and use it. If they don’t need sleep, they will check their other need. If they didn’t need anything they will move randomly inside the House.
First unity game created when still in university. Me as a sole programmer and my other 2 friends wanted to create a game that can be show to other people. We also participate in a game contest called IN.GAME 2016 and nominated for most innovative game.
The game itself is a simple puzzle platformer where there is a ball that move horizontal automatically. When the ball hit a wall, the ball will change its direction. From right to left, from left to right. You as the player can only control the ball by using jump with a tap. Avoid obstacle and go to designated marker to win the game.
Date: Jan - Mar 2016
Associated with: University
Platform: Mobile
Engine: Unity
Skills
My main skills as game developer
Need help?
If you need a game programmer please do contact me via email or you can invite me via upwork. I will reply to you ASAP!