Rogue of the Seven Seas – 7DRL Postmortem

Last week, the 7DRL Challenge took place. It’s the same game jam that I’ve done three times previously, where game devs have 7 Days to make a RogueLike, a turn-based procedural roleplaying game with permadeath. One of the benefits of this jam is that you’re free to choose which seven days to take, as technically the jam ran from the 5th – 14th March, but you could start at any time as long as you finish at the end of the seventh day. Funnily enough, the past ones I’ve only done on even years (specifically 2016, 2018 and 2020), but I figured I’ll make an exception.

The Idea

I decided to start the jam on Saturday morning, but I needed an idea. For the week before the jam started, the most I was thinking of doing was something in the realm of Smash TV or Robotron as a roguelike, I was struggling to get anything concrete. Then an idea hit me while, admittingly, I was listening to some sea shanties/acapellas on Youtube, a sea-based exploration and trading roguelike. The player would start out with a weak dingy and move their way up to a massive multi-sail ship through buying and selling items at ports, as well as making other ships surrender their supplies. It felt like a fun idea, so I went with it.

Rules

I have developed a mostly streamlined process for working on games in a jam enviroment, based on my previous experience. Coincidentally, I did a pechakucha talk for the local Midland Games Industry talks night:

To summarise, I often use this section that I routinely post during Ludum Dare:

EjL_Em8WsAYHmKA.png

Fortunately, I take advantage of 7DRL’s relaxed rules of pre-existing code and used a base template project that instantly provided me with a title screen menu with options and a blank state for gameplay, combined with some code for tile-based movement and tilemap features from my previous 7DRL entry, built in my own game framework that I’m very familiar with. That there is a good example of Know Your Tools!

Gameplay

Then was the first two rules, Gameplay First and Small Scope, which was what I wanted to focus for the first two days. I wrote myself a checklist of what I wanted in the game using comment blocks in my game’s code, there were three main things I wanted to focus on: Generating Land with ports to sail into, buying and selling stuff in those ports, and combatting other travelling ships.

First was the land generation, which I went on instinct and went with using FastNoise to generate a noise tilemap that I can then define which would be land and which would be ocean. I ultimately went with using a combination of Perlin and Simplex noise to get enough variation in the noise pattern, transformed it to have values between 0-63, and then through experimentation ended up with any tile with a value below 45 being sea and the rest of the values above could be a certain level of land.

The next challenge was to group each land tile into a group of them to make up an island, I ended up using a recursive depth-first search algorithm to go through each tile and all of their neighbouring tiles, using an array flag to avoid any tiles being checked twice, creating a box around each island so I could work out how many ports each island would need and avoid applying tiles to other islands by checking for overlaps.

For placing ports, I was admittingly lazy and decided to just randomly assign every beach tile (the lowest land tile ID) as a potential port and chose at random which one to use. In hindsight, this would cause scenarios where ports are right next to each other, or at least be close on the same island for easy back and forth. I think if I wanted to make choosing port locations more interesting, I might have use algorithms to determine suitable paths between islands near to each other, that way it would make sense for a port to be located close to a near, perhaps with A* path finding or delauney triangulation.

Despite this, I at least had a tilemap with islands separated out so I could start a ship on a random port, and then have it travel to other islands grid by grid. Since I had the data, I decided to make three more tilemaps to render on the sides and corners, setting their location depending on the ship’s location on the map. Combined with the game moving the player to the opposite end of the map if they go too far in one direction, and you have the illusion of a seamless map that wraps around.

Next were the ports and combat, both of which were menus. The port menu used mulitple switch cases, which I was foolish enough to use knowing that I also had my framework had its own Finite State Machine, which I would use with the combat menu. I ended up keeping the stock items (which players can buy and sell) in a separate array from upgrades (which you can only buy) so that stock could be easily increased and reduced in events such as trading and battles, while upgrades have a single purpose.

For battles, I had ships scattered randomly outside the player’s field of view, and those ships would only update when they were in view of the player in order to optimise for AI calculations. I actually had some fun with this, separating the ships into pirates and transport ships, and not only giving them different behaviour to give the generated world some life independent from the player: Pirate ships will always move towards the nearest ship, even if it isn’t the player. They can then engage against the other ship into battle, which means that other ships could sink without you being near them. Meanwhile, transport ships will aim to go to a port, and so will move along a generated path towards a random port.

By the Sunday evening, I had finished the base gameplay, with the most basic visual assets. Unfortunately, gameplay work never really finished because of balancing out the stats or both the player and other ships, not to mention tweaking the land generation. In the end, I’ll see what the reviews will say about how the game feels.

Art

I normally do pixel art myself with piskell and photoshop. However, despite having seven days, the remaining five days were also working days, meaning I only had evenings. That meant I resorted to open source/creative commons art assets. The main ones that helped me were Kenny-NL’s pirate pack for the ship designs and qubodup on OpenGameArt for environment tilesets, with photoshop to aide me in giving the assets a bit more of my own style. I also made use of stock images for the port menu to give a visual aid. I think the only original artwork I actually did was the side view of the ships, the UI box border, and a secret boss. I remarked that I wouldn’t get high marks for graphics, but some of the other participants reassured me that it looks fine. Fortunately, 7DRL doesn’t merit how games look and sound.

One downside to this tileset is that GIFs ended up being massive on the overworld.

Sound

So for sound effects, I used sound effect libraries from GDC audio packs and freesound, with the sound of oceans being ambient. However, with it being early 2021 with sea shanties being all the rage, I couldn’t help but make some basic renditions of my own. I didn’t go with any fancy samples and beats like I did with Twist, Turn, Shoot, Burn, just some basic NES chiptune using soundfonts. Of course one of the renditions had to be the Wellerman, since that one blew up on TikTok, but I also know a couple others so I also did renditions of “Leave Her Johnny” and “Bully in the Alley” as well.

What went wrong?

I really should have taken five days off to get the most out of this jam, doing five evenings from 5pm to 11pm (and Saturday 2am) is really tiring and you end up struggling with even the basic tweaks. I already mentioned the placement of sea ports, and how the sea port menu used switch cases when the combat menu used a finite state machine. I also ended up missing out on features that could add to the challenge, like a content weight limit (you can buy infinite amount of stock to sell).

Being better rested and prepared would have also helped me with submitting the game. Word of advice, never use Windows Explorer to set up a .zip folder. I don’t know why, but if you ever try to update a file within a .zip folder, Windows Explorer corrupts it. The best recommendation is to use 7zip or WinRAR instead.

In the end, I’m pretty proud of this game. It feels a lot more complex than KALQL8TR and yet just as novel, I might do a post-jam build some time this week to see if I can fix that menu and sort out the ports and whatever improvements I think I could make, but for now, I hope people enjoy it.

https://gamepopper.itch.io/rogue-of-the-seven-seas

Twist Turn Shoot Burn: A Postmortem

This was originally written as a blog post on the Ludum Dare website back on October 10th.

Icon.gif

^^^ Click to Play ^^^

It’s now been just over a week since Ludum Dare 47 began, so an ideal time to reflect on how well things are going so far. I’ve been taking part in game jams for seven years now, and this was my 16th Ludum Dare, although you find that every game jam you do has a challenge that you never expect, no matter how many you do (and I’ve done over 50 at this point).

So the game: Twist Turn Shoot Burn is an auto-run ‘n gun, you run around a randomly generated path shooting red things from one of two lanes. Here’s how it was made:

The Idea

349b6.png

As I wrote in my entry post, I wasn’t a real fan of any of the themes. I was actually hoping “Technical Difficulties” would make it to the final voting round, but alas you make with what you do. My usual plan is to brainstorm ideas, with the goal to have at least one idea per theme. Ideas in this case is usually a simple phrase to describe a game’s setting or mechanic.

All I had for “Stuck in a Loop” was this: Run (and shoot) inside a loop.

Yeah, not sure why but even as I slept, my attempts to think of what game I could make around this theme always reverted to this. As such I just gave up and decided how on earth I was going to get a game to work…

Day One

So to people who know my approach to game jams (all five of you…), I have a set of rules that I always follow when working on game jams regardless of length. A lot of these rules were written and refined from experience for efficient development and maintain good wellbeing.

EjL_Em8WsAYHmKA.png

So day one was purely focused to develop on gameplay, and the first thing I needed doing was having the player run around a basic path.

Following rule four (stick mostly with what you know), I figured I’d do a tilemap but I was worried about how to do collisions. My engine’s tilemap system isn’t built to handle slopes and curved paths, and I wanted the player to go around a proper loop. I was worried that I was gonna have to figure out how do write a Sonic-style platforming system. Then I was literally booting up my PC, first thing in the morning, when I realised: I didn’t need to calculate collisions, I just need to calculate positions.

I made each game object stick to a specific position based on an X and Y value (between 0 and 1) what tile it’s currently situated in. The X value would position it from one side to the other, and the Y value would handle gravity and securing it to the floor. I originally had it up and running by midday, however in my original approach, the player would move fine on tiles that moved straight, but would float on turns. It took an hour’s walk, a hour lunch break and about two more hours for me to get it to work correctly.

LD47-00000.gif

It was also during that first lunch break and walk that worked out how to do obstacles. I only wrote four enemies: Same Direction, Opposite Direction, Bounce and Always Flying. I also decided to do something similar to Super Crate Box, have it so enemies would spawn the moment you defeat one. All the enemies use the same movement behaviour as the player, which funnily meant the Always Flying enemy was the hardest to implement because it wasn’t straightfoward to disable gravity.

LD47-00003.gif

You might notice the player had the ability to jump. The original plan was to have the player shoot, jump and change places. I eventually decided to diable jumping because I found myself always changing direction more than jumping.

Day Two

The base game was pretty much done by the end of Saturday, I did want to make the levels more random but I wasn’t sure how to do it, so I decided to leave it as something to implement if I had time. For Day two, it was all graphics and sounds.

This is where rule 5 (“Make Your Content Easy and Noticeable”) comes in. This rule was concieved after Ludum Dare 42, where I spent somewhere around five hours on a detailed player character, despite how small it actually appeared in the game itself.

Piskell is my tool of choice for doing pixel-based sprites, as it’s easy to pick up and test out frame-by-frame animation. All I can say for the player character is that I cannot confirm or deny whether the recent popularity of Among Us or Fall Guys had any roll, but I will say that the 2-bit palette of Downfall was deep in my mind when thinking of the visual design.

Visual effects are also a prerequisite for most of my games, partially because one of my game dev influences being Jeff Minter, and I’m a huge fan of his vibrant nightclub/psychedelic visual aesthetic. The main effects I use were Chromatic Abberation (distorting the red and blue colours), Bloom (make pixels glow), scanlines (TV effect) that constantly offsets, Bad TV Shader (to get the noisey distorted look) and a fisheye lense (to make it buldge out slightly).

LD47-00004.gif

For sound effects, I used sfxia and ChipTone. If I wanted more realistic sound effects and wanted to go with the loose jam rules I’d mix and mash stock sound effects together, but I know with this game’s visual design that I was going with a retro-esque feel.

For music, LMMS. I’ve gotten comfortable with it as a music creation tool, although when I tried to mess around with soundfonts and VST plugins for retro inspired music. That’s when I went back to Jeff Minter’s games and decided to try a drum ‘n bass approach. Fortunatelly I did experiment with this for an earlier Tetris recreation project, and I was able to come up with a 1 1/2 minute long loop that I was satisfied with.

Based on my social media posts, I had everything submission ready by 4:30pm. That meant pleanty of time to get the submission details ready and add in stuff. I added a new enemy at this time, and tweaked around the controls, but I didn’t think there was much that I needed doing. It wasn’t until two hours before the deadline that I decided to give randomly generated levels a go, you can read up on how well that went here.

LD47-00007.gif

Conclusion

I’d say this game went better than I thought it would, I’m always into making small arcadey games and after this pandemic had drained me from doing personal game dev projects, this one just revitalised me in many ways. That’s not to say it was perfect. So time to explain some issues:

  • Camera: I had spent the last hour trying to figure out how to get the camera to focus in on the randomly generated level, instead of the full screen. Unfortunately time had ran out before I could figure it out, so I had no choice but to leave the camera in its full form. The “Player” mode I thankfully decided to leave as an option, as much as I thought it was a fun camera mode, I could tell it was disorientating for some players.
  • The Volume: So when I was working on the music, I had the PC and headphones on full volume, and I thought the volume was perfectly fine. Turns out my headphones aren’t as strong as I thought they were, cause players on some streams were taken aback by how loud the music was. I’ve deamplified the music for the post jam build, but I’ve also had feedback suggesting not to have full volume by default.
  • Menuing: Yeah, I probably could have spent those final hours adding some important stuff to the menus to make it clearer and easier to modify, especially the option to turn off the visual effects that might be an eye strain to some people. In hindsight, I also have a config class that I used in a past game that I could have easily dropped into this game, so saving options would have been a breeze.
  • Linux: As much as I work on Windows, I have a soft spot for Linux and major respect to their userbase. I usually have a Linux Mint distro on hand to easily produce a native Linux build of my games, and let users decide whether to download it or not. This time around, I was curious and posted to a Linux games community (shoutout to /r/linux_gaming on Reddit!) to get actual Linux gamers to try it out. Turns out quite a few couldn’t get the game to work due to a libcurses dependency, and one of the Twitch streamers that tried the game on Arch Linux (shoutout to @marcmagus) found out his gamepad ran funny with axis inputs when he played the game.

So yeah, there’s a lot to deal with. Perhaps in the next update I do to the post build, I should add a long warning for players with senstive eyes and ears before I do anything else. Thanks to everyone for playing, thanks to my friend Kris for helping me with brainstorming ideas and here’s hoping to a good ranking!

Icon.gif

^^^ Click to Play ^^^

Straight Out Of Furlough

So the pandemic is still at large, and despite being one of many employees that had to take a pay cut in March to keep businesses afloat and people with jobs at the company I work for, a number of people had to be furloughed in May as customers remained closed, I myself being one of them. Unfortunately, it’s happening everywhere where it’s non-essential, and the silver lining with mine was that it was only for three weeks (and I had it in writing despite my families concerns). Today is my last day of furlough and tomorrow will be my first day back at work, from home because as far as myself and my company is concerned, whatever excuse the British Government is giving to lifting lockdown is not good enough.

Even so, it feels weird to think about getting back to work. Getting into routines is a slow process for me in general, working from home daily basis took a while for me to adjust to, as well as the first week of furlough. I just hope my first week back at work will be smooth, I’ve worked in games programming for years so it’s just a case of not getting rusty.

So what have I been doing in May? Well, the week before furlough started I wanted to practice some personal game development by working on a clone of a game genre I usually don’t approach, puzzle games. I decided on Tetris since it’s the most popular, and I remember back when writing games in XNA trying (and failing) to make a Tetris clone, so it would be a good progressive piece.

Continue reading

Gardening of Pandemic Proportions

Good start of the decade, huh? In February I was enjoying a break from game development outside of patches for Gemstone Keeper, as well as spending a nice holiday in Sweden. Then March hits, and a virus that started in the Wuhan province of China spread to pandemic proportions and every country was starting to lock down and encourage people to either quarantine or distance themselves from others. For the last six weeks, I’ve been mostly working from home, my only travels are our long hikes around the local countryside and I’ve only been able to communicate with family and friends online in video calls or online games (Jackbox and Animal Crossing have been godsends during this pandemic).

It’s still a good time as any to work on some smaller games, and I’ve been wanting to get back into a few game jams, so during this pandemic, I took part in two big ones: The Seven Day Roguelike and Ludum Dare 46. This post goes over Ludum Dare’s submission: Keep the Garden Alive

Continue reading

Calculators of Pandemic Proportions

Good start of the decade, huh? In February I was enjoying a break from game development outside of patches for Gemstone Keeper, as well as spending a nice holiday in Sweden. Then March hits, and a virus that started in the Wuhan province of China spread to pandemic proportions and every country was starting to lock down and encourage people to either quarantine or distance themselves from others. For the last six weeks, I’ve been mostly working from home, my only travels are our long hikes around the local countryside and I’ve only been able to communicate with family and friends online in video calls or online games (Jackbox and Animal Crossing have been godsends during this pandemic).

It’s still a good time as any to work on some smaller games, and I’ve been wanting to get back into a few game jams, so during this pandemic, I took part in two big ones: The Seven Day Roguelike and Ludum Dare 46. This post goes over Seven Day Roguelike’s submission: KALQL8TR

UPDATE: The results for 7DRL were just released earlier today. Each of the 166 games were ranked in various categories. KALQL8TR was able to get into the Top 50 for all but one category, including 8th place for Innovation!

Continue reading

The EGX Report

It was more than a month ago that Gemstone Keeper was being shown to the public at a games festival. Last weekend it happened again, this time at the ExCel Centre in London. EGX is the largest video games expo in the UK, originally starting as Eurogamer Expo as part of the London Games Festival in 2008, eventually being hosted at Birmingham NEC after the closure of its main venue of Earl’s Court in 2015 until this year where it moved back to London, in a move that excited or angered gamers and game developers depending on what part of the country you were from.

As mentioned in my last post, Gemstone Keeper was part of the Tentacle Zone as one of its 18 games on show. This time they weren’t the only space dedicated to indie games, there was also Rezzed (EGX’s dedicated indie games zone), Tranzfuser (a talent development programme from the UK Games Talent and Finance CIC), the UK Games Fund and the Leftfield Collection (for the unconventional indie games, sponsored this year by Team17), not to mention all the game publishers such as Nintendo, Sony, Bethesda, 505 Games, AAA game devs like Rebellion and retailers, as well as the typical expo showing of cosplayers, dealers, charities. There was also a stage set for the UK Speedrunning community, doing live speedruns of games for Special Effect. All of this was in half of the entire exhibition centre, in the entire south area.

Continue reading

Gemstone Keeper: Playable at EGX

After many years of working on games, I can proudly confirm that Gemstone Keeper will be shown at EGX from the 17th – 20th October at the ExCel Centre in London, and it will be the Nintendo Switch version with both the single player Campaign Mode and the multiplayer Survival Mode. It will be part of the Tentacle Zone, ran by Payload Studios, alongside 17 other great indie titles.

There have been a few minor changes since it last appeared at Insomnia, however I do not intend to make anymore changes outside of bug fixes and other technical hitches as it’s getting closer to the end of the year.

I’m honestly excited, while I’m still a bit annoyed that the largest games expo decided to move to London (in a decision that not everyone was happy about), it’s been difficult to get an opportunity to show your work there. Next week I’ll be putting some time to make sure a demo build is ready that can handle hours of uninterrupted gameplay. If you plan to go to EGX, be sure to look out for the ASCII amongst the green tentacles!

I should also close off by giving my love to all the game devs who took part in Ludum Dare this year, I decided to hold off on taking part because of a lot of travelling I did the week before. I’ll definitely look at going back for the next one, especially since my hopes is that Gemstone Keeper will be on the eShop long before then.

 

Insomnia Report

Last week, I was one of 24 indie game developers who showed off their games in the Indie/Tentacle Zone, part of the Insomnia Gaming Festival (i65) at the Birmingham NEC. Over a four day period, thousands of gamers got an opportunity to try our games, some in development for platforms, others being in early access or recent release. For me, it was an opportunity to show Gemstone Keeper for the Nintendo Switch, to see what bugs people would find in the port running on proper hardware for an extended period of time.

The first thing I noticed when I arrived on the first day was the stands were great! When I last went to Insomnia back at i61, the Indie Zone had the blank, cubicle-like, walls with one table, which had been used as far back as the Indie Zone’s introduction around i52 back in 2014. It was an acceptable setup considering that Indie Zone spaces were free to those who applied and PC setups were provided. Last year however, the Indie Zone was being operated by Payload Studios, the developer of the game TerraTech and managers of the Tentacle Zone at EGX and Rezzed, they managed to deliver by replacing the plan walls with backdrops that featured banners of our games! (we provided the poster art for them to print)

That didn’t stop some developers going the extra mile: Space Lizard Studio created a cardboard scenery around their table to match the theme of their Papercraft Horror game, Paper Cut Mansion. The developer told me that it took them two weeks in their spare time to create it and it looks impressive! Rhys510 on the otherhand, didn’t bother with a table with a monitor, system and controller, as their game was on a fully functional arcade cabinet!

On each day, the doors opened to attendees at 10am for priority attendees, and 10:30am for everyone else. What appeared to be a surprise to most of the indie devs was the amount of people who turned up on Friday, particularly in the morning. It was anticipated that Saturday and Sunday would be the busiest days, with Friday and Monday being the least due to it being near the end of the school holidays and a bank holiday respectively. The morning was espected to be quiet in general because that would be time people would explore the whole event and jump into the other areas that required queues, such as the Borderlands and MediEvil stands, or the Ubisoft Experience. This wasn’t the case, Friday morning had attendees trying out each indie game. While the crowds wouldn’t compare to Saturday, it was still a good first day.

This was the crowd on the Saturday.

While having more people to keep an eye on and try your work is more hectic, it does make the work of showcasing go a lot quicker. Retro Revival was a decent showing, but not many people turned up to its indie section, which made the whole event feel a lot longer. Plenty of people managed to try out the game, both the standard single player mode and the multiplayer survival mode, I ended up making a procedure where if I see an individual or a single child with parents approach, I’d let them try out the single player mode, but when a group approached the table, I’d ask if they wanted to play multiplayer, and set up the controllers if they said yes. This ended up being a good strategy, as groups might lose interest if only one person plays at a time (although I noticed pairs who went straight into the single player mode took turns at each level).

There were some technical hiccups though, as before the first day I had technical issues that prevented me from creating new builds for the Switch (lesson for the future: never update the SDK or firmware before your big events). I was fortunate to have a working demo build from a week before that I could use, but even then it had slowdowns and it even crashed at one point, which required a force restart. This was the case for both the Friday and Saturday, fortunately on Saturday evening I was able to fix two main issues that were causing crashes, and with my notebook that had an entire page filled with minor bugs in it I was able to get through and create new builds for both Sunday and Monday.

Overall, I’d say I had a great time. I got to try out a number of the games such as “Bubbles the Cat” from Team Cats N Bears, Velocity G by Repixel8, Robot Champions and many others, and hung out with a group of them on the Sunday (sadly I missed out on the pub quiz that took place on the Friday).

The next event I plan to show Gemstone Keeper will be at EGX in London in October, so I hope to see as many (if not more) players there!

Gemstone Keeper (for the Switch) for the Public!

Hello everyone! It’s been a while, but my game development focus has been majorly on Gemstone Keeper for the Nintendo Switch! Significant progress has been made to it, plus Ironbell and I (as well as feedback from devs of Naezith) have been continuing our work on SFML-Switch, fixing issues that we find. The submission process is currently in its early stages and with any luck there will be an announcement on its release later this year.

The biggest areas of progress to Gemstone Keeper that have been made is that the Switch release has a local multiplayer mode called “Survival” where up to four players can fight an infinite amount of enemies until the last player dies.

Another big change to Gemstone Keeper is that the graphics have been significantly upgraded to a higher resolution to accomodate with the Switch’s HD displays. While it might seem strange to do this, but the painstaking process of using much larger fonts to generate the textures in the game results in a significantly sharper display overall. To the untrained eye it might not appear noticeable, but when compared side by side or in a split screenview, the differences become crystal clear (pun intended).

Back in June, the Switch port had a public test run at the Retro Revival Festival in Walsall (where I was also selling some games from my private collection). Despite some major technical difficulties, I managed to get some good feedback and players to try out the game, so I’d say it went pretty well!

From the event I also got to speak to Chris O’Regan from the video game podcast group Cane and Rinse, and after he got to have a go at the game and got in touch after the festival, he invited me on the Sausage Factory to talk about the game, as well as my development background and games design! I had a good time talking, although I usually get nervous when speaking in a mindset of having an audience, I like talking about my work and how I feel about games that show a more technical aspect over an artistic or epic approach to them. So if you have under an hour to spare, why not try hearing us talk for a bit?

Gemstone Keeper Episode of Sausage Factory

But that was back in June, what about now or next month? Well I’m happy to confirm that Gamepopper will be returning to the Indie Zone of Insomnia Gaming Festival as part of their i65 lineup (for the first time since i60 back in April 2017). Both myself and the game will be there for all four days of the festival, but do also come down for the rest of what indies have to offer.

There will be one more event in the near future where players can try out Gemstone Keeper, however I’m going to hold back on announcing it until after the final details get sorted.

 

Ludum Dare 44 and Console Game Development

As some of you were made aware, I took part in my first games jam of the year. While I said in my End of 2018 In Review that I’d be taking a break from game jams, Ludum Dare felt like the ideal event to take part in as it was in late April and is still one of the biggest and favourite of the online game jams. Even then I wasn’t fully aware it was happening until the week before when theme voting was about to begin, and it happened to be on the weekend where I had no urgent plans. So as the days drew nearer, I made my preperations for a 48-hour game dev session.

Continue reading