[Feedback] Tetris Battle Remake - Ro-Tris!

Hello everyone!
(Available at Ro-Block Battle - Roblox)

Puzzle games have always been interesting to me due to how simple they are, but how complex the mastery curves can get. One of the most well known of course is Tetris. Of course, solo play is always an option:

Solo Play

But things get real interesting with multiplayer options available.

1v1

If you’re not much of a player and would rather watch your friends battle to say who’s the best, spectating is definitely an open option as well.

Spectate

Most important to me are the following: Does it feel like it should when you play? Do the pieces lock in place when you think they do, does the cadence of the gravity increase feel right? Do the matches happen quickly and is there any lag (server or clientside) when spectating/playing? How responsive do the pieces feel? Hopefully I would like to add a sort of battle-royale mode of FFA 10 players, but I want to get the feel of the game ironed out first. Please let me know your feedback! Here is the game link: Ro-Block Battle - Roblox

EDIT:

Changes

4/26
I’ve ended up making the grid flat-ish:

and changing the 1v1 view from the UI view to a 3d frame as well . Curious as to whether this flat look better suites the game or not.

4/29
Game should now support mobile, as well as have an entry tutorial for non-mobile users for the control scheme setup. If anything breaks, I would really love to know how, as I haven’t encountered any bugs as of yet, but there are definitely some out there.

In terms of the battle 1v1 mode, if people can give feedback on the smoothness of the enemy’s pieces and movement that would be great. As of now, the way it’s structured is a continuous stream of firing events from one client to another, but I’m wondering if polling the enemy status would be a better solution, but I’m not quite sure yet what would be more consistent.

Additionally, the 1v1 game angles have been changed to face the camera so the player can see the game in full view without having to worry about clipping or bleeding of the frame being confusing. However, this view is slightly nauseating to look at potentially? Feedback on how this looks would be greatly appreciated.

15 Likes

I tried it, it’s really great, though I feel like a lot more could be done with the controls, as I’m really used to Tetris Friends with the ability to turn being the Up Arrow key rather than Z, though alternatively there can be an option to change controls. Another thing I had a problem with the game was that since the camera was slightly rotated downwards and how the pieces/border were three-dimensional, I was really distracted by the grid since it kinda interfered. Though other than that, it’s a pretty good game and it has a lot of potential, since I really like playing tetris and ever since Tetris Friends unfortunately shut down I’ve been dying to clear a few lines with the boys. Good luck!

1 Like

Thanks for the feedback! For the control scheme, you actually are able to change the controls to your liking through the options menu. But I did go ahead and change the default to Up to rotate because I’ve been getting that feedback quite a lot. And yea, still trying to figure out the 3D aspect of it. Not quite sure where I want to go in terms of that yet.

1 Like

The game’s good. I haven’t played it as of now, but I am going to later. Your games looks really good!

2 Likes

Looks good from the images provided, will try it out later on. :+1:

1 Like

another minor critique i have is how the score is calculated in how long you survive rather than the lines cleared

something like

  • 1 Line Cleared - 1000 Points
  • 2 Lines Cleared - 3000 Points
  • 3 Lines Cleared - 5000 Points
  • 4 Lines Clear 10000 Points (A tetris)

or something like that

You can also gradually increase the score depending on the amount of Tetrises in a row, with the points gained multiplying by 1.5 or something

Though this is optional, however I would feel like it would be a lot better

Thanks for the feedback again! The score is calculated in two ways; one is the length of survival, but you also gain points based on the lines cleared, as well as combos. You can read up on the specifics here: Puyo Puyo Tetris - Hard Drop Tetris Wiki Because I just copied the scoring algorithm here. But if you don’t want to read, essentially you do get more points per line clear, as well as extra points for T-Spins and successive line clears per drop (combos). Hope I explained it in a clear way!

1 Like

I don’t really play Puyo Puyo Tetris so I’m not really familiar with the mechanics in it

Though, how do you read T-Spins exactly? I’m curious to know how you did that.

Each piece has a central key piece that is the center of rotation. After a successful rotation, a check is done looking at the tiles diagonal of the central piece. If 3 out of 4 of those tiles are occupied by another piece, then a T-Spin is confirmed. This is because it turns out that it isn’t possible to fill 3/4 corners of a central piece without a T-Spin. If you’re asking for how the piece gets spun into the position in the first place, I implemented the Super Rotation System (SRS), the standard rotation system nowadays. Details on the system can be found here: Super Rotation System - TetrisWiki. Essentially, when a rotation fails, before the game decides to give up on trying to rotate the piece, it tries again in difference successive rotation positions, relative to the central rotation tile. If one of those rotation positions would allow for the piece to fit, then it “kicks” the piece into that slot, which is why some of the spins in SRS seem so crazy, because it’s literally not possible to spin them into position without some sort of wall hook or otherwise. An example can be shown here: https://youtu.be/NFoVPBjeZ3Y?t=19 where I spin the piece into place where normally a piece can’t fit without the SRS.

2 Likes

Very nice game! I got 70k Points :))

1 Like

Very nice game. The blocks are off though for some screens and it would be very nice if you could fix them. It is very annoying.

Real fun! It’s hard to tell if a 1x1 cell in your stack is filled or empty, though. Maybe make the colors of the tetrominoes brighter so that it’s easier to tell them apart from the background?

I made lots of changes on the color scheme and background so hopefully its more clear now. Also, the game is now mobile friendly for battle and solo, so if anyone is able to do some light testing on the game on mobile and let me know how it feels for them, that would be much appreciated!

Additionally, I’m very torn on whether or not a background grid is easier on the eyes/better for gameplay, so feedback on this front would be much appreciated as well.

I’ve since tried to minimize this effect as much as possible, and I think I got a good chunk of it; however, since I’ve decided to render the game in the 3D space as opposed to a 2D gui, There’s bound to be some bleeding of the border with the pieces. Some camera angle changes have been made though and I’ve been able to improve it a little bit.

I noticed that the lock delay doesn’t reset when I shift the pieces from left to right:

How I think it should behave:

According to guidelines I’ve read online, the lock delay should be half a second, and should be reset every time a block is shifted or rotated, up to a maximum of 15 times.

https://tetris.wiki/Tetris_Guideline

A piece has 0.5 s after landing on the stack before it locks down. With infinity, rotating or moving the piece will reset this timer. With move reset, this is limited to 15 moves/rotations.

0.5 second lock delay when gravity is less than 20G.

1 Like

Thank you very much! I didn’t know about this, should be implemented by tomorrow along with bug fixes to spectating lobbies. This is also the reason why at high gravity things feel too “smooth” and a lot of misdrops can happen with pieces locking way too fast, and I wasn’t sure what the solution was but this is definitely it.

EDIT: I actually was able to implement it now, I believe it’s correct now and it feels much better, thanks so much again for that feedback!

EDIT2: Thanks again to @XAXA for another important bugfix that would’ve gotten unnoticed with the gravity.

1 Like

Could I by any chance ask you how you did the collision checking? I’m not the biggest math/geometry guy and I’m kind of stuck at the collision checking in my tetris like game. I’m especially clueless how to offset a block after rotating it,
for example you let the “I” piece fall all the way to the ground in a flat rotation and when you rotate it, it should offset a bit on the Y axis to not clip into the floor.

Sure, it’s actually explained for the most part in a higher post up here: [Feedback] Tetris Battle Remake - Ro-Tris! - #9 by DB_EHDGUS.

While this post specifically talks about T-Spins, the “kicking” mechanism is what is responsible for the offsetting and collision checking. Here is the order of operations for initiating a rotation:

  1. Recording the desired rotation and current rotation - when rotating a piece, it can either be in one of 4 orientations; neutral [or 0], neutral + 1 [or R] (rotated once clockwise), neutral + 2 [or 2] (rotated twice), neutral + 3 [or L] (rotated three clockwise), and then back to neutral. Basically, if we’re in neutral and the user intends to rotate left or right, we’re going to be recording which “state” it wants to be in, either neutral +1 or neutral +3 (left or right respectively).

  2. Grabbing the appropriate SRS rotation vectors using (1). Most of the pieces (J, L, S, T, Z) have the same rotation data, depending on which orientation they are and which orientation they are trying to get to. In this link: Super Rotation System - TetrisWiki, it goes more in depth - the relevant part is here:

" Instead of directly assigning a set of ( x, y) kick translations to each of the 8 possible rotations , TTC actually employed a different approach, and instead assigned a set of ( x, y) “offset” values to the 4 rotation states . The kick translations are then derived by taking the difference between pairs of offset data. When rotating from A to B, subtracting B’s values from A’s will give the kick translation for the rotation one way; and subtracting A’s values from B’s will give the kick translation for rotating back the other way."

Basically, we would first find which offset vectors we are trying to go towards; if we are neutral J attempting to rotate right, for instance, we would take the following data:

( 0, 0)	( 0, 0)	( 0, 0)	( 0, 0)	( 0, 0)

then compare it to the following:

( 0, 0)	(+1, 0)	(+1,-1)	( 0,+2)	(+1,+2)

We then take the offset vectors from where we are trying to go, then subtract from those vectors the offset vectors of our current, continuously trying to translate our piece on our grid using that new vector:

( 0, 0)	(-1, 0)	(-1,1)	( 0,-2)	(-1,-2)

Going left to right are our successive tries in adjusting our piece. It’s important to note that these tries are taking into account the rotation of the piece; so our first try is rotating the piece in the direction we want and translating it (0,0), i.e. rotation in place. If that fails, then we try translating the piece (-1, 0) and rotating again. This happens each of the 5 tries, and if that fails, then we conclude that the piece is unrotateable and give a failure feedback when the player attempts to rotate that piece in that spot.

This is of course assuming you are working on a coordinate grid system to program your game which I would highly advise if you aren’t, though I can’t really see how you would easily program tetris without having that in account in the first place. Personally I went with an object oriented approach and found it lent itself very well to this type of game, though I can see you being successful without the added overhead.

1 Like