Development progress #1


Hi everyone. I’m starting the series of developer progress updates where will dump all the recent implemented features. At the moment playable demo is just reflecting the actual gameplay, but doesn’t have the beginning and the ending, so be patient, enjoy handcrafted graphics and prepare for the one of the most hardest and cutest rougelite adventure in your live.

A lot of things has happened during the last two weeks regarding development progress. And I’m super exited to share the things with you. So let’s begin.

Graphics

The style of the art works are a handcrafted fairy tale. Our wonderful artists finished with level and character graphics. The character was also animated via Spine and got these animations: idle, idle_hi, pickup, jump, dash, win. They are super smooth and cute. Check out them on the game’s page. There are also four beautiful levels done in different genres and environments, like a sunny beach, jungle, arab night and a cherry blossom. The sunny beach level is already implemented and available, but let’s keep in secret the rest. Just believe me, they are superior one.

We are still lack of nice UI, but it’s WIP.

Programming

Codebase

The codebase was translated from JS to TS to support the work with abstractions like level builder, character skins, gameplay modifications etc. I know it sounds unclear, but let’s summarize, that this really helped me a lot with architecting objects’ behavior and interactions between them with minimal effort.

Finite State Machine and Skills

The topic is the basement of character movement. I managed to make it really comfortable to work with. I also implemented the concept of a skill which is used inside a state, but doesn’t make a mess where the state’s logic is intertwined with kind of action logic. What I mean is e.g. a character has DashState and DashSkill. DashState describes state transitions and how and when DashSkill is called. Meantime DashSkill implements the behavior of the action. So as the result I have an easy way to modify skill’s behavior without touching the state machine (single responsibility in action!).

There is also a skillbook which stores all the player abilities. It’s not a classic skillbook, because there are no actually skills in the game. It’s more like abilities and available actions. Thanks to the skillbook I can easily enable and disable skills instead of commenting [sometimes huge and distributed] pieces of logic. See how it works:

private createSkillBook(player: Player) {
  // list of available skills in the game
  const dashSkill = new DashSkill(this, player);
  const jumpSkill = new JumpSkill(this, player);

  // create a skillbook
  const skillBook = new SkillBook<SkillName>([
    [SkillName.Dash, dashSkill],
    [SkillName.Jump, jumpSkill],
  ]);

  // modify skill if we want
  jumpSkill.setLimit(player.getJumpsLimit());

  // learn skill to make it available for player
  skillBook.learn(SkillName.Jump);

  return skillBook;
}

Community

I opened game’s page on itch and started these dev log series in order to make you guys understand what am I doing and when it will be finished. I hope this will also attract new people who wish to play finished game.

I also started vk group for our Russian community, who regularly visit my twitch stream to see how development is going.

In the next series of devlogs I will start introducing you with the game mechanics and explain why and how they make this game so unique and hard enough.

Leave a comment

Log in with itch.io to leave a comment.