[OpenJX Devlog #8] Adding NPC

The client does not keep the NPCs in one nice table. Their names, their kinds and the sprites they use are spread over several lists, so the importer has to read all of them and put an NPC back together before I can place it anywhere.

They come and go with the map. When a region loads around me the NPCs inside it are spawned, and when I walk far enough away they leave with that region, same as the tiles and the scenery. In this shot 24 of the 36 NPCs on this map are alive.

Read More

[OpenJX Devlog #7] Teleport gates

This one actually took much of my time than any other tasks. The data of the teleport gates in the client data is very confused, so it’s hard to get and draw the gates correctly in the map.

In the original game, I sometimes get confused when moving on the map and suddenly move to another, it’s like a hidden gate. So I decide to draw the gates on the map, I think it’s more convinent and controllable for players. And I also want to keep this approach of the engine for our sample data later. The issue we have to keep the draw gated still matching with the game style.

Read More

[OpenJX Devlog #6] Choosing font family for the game

This looks like a simple task, but for me it’s very important.

I see a lot of private game servers (not official), they built their own JXOnline game by modding or building from leaked source, but they chose a modern font family for the game. That’s terrible for me. I feel like who wants to play this game, they always want to find their nostalgic, that modern font just killed it.

Read More

[OpenJX Devlog #5] Adding obstacles and implement pathfinding system with minimap

Actually this one took me pretty much time to optimize. As in the past, the original game can’t solve this, they have a lot of lagged corners. The problem it’s not just pathfinding algorithm itself, it’s also about how the design obstacles.

This one I really want to make it much better than original version. Reach to this point, I think it will not just make a replicated version, I’m a bit ambitous to make a really better version than original game. Players can still feel the atmosphere of original game but without the annoyances caused by the flaws of the old game.

Read More

[OpenJX Devlog #4] The engine needs art of its own

Everything so far has been drawn from the original game’s data files. That is fine for proving the formats decode, but it means the engine cannot run at all without a copy of a commercial game sitting next to it. So there is now a sample package that ships with the repo — clone it, build it, and it runs, without a single byte from anywhere else.

Read More

[OpenJX Devlog #3] Wind, by bending the sprites I already have

The original game’s trees are still images. There is no wind in the data, no animation frames for it, and I am not about to redraw a few hundred trees. So the wind is applied to the sprites that already exist: each one is bent as it is drawn.

Bending a sprite

The renderer gained one call, drawTextureLeaning, which takes the sprite, how far its top edge should shift sideways, and how firm it is. Instead of one quad, the sprite is drawn as a stack of horizontal strips — one every four rows — each offset a little further than the one below it. The bottom row never moves, so a trunk stays planted while the canopy leans.

Read More