Monday, November 24, 2014

Unreal Notes:

A list of things I wish I knew when I started. It seems like I did went through a lot of #%$@...

Q. When to move things from Blueprint to code?
When things are getting hard to read, or when you decide what something would be and won't change it anymore for gameplay purpose. For example, a raycast function for collision can be moved into C++ code, but a function that sets the health of player should stay in Blueprint.

Q: What are the most useful Blueprint functions?
Branch (the if statement for Blueprint) and Sequence (for executing multiple function block), Select is also important but it is confusing thus less useful.

Q: How should I use events?
Use Tick events wisely, don't put everything in there unless you have no other choices. Use delta time from tick events for timing.
When making events that have both a blueprint side and a C++ side, call the parent function at the end of your blueprint function block to execute C++ side.

Q: Some functions that I need to know how to use?
Select is pretty weird to use, you need to reset the pin type and set pin class to the one you want.

Q: Something about materials?
If in an online tutorial they have a black and white texture and you can't get it right using the exact same blueprint, try setting texture compression format and texture property to mask.
Use material instance to create the variant of the same material, and remember to set material parameters.
If you use a dynamic material, remember to keep a reference to it in your object to really change it dynamically.

Q: Something about post processing?
Check the Style tutorial and the ContentExample tutorial if you want a clean outline material.

Q: Something about AI?
 If you want to do a "stun" for NPCs, try to just eject the controller rather than setting up AI state in different AI trees, it works great if you don't have a more complex AI system in mind.
Now that I think about it, all crowd control effects should be dealt with as controller problems, as it should not change the AI behavior...Need more research.

Q: Something about particle?
Start by copying/pasting someone else's particle, disable different component and see how it goes. Don't create your own particle when you first start.
Don't set particle color to variable if you are not satisfied with the look of the particle. After setting it to variable, the preview window will not work.
Particle System means just one emitter, don't be fooled by the name.
In case you don't know, a particle is a flat rectangle that always faces the camera, a emitter is something that produces these rectangles.

 Q: Something about Matinee cinematic tool?
It is really easy to use if you had any Maya experience, follow the official tutorial. You only need some movement and camera track anyway.
Use two monitors will save you a lot of time.

Q: Something about the UI?
Use widgets and the interface is pretty self explanatory.  There isn't much tutorial about widgets but they are really easy to use. Use Blueprint events such as "on construct" to make your UI widget interact with your game.
For widgets, On Construct events are called WHEN ADDED TO VIEWPORT, not when they are "created". Convenient but hard to realize :/
Also, widget are referred to as "UUserWidget" in code.Remember to #include "UMG.h" and edit the <YourProjectName>.Build.cs file (should be inside your project folder) to have it include "UMG" by adding it like this: PublicDependencyModuleNames.AddRange(new string[] { " UMG"});
If that line already exists, just add UMG into the bracket.
When trying to change the content of the widget, choose the content and check the "variable" check box.

Q: Compilation and general concerns?
Removing a file in Visual Studio does NOT remove them from your project, use the solution mentioned here, rename the file and rebuild.
 Using int could cause unrecognizable type error because of reasons stated here, too bad we found it much too late :<

Game Design: Brick Monsters

This is a game I always wanted to do: a game of Pokemon meets Puzzle and Dragons where you adventure in the augmented reality world to find upgrade for your own pet monsters. It was largely inspired by Path of Exile (well doesn't look like it at all) in its gameplay. This design document was written for a project proposal that did not get passed, I might come back to revise it someday :3


Gameplay:

Brick Monster is a turn-based augmented reality RPG game for Android where players rise their own clan of monsters and use them to fight off evils both in the physical world and the virtual world.
Brick monsters are brick-like little monsters that has special ability to fight off evil. Their power, appearance, skill and attributes will change based on the user’s interaction with them. User can decide what their monsters will look like and develop into by feeding them different food gained in battles, and letting them interact with different physical environment.

Monsters has five attributes: fire, water, grass, light, dark. Attributes are numerical values and a monster can have any combination of attributes. Improving attributes will change a monster’s allowable body color range, the allowable body texture and the personality of monster. When a monster’s attribute exceeds certain value, it will also learn new skills. Each monster can only remember 4 skills at a time, if a new skill needs to be learned, an old skill has to be forgotten. Both feeding and interacting with monsters will change their attributes.

Monsters has no levels, but they have three stats: strength, intelligence and utility. Strength influence a monster’s health, intelligence influence its spell power, and utility influences its speed. Stats will also unlock “support skills” which grants new power to their skills and influence their look, and support skills will never be forgotten. The only way to improve stats is to feed them monster food.

(Concept of what a monster should look like)

While there is no level limit, feeding monster will make them grow in weight, and eventually reach a value where no food can be fed to the overweight monster.

When fighting in dungeons, users will need to organize a team of three monsters, then carefully choose their skill combination and team arrangement to fight off enemies. There are three team arrangement available: aggressive, defensive and normal, each amplify the damage received and dealt differently. The three monsters will have a combined health bar, but each will take action according to its utility value, just like in a traditional turn-based RPG.


 (Concept for the team arrangement, blue dots represents the monsters.)

More peaceful users can choose to keep their monsters as virtual pets. They will be able to scan the surrounding environment and have the monster showing up in the environment. Environment’s color and the real-world time will influence monster’s behavior, and if an image target is recognized, the monster will can interact with that image(e.g. playing with characters in an animation poster).
User will start off by making a default monster, given a few points to spend on different stats and choose only one basic attribute. The look and skill of the monster will be dependent on its attribute. To start battling, user can choose a dungeon from a list of dungeons provided by the game, or scan their surroundings and use their monster’s power to find dungeons. User can also start by interacting with their monsters and put them in certain physical environment, while interaction cannot directly provide stat boost, monsters can discover monster food in the scene that can be fed to the monster later. 

The game will be developed in Unity with Vuforia plug-in for augmented interaction.  I decided to use cube-shaped monsters so the textures can be easily swapped using Unity and animation would not be difficult, Scaleform plug-in might be used for better UI development.

Rationale and Innovation:
This game was designed to promote the use of augmented reality. It contains enough non-AR gameplay elements to attract users who are afraid to try new content, while provide enough benefits for those who tries to use AR and make it a meaningful add-on for the game.
Below is an example of how the brick monsters will show up in a real world scene using Vuforia
 
(The example was developed by me in less than 3 hours)

Brick Monster is a game where the players really decide what their characters are going to be. User will be able to choose their monster’s look and skill to make a real monster of their own, and no two monsters are going to be the same. While there are many virtual pet games out in the market, very few of them have a meaningful customize system that makes the user feel related to their character. Moreover, the games that allows customization are mostly focused either on the look or the battling ability, but not both.  Therefore, able to customize both the look and ability of the monster through battling and interaction will attract both hardcore users who like to try out different skill combination, and softcore users who would like to make their own monster that looks unique. The turn-based battle will be friendly to people of all ages as it does not require fast reaction, and allows user to put the game down at any time to pick it up later without fearing to lose, which is important for cell phone users.