JSTris

Started by jezevec10, December 06, 2014, 03:21:55 PM

Previous topic - Next topic

jezevec10

#60
Updated:
  • Fixed the low bot efficiency problem.
    Since the update about 3 weeks ago, the bots weren't receiving the correct queue information. This bug appeared when the bots got the same randomizer as players. I initially though it is caused by the combo table fix, but in reality the bot communication protocol wasn't implemented according to specifications. Also after discussion with Real we discovered that Real_Block was not sending correct B2B bonuses (had lower attack) - this has been also corrected.
  • MisaMino was not MisaMino!
    About a year ago when I was adding MisaMino, I used dllai directory from the MisaMino repository. It turns out that the bot contained in this directory is not MisaMino, but so called Baka bot (Japanese word for fool,idiot) which is there probably just to demonstrate capability of the MisaMino game to load DLL bots. The MisaMino everyone knows is actually contained in the graphical game in the tetris_ai directory.
    So this bot has been renamed to Fool bot and it can be activated using /changeBot fool.
  • Added the real MisaMino
    I took some time to retrieve the genuine MisaMino from the tetris_ai game so it could be used like other bots. I made the command line version of MisaMino (and Baka bot) available here:
    https://github.com/jezevec10/MisaMinoBot
    Now jstris has the genuine MisaMino (/changeBot misamino). It is possible to change level with /bot level 10 and style /bot style 5 (explaining table of styles in the link above). These commands work only for MisaMino. Now this is the only bot in jstris taking incoming attack into consideration when deciding its moves.
  • Finesse and KPT in replayer
    At the bottom of the replay page there is a More stats link, which reveals Finesse and KPP as an additional stats under the game field. (Or visit the replayer with ?moreStats=1 parameter.)
  • Fixed some bugs
    Like the issue reported by mahnameseddoi above (with ?forceSkin=0 on invisible replays), some invalid links to replays, inaccurate red bar in live replays, replay time skip hold disappearing and others..

Antifate

Jez you're a legend. You're carrying the tetris community rn.

Is there anyway people can support you?

mahnameseddoi

#62
Very nice but seeing the invisible replay still seems to be broken. If you need a replay to test with, here you go: https://jstris.jezevec10.com/replay/60686

jezevec10

#63
Quote from: Antifate
Jez you're a legend. You're carrying the tetris community rn.

Is there anyway people can support you?
Under the chat box in the game there is a donate button, which helps me cover the server costs. List of the project supporters is in the About section (link next to the left).

Quote from: mahnameseddoi
Very nice but seeing the invisible replay still seems to be broken.

That's strange, when I visit this invisible replay with the param it shows with visible blocks:
jstris.jezevec10.com/replay/59686?forceSkin=1
The update has been done recently, maybe your browser has cached the old scripts. Have you tried Ctrl+F5 to force refresh?

Corrosive

#64
Add more main rooms for when the traffic increases on this game
"私は高速ブロックとセクシーな女性が好き"
"Put some stank on those blocks."

mahnameseddoi

My sincere apologies jez. You are correct. I didn't clear my cache. After I cleared my cache, it worked. Thank you

Corrosive

#66
Keep up the good work
"私は高速ブロックとセクシーな女性が好き"
"Put some stank on those blocks."

Swarley

#67
I love this game and the work you've put into it. To me, it's the best thing to have happened to Tetris since Belzebub. However, when it comes to 1v1, I find it less than ideal for the same reason I don't like to 1v1 in Tetrisfriends. What I really liked about TOJ, that Nullpomino, Cultris and Misamino also does. Is that when you're playing 1v1, the two playing fields are side by side, and equal in size, causing the 1v1 to feel personal and much more exciting. In Jstris and Tetrisfriends, your opponent's screen is unnecessarily small and tucked away. The biggest issue I have with this is that I find myself having to sneak glances during soft drops, or slow down to pay attention to my opponents field, as opposed to having them side by side so I could keep up with both at the same time.

I also wish the interface was more organized. It appears quite cluttered with some buttons at the top, some at the bottom of your screen(that if clicked open up more buttons above the chat), some to the right of your screen, and some at the bottom right.  
All these buttons everywhere, yet key functions like naming yourself, spectating, and adjusting the bot all requires you to type commands in the chat.
There's a button on the blue line at the top that says Play, that then present you with your options when you click it. I think that's a great and practical way to do it, but it eliminates the need for those same buttons to be in the middle of the screen. Next to that button there's two buttons that I assumed were even more ways to perform the same functions, but it turns out they were leaderboards. Why not have a Leaderboard button with a little list when clicked, like you did with the aforementioned Play button?

Keep up the great work!

All in all I love the game, and the things that I have commented on are far from essential.

Corrosive

#68
It would be badass if you could somehow let us be able to create our own arrangement of blocks/artwork that appears when we die. This was a feature on Blocktrix/Tetrifast. I imagine this would be a pain in the ass for you to program into the game but its little things like this that would make the game dope and encourage more people to register an account rather than playing as guests.

[!--ImageUrlBegin--][a href=\\\"http://i.imgur.com/VTKQxIW.png\\\" target=\\\"_new\\\"][!--ImageUrlEBegin--][img width=\\\"500\\\" class=\\\"attach\\\" src=\\\"http://i.imgur.com/VTKQxIW.png\\\" border=\\\'0\\\' alt=\\\"IPB Image\\\" /][!--ImageUrlEnd--][/a][!--ImageUrlEEnd--]


[!--ImageUrlBegin--][a href=\\\"http://i.imgur.com/zL2QnFG.png\\\" target=\\\"_new\\\"][!--ImageUrlEBegin--][img width=\\\"500\\\" class=\\\"attach\\\" src=\\\"http://i.imgur.com/zL2QnFG.png\\\" border=\\\'0\\\' alt=\\\"IPB Image\\\" /][!--ImageUrlEnd--][/a][!--ImageUrlEEnd--]
"私は高速ブロックとセクシーな女性が好き"
"Put some stank on those blocks."

VladtheImpala

Can we get the option to mute a user in chat? I wouldn't normally ask for this, but there's this one guy...

Blitz

Quote from: Corrosive
It would be badass if you could somehow let us be able to create our own arrangement of blocks/artwork that appears when we die.

I like that idea.

What if, in practice mode there was a button for "Save artwork" and that is how these game over artworks are created?
It would be more challenging than a "draw what you want" kind of thing but it would also be more rewarding when you're able to make something cool.
I also guess this approach would require less programming work than other alternatives because there is no need to create a new system for drawing art here.

jezevec10

Updated:
  • Multi-player game slots redesign
    Since the initial version, the game always showed 6 player fields in multiplayer. I completely recreated this so the game automatically re-scales the number of slots based on actual amount of players in the room.
    This way when playing 1v1 or when the room has only few players the fields are much bigger. This should create more exciting experience from 1v1's as mentioned by Swarley in the post above.
    This allows several improvements:
    • Rooms can have more than 7 players.
      At this moment only the Bot room will have the limit increased, so the effect on game performance can be tested.
    • Spectators in 7-player room will actually see 7 players (before 1 was always invisible).
    • Chat size takes place that is left after game slots are scaled
  • Option to expand the chat
    Sometimes the chat can get quite small, the button on the right side of the chat box will expand the chat to the full height which makes it easier to read in case there is a lot of messages.
  • Garbage distribution settings allowed in the Bot room
    Because the Bot room is the first to allow more than 7 players, it will be interesting to try the method where sent garbage is evenly distributed to everyone.
  • Garbage messiness settings accepting negative values
    Easiest way to explain this is to mention these 3 use cases:
    /set messiness 100 - garbage hole change rate to 100% (all incoming garbage converted to cheese)
    /set messiness 0 - incoming garbage granularity is unchanged (most common)
    /set messiness -100 - setting of -100% will convert all incoming garbage to one long hole
    The reason why I added this is when garbage distribution is set to divide, normally only a cheese is received. If messiness will be set to like -50%, the high amount of cheese will be converted to more easily cleanable garbage.
  • Option to select a randomizer when creating a new room
    Currently available are: 7-bag,14-bag,classic and OneBlock (yes, this one is very strange as it randomly picks one piece and then never gives anything else).
  • Option to set number of piece previews when creating a new room
  • About section moved from under the chat to the main menu
  • Fixed some targeting bugs
    These bugs lead to loss of outgoing lines in multiplayer rooms. Target wasn't switched immediately after player topped out or when someone joined during the game start such player was not playing but was targetted by other players.
  • Joining player name fix
    When a player loaded the game the chat always showed NoNamed joined the game. This was corrected to show the actual player name.
  • (advanced) Added multi-player fields buffer
    In case you experience a lag when playing multi-player games (especially with more players), you can try using this option. Chat command /xbuffer 5 will set the player fields to update in about every half second. Lowering the refresh rate of other player's fields can increase performance of your own game. Accepted values range from 0-6 where 0 turns the option off (which is default and it means players fields are updated at highest refresh rate possible - as soon they are available).

farter

Quote from: jezevec10
Updated:
  • Fixed the low bot efficiency problem.
    Since the update about 3 weeks ago, the bots weren't receiving the correct queue information. This bug appeared when the bots got the same randomizer as players. I initially though it is caused by the combo table fix, but in reality the bot communication protocol wasn't implemented according to specifications. Also after discussion with Real we discovered that Real_Block was not sending correct B2B bonuses (had lower attack) - this has been also corrected.
  • MisaMino was not MisaMino!
    About a year ago when I was adding MisaMino, I used dllai directory from the MisaMino repository. It turns out that the bot contained in this directory is not MisaMino, but so called Baka bot (Japanese word for fool,idiot) which is there probably just to demonstrate capability of the MisaMino game to load DLL bots. The MisaMino everyone knows is actually contained in the graphical game in the tetris_ai directory.
    So this bot has been renamed to Fool bot and it can be activated using /changeBot fool.
  • Added the real MisaMino
    I took some time to retrieve the genuine MisaMino from the tetris_ai game so it could be used like other bots. I made the command line version of MisaMino (and Baka bot) available here:
    https://github.com/jezevec10/MisaMinoBot
    Now jstris has the genuine MisaMino (/changeBot misamino). It is possible to change level with /bot level 10 and style /bot style 5 (explaining table of styles in the link above). These commands work only for MisaMino. Now this is the only bot in jstris taking incoming attack into consideration when deciding its moves.
  • Finesse and KPT in replayer
    At the bottom of the replay page there is a More stats link, which reveals Finesse and KPP as an additional stats under the game field. (Or visit the replayer with ?moreStats=1 parameter.)
  • Fixed some bugs
    Like the issue reported by mahnameseddoi above (with ?forceSkin=0 on invisible replays), some invalid links to replays, inaccurate red bar in live replays, replay time skip hold disappearing and others..

whoa i didn't even notice that before.. and as i remember the baka is not that weak but also not that strong as who i played against as misamino on jstris???

and btw now misamino is running 4w mode but looks very likely to die because of being not aware of incoming garbage.. it actually has simulation of unknown garbage, just need to discard the result and restart calling the routine with "incoming garbage" argument when the garbage buffer receives new garbage. is it currently implemented by jstris backend? or it may be other bug?
because if this is implemented correctly, misamino is still hard even at half of my speed...  

pwn_by_numbers

#73
jezevec, would it be possible for you to add some of the KOS modes? Realistically I just want a good all-spins mode, and I think KOS's exclusive+ mode is the best implementation of that out there. But it would also be super fun to have a real-time air mode or any of the other weirder modes from KOS.

edit:

Btw, any intentions of open sourcing this?

Oh and any intention of adding a piece count in the stats box (or at least in more stats?) It's frustrating trying to play for least blocks in cheese mode and not knowing how well you did without sifting through leaderboards.

Okey_Dokey

Quote from: jezevec10
  • Garbage messiness settings accepting negative values
Basically, most garbage systems can be implemented with 2 parameters:
1. hole change rate between 2 attacks (e.g. TF = 100%, TOP = 90%, PPT = 90%)
2. hole change rate within an attack (e.g. TF = 0%, TOP = 0%, PPT = ~27%).
In your current system, one of the 2 variables is always 0% or 100%. There are some games where both parameters are set to the same value (I think Tetris DS, Tetris Party Deluxe, Tetris Axis) - you can't simulate such garbage with the current system.

Quote from: jezevec10The reason why I added this is when garbage distribution is set to divide, normally only a cheese is received.
It should be harder to play sitting duck with "divide" (block all incoming attacks) but I see a problem here. Because the "divide" garbage is more messy with more people around, the first players will die relatively quickly and it becomes more likely that's usually the same people who top out first. On the other hand, if there are just 2 players left, garbage will become pretty clean and it can take some time until the winner is decided. Meanwhile, all the other players have to wait. So, I don't think the "divide" system is that great unless you dynamically adjust the messiness of the garbage depending on how many players are left in the game (e.g. 2 players -> messiness = 0, 3 players -> messiness = -20, 4+ players messiness = -50).

Quote from: jezevec10
  • Option to set number of piece previews when creating a new room
Thanks! Is there also a way to play the singleplayer modes with less previews? In a room with a low amount of previews, you could also move the previews down a little (closer to the bottom of the matrix), e.g. move hold and next piece queue down by 1 row if 2 previews and down by 2 rows if 1 preview.

Quote from: jezevec10
  • Option to select a randomizer when creating a new room
    Currently available are: 7-bag,14-bag,classic and OneBlock (yes, this one is very strange as it randomly picks one piece and then never gives anything else).
Thanks! I would like to see another randomizer with meanness somewhere between classic (memoryless) and 14-bag. In that randomizer, a piece shape could appear at any time but at the same time it should reduce chances of floods (receiving the same shape multiple times in a row or in a short time frame) and maybe also droughts (waiting very long for a certain shape). I think, the recursive weight system in Speedblock randomizer is an easy to implement but well working system that reduces floods. To reduce droughts one could count when the shapes appeared for the last time and add a temporary bonus to a shape that didn't appear for a long time (e.g. +1% if 15 to 19 drought, +2% if 20-24 drought, +4% if 25-29 drought, + 8% if 30+ drought). I once implemented such a randomizer ("Olaf" in my Nullpo League Mod, or see the function nextolaf() in this pastebin); it's unnecessarily complicated but delivers good results in my opinion.

Other room option I would like to see:
  • disable hold
  • disable back-to-back: for example implemented as a further number in the line sent table. No addional line sent for B2Bs if set to 0. +1 line sent if set to 1. Maybe Tetris Battle system if set to 2 (+1 sent for TSS &TSM, +2 for TSD & Tetris, +3 for TST)
  • change garbage blocking system. I think it should be 3 options here:
    • garbage canceling with garbage blocking (like in TF; clearing lines reduces the amount of incoming lines and garbage isn't inserted until the end of a combo)
    • garbage canceling without garbage blocking (like in TB or PPT, clearing lines reduces the amount of incoming lines; all remaining lines are inserted immediately)
    • no garbage canceling (clearing lines will sent lines over to the opponent even if there are incoming lines)
And I think with so many room options, it's good to define around 5 standard room types (one of them could behave like Tetris Friends, another like TOP). If the room creator chooses one of these standard types, all the other variables (including line sent and combo table) will be set to the corresponding values. In the list of rooms, the type of each room is also displayed. If the room creator didn't choose a standard room, then it will say either "custom" or "guideline" (if 7-bag, 3+ previews, hold enabled).