Low-poly 3D view of the training beach on Perhentian Island: the player on the sand, Mak Jah in purple by the campfire, Guru and Tok Ali near the training post, Abang Zul by the rocks, Mak Long Esah at the water's edge, the boatyard, crabs on the shore and two archery targets beyond the trees.
New · v0.40Kuala Besut, together →

Pendekar

A hero's journey across Malaysia.

Learn silat from Guru, draw a bamboo bow at Tok Ali's range and net fish on the reef. Then build a boat, sail for the mainland and trade in a fishing town. Old-school mechanics and an original world, played in a browser tab.

  • Free · no install
  • 2 chapters
  • 8 skills
  • 8 people to meet
  • Saves in your browser

Perhentian Island, from the current build (v0.40)

The journey

The game is built in chapters, each a real place on the east coast. The route starts on a small island and works its way onto the mainland, one region at a time.

The route of Pendekar across Peninsular Malaysia A pixel map of the peninsula in the game's own palette. Chapter 1, the Perhentian Islands, and chapter 2, Kuala Besut, are playable and joined by a dotted boat route. Chapter 3, Kuala Terengganu, is next along the coast; chapter 4 continues south to Kuantan and later across to Kuala Lumpur. An inset shows the strait between Kuala Besut and the Perhentian Islands, about 18 kilometres across. THAILAND SUMATRA South China Sea Strait of Malacca TERENGGANU Kota Bharu Penang Langkawi Ipoh Kuala Lumpur Melaka Johor Bahru Tioman 1 2 3 4 PERHENTIAN ISLANDS CH 1 · PLAYABLE KUALA BESUT CH 2 · PLAYABLE KUALA TERENGGANU CH 3 · NEXT KUANTAN CH 4 · LATER Kuala Besut Perhentian ~18 km THE CROSSING
  • Playable
  • Next
  • Later
  • By boat
  • Next road
  • Later
  • Town
Coastline and state borders from Natural Earth (public domain), drawn in the game's minimap palette: deep sea, a shallow ring, a sand rim and greens that darken inland. Terengganu, home of chapters 2 and 3, is outlined in gold.
  1. The in-game map of chapter 1: two islands ringed by shallows and sand.

    1Perhentian IslandsPlayable

    The training ground. Guru teaches you to feed yourself, fight and build a perahu. Five islanders teach archery, fishing, woodwork, cooking and defence.

  2. The in-game map of chapter 2: a coastline with a jetty, a main road, houses and a river.

    2Kuala BesutPlayable

    Landfall. The fishing town where the mainland begins: a jetty, a harbourmaster, Kak Yah's sundry shop and the first clothes to buy, with prawns in the river and tuna off the jetty.

  3. 3Terengganu coastNext

    The coast road south to Kuala Terengganu: a bigger market, songket armour and the first real dungeon.

  4. 4The rest of the peninsulaLater

    Down the coast and across the hills, with Sabah and Sarawak after that. Each region brings its own skills, foods and people.

How it plays

The feel of the browser MMOs of the 2000s: a world that moves on a tick, skills that reward time, and a camera you can swing around freely. Everything else is new.

The player, seen from behind, drawing a bamboo bow to the chin at the archery range, with Tok Ali watching on the left and a score of 7 over the nearest straw target.
ArcheryDraw to the chin, look at the target, release. Shoot at straw targets for practice, or at crabs from six paces with a clear line of sight.
The tick600 ms

Every action happens on a tick. Click a tile and you walk there, one tile a tick, or two when you run. Paths go eight ways and never cut corners.

Skills8

Level 99 takes about 13 million XP, and the first levels come fast.

  • Fishing Nelayan
  • Woodwork Tukang Kayu
  • Cooking Masak
  • Attack Serang
  • Strength Kuasa
  • Defence Tangkis
  • Archery Memanah
  • Body Tubuh
Combat3 + 1

Three stances for the staff (Attack, Strength, Defence), plus the bow. A three-strike combo, blocks and dodges, and damage that lands when the blow connects.

World2 maps

Each 90 by 60 tiles. The islands grow from seeded noise; Kuala Besut is laid out along a river. Tap the minimap for the whole of Malaysia, unexplored until you get there.

Camera360°

Drag to orbit, scroll to zoom, arrow keys to turn. Pinch and press-and-hold on a phone.

Weight1 file

The whole game is one HTML file of about 4,500 lines, with three.js loaded from a CDN. No install, no engine, no build step. Every model and every sound is built in code, people and creatures are bent by skeletons made in code too, and progress saves in your browser.

The people

Everyone you can meet so far. On the island, each teacher sets one task; finish it and the lesson stays with you. They look up as you pass and greet you. Malay titles come first, as you would hear them.

Guru: an old silat teacher with a white beard, a tall purple headcloth, a green top and a red sarong, holding a staff.

Guru

Silat teacher · Perhentian

Teaches the basics: food, fighting and the boat. Castaway's Training starts with him.

Tok Ali: an elderly archer with a white beard, a red headcloth, black clothes with gold trim, and a bamboo bow at his side.

Tok Ali

Archer · Perhentian

Lends you a bamboo bow. Hit his target ten times and archery is yours.

Mak Long Esah: a fisherwoman in a cream headscarf and a teal top.

Mak Long Esah

Fisherwoman · Perhentian

Net five fish and she shows you how to throw a net. You fish faster from then on.

Pak Mat: a grey-haired boatwright with a moustache, a white top and a brown checked sarong.

Pak Mat

Boatwright · Perhentian

Cut five timber for a better swing, and learn to make arrows at the boatyard.

Mak Jah: the island cook in a purple headscarf and top with a white apron.

Mak Jah

Cook · Perhentian

Cook four fish without burning them to learn her secret. You burn less food afterwards.

Abang Zul: a young silat fighter in black with a red sarong and a red headcloth, holding a rattan stick.

Abang Zul

Silat fighter · Perhentian

Spars with a rattan stick. Dodge eight strikes and earn a point of armour for good.

Encik Rahman: the harbourmaster, with a moustache, a white peaked cap and a white shirt with a navy front.

Encik Rahman

Harbourmaster · Kuala Besut

Keeps a ledger of every boat on the river, a post once called syahbandar. Landfall at Kuala Besut is his quest.

Kak Yah: the shopkeeper in a teal headscarf and a pink top.

Kak Yah

Shopkeeper · Kuala Besut

Buys your catch and sells clothes, food, arrows and a horn bow from her sundry shop.

Build journal

One entry a day, newest first, with every version that came out of it. The game is in beta: the numbers count up to 1.0, which comes with chapter 3 and the Terengganu coast. October 2026.

Company in Kuala Besut, and faces that talk

NewWorldPeopleLookTwo versions, v0.39 and v0.40: drop anything from your pack, every item redrawn and described, live talking portraits and friendlier faces, and Kuala Besut shared with other players.

v0.40Kuala Besut, together

NewWorldPeopleOther players walk the town with you, and you can talk to them.

Kuala Besut is no longer yours alone. When you land at the jetty the game asks what to call you, and you join a world shared with everyone else in the town. Other players walk about with their names over their heads. Anything they say appears above them and in a new Public tab in the chat, with a box to say something back.

  • The server keeps everyone honest. It decides where each player stands. A click asks to walk somewhere; the server checks the way, refuses water and walls, and steps everyone one tile a tick, two when running, just as the game does on its own.
  • Eight worlds. Each holds about 150 players, and when one is full you are pointed to the next.
  • Chat is plain words, up to 80 characters, and slowed down if anyone floods it.
  • If the server can't be reached, the town works as before, on your own, and the game keeps trying to reconnect.
Two players at the Kuala Besut jetty. Awang stands in the middle of the beach with his words over his head, Selamat pagi, Besut, and Dayang stands under the jetty sign with her name above her. The chat shows a new Public tab, the line Online: world 1, as Awang, and a Say box at the bottom.
Awang says good morning to the town; Dayang waits at the jetty. The chat shows exactly what was typed.

Perhentian Island stays single-player for now, and nothing is saved on the server yet: your progress still lives in your browser. Signing in comes next, so your character, its name and its pack can follow you to any device.

Thirty-five new checks run two browsers against a local copy of the server. They cover a walk into the water being refused, world 2 never seeing world 1, chat staying plain text, Kak Yah's shop opening from where the server put you, and the game carrying on alone when the server stops. After publishing, two guests on the live server saw and heard each other.

v0.39Drop it, look at it, hear it

NewPeopleLookDropping and picking up, item art with real detail, and a portrait that talks.

Until now your pack only ever filled up. Now you can empty it. Right-click an item, or press and hold it on a phone, and you can eat or wear it, drop it, or examine it. Shift-click drops it at once, and so does Delete on an item that has focus.

  • What you drop stays on the ground. It lies where you stood for three minutes, as a small picture of itself with a shadow under it, and you can walk back and take it. The boat is the one thing you can't drop.
  • A full pack no longer wastes a kill. When there is no room, a crab's meat or a macaque's bananas fall to the ground instead of vanishing.
  • Every item is redrawn. The coconut has its husk, its three eyes and a cracked half with the white flesh inside. Timber is two logs with bark and end grain, coir is a tied hank of fibre, rope is a twisted coil, and the hatchets have proper heads. Cooked fish have grill marks, and the grilled squid comes on its bamboo skewer. Each item also has a line that says what it is, in its tooltip and when you examine it. The book has a new page, the visual directory, with every icon shown large.
  • Friendlier faces. Everyone on the islands has a new head: bigger, with soft dark eyes and a smile that opens when they talk. Guru and Tok Ali have rounded beards now, so you can see them speak, and the tall hats are trimmed to fit.
  • The person you talk to is live. The portrait is half as big again, and it is the islander's own 3D figure, head and shoulders, not a still picture. While a line types out they say it: the jaw keeps time with the words, the hands move with them, and they look at you. Press once to finish a line, and again for the next.
The game on Perhentian Island. Guru speaks from a large round portrait at the bottom: Before you sail anywhere, you must learn to feed yourself, to fight and to build. The Pack tab on the right is full of the new item art: a coconut with a cracked half, two logs, a hank of coir, a coil of rope, bananas, mackerel raw and grilled, squid on a skewer, a prawn, nasi lemak in a banana leaf, fish sausage with chilli sauce, crab meat, a lizard hide, a bow, a straw hat, a sarong, sandals, a blue Baju Melayu and an iron hatchet.
Guru talking from his new portrait, and a pack full of the new item art.

New checks cover dropping by menu, by shift-click and by the Delete key; picking an item up from your feet and from a few tiles away; an item being gone after 300 ticks; the boat refusing to be dropped; pointing at an item on the ground; every icon being valid SVG with a description; the line typing out while the jaw moves, closing when it ends, and one press finishing a line without skipping it; and the portrait fitting on a phone.

Chapter 2, then the whole country

NewWorldPeopleLookSoundSiteEight versions, v0.25 to v0.38: sailing to Kuala Besut, five teachers and archery, characters on real skeletons, a carved-teak interface, a map and an atlas of Malaysia, music made in code, and tools.

v0.38Tools of the trade

NewPeopleA hatchet for trees, a net for mackerel, and the right gear for every other catch. The first ones are free.

Until now you could fell a tree with your bare hands and pull fish out of the sea with nothing at all. Now every way of gathering needs its tool: a hatchet for trees, a cast net (jala) for mackerel, a jig (candat) for squid, a prawn trap (bubu) for the river and a hand-line (tali pancing) for tuna. Palms are the exception: you climb them.

  • The first tools are free. Pak Mat gives you his old hatchet the first time you talk to him, and Mak Long Esah her old net. If you ever have none you can use, they hand over another. Guru sends you to both, and Castaway's Training has a step for each. Finish Esah's lesson and she adds a squid jig.
  • Kak Yah sells the rest: an iron hatchet for RM 45, a jig for RM 8, a prawn trap for RM 15 and a hand-line for RM 20. She won't buy back the old hatchet or the old net. “That's Pak Mat's old hatchet. He'd know.”
  • Tools hang on a belt. The Pack tab has a belt of four slots above the pack, so tools don't use up pack space. Click a tool to move it between belt and pack. It works from either.
  • Better tools work better. You never choose a tool: the game uses the best one you carry that you have the level for. The iron hatchet needs Woodwork 5, and adds 8% to the chance of every swing.
  • You can see what you need. Point at a tree without a hatchet and the label says so in red. Try anyway and the game tells you where to get one. While you chop, the hatchet in your hand is the one you are using, and when you fish, the net is in your hands.
The game on Perhentian Island. The pointer is on a jungle tree, and its label reads Chop down Jungle tree, with needs a hatchet in red underneath. The quest tracker says Get a hatchet from Pak Mat at the boatyard. In the Pack tab, a belt of four slots above the pack holds an old cast net and a squid jig.
No hatchet yet. The belt holds the net and the jig from Mak Long Esah.

Older saves find the old hatchet and the old net on the belt, with a line in the chat. If Esah's lesson is already done, the jig is there too. The island is laid out exactly as before.

This is the first of three parts. The next two bring hardwoods, a blacksmith's forge, bamboo, and prawn traps that fill while you are away. All three are designed in the Pendekar Book, a new wiki of how every part of the game works. Its numbers are read straight from the game's code.

Fifty-five new checks ran, and the tests from earlier versions still pass. They cover:

  • that every tree and fishing spot refuses you without its tool, with the right message for the island or the town, and works with it;
  • that the wrong tool, such as a net at a squid spot, is refused;
  • that the iron hatchet takes over at Woodwork 5, in the code and in your hand;
  • that the teachers' tools go on the belt, or in the pack when the belt is full, and come back if you lose them;
  • that an old save gets its tools once;
  • that the ring by the action text fills in exactly the time a swing or a cast takes, for every tool;
  • that a new game can still finish Castaway's Training without spending a ringgit.

One gap turned up along the way. Someone who bought an iron hatchet before Woodwork 5 could not cut at all, and Pak Mat would not help, because they had a hatchet. Now he gives an old one to anyone without a hatchet they can use.

v0.37Music for every place

NewSoundSeven songs made in code, a fight layer, Kak Yah's radio, and a Muzik tab to choose what plays.

It began as a page of seven sketches: one for each place on the route so far, and one for the dungeon ahead. Each borrows its instruments and rhythms from music of this coast. These include the Malay gamelan long kept at the Terengganu court, the oboe and drums that play for silat, joget, keroncong, and the rebab that leads Mak Yong theatre. Every melody is new.

Pendekar has sound now, and like everything else in the game it is made in code, with no audio files. The synthesiser and all seven songs add about 32 KB to the game file. The gongs and the saron are a few sine waves each. The serunai, the rebab and the violin are filtered saw waves with a little vibrato. The gambus, the cuk and the cello are plucked strings, worked out a sample at a time.

  • Angin Pulau (island wind) plays on Perhentian by day.
  • Gelanggang (training ground) plays at Guru's post and while you spar. A fight anywhere switches it to Lawan, its fight layer, with more drums and a busier serunai at the same tempo. The switch waits for its own bar line.
  • Jala (cast net), a slow 6/8 on the rebab, plays while you fish.
  • Dayung (oar stroke) takes you across the strait and lands with you. The saron and the bass join halfway over.
  • Pekan Besut (Besut town) is a joget on violin and accordion.
  • Radio Kak Yah plays from the transistor radio on her counter. It gets louder as you walk up to the shop, and the town song ducks under it.
  • Gua (cave) waits for chapter 3 and its first dungeon.
The game at the Kuala Besut jetty with the new Muzik tab open in the panel dock: Pekan Besut playing, with Kak Yah's radio nearby, sliders for music and ambience, and the list of songs heard so far, six of seven, with Ikut tempat selected. The chat below announces Lagu baru: Radio Kak Yah.
The Muzik tab in Kuala Besut, just after Kak Yah's radio was heard for the first time.

Every song runs at 100 beats a minute, one beat for each 600 ms tick. The music keeps its own clock, and the game's tick follows its beat, so your steps and strikes land on it. After a conversation or a crossing, the tick snaps back to the nearest beat. The rest of the time it is nudged a millisecond or two, so the two clocks never drift apart. Songs change on a beat and crossfade over two ticks. Under the music, the waves grow louder near the water, cicadas sing among the trees, and birds call on the island.

The new Muzik tab, key 6, lists the songs. Each one unlocks the first time you hear it, with a note in the chat: Lagu baru, a new song. With Ikut tempat, each place plays its own song. Pick any song you have heard to keep it playing everywhere. The tab has sliders for the music and the ambience, and B turns the sound on or off. Sound starts with your first click, as browsers require, and pauses while the game is in a background tab.

A phone screen at Kak Yah's shop, its red-and-white awning reading Kedai Runcit Kak Yah, with the Muzik sheet open above a tab bar of seven tabs: Pack, Skills, Quests, Craft, Gear, Muzik and Chat.
On a phone, Muzik is the sixth tab.

Thirty-three new checks ran, and the tests from earlier versions still pass. They cover:

  • that every song renders offline with no clipping, and every melody fills its loop;
  • that the beach, the post, a fight, fishing, the boat and the town each pick the right song;
  • that the radio rises near Kak Yah's shop and stops away from it;
  • that songs unlock, survive a reload and can be picked, with keyboard focus kept on the pick;
  • that the game's tick lands within 40 ms of the beat;
  • that six panel tabs fit on a 375-pixel phone, each at least 44 pixels wide.

Two problems turned up. The spawn beach is a few steps from Mak Long Esah, so at first the island song never got a turn. Jala now plays only while you fish or stand with her. The screenshots also caught the song count in the Muzik tab lagging one song behind, until the next redraw.

v0.36An atlas of Malaysia

LookWorldEvery state in its own colour, mountains you can see, and a sea full of whales, dolphins and ships.

The map from v0.35 was accurate but plain: parchment land on a flat blue sea. It is now drawn like an old atlas. Each of the 16 states has its own colour, so you can see where Kelantan ends and Terengganu begins. The ground has relief:

  • the Titiwangsa range runs down the peninsula;
  • the Crocker range lifts towards Kinabalu;
  • Sarawak climbs to the ranges along its border.

Light falls from the north-west, contour lines mark every 400 metres, and the coast is inked, with water lines offshore. Ten peaks are marked and named when you zoom in, from Gunung Kinabalu at 4,095 m to Bukit Bendera above Penang.

The map of Malaysia drawn like an old atlas: the peninsula's states in pale yellow, pink, green, teal and grey, Sarawak in pale orange and Sabah in pale green, all shaded with mountain relief; a red and brass compass rose with rhumb lines in the South China Sea; squiggly waves; and small pixel ships, junks, whales and dolphins scattered across the water.
The whole country, with the sea busy around it.

The heights are modelled, not surveyed. The game file carries no elevation data, so the land is raised along the real ranges and around the real peaks, broken into crests and valleys with noise, and kept flat along the shore. Building it takes about a fifth of a second, the first time you open the map.

The east side of the peninsula zoomed in: Kelantan in pink, Terengganu in teal, Pahang in green and Perak in yellow, with rugged shaded relief and contour lines; Gunung Tahan and Gunung Benom marked with small mountain symbols and their heights; Kuala Besut and Pulau Perhentian explored at the top; and junks, sailing ships and whales offshore.
The east coast at a middle zoom: Gunung Tahan, 2,187 m, in the middle of the peninsula.

The sea has squiggly waves that drift, and a compass rose with sixteen rhumb lines in the South China Sea. It also has traffic:

  • whales that spout every few seconds;
  • pods of dolphins that leap in turn;
  • perahu close to the shore;
  • junks, and two-masted sailing ships with a wake behind them.

They are pixel sprites, drawn at a size you can see from any zoom. They keep to open water and turn back from the shore, and new ones appear wherever you are looking. With reduced motion on, they hold still.

Sabah zoomed in, in pale green with the Crocker range rising to Gunung Kinabalu, marked 4,095 m, and Gunung Trus Madi; Sarawak in pale orange to the south-west with Gunung Mulu and Gunung Murud; a whale, dolphins, a junk, sailing ships and perahu in the sea to the north-west.
Sabah, with Kinabalu at the top of the Crocker range.

Unexplored territory is still there. States you have not reached are pale and flat under parchment. The ground you have explored is in full colour, with a dashed survey line round it.

The coast at Kuala Besut close up: a circle of full-colour ground and lit sea round Kuala Besut and Pulau Perhentian, each inside a dashed survey line, against pale unexplored Kelantan and Terengganu, with junks and sailing ships offshore and a question mark at Kuala Terengganu.
Explored ground is in full colour, inside the dashed line.
Three phone screens: the game at the Kuala Besut jetty, the atlas map of the peninsula with ships and the You are here marker, and the same map zoomed in on the coloured, shaded states of the east coast.
On a phone: from the jetty to the atlas.

The map now has thirty checks, four more than before, alongside the 141 others. They cover:

  • that six states have six different hues;
  • that Kinabalu and Tahan stand high and the shore at Kuala Besut is low;
  • that the sea holds whales, dolphins, perahu, junks and ships, all of them on water;
  • that they move, and that they stop for reduced motion.

Two problems turned up. Zoomed in on open sea, there was nothing in it. Water more than 14 cells from land carried a "not measured" distance, and the ships' rule read it as too far out. The 3D world also kept drawing behind the full-screen map. It now pauses while the map is open, and the game keeps ticking underneath.

v0.35A map of Malaysia

NewWorldTap the minimap for the whole country: the places you have been in colour, the rest unexplored.

Tapping the minimap, or pressing M, now opens a map of the whole country: Peninsular Malaysia, Sarawak and Sabah, alone in the sea. It is drawn from Natural Earth's real coastlines and state borders, the same data as the map on this page, on a grid of cells about 1.7 km across. Packed as run-length text, the whole country adds 9 KB to the game file.

A full-screen map of Malaysia in a carved teak frame: Peninsular Malaysia, Sarawak and Sabah alone in the sea as pale parchment marked Unexplored, the South China Sea between them, and a pulsing You are here marker on the east coast of the peninsula, with a legend, a compass rose, zoom buttons and a 200 km scale bar.
The whole country at the start of chapter 2. The ring on the east coast is you.

The first version drew the neighbours in muted green: Thailand, Sumatra, Kalimantan, Brunei, Singapore and a corner of the Philippines. They are gone now, so Malaysia stands alone in the sea. The neighbouring borders are still used while the map is built, to decide which islands are Malaysian. Brunei sits inside Sarawak's coastline, so it now shows as two bays.

Almost all of it is unexplored. Malaysia starts as blank parchment, with only the coastline and faint state borders showing. A place you have been is drawn in colour for 16 km around it, with green land, a sand edge and lit shallows. A new game knows only the sea around Perhentian. Landing at Kuala Besut opens up that stretch of coast and puts a red dot on the minimap until you look. The footer keeps score: by the end of chapter 2 you have seen about a fifth of one percent of the country, in 2 of its 16 states. Kuala Terengganu waits down the coast as a question mark.

The map zoomed in on the Terengganu coast: a green circle of explored land at Kuala Besut, a lit blue circle of sea around Pulau Perhentian joined by a dotted sailing line, unexplored parchment everywhere else with Kelantan and Terengganu named, and a question-mark marker at Kuala Terengganu labelled Not open yet.
The explored coast: Kuala Besut, the crossing, and the islands.

Drag to move, and scroll or pinch to zoom. Buttons zoom in and out, jump to where you are, and go back to the whole country. Zoomed far out, only the markers show, so the names do not pile up. The minimap no longer walks you anywhere when you tap it. That moved to the map's second tab, This area, which shows the island or town you are in at full size, with the people named. Click a spot there and you set off.

The This area view of Kuala Besut: the town drawn large in the minimap's colours, with the jetty, the river, the road, red-roofed houses, Kak Yah and the Harbourmaster named over yellow markers, crabs as red dots and a white arrow for the player.
This area: Kuala Besut at full size. A click here walks you to that spot.
Three phone screens: the game at the Kuala Besut jetty with the minimap at the top right; the map of Malaysia opened from it, showing the peninsula; and the same map zoomed in on the explored coast.
On a phone: tap the minimap, then pinch in on the coast.

Twenty-six new checks ran alongside the 141 from earlier versions. They cover:

  • that Pahang and Sabah are parchment while the sea around Perhentian is lit;
  • that only Malaysia is drawn, with Thailand and Kalimantan left as open sea;
  • that landing at Kuala Besut turns its coast green;
  • that saves remember what you have seen;
  • that a click on This area walks to that exact tile;
  • that on a phone the map fills the screen with 44-pixel buttons.

One problem turned up in the game: the zoom keys worked only while the chart itself had focus. Taking screenshots turned up an older one. After chapter 2, the quest card at the top left named a side quest above the main story's goal. It now names the same quest as the goal it shows.

v0.33A carved-teak interface

NewLookThe world fills the window, and the interface floats over it in teak, brass and songket.

Until now the game sat in a box on a web page, with a header, a 16:10 view, a status strip, a large empty chat box and a plain sidebar. Now the world fills the whole window, and the interface floats over its four corners, the way the resizable mode of the old browser MMOs does.

  • Top left: a menu behind a carved flower emblem, and a parchment card showing your quest and what you are doing.
  • Top right: a round minimap that turns with the camera, ringed in brass, with orbs for health and run energy.
  • Bottom left: chat, which folds away to a single line.
  • Bottom right: the panels, behind five icon tabs.
The game filling a wide window: the quest card and flower emblem top left, the round brass-ringed minimap with red health and gold run orbs top right, the chat bottom left, the Pack panel with its icon tabs bottom right, and a red songket ribbon announcing Fishing level 15 over the beach.
The interface at 1440 by 900, just after a Fishing level-up.

The look is carved teak and songket. Panels are dark teak with brass rails and small flowers at the corners. Borders carry pucuk rebung, the bamboo-shoot triangles woven along the edge of songket. Names and selected tabs sit on a red songket lattice. The emblem is a bunga pecah lapan, the eight-petalled flower of Malay woodcarving. Anything you read sits on parchment. Every icon is a 16 by 16 pixel drawing made in code, from the fish beside Fishing to the songkok in the hat slot.

Four panels side by side: Skills as eight tiles with pixel icons, levels and a total-level plaque; Quests as parchment cards with ticked steps; Gear as a paper doll with six slots around a brass figure; Craft as recipe cards with green and red requirement chips.
Skills, Quests, Gear and Craft. Craft cards say what is missing, and Gear is a paper doll.

Conversations now show who is talking. Each speaker's portrait is rendered once from their own v0.31 skeleton, head and shoulders, and kept for the rest of the session. The name sits on a songket plate, small diamonds count the pages, and Space turns them. Items in your pack open a card with their English and Malay names, what they do, and what Kak Yah would pay. A level-up raises a ribbon with a burst of petals, and hitsplats have shapes: a burst for a hit, a shield for a miss, a leaf for healing, and rings on the archery target. The sail to the mainland is now drawn on a parchment sea chart.

A parchment dialogue box over the beach: a round brass-framed portrait of Mak Jah in her purple headscarf, her name on a red songket plate, her first line of dialogue, two page diamonds and a Next button.
Mak Jah introduces herself. Her portrait is drawn from the same rig as the figure by the fire.
A parchment sea chart: the Terengganu coast with Kuala Besut, a dotted route across the sea to the two Perhentian islands, a small sailing boat on the route, and a flower compass rose.
The crossing, drawn as a sea chart.

On a phone the panels become a bottom tab bar with Chat beside them. Each tab opens one sheet at a time, and every target is at least 44 pixels. The keyboard reaches everything: 1 to 5 open the panels, R toggles running, Space turns a page, and Esc closes things in order. A reduced-motion setting, taken from the system or chosen in the menu, stops the ribbon, the petals, the bobbing and the sailing. Because the world now fills the window, the renderer keeps to a pixel budget rather than drawing three times as many pixels.

Three phone screens: the world with the quest card, minimap and orbs at the top and a one-line chat ticker above the tab bar; the Quests sheet open above the tab bar; and a conversation with Mak Jah at the bottom of the screen.
On a phone: the world with a one-line chat ticker, the Quests sheet, and a conversation.

Eighty-two new checks ran at 1440 by 900, at 1280 by 720 and on a 390-pixel phone, alongside the 59 from earlier versions. They cover:

  • overflow, and which parts of the screen take clicks;
  • shortcuts and the order Esc closes things in;
  • tooltips, every panel and the portraits;
  • reduced motion, touch targets and a name on every button;
  • the contrast of each colour pair, including chat text on glass over a white worst case;
  • that the page does no DOM work while you stand still.

Two problems turned up. The pixel font turned a small C into an O and a small G into a B, so labels moved to Alegreya Sans and Spline Sans Mono, and Pixelify kept the big titles and the numbers. The level-up ribbon also touched the page once more after it had already hidden itself.

v0.31People who move

NewPeopleLookSmooth characters with faces, an animation system, running, and creatures on the same bones.

Until now every person was a stack of separate boxes, with gaps at the joints and no hands, feet or face. Each one is now a single smooth low-poly mesh bent by a skeleton of 29 bones: hips, spine, chest, neck, head and jaw, eyes and eyelids, shoulders, arms and hands, legs and feet, and two bones for the hem of a sarong or skirt. Each joint blends between its two bones, so elbows and knees bend without cracking open. Clothes, headscarves, hats and beards are part of the same mesh, so a person takes one draw call where it used to take about two dozen. Everyone blinks, and when someone speaks, their jaw moves with the words.

Nine low-poly characters standing in a row against a pale blue background: the player with a staff, Guru, Tok Ali with a bow, Mak Long Esah, Pak Mat, Mak Jah in an apron with a fan, Abang Zul with a rattan stick, Encik Rahman in his peaked cap, and Kak Yah.
Everyone so far, on the same skeleton: the player, Guru, Tok Ali, Mak Long Esah, Pak Mat, Mak Jah, Abang Zul, Encik Rahman and Kak Yah.

Movement comes from a small animation system written for this game. Walking and running are tied to the distance covered, so feet never slide. Every kind of gathering has its own loop: a parang for chopping, a net thrown wide, a skewer held over the fire. Fighting has a three-strike staff combo, a guard stance, blocks, dodges, a flinch and a fall. Damage now lands when the blow connects, about a fifth of a second into the swing, not on the click. The game logic never waits for an animation. The tick runs as before, and the body catches up.

Ten poses of the player against a pale blue background, in two rows: walking, running, chopping with a parang, casting a net, squatting to cook with a skewer, drawing a bow, striking with a staff, giving a salam, sitting cross-legged, and waving.
Ten of the new clips: walk, run, chop, net, cook, aim, strike, salam, sit and wave.

You can run now. Press R or click the orb under the compass. Running covers two tiles a tick and spends energy; a full bar lasts about a minute and a half. Energy comes back while you walk, faster at a higher Body level, and twice as fast sitting down. Monsters still move one tile a tick, so a crab can be outrun.

Two strips of five side-on frames each: above, the player walking past a campfire with the arms swinging gently; below, the player running across grass, leaning forward with the knees lifted high.
One stride walking (above) and one running (below), five frames each.

The islanders notice you now. Their heads follow you as you pass. They greet you with a salam, a nod or a wave, then go back to work: Pak Mat with his adze, Mak Jah fanning the fire, Abang Zul striking at the air, Tok Ali drawing at his targets. When someone speaks to you they gesture, and you turn to listen. Encik Rahman and Kak Yah wander a step at a time. Right-click yourself to wave, give a salam, cheer or sit down. If you are knocked out, you fall where you stand, lie still for three ticks, then wake at the spawn and get up.

The player close up on the beach, holding a staff, with a face, hands and feet; Guru and Tok Ali stand behind by the archery targets and Mak Jah works at the fire on the left.
The player with the toya. Guru and Tok Ali behind, Mak Jah at the fire.

The creatures use the same system. Crabs scuttle sideways on alternating legs. Monitor lizards trot with the spine and tail swinging. The macaques of Kuala Besut walk on all fours and bound when they are angry. Each has its own attack and its own way of dying.

A crab mid-scuttle with its claws raised, a green banded monitor lizard mid-stride, and a long-tailed macaque walking on all fours.
Crab, monitor lizard and macaque, mid-stride.

Twenty-nine new checks ran in a headless browser before release, alongside the thirty from earlier versions. They cover run speed and energy, every clip and the prop it holds, blinking and talking, and a soak of 2,000 random frames looking for broken joints. They also set a budget for animation time. On the test machine, all the people and creatures in view animate in under half a millisecond a frame. They caught two snags: cooking never started its loop, and Abang Zul's strikes never made you flinch.

v0.28Teachers, archery, and a better site

NewPeopleSiteFive islanders teach five skills, the bow arrives, and this page gets a redesign and a real map.

Perhentian Island now has five teachers besides Guru, each standing by the thing they know. Tok Ali keeps an archery range in a clearing near the beach. Mak Long Esah mends nets by the reef, Pak Mat works at the boatyard, Mak Jah cooks at the fire, and Abang Zul waits by the training post with a rattan stick. Each one sets a single task. Finishing it teaches a lesson that stays with you: faster fishing, faster chopping, less burnt food, a point of armour, and for Tok Ali, archery itself.

Archery is the eighth skill, Memanah. Tok Ali teaches it the way traditional archery is taught in Malaysia today: nock the arrow, draw the string to the chin, look at the target, release softly. Target practice is free. Shooting a crab costs an arrow, works from six paces, and needs a clear line of sight past the trees. Arrows come from the boatyard (one timber and one coconut fibre make ten) or from Kak Yah, who also sells a horn bow for Archery 10.

The player drawing a bamboo bow at the range, with three painted straw targets in the clearing.
At Tok Ali's range. The 7 is the score for that arrow.

The site was redesigned after looking at how game landing pages and changelogs are put together. A game page wants a strong hero, one clear way to play, features you can scan, real screenshots and the people in it. A changelog wants a summary line on every entry, newest first, and older entries folded away. The map is now drawn from Natural Earth's real coastline, rendered in the game's own minimap palette. The route follows the rules of a subway map: one line, stations as nodes, only 45° and 90° turns, and a legend for every symbol.

Fifteen checks from v0.25 and fifteen new ones ran in a headless browser before release. They caught one real snag: Abang Zul kept on sparring when you came back to report, so you could never finish his lesson.

v0.25Landfall at Kuala Besut

NewWorldChapter 2: sailing, a second map, a shop, coins and clothes.

The boat from the end of the tutorial now sails: the view fades to night sea, a small perahu crosses a dotted line, and you tie up at the end of a jetty in Kuala Besut, where the Besut river meets the sea.

The town is a second map: a beach, a river lined with painted east-coast fishing boats, a bridge, stilt houses, a mosque with the tiered roof of old Terengganu mosques, and a fish market. Encik Rahman is the harbourmaster, a post once called syahbandar. Kak Yah runs the sundry shop.

Kuala Besut seen from above the jetty: a T-shaped wooden jetty with the player's boat, the beach, an open-sided fish market, the harbourmaster's blue-roofed office, Kak Yah's shop, stilt houses with red roofs, and fishing boats in the river mouth.
Kuala Besut from the end of the jetty.

Coins came with her: ringgit, earned by selling what you catch and cut. The garment slots from v0.15 finally paid off. A terendak (straw hat), a baju Melayu, a kain pelikat (checked sarong) and capal (sandals) each change how the character looks the moment you put them on.

The player on the village road in a conical straw hat, a blue baju Melayu and a green checked sarong, beside Kak Yah in front of her shop's red and white awning.
The first outfit from Kak Yah's shop.

Underneath, the world was rebuilt as zones so the game can hold more than one map, and saves from v0.18 carry straight over. Merging the mainland scenery into chunks the camera can skip took it from 317,000 triangles a frame to about 37,000. A headless playthrough caught a fish market built half in the sea and a jetty sign that read backwards from the boat.

From a question to an island in 3D

NewWorldPeopleLookSitePrologueNine versions and this site, v0.00 to v0.18: a test island, the first Pendekar, low-poly 3D, English names, a bigger island, people with necks, smoother steps and a quest journal.

SiteA place to tell the story

SiteThis website and its build journal.

This page. The screenshots on it are taken from the real build in a headless browser, and the journal grows with every version.

v0.18A journal for quests

NewA Quests tab with live counters.

A Quests tab joined Pack, Skills, Craft and Gear. The tutorial became a named quest, Castaway's Training, with eight steps that tick off as you go and counters that update live. A dot on the tab shows when something changed, and the chat log announces quests starting and finishing. Testing the tab turned up a bug: Guru's dialogue box stayed on screen after you closed it. Fixed in the same version.

The in-game Quests tab: Castaway's Training in progress with three steps ticked and 'Hit the training post (6/10)' active; later quests locked below it.
The Quests tab mid-tutorial, as it looks now.

v0.16Smoother steps

LookEased walking, bending knees, no sliding feet.

Characters used to snap from tile to tile with straight legs. Now the drawn body glides toward its tile with a damped follower, which rounds corners and eases every start and stop. The stride is tied to distance travelled, so feet never slide. Knees and elbows bend, hips sway, and the torso twists against the hips.

Five side-on frames of the player walking across the grass, showing the legs and arms swinging through one stride.
One stride, five frames about a fifth of a second apart, captured by stepping the game clock one frame at a time.

v0.15People with necks

PeopleLookA better character rig, and garment slots for future gear.

The character rig was rebuilt: a neck, shoulders, a slimmer waist, a jaw, ears, a nose and a mouth. More important for later, every visible garment became a slot: hat, top, belt or sarong, trousers, shoes, vest, weapon. Guru wears a tanjak, a folded headcloth; the player a songkok.

The player character seen from the front, with a visible neck, shoulders and jaw, holding a staff, with Guru behind.
The player after v0.15, with the toya Guru hands over in the first conversation.

v0.13Bigger islands, fewer trees

WorldA larger map with more open ground, fish and monsters.

The world grew from 60 by 40 to 90 by 60 tiles, about 2.2 times the land. Cuttable trees dropped from around 100 to 29, palms to 9, with more open grass between them. To keep the bigger island busy, fishing spots went up to 18 and the monsters to 21: fourteen crabs on the beaches and seven monitor lizards in the jungle.

The training island seen from high above: a jungle of low-poly trees, a sand beach with palms, a rock outcrop, crabs, and bright shallows around the shore.
The training island from above, as it is today.

v0.11English first

LookEnglish names lead; Malay sits beside them.

The first builds led with Malay: Tukang Kayu, Nelayan, unggun, bengkel. Reading them cold was work. The names were flipped so English leads and the Malay sits beside it, in the Skills tab and in every item tooltip. Guru still says toya and perahu, and explains them the first time.

v0.10Low-poly 3D

Lookthree.js, a heightfield, a sea, and a camera that orbits freely.

The 2D tiles went. In their place, a three.js renderer in the low-poly style: the tile map becomes a heightfield that rises gently inland, the sea is a translucent plane with foam along every shore, a sun casts soft shadows, and fog settles over the far water. The game logic did not change at all; the renderer was swapped underneath it. On top came right-click menus, hover labels, hitsplats, XP drops and a minimap.

v0.05Pendekar, the whole game in 2D

NewSeeded islands, seven skills, Guru's tutorial, saves.

The first real build. A 60 by 40 world with two islands grown from seeded noise, so every player gets the same map. Eight-direction pathfinding that refuses to squeeze through diagonal gaps. The RuneScape XP table. Seven skills, a 20-slot pack, crafting at the boatyard, two monsters with their own tempers, Guru's tutorial quest, and a save in the browser. It was checked before it was looked at: counts and reachability were tested in a headless run.

v0.01Brinefall, a throwaway island

WorldA flat 2D test island to prove the tick loop.

Before any of the Malaysian world existed, a small test island on a flat 2D canvas: 44 by 30 tiles, a tick loop, click-to-walk pathfinding, trees to cut, fish to net, a fire to cook at and crabs to avoid. It proved the loop worked and was then set aside.

v0.00It started with a question

PrologueWhy RuneScape caught on, and a game set in Malaysia.

It began as a question: why did RuneScape catch on? It ran in a browser, it was free, the skills rewarded time, and the world felt shared. That led straight to a plan: make a game with the same mechanics, but change the theme, the weapons and the map, and start with a small one. The setting came quickly: Malaysia, with silat for the weapons and skills. Then a better idea for the start: the Perhentian Islands as a training ground, and a boat to the mainland.

What comes next

Written the way the game writes its quests. Order is a plan, not a promise.

The road to Kuala Terengganu Next

Chapter 3, and version 1.0. The coast road south, once the monsoon floods go down.

  • Open the road south from Kuala Besut
  • Kuala Terengganu: a bigger town, a bigger market
  • Songket armour
  • The first real dungeon

Ways of silat Started

Weapon families with their own reach and rhythm.

  • Range: the busur, a bamboo or horn bow
  • Reach: the toya and other staffs
  • Quick: keris and short blades
  • Heavy: parang and the like

Dressed for it Started

Shops, and clothes that show on your character.

  • Tops, sarongs, hats and shoes as items
  • Coins, and a way to earn them
  • A character creator: body, skin, hair
  • More shops, more colours

More to do on Perhentian Started

For players who are not ready to leave.

  • Lessons from the island's residents
  • Rarer fish, and a reason to cook them
  • A hidden spot or two

A carved-teak interface Done

Shipped in v0.33.

  • The world fills the window
  • A round minimap with orbs
  • Portraits in conversation
  • A tab bar and sheets on phones

Lessons on Perhentian Done

Shipped in v0.28.

  • Archery with Tok Ali
  • Fishing with Mak Long Esah
  • Woodwork with Pak Mat
  • Cooking with Mak Jah
  • Defence with Abang Zul

Landfall at Kuala Besut Done

Shipped in v0.25.

  • Build and launch the perahu
  • Sail to Kuala Besut
  • Meet the harbourmaster
  • Buy your first piece of gear
  • Take the boat back to the island, any time

How it is built

Pendekar is designed by one player and built with Claude, in a running conversation. There is no studio and no engine. The game is one HTML file with three.js for the 3D, the logic and the renderer kept apart so that either can change without the other.

Mechanics borrow from the browser MMOs that inspired the project. The world, the names, the models and the map are original.

13published versions
171headless checks before v0.36 shipped
0build steps
  1. 1The player writes a note. Usually one line: what feels wrong, or what is missing.
  2. 2When the note asks for it, research comes first: references, real places, how others solved it.
  3. 3The change is built, with the game logic and the renderer kept separate.
  4. 4The result is played through in a headless browser, checked, and screenshotted.
  5. 5Published as a new version, and written up here.