contact us

Use the form on the right to contact us.

You can edit the text in this area, and change where the contact form on the right submits to, by entering edit mode using the modes on the bottom right.

           

123 Street Avenue, City Town, 99999

(123) 555-6789

email@address.com

 

You can set your address, phone number, email and site description in the settings tab.
Link to read me page with more information.

Development

Day 4

JP McMullan

It’s always interesting to see how quickly you can produce something better after years of development.

At the moment I can generate a BrickBlock with any number of layer and any number of colours. They can rotate as expected, pivot around the planes natural center and snap back to shape after the player completes their move.

Quaternion.RotateTowards

The snapping was the task that I thought wouldn’t take long however seemed to be the main struggle to get perfect. I’ve been working these Quaternion rotations through Euler angles however they wouldn’t Lerp in the the shortest path.

As a hint to anybody wanting this outcome, Unity has a method that can take care of this for you:

public static Quaternion.RotateTowards (Quaternion from, Quaternion to, float maxDegreesDelta); Reference

Once this was implemented I was all set, it “does what I want“, which in this case was rotate the harness to a final rotation via the shortest path.

Day 2 - 3

JP McMullan

Generally speaking there is a lot of pieces being designed / refined at once. I’m keeping it together in my head as some elements are familiar yet some are totally new scenarios I haven’t implemented in past projects.

I reached the point where socket connections are running and now the basic game needs to exist before hooking up networked game logic.

bb2K19_001.gif

It’s always nice to remember how energising it is to see something visual or tangible after working on any amount of blueprint / validating systems work.

I find I’m happy once I turn off most of the natural lighting effects Unity provides, mainly because I’m not attempting to create a ‘real world’ aesthetic.

Toon / Cel shading is usually great however it creates a snapping color switch upon rotation whereas I prefer the softer transition seen here.

Day 1

JP McMullan

Progress

Made reasonable progress getting web sockets from Unity running to a basic scalable environment in AWS. I’m running a basic NodeJS server that will soon run Express for web services over HTTP/HTTPS and SocketIO allowing direct socket connection to each instance over TCP 80 for real-time gameplay. At this point given the likelihood of low player volumes I will most likely build a singular global services layer with 2 instances out of a US region, then deploy a copy in AU and EU for gameplay servers only. Building this as a dual purpose codebase keeps deployment simple.

My current plan is to configure a web socket connection for each multiplayer game the player is running on their device. That way anyone can play against anyone else in the world.

To maintain this model I’ll build a game server list of instance endpoints that modified based on server availability / load / etc.

Time asynchronous multiplayer

I can also see a benefit in letting players against each other in the same game, however at different times. Essentially Player A will complete their game, let’s say it took 48 seconds, then Player B can play against the same shuffled Brick Block. If they complete their Brick Block in less time, they win. The server will stream Player A’s moves as if Player A were playing at the same time.

This could effectively in time create infinite multiplayer options for players .

IMG_8675 2.JPG
IMG_9215 2.JPG

Rank

I like to use AWS DynamoDB (NoSQL Object DataBase) due to its operational simplicity. One draw back is the lack of built in sort / count methods available in the API. This is needed for leaderboards and matchmaking. I’ve chosen Elo for ranking players and plan to keep running totals on 1, 10, 100 and 1000 increments from 0 to 2000. This should let me confidently modify counts with UpdateItem and gather position totals with BatchGetItem, as shown in examples above.

An example of a ranked match outcome should look something like this:

Starting rank

Player B

Player A

Player A (1700)
1669
1717
Player B (1300)
1282
1330

Here Player A stands to improve their rank by +17 whereas Player B stands to improve by +30 in the event of a win respectively.