Bleeding Cyan

"To them, size and power are equivalent. It is odd to see a prisoner believe a bigger cage will set them free."

The Games Foxes Play

(complete source code | view all previous posts)

Maximum productivity.

Video showcasing the Soul Wheel, Epsilon and some dashing around.

Video showcasing the message log (it only prints random placeholder messages currently) and the Hypnotic Well (with a small graphical glitch).

  1. "Axioms" have went through a lot. Starting off as generic "press button and pre-coded effect happens", they ramped up in complexity to hilarious heights, to the point where it was possible to craft spells such as "when taking a step, across the entire map, teleport every creature in random places, then cast all of their spells in random directions" or other such ridiculous combinations. Not only is this completely OP, it is also very hard to understand, especially for those who have not touched coding a lot.

In this new Rust version, I have returned them under a simplified version, with only:

  • A Form, dictating where the effect happens.
  • A Function, dictating what the effect is.

For example, "Self-Dash" makes you dash around, but "Beam-Dash" forces a creature hit by the beam to dash, basically acting as a knockback effect. I hope that, with varied Forms and Functions, I can strike a good middlepoint between creativity and simplicity. There is still room for crazy stuff down the line.

  1. The Soul Wheel is back, now with extra crispy animations. It always offers 4 Soul casts of Vile, Ordered, Feral, Saintly or Serene type, each one linked to a Form-Function combo. For example, you can set Saintly to be your dash and Vile to be your attack Axiom. It progressively empties a "draw pile" until it "reshuffles" everything back.

    • Serene Souls are infectious, and if a creature has at least one, when it "reshuffles", a random soul will be converted to Serene type. This means that casting a lot of Axioms will eventually turn your Wheel completely cyan.
    • Some Functions can "deal damage" - there is no traditional health in TGFP, but it does steal a number of Souls from the victim, disabling them into a stunned husk once all their Souls have been absorbed.
      • Yes, this means that Serene Souls can spread to creatures which do not have them like a disease. If a room is full of creatures fighting each other and only one has a single Serene Soul, given enough time, all Souls in the room will turn Serene.
    • In order to improve the "decision-to-keypress ratio", as DCSS devs would put it, it refills itself automatically - meaning that the complete list of controls required to play my game is now composed exactly of "WASD1234" (rebindable in the future).
  2. The message log is back, with smooth and graceful scrolling. It supports coloured text with [cyan]tags[/cyan] in old school forum style - a feature that was possibly the most horrendously gory piece of code in my JavaScript version. Glad to see it be much simpler in Rust/Bevy.

  3. Epsilon the robotic snake is back to some extent. Like every creature currently, it has no AI beyond moving in random directions, but its signature multi-tile slithering is pleasing to watch.

  4. I tried to bring the Hypnotic Wells, probably the coolest thing about the JavaScript edition of my game. However, it is much harder to pull off now, because I chose to zoom out the player's view a little bit, resulting in miserably minuscule "previews" of the next level. It probably gets even worse with screen resolutions smaller than 1920x1080. Still, I got it to work, though I might end up dropping them entirely in favour of something else.

  5. I don't understand scaling and resolutions at all. How do people get this stuff right? After frustrating amounts of cyber-butchery, I can only get 1920x1080 and 960x540 to render without ugly artifacts. Meanwhile, it feels as if every single game I ever played clamps nicely to my screen no matter what, while mine is constantly too big or too small if I ask some friends to test it. How do you scale a 16x16 sprite to 24x24?? How does DCSS manage to scale its tiles so nicely no matter what size you give to your browser window???

More to come soon, I hope. I have sane and insane ideas bubbling about in equal parts, and I intend to separate the wheat from the chaff.

Cogs Turn, No Matter How Rusty

"Its bindings are not forged of steel, iron or even rope - but rather its own dramatically lengthy tongue, pulsating with strength as the creature attempts to suffocate itself."

The Games Foxes Play

(complete source code | view all previous posts)

Hello. How long has it been? 3 weeks? I've been busy with the student's plight that comes with the end of a semester, but still snuck in some progress once in a while. The features showcased today are therefore the product of stray and scattered hours.

It is time to dial down the dreams and get working on real work that produces real results. I showed my genetic algorithm experiment last time I posted here, but I also did another experiment with peer-to-peer multiplayer with rollback in Rust right afterwards.

Useful for my game? Very likely not. Interesting? Absolutely, I am glad that I understand better how networking technology in multiplayer games works now.

But the time for messing around has come to an end.

Behold.

I have redone my entire basic game logic and UI in Rust and the Bevy engine (it used to be in pure JavaScript with the PIXI.js library). I'm a big fan of the minimap and the sidebars!

Pros:

  • The performance has received unfathomable improvements.
  • I no longer have to bang my head against the brick wall that is scaling the screen to every possible resolution.
  • The Entity Component System structure is amazing, I never want to do an object-oriented game ever again.
  • I just write things and they work. I still have not used the debugger once.

Cons:

  • UI support is quite sad. Don't tell anyone, but the "UI" in my game is actually just more game entities, except they follow the player around as it moves.
  • I have a feeling implementing mouse support will be a terrible experience.

As for the game's design - I have once again drawn out my butcher's knife and have been cutting out the chaff. I've been so obsessed with being creative - to the point where I forgot to be reasonable.

As an example, even the controls had been turned into a game mechanic. You literally started with a spell which was composed of the editable blocks "When pressing 'W', on the tile north of the caster, move towards the targeted tile, a turn passes'". Let's list the problems with that:

  • Removing the "a turn passes" component causes the player to freeze time forever, which is unfathomably OP
  • Removing any of the other components basically induces a softlock
  • Rebinding keys, a fundamental part of game design, was tied with a game mechanic (can't just do it in a quick menu, you need to use controls to rebind the controls)
  • Quality-of-life like "click on a tile to move towards it" like in most modern roguelikes was simply impossible

I am dialing it down, keeping the spirit of "build your own abilities" but in such a way that can coexist with the accessibility standards of modern gaming. I have a rather tight concept - a spin on the oldest ideas I ever had for this game, which I'll talk about when it is actually getting implemented.