stealthcoder
stealthcoder
Tania Anta's gamedev portfolio
40 posts
Barcelona-based gameplay programmer. On this Tumblr you can browse my past and current work or, if you're particularly bored/curious/both, read some ramblings about game development.
Don't wanna be here? Send us removal request.
stealthcoder · 6 years ago
Text
Fairy Bomb post-mortem
I’ve neglected the blog once again, so to make up for it I’ll try to write not one, but hopefully three postmortems over the next week explaining what I’ve been doing these past months besides gaming.
I’ll start with the most recent: Fairy Bomb, my entry for last week’s #7DRL challenge.
Tumblr media
Play it here
In case you don’t know, the challenge involves creating a roguelike game in seven days, with completeness being the main objective.
You may remember Rob-like, my first foray into roguelike development, which has been canned for quite a while now (I keep fooling myself saying I might resume it, but then I say the same about most of my game jam projects and...ahem). Then, late last year I went for a second attempt with Sacrifice-like. That would have been my entry for the 43th Ludum Dare if I’d managed to submit it. Unfortunately, I both miscalculated the scope and burnt out from yet another game jam that had taken place the week before. Since that will hopefully be the second post-mortem I will not spoil more.
Back to Fairy Bomb, I went for a relatively straightforward idea for a game, with some twists: The map would be hexagonal rather than a square-based grid, and the combat would be fully based in bombing like in classic Bomberman (At first I’d considered that monsters could also use melee andI even implemented a basic pass or projectile-based ranged combat, but cut it out because it didn’t feel right at the time).
Last, I decided to make the bombs paint the ground conferring side effects to entities occupying those tiles.Those side effects would range from status changes to healing or other crazier stuff, and could even become the game objective in itself if I had decided to pivot to territory control instead of your usual “escape a dungeon” goal.
I’m pretty happy with the idea and somewhat satisfied with the result.
What went well
Code reuse. This time I was able to benefit from some bits of code from past projects.For example, I ported the BSP generator from a procedural generation demo I’d done a couple of years ago (and before that I’d used a similar implementation I did for Rob-like, but had to scrap it). Other areas where I could use existing code were the battle logic, back when I was thinking of using normal combat for the AI and the “play contexts”, which determine the context the player interacts with the game under certain circumstances (normal interactions, multiple-input interactions, etc).
Learned new things. In particular, I had to do some research about hex maps. Unity’s Tilemap functionality already helps a lot, and for the missing bit I can’t help but recommending strongly Red Blob Games’ Hexagonal Grids article.
Code architecture ideas + Data driven game logic. If/when I develop the game a bit further and can clean it up, I might share some tech design docs or code. If you’re masochistic, though, you can check the repo on Github.
Feature scoping and adaptations. As time crept in, I decided to scrap several of the features listed on the backlog. For example, instead of adding normal consumable items, like potions, I decided to exploit the terrain paint’s side effects. Also, doing without melee combat resulted in more symmetric gameplay, which would make easier to playtest the core bombing mechanic and reduce the number of interactions available.
What went wrong
No art.  I could only rush some tile and bomb art and ended up using the character graphics I’d used during development. I have a very clear idea for the main character and some hints for the enemies, and I would like to try to take this a bit further.
Barebones content design => Bland experience. I did have a number of systems in place that I believe are really promising, but in its current state I think I’m not exploiting them to their full potential. Map generation, monster spawning and loot rules are there, but they don’t offer anything interesting right now, and the terrain painting is not super useful at the moment. I need to rebalance everything, create more content and try to structure everything into a fun whole.
Juggling a game jam with a work week is exhausting. While this time I did manage to submit my days reduced to work-jam-work-jam, except for Friday, when I took some time off for the IWD. Needless to say, this is not healthy and I should not do this again (especially when my last LD failed for similar reasons -although not exclusively)
Code architecture misuse. Because of the rush some good ideas I had about how to structure the code ended up twisted. Also, I probably overcomplicated things in some areas.
In the end, I overscoped once again.
Learnings
Simple can be better. Reduce scope as much as you can, and then try to reduce a bit more.
REST.
Make a strong commitment to avoiding programmer bias. In Spanish we use “la cabra tira al monte”, meaning something like “the leopard never changes its spots”, and a constant in most, if not all my game jams, is the fact that I spend most of the time coding instead of doing art of some low level game design. I need to step out of my comfort zone and try to develop those areas if I want to improve my games.
1 note · View note
stealthcoder · 7 years ago
Text
LD41, LD42 and status update
Phew... seems like I skipped one full #LDJAM edition with no new posts, so I’ll try to combine everything here :D Sourcetree tells me that the last update on the RTS took place a couple of weeks before #LD41, so I probably changed my focus to continuing the jam project (in a way, another RTS, more on that right now) and then life got in the way. Shame! The theme for the 41st Ludum Dare was “Combine two incompatible genres”, which spawned lots of interesting ideas. Mine was a hybrid of a rhythm game with RTS mechanics.
Enter Beatcraft!
Tumblr media
On the video is a losing playthrough:
youtube
I didn’t have time to focus on a more relatable RTS flow (for example, exploration, choice, different units or more sophisticated combat) and there were issues with feedback, so it rated poorly, but I liked the concept. Fast forward 4 months with no energy to code after work and hey, it’s Ludum Dare time again!
These days the 42nd is on the rating phase. The theme this time is “Running out of space”, a bit similar to the 39th “Running out of power”, and I took the inspiration from a trial in Takeshi Castle and another from Indiana Jones and the Last Crusade to create a Stepping Stones, a dungeon crawler where you need cross a pillar-filled chasm.
Tumblr media
Here’s a fragment of a run:
youtube
After the jam I’ve tried to focus on improving the dungeon graphics into something that resembles a dungeon and a couple music tracks.
Once I do those improvements (or get bored of it) I wanted to focus on learning new stuff. Right now the top candidates are:
Continuing with a UE4 online course I’d started.
Experiment with Unity’s new 2D tools.
Refreshing what I learned about 3D modelling on a Blender course, and hopefully apply them into a game.
Deep diving into music theory with a special focus on composition and probably learning an instrument.
I hope to keep a better pace at updating the blog.
0 notes
stealthcoder · 7 years ago
Text
Side-stuff updates
I haven’t posted since Christmas for the mandatory Ludum Dare spam, but that doesn’t mean I’ve been idle. On the one hand, I joined a project at work using Cocos-2dX, so I started a smaller project at home to implement a first pass on RTS mechanics using a top-down 2D view using that library. My reference is Castle Fight, a relatively well known mod for Warcraft 3 (Fun fact: if you think about it some of the most successful games right now both on mobile or PC (most MOBAs, Clash Royale, etc) can be traced to a mod of WC3/SC, or a variation). Progress is slow because life (and to be honest, Arena of Valor -_-). I’m trying to keep over-engineering under control, and I’ve started coding some construction logic. Hopefully soon I’ll be able to show something better than this.
Tumblr media
Besides, this week began the #7DRL challenge. I’ve used the opportunity to check TDL, a Python-3 upgrade of sorts to libtcod, a c++/python library that has lots of useful functionality to code a roguelike. However, I don’t have any clear idea for a game that could use it, so for the time being I’m basically refactoring a tutorial. Hopefully I’ll come up with something. On the gif you can see how the player moves around on a map. FOV is provided  almost for free by TDL.
Tumblr media
I tried to extend the tunnelling algorithm to support diagonal corridors with some old code for a C++ roguelike project using PDCurses. The corridors are built just fine, but I need to review how surrounding walls are built to avoid overlaps. And last, I also managed to shortly revisit Roblike. I had to upgrade it to Unity 2017, which broke the alpha blending shader. While I was fixing that I also managed to replace a custom masking material with Unity’s new and shiny SpriteMask. Then I thought that replacing my custom tilemap logic with Unity tools could be an interesting excuse to resurrect the project in the not-too-distant future.
1 note · View note
stealthcoder · 8 years ago
Link
I can't bring myself to re-format the whole thing a second time, so I'll just post the link to the postmortem on the #LDJAM site.
Tumblr media
0 notes
stealthcoder · 8 years ago
Text
LD40 - Mountain Diver
It’s been a while since my last update. I must admit that I haven’t been doing much with code because I’ve developed a severe case of addiction to Arena of Valor, a MOBA for mob..ile devices. Also, lots of Nintendo-related games. I did try to build a simple shader displayer program on DirectX11 to refresh some knowledge, but little more than that. It’s still too underdeveloped to share anything, to tell the truth. However, this past weekend was Ludum Dare time! I managed to overcome my hiccup from #LD39 and this time I went for a smaller scope, which proved a way better choice, even if I still had some mean bugs and lots of features to implement. I introduce you to Mountain diver :D
Tumblr media
I’ll try to write the postmortem today or tomorrow. I also have to prepare a talk on Game AI (my first one, so I’m sliiiightly scared) and I’d like to start working on a post-compo version with fixes and new features. Good thing this week is a relatively long bank holiday in Spain :)
0 notes
stealthcoder · 8 years ago
Text
Enter Booty Quest
After some months soft launched in a small number of countries it seems that the world release date has arrived, and I can finally share the game I worked in during my time in Outplay: 
youtube
0 notes
stealthcoder · 8 years ago
Video
youtube
Aaand it’s done now! This time I learned my lesson from Thunderbolt and Lightning and went with a simple, yet highly expandable concept. It’s been a lot of work over the weekend, and as always there were several things that couldn’t make it in time (The space pugs!! T_T), but I’m happy with the result. I’ll be writing the postmortem soon. In the meantime you can play Korokke Defense on Itch.io. Also, please do yourselves a favour and try some of the other games of the #TodasJamers game jam. Loads of talent and crazy ideas to play there! :D
0 notes
stealthcoder · 8 years ago
Video
youtube
Day three, with fancy (yeah, sure) graphics, and a couple of possibly temporary sounds. I also implemented a level system, but the levels right now aren’t particularly balanced. Test it at ithildin.itch.io/korokke!
2 notes · View notes
stealthcoder · 8 years ago
Link
I’m still working to close Thunderstorm and Lightning, but this week I’ve joined yet another game jam. This one has been organised by Todas Gamers, a famous female-led Spanish gaming site, and its aim was to encourage participation of women in game making which, it goes without saying, is an awesome goal. Check the #todasjamers hashtag on Twitter to follow the jam’s progress (Spanish, mostly). My personal goal this time will be...to actually submit :D
0 notes
stealthcoder · 8 years ago
Text
LD39 - Thunderbolt and lightning: Extreme blackout family survival simulator! a pre-mortem?
First things first, the non-submission link: TnL @ Ldjam.com
I'm currently on a train back to my hometown and I should be taking the opportunity to get some rest. Instead I'm reflecting on the weekend.
This is the fist edition that I don't get to submit. Maybe the second if I count LD30, when I had to quit pretty soon after my router broke down following, interestingly enough, a storm. I couldn't bend what i had into a submission-worthy entry, and in the end I just decided to publish the entry as “Unfinished” so it doesn't feel like wasted time (Great new feature, by the way!). I'm a bit frustrated, and immensely tired, but at the same time I feel proud of the game.
Tumblr media
The game
Thunderbolt and lightning: extreme blackout family survival simulator! (I’ll use the shortened forms TnL or just the more common Thunderbolt and lightning) puts you in charge of a household experiencing a prolonged power outage with a limited amount of supplies and the help of a backup power generator. Your goal is to keep track of the family members' needs so they won't suffer a mental breakdown...or worse.
You can take a look at it here: Thunderbolt and Lightning @ Itch.io
Tools and credits:
Unity and VS2017. Aside from some time to tweak the rain drops particle system, I didn't find any significant issues.
Draw.io for the floor plan.
Inkscape + Photoshop for graphics.
TexturePacker to build atlases, and for the first time I used Codeandweb's own Unity exporter plugin to save me some time from cutting the sprites manually.
myNoise’s  thunder sound generator + Labchirp. Audacity for tweaks.
Credits-wise, I used Mike Koenig’s Thunder Strike 1 once in jam mode, for the occasional lightnin effect.
What went right:
The mood, I think (vfx + audio)
The art style, even if it was rough and the techniques inconsistent.
Having the game level out relatively soon. It gives you some focus in terms of how characters can interact on it, and also give.
Work throughput. The extra day probably played a part here, for sure.
This is debatable, but not giving up. Even as it became apparent that the progress wasn't enough and I had no backup submission plan as in past occasions, I refused to throw the towel (I did consider that over Monday afternoon, though),  and kept pushing forward.
What went wrong:
SCOPE. This was a consequence of two other huge interdependent mistakes, because of which I vastly underestimated the amount of work required and also, how would the elements interact to create an emergent and fun experience:
I neglected a key intermediate design abstraction layer between the core idea and some more specific requirements, or how systems would interact together, and how all of that should reinforce the player experience.
Because of this I didn't really have a decent planning. I kept a Trello board, but was basically adding and removing new tasks to it as I went.
No backup plan for the deadlines. During the second day my progression hinted to miss the compo limit. Back then I should have stopped for a while, taken a look at the project's status and make some compromises or changes so that, even if I wouldn't be in time for compo, I'd definitely have a concrete, manageable goal for the jam. I didn't. I just naively assumed that by continuing work I would just make it somehow.
Crappy art pipeline / asset conditioning process.
Going solo for the compo can be hard, but once you take part into a couple of entries it is manageable. Likewise, solo-ing for the jam can reduce the time pressure and give you some buffer to get some proper rest and take care of yourself if you plan beforehand. As for myself, I just used the jam mode as an extension of the deadline and kept crunching for almost the whole day (with the predictable result of exhaustion).
Lessons learned
Don't just become enamoured with the idea, a bunch of secondary ideas and incorrectly assume that it all constitutes a proper design. I hope this time was an exception compared to more recent entries where I had a more down-to-earth vision.
Specially don't assume that it also works as a task list. Prepare properly.
Even then, try to reduce scope even further.
The plan should clearly state the main steps for a potential submission candidate, and some risk assessment points to determine if changes/cuts are required. At any of those points prepare a plan B.
This has been repeating for a while on my previous postmortems, but I need to practice art.
I still want to take the project to a state I would have deemed decent enough to submit last Sunday or yesterday, but first I need to take a clear look at it.
0 notes
stealthcoder · 8 years ago
Link
Heh... It’s  been some weeks, and this post is actually going to come right before I start posting about #ld39. I forgot to actually add to the challenge page when it was finished. The English version is still a work in progress (the challenge was in Spanish, so breaking my self-imposed “gamedev in English” rule I started there and then made a stub) If you understand the language, it’s worth to check the FemDevs’ blog entry about the challenge, listing the entries for the other participants :) https://femdevs.org/2017/07/19/femcode-v0-1-generacion-procedimental-de-mapas/
0 notes
stealthcoder · 8 years ago
Video
youtube
Kept working on this until now (reaally late) instead of playing or sleeping. Stupid focus. For starters, I improved slightly the cell automata, adding a check to exclude border cells from simulating (thanks to this, levels can feel more like either an archipelago or a proper cave system dungeon). Also, I added another cell computation method, that helps filling the spaces left by the default computation, giving as a result a more maze-like level, with lots of narrow corridors. After that I decided to play around with a new generator type based on the Drunkard Walk. The algorithm itself is pretty straightforward, an easy adaptation of the pseudocode shown on the linked Rogue Basin page.  Basically, you start from a map filled with walls and a random starting position. Then, for each step pick a random direction (right now I just choose between the 4 cardinal directions, but any other method could work, too). If you take a look at the video, the third part depicts how the algorithm "carves” new floor cells step by step. It also exposes some problem with it that I need to tweak. For instance, it tends to get stuck very easily, and it doesn’t properly explore the whole map bounds. Maybe adding a second walker point could help.  Check the code at:  https://github.com/wildrabbit/cavegen
0 notes
stealthcoder · 8 years ago
Text
Cavegen - now on Github
As the project has grown a bit, I thought it would be best to add it to Github, so here is the URL to the repo.
https://github.com/wildrabbit/cavegen
I’m using the following external dependencies and building using the platform toolset for VS 2017. It should probably build without any problem on VS 2015, too.
SFML v2.4.2
Ocornut’s ImGui
Elias Daler’s ImGui bindings for SFML
0 notes
stealthcoder · 8 years ago
Video
youtube
Started to clean up some code in order to make easier to add new generators or enhance the behaviour. Github repo coming soon!
0 notes
stealthcoder · 8 years ago
Video
youtube
I’ve been playing around a bit with map generation, and as a result here’s a cellular-automata based generator I’ve cranked quickly (this could bring some inspiration back to resume work on Roblike, who knows?). The shapes are not so fancy as in the resources I’ve been following yet, but I still have to tune the algorithm, and perhaps increase the size of the map.
The current implementation is pretty straightforward for the time being.
First we initialise the map with some random noise, using a set probability of a wall spawning.
Then we run a number of simulation steps. For each of them, we examine the neighbours of a given cell in the map (on the previous iteration) and count how many of them are wall cells. If the number exceeds a set threshold, it’ll become/stay a wall. Otherwise, it’ll be an empty cell. Further simulation steps help smoothing the shapes.
As I mentioned, the open areas still don’t feel nice enough, and I’m not ensuring connectedness between areas yet, so I need to work on that.
Additionally, for some time I’d been interested in exploring ImGUI in order to build game-related tools or things like that on C++. I could use QT, which I’ve used in the past and apparently can be easily integrated with SFML, which was the library I chose for the test, but it can be overkill for what I’m doing. I found some ImGUI bindings for SFML done by Elias Daler, and integrating it on my project was super easy :D
0 notes
stealthcoder · 8 years ago
Text
Tooth Decay: Post-mortem
Almost recovered from the rush of the weekend, here is the post-mortem of Tooth Decay, my entry for the 38th Ludum Dare. As always, I participated in the compo mode, and as always, I had a lot of fun.
Tumblr media
Play it here!
Background
As usual, I tried to brainstorm some ideas with the final theme selection. This time I couldn’t spend long doing this but still managed to fill some pages of my notebook with ideas.
Tumblr media
Eventually the theme was announced. I wasn’t particularly excited with it: I felt it might lead to a relatively narrow range of mechanics and/or settings (I’m guilty of this myself :D). However, there’s always an interesting idea you can come up (or any kind of idea, really), and if there’s anything sure is that people will surprise you with their own, so in the end it’s fine.
I kept brainstorming for a while, now focusing only on the final theme. One set of contradicting concepts I would have liked to explore was how communications and technology have managed to vastly expand a relatively small world (a tribe in prehistory, or a small town not so long ago…), but at the same time they have contributed to shrink it sometimes, reducing it to isolated bubbles of like-minded people. I wasn’t able to come up with interesting mechanics for either of the two, so I went for something more conventional. Below, more ideas for “a small world” :
Tumblr media
By that time, one of my wisdom teeth started to hurt “BIGLY” -and has continued to do so without fault. That reminded me of an episode of one of my favourite cartoons when I was a kid, Once Upon a Time…Life (Fun Fact: if I hadn’t discovered video games I would have probably studied to become a doctor because of it). The episode in particular was about a bacterial colony excavating a cavity on a tooth.
Tumblr media
I think my streptococci are way cuter.
The setting was perfect, and an obvious game mechanic immediately joined: drilling. Because of the time and constraints I went for something relatively simple and fun, and I remembered Mr Driller, a game by Namco where you…well, drill. I decided to use the same concept, and incorporate some base building mechanics (which unfortunately didn’t make it onto the game in the end), a la Steamworld Dig or a Flash game I found while looking for references: Motherload.
Tumblr media
I had a solid idea, and it wasn’t even noon! I immediately opened FlashDevelop, created a new Haxeflixel project and started prototyping.
What went well
Clear vision.
Fast paced gameplay.
Modular design. Thanks to this compromising was easy and at the same time there’s a lot of room to expand it in different ways while staying loyal to the vision.
Main mechanics working relatively early.
Cluster-finding algorithm. To detect groups of tiles of the same type that can be drilled in one go and drop to the ground I used a two pass labelling algorithm, as depicted here and here. It was surprisingly easy to implement, and it worked like a charm (or almost, I think I’ve spotted an occasional bug).
Haxeflixel debugging console. This time I took a bit of time to research how to the in-game watch window and the command console quite a bit and I have to say it is quite powerful and helpful.
What went wrong
Art bottleneck. I spent more time than I should have coming up with an art style (pixel art? vector? what about “none of them”!?) and a decent set of concept references for the in-game screen and the overworld. I also added some animations to the main character, and even if it doesn’t have too many frames I’m still super slow at doing that.
Tumblr media
Collision resolution + Camera management woes. I had to fight a bit with Haxeflixel, first to sort out some glitches handling player-tile collisions, and then to get my two cameras (one for the HUD, one for the board) to render properly. I could have probably been able to work with a single camera setup, but as the map had an X-offset and applying it to the whole scene isn’t trivial I’ve found that using a camera works fine…once you manage to set them up correctly. I lost a good couple of hours with this.
Dropped working-ish feature. On Saturday night, right after I implemented the clustering algorithm, I quickly hacked tile shaking and dropping once a tile’s cluster becomes disconnected from the ground. It was working, but drove performance to the ground and it was quite late at night, so I decided to. In hindsight this was probably a good decision, but I would have liked to see it in the submitted entry.
No resource management / upgrade system. What can I say here…good old lack of time.
No time for sounds. Eeer….the same.
Lessons learned
Keep a stock of Nolotil pills available on my cabinet for emergencies. Paracetamol just doesn’t cut it T_T
Improve the art pipeline! Practice, practice, practice.
Start exploring alternatives to Haxeflixel: While the framework is simple and powerful, from time to time I keep finding some issues with relatively straightforward features that have me fighting against it more than they help me save time. To tell the truth, most engines and frameworks have their own peculiarities, so eventually you’re bound to bump against something that works in a different way than you expected regardless of which technology you choose.
Defined the task list for a post-compo version!: Check it here
0 notes
stealthcoder · 8 years ago
Video
youtube
#ld38 Submission completed :D This was quite an interesting project. I won’t have much time for a while, but I left some things I’d like to complete (yeah, I know I always say the same) Check it on my itch.io profile: 
0 notes