Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Occult Nostalgia Devlog

A topic by Achie created Oct 28, 2022 Views: 220 Replies: 4
Viewing posts 1 to 5
Submitted (3 edits) (+2)

Tune to channel 3 and prepare to fight against monsters, demons and eldritch horrors in this dungeon crawling RPG inspired by the feeling that there’s something ominous about late night television! 1 - 2 Players.

Quick Shameless Plug

Ko-Fi 🐦 Twitter 📷 Instagram ⌨️ GitHub repos

Devlog 1

A Game By It’s Cover is a really interesting jam idea I recently run across. There is a yearly fictional Famicase Cart Exhibiton, where people design cart labels for non-existing games, and soon after there it the A Game By It’s Cover jam, in which you choose an entry and create a game for. This Devlog series will be about my entry for this years (2022) jam!

The entry that finally catches my eye was Occult Nostalgia by Tyler Dori.

I already had started a side project about a dungeon crawler so it was time to dust it off and give it the love it deserves with an awesome entry idea above it!

The old idea was heavily inspired by Tiny Epic Dungeons, where you explore a dungeon by flipping tiles and deciding where they go and your goal is to eventually find the two guards to defeat them to unlock the boss room and deal with the boss before your torch runs out. The movement and tile flipping code was already in place, but to say the least it was a hacky true jank code. It was time to step back and design.

The new idea is to set a bitfield for each cardinal direction and build our tiles with those. We have 16 variations with the question mark, which neatly fits into a 4bit bitfield. With each cardinal direction having its own bitfield, we can check any tiles for those bitfields for movement and this simplifies many if statements into just one. For ex, the bitfields for up and down are 0b0001 and 0b0100. If we want to move upwards we simply check if the current tile we have has an upward directed road with a bitwise and operator and check the destination tile for a downward road component. If both return true, we can pass along!

For rotations, we simply set each tile into a category, and we have 1 category for each number of exits. 1 way end pieces, 2 way corners, 2 way straights, 3 way junctions and the big 4 way junction. If we want to rotate we simply increase the tile id, and check if we are in bounds for the category. This way we can eliminate the headache that would come with over- and underflows if we bitshift our fields.

If we encounter a new unknown tile, the game (as of yet) generates a new one at random, let’s rotate it in the direction we want. After that we check where it exists (based on our bitfield checks) and place new tiles there. Today’s addition was room types. In the final game there will be different rooms with different effects. Some will have traps, some will have cultists or eldritch horrors waiting and some will have innocent people about to be sacrificed. We free those people to gain time to find the eldritch god they want to release on us and defeat it, while it’s weakened by the not broken seal.

The plan is to have different characters from our film crew who stumbled upon mysterious disappearances and follow some shady people into this old ruin. Different staffs from the film crew will have unique stats to help them through the dungeon with the usage of skills and items they find inside.

This is the basic plan, let’s see if we can do this in the remaining time!

Submitted

Devlog 2

Multiplayer had to be added to allow at least a local-coop for 1-2 players to be based on the original cart image, but at that point we can add multiple, so here is the game with 4 different characters! It’s nothing major, we just pass the currently active character to the controller function and if said character runs out of action we pass to the next one!

I was struggling with the combat system. Still no idea how to handle it correctly, but for the time being I mocked up a little combat window that will show your options!

I am planning on showing health and armor values for sure and the basic attack values of your weapons. Resting and healing will be also included but at this point special skills won’t fit on the screen. This is a puzzle to solve in the future, but the mockup already helps the creative juice flow.

The other big issue I had to solve is the drawing of entities. If you have multiple players in the game, it would only render one on top of all the others as there was no system in the game for that.

Now there is a system in place. Is it the smartest? No, does it work without much performance? Yes! Here is the algorithm and here is the rundown:

Basically we use a new collection, into I insert every entity that needs drawing like that, and some looping logic, check if the tile is already in the occupancy map, if it is, add the character to it, if not create a new space, and after that the algo loops around the occupied space, calculates how many entities there are in it, calculates a degree offset and finally draws them in a circle using the offset values.

This leads to a pretty nice effect, that only starts to look bad over 6 entities (imo) and I don’t plan on the game every having that many or even more entities on one tile at a time.

(+1)

absolutely love seeing work in progress it helps so much as someone who has no idea what they are doing!

Submitted

I’m glad you like them! Probably will do another this weekend if I manage to get some progress done! (Cheeky plug, in the meantime if you like this kind of stuff I have a lot of articles like this over at my Ko-fi page! Collection of all of them)

Submitted

Devlog 3

There is a lot to go on in this devlog as I might have skipped making them daily, but let’s get to some interesting code parts!

Enemies and Combat

Last time we added enemies and solved the drawing issue, so let’s get to the meat of the game, combat. For the moment it’s a crude system (I may want to implement a dice based system, we will see), but it’s a good proof of concept!

First of all we need health points and something to deal damage with. For this I added 5 stats to each entity namely: Health, Armor, Strength, Dexterity and Intelligence. Health is pretty straight forward, armor will reduce incoming damage with a flat value and the 3 attribute stats will deal different damages and with different rules. We can deal with that later, let’s handle just hand to hand strength combat.

For this we need an in-combat window to showcase our character ’s stats and possible skill usages and the current enemies in the characters tile. The window system we had setup earlier and to trigger it in combat, we check if the current player is standing on a tile with an enemy on it. If yes, we trigger combat mode, and stay in it as long as there is an enemy alive. This process is not the most attractive as I found out the code is not properly structured to handle these kinds of operations during runtime without some ugly checks and for-s. Algorithm rundown here

In a quick rundown, we grab the enemies by index, who are standing on the same tile as the player. If we find any, we enter combat mode, in which the player has to choose a skill to use and an enemy on which to use it. Currently combat consumes all actions as I want it to be once per turn, but we will see the gameplay effects of that later.

New enemies appearing

After this hacky combat is handled we need to actually add enemies to newly found tiles. For this we need new enemies so let’s refine our cultist and add a demon and a tentacle to the roster!

We use two images for each, one to showcase them on the map fully, and a smaller one in the combat window! Also we need some icons to showcase all of this!

Tiles and new UI

Yesterday I started revamping the old UI so now we have a mostly new one! Give a warming welcome to the sacrifice counter on the right, as it fills the game will be closer and closer to ending. Upon reaching the top, the eldritch horror is strong enough to break the seal and we lose the game! Time is ticking, let’s find the key to the boss room!

Also I was not happy that the tiles just appeared from nothing and redid an old failure code, now we draw cards from the deck and place them for the new tiles on the screen!

The effect itself is not that complicated, upon adding new tiles we create the cards, which travel to the location. After they reached it they set the new tiles in the dungeon collection so we can progress further apart!