Devlog 2: More Prototyping!!!


Art Style Definition & Character Concept

 

For this week, Vivien started defining and documenting each aspect of the art style, including the shapes, colours and textures for the Environment and the character. For that, we also explored concepts for our hungry costumer.

After some further research, we settled on the hand-painted stylized art style. A big inspiration for that was the game “Rayman Origins” and “Unruly Heroes”, which successfully combined 3D and 2D in a unique way. We also decided that our restaurant will be a small, cosy street restaurant with classical Chinese aesthetics.

The shapes of both models and sprites will have a sharp feel to it. Not to round, not to spiky. A good combination of both will give the feeling of an expressive and fun environment!

 Environment Shapes

Environment Shapes

The colours are highly inspired by classic Chinese colours: warm reds, yellows and oranges in the front with contrast to the cold, blueish background. We want our restaurant to look like nice for a place for a midnight snack!

 Environment Colors

Environment Color

But then we also had to think about who is going to receive all the yummy snacks?

Our plan is it to create a big, friendly character with a round body and a big mouth. The goal is it to motivate the player to make this cute looking costumer happy!

At the end we decided to go with a big chubby dragon. A perfect fit for our Chinese inspired environment.

If we have some extra time by the end of our project, we’d love to add additional costumers!

Character Concept

Character Concept

For the implementation in our game we are planning to go with a more unique approach, similar to the characters in “Rayman Origins”. The achieve the painted 2D style, we will split up the 2D character in several parts. Then, after preparing the sprite sheet for our character, we will unwrap each part on separate 3D planes. The layered planes will give a 3D illusion and allow for puppet-like animations. To get an idea of the workflow we set up a quick prototype:

 


Fake Soft Body using materials

Hey. So last week I (Koen) attempted to implement soft body physics using both Unity and Unreal, and I quickly found out doing it in Unreal was going to be quite tough. Actually making the mesh physically deform, despite my efforts, wasn't working, so I looked into other options.

One of these options is Mesh Distance Fields (distance from one mesh to another).
Using this distance you can quite easily make a mask out of it, to then use this to deform a mesh


As you can see it's far from perfect, but it's getting there. It's missing one major factor though contributing to a convincing effect: Jiggle.
I managed to fake this using a hit event, which would then generate a mask on the mesh showing where it got hit.
If you inverted this mask (aka the bits of the mesh that didn't get hit), and then used a curve on this bit to deform the mesh in a smooth fashion, you can get a somewhat convincing jiggle effect.
I combined both the Mesh Distance Fields with the jiggle effect, and got a decently convincing fake soft body effect (still needs some fine tuning as you can see, but you get the idea)

Mechanic Prototyping

Unity:

Hey there! Last week due to an accident I, Jonas, wasn't able to note down the parts of my side of prototyping the core mechanics of our game since I had nothing done, this week that is no more!

Since our game will be focused on picking up the food, I decided to focus on that first since otherwise there would be no game to play. It mostly went off without a hitch, only a slight tamper with the parent and their children world positions getting mixed up in the calculations of the position of the food when 2 chopsticks were grabbing the food.
This issue was quickly resolved by Lerping the position of the food on the halfway point of the 2 chopsticks.

In the example gif below you can see the results of the mechanic at work.

After establishing the picking up food would pose no longer a problem between 2 players, I decided to move on to making a gameobject that would spawn a random food every 'x' seconds interval.


Once  spawning food and picking it up was no longer a concern, I moved on to making a conveyor belt upon which the food will spawn in and move across the screen for the player to pick up.
This was done by adding a triggerbox on  a simple plane object and checking whether or not the object on top of the conveyor belt  was a food object or not, I just checked the tag of the gameobject to deduce that.

It worked out in the end as seen in the gif below.


The console was used to keep track of how many food objects are on the conveyor belt at any given time, to be sure if it worked correctly, I rammed my chopsticks in them and they weren't affected by the conveyor belts push.
However, when moving across them, the sticks seem to sometimes jitter or teleport further than they're supposed to, as of right now I have no idea what caused it.

One more thing that happened during the prototyping of the conveyor belt was that when checking for a rigidbody on the food object, it gave me a unexpected error


As it turned out, I use a parent node with all the logic for the food objects with a child node that only renders the mesh.
When I checked for a rigidbody of the gameobject laying on top of it in the behavior of the conveyor, it searched for one in both the parent and the child, this was easily fixed by changing the tag on the child to something other than 'food'. This way it only check the parent node tagged with food for a rigidbody, which it most definitely has.


Now that having food move and being able to pick that food up was done, it was time to make a customer that could feed upon the masterful dish you'd have created in that scenario.
I quickly made a customer with a triggerbox placed around the area of the mouth, it will register if a 'food' object enters it's mouth and whether or not it's being held by the players, only when the players let go of the food and let it fall into the mouth of the customer, will they eat.

Unreal:

Howdy, Hovo here! Last week's prototype got a lot of approvals, so this week I had the opportunity to add more features to our wonderful game.

One of the requirments for this project is the usage of Unreal c++ instead of blueprints. So first I spent some time converting the previous prototype to c++. This was easier than I expected and I got the hang of the c++ workflow in Unreal.

During our last dev meeting me and Jonas discussed the food attachement, more specifically different approaches that could also work. If you remember, last week I had collision attached to the bottom side of the chopsticks. I tried something else this time. 

Instead of having custom colliders, I let the chopsticks act as full on colliders. 

As you can see the food just jumps to the middle. While this can be resolved by improving the math behind it, I preferred not to spend too much time on this. Instead I went back to the previous approach, but fine-tuned it. Now the custom collider covers 1/4 of the chopstick.

Next, I implemented the conveyor belt. It has a USceneComponent where food gets spawned. When the food reaches the end it gets destroyed.  I tried to rotate the USceneComponent to make it's forward vector face the direction that I want the food to go to. Unfortunately the rotation could not be changed, so I hardcoded the direction for now. I will have to look into why the component can't be rotated. 


The result is what I wanted to see, but sadly I couldn't test the food picking up from a conveyor belt. It's hard controlling 2 controllers at the same time, so I have to wait until our next meeting to playtest it with the rest of the team.

To finalize this week's prototype, I added the long-awaited customer that craves food. We decided to have them "eat" the food when we drop the food in their mouth.  I check whether the food IsSimulatingPhysics and is inside the mouth collider. In that case, I destroy the food.

Files

StickySituation.zip 228 MB
May 29, 2023

Get Sticky Situation

Leave a comment

Log in with itch.io to leave a comment.