1 key finesse

11/25/2015 8:39:26 PM
Total Posts 5

1 key finesse

I'm posting this here because I'm tired of having to explain to everyone why it looks like I'm using a bot. I understand why they think so though.

I am using something called 1 key finesse. Basically I remap my keys so that I can drop any piece in any position with just one keystroke.

My keys are mapped like this. 1 key finesse involves making use of 40 keys because there are 10 different columns and 4 different piece orientations.

Pressing Q will cause the piece to be dropped 0 columns away from the left wall with a -90 degree rotation. Pressing W will cause the piece to be dropped 1 column away from the left wall with a -90 degree rotation and so on.

If you are interested in trying this, you can do that here https://sites.google.com/site/xaelous/finesse.
If you want to try it on Cultris, you can get the ahk script I'm using here http://pastebin.com/StEAwxRg. This script probably wont work correctly unless you are using guideline minos and the exact same screen size as me, so you will either have to edit it or show the devs that there is demand for 1 key finesse controls in the game. Implementing these controls as an option would be much better than a bunch of people using scripts in my opinion.

​Q: How long did it take you to learn this?
A: I started 17.06.2015 and it took 2 months before I got the first decent results. I'm still not as good as I was with normal controls.

Q: Why can't you just play normally like other players?
A: I used to play with normal controls, but 500+ keys per minute was just too much for my hands. 1 key finesse allows me to use about one third the amount of keystrokes that I would have otherwise needed. I can't just play normally like other players because 1 key finesse is a much more comfortable option and I enjoy being able to play this game without the physical pain that comes from button mashing. 




Due to popular demand and because my script by default is most likely not compatible with other peoples keyboard layout, screen size, block colors and spawn orientations, I quickly threw together a guide for which parts of the script you'll need to edit and why. This guide is aimed at people with little/no coding experience. 
When you first run the script and you see pieces moving around, you may believe that is how it is supposed to work. However, chances are the script works but it does not work correctly. What I mean by that is when you press a key the script does some moves, but it does not necessarily do the correct moves. What the correct set of moves are depends on things like piece colors, spawn orientation and whether or not the script is able understand what your current piece is. If you are comfortable playing with guideline colors and spawn orientations, you do not need to change anything besides the pixel coordinates (see near bottom of post). If you use different colors and/or spawn orientations, reading this whole thing should give you an understanding of what you'll need to change.

tl;dr: I have made the most important parts bold but if you have no clue why you're doing what you're doing you should read it all anyways.

It is important to understand how the script works before you start editing.
Starting with the very basics. On line 38 in my script, you will find “A::”.
In Autohotkey scripts, when you see a letter followed by two colons like that, it means whenever you press that key, the code underneath is run.

My script is essentially a bunch of hardcoded if else statements(bad programming practice). When you press a key, my script checks what the current piece is and if it’s a certain piece it will send a bunch of keystrokes, else if it’s another piece it will send some different keystrokes.
For example, say you want to drop the piece at the left wall and you press A, if the current piece is O it will need to move left 4 times but if the current piece is not an O it will only have to be moved left 3 times because all of the other pieces JIZLTS spawns one closer to the left wall assuming guideline spawn orientations. If you want to use different spawn orientations you would have to manually go through all the moves and change the ones that are incorrect.

Different pieces require a different set of moves in order to reach the desired position and therefore it is very important to be able to detect what the current piece is.
At the bottom of my script there is a function getPiece(x,y) (thanks mISStAKE). This function gets called every time you drop a piece and it checks the color of the given coordinate and determines which piece is on that coordinate. If you use non-guideline colors the lines you have to change inside of this function are the ones that says: return "J", return "L", return "O" etc…
For this function to work, it needs an x,y coordinate to look at.
The code you need to edit are the x and y coordinates on lines 13,14,17,18.
nextpos is the position of the next piece and ghostpos is the position of the ghost piece at the beginning of the game.
Since you already should have Autohotkey installed, the quickest way to get the coordinates you need is probably with this script. http://pastebin.com/CRwVKPiQ
When you run this and press ctrl+ left mouse button, it will show you the x,y coordinates of your mouse. Click inside the cultris window to make sure its focused, if some other window is in focus the coordinates will be for that window instead.

As a player you must also remember to press space once at the beginning of every game in order to detect the color of the first piece. (the script isn't smart enough to know when a new game starts so you basically have to tell it when by pressing space)
Also, remember to change your keybindings in cultris so they correspond with lines 24-29 in the script.


11/26/2015 12:21:31 PM
Total Posts 515

Re: 1 key finesse

Does this also works with spins?

11/26/2015 5:03:25 PM
Total Posts 5

Re: 1 key finesse


11/26/2015 10:19:13 PM
Total Posts 520

Re: 1 key finesse

Just so that everyone knows: Blitz seems to use only 1-key-finesse for diversion (Tetris can become boring if you play it for years)  and physical relaxation. He doesn't use 1-key-finesse to perform better. 1-key-finesse is an ineffective way to play Cultris 2 because:

  • You have to wait about 20 miliseconds between each simulated multitap keystroke (or Cultris 2 will think that you cheat and will begin to randomly ignore keystrokes)
  • The pretty high gravity and low field height punishes 1-key-finesse (can't stack that high because piece doesn't move left or right before you drop it).
  • It's hard to deal with overhangs.

I know what I am talking about. When I started playing Cultris 2, I used a similar system. It had 19 keys instead of 40, but sometimes I needed to press 2 keys per piece (17/14 = 1.214 keys in average). For some footage see this video (that last game still marks my speed record to this day). For a related thread, see this one. On my old computer I had no other choice than to use 1-key-finesse, because Cultris 2 was not playable the normal way (massive FPS drops, I remember clearing the "Too many cooks" challenge with 2 frames per second average). Back then, Cultris 2 hadn't the anti-cheat protection it now has, so you hadn't to wait between the simulated keystrokes. I guess the anti-cheat protection was introduced to make bots slower and harder to program (see this thread). Anyway, this made 1-key-finesse no real option for Cultris 2 multiplayer (in a game with 1 preview I am a little faster with 1-key-finesse, but this advantage is null and void with the Cultris 2 related problems stated above).

Does this also works with spins?

It's theoretically possible to make 1-key-finesse work with sonic drop (soft drop all the way to the bottom). However, you have to press an additional key beforehand (indicating what to do after the softdrop: move or rotate and in which direction?). Here's an example of me softdropping in Cultris 1. That's the script I used.

5/2/2016 10:02:48 PM
Total Posts 3

Re: 1 key finesse

Thank you Blitz.

5/3/2016 8:11:11 AM
Total Posts 3

Re: 1 key finesse

Wow, this is amazing : o