Thursday, 19 March 2015

Ease of Unity

This is my first project at really using Unity, and in the game development community there is a saying that you don't need to know coding that well to make a game using it. It seems that is actually the case... to a certain extent.

It seems that although you COULD technically use only the built in libraries for Unity, and how it handles cameras, assets, and rendering; to make a game using 100% code, it is entirely possible to use just assets, and use the settings provided with each asset with a few scripts here and there to glue things together.

One plus side of Unity is that the community is really big, and if you need a certain asset, what you're looking for will probably be in the store. Even if you need a certain functionality with it, you could potentially find that also. Making changes in the game to be event driven is also taken care of nicely in the engine itself, and is able to be set through simple dropdown boxes when you add it to a certain scene. Even if you do need to write code for certain events, the libraries handle a large component of the groundwork already.

So for anyone with cool ideas for games, or is even an aspiring game developer. Unity is a great engine to experiment with, even if you're not from a coding background.

Wednesday, 18 March 2015

Unity 5 + Progress + Planning

Unity 5 was released recently, and so we decided to go ahead and move the project to that.
It seems to contain many updates to the high-end graphical and animation side of things, which this project may not touch, but there's not much reason to continue developing for an older version.

The conversion process was straightforward. All that was necessary was to open the project in the new editor, and the upgrade was automatic. It did take a surprisingly long time, and seemed to hang, but others have reported encountering this problem.

Anyways, I've been working on the rules side of the game. Essence of Glory is a table-top game for two players. It features dice, orders tokens, models, and a grid to play on. But there is also that portion of the game that exists only within the player's heads. They need to keep track of what turn it is, who has to play, and what they're doing at this juncture. And it is that non-physical side of the game that I have been tackling recently.

The game engine needs to know what turn it is, what phase it is, and what's happening, and it needs to present this information to the player in a convenient way. It also needs to account for the different ways of playing the game. Players may face off against the AI, or they may play with their friends over the internet, or around the table. I've been spending time thinking about how to handle all this, and started putting those ideas into action.

Since there aren't any illustrative screenshots to show off yet, maybe it might be fun to try to figure out my notes? Find them below the fold.

Tuesday, 17 March 2015

Dreaming Man Update 7

I've come up with a new flowchart and decided that I'll add as I write more. I've also come up with a bunch of key turning points where the player has options that affect the outcome of the story (standard VN dialogue options).

This is written pretty bare-bones for simplicity, as Matt and I will be the ones mainly using it. It's going to be added to as more is written and decided.

One of the options:

Protag Dialogue Choice
Asuka?
Good morning.
??? – Asuka… Who’s that? Were you dreaming about someone, or are you still asleep? You must mean your wife, Amelia. [put her name in bold]





How’s breakfast coming along?
....
Amelia – Almost done!
Amelia – Breakfast is almost done!

To do: Actually rite moar

Thursday, 12 March 2015

Dreaming Man Update 6

Not much to post about this week. I'm currently just in the process of writing dialogue.

I believe Matt is looking into the aforementioned functions from the last post.

Wednesday, 4 March 2015

Events in Unity

Events are a useful tool for communicating between game objects, especially when you don't know which objects will be communicating with each other.

Say we have a Button. When the user clicks on the button, we want another Thing to do task X. Maybe the code would look like this:

void OnClick(){
     Thing.doX();
}

All very well. But what if we decide that actually, there's going to be a whole bunch of different Things in this scene, and they should all do X? What if those Things need more information to do X? What if the set of Things that should perform the task X is constantly changing?

If any of that is true, that means we'll have to change our code for the Button in order to change what and how Things do X. And all the while the button hasn't changed. It's still there, doing its thing, getting clicked by the user. So why should we have to change the Button, if the responsibilities of other objects have changed?

The answer is that we don't, if we use Events.

Events are a really handy construct. They can be thought of as a one-to-many relationship, where one object publishes or broadcasts events and a set of others receive and act on them. Just like a radio broadcaster doesn't know how many people are tuned in at any given time, the Event broadcaster doesn't know what objects are subscribed or even if any of them are.

So our button code would be changed to look something like this:


//This defines a delegate which is a little like a function pointer.
//It defines the kind of function that is needed to handle the event.
//In this case, a void function that takes an object is needed
//to properly handle this event. 
public delegate void ClickEventHandler(Object sender);

//This goes inside the Button class, and defines a delegate member of the ClicEventHandler type for that button.
//This is the event that other classes will listen to.
public event ClickEventHandler clickEvent;

 void OnClick(){
     //Now, when the button is clicked, all of the delegates subscribed to the event will trigger
    clickEvent(this);
}

public class Thing{
    public void handleButtonClick(Object sender){
        doX();
    }
}


Now, we can change the behaviour of the Thing without changing the button at all.

In Essence of Glory, events are used to update parts of the game engine about changes in other parts of it. For example, when a ship is moved in the Model, an event is raised that is received by the View, which then updates where that ship is displayed on the screen. Events can also be used for special effects that trigger under certain conditions.

More information about Events in C# can be found here and in Unity here.

Monday, 2 March 2015

Dreaming Man Update 5

This week I wrote out outlines of what is happening in the first two dreams of the game, as well as some dialogue for the first dream.

I also came up with some concepts to shoot through Matt regarding the system of the game. I was thinking of an elementary inventory system, as well as some stuff regarding the implementation of the dialogue that I write up.

Inventory

The idea on the table is of a basic inventory system that modifies the chance of failure with options later in the game. This way this system would work is more similar to old RPGs or Point-and-Clicks, in that there are descriptions of each item (assuming no illustration), and they can only really be used situationally, either saving the player with an easy-out, or modifying percentage chances. This would just be a Boolean value associated with certain dialogues. E.g. Player can choose: Option 1, Option 2, and (if "Tent" is True) Option 3.

Dialogue 

Legend:
Thoughts
Either brackets, or italics (italics preferred)
Speaking
Person speaking’s name + colour
Narration
No name + plain uncoloured text
Sound Effects
Goes between asterisks *bang*

Assuming text is colour coded by character, in my opinion it would be nice to add a property to each ‘character’ which holds the colour of their text for purposes of easily distinguishable dialogue. And if this were the case, I feel it would be a nice touch to allow the player to pick the colour of the protagonist’s text, as well as his name.


Things to do: Dialogue for dream 1 and 2.

Thursday, 26 February 2015

Higher Elevation

---Foreword---
Blue House Games is heavily involved in the local gaming
community. More that just enjoying the participation, what we learn from our time with local digital and tabletop games clubs influences and inspires us. Due to this sentiment, we thought it would follow with the spirit of our blog that we shared the perspective of some of these organizations, and what we learned with them.


Who are we?
"We" are the Carleton Ravens, similar to another sports team, except we represent our school across North America competing in League of Legends. I'm Jungroan "Jezie" Lin. I used to play somewhat professionally, but have since allowed the game to take a backseat to my studies. This blog series does not serve the purpose about giving deep insight into the game itself, nor into the individuals on the team; much of that information is already easily accessible. Instead it will take one person's perspective on how a League of Legends team can hope to "elevate its game", from each stage of proficiency on to the next.

Preface
The team was built off of the "legacy" from the previous year; an early exit in the Collegiate Starleague (CSL) playoffs and not much promise as far as talent nor commitment goes. Going into the 2014-2015 year, I had taken a personal hiatus from the game after dedicated 30 hour weeks to it as a freshman in university and saw this as an opportunity to enjoy myself with the game some more alongside good company. After an incredibly poorly organized tryout process, our team was finally formed, mostly at the discretion of myself and my top lane player.

"Scraps"
That's what we were - not much different from grabbing a random collection of 5 players from the playground to form a team to compete in a fairly competitive collegiate league, most of the teams comprised of players with at the very least, familiarity with each other. We did hold the edge of having some professional experience, alongside a lot of untapped potential. That word "potential" is really a piece of garbage though. One of my basketball coaches in early high school preached to me "hard work beats talent when talent fails to work hard". I understood that we wouldn't necessarily have the level of hard work needed to be a top tier team, but hoped to circumvent this problem by employing my own macro mastery of the game alongside designating conservative roles for my teammates.

Acceleration
And, we elevated our game as a team as such. Players were taught a very elementary standard of macro play, directed to generally take the most conservative route as individuals and follow shot-calling down to the letter. In one of our earliest matches against York (IIRC), we employed a 4v1 top-lane strategy that I had learned from one of my scrimmages against team Dignitas way back when. We used a composition of Jinx, Warwick, Xin, and some other champs I can't quite remember with the purpose of destroying structures at a rapid rate. We were able to get to the inhibitor turret before 5 minutes had even passed on the clock. Using this global gold lead alongside funneled farm and kills to our ADC, we used this objective based composition to quickly end the game, moving together as one cohesive unit that honestly looked LCS ready. While matches to follow didn't always employ such a volatile strategy, our opponents (generally fully-diamond composed) struggled to keep pace with us once we transitioned into the midgame and were constantly lagging behind our rotations.

Stagnation
So imagine, you're a mid-tier team with a washed up pro player and some talent, barely getting a couple hours of practice on a good week. Naturally, you're going to hit a roadblock; ours happened to come by the name of McMaster. They had a talented midlaner and really no weak points across the board. While League of Legends may have started out being more comparable to basketball, it has slowly crept towards becoming more like hockey. What I mean by this is one player has a much lower capacity to single-handedly carry a game, and you are instead limited by the weakest link on the team. Every NHL player can handle the puck reasonably, skate fairly quickly, and is a threat to shoot. Sometimes in the NBA, a highly valued player (all-star level even) such as Rajon Rondo shoots 30% from the free throw line and can't hit a 3-pointer to save his life. For myself, I was extremely frustrated in the bottom lane, feeling that I was consistently better than the enemy ADC but being limited to playing a farming game with my partner.

Towards Excellence
We failed to qualify for the NACC through CSL, and looked towards our next tournament. Leading up to it I had personally duo queued over 30 games with our support but things weren't quite clicking. I understood that the meta had shifted from what it was half a year ago, when essentially games were decided by who had a slightly better mid laner; it had become a derivative of the team's collective skill and effort instead. We decided that we needed a change-up in the roster and decided to move forward with a different support. Our recruitment was on the basis of skill, and each player since has been individually putting forth time to hone one's own skills. The team is re-initiating its approach to the game. All of us are working to become better friends with one another first, then sharpening our own talents to bring to the table, where we will hopefully make one last bid for the NACC. Now we also bring with ourselves the breadth of experience from the first run and are ready to take that knowledge with us into hopefully a new age. Eating 250 chicken nuggets among the team wasn't part of the plan, but who's going to say no to a 50 dollar feast?