MC2 – Updates – May 19th to May 25th

Bit of a quiet update this time around.

1. The Online Multiplayer is, unsurprisingly, proving to be somewhat difficult to tame. Collisions are our main challenge at the moment. We’re working on improving their responsiveness. On the other hand, movement and events are all pretty accurate both on the client that called them and the clients receiving them.

2. Soon we are likely going to get a PR dedicated person. Hopefully he’ll be able to start by the beginning of next week.

3. The replay system is proceeding, with a pretty decent update this time. I’ve added camera control, timeline control, speed control and even the ability to target and follow a certain player. I’m focusing on hammering out all of the bugs for now, which is no small feat. Once that’s done, I will likely be moving onto other things, despite the replay system being nowhere near as polished as I would like it to be. While I knew this feature would be difficult to make (and in fact it only exists for Brawl mode at this time), I hadn’t quite anticipated how difficult and time consuming it would be…

Anyway, now you can achieve things like these when you want to watch things unfold. I think this is pretty cool.

4. A big problem emerged alongside the introduction of online. All of the game’s balancing has gone by the wayside, substantially. I was able to fix it, somewhat, but I do think it will need a lot more tweaking. I’ll likely write an article about this at some point in the future, as these insights may help other users in future.

5. I’ve rebuilt some of the models of the cores to reduce the impact their rendering had on performance. They are now less random in how they fall apart, which is a bit of a letdown, but a LOT cheaper to render. It’s all a matter of trade off, I guess. Here’s an example:

While before all of the independent pieces of the sphere on the right broke apart randomly and irregularly in approximately 40+ independent parts, now the entire sphere only needs the 6 parts on the left to render it all. And because these parts are regularly shaped, I can duplicate and rotate them as much as I need to to complete the sphere.

Thanks for reading.

– Mike

MC2 – Updates – May 12th to May 18th

Important update, with lots of stuff!

1. The Online Multiplayer aspect of the game is proceeding strong, with players being able to join and move correctly. The next step is accounting for the collisions correctly, which is not so simple, because MC2 uses a custom rebounding formula that depends on gameplay more than it does on Unity physics, at least when it comes to collisions. Also, jumping and charging need to be correctly synchronised among clients. We’re hoping we are going to have this complete by next week.

2. Added a new UI flow for the Online Multiplayer. Here’s two screenshots:

Oh yes, you will be able to play with local friends online as well. Not the full lobby, obviously, for that you should use Offline. 😀 But you will be able to look for 4 player matches with up to 2 guest profiles.

3. Added a countdown flow between rounds for Brawl mode. It’s going to be there both for Online and Offline. Players will be able to skip by pressing A. When all players skip, the countdown is interrupted immediately:

4. Negotiations ongoing with a contractor to take on marketing and PR. Meeting scheduled for next Thursday to possibly put a signature on that contract. I have high hopes.

5. The replay system is also proceeding, though not as fast as I would like. I’ve decided that all replays will be stored in the form of highlights (at least when it comes to Brawl mode), and players will be able to watch these highlights at the end of the full match, and save some or all of them, as desired. Here’s how the UI looks like at this time:

Also, some replay controls have been implemented, like starting / stopping playback, restarting from the beginning, slowing down the timeScale and speeding it up. Lastly, I’m happy to say I’ve managed to include audio playback as well, meaning that reproducing a collision at 20% speed produces a very low, deep collisions sound. Very satisfying, at least in my opinion.

6. For the curious out there, yes, I planted potatoes, carrots, aubergines (or eggplants for the North American crowd), peppers, tomatoes, cherry tomatoes… that’s it I think… 😀

‘Til next time!

– Mike

MC2 – Updates – May 5th to May 11th

Epic update this time around!

1. We finally started working on the Online Multiplayer aspect of the game. And it very much is a “we“, as opposed to an “I“. I have offered a contract to a young man from Calgary and he accepted to work on the programming of the Online aspect of the game. Seems like a fairly solid investment so far. The contract is 1 month long, so we’ll see how that goes.

2. I’ve been contacting musicians all over the world to make the soundtrack for MC2. It’s been hit and miss, but I have found a few gems, which is encouraging. The goal, briefly, is to license younger, not as established talent, so I get to use awesome music, and the musicians get exposure, as well as money for their content (though obviously being less know I don’t have to pay them an eye and a leg). I’m looking for music that sounds “adrenaline pumping”, and ideally I would like faster paced dubsteppy stuff, somewhat like this (just an example):

At any rate, one of the people I contacted has much more experience than just music, and who knows, it may be possible I may be contracting him for something else in future? Will keep you guys up to date.

3. I’ve been working on the replay system. I originally wanted to have auto-replays after significant rounds. For several reasons I decided against that. Now I’m building a post-match highlight system, where all rounds can be reviewed (for now I’m only focused on Brawl mode). It’s coming along, but there still is work that needs doing in this area as well. It’s looking pretty good so far though.

4. Another interesting thing, especially for devs out there, is how much work I had to do with my lawyer due to the contracts I needed to assemble. Very interesting learning experience of back and forths between a man who uses the word “witnesseth” like it’s normal parlance, versus another man who uses the word “IEnumerator” as a substitute for a drawn out “hello”. Would be hysterical if it weren’t this important to get these things right…

5. This next week I need to plant potatoes peeps (LOL), so updates might be quite a bit less exciting… Sorry in advance!

Thanks for reading!

– Mike

MC2 – Updates – April 28th to May 4th

What a week! I’ve been quite busy and I have almost nothing to show for it, hurray:

1. Started working on replays. A lot harder than I thought… I originally thought I’d use all of the same infrastructure and just record the input from the players. That failed, the results were unpredictable and often way off from the original situation. I then started collecting data about position, rotation, velocity etc from the players every small amount of time. That quickly revealed that the collision system would not respond correctly. I was close to giving up trying this myself and I decided to buy EZ Replay Manager, which is an asset from the asset store. That went poorly as well. The asset doesn’t store nearly as much info as I need it to. So I’m going to request a refund and continue working on my replay, especially because I think I finally found a decent way to do it, which involves collecting player data often and synchronously. Seems decent for now, but I still have loads to do. This here is how far I got. You can see that damage doesn’t work in replays, and I also want to adapt audio for replays too, which is going to be an… interesting task. 🙂

2. Got in touch with another programmer. I most likely will be offering him a contract to start building the online gameplay infrastructure. This is exciting, because once the game has online support, I’m thinking of releasing in Early Access on Steam… We’ll see. But negotiating the terms of the contract with my lawyer and this programmer has taken a substantial amount of my time this week.

3. I posted an ad on Facebook to get young musicians to license music for me to use in MC2. Went very well so far, though nothing concrete yet. Again, lots of negotiating and explaining via email and messages. I expect a generic contract for this stuff to be ready by Wednesday next week. In the meantime, if you happen to know any upbeat EDM musicians with a dubsteppy-bend, feel free to give them my contact info. I’m still looking for musical talent.

4. I’m beginning the design process for the MC2 logo… Stay tuned!

5. On an unrelated note, when you live in the countryside you grow stuff… and the season is here. I need to tend to my plants a little bit as well. Relaxing, but not helpful when you’re trying to build a game!

6. On another unrelated note, I’m getting more business for my tuition services locally, which also steals some of my time away!

Hopefully, by next week I will have some updates both on replays and on online! Work work work.

– Mike

MC2 – Updates – April 21st to April 27th

Apologies for being a few days late on the update. Calgary Expo required a lot of preparation and I couldn’t get around to this earlier. Here’s what I did this week:

1. Completed “Disc War” mode. I didn’t think it was going to be any good, but then I tried it with my kids and oh boy… I have trouble explaining the mode, but it’s exciting. People at the Calgary Expo seemed to also have fun playing it. It’s complete chaos!

2. Started working on a major feature… Replays. This one will take some time, because it’s hard to do and the game has a lot of moving parts I need to save often to recreate a convincing replay. I made good progress, but I have no idea if it even works for now. Will keep working on this.

3. I got in touch with another seasoned programmer about the Online Multiplayer aspect of MC2. I have a meeting with him on Monday 2018-04-30 to discuss the situation and whether we can collaborate. Looking forward to it.

Slim update, I know… It’s been a crazy week!!!

– Mike

MC2 – Updates – April 14th to April 20th

Apologies for being one day late on the update. Here’s what I did this week:

1. Fixed a few cosmetic bugs with the soccer podium.

2. Disabled the Pause functionality during the start round countdown (which was really annoying before).

3. Kept working on the new mode, currently called “Disc War” (working title). Here’s how it looks like at the moment. As you can see none of the panels are working, the timer isn’t working, but the damage system and the disc are working. The disc physics are… peculiar. I cannot use the in build Unity physics system, so I have to build my own. To be frank, this is a little bit scary, because I’m not confident this mode is very good at all. I’ll make a separate article later discussing the design in specific.

4. Started preparing for the Calgary Comic Con showing. Yes, in Principle WILL be participating with MC2. Hope to see many people there! I don’t know what day (out of three, Friday 27th, Saturday 28th and Sunday 29th) we will be demoing, but I hope it’s going to be Saturday. I’ll keep everyone informed on Twitter and Facebook.

Not a great week, to be honest, in terms of work accomplished. Need to do better next week!

Cheers.

– Mike

MC2 – The Story – Should I continue developing? Take 2

On Saturday, April 13th a trade show was held in my town of residence, the little, but lovely Raymond, in Southern Alberta, Canada. We had a table there, and I went with my two daughters. I expected a completely different crowd from the Calgary event this time, with a much larger contingent of kids. Here are a few pics of a few of the participants playing.

I should have taken more photos, really, but I didn’t want to catch the kids’ faces without the parents’ consent, and I was often busy selling my business to parents and grandparents, or observing gameplay for playtest purposes. I can assure you we had moments in which a natural audience who was just watching the matches unfold formed, which was encouraging. At the end of the day my voice was partially gone! 🙂

Anyway, back on track. During the event, my goals were:
1. Evaluating MC2‘s attractiveness with kids.
2. Convincing kids, and by extension their parents, that they want to learn how to make games, so that I could tutor them.

GOAL 1

I setup an easel with a red half on the left and a green half on the right. The left was the NAY voting area, the right was for YAYs. I had already done this in Calgary before with a different audience, but this time I made a crucial change. I decided to draw a bunch of doodles myself in BOTH categories. My hope was to reduce the pressure of being the first person to say “no, this game is bad”. Anyway, without further ado, here’s how the “survey” turned out:

You will notice that I took the liberty of interpreting the 3 “yes” votes on the left as positives, as they were in stark contrast with the question above (I only now realised that the top reads “Should we continue”, which may be interpreted as a question in and of itself).

I decided to count the smiley face on the left as a NAY as well, but given the expression of that smiley I suspect that may be a positive vote too.

In the middle there is a smiley that is half on the left and half on the right. I decided to count one per category. At the end of the day, the kid that wrote that sign told me that the only thing he didn’t like was that it was difficult to tell where his sphere was when it was high in the air and its shadow wasn’t visible. I can see where he’s coming from, to some extent, but I’m not sure I want to do something about that at the moment in terms of programming. I also have a little trouble believing his judgment as being impartial, because he kept coming for more and more, and queuing up to play. He was trying to win the contest… badly. What contest you say? Oh my what a segue!

GOAL 2

I decided to set up the following contest: any kid who, in a 4 player Brawl match would be able to beat my 8 year old daughter would win 5 hours of free game dev tuition from me. There were 5 available slots of 5 hours each. All of the winners would get approximately half of the in Principle Learning Absolute Beginner course for free.

This was very popular with the kids. But I had thought this out quite thoroughly. I knew my daughter was good, as she is my chief playtester, but I also expected her to have some trouble when 3 people would gang up on her. I decided not to put any limitations on how many times people could try and beat her, meaning they could get substantial practice in, before challenging her. On my end, this would have been the perfect opportunity to evaluate if MC2 is in fact easy to pick up, and at least somewhat harder to master. I can say with confidence that, at least when it comes to kids, this is definitely the case. Of the 50+ kids who tried to beat my daughter, repeatedly, only 2 managed to do it, and only after they practised for quite a while. Also, bear in mind that “beating my daughter” meant being 1st out of 4 in any match where my daughter was also playing. So with the fact so few managed and that my daughter is still a child, with all of the cognitive and self control limitations this entails, really gives me confidence that I’m achieving the design I want to have.

On another note, many children would keep coming so my booth turned into some kind of glorified babysitting station, where parents would come look for their kids if they’d lost track of them, which was funny, but also gave me several opportunities to chat with the parents and hopefully convince them that they wanted their kids to learn how to make software, with my help, of course.

It looks like my efforts worked, more or less, because I’ve been contacted by five families recently with an interest in taking the Absolute Beginner course. Hopefully there will be more and hopefully these will result in more tuition work! We’ll see.

Anyway MC2 is very much universally liked by children, who were even asking me where they can buy it, at which point I explained what an alpha build is. The event was awesome, the kids were awesome, my kids were and are awesome. All is well!

Here’s one more pic, with a great kid who jumped from his seat every time something emotionally involving happened…

– Mike

MC2 – Updates – April 7th to April 13th

What I did this week:

1. Fixed various bugs with the end of round point tally in Brawl mode and added the leader crown. Not too sure about the emissive properties of the material, but that’s tweakable:

2. Added a LEADER callout at the beginning of each round. This is only in brawl for now, but I may add it to Soccer and Recycling at some point. The intent is to make it more attractive for competitors to gang up on those who are ahead, without giving these players what I perceive to be unfair disadvantages (see Towerfall’s reduction of arrows for leading players and addition of shields for trailing players):

3. Added a podium state to the match. I really like how Rocket League does its podium. So I did something quite similar. I included the ability to move in place and also included game mode relevant stats. Some of these stats are not tracked correctly yet, but it’s on the TODO list. I will be supporting Ribbons, which will further gamify things. This feature doesn’t work at all at the moment, but these will be tracking complex stats, and most likely relative to the other players as well (imagine if blue killed yellow many times more than the rest of the players, the blue player may get the “yellow death” ribbon, or something along these lines):

4. Changed the look of the Brawl arena slightly to make it sharper (left is old, right is new). Functionality remains the same:

5. Made important fixes to damage system and charge system. Also, rebalanced sphere attributes (for the balillionth time! :D) Won’t disclose details here.

6. Started working on a new mode! Codename… “disc“. What’s that red thing in the middle, I hear you ask? That’s the “disc”. What about the floor with tiles? That may play a part in the game mode… Wait and see!

7. Spent some money on a local online marketing consulting company. I will be collaborating with these people in the near future to try and increase online exposure for in Principle Inc and MC2.

8. Prepared for the 2018/04/14 Trade Show in a local town nearby. Will be promoting in Principle Games and in Principle Learning as well. Will report back on how it went in a separate post.

Pretty busy week, all things considered! Cheers.

– Mike

MC2 – The Story – Soccer with at least 3 balls

Early March 2018… It was time for me to create a new mode. Brawl is cool and all, but I wanted to try my hand at a proper sport. And since I’ve been playing Rocket League more than I should recently… might as well go with Soccer (or as it’s properly called, Football, but I don’t want to get into that argument now!)

1. ART

So I began by creating an arena. For those who have played Rocket League extensively, you will know that it feels like the goals have some kind of “attraction” force when the ball is right on the edge of going in. It may very well not be the case that this force exists, but at least it feels like it does. I decided that I would have the opposite instead, without cheating physics. So I created a small slope in front of each goal that would naturally push the ball away from the goal. Well, my initial implementation of this idea was really bad. The slope was quite steep, so it was really difficult to score, it turns out. After quite a bit of playtesting I opted to lower the slope substantially, so it now has a very small angle. Here is the most recent design of the Soccer arena:

And here’s how it looks like in game:

Quick note: the colours on the ground are spot lights i put in the four semi-cardinal points (NE, NW, SW, SE).

OK, so the lower slope created an interesting dynamic, where the ball can linger near the goal for quite a long time, which leads to emotional situations. It seems OK for now, but the mode needs a lot more testing to confirm this.

2. DESIGN

MC2 supports 2, 3, and 4 players. For 2 and 4 it would be easy. I would simply have 2 teams. For 4 players I decided that the warm colours (Red and Yellow) would be the “Hot Team”, whereas the cold colours (Green and Blue) would be the “Cool Team”. But 3 players was complex… So I decided to try a crazy thing. I’m going to make one of the players be the ball, for a period of time. This player’s goal is to avoid being scored in either goal.

Quite a bit of testing went into the 3 player version of Soccer with my own kids. I’m not going to break the lid wide open on all of the design quirks for now, so you guys will have to try this mode yourselves!

Another thing that’s very important to me in design is the “quirk“. In simple terms, what does a game of mine do that others don’t? Well, it’s possible for players to throw themselves into either goal, just as if they were a ball too. However, I’ve made this relatively easy and cheap thing to do somewhat unrewarding. Scoring oneself into a goal is worth 1 point, and leads to a 5 second timeout, whereas scoring the ball is worth 3 points, and leads to a 2 second window where all players can throw themselves into either goal to score extra points. I’m curious to see this playtested more in future to see how people like this mechanic.

Here “ENCORE! +4” indicates that Yellow scored the ball for 3 point, plus himself (+1 point), for a total of 4.

3. CODE

There would be a lot to say here. I expected this mode to largely use the same concepts as Brawl, and to some extent this is true, however, all sorts of extra complications appeared. From the issue of the 3 player-ball hybrid, to the timer, to overtime as a concept, to displaying the scores and the time, to figuring out which goal the ball was hit into, or the player for that matter. I’m not going to go into details, because it would be information overload, however, what I will say is that this mode forced me to essentially rewrite my GameManager singleton. This now has a massive switch(gameType){} in it that allows me to manage how each mode behaves independently.

In short, making Soccer was a lot more work than I had originally anticipated, and it was a bit of a nightmare to QA as well, considering all of the possibilities and combinations! Hopefully it’s going to be fun though.

– Mike

MC2 – Technical – Now we see me… Before we couldn’t

With the damage system in place, one thing that became apparent was that the spheres players controlled would become difficult to see over time.

1. Starting situation of a match:

2. Yellow takes some damage, it becomes harder to see:

3. Yellow is completely destroyed, it’s now technically almost invisible:

4. And even worse, its shadow has disappeared, so the yellow player cannot even figure out where the sphere will land!

OK, I had to fix this. Most of the shaders here are taking advantage of PBR (Physically Based Rendering), so I have all of the pretty lights, shadows and the Z buffer all nicely managed by the Unity Standard Shader. It would be a problem if I added some other material to the sphere that transparent yet fully visible. Don’t get me wrong, it’s possible, but I didn’t necessarily want to invest too much time into this. So I came up with a cheap solution, both in terms of effort invested and performance. Before I reveal what it is, here’s how the solution looks like…

1. This is when the spheres have taken no damage:

2. This is how the shadows look like when the spheres are intact:

3. This is how the spheres look like when they are damaged:

4. And they are visible when they are completely destroyed! And they have a handy shadow too:

How do you think I accomplished this? Take a moment to develop a theory BEFORE you read on. Feel free to let me know what you think I did in the comments, I’m curious! 😀

So here how I did this:

That’s right, two 2D planes, or, more precisely, two quads!

1. The first quad has a transparent PBR material on it with a circle-like texture on it. The important thing about it is that it must be constantly looking at the camera, so it appears to the players to be correctly rotated all the time. It is also important that this quad cast no shadows. It doesn’t need to receive them either.

2. The second quad is the horizontal one. This also needs to maintain a rotation constantly. It needs to always point up. It has the same material as the other quad, but its render settings are set to Shadows only. So it’s invisible to the players, but it always casts that round shadow.

Of course this is possible because MC2 has spheres as characters and a perfectly vertically oriented directional light for gameplay reasons (the shadow is exactly under the player), but this was a pretty neat trick and I’m generally happy with the result, as none of the playtesters were able to spot the tickery.

And here is ALL of the code that makes this trickery possible:

Just two lines:

coreQuadRenderer.transform.LookAt(
  GameManager.singleton.camManager.transform
);
coreShadowQuadRenderer.transform.rotation =
  Quaternion.LookRotation(Vector3.up);
);

So to recap:
4 polygons (2 triangles)
1 material (1 extra draw call)
2 lines of code in Update()

I think this was a cheap and fun solution to make! And it seems to work. Hope this comes handy for someone else in future.

– Mike