One of the most annoying parts of transition from Unity development to Unreal development is crashing. In Unity, if a project crashed, someone did something wrong, very wrong. Usually Unity will just throw exceptions and break out of the current function. Unreal on the other hand, seems to not believe in exceptions, and if one is thrown, will straight up crash to desktop. Unreal will even go as far as to not allow try catch statements in C++ code and will not let the code compile. I can see both the pros and cons of the Unreal approach to error handling compared to Unity’s handling.
On the pro side,this ensures that you know when something goes wrong in your game, you know something went wrong. This helps make sure that when your game is packaged into an executable, that it should not ever crash. I know other developers who when they see the red error text in Unity, they just not pay attention to it and just accept it happens. If it doesn’t break the game, then it never gets fixed. When Unreal forces you to crash to desktop, it makes sure that you know that the error is not good. This might be a good thing to experience in school now since in the game development world there are no exceptions, so making sure to not create any now is a good thing.
However, the downsides to crashing whenever an error is thrown is the frustration factor. When the process of getting back to the point you were at includes having to reopen UE4, hope you saved before you pressed play, and then you can start making changes again. When this happens multiples times in a night, it becomes demoralizing. Spending a few minutes getting back to the spot you just were at and then it crashes within seconds. Thankfully, Unreal provides a stack dump of when it crashed to help you know exactly where things went wrong. However, sometimes it provides no help, as in the feature image of this article. When this happens, you just have to start commenting out recently written code. Which can be a fun process in itself.
Over the past couple of years, there has been a surge in popularity of the Twitch streaming platform and due to this a few interesting phenomenon has happened. One of the largest and most well known ones was “Twitch Plays Pokemon”. The objective of Twitch Plays Pokemon was simple, beat one of the first Pokemon games via sending input commands through Twitch chat. It seems like a simple task, however, having thousands of people control a single character in a game turns into utter madness very quickly. It was a massive success and has even spawned it’s own category on Twitch. The most popular way to add Twitch Plays functionality to a game usually relied on a very roundabout way to grab input and manipulate the game. An external script to grab IRC input from Twitch and then send those inputs to the game. What I wanted to accomplish with this library is allow the developer to integrate the ability for their game to be played through Twitch without being too intrusive on the development of the game.
One of the first tasks that I had to implement for the library would be the ability to actually connect to Twitch Chat and read the IRC channel. Twitch chat is operated off of basic IRC principles except it uses OAuth authentication. Using a simple Unity Twitch IRC chat reader on GitHub I set up the library to open the IRC stream and read from it. The Library then will run two loops on different threads, reading input and sending pings back to Twitch’s server.The real part that allows for easy integration is the ability to bind commands to functions easily. A developer just needs to call the function that takes in a string and a raw function and will add it to a Dictionary. The thread that parses message input will now keep track of how many times that string command was said. All that needs to be done now is to ask the library for the most said command, tell the library to run that command, and then clear the previously said messages.
Things that I want to add in the future is an event system to the library. Currently, there is no way to know when you are connected/disconnected, when a message arrives or what it’s contents is, and when other seemingly nice to know things that happen. Allowing a developer to subscribe to message received events would allow for more diverse gameplay and could allow for using a different system than the default and only implemented, “Most Common is the most said” way of doing commands.
What I learned from this is how to interact with IRC Chat on a web socket, and how to think about library development from a perspective of, “The DLL is everything I can use, I can’t just go and make an edit to it.”
One of the reasons why I wanted to join Legitimate Studios on their quest to bring Dan Shredder to completion was that it spoke to me on a deep level. I was the one percent that played Guitar Hero excessively in middle school, and was enthralled by rhythm games. I was also that heavy metal head kid during that time, wearing an Iron Maiden shirt and listening to Megadeath while riding the bus to school. Dan Shredder seems that way to me. When I envision Dan Shredder rocking his way through hell, I imagine a very burly dude who has a deep passion for metal. In the times I can contribute to the world building and creative aspects of the game, I always mention how previous games such as Brütal Legend and earlier Guitar Hero games took themselves. They seemed more of a tribute to metal than mocking it. We should follow by example of these games. One of the largest modern perpetrators of this idea is Jack Black. Voice of Eddie Riggs, the protagonist of Brutal Legend, and front man to the band Tenacious D. Tenacious D in the Pick of Destiny was a movie released a decade ago that seems to match the type of metal that I imagine this game to be. One of my goals for this team is to help this game really show my passion of metal to the rest of the team and help build a love product of Heavy Metal that will rock the world.
One of the most cool things about rhythm games like Guitar Hero was that you have this feeling that the notes you are playing actually make sense to play and feel nice to perform flawlessly. This blog post is mostly going to be about Guitar Hero note theory.
There are a set of patterns in Guitar Hero that are common across many songs. One of the most common ones are scales that go higher or lower.
The most extreme case of this in Guitar Hero 3 is the Mosh 1 section in Slayer’s Raining Blood. This entire section is just the following pattern in the image repeating with occasional breaks for a chord. It is often considered the hardest part of the song, however, it is in essence the same pattern. When played correctly, one rarely has to strum, it evokes a feeling of zen where all there is is you, and the feeling of a cascading waterfall, of blood. This pattern does not have to be used with just four notes descending, it has been used in many other places, including patterns of 3 notes ascending as in the Guitar Break in Jordan, by Buckethead or as a repeated three note triplet, such as in Solo A in Metallica’s One.
Another popular technique that are in a variety of Guitar Hero Songs are trills. They are two notes repeated over an amount of time. They can be at a decent pace, as in Tonight I’m Gonna Rock You by Spinal Tap in Guitar Hero 2, or an insane blistering pace as in Surfing With the Alien by Joe Satriani. There are various techniques to play these notes, the version I use is to root my index finger on the lower note and use my middle finger or ring finger to do the hammer-ons. For faster ones, most higher level players actually take their strumming hand and use it to help fret.
This may seem like a weird blog post, but it has a purpose. One of the main goals of Guitar Hero is to make the player feel like they are playing the actual instrument, and not just some plastic toy. Having to use multiple hands in order to play notes, especially trills has been common in guitar playing since Eddie Van Halen’s hayday. Using all four fingers to play a riff is how Raining Blood is actually played.
One of the first rules about Game Development is that one needs to learn how to adapt to foreign environments quickly or else one will fall behind. Moving to a different team is can not that difficult, a new code base, maybe some high concepts about what the game’s architecture is. However, the new team that I moved to would be the most difficult engine changes I have faced before.