Of Course You Did
September 25, 2023Of course I did. Of course I got derailed off the new project and have started a new new project. It was as inevitable as gravity. However it should be a quick project (see you in six months with a half-finished, barely-working prototype of what I want to build).
Some friends of mine did el Camino de Santiago a couple summers back. During their voyage they met a fellow traveller who taught them a card game called Kaboom, and they were hooked. They kept playing it over and over their trip and when they came to Madrid they brought it with them and we got addicted as well. It is simple enough to explain but hard to remember all the rules until you have played a few times, and then you get in the flow and are very concentrated. The project is to program that game with a few AIs to be able to play it on the computer.
Each player gets dealt four cards, which they set in front of them, face down and without looking at them, two closer to them and two further. Each player should then look at their two closest cards, memorize them, and set them back down on the table. The undealt cards are placed in a pile at the center and the top is placed face up on the table. Then in turns players can either get the card that is showing or get one from the pile and substitute for one of their cards if they want to. The idea is to have the least points, with each card valued normally except for jokers, which are zero, and red kings, which are minus one. If you discard a card you got from the pile, depending on the value you can perform an action:
- 7s and 8s allow you to look at one of your cards
- 9s and 10s allow you to look at one of your opponent cards
- Jacks let you exchange one of your cards for one of your opponent’s, without looking.
- Queen does the exchange and you can look at what you received.
- King lets you look at a pair of cards and decide whether you can exchange them.
Additionally, if anybody discards a card you know is on the table face down, you can tap it and discard that card. If the card is yours, nothing happens, you got rid of one of your cards and therefore of points. If the card is not yours, you give one of your cards to the opponent that had the card that coincided with the tapped one. If you tap and reveal a card that does not coincide, you get an extra card as punishment.
The game ends when a player gets rid of all their cards and it’s their turn again, or when an opponent claims Kaboom and it’s their turn again. Cards are then added as score and if you claimed Kaboom and won the round with five or less points, you get minus five points. If you claimed Kaboom but didn’t win or had more than five points, you get your points and five extra. Ties are a loss for the kaboomer.
I want to program it in Rust to learn more about the language and get used to it, partly because I really enjoy it and partly because it won’t look bad on a CV. I have already sorted out the graphics part, which is usually the most tedious bit of all: downloaded a bunch of images for cards and fought my way through using SDL in Rust. The rest is implementing all the game logic and crafting the AIs, which will be the most interesting part.
New Project
September 4, 2023It has been a while since I have posted here, and a big part of that is that life has been kind of a mess since I last updated. I started playing in a second band, which takes itself more seriously. This is good because it means we actually play gigs and rehearse often, but it is bad because it chips away more time. Sadly the other problem has been work.
I had been thinking about changing jobs for quite some time due to some red flags that I was getting tired of ignoring. Suffice it to say that all those red flags turned out to be real problems and when I found some allies that allegedly wanted to change things, I started trying to implement improvements. But I came against a brick wall and hard, so finding a new position and adapting to it and coping with the old work has been a lot lately. I am finally on my feet.
That is why I am starting a new project that has been in my mind for some time and even some graphics have been worked out already. It is loosely based on the film Dellamorte Dellamore, in which a graveyard keeper slowly turns mad as he has to fight the living dead that come back from the grave to haunt him. So the idea is to have the keeper choose where to bury an amount of dead people that keep on coming back to life and try to kill him. Strategy and planning during the day, zombie shootout at night.
For graphics I am going with very basic pixel art, I will try to compose the music as I already have a couple of tunes in my head and it will be done in Godot, since it gives me most stuff done already. I want to have some playable version by end of the year, polish during the holidays and the months back and then put it out, no fanfare as is my style. I’ll post the advances!
Warp Is Released!
May 19, 2022I have a weird feeling this week. I finally published a game. To the general public. Granted, I did not do much marketing (none at all to be honest), do not expect anybody else apart from friends and family to glance at it and despite having putting it up in the “pay what you want” category I expect no sales whatsoever. But it is mine, and I managed to do it and it is the most polished thing I have ever done. Massive thanks have to go to SSM for providing the music, to my girlfriend for testing it and testing it endlessly with me late at night and having the patience of waiting for me to interrupt the playing and logging the bug (or even fixing it) like a good boy. I would also like to thank JRRG, since he also listened endlessly to rants about what to put in and what to leave out of the game, even though in the end I did not have the time nor the energy to implement the features he requested (sorry!).
Looking back on making the game, there are many things I could have done better. I procrastrinated way too long on adding the main feature that would have really added to the solo play, which was a vs AI mode. I started doing the bits that I knew how to do, and which arguably were very needed for the game: designing the ship models, tunnel generation and tweaking so that it felt difficult but fair, working on the different powers, etc. By the time I felt like starting work on the AI I got infected with COVID and was relatively burnt out by the project itself, and it felt a lot like a chore rather than something cool to add to the project.
The weirdest thing is that I really wanted to add AI. It was a good challenge, a cool thing that would have been interesting enough to code and would have been flashy to see. The problem I found in this game is not that the last bits were the bits that I did not want to do because they were tedious and boring, but I was getting overwhelmed even by the tiniest things that I actually enjoyed, like making the sound effects or composing additional tracks. It had never happenned to me, and if I hadn’t already a couple of projects in the back of my head I would think that this is the end of my hobbyist gamedev career.
So, in summary, the first week has been exactly as expected. I sent the game around to my friends, put a tweet linking to it and you can count the downloads with your fingers. But it is going to stay there for a long time while I add other projects, and hopefully get some love as people stroll by the page. Go do so now!
New Banner
April 21, 2022As I said in the previous entry, one of the things I want to add to the game are the initial flash screens typical from all games. One of the reasons is to showcase the use of Godot, which I have found really pleasant to work with. At the beginning I considered going the hardcore way and coding all this in C or C++, with OpenGL, but then in a miracle way I managed to talk some sense into it. If not, it would have been impossible to finish this by April with the amount of hours I have dedicated to it.
The main reason to do it was so that I could put a “Jabawaka Games presents” which I always liked, but that meant I had to get a new logo. My old pixel art cow in the fields was a bit lacking in style to say the least. So that is why we have a new webpage, with a pixel art Jaberwocky instead. My first blog ever was named the Jabberwocky, having always liked Alice in Wonderland and Through the looking glass. I was young, ignorant and blissfully unaware that it was a very obvious literature reference (as painly pointed out in The Social Network, thanks for that). I was so ignorant that I did not know enough English to know the meaning of ‘jabber’, and therefore the actual metaphor the poem is about. I just thought a dragon featured in a nonsensical poem was cool! Incidentally it is a very good name for a blog. Through college the joking mispronunciation of it by a friend turned my main nickname into Jabawaka, and here we are today. That is why I think a pixel art Jaberwocky is the best logo I could have, and maybe at some point I’ll actually go and comission a proper one from an able pixel artist.
Tying the Bow
April 21, 2022Thankfully I am very close to finishing the Warp game. This past week was Easter, and due to a very generous work calendar, I had the whole week free. I was going to go back to my hometown, relax and take the opportunity to push through all the interesting features that I had pending: power pick-ups, AI enemy for solo players, tweaking the controls in the settings… Instead, I got infected with COVID and therefore had to stay and quarantine at my place in Madrid. It was not too bad, just a couple of days of high-ish fever and feeling beaten up, but after that I was left just a cough and a bit of congestion.
I took that time to reflect and finally decide that all those shiny features were not needed. Well, AI might have been nice, but I started coding, found it was way more difficult than I anticipated and decided to bail out of it. This project was already expanding in time and scope beyond what I already anticipated, and to be fair it is my most polished game to date. So I spent that time polishing it a bit more: tweaking the menus, changing the pushing mechanics to be fairer, etc. With all of these, pending a couple of initial flash screens and sound effects, the game is pretty much ready to go. I want to create a page in itch.io, mainly to start creating a kind of portfolio there.
In retrospect, my biggest mistake probably was to not combine all ship scripts into a single one sooner (or even make them one at the beginning). I thought the mechanics would be too different initially so I started off with separate scripts, but then the differences between the ships could be parametrised easily and there were huge chunks of code that were exactly the same. By the time I did combine them all, I had already done a lot of Ctrl+C, Ctrl+V across all scripts, and it was way less painful to merge them than anticipated. Well, you live and you learn and hopefully you don’t repeat the same stupid mistakes.
Selection
April 21, 2022It has been a long time without posting here, so I will post a series of short snippets. I advanced a lot in the Warp game, finally giving it a good polish. The first thing I implemented a while back now was the selection page, with hilarious bugs in the first try:
Now, I managed to get that underway and spent a good amount making it look a bit better, so here’s the final result:
The other main thing that I have finished is the split screen multiplayer, which I have been playing with my girlfriend to death. She is very good at triggering bugs, so it has been very convenient to hunt all those interaction bugs that would have been nearly impossible to see on my own. We both find that quite fun although to be fair since I know all the ins and outs and have tested the solo mode endlessly, I can easily beat her (hopefully not for long).
Warp Advances
February 13, 2022It has been a couple of busy weeks, but I have also managed to advance a lot on the game. First of all, I have finished the design for the other two ships in the game, the stunner and the swapper. For the stunner, I have gone with a central pole that then has a spinning top. I wanted to do something unconventional because the stun power is the most unconventional one (arguably the swapping is more unconventional even, I might change the powers)
The swapper ship is a simpler and more standard design, just a hull with some wings thrown in it. I tried doing smooth transitions between the hull and the wings like I did for the ghost ship, but it turned to be a bit too complex, so I left it like this.
In the graphics department, I tweaked a bit the camera opening so that you could see the other ships a bit better, but only when they are close to you. I think that way it will be more chaotic, I will have to check when testing. The big advance however is a CRT which I took from here. It was very simple to set up with the project and easy to tune too.
The other big change is that I have finally implemented collisions and a dummy AI to test against. Each ship has a different push distance away from it, tied to its bulkiness. The idea is that the pushing ship can knock other ships sideways into the gaps that may be there. Of course, swapping and ghost directly counteract it, so balancing it may be tricky.
Ghost Ship
January 26, 2022One other thing I have managed to work on during the break is the next ship in the roster. I have mainly based it on the Blackbird spy plane, which is a plane that has fascinated me since I was a little kid.
This being a spy plane, its power is that it can become a ghost and go through other ships. I needed a cool transition to showing that and I thought it was the time to flex the shader muscles a bit in Godot. After a few stupid mistakes and reading a lot of the docs and some examples, I managed to get what I wanted working. During the transition you pass a receeding X value that marks where the transition between real ship and ghost is. At that point I chose to draw a bright white line, and in front and behind it there are two different colours with different alpha values. I am quite pleased with the effect and hopefully it is easily identifiable as to what it actually does.
Productive Xmas
January 22, 2022Over Xmas back in my hometown, I have been able to advance on the game quite a bit. I finished a rough prototype which includes just one ship, with no powers yet, and tried to add all the visual flair I could for now:
The main thing I have worked on is tuning the physics and getting all the lights to change and the thing to look “finished”. Now I need to add powers and other ships, but I have spent the better part of January just getting back to my routine. The only reason why I’m posting is because I have finally refactored the script so that it is usable, it was a big mess. Since I need to reuse it on the other ships with minor modifications, I made sure it was relatively easy to do so. It is the least satisfactory job though, because you are not implementing anything new and are just breaking things initially to then try to get them back to normal!
Modelling Advances
December 2, 2021I have finally braved into starting the Tron Warp game properly. Last weekend I went back to my hometown, which meant a four and a half hour long trip by train. Apart from reading Dune compulsively (with more ideas triggering in my head for videogames that I probably will never make, mainly because I’d be using IP that’s not mine hehe) I also clocked some work into modelling with Blender.
Now, I am an aerospace engineer. That means that I have had proper CAD training and I should be able to figure out Blender by myself with some tutorials and be able to make some decent models. Truth is, I have either never had the patience or the wits necessary to do so, plus I am doing this project on the Macbook Air I bought and on the go which usually means no mouse. The logical conclusion is that rather than modelling by drawing on the screen, I am going to do things through code.
The first ship I have designed is above: the hull is different ellipsoids combined together, the “wings” (or pushers actually) at the side are made out of parabollas over straight lines and the connectors are a truncated cone. The pushers are actually to push other ships towards oblivion!
What I have not decided on yet is how to render these models. I am going to give Godot a try, because I have used it for 2D and everything was super simple to set up and a pleasure to code in actually, and I can’t be bothered to write all the code to do the 3D rendering in C or C++ (not if I actually want to finish the game that is). I was thinking about going for a low resolution toon rendering, to give it a very old school feel, but this morning while I was still in bed I thought that a look similar to Antichamber might work better. I guess I’ll A/B test it on myself and friends in order to choose.
Migration to Hugo
November 26, 2021I haven’t published anything in a while in the blog because I was busy migrating it to a new technology. I was using Django, which is very powerful and easy enough to use. It is based on python too, which means that I could flex a bit the rusty muscles I had. However, it is mainly designed to be used with dynamic webpages, and this being a blog plus projects up here, it did not make a lot of sense (I do not want comments on the posts because well, then I would have to enter into the world of filtering spam, moderating behaviour, etc etc which I am not keen in doing at all.
So, I obviously started with reinventing the wheel and wanted to make my own static site generator written in python. It would obviously end up being really not general at all or reusable and with lots of quirks about how to use it because I would not devote time to it. Suffice it to say, the effort was short lived (thankfully).
After some common sense shone inside my head, I decided to go with Hugo. It is a static site generator written in Go, but just browsing through a couple of tutorials I realised that I could probably port it in a couple of days. Alas, that is what happenned: over this week in little spaces of free time I managed to port it, and then in the train trip to Seville I finished it! And here’s the result, for you all to bask in its glory.
Tron Warp
October 15, 2021So after a long time of not developing anything at home, I have finally set up everything again for C++ development with OpenGL, and it is all because of updating to Windows 11 (to be fair I am a bit bored at work so that contributes a bit too). Since I now not only have all the Linux tools available in Windows, but can also run graphical applications, it is very exciting.
I had a few abandoned projects, but I think I am going to go forward with TronWarp (name to be improved…), which is a remake with improvements on a silly game I made for a quick ludum dare jam back in 2014 or so. It was basically a crossbreed of Hexagon and G-switch, you race motorcycles through an octogonal tunnel avoiding the missing tiles, and you can jump over to the opposite side of the tunnel at any point. It featured crazy graphics (the floor would smoothly change colour every frame) and it was mostly in 2D, doing the calculations for the tunnel in the CPU and then just drawing the triangles myself rather than uploading models to the GPU.
Now, because part of me weants to do some creative OpenGL shader coding rather than doing it in an engine such as Godot ( I know I know, deprecated, old and useless, kind of want to do it anyway) I am moving the whole thing to 3D, with a retro look. Maybe I will even implement a CRT filter, who knows. I also want to beef up the gameplay, giving the ships that race through the tunnel some kind of power so that they can push other racers off the track. However, the main design constraint is the fact that I want 4 players and I want them to be able to play on a single keyboard, which was a feature of the original Warp, so the control scheme is going to be a bit tricky.
Chessy Feelings
October 14, 2021I have recently come back to playing chess. I have actually started studying a bit, not only solving puzzles and playing but looking at openings and some pro games. I have to say I am enjoying it massively, in a way I never had when I just played my father and lost endlessly. I still cannot beat him, but hopefully soon enough.
After starting at the mandatory 1200, I plummetted down to the high 800s, which is when I started paying for the gold tier at chess.com. At 3 euros per month it is not expensive, and I can get all the games I play analysed. It is the best way I have found to improve other than studying the openings and trying them out numerous times. That has landed me this week in the mid 1100s, which is good but not great. Let’s see if I can keep it up and make it to the 1600-1800s by the end of the year!
A hard days knit
October 11, 2021So today I spent all day knitting a hat. Wanted to do many things: compose a bit, program a bit, maybe advance in the game I am trying to make (the pixel art is very hard) but nope, I just knit all day. At least I got a hat out of it.
I had wanted to make one with earflaps for a while, and while the result could have been better, I think it is quite decent taking into account it was the first time I was using a circular knitting needle. It is quite hard to use and there is no way to stick it under your armpit, so I ended up awkwardly holding the needles in my hands and against one leg. I bet there is a proper way to knit with them, I just didn’t go and research it.
I also had to do a bit of cheating because the hat ended up being a tad bit too big. What I did was saw it tighter with the grey wool around the front and back, and the end result is not too bad. I also learned to do a pompom, which is nice! Anyway, here’s a picture of the end result with my ugly mug on it.