ZeldaRL 0.8 released, after 15+ years!

15 years ago, I participated in the 7DRL challenge creating a roguelike version of The Legend of Zelda.

It worked, but there was something bugging me year after year: from what I saw, permadeath just didn’t work very well with this game since it really prevented the player from fully exploring the generated overworld; diminishing its value because it was just too damn hard to finish it in a single run.

This version brings is the complete removal of permadeath, along with the following changes:

  • Run by default using the Swing console mode.
  • Resize font when window size changes in Swing Console mode. 
  • Add support for win 64bit libjcurses.
  • Change appearance for shallow water 

You can find it at https://slash.itch.io/zeldarl. Here’s also a video of me playing and doing some work on it!

Ultima Castle Generator now on itch.io

Continuing my quest to upload one of my games from https://slashie.net to https://itch.io every week, I have published Ultima Castle Generator there, a procgen tool to generate castles like the ones you would find while roaming the Britannian countryside in Ultima V. Play with it online here.

I made this one for fun back in 2016, following a challenge from the procedural generation reddit. The process I did was based on examples, checking the maps from the game in order to dissect their structure. You can still find them here

Empath Abbey, from Ultima V

The generator works in three steps, as described in this blog. An intermediate step subdivides the space into utility rooms, which are then filled based on their utility. The source code can be found here in case you want to play around with it a bit.

The version at itch.io features some simplifications in the UI to make it look simpler and cooler, similar to the great generators by watawatabou. The legacy UI was kept at slashie.net including the intermediate generation steps.

Distant Friends on itch.io with improvements

Continuing the quest to post a lot of my games on itch.io for preservation and to raise awareness (…), our entry for js13k 2022 is now on itch.io with the following improvements.

  • Smaller ship and rockets.
  • Fix glitch on ship visuals.
  • Improved instructions
  • Remove dynamic asteroid fields, replace with fixed location mining field
  • Add booster tracks between planets.
  • Show elapsed game time.

Check it out here.

The Making of SpelunkyRL – the 7DRL – Part 1

This is a story of the development of my 19th 7DRL: SpelunkyRL, a roguelike inspired by Spelunky. You can play it online at https://slash.itch.io/spelunkyrl

Unlike previous years, this time I had complete clarity on what I was going to do and how I was going to do it, weeks before the challenge, and managed to stick to it until the end. That was very helpful to avoid wasting time going back and forth with ideas!

The Mine of Spelunky, a new sidescrolling adventure every time

My plan was to create a traditional roguelike version of Spelunky Classic, using my entry from last year (Rainy Day) as a foundation, including most importantly its procedural level generator, and its visual design overall.

This idea had been on my mind for a long time, probably since I happened to meet Derek Yu in the “Day of the Devs” event in November 2017. We discussed the idea of Spelunky as a traditional roguelike, and even though it seemed unlikely for it to work, I thought it was worth giving it a shot to experiment with how it would feel.

Roaming the dark roads of San Francisco on my way to the event

I even considered doing it amidst the many options explored during my crazy last year’s 7DRL entry, but I didn’t feel ready to tackle it as it deserved until now. For some reason, I think jumping into this project carries something of a responsibility to make it right, but I also thought I had the tools and knowledge to make it a reality this year, and most importantly that it was something that could be done in 7 days of development.

An important choice for the project that was solid and clear from the beginning was to go for a strictly monochrome, 80×25 amber terminal look; the reasons for this were I wanted to imagine this as a game I could be playing on one of the first computers I had a chance to use in school, back around 1993 or 1994 (old computers that had been donated by someone, most probably); a game that never was.

The other reason is I wanted to reinforce the traditionalness of the game, going back to the very first roguelikes that ran on terminals in the 80’s. Since the Roguelike Arcade, organized as part of the roguelike celebration 2018 in San Francisco, I knew I had to make a game that resembled these. (And I’m not alone on this, I know of at least one another roguelike developer that was enamored by how they played and looked).

There will never be an event like this any more.

I talked with my friend and development partner QuietGecko the weeks prior and he was on board, ensuring that even if I failed, his catchy audio would be there to save the project.

As the 7DRL challenge started,
I squinted into the darkness,
and thought of her one last time.

Day 1

The 2 hours I managed to put in were spent dumping the first batch of tasks that had been on infinite repeat on my head for the past couple of weeks:

... > clone Rainy Day > change color to amber > add entrance level > hook with random cave generator > clone Rainy Day > change color to amber > add entrance level > hook with random cave generator > clone Rainy Day > change color to amber > add entrance level > hook with random cave generator > ... 
Liberating!

With that out of the way, I proceeded with something I’ve always wanted to do: start with designing and defining the data of the enemies and items from the beginning, instead of a mad rush at the end after coding the engine.

In the meantime, QuietGecko worked on the foundations of the main music track we were going to use for the game. One possible idea I had discussed with him (but left him the liberty of deciding on it) was taking Spelunky Classic’s “Cave” track, as a strong influence for a “darker”/ more serious track, removing all chiptunes and making it feel a bit more Indiana Jones.

Day 2

Invested time in developing what would make the game different from Rainy Day (and give it its own identity, inspired by Spelunky Classic). Added bombs, destructible terrain, and the foundations for its combat system based on double movement speed, so you could, with careful planning, avoid melee combat for most situations to make better use of your ranged attacks or simply to run away towards the exit.

With a first revision of the audio track done, QuietGecko moved into implementing some audio effects for the game.

Day 3

More fun Spelunky-inspired engine stuff! I added chests with bobby traps, pots you can throw (including possible critters inside!), shops, and angry shopkeepers.

I also started considering accessibility, especially because the idea was to have an alpha test running pretty early, so I added a help screen I would continue building during the week.

Finally, I made an important decision about the display; in contrast to “Rainy Day” I decided to use a lot of codepage 437 special characters, making a great difference, especially for the walls (using full blocks instead of characters such as #).

QuiteGecko continued working on the sound effects.

Day 4

More fun engine features: the possibility to perform sacrifices to the goddess Kali, as well as allowing the player to stun, grab and throw enemies. Also continued improving the UI, and added separate “states” for the game prologue, the title screen.

Following up with the plan to have early feedback and QA, I created a first alpha version and shared it with the team for initial tests.

Day 5

With tests underway by a close group of friends, I was able to implement the variations between the 3 character classes/backstories, as well as ranged attacks, the tourist’s flashing camera, and combat-less conduct.

Next up: The final two days and the events that happened afterward!

FormulaProc: Italy, United States

Work continues in FormulaProc in anticipation of the 2022 Formula One Championship starting.

This update is divided into two parts: The improvements in the simulator, and the details of the events we ran.

Simulated Events

I set up and ran the events for the Italian and United States Grand Prixes, and their qualifier sessions; this time, instead of having news articles written into the blog, I narrated these and edited the videos. This was… exhausting and not being a native speaker yielded results with a lower quality than I want, but on the other hand, it really breathes life into the events. I keep looking for voice artists that want to contribute and experiment along, as I also improve the simulation to make live narration easier (or even possible?)

Simernio created a cool poster for the United States GP, and we are still devising better ways to bring people into the show in conjunction with Valnyr, trying to improve our reach in social media with things such as Instagram reels. We’ll see how that goes. For now, the channel with the biggest traffic seems to be TikTok, as the YouTube channel still lags under 100 subs.

I also ran a couple of special events (which required the creation of the “war mode” setting in the simulator), the first one was a test event for friend Nookrium with a whopping number of 255 drivers at the track, (a deathmatch for his supporters). It was chaotic and fun, although it didn’t spark a lot of discussions. I briefly talked about FormulaProc with Nookrium too, and I think at some point I’ll release the sim so people can play around with it and create their own tracks and races.

The next one, just for fun (and hoping to attract some Formula One fans too, and failing at it?), was putting together all of the 34 Formula One champions into a race in the Circuit of the Americas to see who would win.

Simulator Improvements

For the visuals, we are still keeping the overhead view as the main display, although I have been discussing alternatives and even creating some experiments for more “cinematic” experiences; these will take some time to materialize due to the production work required but we are definitively heading this direction so that watching a race will be more similar to watching an anime short than seeing an automated videogame running.

Also, as you can see above, a big change I introduced was replacing the drivers’ appearance: I’m no longer using Unreal MetaHuman to try to create photorealistic characters; instead, I’m portraying them as manga/anime characters. I have the feeling that, for our target audience, it going to be easier to connect with these characters and engage with the emergent story we are creating, and it will give us more room to introduce fantasy elements.

For now, I’m using the amazing CHARAT BLANC to create the portraits, but eventually, we are going to need an artist on board to make more unique designs and poses.

The maps themselves have been improved with the addition of “points of interest” labels, which are funnily similar to the “corner names” we had in the first versions of the sim; these serve the purpose of being anchors for the commentary and history, as well as points of reference inside the tracks which sometimes might be a bit featureless. I’m also now upscaling them using an “oilify” GIMP filter, to make them look a bit more like a painted illustration.

As mentioned in the events above, I also added support for “war mode”, that is, massive and often chaotic races of over 30 cars. The data for the drivers is read from a flat text file, and they are assigned random stats and cars. Right now it’s more of a fancy thing to watch than an interesting or detailed simulation for each driver, but the Internet is built over fancy things to watch so this might end up serving as a tool for more people to run into us.

Another minor change introduced was displaying the cars as “ghosts” in the qualifiers sessions (well, except for the leading car). I keep trying to make more clear what’s going on there (all cars are not racing at the same time, instead it’s a replay of their best lap)

There was also some important work in the “intro” sequence; before the race begins we now display some information about the track, and then we are displaying the starting grid; QuietGecko sent an amazing track for the background of this sequence.

And finally, as part of the tests for the cinematics, I’m also experimenting with adding “emotions” to the drivers based on the events happening in track; this is still evolving and will likely become more elaborate with time.

And that’s it for today’s update! make sure to subscribe to the YouTube channel so you don’t miss the races!

FormulaProc: France+UK+Belgium

Work continues in FormulaProc in anticipation of the 2022 Formula One Championship starting. For this update, we have contributions from Esteban Martinez over the narrative front. Check out formulaproc.com for full info.

Simulated Events

I set up and ran the events for France, United Kingdom, and Belgium Grand Prixes and their qualifier sessions, each event has had something new as detailed below. Esteban continued providing the foundations of the narrative, presented as news articles on the main website.

Visuals

The most visible addition is, of course, the overhead view of the tracks and the cars running through them. This is a jump we had to take in order for the races to feel less abstract; I found out the people who like this kind of content are very attracted to the visual aspects so we had to break from the “flat” type of race we were showing.

Of course, this meant I could no longer spread all the cars side by side, and instead I had to put them over the road. For this, I created a system of “lanes” or “tracks” taking inspiration from slot car racing with the exception that cars here can switch lanes after surpassing.

I reused a lot of what was coded for the minimap, adding rotation to the equation and doing a lot of work to make setting up the scale of things more easily instead of trial and error.

In order to provide a sense of depth, I also added a layer drawn over the cars (currently used for things such as bridges and tunnels).

I created a short video detailing the process of setting up a track under this new system.

Simulation

Added a “Flying lap” qualifier system, the cars to a warm-up lap, and then all of them stack in the starting line and start their flying lap at the same time, retaining the speed and acceleration they had. This means all of them have the same chance of having a quick lap.

I also scaled the acceleration values so they are more realistic, cars were moving just too fast in the track (and this was hard to visualize in the linear view, but was much more noticeable in the top down view)

Cars also now fly past the finish line when the race ends, as them staying there was no longer needed with the introduction of the positions table, and it looked weird for them to stack there in the new overhead view.

User Interface

Improved the format of tables, and removed clutter from the HUD over the cars since most of things were now redundant with the driver info box and didn’t look good in the new overhead view.

Camera

First steps to make an automatic camera; before this I had to manually scroll thru the race, trying to find interesting moments to record; now the camera warps automatically to ongoing combats or drivers approaching each other, so now there is no human intervention in the creation of the videos! this still needs more work to be less instantaneous and maybe also allow replays or parallel cameras.

Artificial Intelligence

Tweaked the AI to have something of a state model, entering a braking phase before a corner based on a calculated risk, and sticking to it until close to the corner. This is in contrast to the model before where such evaluation was made every AI cycle, which led to very erratic gas/brake behavior.

Pixal – Day 246, it’s been over ten years

This is something I’ve wanted to do for a long time; over the past years, I’ve complained repeatedly about how I worked so much on Pixal, and then I lost the direction of the project and it all went to hell. Well, it’s about time to fix that.

Let me introduce you to Legends of Kramora: The Golden Age of Ibaran – A prequel to Wrath of Kramora (otherwise known as Ananias), this story takes place years before the great serpent arose from the underworld to destroy the world; fighters from all around the world travel to Ibaran, to compete in the tournament and gain fame and fortune.

The first task (besides making sure this beast works fine in modern infrastructure) is to remove the World Browser – It’s worth months of work, and yet the scope creep it brought killed the project around 2010. I’ll focus instead on providing fun combat and tournament mechanics, making an entire game around it.

This will take a little bit; for good or bad, the SVN history of the project was lost, so there’s no way to automatically revert the months of work that went in; instead, I have to manually restore things that I had changed already with the idea of them working in a less abstract way, tying them to “buildings” and locations inside the world that you could navigate with your Expeditions (for instance, the Colosseum was a building there, so I have to manually restore it into a list in the profile page)

In any case, I feel happy that I was able to revive this project and it didn’t take a lot of time. I’m hoping some people will still find it interesting after these years; I myself still look forward to playing a light browser-based game in the dead times of the day.

Of course, another important thing I’m doing is adding a light narrative to this and tying it to the rest of the Kramora series. I believe this is important since the original Pixal didn’t have any setting and was maybe a bit too abstract.

It’s also amusing how much of how this codebase works I am able to remember; I already had to fix a bunch of 10 years old bugs that lay dormant in the code.

A public beta version will be available soon!

Aprox. Work Time: 246 days, 727:00 (725:00 + 2:00)

Novamundi 0.35 – Trailblazer

NovaMundi is available on Steam Early Access! GET IT NOW (or wishlist it) if you like what you see!

The last development update was from October 2021! It’s not that there was zero development in these months, but I certainly took some time to work on other projects to take a bit of fresh air. Now we are back to your schedule!

Let’s talk about the new version, 0.35 – Trailblazer, here are the major changes but as always there were smaller bugs fixed along the way.

A new combat unit, the Spanish Trailblazer, has replaced all other Spanish units (at least momentarily) to fit with the new visual style of the units and our latest research. These lightly armored European warriors are armed with steel spears and appear along with Panche raider groups in the mid to late days of the invasion.

The Muisca units were also improved with knives added to the Explorer unit, and new animations for the Guardian’s staff attack.

Deer hunting was also improved with them now having proper run animations, and with some tweaks on their behavior.

The text of the intro was completely remade to reflect on our latest developments of the theme of the game, mainly adjusting the portrayal of the European force as much less of a deadly invasion force while still a dangerous threat.

The texts for the dialogs of the wayfarers where they describe surrounding animals have been localized, as well as the names of the animals and their description when you find one.

In the media front, the interview with “Congreso and Sociedad” for the TV channel of the Colombian Congress was finally released on YouTube; some interesting points were discussed.

Finally, just for fun, I mocked up how would Encanto town (from the Disney movie) look inside the Expedition engine, using some assets from the previous incarnation of the project which I don’t rule out reviving this year in some way (as a separate game).

FormulaProc Dev Report

Ok, here’s what has kept me busy lately.

Thru this last month of dev, the project graduated from a ProcJam entry into an official Slashware project with contributions from QuietGecko, Simernio and Esteban Martinez. All the current stuff can be reached from formulaproc.com

Simulated Events

I set up and ran the events for the Spanish, Monaco and Azerbaijan Grand Prixes and their qualifier sessions, each event has had something new as detailed below.

Check them out at the Youtube Channel

Main Simulation

The first thing I improved was adding the circuit map; this was critical for players to get the feeling of being there. It was implemented with some basic trigonometry allowing to locate the markers alongside a polyline (only straight segments, no curves for simplicity, so long curves in the circuits are just a lot of small segments which works good enough)

Gecko created an upbeat music track for the races, and sound effects for the events such as new lap, surpass, and countdown. We also worked together to create the engine sound which was something critical to get the feeling of the race; it was an iterative work which required tweaks on the simulation itself so that the dynamics of the RPM and the gearboxes on the vehicles matched the variations in pitch we needed to get just the sound we wanted.

I added a couple more visual indications too, first off I added “combat notifications” to let the viewer know when a car was trying to gain a position and when/if he was successful; that ended up being super confusing and useless, and was later replaced by indicators in the newly added “intervals table”, which is a permanent indicator of the positions in the track and the difference in seconds between the drivers.

I also worked with Simernio to fully redesign the appearance, and added a box with the stats of the race leader.

Discord Bot

Along with the creation of FormulaProc’s discord server, I developed a first version of the bot using discord.js (including persistence to mongodb with just its native nodejs driver) and deployed it to DigitalOcean.

Right now you can use it to place a bet on a driver for the next race, buy virtual mechandise and event cast spells over the drivers to affect their performance in the upcoming races.

The Intro

I commissioned Simernio to create a new logo for FormulaProc itself, along with logos for each one of the teams and a full blown animated intro taking all this together. It wound up amazing.

Content

Worked along with Esteban to create a page for the teams and pilots with extended descriptions, incorporating the new logos as well as generating portraits for all of the drivers using Unreal’s MetaHuman creator.

I also created a Calendar page listing all the events of the season and their winners, and another one for the current standings. I still don’t know if I’ll have enough time to simulate all of them before Season 2022 starts.

We have also been trying to give some life to the FormulaProc universe via articles covering the qualifiers and the races. We plan to maybe add more content such as interviews, driver profiles, and events happening in this world besides the Grand Prixes.

The Future?

So far we haven’t managed to get much traction, and the amount of work that this has required is not small. For now I’ll release the gas pedal a little bit (will continue releasing the simulations but don’t feel like I should put much more dev into it, especially with the upcoming release of NovaMundi and our secret lighting project.

In any case, if you haven’t done so, please subscribe to the channel and join the discord so you don’t miss the fun and the chance to see this evolve 🙂