This Month in Jikaze (2025-03)
Published
Catch up on the developments and current state of Jikaze from 2025 March.
Not much has happened this past month due to prioritising personal matters. Instead, this post will discuss the next immediate areas that will likely be worked on.
jikaze_riichi_core
Not all changes are listed below; you can view the complete list of commits for the previous month here: https://codeberg.org/amenoasa/jikaze/compare/27e34ef2dac5b22a8146bda0cad3733f8f8dc160...822ee7653a654b6023f5b0b1423fecdf48630a23.
CI
- [3a30363] Forgejo Actions was added to automatically run the Rust tests, run Clippy lints against the project, and check for any rustdoc errors.
Documenation
- [8a95c9b] A limit hand scoring table was added to the documentation so that users can conveniently see how many points a hand is worth based on dealer/non-dealer, han value, and fu value.
- [d33b507] Unicode Mahjong tiles in the dora tile order are now displayed larger to make it much easier to see each tile's details and be able to read them; the default font size made it inaccessible for most people to be able to tell what tile was being used in the text.
To ensure that each tile is accessible to read, a
title
attribute was added to each tile to describe what tile is being displayed (in English). - [c18a8e6] The MPSZ notation table now attempts to display the red dragon (Romaji: chun) in its text represenation so that it can be stylized with the same tile CSS as the other tiles. The emoji representation causes styling problems as browsers render them differently to regular text, especially when the font size is larger than typical defaults.
Hand
- [822ee76] When calculating the yaku in the hand, all of the parsed yaku is now returned instead of returning early when there are yakuman detected. This means that in normal games of Riichi Mahjong with limit hands, all non-yakuman yaku need to be removed when scoring if there are any yakuman as obtaining a yakuman is the maximum score a hand can achieve. In other game modes, this can add the possibility of stacking yakuman yaku with non-yakuman yaku for games where the goal is to score the highest-possible hand in a Balatro-style game. Simply put, the library will not make any assumptions about how the game is being played and will leave it to the consumers of the library function to determine the logic around what yaku are valid for their application.
Server
The current server implementation uses Renet, however, due to the lack of documentation and fundamental lack of understanding of computer networking, Renet will likely be replaced with Jikaze's own implementation. The lack of understanding of computer networking concepts prevents me from knowing what needs to be written for the server and how clients can interact with a server. I have a recommended textbook that I will be reading through to fill in this gap, and the person that recommended it to me said that it took them about 2 months to get through it.
There are other networking libraries such as Lightyear, however, it is designed specifically with Bevy in mind. I want the server to be able to be run independent of the game engine of choice so unfortunately, I must exclude it.
Client
I am looking to build the client in Bevy because I've heard a lot of good things about it. I have heard it takes some time to become familiar with using an ECS (Entity Component System), but once you do, it becomes easier to keep the code structured and organised. Right now, the latest upcoming version, 0.16.0, is in the RC stage and is expected to be released fully soon. Once it is released, I intend on learning how to use Bevy and begin the work to make the client.
If you're interested in this project, please consider starring the Jikaze and Mahjong Assets projects or getting involved! I will be more than happy to answer your questions or reviewing pull requests.
You can also find me on Matrix in the #jikaze:matrix.org room.
I have Liberapay and Open Collective pages where you can help sponsor development of the project.
Thank you for reading this update in Jikaze!