1.2.1 Released – Bugfixes and Highscores!

On Wednesday morning I woke up and checked the player count on Infinitris on my phone (It’s somewhat become a ritual recently). 20 players online! I jumped on my PC and joined in, only to discover what an absolute mess of a state the server was in. The server was crashing every 5-10 minutes. Switching rooms would cause the game client to go out of sync and all sorts of strange things to happen. Hardly anyone knew how to play, and the grid was so clogged with towers and bridges of cells that it was impossible to play properly even if you knew how.

This week I’ve been working hard to fix the worst of these issues, and released a number of patches (1.2.0a-1.2.0f). I’m glad to announce that the server is now stable and easily handling the current load.

Screenshot from 2017-06-18 23:40:28

To deal with the grid overpopulation issues I’ve introduced player caps for each room, and created some extra rooms for more variation. Currently there’s four rooms available:

  1. Trivium: A standard tetromino block set with a cap of 14 players. This is currently the main room.
  2. Labyrinth: A pentomino (5 cell) block set with a cap of 7 players. This one is pretty difficult even for registered players, but I think it has a lot of potential once I tweak it a bit and people learn more about the advanced features of Infinitris.
  3. Chronicle: Another tetromino block set, but limited to registered players only, minimising the number of players who join and don’t know what they’re doing.
  4. Elementary: A tromino (3 cell) block set. Now this one surprised me – It only contains two block types and should be ridiculously easy. But the new players are seeming to enjoy it, and actually clear some lines.

I took out Retribution (A room that inserts garbage rows for the first player who joins) – I want to make a properly polished game mode for this one.

Apart from bugfixes and some gameplay improvements, I also introduced persistent high scores – daily high scores and all-time high scores. There’s now a greater purpose than just holding the highest points in your current room, and it’s also helped increase the number of registered players.

scoreboard-121 daily-highscores-121

A big thanks to Mike from iogames.space who approved my submission on his site. As a new game it’s currently being featured on the front page, and for the last week players have been streaming in. Over 90% of my traffic is currently coming from there, so once Infinitris drops off the front page the current activity is inevitably going to decrease. I’m taking full advantage of the activity levels though to do some thorough playtesting and re-assess the priority of items in my giant TODO list.

Some stats from the last week:

  • 19,000 hits to infinitris.io.
  • 220GB data transferred.
  • 110 registered and activated free accounts.

So, what’s next?

Infinitris Premium still cannot be purchased, and my server hosting costs are starting to rack up ($10 a day). If 10% of the registered players purchase the game at the current rate of new registrations, I should be able to cover those costs. It’s far from a profit, but this is only the beginning, and I’ve got to start somewhere.

Other than that I’ll be continually making small gameplay improvements, such as tweaking the grid reset algorithm, making grid size changes less disruptive and extra help for new players.

Anyway, here’s the 1.2 -> 1.2.1 changelog.

New Features:

  • daily high scores are now saved for registered players. Once you make a mistake, your score will be saved.
  • Added daily scoreboard on the landing page.
  • Added all time high scores below the landing page.
  • Added new block collection: Trominoes (3 cell set)
  • Added new rooms: Chronicle (registered only), Elementary (Tromino set).

Bug Fixes / Improvements:

  • Added extra keyboard control options:
    • added control key as rotate counter clockwise.
    • added new control scheme: wsad + q/e keys. Debug key is now “o”.
    • added new control scheme: numpad keys: 8/5/4/6 + 7/9.
    • added more rotate keys: z/x.
  • improved mistake detection. All blocked cells are now highlighted. If an impossible gap exists before a block is placed (e.g. there’s enough room for one block but not enough for two), then those blocked cells will be filled without the player making a mistake.
  • Fixed joining other rooms and still receiving packets from previous room causing the client to crash.
  • Phase shifting now shifts to the closest free space below your block, rather than the closest space to the ground.
  • fixed chance of player blocks existing and being placed in midair straight after reset.
  • Fixed ability to enter a long message and cover the grid / screen with text.
  • fixed registered player count in statistics.
  • fixed chat icon showing when loading.
  • new loading font.
  • fixed huge amount of server logging (log files on server too large to navigate easily).
  • fixed crashes not being reported in server logs.
  • added room player caps.
  • removed gallery section.
  • Fixed server crash when user tries to login/register etc with username that has characters that need to be escaped.
  • Enabled long term database backups in Azure.

This week I achieved a new record for the maximum players concurrently playing Infinitris at one time: 24.

24% of the way to my goal.

Logo Dropshadow_sqrolznz

Infinitris 1.2 Released!

Phew. It’s been five months since the last release. Looking back at version 1.1, Infinitris has completely transformed.

Over the past week activity on Infinitris has skyrocketed. The first time I logged in and played with 5 random players, I was completely mind blown. To think that something I’d made is starting to be enjoyed by players all across the world… I feel like I’m finally beginning to make my mark.

2017_06_10

As I said in previous entry, I attribute the decrease in players due to the fact that it was possible for one player to completely ruin the game for everyone else, by spamming their blocks up to reset the grid. This is now fixed. What parts of the grid gets reset is determined by the state of the grid and the player who caused the reset. I’ve also improved AFK detection and added a controls overlay for new players. So let’s see how the next few weeks go!

A few days ago, Infinitris was posted on the news section of Phaser.io, the official website for the game engine Infinitris uses. The post was by the creator of Phaser, Richard Davey himself. That’s pretty inspiring.

Infinitris is also popping up on a bunch of .io game sites, and I’m hoping that this is only going to continue.

Screenshot from 2017-06-11 17:41:28

Anyway, here’s the changelog.

New Features:

  • Added mobile input. Controls: tap to rotate, swipe left/right/up to move. Swipe fast upward to drop block. Hold tap to phase shift.
  • Added support for multiple game rooms. Joining a room will add its ID to the address bar.
  • Added new mechanic: Steal another player’s cells by wrapping entirely around them.
  • Added user account system.
  • Added smooth camera.
  • Added smooth grid size interpolation.
  • Added block placement shadow.
  • Added achievements system. (Only a few achievements currently)
  • Added fullscreen button – works on PC and android.
  • Added ingame admin login to use admin commands (eg. /reset).
  • Added admin login command: /adminlog [password].
  • Added !spectate and !play commands.
  • Added AFK timer – player kicked to landing page after 60 seconds of inactivity.
  • Added disconnect timer – player kicked to landing page after 7 seconds without sending a keepalive packet. (EG. leaving the page but not disconnect from the web socket).
  • Added SSL for secure registration and login – (https://infinitris.io).
  • Added ability to join game room directly from URI (eg. https://infinitris.io?gameId=Trivium).
  • Added backend database and basic stats (number of registered / premium players, number of guests and registered players / users online, number of rooms).
  • Added about, news, trailer, gallery, scoreboard, chat, stats, and contact sections below the landing page.
  • Added camera shake on mistake.
  • Added quick start guide.

Theme Makeover:

  • New loading page.
  • New landing page with AI playing in the background.
  • New block colour palette.
  • Added block patterns.
  • Added mountains.
  • Added snow.
  • Added grid boundaries.
  • Added Infinitris favicon.
  • Added login, register, account, block pattern/colour menus.
  • New minimap.
  • New chat box.
  • Improved chat above player blocks.
  • New dynamic scoreboard.
  • New effects for clearing lines, making mistakes, stomping, cell stealing, grid reset, grid expansion.

Bug Fixes / Improvements:

  • Webpage no longer refreshes when failing to join a game.
  • Player’s blocks won’t be placed if the player hasn’t moved their block.
  • Better checks for disconnecting afk players.
  • When a player can’t spawn, instead of the entire grid being reset, what gets reset is based upon the state of the grid and the blocks of the player who caused the reset.
  • If a line is filled after the grid shrinks due to a player disconnect, the line is now removed and points distributed.
  • Added exit to lobby button to exit a game without having to refresh the page.
  • Browser back and forward buttons now allow you to exit and rejoin games based on browser history.
  • Replaced disconnect / failed to join room alert dialogs with less-envasive bootstrap dialog.
  • Fixed only being able to chat when you have a block.
  • Vertical wrap is only enabled if the screen height is smaller than the grid height.
  • Fixed player name location not always being positioned horizontally at the middle of their block.
  • Added azure logging so that crashes in production can be debugged.
  • Changed !reset command to /reset.
  • Added contact form.
  • Fixed possibility of block spawning wrapped around grid (looks terrible when grid is too small to wrap).
  • Fixed being able to join a server with the same name as someone joining at the same time.
  • Added serverside caching so that images aren’t re-downloaded each time Infinitris loads.
  • If a player makes a mistake, their cells are changed to “unknown” rather than being completely removed.
  • If a player causes the grid to reset, only that player’s score is reset rather than each players’.
  • Improved player score algorithm.
  • Added controls overlay for new players.

Armageddon

This weekend I presented infinitris.io at the Wellington Armageddon expo. It was an awesome chance to gain feedback and observe new players trying out Infinitris. Only a small percentage of the people who tried the game were really my “target market” – those who had enough interest and understanding to get past Tetris and try out some of the features Infinitris has to offer. But those 10% made everything worth it. We had a blast!

A special thanks to:

– Niamh for organising the Wellington Armageddon NZGDA booth
– CloudFire games for the extension cords
– Rob Hayes for the amazing poster and business card designs
– Jono – surface, router and networking advice
– Ricky – Ipad
– AL for the pre-expo test games

 

This slideshow requires JavaScript.

I realised how prevalent sore losers / attention seekers would attempt (and succeed) to ruin the game by playing blocks straight upward, causing multiple grid resets. I’m happy for people to troll eachother (My mechanics are certainly set up to allow it), but when one person is able to make everyone annoyed to the point they quit – that’s too far. I think this is the main reason why the activity on my game hit a wall and started dropping. I’ve received several ideas on how to fix this, and I’ll be implementing some of them as soon as I can.

– rolznz

Soldiering On

It’s been over two months since my last post. I thought I’d have Infinitris 1.2 out by now, and maybe it should have been. I’ve deliberately not made any updates to the official page since my last release, mainly because I’ve invested a lot of time (and a decent amount of money too) into this game now and I haven’t wanted to release anything half-baked, even if it does follow my original strategy of a minimum viable product.

Anyway, I’ve completely replaced Infinitris’ old look with Rob’s new design, from the ingame assets to the landing page and user interface. Registration and logging in are now possible from the landing page, and once logged in you can choose your block colour and pattern, and also unlock achievements. Player status (guest, logged in, premium) can now be distinguished by a players’ nickname above their block.

block-select

Infinitris is starting to feel a lot more polished and immersive. The shitty graphics are gone and the connecting of blocks to form patterns is pretty satisfying. The new scoreboard makes players want to reach the top (rather than just plain text statistics) and the ability to customise your appearance really gives players a sense of individuality.

ingame-1

There’s still a lot to be done, but I’ve decided it’s time to stop hiding and “kick it out” as my Russian friend likes to sometimes say.

I’ve signed up to showcase Infinitris at the Armageddon expo in my home city next month (June 3rd) as part of the NZGDA booth. This should be a good way to kick things off and gain some exposure, lots of playtesting, make a few contacts, etc.

This means I’ve got a bunch of things to do before then:

  • Add a “How to Play” guide that pops up for new players before they join a game. This is incredibly important because people find it hard to get past the basic mechanics of Tetris and realise that this might be something new. This isn’t Tetris! The aim of the guide is to explain the controls and mechanics in a quick, entertaining and easy-to-read way.
  • New UX – Apart from the camera shake when a player makes a mistake and the player drop effect, I need to redo everything else (clearing lines, phase shifting, grid reset, cell stealing, stomping, valid block placement, grid expansion).
  • Add a persistent scoreboard. I think this will help with player retention, especially while I’m trying to grow a player base.
  • Add a new cell stealing mechanic – wrapping another player’s cells with your own blocks will steal them. This came from playtesting the existing stomp mechanic – we discovered that adding more ways to sabotage and compete with other players is a great way to make the game more fun.
  • Add a basic lobby chat system. Players can chat with each other from the landing page and organise games.
  • Add the Paypal button to activate premium (It’s not an MVP until you can buy the game right?)

I doubt I’ll get all these done, but let’s see how far I can go. I now have a deadline, and I’ll be releasing Infinitris 1.2 before Armageddon no matter what state it’s in. Once 1.2 is released, I’ll go back to my original strategy of frequent updates on the release branch.

I’ve asked Rob to create a couple poster designs and a business card design so I have something to bring to the expo. I’m looking forward to seeing what he comes up with – I’m sure it’ll entice people to try out my game!

– Roland

Art Ahoy!

infinitris-assets-testing

Over the last few months I’ve been working closely with Rob Hayes on perfecting the Infinitris theme. It’s been a bumpy ride of daily emails with multiple revisions, conflicting opinions and compromises based on the resources I have available. I think he’s done an amazing job! Infinitris has truly transformed.

Here’s a few screenshots of our journey:

1-0-5p infinitris-initial-concept-2 infinitris-initial-concept-1 infinitris-initial-concept-3 infinitris-initial-concepts-2-paralax-effect-1 infinitris-initial-concepts-3-paralax-effect-5

infinitris-initial-concepts-3-paralax-effect-6 infinitris-initial-concepts-3-paralax-effect-6-without-gameplay infinitris-initial-concepts-3-paralax-effect-7-without-gameplay infinitris-initial-concepts-3-paralax-effect-7

infinitris-assets-testing infinitris-logo-icon-concept-1

main-menu-logo-with-text

Development-wise, I’ve been doing a lot of behind-the-scenes work:

  • SSL connection for infinitris.io
  • User registration, activation and login
  • Multiple room support
  • Mobile input
  • Paypal IPN listener for premium activation
  • Admin login
  • Spectator mode

Now that these are done, it’s time to get Rob’s assets ingame!

Infinitris 1.2 – Coming soon to a port near you.

– rolznz

1.1

These last two weeks have been pretty hectic for me. I actually haven’t written a single line of code on the game since Monday (5 days ago) but by no way does that mean I haven’t been working hard making my vision a reality. I’ve negotiated and signed an art contract, pushed out a release with a number of new mechanics and organised a playthrough event at work, this time managing to get 11 concurrent players ingame.

Here it is. Infinitris 1.1.

1.1_LARGE_when_wrap_kicks_in.gif

I’ve added two new core gameplay mechanics: block stomping and phase shifting. I’ve also  changed the mistake detection algorithm (see below) and added a minimap. There’s a bunch of other small improvements which you can read at http://infinitris.io/changelog. I also want to say thanks to my good friend AL who really helped me with testing and pushing the minimap idea through a day before my scheduled test game (which was pretty vital when the player count went up).

Below shows the change between the old and new mistake detection. Previously, when a player makes a mistake, cells will explode around their block. This fixed the issue where you could place blocks that would make it impossible to place any blocks in the gap the previous blocks created, but it was a hack required by my poor mistake detection algorithm and really didn’t work well. You can read more about this in my previous blog post. Now, it’s impossible to leave a gap that no block can fill. This means I don’t need to destroy any cells that exist on the grid. Only the player who made the mistake is affected.

old_mistake_detection.gif
OLD

new_mistake_detection_v2.gif
NEW

 

it’s still possible to place blocks in a way that leaves gaps that can be filled but are completely sealed off by other blocks. One of the two new mechanics fixes this in an awesome way. I call it phase shifting. The ability to teleport downwards through cells to fill a gap directly beneath your block. See below!

phase-shift.gif

However, my mistake algorithm combined with phase shifting is not 100% perfect. It depends on the block collection and there’s still a small chance of creating gaps that cannot be filled. I’ve come up with another idea which involves the server to very slowly but routinely fill empty cells from the bottom up. This isn’t in existence yet but I’ll be trialing it very soon.

Here’s my second core mechanic: Block stomping. This comes from the realisation that there really wasn’t a reliable way to sabotage other players. This certainly does it 😉

By dropping your block on another player, your block will stop and theirs will be forced down, without them being able to move or rotate. If they land in a way that causes an unfillable gap, they’ll be destroyed and their points will be reset.

block_stomp.gif

Although all these changes are a definite improvement, some of the players in the test game found it difficult to understand the mistake detection with all the other effects that were going on at the same time. This is something I’ll be working on for the next release. At the very least, I’m planning to add “how to” slides to the game so that players are given the option to read a quick tutorial before they jump straight in.

Now, back to business. I’ve signed a contract with Rob Hayes and have been preparing asset lists and design requirements, searching for inspiration on google images and creating gifs of existing mechanics. What I’m really trying to do is give Rob all he needs to do an awesome job.

This is the first time I’ve paid for any work to be done on anything I’ve developed. You could say I’m getting pretty serious about this 😉

11 / 100.

infinitris_wrap_boosting.gif

– rolznz

The Missing Piece

Today at lunch I unveiled Infinitris to several of my work mates.

At the office as devs we have relatively large screens, so it wasn’t until the 5th player joined that the horizontal wrap kicked in. But what an awesome moment it was :-).

As I develop, I run up to 3 instances of the game at once to “simulate” gameplay, but I can only control one player at once. I can work towards the vision that’s in my mind alone – on mechanics, features, and bug fixes, but I can’t get the true feel of the game. The balance, the social aspects of cooperating and competing with other players. It’s almost impossible to see what’s missing.

These playtests are proving over and over how important it was to develop a minimum viable product and continue based on the feedback and suggestions from real human players. New players have open minds. I’ve laid the foundation and shown them the jump from classic Tetris, a game that has barely changed in over 20 years, to something that has never been done before. Something with infinite possibilities. This change in outlook promotes the generation of new ideas, ideas that I can filter and fuse with the design that currently exists within me.

One idea which was brought up today was around collision. Something I was reluctant about, because although it adds new mechanics, it’s also restrictive. Collision is also limited as blocks only have truly free movement on the vertical axis.

the basic premise of multiple people on one board I think points to one obvious mechanic and that is interference

This was identified in the first test game. But it’s not easy finding a simple mechanic that fits with the existing game core and still improves the balance between cooperation and sabotage.

My team leader came up with an idea – What if you could drop on other players’ blocks while they are in midair? What if, by doing this, you could take some or even all of their points? I have a feeling a revised idea of this “block stomping” could be the missing piece to the game. I’ll be experimenting with it in the coming weeks.

Apart from some cool new ideas, our testing also uncovered some big issues – which is just as useful. Because a seemingly minor bug like the one I’m about to mention would probably kill any chance of massively multiplayer working as the game stands right now.

Something I identified in my first test game with two other players – a flaw with my mistake detection algorithm – became very visible today as a complete game wrecker when the player count went up. Currently, if a player makes a mistake by placing a block that causes an unfilled cell to be blocked (there is no path from the unfilled cell to the roof), their block (and the cells around it) will be destroyed and their score will be reset to zero.

The reason I had to delete the cells around the block of the player who made a mistake was a terrible hack to cover up a big problem: You can place blocks which do not block any paths from unfilled cells to the ceiling, but you can create gaps that are unfillable by any block in the room’s block collection. My current algorithm is way too simple to pick this up as being a “mistake”, something I sorely need to fix before the player count increases much futher. As is, the grid quickly turns into a minefield which is impossible to score lines without purposely killing your block in order to explode the cells around it and clear the unfillable gaps.

Fixing the above issue and trialing “block stomping” will be my main focus for version 1.0.1.

1-0-5p

95 to go.

– rolznz

Infinitris 1.0

Today, 07/01/2017 marks the launch of Infinitris 1.0. Starting off small, I’ve setup a few accounts and posted on HTML5Gaming.org showcasing the prototype of my new game.

I played with my friend Tabnir today and one random (who must have joined from my recent post on the HTML5 development forum).

The random player (named “dude”) stayed on for about 30 minutes, completely silent, just placing blocks. Right at the end before he left, he said “Thanks roland” and “bye”. I’m not sure why, but those three words inspired me just as much as how long we ended up playing (To be honest, I was expecting a few minutes).

Talking to Tabnir afterward about the feel of the gameplay, he made the following remark:

Right now i feel very conflicted as to whether I want to be cooperative or if I want to sabotage… maybe that is a merit in itself

This is exactly what I want to build upon.

In Tetris-like games, the player only has control over certain aspects such as moving and rotating your block, but the blocks given to you and their consistent movement downwards are out of your control. It’s like real life. Maybe that’s why these types of games have such a therapeutic and hypnotic affect.

Infinitris takes things further, adding something that is sorely missing – the ability to socialise, influence and be influenced by those around you.

This is so-far the maximum number of human players I’ve had concurrently ingame (3). My goal is 100. Let’s see what the next few months bring 🙂

Roland “rolznz”