Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

Dungeon Tetris

A topic by Numeron created Mar 05, 2021 Views: 1,407 Replies: 10
Viewing posts 1 to 11
Submitted (2 edits) (+10)

Dungeon Tetris has been released!


Hello everyone! My name is Numeron, and this will be my lucky 13th year entering the 7DRL challenge :D

This year, my game will be titled: DUNGEON TETRIS

I'll try to keep this thread updated as I go like a dev blog, but don't expect anything too soon - I don't actually plan to start until Sunday. However, I do have some mock ups I can share that I made while thinking this through. Not sure whether tetris manipulation buttons will be integrated into the floor just yet - it may be too hard to control, but we'll see!


Submitted

Looks cool! I'm excited to see where it goes.

Submitted

Day 1:

For my first day, I dug straight into map generation. I want to get it out of the way, because it will be important part of how the tetris gameplay will work - I intend to have islands in the middle of the tetris field, as well as cutouts in the side to explore. I need to make sure that there is enough for the player to do (i.e. other than just tetris stuff), which means I need to make sure that when I build the tetris stuff it safely works around those other things.

I aim to have the tetris blocks more a means to reach places and restrict movement around enemies than any requirement to fill rows.

Here is the static area at the start of the game. I figured I had a bunch of snow art lying around that I've never used, so I'll try that out for zone 1 before the player reaches the dungeon. It seems to pull together pretty well, especially with a quickly whipped up a snow effect which looks great in motion.

I want to break up zones into multiple tetris fields of varying width to keep it interesting, so here is an example of a connection point between two subsections. Need to make things more interesting though with carved out sides, and scattering around more light sources and other interesting junk.



Submitted

Day 2:

More dungeon generation, as well as ensuring win/death conditions are in place and working correctly, with appropriate screens for each. I've probably done too much pixel art today - I keep getting distracted because dungeon generation is hella boring :P

Stuff like this quiver that shows how many shots you have left:


Instead of important stuff like dungeon generation (here is my level tester cycling some generations):


Submitted (1 edit)

Day 2 part 2:

I actually managed to smash out the GUI pretty quick after the quiver, so here's another shot of the whole thing, while standing in front of the eponymous FINAL BOSS DOOR (there is no final boss yet)


Submitted (1 edit)

Day 3:

Got all of the dungeon generation for zone 2 (the main dungeon) out of the way, going to try to keep at it and close it off asap. Not having done any tetris functionality is making my antsy, even though it's only day 3. The more this comes together, and the more I think about how the gameplay will work - I don't think my original idea of buttons on the floor are going to to work. There will be parts where the player just wants to get to the next platform but there are no enemies around and the buttons might make it difficult (or worse, impossible!), which is definitely a poor user experience. I'm pretty sure I'm going to allow free control of the platforms. Anyway, here is the (hopefully) final version of the same generation presented in Day 2 post. Much more lived in!


Every year for this challenge I take the week off of work, and usually pour ~14 hours a day into it. When I get tired at the end of the day I switch from programming over to artwork because it's less brain intensive. Last night I spent waaaay too long on this menu screen. It looks pretty good, and I think I'm tracking ahead of schedule, but that time really should have been spent elsewhere.


This ended up pretty bang on! The reason the UI wasn't nearly as close is because I decided that the magic amulet you carry (seen in the inventory screenshot in day 2) can show the next tetris block shape, and takes up significantly less real estate. And you don't really need a UI element to see the current block type, so that just got nixed.

Submitted

Day 4:

Just have some screenshots!


Submitted

Day 5:

Tetris time! Last night I implemented the basics, using the SRS rotation algorithm, although I haven't implemented wall kicks yet and not sure if I will. Wall kicks are where if you attempt a rotation, and there are blocking tiles (for example the side wall) then a few nearby places are checked, i.e. it's ultimately moved away from the wall so that it can fit.

Anyway here we are! Note the floor tiles change when the blocks move, this is because the floor is just the one underlying terrain type for each base color, and the renderer picks the tile to display depending on the location of the cell within the level. This makes the checkerboard pattern super easy, but also makes it weird when you try to move it around.


The blocks all otherwise move as I would expect, and can even carry enemies/the player. I'll have to add some checks to detect flying enemies and ignore them. Also if I want tetris blocks to carry torch pillars (I do) then I'll need to move the light entities too. This might be hard because for wall torches, then light entity is actually in the tile in-front of the wall, so this might result in the light from torches being carried away while the torch stays in place :P I'll figure it out anyway.


Another important thing is that with level generation, I need to ensure connectivity - that is the ability to actually reach the exit. With a tetris field, this isn't guaranteed, the player might lock themselves away from a critical door. To fix this, I implemented a spawn strategy that creates tetronimoes in places they don't quite fit, if there's nowhere else for them to go. Firstly it looks for the least blocking space, then it tries to place as high as possible.


Submitted (1 edit)

Day 6:

All the extra bits and pieces of the tetris code are done (I think), except for maintaining the tiles they spawned with. I additionally made it so the blocks occasionally spawn with like bones or other stuff, but the bones (and other things like columns, crates) have a similar issue to the floor - there's only one feature called bones, and the renderer picks a particular bones from a set to display based on the tile x/y. Since the blocks can move around it means the bones change every time they move.

I also implemented a kind of enemy that lurks in the pit/water of the tetris field - moving blocks over them hides them, and permanently landing blocks over them kills them. They don't move, and act either as a shooter or spawner. This should help encourage the player away/toward them depending on the situation. The spawners in particular will be helpful because they will cause the play to have to choose between moving/attacking or controlling the tetris blocks.

Well anyway... have some screenshots! I put the glowing bar tiles in to visually represent various spawn locations, to help me get an early feel on whether there are too many/too little: Magenta is lurker, cyan is regular, red is item. Should actually get the enemies in and fighting today, along with item drops etc.


Submitted

Day 7:

Today, everything is pretty much in place - I'm just playing the game over and over to try and balance things, iron out bugs, and implement minor polishing changes.

There is one major bug that I can't seem to work out. Extremely rarely, like one in several playthroughs, the turn manager gets in a wierd state where the player starts getting two turns per every enemy turn. Very wierd, since there's nothing unique about the player from the turn manager's perspective. The turn stack is a custom linked list, and I think the links must be getting messed up somehow...

Anyway, some screenshots of the game in action!


Submitted(+1)

Dungeon Tetris has been released!

I still have until 10am Sunday for more bug-fixes and balancing, which is 12 hours away - but this is pretty good for a release candidate!