Home Artists Posts Import Register

Content

Hi everyone!

This month I worked a lot on SUGAR! I also did some paid work on the new Castle mobile app, making a few small games! And I finally updated Pixel Session Vol.1 with executables!

I also did those tiny animations on my Pico-8 structure building game, but that's all I got done on this particular project. I still want to finish it though!


In the last newsletter, I wrote about how I was looking very hard at how to do the lua integration in SUGAR. Well, I've started doing it! But I also started making a lot of other changes to the engine... Oops?

I haven't taken on SUGAR as my main project since late 2018. In that time I've mostly worked in Lua, on the Castle desktop platform and on the occasional Pico-8 project or tweetcart. I made Sugarcoat, a Love2D/Castle library to use the SUGAR API with those two engines, then I made quite a few games with it. In late 2018 and then again in 2019 I got the opportunity to talk about Pico-8 and SUGAR and intentional limitations in game development, at Indiecade Europe and at Nordic Game Jam. Later in 2019 I got the opportunity to teach Pico-8 to students. With all of this, I learned a lot about Lua myself, and I actually got a lot of new insights about my own engine and what I really want with it.

My goals haven't really changed. I still want SUGAR to be easy-to-use, minimalistic but with wide possibilities, encouraging creativeness within limitations, and keeping to the "new retro" aesthetic of low-resolution pixel art. But I feel like the way I did some things in SUGAR is not necessarily ideal for these goals. For example, I always wanted to make SUGAR's API small and easy to remember, yet I got so excited with the possibilities of making one's own engine, that with what I made, the gfx API alone is really kindof big and not, in fact, easy to remember. And I really think that with all that I learned, and also because of the time that passed in-between, I have a much better perspective now on the engine than then. And so I want to change things.

And I started doing so! And I'm doing the lua integration at the same time, so that I can actually think of how the lua scripting with look while reworking the functions in C++. I also think now that Lua will have a much bigger place in the engine than I first intended. It was going to be a C++ framework with some Lua scripting functionalities, and now I'm moving towards an engine where you mostly use Lua, with maybe the possibility of making C++ add-ons.

The first thing I've reworked is the memory API. In theory, the memory would underlie graphic surfaces so that you can change what those surfaces look like by reading and writing directly to the memory. The memory could also be used to store other data, and maybe even sound effects and soundtracks, like it's the case in Pico-8. But when I first implemented my memory API, I had already most of the other systems in place. And so it was the memory that was built on top of the existing graphics system rather than the other way around, and it made it very weird and awkward. And well, I rebuilt it from the ground up, and then I started working to make the gfx systems lie on top of it, as it should be. It's a lot of work but I truly think it's for the better, and it's much easier to do now that I've taken such a long pause from the project.

And it works by the way! Check this out:


I'm not quite done modifying the gfx systems, but the memory API is feeling pretty solid so far. Still I want to do more testing with it because I think it can be further improved.

Another thing I've worked on is the window API, which now allows you to have multiple windows, move them, resize them, make them fullscreen, resizeable, borderless, but also transparent and even "always on top", meaning they will stay above other windows on your system. I couldn't get everything to work properly just yet, so I can't show it in action, but the lua functions you'll use are pretty much set in stone, and I'm really happy with them! Without going to much into explanations, here is the list of the window functions:

newwin  delwin  window  flip  winspec

And that's it! Once your window is created, you can use the 'window' function to target it and you can use 'winspec' to get or set a variety of specifications, using its first function argument as a flag. For example:

winspec("layout", x, y, w, h) will set the window position to x,y and its size to w,h.
winspec("layout") will return x, y, w, h: the window's position and size.
winspec("trsp", 0) will make the color 0 transparent on the window.

And I think that works really well and is a good example of what I want to achieve with the other systems too!

That is all I'll say for SUGAR this month, but I'm very much still working on all this and there will be another update in the next newsletter! I'm really happy to be working on this project again!


I wrote about this last month: Castle has been working on a mobile app with visual scripting to make small games and things! In the last two months it started to get more complete and cleaner, and I'm still getting paid to make things on it, so I do!

At the beginning of the month I made endls brkout, which you can see above. My goal was to make something really good-looking with the recently added vector drawing tools. And I do think I did pretty good! Visual scripting is not exactly my cup of tea, but making pretty things motivates me a lot.

Later I made another paddle game where you bounce a ball off a big circle and the paddle rotates around the latter. And then I made a randomized-fireworks demo! Let's talk about that one!

Castle doesn't currently have a nice way to get random numbers at all. The only two ways to get randomization are:

  • The "Coin Toss" condition, which lets you make something happen, or not, following a set probability between 0 and 1.
  • Physics, which can be pretty unpredictable. The idea is that if you get some objects bouncing off each other "randomly", you can get collision events and somehow use their positions or/and timing as randomizing elements. But this mostly works only for specific situations.

I did not use physics random, I used "Coin Toss" random, a lot of it. My trick was this:

if (cointoss(0.5)) add 8
if (cointoss(0.5)) add 4
if (cointoss(0.5)) add 2
if (cointoss(0.5)) add 1

This would give me a random number between 0 and 15 (8+4+2+1). But you can also use {5, 2.5, 1.25, 0.625} to get a number between 0 and 9.375. It's not a perfect technique, getting a number exactly between 0 and 10 is trickier, and all those cointoss take up a lot of place in the visual scripting environment, but it works, and in a clean way.

With one of the last Caslte updates, you can now modify objects' information, like their position or movement, with the visual scripting, so that's what I did for those fireworks: for each cointoss I would add to an object's X position or X movement or Y movement.

In the end it took some time to get done but I'm satisfied with the result, and my hope is that it shows Castle what a proper way to get random numbers could add to the app, so that they do add it. We'll see if it happens!

In the meantime, you can finally try out the app yourself! They are entering a sort of (still fairly exclusive) beta phase. For android users, you can get the latest APK directly from this link. For iOS users, you have to complete a short form to enter "TestFlight".


This month I updated Pixel Session Vol.1 to use actual executables!

When I released this pack of 5 small Pico-8 games, in 2016, Pico-8 could only export games in html+javascript. That's what I used. It might not have looked super professional, but it worked well enough! Until it didn't!

A Google Chrome update broke the old html player and the games lost their audio! So I decided to update the games to the latest version of Pico-8 and export proper executables this time.

I had to go and change the code of two of the games because of some things that were broken by the updates Pico-8 got in the last 4 years, but luckily it wasn't too much of a pain to fix. I repackaged everything and uploaded platform-specific packs. The games are still the same as they were and price is still 3$. Not for you though, if you haven't yet, you can get the pack of games for free from this link. (you will need to have an Itch account)


That's all I worked on during August. I have tons of projects I want to get to eventually, a lot of which depends on my current work on SUGAR, so that's my priority at the moment.


This month Risk of Rain 2 got its release update! It had been in Early Access so far and was already a great experience. I already wrote about it in a previous newsletter: it's easily one of the best action games I have ever played.

The new update added one more playable character to the game, an intro cinematic, a few new items and mechanics, but maybe most importantly a final boss. Annnd it is (/was) broken.

[SPOILER: this next paragraph spoils the final boss fight in Risk of Rain 2]

Now, I don't know if it's just me playing bad, or if it's the characters I choose to play (usually high DPS and low defense), but 4 times I tried and 3 times I got one-shot by the boss' last phase. The one time I beat it, I was playing on easy and I actually killed the boss BEFORE it properly started its last phase. In that phase, the boss steals all your objects, and attacks your now-naked character. So you're very vulnerable and even though the boss' attacks are fairly sluggish, it's really easy to make a mistake at that point. With all your objects, the boss just kills you with the first attack that lands.

The developpers have said in a post that this was not their intention. This thing that killed me again and again was not intended to be the hardest part of the fight, and they actually nerfed it in a more recent patch. I didn't get the chance to play it again since the patch came out yet, but I will.

That aside, the boss fight is really well made. The boss stage is really well done, and the music is incredibly good. It all shows an excellent taste in scenarism, and it puts you even more on the edge of your seat as you would already be for the rest of the game. The boss itself is well designed, with a fairly challenging array of attacks. It's really good stuff!

The new content they added is also very good. Some new features give more control over the course of the run, by letting you exchange items a little more efficiently. The new character has a shotgun, so obviously it's very satisfying to play.

Overall it remains an incredible action game, and I would definitely recommend giving it a play. Even though the game has now reached its release version, the developpers said they would likely keep adding new things to it in the future.


Next up, Mixolumia came out this month as well! It's a musical puzzle game from indie friend Davemakes!

In the game you stack up blocks in a grid that is at a 45 degree angle. The blocks go downwards and to the sides like sand, and when you get a sufficently big group of blocks of the same color, they are destroyed, the other blocks above it fill the space, you get points, and the soundscape reacts to it while pretty things happen on the screen.

I'm not exactly a puzzle game person so I won't go on too much about this one, but I think it's fun and very nicely made. Plus, you can use your own palette to play the game, and you can even mod the game with your own soundscape, which is really cool!


The only music I will recommend this month is... the Risk of Rain 2 Soundtrack. It is that good. Chris Christodoulou did an incredible job composing the soundtrack for the first Risk of Rain, and then an even better job with The Hopoo's other game DEADBOLT, but with Risk of Rain 2, he knocked it straight out of the parc. The music works really well with the game, but it also stands very strong on its own. Some very stisfying ambient electronic prog rock for your ears! 


Finally, let me recommend you one last thing I discovered: the Itch io Youtube channel! Every day they put up a new video about one game on their platform, showcasing its first few minutes of gameplay with no commentary. While playing innovative games is important when you're a gamedev, there's also a lot to get out of watching an innovative game being played. Itch is full of innovative games, and this Youtube channel is an incredible resource for new ideas.


That is it for this month! As always, thank you all for your super generous continued support!

In September, I will mostly be focusing on SUGAR, there is still a lot of work to be done there. My hope is that I have something at least somewhat useable by the end of the month, but we'll see. If you have questions about anything, please don't hesitate to ask!

I hope you have a nice month!

Take care!

Rémy 🍬

Files

Comments

No comments found for this post.